@sentio/sdk 4.5.0-rc.1 → 4.5.0-rc.2
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/eth/provider.d.ts +2 -2
- package/dist/eth/provider.d.ts.map +1 -1
- package/dist/eth/provider.js +3 -9
- package/dist/eth/provider.js.map +1 -1
- package/dist/eth/rpc-agent.d.ts +19 -0
- package/dist/eth/rpc-agent.d.ts.map +1 -0
- package/dist/eth/rpc-agent.js +84 -0
- package/dist/eth/rpc-agent.js.map +1 -0
- package/package.json +3 -3
- package/src/eth/provider.ts +5 -13
- package/src/eth/rpc-agent.ts +115 -0
package/dist/eth/provider.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JsonRpcProvider, Network } from 'ethers';
|
|
2
|
-
import type { JsonRpcError, JsonRpcPayload, JsonRpcResult } from 'ethers';
|
|
2
|
+
import type { FetchRequest, JsonRpcError, JsonRpcPayload, JsonRpcResult } from 'ethers';
|
|
3
3
|
import PQueue from 'p-queue';
|
|
4
4
|
import { EthChainId } from '@sentio/chain';
|
|
5
5
|
export declare const DummyProvider: JsonRpcProvider;
|
|
@@ -7,7 +7,7 @@ export declare function getProvider(chainId?: EthChainId): JsonRpcProvider;
|
|
|
7
7
|
export declare class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
|
|
8
8
|
#private;
|
|
9
9
|
executor: PQueue;
|
|
10
|
-
constructor(url: string, network: Network, concurrency: number, batchCount?: number);
|
|
10
|
+
constructor(url: string | FetchRequest, network: Network, concurrency: number, batchCount?: number);
|
|
11
11
|
send(method: string, params: Array<any>): Promise<any>;
|
|
12
12
|
_send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult>>;
|
|
13
13
|
getRpcError(payload: JsonRpcPayload, error: JsonRpcError): Error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAW,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAW,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEvF,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAM1C,eAAO,MAAM,aAAa,iBAA2C,CAAA;AAcrE,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,eAAe,CAsCjE;AAkGD,qBAAa,2BAA4B,SAAQ,eAAe;;IAC9D,QAAQ,EAAE,MAAM,CAAA;gBAcJ,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI;IAMvF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAwF7C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAsD3F,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,GAAG,KAAK;IAiBzE,QAAQ;CAGT"}
|
package/dist/eth/provider.js
CHANGED
|
@@ -3,6 +3,7 @@ import PQueue from 'p-queue';
|
|
|
3
3
|
import { EthChainId } from '@sentio/chain';
|
|
4
4
|
import { LRUCache } from 'lru-cache';
|
|
5
5
|
import { Endpoints, providerMetrics, processMetrics, metricsStorage, GLOBAL_CONFIG } from '@sentio/runtime';
|
|
6
|
+
import { rpcCallTimeoutMs, rpcFetchRequest } from './rpc-agent.js';
|
|
6
7
|
const { miss_count, hit_count, queue_size } = providerMetrics;
|
|
7
8
|
export const DummyProvider = new JsonRpcProvider('', Network.from(1));
|
|
8
9
|
const providers = new Map();
|
|
@@ -38,18 +39,11 @@ export function getProvider(chainId) {
|
|
|
38
39
|
// console.log(
|
|
39
40
|
// `init provider for chain ${network.chainId}, concurrency: ${Endpoints.INSTANCE.concurrency}, batchCount: ${Endpoints.INSTANCE.batchCount}`
|
|
40
41
|
// )
|
|
41
|
-
|
|
42
|
+
// Our own transport agents: see rpc-agent.ts for why the default agent is not usable here.
|
|
43
|
+
provider = new QueuedStaticJsonRpcProvider(rpcFetchRequest(address), network, Endpoints.INSTANCE.concurrency, Endpoints.INSTANCE.batchCount);
|
|
42
44
|
providers.set(key, provider);
|
|
43
45
|
return provider;
|
|
44
46
|
}
|
|
45
|
-
// Default upper bound for a single RPC promise to settle, queue wait included.
|
|
46
|
-
// Deliberately above any sane queue+request latency and far below "stuck forever".
|
|
47
|
-
const DEFAULT_RPC_CALL_TIMEOUT_MS = 120_000;
|
|
48
|
-
// Read per call so tests (and operators) can adjust without a module reload.
|
|
49
|
-
function rpcCallTimeoutMs() {
|
|
50
|
-
const n = Number(process.env['RPC_CALL_TIMEOUT_MS']);
|
|
51
|
-
return Number.isFinite(n) && n > 0 ? n : DEFAULT_RPC_CALL_TIMEOUT_MS;
|
|
52
|
-
}
|
|
53
47
|
// Keep the diagnostic bounded: `what` may describe params with large calldata.
|
|
54
48
|
const TIMEOUT_WHAT_MAX = 120;
|
|
55
49
|
function timeoutError(ms, what) {
|
package/dist/eth/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import https from 'node:https';
|
|
3
|
+
import { FetchRequest } from 'ethers';
|
|
4
|
+
import type { FetchGetUrlFunc } from 'ethers';
|
|
5
|
+
export declare const FREE_SOCKET_IDLE_MS = 5000;
|
|
6
|
+
export declare function rpcCallTimeoutMs(): number;
|
|
7
|
+
export declare function freeSocketIdleMs(selected: number | undefined): number;
|
|
8
|
+
export declare function isHttpsUrl(url: string): boolean;
|
|
9
|
+
export declare function rpcAgentOptions(extra?: http.AgentOptions): http.AgentOptions;
|
|
10
|
+
export declare function createRpcHttpAgent(extra?: http.AgentOptions): http.Agent;
|
|
11
|
+
export declare function createRpcHttpsAgent(extra?: https.AgentOptions): https.Agent;
|
|
12
|
+
export interface RpcAgents {
|
|
13
|
+
readonly http: http.Agent;
|
|
14
|
+
readonly https: https.Agent;
|
|
15
|
+
readonly getUrlFunc: FetchGetUrlFunc;
|
|
16
|
+
}
|
|
17
|
+
export declare function rpcAgents(): RpcAgents;
|
|
18
|
+
export declare function rpcFetchRequest(url: string): FetchRequest;
|
|
19
|
+
//# sourceMappingURL=rpc-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-agent.d.ts","sourceRoot":"","sources":["../../src/eth/rpc-agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,KAAK,MAAM,YAAY,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAkB7C,eAAO,MAAM,mBAAmB,OAAQ,CAAA;AAQxC,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC;AA2BD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAErE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAExE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAE3E;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAA;CACrC;AAOD,wBAAgB,SAAS,IAAI,SAAS,CAarC;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAIzD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import https from 'node:https';
|
|
3
|
+
import { FetchRequest } from 'ethers';
|
|
4
|
+
// Node >= 19 ships `http.globalAgent` as `{ keepAlive: true, timeout: 5000 }`. That agent
|
|
5
|
+
// timeout is installed on every NEW socket at creation and stays in force for the whole
|
|
6
|
+
// DNS + TCP connect phase: ethers' own `request.setTimeout(300s)` only replaces it once the
|
|
7
|
+
// socket has connected (Node defers it with `socket.once('connect', ...)` while connecting).
|
|
8
|
+
// So a connect that takes more than 5s — a slow resolver, or the worker's event loop being
|
|
9
|
+
// busy when the connect completes — surfaces as an ethers `request timeout`, even though the
|
|
10
|
+
// request then goes out anyway and is answered in milliseconds. Idle keep-alive sockets are
|
|
11
|
+
// also dropped after those same 5s, so a briefly idle worker reconnects (and re-resolves) for
|
|
12
|
+
// almost every call, which is what keeps putting requests into that window.
|
|
13
|
+
//
|
|
14
|
+
// Use our own agents instead: the connect-phase socket timeout is the RPC deadline, so the
|
|
15
|
+
// deadline in boundedTask is the only clock a call can run out on; idle keep-alive sockets
|
|
16
|
+
// keep Node's short retention so a server-side idle close never races a reuse.
|
|
17
|
+
// How long an idle keep-alive socket is kept before we drop it ourselves. Same value Node's
|
|
18
|
+
// global agent uses; well below the idle timeout of any RPC endpoint or proxy in front of one.
|
|
19
|
+
export const FREE_SOCKET_IDLE_MS = 5_000;
|
|
20
|
+
// Default upper bound for a single RPC promise to settle, queue wait included.
|
|
21
|
+
// Deliberately above any sane queue+request latency and far below "stuck forever".
|
|
22
|
+
// Also the socket timeout for the connect phase of a new connection.
|
|
23
|
+
const DEFAULT_RPC_CALL_TIMEOUT_MS = 120_000;
|
|
24
|
+
// Read per call so tests (and operators) can adjust without a module reload.
|
|
25
|
+
export function rpcCallTimeoutMs() {
|
|
26
|
+
const n = Number(process.env['RPC_CALL_TIMEOUT_MS']);
|
|
27
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_RPC_CALL_TIMEOUT_MS;
|
|
28
|
+
}
|
|
29
|
+
function keepAliveWithShortIdle(agent) {
|
|
30
|
+
const hooks = agent;
|
|
31
|
+
const base = hooks.keepSocketAlive.bind(agent);
|
|
32
|
+
hooks.keepSocketAlive = (socket) => {
|
|
33
|
+
const keep = base(socket);
|
|
34
|
+
if (keep) {
|
|
35
|
+
socket.setTimeout(freeSocketIdleMs(socket.timeout));
|
|
36
|
+
}
|
|
37
|
+
return keep;
|
|
38
|
+
};
|
|
39
|
+
return agent;
|
|
40
|
+
}
|
|
41
|
+
// The idle timeout to leave on a freed socket, given the one Node's hook selected for it.
|
|
42
|
+
export function freeSocketIdleMs(selected) {
|
|
43
|
+
return selected && selected > 0 ? Math.min(selected, FREE_SOCKET_IDLE_MS) : FREE_SOCKET_IDLE_MS;
|
|
44
|
+
}
|
|
45
|
+
// Same scheme test ethers' node transport applies (case-insensitive), so a request never lands
|
|
46
|
+
// on an agent for the other protocol.
|
|
47
|
+
export function isHttpsUrl(url) {
|
|
48
|
+
return url.split(':')[0].toLowerCase() === 'https';
|
|
49
|
+
}
|
|
50
|
+
export function rpcAgentOptions(extra) {
|
|
51
|
+
return { keepAlive: true, scheduling: 'lifo', timeout: rpcCallTimeoutMs(), ...extra };
|
|
52
|
+
}
|
|
53
|
+
export function createRpcHttpAgent(extra) {
|
|
54
|
+
return keepAliveWithShortIdle(new http.Agent(rpcAgentOptions(extra)));
|
|
55
|
+
}
|
|
56
|
+
export function createRpcHttpsAgent(extra) {
|
|
57
|
+
return keepAliveWithShortIdle(new https.Agent(rpcAgentOptions(extra)));
|
|
58
|
+
}
|
|
59
|
+
let agents;
|
|
60
|
+
// The process-wide agents every FetchRequest the SDK hands to ethers goes through, plus the
|
|
61
|
+
// `getUrlFunc` that routes a request to the one matching its scheme. Built lazily so the
|
|
62
|
+
// agents pick up RPC_CALL_TIMEOUT_MS from the environment the processor actually runs in.
|
|
63
|
+
export function rpcAgents() {
|
|
64
|
+
if (!agents) {
|
|
65
|
+
const viaHttp = createRpcHttpAgent();
|
|
66
|
+
const viaHttps = createRpcHttpsAgent();
|
|
67
|
+
const overHttp = FetchRequest.createGetUrlFunc({ agent: viaHttp });
|
|
68
|
+
const overHttps = FetchRequest.createGetUrlFunc({ agent: viaHttps });
|
|
69
|
+
agents = {
|
|
70
|
+
http: viaHttp,
|
|
71
|
+
https: viaHttps,
|
|
72
|
+
getUrlFunc: (req, signal) => (isHttpsUrl(req.url) ? overHttps : overHttp)(req, signal)
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return agents;
|
|
76
|
+
}
|
|
77
|
+
// A FetchRequest for `url` whose transport uses the SDK agents. Clones keep the getUrlFunc, so
|
|
78
|
+
// this is safe to hand to a JsonRpcProvider, which clones it once per request.
|
|
79
|
+
export function rpcFetchRequest(url) {
|
|
80
|
+
const req = new FetchRequest(url);
|
|
81
|
+
req.getUrlFunc = rpcAgents().getUrlFunc;
|
|
82
|
+
return req;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=rpc-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-agent.js","sourceRoot":"","sources":["../../src/eth/rpc-agent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentio/sdk",
|
|
3
|
-
"version": "4.5.0-rc.
|
|
3
|
+
"version": "4.5.0-rc.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
"typechain": "^8.3.2",
|
|
98
98
|
"utility-types": "^3.11.0",
|
|
99
99
|
"yaml": "^2.3.4",
|
|
100
|
-
"@sentio/
|
|
101
|
-
"@sentio/
|
|
100
|
+
"@sentio/runtime": "^4.5.0-rc.2",
|
|
101
|
+
"@sentio/protos": "4.5.0-rc.2"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"tsdown": "^0.22.3"
|
package/src/eth/provider.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { JsonRpcProvider, Network, hexlify } from 'ethers'
|
|
2
|
-
import type { JsonRpcError, JsonRpcPayload, JsonRpcResult } from 'ethers'
|
|
2
|
+
import type { FetchRequest, JsonRpcError, JsonRpcPayload, JsonRpcResult } from 'ethers'
|
|
3
3
|
|
|
4
4
|
import PQueue from 'p-queue'
|
|
5
5
|
import { EthChainId } from '@sentio/chain'
|
|
6
6
|
import { LRUCache } from 'lru-cache'
|
|
7
7
|
import { Endpoints, providerMetrics, processMetrics, metricsStorage, GLOBAL_CONFIG } from '@sentio/runtime'
|
|
8
|
+
import { rpcCallTimeoutMs, rpcFetchRequest } from './rpc-agent.js'
|
|
8
9
|
const { miss_count, hit_count, queue_size } = providerMetrics
|
|
9
10
|
|
|
10
11
|
export const DummyProvider = new JsonRpcProvider('', Network.from(1))
|
|
@@ -50,8 +51,9 @@ export function getProvider(chainId?: EthChainId): JsonRpcProvider {
|
|
|
50
51
|
// console.log(
|
|
51
52
|
// `init provider for chain ${network.chainId}, concurrency: ${Endpoints.INSTANCE.concurrency}, batchCount: ${Endpoints.INSTANCE.batchCount}`
|
|
52
53
|
// )
|
|
54
|
+
// Our own transport agents: see rpc-agent.ts for why the default agent is not usable here.
|
|
53
55
|
provider = new QueuedStaticJsonRpcProvider(
|
|
54
|
-
address,
|
|
56
|
+
rpcFetchRequest(address),
|
|
55
57
|
network,
|
|
56
58
|
Endpoints.INSTANCE.concurrency,
|
|
57
59
|
Endpoints.INSTANCE.batchCount
|
|
@@ -60,16 +62,6 @@ export function getProvider(chainId?: EthChainId): JsonRpcProvider {
|
|
|
60
62
|
return provider
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
// Default upper bound for a single RPC promise to settle, queue wait included.
|
|
64
|
-
// Deliberately above any sane queue+request latency and far below "stuck forever".
|
|
65
|
-
const DEFAULT_RPC_CALL_TIMEOUT_MS = 120_000
|
|
66
|
-
|
|
67
|
-
// Read per call so tests (and operators) can adjust without a module reload.
|
|
68
|
-
function rpcCallTimeoutMs(): number {
|
|
69
|
-
const n = Number(process.env['RPC_CALL_TIMEOUT_MS'])
|
|
70
|
-
return Number.isFinite(n) && n > 0 ? n : DEFAULT_RPC_CALL_TIMEOUT_MS
|
|
71
|
-
}
|
|
72
|
-
|
|
73
65
|
// Keep the diagnostic bounded: `what` may describe params with large calldata.
|
|
74
66
|
const TIMEOUT_WHAT_MAX = 120
|
|
75
67
|
|
|
@@ -181,7 +173,7 @@ export class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
|
|
|
181
173
|
max: 300000 // 300k items
|
|
182
174
|
})
|
|
183
175
|
|
|
184
|
-
constructor(url: string, network: Network, concurrency: number, batchCount = 1) {
|
|
176
|
+
constructor(url: string | FetchRequest, network: Network, concurrency: number, batchCount = 1) {
|
|
185
177
|
// TODO re-enable match when possible
|
|
186
178
|
super(url, network, { staticNetwork: network, batchMaxCount: batchCount })
|
|
187
179
|
this.executor = new PQueue({ concurrency: concurrency })
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import http from 'node:http'
|
|
2
|
+
import https from 'node:https'
|
|
3
|
+
import type { Socket } from 'node:net'
|
|
4
|
+
import { FetchRequest } from 'ethers'
|
|
5
|
+
import type { FetchGetUrlFunc } from 'ethers'
|
|
6
|
+
|
|
7
|
+
// Node >= 19 ships `http.globalAgent` as `{ keepAlive: true, timeout: 5000 }`. That agent
|
|
8
|
+
// timeout is installed on every NEW socket at creation and stays in force for the whole
|
|
9
|
+
// DNS + TCP connect phase: ethers' own `request.setTimeout(300s)` only replaces it once the
|
|
10
|
+
// socket has connected (Node defers it with `socket.once('connect', ...)` while connecting).
|
|
11
|
+
// So a connect that takes more than 5s — a slow resolver, or the worker's event loop being
|
|
12
|
+
// busy when the connect completes — surfaces as an ethers `request timeout`, even though the
|
|
13
|
+
// request then goes out anyway and is answered in milliseconds. Idle keep-alive sockets are
|
|
14
|
+
// also dropped after those same 5s, so a briefly idle worker reconnects (and re-resolves) for
|
|
15
|
+
// almost every call, which is what keeps putting requests into that window.
|
|
16
|
+
//
|
|
17
|
+
// Use our own agents instead: the connect-phase socket timeout is the RPC deadline, so the
|
|
18
|
+
// deadline in boundedTask is the only clock a call can run out on; idle keep-alive sockets
|
|
19
|
+
// keep Node's short retention so a server-side idle close never races a reuse.
|
|
20
|
+
|
|
21
|
+
// How long an idle keep-alive socket is kept before we drop it ourselves. Same value Node's
|
|
22
|
+
// global agent uses; well below the idle timeout of any RPC endpoint or proxy in front of one.
|
|
23
|
+
export const FREE_SOCKET_IDLE_MS = 5_000
|
|
24
|
+
|
|
25
|
+
// Default upper bound for a single RPC promise to settle, queue wait included.
|
|
26
|
+
// Deliberately above any sane queue+request latency and far below "stuck forever".
|
|
27
|
+
// Also the socket timeout for the connect phase of a new connection.
|
|
28
|
+
const DEFAULT_RPC_CALL_TIMEOUT_MS = 120_000
|
|
29
|
+
|
|
30
|
+
// Read per call so tests (and operators) can adjust without a module reload.
|
|
31
|
+
export function rpcCallTimeoutMs(): number {
|
|
32
|
+
const n = Number(process.env['RPC_CALL_TIMEOUT_MS'])
|
|
33
|
+
return Number.isFinite(n) && n > 0 ? n : DEFAULT_RPC_CALL_TIMEOUT_MS
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// `timeout` on an Agent doubles as the idle timeout of its free sockets; we want a long connect
|
|
37
|
+
// timeout but a short idle retention, so cap the timer again when a socket goes back to the
|
|
38
|
+
// free pool. (`keepSocketAlive` is the documented hook Node calls exactly at that point.) The
|
|
39
|
+
// base hook already honours a server `Keep-Alive: timeout=N` hint, minus Node's safety buffer,
|
|
40
|
+
// whenever that is shorter than the agent timeout — keep whichever is shorter, never lengthen
|
|
41
|
+
// it: an idle socket that outlives the server's idle timeout is a reset waiting to happen.
|
|
42
|
+
// (@types/node does not declare the hook, hence the structural cast.)
|
|
43
|
+
interface KeepSocketAlive {
|
|
44
|
+
keepSocketAlive(socket: Socket): boolean
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function keepAliveWithShortIdle<T extends http.Agent | https.Agent>(agent: T): T {
|
|
48
|
+
const hooks = agent as unknown as KeepSocketAlive
|
|
49
|
+
const base = hooks.keepSocketAlive.bind(agent)
|
|
50
|
+
hooks.keepSocketAlive = (socket: Socket): boolean => {
|
|
51
|
+
const keep = base(socket)
|
|
52
|
+
if (keep) {
|
|
53
|
+
socket.setTimeout(freeSocketIdleMs(socket.timeout))
|
|
54
|
+
}
|
|
55
|
+
return keep
|
|
56
|
+
}
|
|
57
|
+
return agent
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// The idle timeout to leave on a freed socket, given the one Node's hook selected for it.
|
|
61
|
+
export function freeSocketIdleMs(selected: number | undefined): number {
|
|
62
|
+
return selected && selected > 0 ? Math.min(selected, FREE_SOCKET_IDLE_MS) : FREE_SOCKET_IDLE_MS
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Same scheme test ethers' node transport applies (case-insensitive), so a request never lands
|
|
66
|
+
// on an agent for the other protocol.
|
|
67
|
+
export function isHttpsUrl(url: string): boolean {
|
|
68
|
+
return url.split(':')[0].toLowerCase() === 'https'
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function rpcAgentOptions(extra?: http.AgentOptions): http.AgentOptions {
|
|
72
|
+
return { keepAlive: true, scheduling: 'lifo', timeout: rpcCallTimeoutMs(), ...extra }
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function createRpcHttpAgent(extra?: http.AgentOptions): http.Agent {
|
|
76
|
+
return keepAliveWithShortIdle(new http.Agent(rpcAgentOptions(extra)))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function createRpcHttpsAgent(extra?: https.AgentOptions): https.Agent {
|
|
80
|
+
return keepAliveWithShortIdle(new https.Agent(rpcAgentOptions(extra)))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface RpcAgents {
|
|
84
|
+
readonly http: http.Agent
|
|
85
|
+
readonly https: https.Agent
|
|
86
|
+
readonly getUrlFunc: FetchGetUrlFunc
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
let agents: RpcAgents | undefined
|
|
90
|
+
|
|
91
|
+
// The process-wide agents every FetchRequest the SDK hands to ethers goes through, plus the
|
|
92
|
+
// `getUrlFunc` that routes a request to the one matching its scheme. Built lazily so the
|
|
93
|
+
// agents pick up RPC_CALL_TIMEOUT_MS from the environment the processor actually runs in.
|
|
94
|
+
export function rpcAgents(): RpcAgents {
|
|
95
|
+
if (!agents) {
|
|
96
|
+
const viaHttp = createRpcHttpAgent()
|
|
97
|
+
const viaHttps = createRpcHttpsAgent()
|
|
98
|
+
const overHttp = FetchRequest.createGetUrlFunc({ agent: viaHttp })
|
|
99
|
+
const overHttps = FetchRequest.createGetUrlFunc({ agent: viaHttps })
|
|
100
|
+
agents = {
|
|
101
|
+
http: viaHttp,
|
|
102
|
+
https: viaHttps,
|
|
103
|
+
getUrlFunc: (req, signal) => (isHttpsUrl(req.url) ? overHttps : overHttp)(req, signal)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return agents
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// A FetchRequest for `url` whose transport uses the SDK agents. Clones keep the getUrlFunc, so
|
|
110
|
+
// this is safe to hand to a JsonRpcProvider, which clones it once per request.
|
|
111
|
+
export function rpcFetchRequest(url: string): FetchRequest {
|
|
112
|
+
const req = new FetchRequest(url)
|
|
113
|
+
req.getUrlFunc = rpcAgents().getUrlFunc
|
|
114
|
+
return req
|
|
115
|
+
}
|