diff --git a/src/v1/signaling.test.ts b/src/v1/signaling.test.ts index a993a41..29de410 100644 --- a/src/v1/signaling.test.ts +++ b/src/v1/signaling.test.ts @@ -184,7 +184,7 @@ describe("Signaling websocket event handlers", () => { expect(ws.setAutoReconnect).not.toHaveBeenCalled(); }); - test("should clear ping interval and set isReady false on close", async () => { + test("should clear ping interval on close", async () => { // Trigger open first to set up pingInterval const openCallback = getWsCallback("open"); await openCallback(); @@ -192,7 +192,7 @@ describe("Signaling websocket event handlers", () => { const closeCallback = getWsCallback("close"); expect(closeCallback).toBeDefined(); - closeCallback(4000); + closeCallback(1001); expect((signaling as any).isReady).toBe(false); }); @@ -207,6 +207,29 @@ describe("Signaling websocket event handlers", () => { expect((signaling as any).ws).toBeNull(); expect((signaling as any).isReady).toBe(false); }); + + test("should not disconnect on the retryable close code 1001", async () => { + const closeCallback = getWsCallback("close"); + expect(closeCallback).toBeDefined(); + + closeCallback(1001); + + expect((signaling as any).ws).not.toBeNull(); + const ws = (signaling as any).ws; + expect(ws.setAutoReconnect).not.toHaveBeenCalled(); + }); + + test.each([4409, 1011, 4000])("should disable auto-reconnect and disconnect on close code %d", async (code) => { + const ws = (signaling as any).ws; + const closeCallback = getWsCallback("close"); + expect(closeCallback).toBeDefined(); + + closeCallback(code); + + expect(ws.setAutoReconnect).toHaveBeenCalledWith(false); + expect((signaling as any).ws).toBeNull(); + expect((signaling as any).isReady).toBe(false); + }); }); describe("Signaling disconnect", () => { diff --git a/src/v1/signaling.ts b/src/v1/signaling.ts index cd369bf..bb5d386 100644 --- a/src/v1/signaling.ts +++ b/src/v1/signaling.ts @@ -32,6 +32,13 @@ const FATAL_HANDSHAKE_ERRORS: Record