diff --git a/src/client.ts b/src/client.ts index 7c54e73533..ddd7fcb17a 100644 --- a/src/client.ts +++ b/src/client.ts @@ -88,7 +88,10 @@ import { initSFIP } from "@/sfip/index.js"; import { Protocoles } from "./protocoles.js"; import type { PrivateKey } from "@libp2p/interface"; import type { ServicesLibp2p } from "@/sfip/index.js"; -import type { ContenuMessageRejoindreCompte, statutDispositif } from "@/reseau.js"; +import type { + ContenuMessageRejoindreCompte, + statutDispositif, +} from "@/reseau.js"; import type { infoUtilisateur, objRôles } from "@/accès/types.js"; import type { SetDatabaseType } from "@orbitdb/set-db"; import type { OrderedKeyValueDatabaseType } from "@orbitdb/ordered-keyvalue-db"; @@ -983,6 +986,12 @@ export class Constellation { f: schémaFonctionSuivi; idCompte?: string; }): Promise { + const info: { + autorisés: string[]; + infos: statutDispositif[]; + idCompte?: string; + } = { autorisés: [], infos: [] }; + const fSuivi = async ({ id, fSuivreBd, @@ -990,6 +999,7 @@ export class Constellation { id: string; fSuivreBd: schémaFonctionSuivi; }): Promise => { + info.idCompte = id; const { orbite } = await this.attendreSfipEtOrbite(); const { bd, fOublier } = await orbite.ouvrirBdTypée({ id, @@ -1005,14 +1015,14 @@ export class Constellation { return faisRien; } else if (typeAccès === "contrôleur-constellation") { const contrôleurConstellation = accès as ContrôleurConstellation; - const fFinale = async () => { + const fFinaleSuiviCompte = async () => { const mods = contrôleurConstellation.gestRôles._rôles[MODÉRATEUR]; await fSuivreBd(mods); }; - contrôleurConstellation.gestRôles.on("misÀJour", fFinale); - fFinale(); + contrôleurConstellation.gestRôles.on("misÀJour", fFinaleSuiviCompte); + fFinaleSuiviCompte(); return async () => { - contrôleurConstellation.gestRôles.off("misÀJour", fFinale); + contrôleurConstellation.gestRôles.off("misÀJour", fFinaleSuiviCompte); await fOublier(); }; } else { @@ -1021,10 +1031,13 @@ export class Constellation { } }; - const info: {autorisés: string[]; infos: statutDispositif[]; idCompte?: string} = { autorisés: [], infos: []}; const fFinale = async () => { - if (!idCompte) return; - const autorisésEtAcceptés = info.autorisés.filter(id => info.infos.find(i=>i.infoDispositif.idDispositif === id)?.infoDispositif.idCompte === idCompte) + if (!info.idCompte) return; + const autorisésEtAcceptés = info.autorisés.filter( + (idDispositif) => + info.infos.find((i) => i.infoDispositif.idDispositif === idDispositif) + ?.infoDispositif?.idCompte === info.idCompte, + ); return await f(autorisésEtAcceptés); }; @@ -1041,11 +1054,25 @@ export class Constellation { return await this.suivreIdCompte({ f: fSuivreRacine }); } }, - f: ignorerNonDéfinis(async (x: string[]) => { info.autorisés = x; return await fFinale()}), - fSuivre: async ({id, fSuivreBd}: {id: string; fSuivreBd: schémaFonctionSuivi}) => {info.idCompte = id; return await fSuivi({id, fSuivreBd})}, + f: ignorerNonDéfinis(async (x: string[]) => { + info.autorisés = x; + return await fFinale(); + }), + fSuivre: fSuivi, }); - const fOublierInfosDispositifs = await this.réseau.suivreConnexionsDispositifs({f: async x => {info.infos = x; return await fFinale()}}) - return async () => {await Promise.all([fOublierDispositifsAutorisés(), fOublierInfosDispositifs()])}; + const fOublierInfosDispositifs = + await this.réseau.suivreConnexionsDispositifs({ + f: async (x) => { + info.infos = x; + return await fFinale(); + }, + }); + return async () => { + await Promise.all([ + fOublierDispositifsAutorisés(), + fOublierInfosDispositifs(), + ]); + }; } async nommerDispositif({ diff --git a/test/client.spec.ts b/test/client.spec.ts index a697e58af2..67c9f1caa6 100644 --- a/test/client.spec.ts +++ b/test/client.spec.ts @@ -74,7 +74,7 @@ describe("Fermeture sécuritaire", function () { }); if (isNode || isElectronMain) { - describe("Contrôle dispositifs", function () { + describe.only("Contrôle dispositifs", function () { let fOublierClients: () => Promise; let orbites: OrbitDbTest[]; let orbite2: OrbitDbTest, orbite3: OrbitDbTest; @@ -137,7 +137,7 @@ if (isNode || isElectronMain) { describe("Initiale", function () { it("Mon dispositif est présent", async () => { - const val = await mesDispositifs.attendreExiste(); + const val = await mesDispositifs.attendreQue(ids => ids?.length > 0); expect(val).to.have.members([idDispositif1]); }); });