@sidhujag/sysweb3-keyring 2.1.13 → 2.1.15
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/CHANGELOG.md +11 -0
- package/cjs/index.js +4 -1
- package/cjs/index.js.map +1 -1
- package/cjs/providers.js +45 -171
- package/cjs/providers.js.map +1 -1
- package/cjs/rpc-read-client.js +456 -0
- package/cjs/rpc-read-client.js.map +1 -0
- package/cjs/rpc-transport.js +136 -0
- package/cjs/rpc-transport.js.map +1 -0
- package/esm/providers.js +44 -170
- package/esm/providers.js.map +1 -1
- package/esm/rpc-read-client.js +451 -0
- package/esm/rpc-read-client.js.map +1 -0
- package/esm/rpc-transport.js +130 -0
- package/esm/rpc-transport.js.map +1 -0
- package/package.json +7 -1
- package/types/index.d.ts +2 -0
- package/types/keyring-core.d.ts +1 -1
- package/types/providers.d.ts +6 -9
- package/types/rpc-read-client.d.ts +45 -0
- package/types/rpc-transport.d.ts +27 -0
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonRpcReadClient = exports.RpcReadError = void 0;
|
|
4
|
+
const rpc_transport_1 = require("./rpc-transport");
|
|
5
|
+
class RpcBatchRefused extends Error {
|
|
6
|
+
}
|
|
7
|
+
class RpcBatchAmbiguous extends Error {
|
|
8
|
+
}
|
|
9
|
+
class RpcPayloadTooLarge extends Error {
|
|
10
|
+
}
|
|
11
|
+
class RpcBatchLimit extends Error {
|
|
12
|
+
}
|
|
13
|
+
const aborted = (signal) => {
|
|
14
|
+
if (signal.reason instanceof Error)
|
|
15
|
+
return signal.reason;
|
|
16
|
+
return Object.assign(new Error('RPC read aborted'), { name: 'AbortError' });
|
|
17
|
+
};
|
|
18
|
+
const check = (signal) => {
|
|
19
|
+
if (signal.aborted)
|
|
20
|
+
throw aborted(signal);
|
|
21
|
+
};
|
|
22
|
+
const byteLength = (value) => new TextEncoder().encode(value).byteLength;
|
|
23
|
+
const boundedInteger = (value, maximum, name) => {
|
|
24
|
+
if (!Number.isSafeInteger(value) || value < 1 || value > maximum)
|
|
25
|
+
throw new Error(`Invalid RPC ${name}`);
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
class RpcReadError extends Error {
|
|
29
|
+
constructor(value) {
|
|
30
|
+
super(value.message);
|
|
31
|
+
this.name = 'RpcReadError';
|
|
32
|
+
this.code = value.code;
|
|
33
|
+
this.data = value.data;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.RpcReadError = RpcReadError;
|
|
37
|
+
const batchFailure = (value) => {
|
|
38
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
39
|
+
return undefined;
|
|
40
|
+
const { jsonrpc, result, error, id } = value;
|
|
41
|
+
if (jsonrpc !== '2.0' ||
|
|
42
|
+
result !== undefined ||
|
|
43
|
+
(id !== null && id !== undefined) ||
|
|
44
|
+
!error ||
|
|
45
|
+
!Number.isSafeInteger(error.code) ||
|
|
46
|
+
typeof error.message !== 'string')
|
|
47
|
+
return undefined;
|
|
48
|
+
// A temporal request limit is transient even if it mentions batches.
|
|
49
|
+
// A request count explicitly scoped to one batch is a size capability.
|
|
50
|
+
if (/rate[ -]?limit|quota|throttl|(?:per|\/)\s*(?:second|minute|hour|day|sec\b|ms\b)|\brps\b/i.test(error.message) ||
|
|
51
|
+
(/too many requests/i.test(error.message) &&
|
|
52
|
+
!/(?:in|per|for) (?:a |one |single )?batch|batch (?:size|count|length)/i.test(error.message)))
|
|
53
|
+
return undefined;
|
|
54
|
+
if (error.code === -32600 &&
|
|
55
|
+
/^invalid request[.!]?$/i.test(error.message.trim()))
|
|
56
|
+
return new RpcBatchAmbiguous();
|
|
57
|
+
if ((error.code === -32600 || error.code === -32005) &&
|
|
58
|
+
/batch|array/i.test(error.message)) {
|
|
59
|
+
if (/too (?:large|many)|more than\s+\d+|(?:maximum|max)\s+(?:batch|request|item|size)|(?:batch|array|request|item)[ -]?(?:size|count|length)|batch[ -]?limit/i.test(error.message))
|
|
60
|
+
return new RpcBatchLimit();
|
|
61
|
+
if (/unsupported|not support|not allowed|invalid (?:request|batch|array)/i.test(error.message))
|
|
62
|
+
return new RpcBatchRefused();
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
};
|
|
66
|
+
async function cancelBody(response) {
|
|
67
|
+
try {
|
|
68
|
+
await response.body?.cancel();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Cancellation may reject after the underlying stream has already closed.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function responseText(response, maximum, signal) {
|
|
75
|
+
const declared = response.headers.get('content-length');
|
|
76
|
+
if (declared !== null &&
|
|
77
|
+
(!/^\d+$/.test(declared) || Number(declared) > maximum)) {
|
|
78
|
+
await cancelBody(response);
|
|
79
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('RPC response exceeded size limit', false);
|
|
80
|
+
}
|
|
81
|
+
if (!response.body?.getReader) {
|
|
82
|
+
try {
|
|
83
|
+
const text = await response.text();
|
|
84
|
+
check(signal);
|
|
85
|
+
if (byteLength(text) > maximum)
|
|
86
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('RPC response exceeded size limit', false);
|
|
87
|
+
return text;
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await cancelBody(response);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let reader;
|
|
94
|
+
try {
|
|
95
|
+
reader = response.body.getReader();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await cancelBody(response);
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
102
|
+
let size = 0;
|
|
103
|
+
let text = '';
|
|
104
|
+
try {
|
|
105
|
+
let complete = false;
|
|
106
|
+
while (!complete) {
|
|
107
|
+
check(signal);
|
|
108
|
+
const part = await reader.read();
|
|
109
|
+
if (part.done) {
|
|
110
|
+
complete = true;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
size += part.value.byteLength;
|
|
114
|
+
if (size > maximum)
|
|
115
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('RPC response exceeded size limit', false);
|
|
116
|
+
text += decoder.decode(part.value, { stream: true });
|
|
117
|
+
}
|
|
118
|
+
return text + decoder.decode();
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
try {
|
|
122
|
+
await reader.cancel();
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Keep the physical slot until cancellation settles, including rejection.
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
reader.releaseLock();
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Bounded, read-only JSON-RPC transport. Each instance belongs to one endpoint generation. */
|
|
133
|
+
class JsonRpcReadClient {
|
|
134
|
+
constructor(url, options = {}) {
|
|
135
|
+
this.lifetime = new AbortController();
|
|
136
|
+
this.queue = [];
|
|
137
|
+
this.active = 0;
|
|
138
|
+
this.chainGeneration = 0;
|
|
139
|
+
this.endpoint = url;
|
|
140
|
+
const endpoint = new URL(url);
|
|
141
|
+
if (!['https:', 'http:'].includes(endpoint.protocol))
|
|
142
|
+
throw new Error('Invalid RPC URL');
|
|
143
|
+
this.fetcher =
|
|
144
|
+
options.fetch ??
|
|
145
|
+
((address, init) => fetch(address, init));
|
|
146
|
+
this.options = {
|
|
147
|
+
requestInit: options.requestInit ?? {},
|
|
148
|
+
recoverResponse: options.recoverResponse ?? true,
|
|
149
|
+
maxBatchItems: boundedInteger(options.maxBatchItems ?? 40, 128, 'batch size'),
|
|
150
|
+
maxRequestBytes: boundedInteger(options.maxRequestBytes ?? 256 * 1024, 2 * 1024 * 1024, 'request size'),
|
|
151
|
+
maxResponseBytes: boundedInteger(options.maxResponseBytes ?? 2 * 1024 * 1024, 8 * 1024 * 1024, 'response size'),
|
|
152
|
+
maxConcurrency: boundedInteger(options.maxConcurrency ?? 4, 16, 'concurrency'),
|
|
153
|
+
timeoutMs: boundedInteger(options.timeoutMs ?? 12000, 30000, 'timeout'),
|
|
154
|
+
};
|
|
155
|
+
this.batchLimit = this.options.maxBatchItems;
|
|
156
|
+
if (options.signal?.aborted)
|
|
157
|
+
this.destroy();
|
|
158
|
+
else
|
|
159
|
+
options.signal?.addEventListener('abort', () => this.destroy(), {
|
|
160
|
+
once: true,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
get url() {
|
|
164
|
+
return this.endpoint;
|
|
165
|
+
}
|
|
166
|
+
destroy() {
|
|
167
|
+
this.chainGeneration++;
|
|
168
|
+
this.chainCache = undefined;
|
|
169
|
+
this.chainRequest?.controller.abort();
|
|
170
|
+
this.lifetime.abort();
|
|
171
|
+
}
|
|
172
|
+
async slot(signal, work) {
|
|
173
|
+
check(signal);
|
|
174
|
+
await new Promise((resolve, reject) => {
|
|
175
|
+
const waiter = {
|
|
176
|
+
run: () => {
|
|
177
|
+
signal.removeEventListener('abort', waiter.cancel);
|
|
178
|
+
this.active++;
|
|
179
|
+
resolve();
|
|
180
|
+
},
|
|
181
|
+
cancel: () => {
|
|
182
|
+
const i = this.queue.indexOf(waiter);
|
|
183
|
+
if (i >= 0)
|
|
184
|
+
this.queue.splice(i, 1);
|
|
185
|
+
reject(aborted(signal));
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
if (this.active < this.options.maxConcurrency)
|
|
189
|
+
waiter.run();
|
|
190
|
+
else {
|
|
191
|
+
this.queue.push(waiter);
|
|
192
|
+
signal.addEventListener('abort', waiter.cancel, { once: true });
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
try {
|
|
196
|
+
check(signal);
|
|
197
|
+
return await work();
|
|
198
|
+
}
|
|
199
|
+
finally {
|
|
200
|
+
this.active--;
|
|
201
|
+
this.queue.shift()?.run();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async readMany(inputs, options = {}) {
|
|
205
|
+
if (!Array.isArray(inputs) ||
|
|
206
|
+
inputs.length > 1024 ||
|
|
207
|
+
inputs.some((input) => !input ||
|
|
208
|
+
!(0, rpc_transport_1.isReadOnlyRpcMethod)(input.method) ||
|
|
209
|
+
!Array.isArray(input.params)))
|
|
210
|
+
throw new Error('Invalid read-only RPC requests');
|
|
211
|
+
// Snapshot before any await so caller mutations cannot change dispatched reads.
|
|
212
|
+
const serialized = JSON.stringify(inputs);
|
|
213
|
+
if (byteLength(serialized) > this.options.maxRequestBytes * 16)
|
|
214
|
+
throw new Error('RPC read work exceeded request budget');
|
|
215
|
+
const snapshot = JSON.parse(serialized);
|
|
216
|
+
if (!Array.isArray(snapshot) ||
|
|
217
|
+
snapshot.length > 1024 ||
|
|
218
|
+
snapshot.some((input) => !input ||
|
|
219
|
+
!(0, rpc_transport_1.isReadOnlyRpcMethod)(input.method) ||
|
|
220
|
+
!Array.isArray(input.params)))
|
|
221
|
+
throw new Error('Invalid read-only RPC requests');
|
|
222
|
+
const timeout = boundedInteger(options.timeoutMs ?? this.options.timeoutMs, 30000, 'timeout');
|
|
223
|
+
const maximum = boundedInteger(options.maxResponseBytes ?? this.options.maxResponseBytes, 8 * 1024 * 1024, 'response size');
|
|
224
|
+
const controller = new AbortController();
|
|
225
|
+
const abort = () => controller.abort(options.signal?.reason ?? this.lifetime.signal.reason);
|
|
226
|
+
const sources = [options.signal, this.lifetime.signal].filter((value) => !!value);
|
|
227
|
+
sources.forEach((source) => source.addEventListener('abort', abort, { once: true }));
|
|
228
|
+
if (sources.some((source) => source.aborted))
|
|
229
|
+
abort();
|
|
230
|
+
const timer = setTimeout(() => controller.abort(Object.assign(new Error('RPC read deadline exceeded'), {
|
|
231
|
+
name: 'AbortError',
|
|
232
|
+
})), timeout);
|
|
233
|
+
const signal = controller.signal;
|
|
234
|
+
let attempts = 0;
|
|
235
|
+
const request = (rows, batch, recoverResponse = this.options.recoverResponse) => (0, rpc_transport_1.requestJsonRpc)(this.url, rows, batch, signal, async (url, body) => {
|
|
236
|
+
if (++attempts > 2048)
|
|
237
|
+
throw new Error('RPC attempt limit exceeded');
|
|
238
|
+
if (byteLength(body) > this.options.maxRequestBytes)
|
|
239
|
+
throw new RpcPayloadTooLarge();
|
|
240
|
+
return this.slot(signal, async () => {
|
|
241
|
+
const headers = new Headers(this.options.requestInit.headers);
|
|
242
|
+
headers.set('Content-Type', 'application/json');
|
|
243
|
+
headers.set('Accept', 'application/json');
|
|
244
|
+
const response = await this.fetcher(url, {
|
|
245
|
+
...this.options.requestInit,
|
|
246
|
+
method: 'POST',
|
|
247
|
+
headers,
|
|
248
|
+
body,
|
|
249
|
+
signal,
|
|
250
|
+
});
|
|
251
|
+
let readingBody = false;
|
|
252
|
+
try {
|
|
253
|
+
check(signal);
|
|
254
|
+
if (response.status === 413)
|
|
255
|
+
throw new RpcPayloadTooLarge();
|
|
256
|
+
// Inspect HTTP 400 for a protocol-level batch refusal.
|
|
257
|
+
// Transient HTTP failures never establish a batch capability.
|
|
258
|
+
const batchBadRequest = batch && response.status === 400;
|
|
259
|
+
if ((!response.ok || response.status !== 200) && !batchBadRequest)
|
|
260
|
+
throw Object.assign(new Error(`RPC HTTP ${response.status}`), {
|
|
261
|
+
status: response.status,
|
|
262
|
+
});
|
|
263
|
+
const contentType = response.headers.get('content-type');
|
|
264
|
+
if (contentType &&
|
|
265
|
+
!/^(application\/json|application\/[a-z0-9!#$&^_.+-]+\+json)(?:\s*;|$)/i.test(contentType))
|
|
266
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('Invalid JSON-RPC content type', false);
|
|
267
|
+
readingBody = true;
|
|
268
|
+
const text = await responseText(response, maximum, signal);
|
|
269
|
+
let json;
|
|
270
|
+
try {
|
|
271
|
+
json = JSON.parse(text);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('Invalid JSON-RPC JSON response', false);
|
|
275
|
+
}
|
|
276
|
+
const batchError = batch ? batchFailure(json) : undefined;
|
|
277
|
+
if (batchError)
|
|
278
|
+
throw batchError;
|
|
279
|
+
if (batchBadRequest)
|
|
280
|
+
throw Object.assign(new Error('RPC HTTP 400'), { status: 400 });
|
|
281
|
+
return json;
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
if (!readingBody)
|
|
285
|
+
await cancelBody(response);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}, recoverResponse);
|
|
289
|
+
const execute = async (rows, recoverResponse = this.options.recoverResponse) => {
|
|
290
|
+
check(signal);
|
|
291
|
+
try {
|
|
292
|
+
const responses = await request(rows, rows.length > 1, recoverResponse);
|
|
293
|
+
return responses.map((response) => {
|
|
294
|
+
if (response.error)
|
|
295
|
+
return {
|
|
296
|
+
status: 'rejected',
|
|
297
|
+
reason: new RpcReadError(response.error),
|
|
298
|
+
};
|
|
299
|
+
return { status: 'fulfilled', value: response.result };
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
check(signal);
|
|
304
|
+
if (rows.length > 1 && error instanceof RpcBatchAmbiguous) {
|
|
305
|
+
// A generic envelope error alone is insufficient evidence. Probe one
|
|
306
|
+
// proper single request and retain its result without sending it again.
|
|
307
|
+
const [probe] = await execute(rows.slice(0, 1), false);
|
|
308
|
+
if (probe.status === 'fulfilled' ||
|
|
309
|
+
probe.reason instanceof RpcReadError) {
|
|
310
|
+
this.batchLimit = 1;
|
|
311
|
+
const results = [probe];
|
|
312
|
+
for (const row of rows.slice(1))
|
|
313
|
+
results.push(...(await execute([row])));
|
|
314
|
+
return results;
|
|
315
|
+
}
|
|
316
|
+
return rows.map(() => ({ status: 'rejected', reason: error }));
|
|
317
|
+
}
|
|
318
|
+
if (rows.length > 1 &&
|
|
319
|
+
(error instanceof RpcBatchRefused ||
|
|
320
|
+
error instanceof RpcPayloadTooLarge ||
|
|
321
|
+
error instanceof RpcBatchLimit)) {
|
|
322
|
+
this.batchLimit =
|
|
323
|
+
error instanceof RpcBatchRefused
|
|
324
|
+
? 1
|
|
325
|
+
: Math.min(this.batchLimit, Math.ceil(rows.length / 2));
|
|
326
|
+
const results = [];
|
|
327
|
+
let offset = 0;
|
|
328
|
+
while (offset < rows.length) {
|
|
329
|
+
const next = Math.min(rows.length, offset + this.batchLimit);
|
|
330
|
+
const chunk = rows.slice(offset, next);
|
|
331
|
+
offset = next;
|
|
332
|
+
results.push(...(await execute(chunk)));
|
|
333
|
+
}
|
|
334
|
+
return results;
|
|
335
|
+
}
|
|
336
|
+
return rows.map(() => ({ status: 'rejected', reason: error }));
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
try {
|
|
340
|
+
check(signal);
|
|
341
|
+
const batches = [];
|
|
342
|
+
for (let i = 0; i < snapshot.length; i += this.batchLimit)
|
|
343
|
+
batches.push(snapshot.slice(i, i + this.batchLimit));
|
|
344
|
+
let next = 0;
|
|
345
|
+
const results = new Array(batches.length);
|
|
346
|
+
const workers = Array.from({ length: Math.min(batches.length, this.options.maxConcurrency) }, async () => {
|
|
347
|
+
while (next < batches.length) {
|
|
348
|
+
const index = next++;
|
|
349
|
+
results[index] = await execute(batches[index]);
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
const work = Promise.all(workers).then(() => results.flat());
|
|
353
|
+
return await new Promise((resolve, reject) => {
|
|
354
|
+
const cancelled = () => reject(aborted(signal));
|
|
355
|
+
signal.addEventListener('abort', cancelled, { once: true });
|
|
356
|
+
work
|
|
357
|
+
.then(resolve, reject)
|
|
358
|
+
.finally(() => signal.removeEventListener('abort', cancelled));
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
finally {
|
|
362
|
+
clearTimeout(timer);
|
|
363
|
+
sources.forEach((source) => source.removeEventListener('abort', abort));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
async read(method, params, options) {
|
|
367
|
+
const [result] = await this.readMany([{ method, params }], options);
|
|
368
|
+
if (result.status === 'rejected')
|
|
369
|
+
throw result.reason;
|
|
370
|
+
return result.value;
|
|
371
|
+
}
|
|
372
|
+
getChainId(options = {}) {
|
|
373
|
+
const timeout = boundedInteger(options.timeoutMs ?? this.options.timeoutMs, 30000, 'timeout');
|
|
374
|
+
const maxResponseBytes = boundedInteger(options.maxResponseBytes ?? this.options.maxResponseBytes, 8 * 1024 * 1024, 'response size');
|
|
375
|
+
if (options.signal?.aborted)
|
|
376
|
+
return Promise.reject(aborted(options.signal));
|
|
377
|
+
if (this.lifetime.signal.aborted)
|
|
378
|
+
return Promise.reject(aborted(this.lifetime.signal));
|
|
379
|
+
if (!options.fresh &&
|
|
380
|
+
this.chainCache &&
|
|
381
|
+
this.chainCache.expires > Date.now())
|
|
382
|
+
return Promise.resolve(this.chainCache.value);
|
|
383
|
+
if (options.fresh) {
|
|
384
|
+
this.chainRequest = undefined;
|
|
385
|
+
this.chainCache = undefined;
|
|
386
|
+
}
|
|
387
|
+
let request = !options.fresh && this.chainRequest?.maxResponseBytes === maxResponseBytes
|
|
388
|
+
? this.chainRequest
|
|
389
|
+
: undefined;
|
|
390
|
+
if (!request) {
|
|
391
|
+
const controller = new AbortController();
|
|
392
|
+
const generation = ++this.chainGeneration;
|
|
393
|
+
// Each subscriber owns its deadline. A short first subscriber must not
|
|
394
|
+
// impose that deadline on later subscribers sharing the wire response.
|
|
395
|
+
const promise = this.read('eth_chainId', [], {
|
|
396
|
+
signal: controller.signal,
|
|
397
|
+
timeoutMs: 30000,
|
|
398
|
+
maxResponseBytes,
|
|
399
|
+
}).then((value) => {
|
|
400
|
+
if (typeof value !== 'string' ||
|
|
401
|
+
!/^0x(?:0|[1-9a-f][0-9a-f]*)$/i.test(value))
|
|
402
|
+
throw new rpc_transport_1.RpcResponseIntegrityError('Invalid chain ID', false);
|
|
403
|
+
if (generation === this.chainGeneration && !controller.signal.aborted)
|
|
404
|
+
this.chainCache = { value, expires: Date.now() + 30000 };
|
|
405
|
+
return value;
|
|
406
|
+
});
|
|
407
|
+
request = {
|
|
408
|
+
promise,
|
|
409
|
+
controller,
|
|
410
|
+
maxResponseBytes,
|
|
411
|
+
subscribers: 0,
|
|
412
|
+
settled: false,
|
|
413
|
+
};
|
|
414
|
+
const captured = request;
|
|
415
|
+
void promise
|
|
416
|
+
.finally(() => {
|
|
417
|
+
captured.settled = true;
|
|
418
|
+
if (this.chainRequest === captured)
|
|
419
|
+
this.chainRequest = undefined;
|
|
420
|
+
})
|
|
421
|
+
.catch(() => undefined);
|
|
422
|
+
if (!options.fresh)
|
|
423
|
+
this.chainRequest = request;
|
|
424
|
+
}
|
|
425
|
+
const subscribed = request;
|
|
426
|
+
subscribed.subscribers++;
|
|
427
|
+
return new Promise((resolve, reject) => {
|
|
428
|
+
let finished = false;
|
|
429
|
+
const finish = (error, value) => {
|
|
430
|
+
if (finished)
|
|
431
|
+
return;
|
|
432
|
+
finished = true;
|
|
433
|
+
clearTimeout(timer);
|
|
434
|
+
options.signal?.removeEventListener('abort', cancel);
|
|
435
|
+
subscribed.subscribers--;
|
|
436
|
+
if (!subscribed.subscribers && !subscribed.settled) {
|
|
437
|
+
if (this.chainRequest === subscribed)
|
|
438
|
+
this.chainRequest = undefined;
|
|
439
|
+
subscribed.controller.abort();
|
|
440
|
+
}
|
|
441
|
+
if (error !== undefined)
|
|
442
|
+
reject(error);
|
|
443
|
+
else
|
|
444
|
+
resolve(value);
|
|
445
|
+
};
|
|
446
|
+
const cancel = () => finish(aborted(options.signal));
|
|
447
|
+
options.signal?.addEventListener('abort', cancel, { once: true });
|
|
448
|
+
const timer = setTimeout(() => finish(Object.assign(new Error('RPC read deadline exceeded'), {
|
|
449
|
+
name: 'AbortError',
|
|
450
|
+
})), timeout);
|
|
451
|
+
subscribed.promise.then((value) => finish(undefined, value), (error) => finish(error));
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
exports.JsonRpcReadClient = JsonRpcReadClient;
|
|
456
|
+
//# sourceMappingURL=rpc-read-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-read-client.js","sourceRoot":"","sources":["../../src/rpc-read-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isReadOnlyRpcMethod = exports.RpcResponseIntegrityError = void 0;
|
|
4
|
+
exports.requestJsonRpc = requestJsonRpc;
|
|
5
|
+
// A stale response must never be interpreted as the result of another RPC.
|
|
6
|
+
// Keep the sentinel in the message for callers that serialize errors as text.
|
|
7
|
+
class RpcResponseIntegrityError extends Error {
|
|
8
|
+
constructor(message = 'JSON-RPC response does not match its request', retryable = true) {
|
|
9
|
+
super(`[SYSWEB3_RPC_RESPONSE_INVALID] ${message}`);
|
|
10
|
+
this.retryable = retryable;
|
|
11
|
+
this.code = 'SYSWEB3_RPC_RESPONSE_INVALID';
|
|
12
|
+
this.name = 'RpcResponseIntegrityError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.RpcResponseIntegrityError = RpcResponseIntegrityError;
|
|
16
|
+
// Only these standard, side-effect-free reads may recover from a stale cache
|
|
17
|
+
// entry. Never infer retry eligibility from an RPC method prefix.
|
|
18
|
+
const RECOVERABLE_READ_METHODS = new Set([
|
|
19
|
+
'eth_chainId',
|
|
20
|
+
'net_version',
|
|
21
|
+
'web3_clientVersion',
|
|
22
|
+
'eth_blockNumber',
|
|
23
|
+
'eth_syncing',
|
|
24
|
+
'eth_getBalance',
|
|
25
|
+
'eth_getTransactionCount',
|
|
26
|
+
'eth_getCode',
|
|
27
|
+
'eth_getStorageAt',
|
|
28
|
+
'eth_getProof',
|
|
29
|
+
'eth_call',
|
|
30
|
+
'eth_estimateGas',
|
|
31
|
+
'eth_createAccessList',
|
|
32
|
+
'eth_gasPrice',
|
|
33
|
+
'eth_maxPriorityFeePerGas',
|
|
34
|
+
'eth_feeHistory',
|
|
35
|
+
'eth_getBlockByNumber',
|
|
36
|
+
'eth_getBlockByHash',
|
|
37
|
+
'eth_getBlockTransactionCountByNumber',
|
|
38
|
+
'eth_getBlockTransactionCountByHash',
|
|
39
|
+
'eth_getTransactionByHash',
|
|
40
|
+
'eth_getTransactionByBlockNumberAndIndex',
|
|
41
|
+
'eth_getTransactionByBlockHashAndIndex',
|
|
42
|
+
'eth_getTransactionReceipt',
|
|
43
|
+
'eth_getLogs',
|
|
44
|
+
]);
|
|
45
|
+
const isReadOnlyRpcMethod = (method) => RECOVERABLE_READ_METHODS.has(method);
|
|
46
|
+
exports.isReadOnlyRpcMethod = isReadOnlyRpcMethod;
|
|
47
|
+
let rpcRecoveryNonce = 0;
|
|
48
|
+
// Shared across provider instances and seeded anew on process restart. These
|
|
49
|
+
// numeric correlation IDs are not authorization tokens.
|
|
50
|
+
let nextRpcWireId = Math.floor(Math.random() * 2 ** 51);
|
|
51
|
+
const reserveRpcWireId = () => {
|
|
52
|
+
const id = ++nextRpcWireId;
|
|
53
|
+
if (!Number.isSafeInteger(id)) {
|
|
54
|
+
throw new RpcResponseIntegrityError('RPC request ID range exhausted', false);
|
|
55
|
+
}
|
|
56
|
+
return id;
|
|
57
|
+
};
|
|
58
|
+
const recoveryUrl = (original) => {
|
|
59
|
+
const url = new URL(original);
|
|
60
|
+
const token = `${Date.now()}-${++rpcRecoveryNonce}-${Math.random()
|
|
61
|
+
.toString(36)
|
|
62
|
+
.slice(2)}`;
|
|
63
|
+
// Append without reserializing existing query values (including auth data).
|
|
64
|
+
url.search += `${url.search ? '&' : '?'}sysweb3_rpc_request=${token}`;
|
|
65
|
+
return url.toString();
|
|
66
|
+
};
|
|
67
|
+
function validateRpcResponses(json, requests, batch) {
|
|
68
|
+
if (batch ? !Array.isArray(json) : Array.isArray(json)) {
|
|
69
|
+
throw new RpcResponseIntegrityError();
|
|
70
|
+
}
|
|
71
|
+
const responses = batch ? json : [json];
|
|
72
|
+
if (responses.length !== requests.length) {
|
|
73
|
+
throw new RpcResponseIntegrityError();
|
|
74
|
+
}
|
|
75
|
+
const expectedIds = new Set(requests.map((request) => request.id));
|
|
76
|
+
const byId = new Map();
|
|
77
|
+
for (const response of responses) {
|
|
78
|
+
if (!response ||
|
|
79
|
+
typeof response !== 'object' ||
|
|
80
|
+
Array.isArray(response) ||
|
|
81
|
+
typeof response.id !== 'number' ||
|
|
82
|
+
!expectedIds.has(response.id) ||
|
|
83
|
+
byId.has(response.id)) {
|
|
84
|
+
throw new RpcResponseIntegrityError();
|
|
85
|
+
}
|
|
86
|
+
const hasResult = Object.prototype.hasOwnProperty.call(response, 'result');
|
|
87
|
+
const hasError = Object.prototype.hasOwnProperty.call(response, 'error');
|
|
88
|
+
if (response.jsonrpc !== '2.0' ||
|
|
89
|
+
hasResult === hasError ||
|
|
90
|
+
(hasError &&
|
|
91
|
+
(!response.error ||
|
|
92
|
+
typeof response.error.message !== 'string' ||
|
|
93
|
+
!Number.isSafeInteger(response.error.code)))) {
|
|
94
|
+
throw new RpcResponseIntegrityError('Invalid JSON-RPC response envelope', false);
|
|
95
|
+
}
|
|
96
|
+
byId.set(response.id, response);
|
|
97
|
+
}
|
|
98
|
+
return requests.map((request) => byId.get(request.id));
|
|
99
|
+
}
|
|
100
|
+
/** Correlate exact wire responses and recover one stale read response. */
|
|
101
|
+
async function requestJsonRpc(url, inputs, batch, signal, transport, recoverResponse = true) {
|
|
102
|
+
const canRecover = recoverResponse &&
|
|
103
|
+
inputs.every(({ method }) => RECOVERABLE_READ_METHODS.has(method));
|
|
104
|
+
const serialized = JSON.stringify(inputs);
|
|
105
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
106
|
+
if (signal.aborted)
|
|
107
|
+
throw signal.reason || new Error('RPC request aborted');
|
|
108
|
+
const source = JSON.parse(serialized);
|
|
109
|
+
const requests = source.map(({ method, params }) => ({
|
|
110
|
+
jsonrpc: '2.0',
|
|
111
|
+
method,
|
|
112
|
+
params,
|
|
113
|
+
id: reserveRpcWireId(),
|
|
114
|
+
}));
|
|
115
|
+
const json = await transport(attempt === 0 ? url : recoveryUrl(url), JSON.stringify(batch ? requests : requests[0]), signal).catch((error) => {
|
|
116
|
+
if (attempt === 0 ||
|
|
117
|
+
error instanceof RpcResponseIntegrityError ||
|
|
118
|
+
signal.aborted ||
|
|
119
|
+
error?.name === 'AbortError')
|
|
120
|
+
throw error;
|
|
121
|
+
throw new RpcResponseIntegrityError('JSON-RPC response recovery failed', false);
|
|
122
|
+
});
|
|
123
|
+
try {
|
|
124
|
+
return validateRpcResponses(json, requests, batch);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (!(error instanceof RpcResponseIntegrityError) ||
|
|
128
|
+
!error.retryable ||
|
|
129
|
+
attempt !== 0 ||
|
|
130
|
+
!canRecover)
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
throw new RpcResponseIntegrityError();
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=rpc-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-transport.js","sourceRoot":"","sources":["../../src/rpc-transport.ts"],"names":[],"mappings":"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"}
|