From 8c782bfd52b1d7bbfbf1dfd39d0c45828298e285 Mon Sep 17 00:00:00 2001 From: David Malchin Date: Sat, 15 Jul 2023 13:55:05 +0300 Subject: [PATCH] fix(WebSocketShard): close errors not being catchable (#9704) * fix(WebSocketShard): close errors not being catchable * fix(WebSocketShard): requested changes --- packages/ws/src/ws/WebSocketShard.ts | 32 ++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 7b34f6a99..924ed1a66 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -143,6 +143,8 @@ export class WebSocketShard extends AsyncEventEmitter { try { await promise; + } catch ({ error }: any) { + throw error; } finally { // cleanup hanging listeners controller.abort(); @@ -710,7 +712,10 @@ export class WebSocketShard extends AsyncEventEmitter { } case GatewayCloseCodes.AuthenticationFailed: { - throw new Error('Authentication failed'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Authentication failed'), + }); + return this.destroy({ code }); } case GatewayCloseCodes.AlreadyAuthenticated: { @@ -734,23 +739,38 @@ export class WebSocketShard extends AsyncEventEmitter { } case GatewayCloseCodes.InvalidShard: { - throw new Error('Invalid shard'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Invalid shard'), + }); + return this.destroy({ code }); } case GatewayCloseCodes.ShardingRequired: { - throw new Error('Sharding is required'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Sharding is required'), + }); + return this.destroy({ code }); } case GatewayCloseCodes.InvalidAPIVersion: { - throw new Error('Used an invalid API version'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Used an invalid API version'), + }); + return this.destroy({ code }); } case GatewayCloseCodes.InvalidIntents: { - throw new Error('Used invalid intents'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Used invalid intents'), + }); + return this.destroy({ code }); } case GatewayCloseCodes.DisallowedIntents: { - throw new Error('Used disallowed intents'); + this.emit(WebSocketShardEvents.Error, { + error: new Error('Used disallowed intents'), + }); + return this.destroy({ code }); } default: {