diff --git a/packages/ws/src/utils/constants.ts b/packages/ws/src/utils/constants.ts index 69377ce95d05..9b41994be556 100644 --- a/packages/ws/src/utils/constants.ts +++ b/packages/ws/src/utils/constants.ts @@ -82,5 +82,3 @@ export function getInitialSendRateLimitState(): SendRateLimitState { resetAt: Date.now() + 60_000, }; } - -export const KnownNetworkErrorCodes = new Set(['ECONNRESET', 'ECONNREFUSED', 'ETIMEDOUT', 'EAI_AGAIN']); diff --git a/packages/ws/src/ws/WebSocketManager.ts b/packages/ws/src/ws/WebSocketManager.ts index e3f69a6e43df..1f369ab992d4 100644 --- a/packages/ws/src/ws/WebSocketManager.ts +++ b/packages/ws/src/ws/WebSocketManager.ts @@ -210,6 +210,7 @@ export interface ManagerShardEventsMap { stats: { ackAt: number; heartbeatAt: number; latency: number }, shardId: number, ]; + [WebSocketShardEvents.SocketError]: [error: Error, shardId: number]; } export class WebSocketManager extends AsyncEventEmitter implements AsyncDisposable { diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index f30142f83f9c..4c47f67514e0 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -26,7 +26,6 @@ import { CompressionMethod, CompressionParameterMap, ImportantGatewayOpcodes, - KnownNetworkErrorCodes, getInitialSendRateLimitState, } from '../utils/constants.js'; import type { SessionInfo } from './WebSocketManager.js'; @@ -45,6 +44,7 @@ export enum WebSocketShardEvents { Hello = 'hello', Ready = 'ready', Resumed = 'resumed', + SocketError = 'socketError', } export enum WebSocketShardStatus { @@ -68,6 +68,7 @@ export interface WebSocketShardEventsMap { [WebSocketShardEvents.Ready]: [payload: GatewayReadyDispatchData]; [WebSocketShardEvents.Resumed]: []; [WebSocketShardEvents.HeartbeatComplete]: [stats: { ackAt: number; heartbeatAt: number; latency: number }]; + [WebSocketShardEvents.SocketError]: [error: Error]; } export interface WebSocketShardDestroyOptions { @@ -791,13 +792,8 @@ export class WebSocketShard extends AsyncEventEmitter { } private onError(error: Error) { - if ('code' in error && KnownNetworkErrorCodes.has(error.code as string)) { - this.debug(['Failed to connect to the gateway URL specified due to a network error']); - this.failedToConnectDueToNetworkError = true; - return; - } - - this.emit(WebSocketShardEvents.Error, error); + this.emit(WebSocketShardEvents.SocketError, error); + this.failedToConnectDueToNetworkError = true; } private async onClose(code: number) {