From 08bc930675dada8381186cd2963f41c16ab3a907 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Fri, 14 Nov 2025 10:21:55 +0100 Subject: [PATCH] Add a waiting of __PAIRING_READY flag in handleGetPairingId --- src/router.ts | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/router.ts b/src/router.ts index cd78019..8bc9e18 100755 --- a/src/router.ts +++ b/src/router.ts @@ -284,7 +284,6 @@ export async function registerAllListeners() { // --- Définitions des gestionnaires (Handlers) --- - const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); const handleRequestLink = async (event: MessageEvent) => { console.log(`[Router:API] 📨 Message ${MessageType.REQUEST_LINK} reçu de ${event.origin}`); @@ -300,6 +299,7 @@ export async function registerAllListeners() { console.log('[Router:API] Appareil non appairé. En attente du feu vert de home.ts...'); const maxWait = 5000; // 5 sec let waited = 0; + const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); // On attend le drapeau global while (!(window as any).__PAIRING_READY && waited < maxWait) { @@ -512,12 +512,32 @@ export async function registerAllListeners() { const handleGetPairingId = async (event: MessageEvent) => { console.log(`[Router:API] 📨 Message ${MessageType.GET_PAIRING_ID} reçu`); + console.log('[Router:API] GET_PAIRING_ID: Vérification du drapeau __PAIRING_READY...'); + const maxWait = 10000; // 10 sec (doit être > au timeout de handleRequestLink) + let waited = 0; + const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + + while (!(window as any).__PAIRING_READY && waited < maxWait) { + await delay(100); + waited += 100; + } + + if ((window as any).__PAIRING_READY === 'error') { + console.error('[Router:API] GET_PAIRING_ID: Auto-pairing (home.ts) a échoué.'); + throw new Error('Auto-pairing failed'); + } + if (!(window as any).__PAIRING_READY) { + console.error('[Router:API] GET_PAIRING_ID: Timeout en attente de __PAIRING_READY.'); + throw new Error('Auto-pairing timed out'); + } + + console.log('[Router:API] GET_PAIRING_ID: Feu vert de home.ts reçu. Polling de la BDD...'); const maxRetries = 10; const retryDelay = 300; let pairingId: string | null = null; - // Boucle de polling pour attendre la fin du Bug A (l'écriture) + // Boucle de polling (maintenant sécurisée après l'attente) for (let i = 0; i < maxRetries; i++) { // On lit DIRECTEMENT la BDD (la "source de vérité") const device = await services.getDeviceFromDatabase(); @@ -538,7 +558,10 @@ export async function registerAllListeners() { // Si la boucle se termine sans succès if (!pairingId) { console.error(`[Router:API] GET_PAIRING_ID: Échec final, non trouvé en BDD après ${maxRetries} tentatives.`); - throw new Error('Device not paired'); + // On vérifie si l'appareil existe (debug) + const finalDevice = await services.getDeviceFromDatabase(); + console.log("[Router:API] GET_PAIRING_ID: État final de l'appareil:", finalDevice); + throw new Error('Device not paired (post-wait)'); } const { accessToken } = event.data;