ihm_client/src/main.ts

67 lines
2.3 KiB
TypeScript

import Database from './services/database.service';
import Services from './services/service';
import { Router } from './router/index';
import './components/header/Header';
import './App';
import { IframeController } from './services/iframe-controller.service';
async function bootstrap() {
console.log("🚀 Démarrage de l'application 4NK...");
try {
// 1. Initialisation de la Base de données
const db = await Database.getInstance();
db.registerServiceWorker('/database.worker.js');
// 2. Initialisation des Services (WASM, Sockets...)
const services = await Services.getInstance();
// Injection du Header dans le slot prévu dans index.html
const headerSlot = document.getElementById('header-slot');
if (headerSlot) {
headerSlot.innerHTML = '<app-header></app-header>';
}
// Vérification basique de l'appareil (logique reprise de ton ancien router.ts)
const device = await services.getDeviceFromDatabase();
if (!device) {
console.log('✨ Nouvel appareil détecté, création en cours...');
await services.createNewDevice();
} else {
console.log("Restauration de l'appareil...");
services.restoreDevice(device);
}
// Initialisation du contrôleur d'Iframe (API listeners)
await IframeController.init();
// 3. Restauration des données
await services.restoreProcessesFromDB();
await services.restoreSecretsFromDB();
// 4. Connexion réseau
await services.connectAllRelays();
// 5. Démarrage du Routeur (Affichage de la page)
const isIframe = window.self !== window.top;
// On redirige vers 'process' SEULEMENT si on est appairé ET qu'on n'est PAS dans une iframe
if (services.isPaired() && !isIframe) {
console.log('✅ Mode Standalone & Appairé : Redirection vers Process.');
window.history.replaceState({}, '', 'process');
Router.handleLocation();
} else {
// Cas 1 : Pas appairé
// Cas 2 : Mode Iframe (même si appairé, on reste sur Home pour attendre le parent)
console.log(isIframe ? '📡 Mode Iframe détecté : Démarrage sur Home pour attente API.' : '🆕 Non appairé : Démarrage sur Home.');
Router.init();
}
} catch (error) {
console.error('💥 Erreur critique au démarrage :', error);
}
}
// Lancement
bootstrap();