From 4b026c618ed6b40a22c0bf601b45e1da96d5bc5e Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 10 Apr 2023 14:15:33 +0200 Subject: new (useless) sw --- client-web/source/sw/download.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 client-web/source/sw/download.ts (limited to 'client-web/source/sw/download.ts') diff --git a/client-web/source/sw/download.ts b/client-web/source/sw/download.ts new file mode 100644 index 0000000..02c5e1a --- /dev/null +++ b/client-web/source/sw/download.ts @@ -0,0 +1,36 @@ +export const streams = new Map() + +export function handle_download_request(path: string, event: FetchEvent) { + const stream = streams.get(path) + if (stream) { + streams.delete(path) + console.log(`-> stream response`); + event.respondWith( + new Response( + stream.readable, + { + headers: new Headers({ + "content-type": "application/octet-stream; charset=utf-8", // TODO transmit and set accordingly + "content-security-policy": "default-src 'none'", + "content-length": `${stream.size}`, + }) + } + ) + ) + } + event.respondWith(new Response("download failed", { status: 400, headers: new Headers({ "content-type": "text/plain" }) })) +} + +export function port_to_readable(port: MessagePort): ReadableStream { + return new ReadableStream({ + start(controller) { + console.log("ReadableStream started"); + port.onmessage = event => { + if (event.data === "end") controller.close() + else if (event.data === "abort") controller.error("aborted") + else controller.enqueue(event.data) + } + }, + cancel() { console.log("ReadableStream cancelled"); port.postMessage({ abort: true }) }, + }) +} -- cgit v1.2.3-70-g09d2