@atomiqlabs/chain-evm 1.0.0-dev.81 → 1.0.0-dev.83

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.
@@ -16,6 +16,10 @@ class JsonRpcProviderWithRetries extends ethers_1.JsonRpcProvider {
16
16
  return (0, Utils_1.tryWithRetries)(() => super.send(method, params), this.retryPolicy, e => {
17
17
  if (e.code != null && typeof (e.code) === "string")
18
18
  return Utils_1.allowedEthersErrorCodes.has(e.code);
19
+ if (e.error?.code != null && typeof (e.error.code) === "number")
20
+ return Utils_1.allowedEthersErrorNumbers.has(e.error.code);
21
+ if (e.error?.message != null && typeof (e.error.message) === "string")
22
+ return Utils_1.allowedEthersErrorMessages.has(e.error.message);
19
23
  return false;
20
24
  });
21
25
  }
@@ -245,6 +245,8 @@ class SocketProvider extends ethers_1.JsonRpcApiProvider {
245
245
  async _send(payload) {
246
246
  // WebSocket provider doesn't accept batches
247
247
  (0, ethers_1.assertArgument)(!Array.isArray(payload), "WebSocket does not support batch send", "payload", payload);
248
+ if (!__classPrivateFieldGet(this, _SocketProvider_connected, "f") && payload.method === "eth_subscribe")
249
+ return Promise.reject((0, ethers_1.makeError)("WebSocket not connected!", "NETWORK_ERROR"));
248
250
  // Wait until the socket is connected before writing to it
249
251
  await this._waitUntilReady();
250
252
  if (!__classPrivateFieldGet(this, _SocketProvider_connected, "f") && payload.method === "eth_subscribe")
@@ -12,6 +12,10 @@ class WebSocketProviderWithRetries extends ReconnectingWebSocketProvider_1.Recon
12
12
  return (0, Utils_1.tryWithRetries)(() => super.send(method, params), this.retryPolicy, e => {
13
13
  if (e.code != null && typeof (e.code) === "string")
14
14
  return Utils_1.allowedEthersErrorCodes.has(e.code);
15
+ if (e.error?.code != null && typeof (e.error.code) === "number")
16
+ return Utils_1.allowedEthersErrorNumbers.has(e.error.code);
17
+ if (e.error?.message != null && typeof (e.error.message) === "string")
18
+ return Utils_1.allowedEthersErrorMessages.has(e.error.message);
15
19
  return false;
16
20
  });
17
21
  }
@@ -15,3 +15,5 @@ export declare function tryWithRetries<T>(func: () => Promise<T>, retryPolicy?:
15
15
  export declare function uint32ReverseEndianness(value: number): number;
16
16
  export declare function bigIntMax(a: bigint, b: bigint): bigint;
17
17
  export declare const allowedEthersErrorCodes: Set<string>;
18
+ export declare const allowedEthersErrorNumbers: Set<number>;
19
+ export declare const allowedEthersErrorMessages: Set<string>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.allowedEthersErrorCodes = exports.bigIntMax = exports.uint32ReverseEndianness = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = void 0;
3
+ exports.allowedEthersErrorMessages = exports.allowedEthersErrorNumbers = exports.allowedEthersErrorCodes = exports.bigIntMax = exports.uint32ReverseEndianness = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = void 0;
4
4
  function timeoutPromise(timeoutMillis, abortSignal) {
5
5
  return new Promise((resolve, reject) => {
6
6
  const timeout = setTimeout(resolve, timeoutMillis);
@@ -79,3 +79,20 @@ exports.allowedEthersErrorCodes = new Set([
79
79
  "INVALID_ARGUMENT", "MISSING_ARGUMENT", "UNEXPECTED_ARGUMENT", "VALUE_MISMATCH",
80
80
  "CALL_EXCEPTION", "NONCE_EXPIRED", "REPLACEMENT_UNDERPRICED", "TRANSACTION_REPLACED", "UNCONFIGURED_NAME", "OFFCHAIN_FAULT", "ACTION_REJECTED"
81
81
  ]);
82
+ exports.allowedEthersErrorNumbers = new Set([
83
+ -32700,
84
+ -32600,
85
+ -32601,
86
+ // -32602, //Invalid params
87
+ // -32603, //Internal error
88
+ -32000,
89
+ // -32001, //Resource not found
90
+ // -32002, //Resource unavailable
91
+ // -32003, //Transaction rejected
92
+ -32004,
93
+ // -32005, //Limit exceeded
94
+ -32006 //JSON-RPC version not supported
95
+ ]);
96
+ exports.allowedEthersErrorMessages = new Set([
97
+ "already known"
98
+ ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/chain-evm",
3
- "version": "1.0.0-dev.81",
3
+ "version": "1.0.0-dev.83",
4
4
  "description": "EVM specific base implementation",
5
5
  "main": "./dist/index.js",
6
6
  "types:": "./dist/index.d.ts",
@@ -1,6 +1,11 @@
1
1
  import {JsonRpcProvider, JsonRpcApiProviderOptions, makeError, JsonRpcPayload, JsonRpcResult} from "ethers";
2
2
  import {Networkish, FetchRequest} from "ethers";
3
- import {allowedEthersErrorCodes, tryWithRetries} from "../../utils/Utils";
3
+ import {
4
+ allowedEthersErrorCodes,
5
+ allowedEthersErrorMessages,
6
+ allowedEthersErrorNumbers,
7
+ tryWithRetries
8
+ } from "../../utils/Utils";
4
9
 
5
10
  export class JsonRpcProviderWithRetries extends JsonRpcProvider {
6
11
 
@@ -20,6 +25,8 @@ export class JsonRpcProviderWithRetries extends JsonRpcProvider {
20
25
  send(method: string, params: Array<any> | Record<string, any>): Promise<any> {
21
26
  return tryWithRetries(() => super.send(method, params), this.retryPolicy, e => {
22
27
  if(e.code!=null && typeof(e.code)==="string") return allowedEthersErrorCodes.has(e.code);
28
+ if(e.error?.code!=null && typeof(e.error.code)==="number") return allowedEthersErrorNumbers.has(e.error.code);
29
+ if(e.error?.message!=null && typeof(e.error.message)==="string") return allowedEthersErrorMessages.has(e.error.message);
23
30
  return false;
24
31
  });
25
32
  }
@@ -271,6 +271,9 @@ export class SocketProvider extends JsonRpcApiProvider {
271
271
  // WebSocket provider doesn't accept batches
272
272
  assertArgument(!Array.isArray(payload), "WebSocket does not support batch send", "payload", payload);
273
273
 
274
+ if(!this.#connected && payload.method==="eth_subscribe")
275
+ return Promise.reject(makeError("WebSocket not connected!", "NETWORK_ERROR"));
276
+
274
277
  // Wait until the socket is connected before writing to it
275
278
  await this._waitUntilReady();
276
279
 
@@ -1,6 +1,11 @@
1
1
  import {JsonRpcApiProviderOptions} from "ethers";
2
2
  import type {Networkish} from "ethers";
3
- import {allowedEthersErrorCodes, tryWithRetries} from "../../utils/Utils";
3
+ import {
4
+ allowedEthersErrorCodes,
5
+ allowedEthersErrorMessages,
6
+ allowedEthersErrorNumbers,
7
+ tryWithRetries
8
+ } from "../../utils/Utils";
4
9
  import {ReconnectingWebSocketProvider} from "./ReconnectingWebSocketProvider";
5
10
  import type {WebSocketLike} from "ethers/lib.esm";
6
11
 
@@ -21,6 +26,8 @@ export class WebSocketProviderWithRetries extends ReconnectingWebSocketProvider
21
26
  send(method: string, params: Array<any> | Record<string, any>): Promise<any> {
22
27
  return tryWithRetries(() => super.send(method, params), this.retryPolicy, e => {
23
28
  if(e.code!=null && typeof(e.code)==="string") return allowedEthersErrorCodes.has(e.code);
29
+ if(e.error?.code!=null && typeof(e.error.code)==="number") return allowedEthersErrorNumbers.has(e.error.code);
30
+ if(e.error?.message!=null && typeof(e.error.message)==="string") return allowedEthersErrorMessages.has(e.error.message);
24
31
  return false;
25
32
  });
26
33
  }
@@ -90,3 +90,22 @@ export const allowedEthersErrorCodes: Set<string> = new Set([
90
90
  "INVALID_ARGUMENT", "MISSING_ARGUMENT", "UNEXPECTED_ARGUMENT", "VALUE_MISMATCH",
91
91
  "CALL_EXCEPTION", "NONCE_EXPIRED", "REPLACEMENT_UNDERPRICED", "TRANSACTION_REPLACED", "UNCONFIGURED_NAME", "OFFCHAIN_FAULT", "ACTION_REJECTED"
92
92
  ]);
93
+
94
+ export const allowedEthersErrorNumbers: Set<number> = new Set([
95
+ -32700, //Invalid JSON
96
+ -32600, //Invalid request
97
+ -32601, //Method not found
98
+ // -32602, //Invalid params
99
+ // -32603, //Internal error
100
+ -32000, //Invalid input
101
+ // -32001, //Resource not found
102
+ // -32002, //Resource unavailable
103
+ // -32003, //Transaction rejected
104
+ -32004, //Method not supported
105
+ // -32005, //Limit exceeded
106
+ -32006 //JSON-RPC version not supported
107
+ ]);
108
+
109
+ export const allowedEthersErrorMessages: Set<string> = new Set([
110
+ "already known"
111
+ ]);