import { precacheAndRoute } from "workbox-precaching"; // Precaching configuration for PWA assets precacheAndRoute(self.__WB_MANIFEST); // Version const VERSION = "1.0.2"; // Service Worker Installation self.addEventListener("install", (event) => { self.skipWaiting(); }); // Service Worker Activation self.addEventListener("activate", (event) => { event.waitUntil( (async () => { const clients = await self.clients.matchAll({ type: "window" }); // Notify all open clients about the version clients.forEach((client) => client.postMessage({ type: "VERSION_CHECK", version: VERSION }) ); self.clients.claim(); console.log("Service Worker Activated (Version: " + VERSION + ")"); })() ); }); // Push Notification Handler for Django Web Push self.addEventListener("push", (event) => { try { const payload = event.data?.json() || { title: "New Notification", body: "You have a new message", icon: "/logo-192x192.png", data: { url: "/" }, }; event.waitUntil( self.registration.showNotification(payload.title, { body: payload.body, icon: payload.icon || "/logo-192x192.png", data: payload.data, }) ); } catch (error) { console.error("Push handling failed:", error); } }); // Notification Click Handler self.addEventListener("notificationclick", (event) => { event.notification.close(); event.waitUntil(clients.openWindow(event.notification.data?.url || "/")); }); self.addEventListener("message", (event) => { if (event.data === "SKIP_WAITING") { self.skipWaiting(); } });