const CACHE_NAME = 'n3wt-school-v1'; const STATIC_ASSETS = [ '/', '/favicon.svg', '/favicon.ico', ]; self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME).then((cache) => cache.addAll(STATIC_ASSETS)) ); self.skipWaiting(); }); self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((keys) => Promise.all(keys.filter((key) => key !== CACHE_NAME).map((key) => caches.delete(key))) ) ); self.clients.claim(); }); self.addEventListener('fetch', (event) => { // Ne pas intercepter les requêtes API ou d'authentification const url = new URL(event.request.url); if ( url.pathname.startsWith('/api/') || url.pathname.startsWith('/_next/') || event.request.method !== 'GET' ) { return; } event.respondWith( fetch(event.request) .then((response) => { // Mettre en cache les réponses réussies des ressources statiques if (response.ok && url.origin === self.location.origin) { const cloned = response.clone(); caches.open(CACHE_NAME).then((cache) => cache.put(event.request, cloned)); } return response; }) .catch(() => caches.match(event.request)) ); });