socios-comerciales.skyballo.../astro-partner-hub-main/public/sw.js

51 lines
1.6 KiB
JavaScript

/* 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);
})(),
);
});