2026-04-18 16:38:09 +02:00
|
|
|
// 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<void> {
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
});
|
2026-04-18 16:44:48 +02:00
|
|
|
|
|
|
|
|
// 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' });
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-04-18 16:38:09 +02:00
|
|
|
}
|