mirror of
https://github.com/nestriness/nestri.git
synced 2025-12-12 16:55:37 +02:00
fix: Use images
This commit is contained in:
54
packages/www/src/assets/service-worker.js
Normal file
54
packages/www/src/assets/service-worker.js
Normal 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 });
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
1
packages/www/src/sst-env.d.ts
vendored
1
packages/www/src/sst-env.d.ts
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user