self.addEventListener('install', () => { self.skipWaiting(); }); self.addEventListener('activate', (event) => { event.waitUntil(self.clients.claim()); }); self.addEventListener('push', (event) => { if (!event.data) return; const payload = event.data.json(); event.waitUntil( self.registration.showNotification(payload.title, { body: payload.body, icon: '/icons/icon-192.png', badge: '/icons/icon-192.png', tag: 'kc-task-done', data: { url: payload.url || '/dashboard.html' }, }) ); }); self.addEventListener('notificationclick', (event) => { event.notification.close(); const targetUrl = event.notification.data && event.notification.data.url; if (!targetUrl) return; event.waitUntil( self.clients.matchAll({ type: 'window', includeUncontrolled: true }).then((clients) => { const existing = clients.find((c) => { try { return new URL(c.url).pathname === new URL(targetUrl, self.location.origin).pathname; } catch { return false; } }); if (existing) return existing.focus(); return self.clients.openWindow(targetUrl); }) ); });