From 0fa6c06356e6e6cd899eb226b08e4f9d75a5c6a8 Mon Sep 17 00:00:00 2001 From: ingalls Date: Tue, 2 Dec 2025 14:00:35 -0700 Subject: [PATCH] Add Individual Calls for Resilience --- api/web/public/sw.js | 25 ++++++++++++++++++++----- api/web/src/workers/atlas-connection.ts | 4 ++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/api/web/public/sw.js b/api/web/public/sw.js index 5bd9519f0..3b841ad3a 100644 --- a/api/web/public/sw.js +++ b/api/web/public/sw.js @@ -10,13 +10,14 @@ self.addEventListener('install', (event) => { event.waitUntil((async () => { const cache = await caches.open(CACHE_NAME); + const assets = new Set(['/']); + try { const res = await fetch('./.vite/manifest.json'); + if (res.ok) { const manifest = await res.json(); - const assets = new Set(['/']); - Object.values(manifest).forEach((entry) => { if (entry.file && !entry.file.endsWith('.html')) { assets.add(entry.file); @@ -30,11 +31,25 @@ self.addEventListener('install', (event) => { assets.add(cssFile); } }); - - await cache.addAll(Array.from(assets)); } } catch (err) { - console.warn('Failed to pre-cache Vite chunks:', err); + console.warn('Failed to obtain Vite Manifest:', err); + } + + const urls = Array.from(assets); + + const results = await Promise.allSettled( + urls.map(url => cache.add(url)) + ); + + onst failedUrls = results + .filter(result => result.status === 'rejected') + .map((result, index) => urls[index]); + + if (failedUrls.length > 0) { + console.error('Failed to cache the following URLs:', failedUrls); + } else { + console.log('All resources cached successfully.'); } })()); }); diff --git a/api/web/src/workers/atlas-connection.ts b/api/web/src/workers/atlas-connection.ts index 597517f3b..13911edd0 100644 --- a/api/web/src/workers/atlas-connection.ts +++ b/api/web/src/workers/atlas-connection.ts @@ -168,7 +168,7 @@ export default class AtlasConnection { if (this.version !== status.version) { console.log(`Version change detected: ${this.version} -> ${status.version}`); - if (self.navigator.serviceWorker) { + if ('serviceWorker' in self.navigator) { const registration = await self.navigator.serviceWorker.ready; registration.update(); @@ -177,7 +177,7 @@ export default class AtlasConnection { console.log('No Service Worker available'); } } else { - if (self.navigator.serviceWorker) { + if ('serviceWorker' in self.navigator) { const regs = await self.navigator.serviceWorker.getRegistrations() if (!regs.some(reg => reg.active?.scriptURL.includes(`version=${status.version}`))) {