mirror of
https://github.com/MercuryWorkshop/bare-mux.git
synced 2025-05-15 07:10:00 -04:00
fix websockets
This commit is contained in:
parent
5a5a5debdb
commit
95c4c25cbc
6 changed files with 88 additions and 45 deletions
2
dist/BareClient.d.ts
vendored
2
dist/BareClient.d.ts
vendored
|
@ -56,6 +56,6 @@ export declare class BareClient {
|
||||||
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
||||||
*/
|
*/
|
||||||
constructor();
|
constructor();
|
||||||
createWebSocket(remote: string | URL, protocols: string | string[] | undefined, webSocketImpl: WebSocketImpl, requestHeaders: BareHeaders): WebSocket;
|
createWebSocket(remote: string | URL, protocols: string | string[] | undefined, webSocketImpl: WebSocketImpl, requestHeaders: BareHeaders, arrayBufferImpl: typeof ArrayBuffer): WebSocket;
|
||||||
fetch(url: string | URL, init?: RequestInit): Promise<BareResponseFetch>;
|
fetch(url: string | URL, init?: RequestInit): Promise<BareResponseFetch>;
|
||||||
}
|
}
|
||||||
|
|
43
dist/bare.cjs
vendored
43
dist/bare.cjs
vendored
|
@ -106,7 +106,7 @@
|
||||||
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
||||||
*/
|
*/
|
||||||
constructor() { }
|
constructor() { }
|
||||||
createWebSocket(remote, protocols = [], webSocketImpl, requestHeaders) {
|
createWebSocket(remote, protocols = [], webSocketImpl, requestHeaders, arrayBufferImpl) {
|
||||||
let switcher = findSwitcher();
|
let switcher = findSwitcher();
|
||||||
let client = switcher.active;
|
let client = switcher.active;
|
||||||
if (!client)
|
if (!client)
|
||||||
|
@ -139,7 +139,15 @@
|
||||||
initialErrorHappened = true;
|
initialErrorHappened = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
let initialCloseHappened = false;
|
||||||
|
socket.addEventListener("close", (e) => {
|
||||||
|
if (!initialCloseHappened) {
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
initialCloseHappened = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
// TODO socket onerror will be broken
|
// TODO socket onerror will be broken
|
||||||
|
arrayBufferImpl = arrayBufferImpl || webSocketImpl.constructor.constructor("return ArrayBuffer")().prototype;
|
||||||
requestHeaders['Host'] = (new URL(remote)).host;
|
requestHeaders['Host'] = (new URL(remote)).host;
|
||||||
// requestHeaders['Origin'] = origin;
|
// requestHeaders['Origin'] = origin;
|
||||||
requestHeaders['Pragma'] = 'no-cache';
|
requestHeaders['Pragma'] = 'no-cache';
|
||||||
|
@ -156,20 +164,27 @@
|
||||||
}
|
}
|
||||||
}; // what the fuck is a meta
|
}; // what the fuck is a meta
|
||||||
socket.dispatchEvent(new Event("open"));
|
socket.dispatchEvent(new Event("open"));
|
||||||
}, (payload) => {
|
}, async (payload) => {
|
||||||
console.log(payload);
|
if (typeof payload === "string") {
|
||||||
if (payload.data) {
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: payload.data }));
|
}
|
||||||
return;
|
else if ("byteLength" in payload) {
|
||||||
|
if (socket.binaryType === "blob") {
|
||||||
|
payload = new Blob([payload]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
}
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
|
}
|
||||||
|
else if ("arrayBuffer" in payload) {
|
||||||
|
if (socket.binaryType === "arraybuffer") {
|
||||||
|
payload = await payload.arrayBuffer();
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
console.log(payload);
|
||||||
|
}
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
}
|
}
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// if (typeof payload === "string") {
|
|
||||||
// } else if (payload instanceof ArrayBuffer) {
|
|
||||||
// Object.setPrototypeOf(payload, ArrayBuffer);
|
|
||||||
//
|
|
||||||
// socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// } else if (payload instanceof Blob) {
|
|
||||||
// }
|
|
||||||
}, (code, reason) => {
|
}, (code, reason) => {
|
||||||
fakeReadyState = WebSocketFields.CLOSED;
|
fakeReadyState = WebSocketFields.CLOSED;
|
||||||
socket.dispatchEvent(new CloseEvent("close", { code, reason }));
|
socket.dispatchEvent(new CloseEvent("close", { code, reason }));
|
||||||
|
|
2
dist/bare.cjs.map
vendored
2
dist/bare.cjs.map
vendored
File diff suppressed because one or more lines are too long
43
dist/index.js
vendored
43
dist/index.js
vendored
|
@ -100,7 +100,7 @@ class BareClient {
|
||||||
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
* Create a BareClient. Calls to fetch and connect will wait for an implementation to be ready.
|
||||||
*/
|
*/
|
||||||
constructor() { }
|
constructor() { }
|
||||||
createWebSocket(remote, protocols = [], webSocketImpl, requestHeaders) {
|
createWebSocket(remote, protocols = [], webSocketImpl, requestHeaders, arrayBufferImpl) {
|
||||||
let switcher = findSwitcher();
|
let switcher = findSwitcher();
|
||||||
let client = switcher.active;
|
let client = switcher.active;
|
||||||
if (!client)
|
if (!client)
|
||||||
|
@ -133,7 +133,15 @@ class BareClient {
|
||||||
initialErrorHappened = true;
|
initialErrorHappened = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
let initialCloseHappened = false;
|
||||||
|
socket.addEventListener("close", (e) => {
|
||||||
|
if (!initialCloseHappened) {
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
initialCloseHappened = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
// TODO socket onerror will be broken
|
// TODO socket onerror will be broken
|
||||||
|
arrayBufferImpl = arrayBufferImpl || webSocketImpl.constructor.constructor("return ArrayBuffer")().prototype;
|
||||||
requestHeaders['Host'] = (new URL(remote)).host;
|
requestHeaders['Host'] = (new URL(remote)).host;
|
||||||
// requestHeaders['Origin'] = origin;
|
// requestHeaders['Origin'] = origin;
|
||||||
requestHeaders['Pragma'] = 'no-cache';
|
requestHeaders['Pragma'] = 'no-cache';
|
||||||
|
@ -150,20 +158,27 @@ class BareClient {
|
||||||
}
|
}
|
||||||
}; // what the fuck is a meta
|
}; // what the fuck is a meta
|
||||||
socket.dispatchEvent(new Event("open"));
|
socket.dispatchEvent(new Event("open"));
|
||||||
}, (payload) => {
|
}, async (payload) => {
|
||||||
console.log(payload);
|
if (typeof payload === "string") {
|
||||||
if (payload.data) {
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: payload.data }));
|
}
|
||||||
return;
|
else if ("byteLength" in payload) {
|
||||||
|
if (socket.binaryType === "blob") {
|
||||||
|
payload = new Blob([payload]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
}
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
|
}
|
||||||
|
else if ("arrayBuffer" in payload) {
|
||||||
|
if (socket.binaryType === "arraybuffer") {
|
||||||
|
payload = await payload.arrayBuffer();
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
console.log(payload);
|
||||||
|
}
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
}
|
}
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// if (typeof payload === "string") {
|
|
||||||
// } else if (payload instanceof ArrayBuffer) {
|
|
||||||
// Object.setPrototypeOf(payload, ArrayBuffer);
|
|
||||||
//
|
|
||||||
// socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// } else if (payload instanceof Blob) {
|
|
||||||
// }
|
|
||||||
}, (code, reason) => {
|
}, (code, reason) => {
|
||||||
fakeReadyState = WebSocketFields.CLOSED;
|
fakeReadyState = WebSocketFields.CLOSED;
|
||||||
socket.dispatchEvent(new CloseEvent("close", { code, reason }));
|
socket.dispatchEvent(new CloseEvent("close", { code, reason }));
|
||||||
|
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
|
@ -99,6 +99,7 @@ export class BareClient {
|
||||||
protocols: string | string[] | undefined = [],
|
protocols: string | string[] | undefined = [],
|
||||||
webSocketImpl: WebSocketImpl,
|
webSocketImpl: WebSocketImpl,
|
||||||
requestHeaders: BareHeaders,
|
requestHeaders: BareHeaders,
|
||||||
|
arrayBufferImpl: typeof ArrayBuffer,
|
||||||
): WebSocket {
|
): WebSocket {
|
||||||
let switcher = findSwitcher();
|
let switcher = findSwitcher();
|
||||||
let client = switcher.active;
|
let client = switcher.active;
|
||||||
|
@ -148,9 +149,16 @@ export class BareClient {
|
||||||
initialErrorHappened = true;
|
initialErrorHappened = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
let initialOnErrorHappenned = false;
|
let initialCloseHappened = false;
|
||||||
|
socket.addEventListener("close", (e) => {
|
||||||
|
if (!initialCloseHappened) {
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
initialCloseHappened = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
// TODO socket onerror will be broken
|
// TODO socket onerror will be broken
|
||||||
|
|
||||||
|
arrayBufferImpl = arrayBufferImpl || webSocketImpl.constructor.constructor("return ArrayBuffer")().prototype;
|
||||||
requestHeaders['Host'] = (new URL(remote)).host;
|
requestHeaders['Host'] = (new URL(remote)).host;
|
||||||
// requestHeaders['Origin'] = origin;
|
// requestHeaders['Origin'] = origin;
|
||||||
requestHeaders['Pragma'] = 'no-cache';
|
requestHeaders['Pragma'] = 'no-cache';
|
||||||
|
@ -174,20 +182,25 @@ export class BareClient {
|
||||||
}; // what the fuck is a meta
|
}; // what the fuck is a meta
|
||||||
socket.dispatchEvent(new Event("open"));
|
socket.dispatchEvent(new Event("open"));
|
||||||
},
|
},
|
||||||
(payload) => {
|
async (payload) => {
|
||||||
console.log(payload);
|
if (typeof payload === "string") {
|
||||||
if ((payload as any).data) {
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: (payload as any).data }));
|
} else if ("byteLength" in payload) {
|
||||||
return;
|
if (socket.binaryType === "blob") {
|
||||||
|
payload = new Blob([payload]);
|
||||||
|
} else {
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
|
} else if ("arrayBuffer" in payload) {
|
||||||
|
if (socket.binaryType === "arraybuffer") {
|
||||||
|
payload = await payload.arrayBuffer()
|
||||||
|
Object.setPrototypeOf(payload, arrayBufferImpl);
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
||||||
}
|
}
|
||||||
socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// if (typeof payload === "string") {
|
|
||||||
// } else if (payload instanceof ArrayBuffer) {
|
|
||||||
// Object.setPrototypeOf(payload, ArrayBuffer);
|
|
||||||
//
|
|
||||||
// socket.dispatchEvent(new MessageEvent("message", { data: payload }));
|
|
||||||
// } else if (payload instanceof Blob) {
|
|
||||||
// }
|
|
||||||
},
|
},
|
||||||
(code, reason) => {
|
(code, reason) => {
|
||||||
fakeReadyState = WebSocketFields.CLOSED;
|
fakeReadyState = WebSocketFields.CLOSED;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue