/// import { cleanupOutdatedCaches, precacheAndRoute } from 'workbox-precaching'; import { registerRoute } from 'workbox-routing'; import { NetworkFirst } from 'workbox-strategies'; declare const self: ServiceWorkerGlobalScope; cleanupOutdatedCaches(); precacheAndRoute(self.__WB_MANIFEST); // PocketBase API: NetworkFirst (offline-fähig aus Cache) registerRoute( ({ url }) => url.hostname === 'api.vereins.haus', new NetworkFirst({ cacheName: 'pocketbase-api', networkTimeoutSeconds: 5, }), ); self.addEventListener('push', (event) => { const data = event.data?.json() ?? {}; const title = data.title ?? 'vereins.haus'; const options: NotificationOptions = { body: data.body ?? '', icon: '/icons/icon-192.png', badge: '/icons/icon-192.png', tag: data.tag ?? 'vereinshaus', data: { url: data.url ?? '/nachrichten' }, }; event.waitUntil(self.registration.showNotification(title, options)); }); self.addEventListener('notificationclick', (event) => { event.notification.close(); const url = (event.notification.data as { url: string })?.url ?? '/'; event.waitUntil( self.clients .matchAll({ type: 'window', includeUncontrolled: true }) .then((list) => { const existing = list.find((c) => c.url.includes(url)); if (existing) return existing.focus(); return self.clients.openWindow(url); }), ); });