// Nombre del caché para la aplicación const CACHE_NAME = 'radius-nucleo-cache-v2'; // Archivos que se almacenarán en caché durante la instalación const URLS_TO_CACHE = [ '/', '/index.html', '/manifest.json', '/sw.js', // Iconos '/icons/icon-192.png', '/icons/icon-512.png', '/icons/icon-192-maskable.png', '/icons/icon-512-maskable.png', '/icons/icon-192-black.png', '/icons/icon-512-black.png', // Capturas de pantalla '/screenshots/screenshot-desktop.png', '/screenshots/screenshot-mobile.png' ]; // Evento de instalación: almacena los archivos definidos en la caché self.addEventListener('install', (event) => { event.waitUntil( caches.open(CACHE_NAME) .then((cache) => cache.addAll(URLS_TO_CACHE)) ); }); // Evento de activación: limpia los caches antiguos self.addEventListener('activate', (event) => { event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map((cacheName) => { if (cacheName !== CACHE_NAME) { return caches.delete(cacheName); } }) ); }) ); }); // Evento de recuperación (fetch): responde desde la caché si existe, si no, recupera de la red self.addEventListener('fetch', (event) => { // Excluir las peticiones a /api/* del Service Worker // Estas peticiones requieren autenticación y no deben ser cacheadas const url = new URL(event.request.url); if (url.pathname.startsWith('/api/')) { // Dejar que el navegador maneje las peticiones de API normalmente return; } event.respondWith( caches.match(event.request) .then((response) => { // Devuelve la respuesta en caché o realiza la solicitud a la red return response || fetch(event.request); }) ); });