const CACHE_NAME = 'rnotes-v1'; const PRECACHE = [ '/', '/manifest.json', '/icon-192.png', '/icon-512.png', ]; self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => cache.addAll(PRECACHE)) ); self.skipWaiting(); }); self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((names) => Promise.all(names.filter((n) => n !== CACHE_NAME).map((n) => caches.delete(n))) ) ); self.clients.claim(); }); self.addEventListener('fetch', (event) => { const url = new URL(event.request.url); // Always go to network for API calls if (url.pathname.startsWith('/api/')) return; // Network-first for pages, cache-first for static assets event.respondWith( fetch(event.request) .then((response) => { if (response.status === 200) { const clone = response.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(event.request, clone)); } return response; }) .catch(() => caches.match(event.request)) ); });