From 3a61ffe7a670e9b7011d41e91b3c3ab864715a93 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Wed, 12 Nov 2025 12:26:17 +0100 Subject: [PATCH] Automated the login with the iframe --- src/router.ts | 58 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/src/router.ts b/src/router.ts index e9bbb35..51b1e42 100755 --- a/src/router.ts +++ b/src/router.ts @@ -286,28 +286,32 @@ export async function registerAllListeners() { const handleRequestLink = async (event: MessageEvent) => { console.log(`[Router:API] 📨 Message ${MessageType.REQUEST_LINK} reçu de ${event.origin}`); + + // L'appel à requestLink() depuis l'AuthModal est désormais la confirmation. + // Nous n'avons plus besoin du modal manuel. + console.log(`[Router:API] Liaison auto-confirmée pour ${event.origin}.`); + const result = true; // Simule le clic sur "Ajouter un service" + + /* + // ANCIEN CODE SUPPRIMÉ : const modalService = await ModalService.getInstance(); const result = await modalService.showConfirmationModal( { title: 'Confirmation de liaison', - content: ` - - `, + content: `...`, confirmText: 'Ajouter un service', cancelText: 'Annuler', }, true, ); - + if (!result) { throw new Error('Failed to pair device: User refused to link'); } + */ + // Le reste de votre fonction s'exécute immédiatement : + // Génération des tokens et envoi au parent. const tokens = await tokenService.generateSessionToken(event.origin); window.parent.postMessage( { @@ -499,18 +503,48 @@ export async function registerAllListeners() { const handleGetPairingId = async (event: MessageEvent) => { console.log(`[Router:API] 📨 Message ${MessageType.GET_PAIRING_ID} reçu`); - if (!services.isPaired()) throw new Error('Device not paired'); + + const maxRetries = 10; + const retryDelay = 300; + let pairingId: string | null = null; + + for (let i = 0; i < maxRetries; i++) { + // On NE VÉRIFIE PAS services.isPaired() (qui est obsolète) + // On LIT DIRECTEMENT la BDD, comme le fait 'home.ts' + // (Je suppose que la méthode s'appelle 'getDeviceFromDatabase') + const device = await services.getDeviceFromDatabase(); + + // On vérifie si l'ID est maintenant présent dans la BDD + if (device && device.pairing_process_commitment) { + // SUCCÈS ! L'ID est dans la BDD + pairingId = device.pairing_process_commitment; + console.log(`[Router:API] GET_PAIRING_ID: ID trouvé en BDD (tentative ${i + 1}/${maxRetries})`); + break; // On sort de la boucle + } + + // Si non trouvé, on patiente (l'écriture est peut-être en cours) + console.warn(`[Router:API] GET_PAIRING_ID: Non trouvé en BDD, nouvelle tentative... (${i + 1}/${maxRetries})`); + await new Promise((resolve) => setTimeout(resolve, retryDelay)); + } + + // 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'); + } + + // Si on arrive ici, 'pairingId' contient l'ID const { accessToken } = event.data; if (!accessToken || !(await tokenService.validateToken(accessToken, event.origin))) { throw new Error('Invalid or expired session token'); } - const userPairingId = services.getPairingProcessId(); + // On renvoie l'ID qu'on vient de trouver window.parent.postMessage( { type: MessageType.GET_PAIRING_ID, - userPairingId, + userPairingId: pairingId, // Utiliser la variable 'pairingId' messageId: event.data.messageId, }, event.origin,