From 4dbeed933b212a6b1f3b078979cede8944c6841a Mon Sep 17 00:00:00 2001 From: LJ <23249107+LJNeon@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:18:11 -0700 Subject: [PATCH] chore(WebSocketShard): improve zlib-sync errors (#10808) * chore(WebSocketShard): improve zlib-sync errors * chore(WebSocketShard): move zlib-sync error numbers to constants file * chore(WebSocketShard): move enum, zlib-sync is lazily loaded --------- Co-authored-by: Almeida --- packages/ws/src/ws/WebSocketShard.ts | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 360e97413..ec786be29 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -668,10 +668,23 @@ export class WebSocketShard extends AsyncEventEmitter { this.zLibSyncInflate.push(Buffer.from(decompressable), flush ? zLibSync.Z_SYNC_FLUSH : zLibSync.Z_NO_FLUSH); if (this.zLibSyncInflate.err) { - this.emit( - WebSocketShardEvents.Error, - new Error(`${this.zLibSyncInflate.err}${this.zLibSyncInflate.msg ? `: ${this.zLibSyncInflate.msg}` : ''}`), - ); + // Must be here because zlib-sync is lazily loaded + const ZlibErrorCodes = { + [zLibSync.Z_NEED_DICT]: 'Z_NEED_DICT', + [zLibSync.Z_STREAM_END]: 'Z_STREAM_END', + [zLibSync.Z_ERRNO]: 'Z_ERRNO', + [zLibSync.Z_STREAM_ERROR]: 'Z_STREAM_ERROR', + [zLibSync.Z_DATA_ERROR]: 'Z_DATA_ERROR', + [zLibSync.Z_MEM_ERROR]: 'Z_MEM_ERROR', + [zLibSync.Z_BUF_ERROR]: 'Z_BUF_ERROR', + [zLibSync.Z_VERSION_ERROR]: 'Z_VERSION_ERROR', + } as const satisfies Record; + + // Try to match nodejs zlib errors as much as possible + const error: NodeJS.ErrnoException = new Error(this.zLibSyncInflate.msg ?? undefined); + error.errno = this.zLibSyncInflate.err; + error.code = ZlibErrorCodes[this.zLibSyncInflate.err]; + this.emit(WebSocketShardEvents.Error, error); } if (!flush) {