PWA: serviceworker wip

This commit is contained in:
Til Schmitter 2026-06-19 22:45:37 +02:00
parent d80f3b76c5
commit 4ce26d337a
2 changed files with 38 additions and 8 deletions

View file

@ -336,6 +336,7 @@ class HttpCli(object):
"""returns true if connection can be reused"""
self.out_headers = {
"Cache-Control": "no-store, max-age=0",
"Service-Worker-Allowed": "/",
}
if self.args.early_ban and self.is_banned():

View file

@ -1,10 +1,13 @@
// service worker. required for PWAs
// https://www.digitalapplied.com/blog/progressive-web-apps-2026-pwa-performance-guide
// Register service worker on page load
console.log('sw.js')
if ('serviceWorker' in navigator) {
console.log('sw load')
self.addEventListener("fetch", (event) => {
// Regular requests not related to Web Share Target.
if (event.request.method !== "POST" || !event.request.action.has("share-target")) {
console.log('normal response')
event.respondWith(fetch(event.request));
return;
}
@ -12,15 +15,41 @@ if ('serviceWorker' in navigator) {
// Requests related to Web Share Target.
event.respondWith(
(async () => {
const formData = await event.request.formData();
const files = formData.get("files") || "";
const responseUrl = '/'; // (ToDo: remember last upload dir)
// ToDo: keep file references in clipboard
// -> upload on paste
event.respondWith(fetch(event.request));
alert(files);
return;
const formData = await event.request.formData();
const files = formData.get("files") || "";
console.log('sw share:')
console.log(files)
await addResourcesToCache(files)
// const responseUrl = '/'; // (ToDo: remember last upload dir)
// ToDo: keep file references in clipboard
// (maybe read from cache on page load somehow)
// -> upload on paste
// Copy existing headers
const headers = new Headers(event.request.headers);
// Set a new header
var pw = await CookieStore.get('cppwd');
headers.set('pw', pw);
headers.delete('origin'); // 99% sure this doesn't work, but hey
const newRequest = new Request(event.request, {
mode: 'cors',
credentials: 'omit',
headers: headers
})
return fetch(newRequest)
})(),
);
});
self.addEventListener('install', (event) => {
console.log('sw wait skip')
self.skipWaiting(); // insta replace old service workers (helpful for dev)
});
const addResourcesToCache = async (resources) => {
const cache = await caches.open("files");
await cache.addAll(resources);
};
}