@lido-nestjs/execution 1.3.0 → 1.4.0

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.
@@ -0,0 +1,6 @@
1
+ export declare class NoNewBlocksWhilePollingError extends Error {
2
+ name: string;
3
+ message: string;
4
+ latestObservedBlockNumber: number;
5
+ constructor(message: string, latestObservedBlockNumber: number);
6
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ class NoNewBlocksWhilePollingError extends Error {
6
+ constructor(message, latestObservedBlockNumber) {
7
+ super('');
8
+ this.name = 'NoNewBlocksWhilePollingError';
9
+ this.message = message;
10
+ this.latestObservedBlockNumber = latestObservedBlockNumber;
11
+ }
12
+ }
13
+
14
+ exports.NoNewBlocksWhilePollingError = NoNewBlocksWhilePollingError;
@@ -13,4 +13,5 @@ export interface SimpleFallbackProviderConfig {
13
13
  logRetries?: boolean;
14
14
  resetIntervalMs?: number;
15
15
  fetchMiddlewares?: MiddlewareCallback<Promise<any>>[];
16
+ maxTimeWithoutNewBlocksMs?: number;
16
17
  }
@@ -7,6 +7,7 @@ import { BlockTag } from '../ethers/block-tag';
7
7
  import { BigNumber, BigNumberish } from '@ethersproject/bignumber';
8
8
  import { Deferrable } from '@ethersproject/properties';
9
9
  import { TransactionRequest } from '@ethersproject/abstract-provider/src.ts/index';
10
+ import { EventType, Listener } from '@ethersproject/abstract-provider';
10
11
  /**
11
12
  * EIP-1898 support
12
13
  * https://eips.ethereum.org/EIPS/eip-1898
@@ -30,6 +31,7 @@ export declare class SimpleFallbackJsonRpcBatchProvider extends BaseProvider {
30
31
  constructor(config: SimpleFallbackProviderConfig, logger: LoggerService);
31
32
  static _formatter: Formatter | null;
32
33
  static getFormatter(): Formatter;
34
+ on(eventName: EventType, listener: Listener): this;
33
35
  protected get provider(): FallbackProvider;
34
36
  protected switchToNextProvider(): void;
35
37
  perform(method: string, params: {
@@ -9,13 +9,14 @@ var common = require('@nestjs/common');
9
9
  var retrier = require('../common/retrier.js');
10
10
  var formatterWithEip1898 = require('../ethers/formatter-with-eip1898.js');
11
11
  var networks = require('../common/networks.js');
12
+ var noNewBlocksWhilePolling_error = require('../error/no-new-blocks-while-polling.error.js');
12
13
 
13
14
  exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchProvider extends providers.BaseProvider {
14
15
  constructor(config, logger) {
15
16
  super(config.network);
16
17
  this.detectNetworkFirstRun = true;
17
18
  this.resetTimer = null;
18
- this.config = Object.assign({ maxRetries: 3, minBackoffMs: 500, maxBackoffMs: 5000, logRetries: true }, config);
19
+ this.config = Object.assign({ maxRetries: 3, minBackoffMs: 500, maxBackoffMs: 5000, logRetries: true, resetIntervalMs: 10000, maxTimeWithoutNewBlocksMs: 60000 }, config);
19
20
  this.logger = logger;
20
21
  const conns = config.urls.filter((url) => {
21
22
  if (!url) {
@@ -47,6 +48,25 @@ exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchPro
47
48
  }
48
49
  return this._formatter;
49
50
  }
51
+ on(eventName, listener) {
52
+ let dieTimer = null;
53
+ const startDieTimer = (latestObservedBlockNumber) => {
54
+ if (dieTimer)
55
+ clearTimeout(dieTimer);
56
+ dieTimer = setTimeout(async () => {
57
+ const error = new noNewBlocksWhilePolling_error.NoNewBlocksWhilePollingError('No new blocks for a long time while polling', latestObservedBlockNumber);
58
+ this.emit('error', error);
59
+ }, this.config.maxTimeWithoutNewBlocksMs);
60
+ };
61
+ if (eventName === 'block') {
62
+ startDieTimer(-1);
63
+ super.on(eventName, function (...args) {
64
+ startDieTimer(args[0]);
65
+ return listener.apply(this, args);
66
+ });
67
+ }
68
+ return super.on(eventName, listener);
69
+ }
50
70
  get provider() {
51
71
  if (this.activeFallbackProviderIndex > this.fallbackProviders.length - 1) {
52
72
  this.activeFallbackProviderIndex = 0;
@@ -55,7 +75,7 @@ exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchPro
55
75
  let attempt = 0;
56
76
  const isValid = (provider) => provider.network !== null &&
57
77
  provider.network.chainId === networks.getNetworkChain(this.config.network);
58
- while (!isValid(fallbackProvider) ||
78
+ while (!isValid(fallbackProvider) &&
59
79
  attempt < this.fallbackProviders.length) {
60
80
  fallbackProvider =
61
81
  this.fallbackProviders[this.activeFallbackProviderIndex];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lido-nestjs/execution",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",