/* Service Worker de mensajería (Web Push) para Sky Balloons México. No hace caché de la app: solo escucha 'push' y 'notificationclick'. */ self.addEventListener("install", () => self.skipWaiting()); self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim())); self.addEventListener("push", (event) => { let payload = {}; try { payload = event.data ? event.data.json() : {}; } catch { payload = { title: "Sky Balloons México", body: event.data ? event.data.text() : "" }; } const titulo = payload.title || payload.titulo || "Sky Balloons México"; const opciones = { body: payload.body || payload.cuerpo || "", icon: payload.icon || "/icons/icon-192.png", badge: payload.badge || "/icons/icon-192.png", tag: payload.tag, data: { url: payload.url || (payload.data && payload.data.url) || "/" }, }; event.waitUntil(self.registration.showNotification(titulo, opciones)); }); self.addEventListener("notificationclick", (event) => { event.notification.close(); const destino = (event.notification.data && event.notification.data.url) || "/"; event.waitUntil( (async () => { const clientes = await self.clients.matchAll({ type: "window", includeUncontrolled: true }); for (const cliente of clientes) { if ("focus" in cliente) { await cliente.focus(); if ("navigate" in cliente) { try { await cliente.navigate(destino); } catch { /* ignorar */ } } return; } } await self.clients.openWindow(destino); })(), ); });