From 94d0dcc32bc9b1685602d530db0268b65fbeca06 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Tue, 23 Jul 2024 21:00:18 +0700 Subject: [PATCH] fix(packages/api): misleading errors being thrown --- packages/api/src/classes/ClientWebSocket.ts | 35 ++++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/packages/api/src/classes/ClientWebSocket.ts b/packages/api/src/classes/ClientWebSocket.ts index 2383868..2df482d 100755 --- a/packages/api/src/classes/ClientWebSocket.ts +++ b/packages/api/src/classes/ClientWebSocket.ts @@ -53,23 +53,34 @@ export class ClientWebSocketManager { } }, this.timeout) - this.#socket.on('open', () => { - this.disconnected = false - clearTimeout(timeout) - this.#listen() - rs() - }) - - this.#socket.on('error', err => { - clearTimeout(timeout) + const errorBeforeReadyHandler = (err: Error) => { + cleanup() throw err - }) + } - this.#socket.on('close', (code, reason) => { + const closeBeforeReadyHandler = (code: number, reason: Buffer) => { clearTimeout(timeout) this._handleDisconnect(code, reason.toString()) throw new Error('WebSocket connection closed before ready') - }) + } + + const readyHandler = () => { + this.disconnected = false + cleanup() + this.#listen() + rs() + } + + const cleanup = () => { + this.#socket.off('open', readyHandler) + this.#socket.off('close', closeBeforeReadyHandler) + this.#socket.off('error', errorBeforeReadyHandler) + clearTimeout(timeout) + } + + this.#socket.on('open', readyHandler) + this.#socket.on('error', errorBeforeReadyHandler) + this.#socket.on('close', closeBeforeReadyHandler) } catch (e) { rj(e) }