Compare commits
No commits in common. "99e7793fbb607496b3e8fee5195c2ac4d9c5ce11" and "de7a55e7bca741617f620c20aa33d4dd05c99770" have entirely different histories.
99e7793fbb
...
de7a55e7bc
@ -39,7 +39,6 @@ const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
|
|||||||
* Elle est appelée par home-component.ts et reçoit le ShadowRoot.
|
* Elle est appelée par home-component.ts et reçoit le ShadowRoot.
|
||||||
*/
|
*/
|
||||||
export async function initHomePage(container: ShadowRoot): Promise<void> {
|
export async function initHomePage(container: ShadowRoot): Promise<void> {
|
||||||
(window as any).__PAIRING_READY = false;
|
|
||||||
|
|
||||||
if (!container) {
|
if (!container) {
|
||||||
console.error('[home.ts] 💥 ERREUR: Le shadowRoot est nul !');
|
console.error('[home.ts] 💥 ERREUR: Le shadowRoot est nul !');
|
||||||
@ -104,7 +103,6 @@ export async function initHomePage(container: ShadowRoot): Promise<void> {
|
|||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
console.error('[home.ts] Échec de la logique auto-pairing:', e);
|
console.error('[home.ts] Échec de la logique auto-pairing:', e);
|
||||||
addLoaderStep(container, `Erreur: ${e.message}`);
|
addLoaderStep(container, `Erreur: ${e.message}`);
|
||||||
(window as any).__PAIRING_READY = 'error';
|
|
||||||
// En cas d'erreur, on ne cache pas le loader
|
// En cas d'erreur, on ne cache pas le loader
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -116,7 +114,6 @@ export async function initHomePage(container: ShadowRoot): Promise<void> {
|
|||||||
if (mainContentDiv) mainContentDiv.style.display = 'block';
|
if (mainContentDiv) mainContentDiv.style.display = 'block';
|
||||||
|
|
||||||
console.log('[home.ts] Init terminée. L\'iframe est prête pour le requestLink().');
|
console.log('[home.ts] Init terminée. L\'iframe est prête pour le requestLink().');
|
||||||
(window as any).__PAIRING_READY = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -284,43 +284,30 @@ export async function registerAllListeners() {
|
|||||||
|
|
||||||
// --- Définitions des gestionnaires (Handlers) ---
|
// --- Définitions des gestionnaires (Handlers) ---
|
||||||
|
|
||||||
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
||||||
const handleRequestLink = async (event: MessageEvent) => {
|
const handleRequestLink = async (event: MessageEvent) => {
|
||||||
console.log(`[Router:API] 📨 Message ${MessageType.REQUEST_LINK} reçu de ${event.origin}`);
|
console.log(`[Router:API] 📨 Message ${MessageType.REQUEST_LINK} reçu de ${event.origin}`);
|
||||||
|
const modalService = await ModalService.getInstance();
|
||||||
|
const result = await modalService.showConfirmationModal(
|
||||||
|
{
|
||||||
|
title: 'Confirmation de liaison',
|
||||||
|
content: `
|
||||||
|
<div class="modal-confirmation">
|
||||||
|
<h3>Liaison avec ${event.origin}</h3>
|
||||||
|
<p>Vous êtes sur le point de lier l'identité numérique de la clé securisée propre à votre appareil avec ${event.origin}.</p>
|
||||||
|
<p>Cette action permettra à ${event.origin} d'intéragir avec votre appareil.</p>
|
||||||
|
<p>Voulez-vous continuer ?</p>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
confirmText: 'Ajouter un service',
|
||||||
|
cancelText: 'Annuler',
|
||||||
|
},
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
|
||||||
// 1. Vérifier si l'appareil est DÉJÀ appairé (cas de la 2ème connexion)
|
if (!result) {
|
||||||
const device = await services.getDeviceFromDatabase();
|
throw new Error('Failed to pair device: User refused to link');
|
||||||
|
|
||||||
if (device && device.pairing_process_commitment) {
|
|
||||||
console.log("[Router:API] Appareil déjà appairé. Pas besoin d'attendre home.ts.");
|
|
||||||
// On saute l'attente et on passe directement à la suite.
|
|
||||||
} else {
|
|
||||||
// 2. Cas de la 1ère connexion (appareil non appairé)
|
|
||||||
// On doit attendre que home.ts (auto-pairing) ait fini son travail.
|
|
||||||
console.log('[Router:API] Appareil non appairé. En attente du feu vert de home.ts...');
|
|
||||||
const maxWait = 5000; // 5 sec
|
|
||||||
let waited = 0;
|
|
||||||
|
|
||||||
// On attend le drapeau global
|
|
||||||
while (!(window as any).__PAIRING_READY && waited < maxWait) {
|
|
||||||
await delay(100);
|
|
||||||
waited += 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. Vérifier le résultat de l'attente
|
|
||||||
if ((window as any).__PAIRING_READY === 'error') {
|
|
||||||
throw new Error('Auto-pairing failed');
|
|
||||||
}
|
|
||||||
if (!(window as any).__PAIRING_READY) {
|
|
||||||
throw new Error('Auto-pairing timed out');
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`[Router:API] Feu vert de home.ts reçu !`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[Router:API] Traitement de la liaison...`);
|
|
||||||
const result = true; // Auto-confirmation
|
|
||||||
|
|
||||||
const tokens = await tokenService.generateSessionToken(event.origin);
|
const tokens = await tokenService.generateSessionToken(event.origin);
|
||||||
window.parent.postMessage(
|
window.parent.postMessage(
|
||||||
{
|
{
|
||||||
@ -512,44 +499,18 @@ export async function registerAllListeners() {
|
|||||||
|
|
||||||
const handleGetPairingId = async (event: MessageEvent) => {
|
const handleGetPairingId = async (event: MessageEvent) => {
|
||||||
console.log(`[Router:API] 📨 Message ${MessageType.GET_PAIRING_ID} reçu`);
|
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;
|
|
||||||
|
|
||||||
// Boucle de polling pour attendre la fin du Bug A (l'écriture)
|
|
||||||
for (let i = 0; i < maxRetries; i++) {
|
|
||||||
// On lit DIRECTEMENT la BDD (la "source de vérité")
|
|
||||||
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
|
|
||||||
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');
|
|
||||||
}
|
|
||||||
|
|
||||||
const { accessToken } = event.data;
|
const { accessToken } = event.data;
|
||||||
if (!accessToken || !(await tokenService.validateToken(accessToken, event.origin))) {
|
if (!accessToken || !(await tokenService.validateToken(accessToken, event.origin))) {
|
||||||
throw new Error('Invalid or expired session token');
|
throw new Error('Invalid or expired session token');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const userPairingId = services.getPairingProcessId();
|
||||||
window.parent.postMessage(
|
window.parent.postMessage(
|
||||||
{
|
{
|
||||||
type: MessageType.GET_PAIRING_ID,
|
type: MessageType.GET_PAIRING_ID,
|
||||||
userPairingId: pairingId,
|
userPairingId,
|
||||||
messageId: event.data.messageId,
|
messageId: event.data.messageId,
|
||||||
},
|
},
|
||||||
event.origin,
|
event.origin,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user