const CACHE_NAME = 'timetracker-test-v1'; const urlsToCache = ['/', '/index.html']; self.addEventListener('install', event => { console.log('[SW] Install'); event.waitUntil( caches.open(CACHE_NAME).then(cache => { console.log('[SW] Caching shell:', urlsToCache); return cache.addAll(urlsToCache); }).catch(err => console.error('[SW] Install failed:', err)) ); }); self.addEventListener('activate', event => { console.log('[SW] Activate'); event.waitUntil( caches.keys().then(cacheNames => Promise.all( cacheNames.map(name => { if (name !== CACHE_NAME) { console.log('[SW] Deleting old cache:', name); return caches.delete(name); } }) ) ) ); }); self.addEventListener('fetch', event => { if (event.request.method !== 'GET') return; event.respondWith( caches.match(event.request).then(cached => { if (cached) { console.log('[SW] Cache hit:', event.request.url); return cached; } return fetch(event.request).then(networkRes => { return networkRes; }).catch(err => { console.error('[SW] Fetch failed:', event.request.url, err); return new Response('Offline', { status: 503 }); }); }) ); });