// Registriert den Service-Worker und verdrahtet ihn mit dem // Sync-Status-Store. Im Dev-Modus läuft Kochwas über HTTP; die // SW-API ist da nur auf localhost verfügbar. SvelteKit liefert den // SW unter /service-worker.js im Production-Build. import { syncStatus, type SWMessage } from '$lib/client/sync-status.svelte'; export async function registerServiceWorker(): Promise { if (typeof navigator === 'undefined' || !('serviceWorker' in navigator)) return; try { await navigator.serviceWorker.register('/service-worker.js', { type: 'module' }); } catch (e) { console.warn('SW-Registrierung fehlgeschlagen', e); return; } navigator.serviceWorker.addEventListener('message', (event) => { const data = event.data as SWMessage | undefined; if (data && typeof data === 'object' && 'type' in data) { syncStatus.handle(data); } }); // Beim App-Start: wenn wir einen aktiven SW haben, frage ihn, ob er // neu synct (initial oder Delta). if (navigator.serviceWorker.controller) { navigator.serviceWorker.controller.postMessage({ type: 'sync-check' }); } else { // Erste Session: SW kommt erst mit dem nächsten Reload zum Einsatz. // Beim nächsten Start triggert sync-check dann den Initial-Sync. navigator.serviceWorker.ready.then((reg) => { reg.active?.postMessage({ type: 'sync-start' }); }); } }