fetch working

This commit is contained in:
Toshit Chawda 2024-07-07 01:11:13 -07:00
commit 5355f49957
No known key found for this signature in database
GPG key ID: 91480ED99E2B3D9D
10 changed files with 904 additions and 0 deletions

42
src/worker.ts Normal file
View file

@ -0,0 +1,42 @@
import { BareTransport } from "./baretypes";
import { WorkerMessage } from "./connection"
let currentTransport: BareTransport | null = null;
function handleConnection(port: MessagePort) {
port.onmessage = async (event: MessageEvent) => {
const port = event.data.port;
const message: WorkerMessage = event.data.message;
if (message.type === "set") {
const func = new Function(message.client);
currentTransport = await func();
console.log("set transport to ", currentTransport);
port.postMessage({ type: "set" });
} else if (message.type === "fetch") {
try {
if (!currentTransport) throw new Error("No BareTransport was set. Try creating a BareMuxConnection and calling set() on it.");
if (!currentTransport.ready) await currentTransport.init();
const resp = await currentTransport.request(
new URL(message.fetch.remote),
message.fetch.method,
message.fetch.body,
message.fetch.headers,
null
);
if (resp.body instanceof ReadableStream || resp.body instanceof ArrayBuffer) {
port.postMessage({ type: "fetch", fetch: resp }, [resp.body]);
} else {
port.postMessage({ type: "fetch", fetch: resp });
}
} catch (err) {
port.postMessage({ type: "error", error: err });
}
}
}
}
// @ts-expect-error
self.onconnect = (event: MessageEvent) => {
handleConnection(event.ports[0])
}