Files
paseo/packages/app/src/runtime/websocket-transport.browser.test.ts
T
Mohamed Boudra a5184fd08a fix(app): keep browser relay WebSockets protocol-neutral (#2976)
Use the standard browser WebSocket constructor without the Node/React Native options object, while retaining the options-capable factory for supported runtimes and the desktop bridge.
2026-08-07 17:30:43 +08:00

45 lines
1.2 KiB
TypeScript

import { inject } from "vitest";
import { describe, expect, test } from "vitest";
import { createAppWebSocketFactory } from "./websocket-factory";
declare module "vitest" {
interface ProvidedContext {
passwordlessRelayUrl: string;
}
}
function openPasswordlessRelayConnection(url: string): Promise<WebSocket> {
const socket = createAppWebSocketFactory()(url, {
headers: {},
protocols: undefined,
});
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
socket.close();
reject(new Error("Timed out waiting for the passwordless relay connection"));
}, 2_000);
socket.addEventListener?.("open", () => {
clearTimeout(timeout);
resolve(socket as WebSocket);
});
socket.addEventListener?.("error", () => {
clearTimeout(timeout);
reject(new Error("Passwordless relay connection failed before open"));
});
});
}
describe("browser WebSocket transport", () => {
test("opens a passwordless relay-style connection when the server selects no subprotocol", async () => {
const socket = await openPasswordlessRelayConnection(inject("passwordlessRelayUrl"));
try {
expect(socket.protocol).toBe("");
} finally {
socket.close();
}
});
});