diff --git a/index.html b/index.html index 795f24e..c4b449c 100644 --- a/index.html +++ b/index.html @@ -49,6 +49,19 @@
⚡ SOVEREIGNTY ⚡
+
diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..64fd994 --- /dev/null +++ b/sw.js @@ -0,0 +1,77 @@ +const CACHE_NAME = 'nexus-cache-v1'; +const ASSETS = [ + '/', + '/index.html', + '/app.js', + '/style.css', + '/manifest.json', + 'https://unpkg.com/three@0.183.0/build/three.module.js', + 'https://unpkg.com/three@0.183.0/examples/jsm/' // This might need to be more specific, or handled differently +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME) + .then((cache) => { + console.log('Opened cache'); + return cache.addAll(ASSETS); + }) + ); +}); + +self.addEventListener('fetch', (event) => { + const requestUrl = new URL(event.request.url); + + // Cache-first for assets + const isAsset = ASSETS.some(asset => event.request.url.includes(asset)); + + if (isAsset || requestUrl.origin === location.origin) { + event.respondWith( + caches.match(event.request) + .then((response) => { + if (response) { + return response; + } + return fetch(event.request) + .then((networkResponse) => { + // Only cache successful responses + if (networkResponse.ok) { + return caches.open(CACHE_NAME).then((cache) => { + cache.put(event.request, networkResponse.clone()); + return networkResponse; + }); + } + return networkResponse; + }); + }) + .catch(() => { + // Fallback for offline if no cache and no network + // This could be a more robust offline page if needed + return new Response('You are offline.'); + }) + ); + } else { + // Network-first for other requests (e.g., API calls) + event.respondWith( + fetch(event.request) + .catch(() => { + return caches.match(event.request); + }) + ); + } +}); + +self.addEventListener('activate', (event) => { + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + if (cacheName !== CACHE_NAME) { + console.log('Deleting old cache:', cacheName); + return caches.delete(cacheName); + } + }) + ); + }) + ); +});