From a6de2707fc1107262b12491f73b5b6887df91c67 Mon Sep 17 00:00:00 2001 From: DD Date: Thu, 15 Aug 2024 19:10:25 +0300 Subject: [PATCH] refactor(WebSocketShard): error event handling (#10436) * refactor(WebSocketShard): error event handling * chore: blehhhh :pppp --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/ws/src/utils/constants.ts | 2 -- packages/ws/src/ws/WebSocketManager.ts | 1 + packages/ws/src/ws/WebSocketShard.ts | 12 ++++-------- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/ws/src/utils/constants.ts b/packages/ws/src/utils/constants.ts index 69377ce95..9b41994be 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 e3f69a6e4..1f369ab99 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 f30142f83..4c47f6751 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) {