// Service Worker for Web Push notifications (PBI-55) self.addEventListener('push', (event) => { let payload = { title: 'Scrum4Me', body: '', url: '/', tag: undefined } try { if (event.data) payload = { ...payload, ...event.data.json() } } catch (_) {} event.waitUntil( self.registration.showNotification(payload.title, { body: payload.body, icon: '/icon-192.png', badge: '/icon-192.png', tag: payload.tag, data: { url: payload.url }, }) ) }) self.addEventListener('notificationclick', (event) => { event.notification.close() const rawUrl = event.notification.data?.url || '/' const targetUrl = new URL(rawUrl, self.location.origin) // Same-origin guard if (targetUrl.origin !== self.location.origin) return event.waitUntil( self.clients .matchAll({ type: 'window', includeUncontrolled: true }) .then((clients) => { for (const client of clients) { if (client.url.startsWith(self.location.origin) && 'focus' in client) { client.navigate(targetUrl.href) return client.focus() } } return self.clients.openWindow(targetUrl.href) }) ) })