From a4116036be5bca0501b3796f147990721de1ac3f Mon Sep 17 00:00:00 2001 From: Denis-Adrian Cristea Date: Tue, 8 Sep 2026 18:49:13 +0300 Subject: [PATCH] refactor(WebSocketShard): clear ws session only when explicitly reconnecting (#11601) * refactor(WebSocketShard): clear ws session when explicitly reconnecting * fix(ws): check for .resuming code * fix(ws): actually correct clear logic * refactor: flip Co-authored-by: Almeida --------- Co-authored-by: Almeida Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/ws/src/ws/WebSocketManager.ts | 6 ++++++ packages/ws/src/ws/WebSocketShard.ts | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/ws/src/ws/WebSocketManager.ts b/packages/ws/src/ws/WebSocketManager.ts index 9f8381fb9..0529a9e18 100644 --- a/packages/ws/src/ws/WebSocketManager.ts +++ b/packages/ws/src/ws/WebSocketManager.ts @@ -379,6 +379,12 @@ export class WebSocketManager extends AsyncEventEmitter i this.#token = token; } + /** + * Destroys all shards + * + * @remarks + * To keep the shard(s) resumable, use the {@link CloseCodes.Resuming} code. + */ public destroy(options?: Omit) { return this.strategy.destroy(options); } diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 4ea628389..5aa7a10d9 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -360,7 +360,10 @@ export class WebSocketShard extends AsyncEventEmitter { this.failedToConnectDueToNetworkError = false; // Clear session state if applicable - if (options.recover !== WebSocketShardDestroyRecovery.Resume) { + if ( + (options.recover !== WebSocketShardDestroyRecovery.Resume && options.code !== CloseCodes.Resuming) || + options.code === CloseCodes.Normal + ) { await this.strategy.updateSessionInfo(this.id, null); }