@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.
- package/dist/error/no-new-blocks-while-polling.error.d.ts +6 -0
- package/dist/error/no-new-blocks-while-polling.error.js +14 -0
- package/dist/interfaces/simple-fallback-provider-config.d.ts +1 -0
- package/dist/provider/simple-fallback-json-rpc-batch-provider.d.ts +2 -0
- package/dist/provider/simple-fallback-json-rpc-batch-provider.js +22 -2
- package/package.json +1 -1
|
@@ -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;
|
|
@@ -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];
|