fix: add binarytype support to websocket

This commit is contained in:
Percs 2024-10-20 23:25:38 -05:00
parent a105aa97ce
commit 15c75b4c36

View file

@ -65,9 +65,25 @@ export default function (client: ScramjetClient, self: typeof globalThis) {
barews.addEventListener("close", (ev) => { barews.addEventListener("close", (ev) => {
fakeEventSend(new CloseEvent("close", ev)); fakeEventSend(new CloseEvent("close", ev));
}); });
barews.addEventListener("message", (ev) => { barews.addEventListener("message", async (ev) => {
let payload = ev.data;
if (typeof payload === "string") {
// DO NOTHING
} else if ("byteLength" in payload) {
if (state.binaryType === "blob") {
payload = new Blob([payload]);
} else {
Object.setPrototypeOf(payload, ArrayBuffer.prototype);
}
} else if ("arrayBuffer" in payload) {
if (state.binaryType === "arraybuffer") {
payload = await payload.arrayBuffer();
Object.setPrototypeOf(payload, ArrayBuffer.prototype);
}
}
const fakeev = new MessageEvent("message", { const fakeev = new MessageEvent("message", {
data: ev.data, data: payload,
origin: ev.origin, origin: ev.origin,
lastEventId: ev.lastEventId, lastEventId: ev.lastEventId,
source: ev.source, source: ev.source,