ponder 0.12.20 → 0.12.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # ponder
2
2
 
3
+ ## 0.12.21
4
+
5
+ ### Patch Changes
6
+
7
+ - [#2006](https://github.com/ponder-sh/ponder/pull/2006) [`908b4b2`](https://github.com/ponder-sh/ponder/commit/908b4b2034174ff96900f98ad60141581fac9c49) Thanks [@kyscott18](https://github.com/kyscott18)! - Improved websocket handling.
8
+
3
9
  ## 0.12.20
4
10
 
5
11
  ### Patch Changes
@@ -5,6 +5,7 @@ import { startClock } from '../utils/timer.js';
5
5
  import { wait } from '../utils/wait.js';
6
6
  import { getLogsRetryHelper, } from "@ponder/utils";
7
7
  import { http, HttpRequestError, JsonRpcVersionUnsupportedError, MethodNotFoundRpcError, MethodNotSupportedRpcError, ParseRpcError, TimeoutError, isHex, webSocket, } from "viem";
8
+ import { WebSocket } from "ws";
8
9
  const RETRY_COUNT = 9;
9
10
  const BASE_DURATION = 125;
10
11
  const INITIAL_REACTIVATION_DELAY = 100;
@@ -144,17 +145,9 @@ export const createRpc = ({ common, chain, concurrency = 25, }) => {
144
145
  }).request,
145
146
  ];
146
147
  }
147
- let wsTransport = undefined;
148
148
  if (typeof chain.ws === "string") {
149
149
  const protocol = new url.URL(chain.ws).protocol;
150
- if (protocol === "wss:" || protocol === "ws:") {
151
- wsTransport = webSocket(chain.ws, { keepAlive: true, reconnect: false })({
152
- chain: chain.viemChain,
153
- retryCount: 0,
154
- timeout: 5000,
155
- });
156
- }
157
- else {
150
+ if (protocol !== "wss:" && protocol !== "ws:") {
158
151
  throw new Error(`Inconsistent RPC URL protocol: ${protocol}. Expected wss or ws.`);
159
152
  }
160
153
  }
@@ -311,134 +304,182 @@ export const createRpc = ({ common, chain, concurrency = 25, }) => {
311
304
  throw "unreachable";
312
305
  },
313
306
  });
314
- let interval;
307
+ let ws;
308
+ let isUnsubscribed = false;
309
+ let subscriptionId;
315
310
  let webSocketErrorCount = 0;
316
- const disconnect = async () => {
317
- const conn = await wsTransport.value.getRpcClient();
318
- conn.close();
319
- };
311
+ let interval;
320
312
  const rpc = {
321
313
  // @ts-ignore
322
314
  request: queue.add,
323
- async subscribe({ onBlock, onError, polling = false }) {
324
- let isFetching = false;
325
- let isSubscribed = false;
326
- if (polling || wsTransport === undefined) {
327
- interval = setInterval(async () => {
328
- if (isFetching)
315
+ subscribe({ onBlock, onError }) {
316
+ (async () => {
317
+ while (true) {
318
+ if (isUnsubscribed)
329
319
  return;
330
- isFetching = true;
331
- try {
332
- const block = await _eth_getBlockByNumber(rpc, {
333
- blockTag: "latest",
320
+ let isFetching = false;
321
+ if (chain.ws === undefined || webSocketErrorCount >= RETRY_COUNT) {
322
+ common.logger.debug({
323
+ service: "rpc",
324
+ msg: `Created '${chain.name}' polling subscription`,
334
325
  });
335
- // Note: `onBlock` should never throw.
336
- await onBlock(block);
337
- }
338
- catch (error) {
339
- onError(error);
340
- }
341
- finally {
342
- isFetching = false;
343
- }
344
- }, chain.pollingInterval);
345
- common.shutdown.add(() => {
346
- clearInterval(interval);
347
- });
348
- return;
349
- }
350
- for (let i = 0; i <= RETRY_COUNT; ++i) {
351
- try {
352
- await wsTransport.value.subscribe({
353
- params: ["newHeads"],
354
- onData: async (data) => {
355
- if (data.error === undefined && data.result !== undefined) {
356
- onBlock(standardizeBlock(data.result, true));
357
- common.logger.debug({
358
- service: "rpc",
359
- msg: `Received successful '${chain.name}' newHeads subscription data`,
326
+ interval = setInterval(async () => {
327
+ if (isFetching)
328
+ return;
329
+ isFetching = true;
330
+ try {
331
+ const block = await _eth_getBlockByNumber(rpc, {
332
+ blockTag: "latest",
360
333
  });
361
- webSocketErrorCount = 0;
334
+ // Note: `onBlock` should never throw.
335
+ await onBlock(block);
362
336
  }
363
- else {
364
- if (!isSubscribed)
365
- return;
366
- const error = data.error;
367
- if (webSocketErrorCount === RETRY_COUNT) {
337
+ catch (error) {
338
+ onError(error);
339
+ }
340
+ finally {
341
+ isFetching = false;
342
+ }
343
+ }, chain.pollingInterval);
344
+ common.shutdown.add(() => {
345
+ clearInterval(interval);
346
+ });
347
+ return;
348
+ }
349
+ await new Promise((resolve) => {
350
+ ws = new WebSocket(chain.ws);
351
+ ws.on("open", () => {
352
+ common.logger.debug({
353
+ service: "rpc",
354
+ msg: `Created '${chain.name}' websocket subscription`,
355
+ });
356
+ const subscriptionRequest = {
357
+ jsonrpc: "2.0",
358
+ id: 1,
359
+ method: "eth_subscribe",
360
+ params: ["newHeads"],
361
+ };
362
+ ws?.send(JSON.stringify(subscriptionRequest));
363
+ });
364
+ ws.on("message", (data) => {
365
+ try {
366
+ const msg = JSON.parse(data.toString());
367
+ if (msg.method === "eth_subscription" &&
368
+ msg.params.subscription === subscriptionId) {
369
+ onBlock(standardizeBlock(msg.params.result, true));
370
+ common.logger.debug({
371
+ service: "rpc",
372
+ msg: `Received successful '${chain.name}' websocket subscription data`,
373
+ });
374
+ webSocketErrorCount = 0;
375
+ }
376
+ else if (msg.result) {
377
+ subscriptionId = msg.result;
378
+ }
379
+ else if (msg.error) {
380
+ if (webSocketErrorCount === RETRY_COUNT) {
381
+ common.logger.warn({
382
+ service: "rpc",
383
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
384
+ error: msg.error,
385
+ });
386
+ }
387
+ else {
388
+ common.logger.debug({
389
+ service: "rpc",
390
+ msg: `Received '${chain.name}' websocket subscription error`,
391
+ error: msg.error,
392
+ });
393
+ webSocketErrorCount += 1;
394
+ }
395
+ ws?.close();
396
+ }
397
+ else {
398
+ common.logger.debug({
399
+ service: "rpc",
400
+ msg: `Received unrecognized '${chain.name}' websocket message`,
401
+ });
402
+ }
403
+ }
404
+ catch (error) {
405
+ if (webSocketErrorCount >= RETRY_COUNT) {
368
406
  common.logger.warn({
369
407
  service: "rpc",
370
- msg: `Failed '${chain.name}' newHeads subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
371
- error,
408
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
409
+ error: error,
372
410
  });
373
- await disconnect();
374
- rpc.subscribe({ onBlock, onError, polling: true });
375
411
  }
376
412
  else {
377
413
  common.logger.debug({
378
414
  service: "rpc",
379
- msg: `Received '${chain.name}' newHeads subscription error`,
380
- error,
415
+ msg: `Received '${chain.name}' websocket subscription error`,
416
+ error: error,
381
417
  });
418
+ webSocketErrorCount += 1;
382
419
  }
383
- webSocketErrorCount += 1;
420
+ ws?.close();
384
421
  }
385
- },
386
- onError: async (_error) => {
387
- // Note: Since the viem webSocket transaport impl throws the promise and calls onError callback on failed subscribe, it should be debounced.
388
- if (!isSubscribed)
389
- return;
390
- const error = _error;
391
- if (webSocketErrorCount === RETRY_COUNT) {
422
+ });
423
+ ws.on("error", async (error) => {
424
+ if (webSocketErrorCount >= RETRY_COUNT) {
392
425
  common.logger.warn({
393
426
  service: "rpc",
394
- msg: `Failed '${chain.name}' newHeads subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
427
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
395
428
  error,
396
429
  });
397
- await disconnect();
398
- rpc.subscribe({ onBlock, onError, polling: true });
399
430
  }
400
431
  else {
401
432
  common.logger.debug({
402
433
  service: "rpc",
403
- msg: `Failed '${chain.name}' newHeads subscription`,
434
+ msg: `Received '${chain.name}' websocket subscription error`,
404
435
  error,
405
436
  });
406
437
  webSocketErrorCount += 1;
407
- await disconnect();
408
- rpc.subscribe({ onBlock, onError, polling: false });
409
438
  }
410
- },
411
- });
412
- isSubscribed = true;
413
- return;
414
- }
415
- catch (_error) {
416
- const error = _error;
417
- if (i === RETRY_COUNT) {
418
- common.logger.warn({
419
- service: "rpc",
420
- msg: `Failed '${chain.name}' eth_subscribe request after ${i + 1} consecutive errors. Switching to polling`,
421
- error,
439
+ if (ws && ws.readyState === ws.OPEN) {
440
+ ws.close();
441
+ }
442
+ else {
443
+ resolve();
444
+ }
422
445
  });
423
- rpc.subscribe({ onBlock, onError, polling: true });
424
- return;
425
- }
426
- else {
427
- const duration = BASE_DURATION * 2 ** i;
428
- common.logger.debug({
429
- service: "rpc",
430
- msg: `Failed '${chain.name}' eth_subscribe request, retrying after ${duration} milliseconds`,
431
- error,
446
+ ws.on("close", async () => {
447
+ common.logger.debug({
448
+ service: "rpc",
449
+ msg: `Closed '${chain.name}' websocket connection`,
450
+ });
451
+ ws = undefined;
452
+ if (isUnsubscribed || webSocketErrorCount >= RETRY_COUNT) {
453
+ resolve();
454
+ }
455
+ else {
456
+ const duration = BASE_DURATION * 2 ** webSocketErrorCount;
457
+ common.logger.debug({
458
+ service: "rpc",
459
+ msg: `Retrying '${chain.name}' websocket connection after ${duration} milliseconds`,
460
+ });
461
+ await wait(duration);
462
+ resolve();
463
+ }
432
464
  });
433
- await wait(duration);
434
- }
465
+ });
435
466
  }
436
- }
467
+ })();
437
468
  },
438
469
  async unsubscribe() {
439
470
  clearInterval(interval);
440
- if (wsTransport) {
441
- await disconnect();
471
+ isUnsubscribed = true;
472
+ if (ws) {
473
+ if (subscriptionId) {
474
+ const unsubscribeRequest = {
475
+ jsonrpc: "2.0",
476
+ id: 1,
477
+ method: "eth_unsubscribe",
478
+ params: [subscriptionId],
479
+ };
480
+ ws.send(JSON.stringify(unsubscribeRequest));
481
+ }
482
+ ws.close();
442
483
  }
443
484
  },
444
485
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rpc/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rpc/index.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,7 @@ export type Rpc = {
11
11
  subscribe: (params: {
12
12
  onBlock: (block: SyncBlock | SyncBlockHeader) => Promise<boolean>;
13
13
  onError: (error: Error) => void;
14
- polling?: boolean;
15
- }) => Promise<void>;
14
+ }) => void;
16
15
  unsubscribe: () => Promise<void>;
17
16
  };
18
17
  export declare const createRpc: ({ common, chain, concurrency, }: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rpc/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAa7E,OAAO,EAEL,KAAK,iBAAiB,EAOtB,KAAK,eAAe,EAMrB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,KAAK,MAAM,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC;AAEtD,KAAK,iBAAiB,CAAC,MAAM,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IACvE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAE5D,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,CAAC,WAAW,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACrD,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvD,SAAS,EAAE,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QAChC,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,CAAC;AAmIF,eAAO,MAAM,SAAS;YAIT,MAAM;WAAS,KAAK;;MAA2B,GAkb3D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rpc/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAa7E,OAAO,EAEL,KAAK,iBAAiB,EAOtB,KAAK,eAAe,EAKrB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,KAAK,MAAM,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,cAAc,CAAC,CAAC;AAEtD,KAAK,iBAAiB,CAAC,MAAM,SAAS,iBAAiB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IACvE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,YAAY,CAAC,CAAC;AAE5D,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,CAAC,WAAW,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACrD,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACvD,SAAS,EAAE,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KACjC,KAAK,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC,CAAC;AAmIF,eAAO,MAAM,SAAS;YAIT,MAAM;WAAS,KAAK;;MAA2B,GA4d3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ponder",
3
- "version": "0.12.20",
3
+ "version": "0.12.21",
4
4
  "description": "An open-source framework for crypto application backends",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -79,6 +79,7 @@
79
79
  "vite": "5.0.7",
80
80
  "vite-node": "1.0.2",
81
81
  "vite-tsconfig-paths": "4.3.1",
82
+ "ws": "^8.18.3",
82
83
  "@ponder/utils": "0.2.12"
83
84
  },
84
85
  "devDependencies": {
@@ -89,6 +90,7 @@
89
90
  "@types/pg": "^8.10.9",
90
91
  "@types/pg-copy-streams": "^1.2.5",
91
92
  "@types/semver": "^7.5.8",
93
+ "@types/ws": "^8.18.1",
92
94
  "@viem/anvil": "^0.0.6",
93
95
  "@wagmi/cli": "^1.5.2",
94
96
  "chokidar": "^4.0.3",
@@ -97,7 +99,7 @@
97
99
  "rimraf": "^5.0.5",
98
100
  "tsx": "^4.19.2",
99
101
  "vitest": "^1.0.2",
100
- "@ponder/client": "0.12.20"
102
+ "@ponder/client": "0.12.21"
101
103
  },
102
104
  "engines": {
103
105
  "node": ">=18.14"
package/src/rpc/index.ts CHANGED
@@ -25,10 +25,10 @@ import {
25
25
  type PublicRpcSchema,
26
26
  type RpcError,
27
27
  TimeoutError,
28
- type WebSocketTransport,
29
28
  isHex,
30
29
  webSocket,
31
30
  } from "viem";
31
+ import { WebSocket } from "ws";
32
32
  import type { DebugRpcSchema } from "../utils/debug.js";
33
33
 
34
34
  type Schema = [...PublicRpcSchema, ...DebugRpcSchema];
@@ -43,8 +43,7 @@ export type Rpc = {
43
43
  subscribe: (params: {
44
44
  onBlock: (block: SyncBlock | SyncBlockHeader) => Promise<boolean>;
45
45
  onError: (error: Error) => void;
46
- polling?: boolean;
47
- }) => Promise<void>;
46
+ }) => void;
48
47
  unsubscribe: () => Promise<void>;
49
48
  };
50
49
 
@@ -234,18 +233,10 @@ export const createRpc = ({
234
233
  ];
235
234
  }
236
235
 
237
- let wsTransport: ReturnType<WebSocketTransport> | undefined = undefined;
238
-
239
236
  if (typeof chain.ws === "string") {
240
237
  const protocol = new url.URL(chain.ws).protocol;
241
238
 
242
- if (protocol === "wss:" || protocol === "ws:") {
243
- wsTransport = webSocket(chain.ws, { keepAlive: true, reconnect: false })({
244
- chain: chain.viemChain,
245
- retryCount: 0,
246
- timeout: 5_000,
247
- });
248
- } else {
239
+ if (protocol !== "wss:" && protocol !== "ws:") {
249
240
  throw new Error(
250
241
  `Inconsistent RPC URL protocol: ${protocol}. Expected wss or ws.`,
251
242
  );
@@ -463,146 +454,196 @@ export const createRpc = ({
463
454
  },
464
455
  });
465
456
 
466
- let interval: NodeJS.Timeout | undefined;
457
+ let ws: WebSocket | undefined;
458
+ let isUnsubscribed = false;
459
+ let subscriptionId: string | undefined;
467
460
  let webSocketErrorCount = 0;
468
- const disconnect = async () => {
469
- const conn = await wsTransport!.value!.getRpcClient();
470
- conn.close();
471
- };
461
+ let interval: NodeJS.Timeout | undefined;
472
462
 
473
463
  const rpc: Rpc = {
474
464
  // @ts-ignore
475
465
  request: queue.add,
476
- async subscribe({ onBlock, onError, polling = false }) {
477
- let isFetching = false;
478
- let isSubscribed = false;
466
+ subscribe({ onBlock, onError }) {
467
+ (async () => {
468
+ while (true) {
469
+ if (isUnsubscribed) return;
470
+ let isFetching = false;
479
471
 
480
- if (polling || wsTransport === undefined) {
481
- interval = setInterval(async () => {
482
- if (isFetching) return;
472
+ if (chain.ws === undefined || webSocketErrorCount >= RETRY_COUNT) {
473
+ common.logger.debug({
474
+ service: "rpc",
475
+ msg: `Created '${chain.name}' polling subscription`,
476
+ });
477
+
478
+ interval = setInterval(async () => {
479
+ if (isFetching) return;
483
480
 
484
- isFetching = true;
481
+ isFetching = true;
485
482
 
486
- try {
487
- const block = await _eth_getBlockByNumber(rpc, {
488
- blockTag: "latest",
483
+ try {
484
+ const block = await _eth_getBlockByNumber(rpc, {
485
+ blockTag: "latest",
486
+ });
487
+ // Note: `onBlock` should never throw.
488
+ await onBlock(block);
489
+ } catch (error) {
490
+ onError(error as Error);
491
+ } finally {
492
+ isFetching = false;
493
+ }
494
+ }, chain.pollingInterval);
495
+ common.shutdown.add(() => {
496
+ clearInterval(interval);
489
497
  });
490
- // Note: `onBlock` should never throw.
491
- await onBlock(block);
492
- } catch (error) {
493
- onError(error as Error);
494
- } finally {
495
- isFetching = false;
498
+
499
+ return;
496
500
  }
497
- }, chain.pollingInterval);
498
- common.shutdown.add(() => {
499
- clearInterval(interval);
500
- });
501
501
 
502
- return;
503
- }
502
+ await new Promise<void>((resolve) => {
503
+ ws = new WebSocket(chain.ws!);
504
504
 
505
- for (let i = 0; i <= RETRY_COUNT; ++i) {
506
- try {
507
- await wsTransport.value!.subscribe({
508
- params: ["newHeads"],
509
- onData: async (data) => {
510
- if (data.error === undefined && data.result !== undefined) {
511
- onBlock(standardizeBlock(data.result, true));
505
+ ws.on("open", () => {
506
+ common.logger.debug({
507
+ service: "rpc",
508
+ msg: `Created '${chain.name}' websocket subscription`,
509
+ });
512
510
 
513
- common.logger.debug({
514
- service: "rpc",
515
- msg: `Received successful '${chain.name}' newHeads subscription data`,
516
- });
517
- webSocketErrorCount = 0;
518
- } else {
519
- if (!isSubscribed) return;
520
- const error = data.error as Error;
511
+ const subscriptionRequest = {
512
+ jsonrpc: "2.0",
513
+ id: 1,
514
+ method: "eth_subscribe",
515
+ params: ["newHeads"],
516
+ };
517
+
518
+ ws?.send(JSON.stringify(subscriptionRequest));
519
+ });
521
520
 
522
- if (webSocketErrorCount === RETRY_COUNT) {
521
+ ws.on("message", (data: Buffer) => {
522
+ try {
523
+ const msg = JSON.parse(data.toString());
524
+ if (
525
+ msg.method === "eth_subscription" &&
526
+ msg.params.subscription === subscriptionId
527
+ ) {
528
+ onBlock(standardizeBlock(msg.params.result, true));
529
+
530
+ common.logger.debug({
531
+ service: "rpc",
532
+ msg: `Received successful '${chain.name}' websocket subscription data`,
533
+ });
534
+ webSocketErrorCount = 0;
535
+ } else if (msg.result) {
536
+ subscriptionId = msg.result;
537
+ } else if (msg.error) {
538
+ if (webSocketErrorCount === RETRY_COUNT) {
539
+ common.logger.warn({
540
+ service: "rpc",
541
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
542
+ error: msg.error as Error,
543
+ });
544
+ } else {
545
+ common.logger.debug({
546
+ service: "rpc",
547
+ msg: `Received '${chain.name}' websocket subscription error`,
548
+ error: msg.error as Error,
549
+ });
550
+
551
+ webSocketErrorCount += 1;
552
+ }
553
+
554
+ ws?.close();
555
+ } else {
556
+ common.logger.debug({
557
+ service: "rpc",
558
+ msg: `Received unrecognized '${chain.name}' websocket message`,
559
+ });
560
+ }
561
+ } catch (error) {
562
+ if (webSocketErrorCount >= RETRY_COUNT) {
523
563
  common.logger.warn({
524
564
  service: "rpc",
525
- msg: `Failed '${chain.name}' newHeads subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
526
- error,
565
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
566
+ error: error as Error,
527
567
  });
528
-
529
- await disconnect();
530
-
531
- rpc.subscribe({ onBlock, onError, polling: true });
532
568
  } else {
533
569
  common.logger.debug({
534
570
  service: "rpc",
535
- msg: `Received '${chain.name}' newHeads subscription error`,
536
- error,
571
+ msg: `Received '${chain.name}' websocket subscription error`,
572
+ error: error as Error,
537
573
  });
574
+
575
+ webSocketErrorCount += 1;
538
576
  }
539
577
 
540
- webSocketErrorCount += 1;
578
+ ws?.close();
541
579
  }
542
- },
543
- onError: async (_error) => {
544
- // Note: Since the viem webSocket transaport impl throws the promise and calls onError callback on failed subscribe, it should be debounced.
545
- if (!isSubscribed) return;
546
- const error = _error as Error;
580
+ });
547
581
 
548
- if (webSocketErrorCount === RETRY_COUNT) {
582
+ ws.on("error", async (error) => {
583
+ if (webSocketErrorCount >= RETRY_COUNT) {
549
584
  common.logger.warn({
550
585
  service: "rpc",
551
- msg: `Failed '${chain.name}' newHeads subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
586
+ msg: `Failed '${chain.name}' websocket subscription after ${webSocketErrorCount + 1} consecutive errors. Switching to polling`,
552
587
  error,
553
588
  });
554
-
555
- await disconnect();
556
-
557
- rpc.subscribe({ onBlock, onError, polling: true });
558
589
  } else {
559
590
  common.logger.debug({
560
591
  service: "rpc",
561
- msg: `Failed '${chain.name}' newHeads subscription`,
592
+ msg: `Received '${chain.name}' websocket subscription error`,
562
593
  error,
563
594
  });
564
595
 
565
596
  webSocketErrorCount += 1;
597
+ }
566
598
 
567
- await disconnect();
568
-
569
- rpc.subscribe({ onBlock, onError, polling: false });
599
+ if (ws && ws.readyState === ws.OPEN) {
600
+ ws.close();
601
+ } else {
602
+ resolve();
570
603
  }
571
- },
572
- });
604
+ });
573
605
 
574
- isSubscribed = true;
606
+ ws.on("close", async () => {
607
+ common.logger.debug({
608
+ service: "rpc",
609
+ msg: `Closed '${chain.name}' websocket connection`,
610
+ });
575
611
 
576
- return;
577
- } catch (_error) {
578
- const error = _error as Error;
612
+ ws = undefined;
579
613
 
580
- if (i === RETRY_COUNT) {
581
- common.logger.warn({
582
- service: "rpc",
583
- msg: `Failed '${chain.name}' eth_subscribe request after ${i + 1} consecutive errors. Switching to polling`,
584
- error,
585
- });
614
+ if (isUnsubscribed || webSocketErrorCount >= RETRY_COUNT) {
615
+ resolve();
616
+ } else {
617
+ const duration = BASE_DURATION * 2 ** webSocketErrorCount;
586
618
 
587
- rpc.subscribe({ onBlock, onError, polling: true });
619
+ common.logger.debug({
620
+ service: "rpc",
621
+ msg: `Retrying '${chain.name}' websocket connection after ${duration} milliseconds`,
622
+ });
588
623
 
589
- return;
590
- } else {
591
- const duration = BASE_DURATION * 2 ** i;
592
- common.logger.debug({
593
- service: "rpc",
594
- msg: `Failed '${chain.name}' eth_subscribe request, retrying after ${duration} milliseconds`,
595
- error,
624
+ await wait(duration);
625
+
626
+ resolve();
627
+ }
596
628
  });
597
- await wait(duration);
598
- }
629
+ });
599
630
  }
600
- }
631
+ })();
601
632
  },
602
633
  async unsubscribe() {
603
634
  clearInterval(interval);
604
- if (wsTransport) {
605
- await disconnect();
635
+ isUnsubscribed = true;
636
+ if (ws) {
637
+ if (subscriptionId) {
638
+ const unsubscribeRequest = {
639
+ jsonrpc: "2.0",
640
+ id: 1,
641
+ method: "eth_unsubscribe",
642
+ params: [subscriptionId],
643
+ };
644
+ ws.send(JSON.stringify(unsubscribeRequest));
645
+ }
646
+ ws.close();
606
647
  }
607
648
  },
608
649
  };