// @ts-nocheck self.addEventListener('fetch', (event) => { const url = new URL(event.request.url) const path = url.pathname.split('/') if(path[1] === 'sw'){ try { switch (path[2]){ case "check":{ let targetUrl = url const headers = event.request.headers const headerUrl = headers.get('x-register-url') if(headerUrl){ targetUrl.pathname = decodeURIComponent(headerUrl) } event.respondWith(checkCache(targetUrl)) break } case "img": { event.respondWith(getSource(url)) break } case "register": { let targetUrl = url const headers = event.request.headers const headerUrl = headers.get('x-register-url') if(headerUrl){ targetUrl.pathname = decodeURIComponent(headerUrl) } const noContentType = headers.get('x-no-content-type') === 'true' event.respondWith( registerCache(targetUrl, event.request.arrayBuffer(), noContentType) ) break } case "init":{ event.respondWith(new Response("v2")) } default: { event.respondWith(new Response( path[2] )) } } } catch (error) { event.respondWith(new Response(`${error}`)) } } if(path[1] === 'tf'){{ event.respondWith(new Response("Cannot find resource from cache", { status: 404 })) }} }) async function checkCache(url){ const cache = await caches.open('risuCache') return new Response(JSON.stringify({ "able": !!(await cache.match(url)) })) } async function getSource(url){ const cache = await caches.open('risuCache') return await cache.match(url) } async function check(){ } async function registerCache(urlr, buffer, noContentType = false){ const cache = await caches.open('risuCache') const url = new URL(urlr) if(!noContentType){ let path = url.pathname.split('/') path[2] = 'img' url.pathname = path.join('/') } const buf = new Uint8Array(await buffer) let headers = { "cache-control": "max-age=604800", "content-type": "image/png" } if(noContentType){ delete headers["content-type"] } await cache.put(url, new Response(buf, { headers })) return new Response(JSON.stringify({ "done": true })) }