fix: Use images

This commit is contained in:
Wanjohi
2025-06-13 13:57:43 +03:00
parent 88f499ba5e
commit 9827100d19
8 changed files with 109 additions and 5 deletions

View File

@@ -0,0 +1,54 @@
const CACHE_NAME = 'image-cache-v1';
const AUTH_TOKEN = 'Bearer YOUR_DYNAMIC_AUTH_TOKEN'; // Replace at runtime if needed
self.addEventListener('install', (event) => {
self.skipWaiting(); // Activate immediately
});
self.addEventListener('activate', (event) => {
clients.claim(); // Take control of all clients
});
self.addEventListener('fetch', (event) => {
const req = event.request;
// Only intercept image requests
if (req.destination !== 'image') return;
// Only intercept our image requests
const url = new URL(req.url);
if (import.meta.env.VITE_CDN_URL !== url.origin) return;
event.respondWith(handleImageRequest(req));
});
async function handleImageRequest(request) {
const cache = await caches.open(CACHE_NAME);
const cachedResponse = await cache.match(request);
if (cachedResponse) return cachedResponse;
// Clone and modify the request with Authorization header
const modifiedRequest = new Request(request.url, {
method: request.method,
headers: {
...Object.fromEntries(request.headers.entries()),
Authorization: AUTH_TOKEN,
},
cache: 'no-store',
mode: 'same-origin',
credentials: 'same-origin',
});
try {
const response = await fetch(modifiedRequest);
if (response.ok) {
await cache.put(request, response.clone());
}
return response;
} catch (err) {
return new Response('Image load failed', { status: 503 });
}
}

View File

@@ -17,6 +17,19 @@ if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
);
}
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker
.register('/src/assets/service-worker.js')
.then((reg) => {
console.log('[SW] Registered:', reg.scope);
})
.catch((err) => {
console.error('[SW] Registration failed:', err);
});
});
}
render(
() => (
<StorageProvider>

View File

@@ -4,6 +4,7 @@
/// <reference types="vite/client" />
interface ImportMetaEnv {
readonly VITE_API_URL: string
readonly VITE_CDN_URL: string
readonly VITE_STAGE: string
readonly VITE_AUTH_URL: string
readonly VITE_ZERO_URL: string