const CACHE_NAME = "multica-v1"; // App shell resources to precache const PRECACHE_URLS = ["/~offline"]; self.addEventListener("install", (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE_URLS)) ); self.skipWaiting(); }); self.addEventListener("activate", (event) => { // Clean up old caches event.waitUntil( caches.keys().then((names) => Promise.all( names .filter((name) => name !== CACHE_NAME) .map((name) => caches.delete(name)) ) ) ); self.clients.claim(); }); self.addEventListener("fetch", (event) => { // Only handle navigation requests (HTML pages) if (event.request.mode === "navigate") { event.respondWith( fetch(event.request).catch(() => caches.match("/~offline").then( (response) => response || new Response("Offline", { status: 503, statusText: "Offline" }) ) ) ); } });