96 lines
2.8 KiB
JavaScript
96 lines
2.8 KiB
JavaScript
// @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
|
|
}))
|
|
} |