From 3d9c4fbb3403ccda1b08f2920447d783b846ee2c Mon Sep 17 00:00:00 2001 From: Sergii Date: Thu, 9 Oct 2025 04:17:53 +0300 Subject: [PATCH] fix: ensure provider-proxy does not crash when socket is closed during cert verification --- apps/provider-proxy/src/services/WebsocketServer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/provider-proxy/src/services/WebsocketServer.ts b/apps/provider-proxy/src/services/WebsocketServer.ts index 74233b6b23..1f35fded24 100644 --- a/apps/provider-proxy/src/services/WebsocketServer.ts +++ b/apps/provider-proxy/src/services/WebsocketServer.ts @@ -262,6 +262,7 @@ export class WebsocketServer { const pws = this.connectWebSocket(url, options); this.openProviderSockets[options.wsId] = { ws: pws, verification: "in-progress" }; + const wsDetails = this.openProviderSockets[options.wsId]; pws.on( "upgrade", @@ -270,7 +271,7 @@ export class WebsocketServer { const socket = response.socket && response.socket instanceof TLSSocket ? response.socket : undefined; if (socket?.authorized) { // CA validation is successful, so certificate is not self-signed - this.openProviderSockets[options.wsId].verification = "finished"; + wsDetails.verification = "finished"; pws.emit("verified"); return; } @@ -307,7 +308,7 @@ export class WebsocketServer { pws.removeAllListeners("message"); pws.removeAllListeners("verified"); - this.openProviderSockets[options.wsId].verification = "failed"; + wsDetails.verification = "failed"; pws.close(WS_ERRORS.VIOLATED_POLICY, `invalidCertificate.${result.code}`); this.logger?.warn({ event: "PROVIDER_INVALID_CERTIFICATE", @@ -317,9 +318,8 @@ export class WebsocketServer { providerAddress: options.providerAddress }); } else { - // ensure that socket was not closed while its certificate was validating - if (pws.readyState === WebSocket.OPEN && this.openProviderSockets[options.wsId]) { - this.openProviderSockets[options.wsId].verification = "finished"; + if (pws.readyState === WebSocket.OPEN && Object.hasOwn(this.openProviderSockets, options.wsId)) { + wsDetails.verification = "finished"; pws.emit("verified"); this.logger?.debug({ event: "PROVIDER_CERTIFICATE_VERIFIED", @@ -344,7 +344,7 @@ export class WebsocketServer { }) ); - return this.openProviderSockets[options.wsId]; + return wsDetails; } private connectWebSocket(url: string, options: CreateProviderSocketOptions) {