// Service Worker para PWA con detección de actualizaciones // IMPORTANTE: Actualizar esta versión cada vez que se despliegue una nueva versión const CACHE_NAME = 'ayutec-v1.3.2'; const urlsToCache = [ '/', '/index.html' ]; // Instalación del service worker self.addEventListener('install', (event) => { console.log('Service Worker: Installing version', CACHE_NAME); event.waitUntil( caches.open(CACHE_NAME) .then((cache) => { console.log('Service Worker: Caching files'); return cache.addAll(urlsToCache); }) // NO hacer skipWaiting automáticamente - esperar a que el usuario lo active ); }); // Activación del service worker self.addEventListener('activate', (event) => { console.log('Service Worker: Activating...'); event.waitUntil( caches.keys().then((cacheNames) => { return Promise.all( cacheNames.map((cacheName) => { if (cacheName !== CACHE_NAME) { console.log('Service Worker: Deleting old cache:', cacheName); return caches.delete(cacheName); } }) ); }) // NO hacer claim automáticamente - solo cuando el usuario actualice manualmente ); }); // Estrategia: Network First, fallback to Cache self.addEventListener('fetch', (event) => { event.respondWith( fetch(event.request) .then((response) => { // Clone la respuesta const responseToCache = response.clone(); // Actualizar cache con la nueva respuesta caches.open(CACHE_NAME).then((cache) => { cache.put(event.request, responseToCache); }); return response; }) .catch(() => { // Si falla la red, usar cache return caches.match(event.request); }) ); }); // Mensaje para notificar actualización self.addEventListener('message', (event) => { if (event.data && event.data.type === 'SKIP_WAITING') { self.skipWaiting(); } });