From 31f658247fe0e1047897edab629643d140e77e07 Mon Sep 17 00:00:00 2001 From: Almeida Date: Wed, 22 Jun 2022 19:33:47 +0100 Subject: [PATCH] fix(DJSError): error code validation (#8149) --- .../src/client/websocket/WebSocketManager.js | 21 ++++++++++--------- packages/discord.js/src/errors/DJSError.js | 2 +- packages/discord.js/src/errors/Messages.js | 7 ------- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/packages/discord.js/src/client/websocket/WebSocketManager.js b/packages/discord.js/src/client/websocket/WebSocketManager.js index 6b938f16e..5354bed91 100644 --- a/packages/discord.js/src/client/websocket/WebSocketManager.js +++ b/packages/discord.js/src/client/websocket/WebSocketManager.js @@ -22,13 +22,14 @@ const BeforeReadyWhitelist = [ GatewayDispatchEvents.GuildMemberRemove, ]; -const UNRECOVERABLE_CLOSE_CODES = [ - GatewayCloseCodes.AuthenticationFailed, - GatewayCloseCodes.InvalidShard, - GatewayCloseCodes.ShardingRequired, - GatewayCloseCodes.InvalidIntents, - GatewayCloseCodes.DisallowedIntents, -]; +const unrecoverableErrorCodeMap = { + [GatewayCloseCodes.AuthenticationFailed]: ErrorCodes.TokenInvalid, + [GatewayCloseCodes.InvalidShard]: ErrorCodes.ShardingInvalid, + [GatewayCloseCodes.ShardingRequired]: ErrorCodes.ShardingRequired, + [GatewayCloseCodes.InvalidIntents]: ErrorCodes.InvalidIntents, + [GatewayCloseCodes.DisallowedIntents]: ErrorCodes.DisallowedIntents, +}; + const UNRESUMABLE_CLOSE_CODES = [1000, GatewayCloseCodes.AlreadyAuthenticated, GatewayCloseCodes.InvalidSeq]; /** @@ -194,7 +195,7 @@ class WebSocketManager extends EventEmitter { }); shard.on(ShardEvents.Close, event => { - if (event.code === 1_000 ? this.destroyed : UNRECOVERABLE_CLOSE_CODES.includes(event.code)) { + if (event.code === 1_000 ? this.destroyed : event.code in unrecoverableErrorCodeMap) { /** * Emitted when a shard's WebSocket disconnects and will no longer reconnect. * @event Client#shardDisconnect @@ -245,8 +246,8 @@ class WebSocketManager extends EventEmitter { try { await shard.connect(); } catch (error) { - if (error?.code && UNRECOVERABLE_CLOSE_CODES.includes(error.code)) { - throw new Error(GatewayCloseCodes[error.code]); + if (error?.code && error.code in unrecoverableErrorCodeMap) { + throw new Error(unrecoverableErrorCodeMap[error.code]); // Undefined if session is invalid, error event for regular closes } else if (!error || error.code) { this.debug('Failed to connect to the gateway, requeueing...', shard); diff --git a/packages/discord.js/src/errors/DJSError.js b/packages/discord.js/src/errors/DJSError.js index 877e3a892..aa37ab3a9 100644 --- a/packages/discord.js/src/errors/DJSError.js +++ b/packages/discord.js/src/errors/DJSError.js @@ -16,7 +16,7 @@ function makeDiscordjsError(Base) { constructor(code, ...args) { super(message(code, args)); this[kCode] = code; - if (Error.captureStackTrace) Error.captureStackTrace(this, DiscordjsError); + Error.captureStackTrace?.(this, DiscordjsError); } get name() { diff --git a/packages/discord.js/src/errors/Messages.js b/packages/discord.js/src/errors/Messages.js index 08e801123..417e7a809 100644 --- a/packages/discord.js/src/errors/Messages.js +++ b/packages/discord.js/src/errors/Messages.js @@ -159,11 +159,4 @@ const Messages = { [DjsErrorCodes.SweepFilterReturn]: 'The return value of the sweepFilter function was not false or a Function', }; -// Magic needed by WS -Messages.AuthenticationFailed = Messages[DjsErrorCodes.TokenInvalid]; -Messages.InvalidShard = Messages[DjsErrorCodes.ShardingInvalid]; -Messages.ShardingRequired = Messages[DjsErrorCodes.ShardingRequired]; -Messages.InvalidIntents = Messages[DjsErrorCodes.InvalidIntents]; -Messages.DisallowedIntents = Messages[DjsErrorCodes.DisallowedIntents]; - module.exports = Messages;