@lido-nestjs/execution 1.14.2 → 1.15.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.
@@ -1,4 +1,5 @@
1
1
  export declare enum ErrorCode {
2
2
  UNEXPECTED_BATCH_RESULT = "UNEXPECTED_BATCH_RESULT",
3
- PARTIAL_BATCH_RESULT = "PARTIAL_BATCH_RESULT"
3
+ PARTIAL_BATCH_RESULT = "PARTIAL_BATCH_RESULT",
4
+ REQUEST_TIMEOUT = "REQUEST_TIMEOUT"
4
5
  }
@@ -6,4 +6,5 @@ exports.ErrorCode = void 0;
6
6
  (function (ErrorCode) {
7
7
  ErrorCode["UNEXPECTED_BATCH_RESULT"] = "UNEXPECTED_BATCH_RESULT";
8
8
  ErrorCode["PARTIAL_BATCH_RESULT"] = "PARTIAL_BATCH_RESULT";
9
+ ErrorCode["REQUEST_TIMEOUT"] = "REQUEST_TIMEOUT";
9
10
  })(exports.ErrorCode || (exports.ErrorCode = {}));
@@ -1,3 +1,4 @@
1
1
  export * from './all-providers-failed.error';
2
2
  export * from './fetch.error';
3
3
  export * from './no-new-blocks-while-polling.error';
4
+ export * from './request-timeout.error';
@@ -0,0 +1,5 @@
1
+ export declare class RequestTimeoutError extends Error {
2
+ name: string;
3
+ timeoutMs: number;
4
+ constructor(message: string, timeoutMs: number);
5
+ }
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ class RequestTimeoutError extends Error {
6
+ constructor(message, timeoutMs) {
7
+ super(message);
8
+ this.name = 'RequestTimeoutError';
9
+ this.timeoutMs = timeoutMs;
10
+ Object.setPrototypeOf(this, new.target.prototype);
11
+ }
12
+ }
13
+
14
+ exports.RequestTimeoutError = RequestTimeoutError;
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ var feeHistory = require('./ethers/fee-history.js');
11
11
  var allProvidersFailed_error = require('./error/all-providers-failed.error.js');
12
12
  var fetch_error = require('./error/fetch.error.js');
13
13
  var noNewBlocksWhilePolling_error = require('./error/no-new-blocks-while-polling.error.js');
14
+ var requestTimeout_error = require('./error/request-timeout.error.js');
14
15
 
15
16
 
16
17
 
@@ -37,3 +38,4 @@ exports.getFeeHistory = feeHistory.getFeeHistory;
37
38
  exports.AllProvidersFailedError = allProvidersFailed_error.AllProvidersFailedError;
38
39
  exports.FetchError = fetch_error.FetchError;
39
40
  exports.NoNewBlocksWhilePollingError = noNewBlocksWhilePolling_error.NoNewBlocksWhilePollingError;
41
+ exports.RequestTimeoutError = requestTimeout_error.RequestTimeoutError;
@@ -14,4 +14,5 @@ export interface SimpleFallbackProviderConfig {
14
14
  resetIntervalMs?: number;
15
15
  fetchMiddlewares?: MiddlewareCallback<Promise<any>>[];
16
16
  maxTimeWithoutNewBlocksMs?: number;
17
+ requestTimeoutMs?: number;
17
18
  }
@@ -52,6 +52,7 @@ export declare class SimpleFallbackJsonRpcBatchProvider extends BaseProvider {
52
52
  protected get provider(): FallbackProvider;
53
53
  protected switchToNextProvider(): void;
54
54
  protected isNonRetryableError(error: Error | unknown): boolean;
55
+ protected withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T>;
55
56
  perform(method: string, params: {
56
57
  [name: string]: unknown;
57
58
  }): Promise<unknown>;
@@ -12,6 +12,7 @@ var networks = require('../common/networks.js');
12
12
  var noNewBlocksWhilePolling_error = require('../error/no-new-blocks-while-polling.error.js');
13
13
  var errors = require('../common/errors.js');
14
14
  var allProvidersFailed_error = require('../error/all-providers-failed.error.js');
15
+ var requestTimeout_error = require('../error/request-timeout.error.js');
15
16
  var feeHistory = require('../ethers/fee-history.js');
16
17
  var debugTraceBlockByHash = require('../ethers/debug-trace-block-by-hash.js');
17
18
  var events = require('events');
@@ -120,6 +121,16 @@ exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchPro
120
121
  errors.isErrorHasCode(error) &&
121
122
  errors.nonRetryableErrors.includes(error.code));
122
123
  }
124
+ withTimeout(promise, timeoutMs) {
125
+ return Promise.race([
126
+ promise,
127
+ new Promise((_, reject) => {
128
+ setTimeout(() => {
129
+ reject(new requestTimeout_error.RequestTimeoutError(`Request timeout after ${timeoutMs}ms`, timeoutMs));
130
+ }, timeoutMs);
131
+ }),
132
+ ]);
133
+ }
123
134
  async perform(method, params) {
124
135
  const retry = retrier.retrier(this.logger, this.config.maxRetries, this.config.minBackoffMs, this.config.maxBackoffMs, this.config.logRetries, (e) => this.isNonRetryableError(e));
125
136
  let attempt = 0;
@@ -144,7 +155,12 @@ exports.SimpleFallbackJsonRpcBatchProvider = class SimpleFallbackJsonRpcBatchPro
144
155
  };
145
156
  this._eventEmitter.emit('rpc', event);
146
157
  performRetryAttempt++;
147
- return provider.provider.perform(method, params);
158
+ const performPromise = provider.provider.perform(method, params);
159
+ // Apply timeout if configured
160
+ if (this.config.requestTimeoutMs) {
161
+ return this.withTimeout(performPromise, this.config.requestTimeoutMs);
162
+ }
163
+ return performPromise;
148
164
  });
149
165
  }
150
166
  catch (e) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lido-nestjs/execution",
3
- "version": "1.14.2",
3
+ "version": "1.15.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",