const CACHE = "budget-commun-v2"; const ASSETS = ["/", "/index.html", "/manifest.json"]; self.addEventListener("install", e => { e.waitUntil(caches.open(CACHE).then(c => c.addAll(ASSETS))); self.skipWaiting(); }); self.addEventListener("activate", e => { e.waitUntil(caches.keys().then(keys => Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k))) )); self.clients.claim(); }); self.addEventListener("fetch", e => { // API calls: network only if (e.request.url.includes("/api/")) return; // Static: cache first e.respondWith( caches.match(e.request).then(cached => cached || fetch(e.request)) ); });