From ff82c4106856cfe81f2eed3164d8a9dfd42acebf Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Mon, 20 Jan 2025 13:24:01 +0100 Subject: [PATCH 1/3] chore: trace log for the ws endpoint --- packages/client/src/rtc/signal.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/client/src/rtc/signal.ts b/packages/client/src/rtc/signal.ts index 5d4e68e959..4803b0d73d 100644 --- a/packages/client/src/rtc/signal.ts +++ b/packages/client/src/rtc/signal.ts @@ -9,6 +9,7 @@ export const createWebSocketSignalChannel = (opts: { }) => { const { endpoint, onMessage, logTag } = opts; const logger = getLogger(['SfuClientWS', logTag]); + logger('debug', 'Creating signaling WS channel:', endpoint); const ws = new WebSocket(endpoint); ws.binaryType = 'arraybuffer'; // do we need this? From 3791465427702b174e1de16657b17e9d09d4ad72 Mon Sep 17 00:00:00 2001 From: Matvei Andrienko Date: Mon, 20 Jan 2025 13:24:29 +0100 Subject: [PATCH 2/3] reject signal ready on ws closure --- packages/client/src/StreamSfuClient.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/client/src/StreamSfuClient.ts b/packages/client/src/StreamSfuClient.ts index 0434cc6fce..8c91b8ca8d 100644 --- a/packages/client/src/StreamSfuClient.ts +++ b/packages/client/src/StreamSfuClient.ts @@ -227,15 +227,19 @@ export class StreamSfuClient { }, }); - this.signalWs.addEventListener('close', this.handleWebSocketClose); - this.signalReady = makeSafePromise( Promise.race([ - new Promise((resolve) => { + new Promise((resolve, reject) => { const onOpen = () => { this.signalWs.removeEventListener('open', onOpen); resolve(this.signalWs); }; + + this.signalWs.addEventListener('close', () => { + reject(); + this.handleWebSocketClose(); + }); + this.signalWs.addEventListener('open', onOpen); }), From ebdd50e21804b5d89e8a021b256ed384d618a6d1 Mon Sep 17 00:00:00 2001 From: Matvei Andrienko Date: Mon, 20 Jan 2025 14:23:45 +0100 Subject: [PATCH 3/3] add error message --- packages/client/src/StreamSfuClient.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/client/src/StreamSfuClient.ts b/packages/client/src/StreamSfuClient.ts index 8c91b8ca8d..d3d2b21f18 100644 --- a/packages/client/src/StreamSfuClient.ts +++ b/packages/client/src/StreamSfuClient.ts @@ -235,12 +235,15 @@ export class StreamSfuClient { resolve(this.signalWs); }; + this.signalWs.addEventListener('open', onOpen); + this.signalWs.addEventListener('close', () => { - reject(); this.handleWebSocketClose(); + // Normally, this shouldn't have any effect, because WS should never emit 'close' + // before emitting 'open'. However, strager things have happened, and we don't + // want to leave signalReady in pending state. + reject(new Error('SFU WS closed unexpectedly')); }); - - this.signalWs.addEventListener('open', onOpen); }), new Promise((resolve, reject) => {