@sentio/sdk 4.5.0-rc.1 → 4.5.0-rc.3

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,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;AAEzE,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAK1C,eAAO,MAAM,aAAa,iBAA2C,CAAA;AAcrE,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,eAAe,CAqCjE;AA4GD,qBAAa,2BAA4B,SAAQ,eAAe;;IAC9D,QAAQ,EAAE,MAAM,CAAA;gBAcJ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,SAAI;IAMxE,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"}
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"}
@@ -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
- provider = new QueuedStaticJsonRpcProvider(address, network, Endpoints.INSTANCE.concurrency, Endpoints.INSTANCE.batchCount);
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) {
@@ -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.1",
3
+ "version": "4.5.0-rc.3",
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/protos": "4.5.0-rc.1",
101
- "@sentio/runtime": "^4.5.0-rc.1"
100
+ "@sentio/protos": "4.5.0-rc.3",
101
+ "@sentio/runtime": "^4.5.0-rc.3"
102
102
  },
103
103
  "peerDependencies": {
104
104
  "tsdown": "^0.22.3"
@@ -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
+ }