From e1639f70dff81dcb62a542e24a319e23138eaa21 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Thu, 18 Sep 2025 20:37:02 -0400 Subject: [PATCH] fix null safety in StreamingApiServerService.ts --- .../server/api/StreamingApiServerService.ts | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/backend/src/server/api/StreamingApiServerService.ts b/packages/backend/src/server/api/StreamingApiServerService.ts index 42c0ef58f2..c615509ef9 100644 --- a/packages/backend/src/server/api/StreamingApiServerService.ts +++ b/packages/backend/src/server/api/StreamingApiServerService.ts @@ -35,7 +35,7 @@ const MAX_CONNECTIONS_PER_CLIENT = 32; @Injectable() export class StreamingApiServerService implements OnApplicationShutdown { - #wss: WebSocket.WebSocketServer; + #wss?: WebSocket.WebSocketServer; #connections = new Map(); #connectionsByClient = new Map>(); // key: IP / user ID -> value: connection #cleanConnectionsIntervalId: NodeJS.Timeout | null = null; @@ -100,7 +100,7 @@ export class StreamingApiServerService implements OnApplicationShutdown { @bindThis public attach(server: http.Server): void { - this.#wss = new WebSocket.WebSocketServer({ + const wss = this.#wss = new WebSocket.WebSocketServer({ noServer: true, perMessageDeflate: this.config.websocketCompression, }); @@ -212,7 +212,7 @@ export class StreamingApiServerService implements OnApplicationShutdown { await stream.init(); - this.#wss.handleUpgrade(request, socket, head, (ws) => { + wss.handleUpgrade(request, socket, head, (ws) => { connectionsForClient.add(ws); // Call before emit() in case it throws an error. @@ -241,7 +241,7 @@ export class StreamingApiServerService implements OnApplicationShutdown { }; ws.on('error', onWsInitError); - this.#wss.emit('connection', ws, request, { + wss.emit('connection', ws, request, { stream, user, app, }); ws.off('error', onWsInitError); @@ -321,14 +321,18 @@ export class StreamingApiServerService implements OnApplicationShutdown { this.#connectionsByClient.clear(); await new Promise((resolve, reject) => { - this.#wss.close(err => { - if (err) reject(err); - else resolve(); - }); + if (this.#wss) { + this.#wss.close(err => { + if (err) reject(err); + else resolve(); + }); + } else { + resolve(); + } }); // Don't disconnect this until *after* close returns - this.#wss.off('error', this.onWsError); + this.#wss?.off('error', this.onWsError); } @bindThis