From 8ac93ff3ff0cf737896c0e247ad178e52402085b Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Thu, 6 Nov 2025 02:42:33 +0100 Subject: [PATCH] Recreate graphql ws client only as last resort Try to force a reconnection by terminating the client first. --- src/lib/requests/client/GraphQLClient.ts | 25 +++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/lib/requests/client/GraphQLClient.ts b/src/lib/requests/client/GraphQLClient.ts index f961769b..daaa0f03 100644 --- a/src/lib/requests/client/GraphQLClient.ts +++ b/src/lib/requests/client/GraphQLClient.ts @@ -324,24 +324,35 @@ export class GraphQLClient extends BaseClient< }, }); + let triedForcedReconnection = false; let lastHeartbeat: number = Date.now(); - this.wsClient.on('pong', () => { + this.wsClient.on('message', () => { lastHeartbeat = Date.now(); + triedForcedReconnection = false; }); const checkHeartbeatInterval = heartbeatInterval + d(30).seconds.inWholeMilliseconds; clearInterval(this.wsClientAliveCheckInterval); this.wsClientAliveCheckInterval = setInterval(() => { const isHeartbeatMissing = Date.now() - lastHeartbeat > checkHeartbeatInterval * 1.1; - if (isHeartbeatMissing) { - this.wsClient.dispose(); + if (!isHeartbeatMissing) { + return; + } + + if (!triedForcedReconnection) { + triedForcedReconnection = true; this.wsClient.terminate(); - this.createWSClient(false); - this.client.setLink(this.createLink()); - - this.activeConnectionSubscriptions.forEach((callback) => callback()); + return; } + + this.wsClient.dispose(); + this.wsClient.terminate(); + + this.createWSClient(false); + this.client.setLink(this.createLink()); + + this.activeConnectionSubscriptions.forEach((callback) => callback()); }, checkHeartbeatInterval); }