@rpckit/core 0.9.99
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/README.md +131 -0
- package/dist/batch.d.ts +17 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +59 -0
- package/dist/batch.js.map +1 -0
- package/dist/electrum-cash/index.d.ts +3 -0
- package/dist/electrum-cash/index.d.ts.map +1 -0
- package/dist/electrum-cash/index.js +2 -0
- package/dist/electrum-cash/index.js.map +1 -0
- package/dist/electrum-cash/parse.d.ts +27 -0
- package/dist/electrum-cash/parse.d.ts.map +1 -0
- package/dist/electrum-cash/parse.js +32 -0
- package/dist/electrum-cash/parse.js.map +1 -0
- package/dist/electrum-cash/schema.d.ts +517 -0
- package/dist/electrum-cash/schema.d.ts.map +1 -0
- package/dist/electrum-cash/schema.js +2 -0
- package/dist/electrum-cash/schema.js.map +1 -0
- package/dist/ethereum/index.d.ts +3 -0
- package/dist/ethereum/index.d.ts.map +1 -0
- package/dist/ethereum/index.js +2 -0
- package/dist/ethereum/index.js.map +1 -0
- package/dist/ethereum/parse.d.ts +22 -0
- package/dist/ethereum/parse.d.ts.map +1 -0
- package/dist/ethereum/parse.js +26 -0
- package/dist/ethereum/parse.js.map +1 -0
- package/dist/ethereum/schema.d.ts +530 -0
- package/dist/ethereum/schema.d.ts.map +1 -0
- package/dist/ethereum/schema.js +8 -0
- package/dist/ethereum/schema.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/parse.d.ts +74 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +310 -0
- package/dist/parse.js.map +1 -0
- package/dist/protocol.d.ts +22 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -0
- package/dist/retry.d.ts +9 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +26 -0
- package/dist/retry.js.map +1 -0
- package/dist/schema-utils.d.ts +28 -0
- package/dist/schema-utils.d.ts.map +1 -0
- package/dist/schema-utils.js +2 -0
- package/dist/schema-utils.js.map +1 -0
- package/dist/schema.d.ts +32 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +187 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +51 -0
package/dist/parse.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
function parseOptions(query) {
|
|
2
|
+
const options = {};
|
|
3
|
+
if (!query)
|
|
4
|
+
return options;
|
|
5
|
+
for (const pair of query.split('&')) {
|
|
6
|
+
const [key, value] = pair.split('=');
|
|
7
|
+
if (key && value !== undefined) {
|
|
8
|
+
options[key] = decodeURIComponent(value);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return options;
|
|
12
|
+
}
|
|
13
|
+
function inferType(scheme) {
|
|
14
|
+
switch (scheme) {
|
|
15
|
+
case 'ws':
|
|
16
|
+
case 'wss':
|
|
17
|
+
return 'websocket';
|
|
18
|
+
case 'tcp':
|
|
19
|
+
case 'tcp+tls':
|
|
20
|
+
return 'tcp';
|
|
21
|
+
case 'http':
|
|
22
|
+
case 'https':
|
|
23
|
+
return 'http';
|
|
24
|
+
default:
|
|
25
|
+
throw new Error(`Unknown scheme: ${scheme}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function findMatchingParen(str, start) {
|
|
29
|
+
let depth = 1;
|
|
30
|
+
for (let i = start; i < str.length; i++) {
|
|
31
|
+
if (str[i] === '(')
|
|
32
|
+
depth++;
|
|
33
|
+
else if (str[i] === ')') {
|
|
34
|
+
depth--;
|
|
35
|
+
if (depth === 0)
|
|
36
|
+
return i;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return -1;
|
|
40
|
+
}
|
|
41
|
+
function splitArgs(str) {
|
|
42
|
+
const args = [];
|
|
43
|
+
let current = '';
|
|
44
|
+
let depth = 0;
|
|
45
|
+
for (const char of str) {
|
|
46
|
+
if (char === '(') {
|
|
47
|
+
depth++;
|
|
48
|
+
current += char;
|
|
49
|
+
}
|
|
50
|
+
else if (char === ')') {
|
|
51
|
+
depth--;
|
|
52
|
+
current += char;
|
|
53
|
+
}
|
|
54
|
+
else if (char === ',' && depth === 0) {
|
|
55
|
+
args.push(current.trim());
|
|
56
|
+
current = '';
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
current += char;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (current.trim()) {
|
|
63
|
+
args.push(current.trim());
|
|
64
|
+
}
|
|
65
|
+
return args;
|
|
66
|
+
}
|
|
67
|
+
function parseTransport(input) {
|
|
68
|
+
input = input.trim();
|
|
69
|
+
// Check for meta-transports: fallback(...) or cluster(...)
|
|
70
|
+
const metaMatch = input.match(/^(fallback|cluster)\(/);
|
|
71
|
+
if (metaMatch) {
|
|
72
|
+
const type = metaMatch[1];
|
|
73
|
+
const argsStart = metaMatch[0].length;
|
|
74
|
+
const argsEnd = findMatchingParen(input, argsStart);
|
|
75
|
+
if (argsEnd === -1) {
|
|
76
|
+
throw new Error(`Unmatched parenthesis in: ${input}`);
|
|
77
|
+
}
|
|
78
|
+
const argsStr = input.slice(argsStart, argsEnd);
|
|
79
|
+
const afterParen = input.slice(argsEnd + 1);
|
|
80
|
+
// Parse options after closing paren: cluster(...)?timeout=1000
|
|
81
|
+
let options = {};
|
|
82
|
+
if (afterParen.startsWith('?')) {
|
|
83
|
+
options = parseOptions(afterParen.slice(1));
|
|
84
|
+
}
|
|
85
|
+
const args = splitArgs(argsStr);
|
|
86
|
+
if (type === 'cluster') {
|
|
87
|
+
// First arg is quorum number
|
|
88
|
+
const quorum = Number.parseInt(args[0], 10);
|
|
89
|
+
if (Number.isNaN(quorum) || quorum < 1) {
|
|
90
|
+
throw new Error(`Invalid quorum value: ${args[0]}`);
|
|
91
|
+
}
|
|
92
|
+
const children = args.slice(1).map(parseTransport);
|
|
93
|
+
return { type, options, children, quorum };
|
|
94
|
+
}
|
|
95
|
+
const children = args.map(parseTransport);
|
|
96
|
+
return { type, options, children };
|
|
97
|
+
}
|
|
98
|
+
// Simple transport URL: wss://host:port?timeout=1000
|
|
99
|
+
const urlMatch = input.match(/^([a-z+]+):\/\/([^?]+)(?:\?(.*))?$/);
|
|
100
|
+
if (!urlMatch) {
|
|
101
|
+
throw new Error(`Invalid transport URL: ${input}`);
|
|
102
|
+
}
|
|
103
|
+
const [, scheme, rest, query] = urlMatch;
|
|
104
|
+
const type = inferType(scheme);
|
|
105
|
+
const url = `${scheme}://${rest}`;
|
|
106
|
+
const options = parseOptions(query || '');
|
|
107
|
+
return { type, url, options };
|
|
108
|
+
}
|
|
109
|
+
const KEY_ALIASES = { webSocket: 'websocket' };
|
|
110
|
+
function normalizeKeys(map) {
|
|
111
|
+
const result = {};
|
|
112
|
+
for (const [key, value] of Object.entries(map)) {
|
|
113
|
+
result[KEY_ALIASES[key] ?? key] = value;
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
const DEFAULT_PACKAGE_MAP = {
|
|
118
|
+
websocket: '@rpckit/websocket',
|
|
119
|
+
tcp: '@rpckit/tcp',
|
|
120
|
+
http: '@rpckit/http',
|
|
121
|
+
fallback: '@rpckit/fallback',
|
|
122
|
+
cluster: '@rpckit/cluster',
|
|
123
|
+
};
|
|
124
|
+
const EXPORT_MAP = {
|
|
125
|
+
websocket: 'webSocket',
|
|
126
|
+
tcp: 'tcp',
|
|
127
|
+
http: 'http',
|
|
128
|
+
fallback: 'fallback',
|
|
129
|
+
cluster: 'cluster',
|
|
130
|
+
};
|
|
131
|
+
async function loadFactory(type, packageMap) {
|
|
132
|
+
const pkg = packageMap[type];
|
|
133
|
+
const exportName = EXPORT_MAP[type];
|
|
134
|
+
try {
|
|
135
|
+
const module = await import(pkg);
|
|
136
|
+
return module[exportName];
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
throw new Error(`Package ${pkg} is not installed. Run: npm install ${pkg}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function buildOptions(options) {
|
|
143
|
+
const result = {};
|
|
144
|
+
for (const [key, value] of Object.entries(options)) {
|
|
145
|
+
// Parse numeric values
|
|
146
|
+
if (key === 'timeout' ||
|
|
147
|
+
key === 'connectTimeout' ||
|
|
148
|
+
key === 'keepAlive' ||
|
|
149
|
+
key === 'quorum' ||
|
|
150
|
+
key === 'retryCount' ||
|
|
151
|
+
key === 'retryDelay') {
|
|
152
|
+
result[key] = Number.parseInt(value, 10);
|
|
153
|
+
}
|
|
154
|
+
// Parse boolean values
|
|
155
|
+
else if (key === 'rank' || key === 'eagerConnect') {
|
|
156
|
+
result[key] = value === 'true';
|
|
157
|
+
}
|
|
158
|
+
// batch can be boolean or will be built from batchSize/batchWait
|
|
159
|
+
else if (key === 'batch') {
|
|
160
|
+
result[key] = value === 'true';
|
|
161
|
+
}
|
|
162
|
+
// Skip batchSize/batchWait - handled below
|
|
163
|
+
else if (key === 'batchSize' || key === 'batchWait') {
|
|
164
|
+
// handled after loop
|
|
165
|
+
}
|
|
166
|
+
// Keep strings as-is
|
|
167
|
+
else {
|
|
168
|
+
result[key] = value;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Build batch config from batchSize/batchWait
|
|
172
|
+
if (options.batchSize || options.batchWait) {
|
|
173
|
+
const batchConfig = {};
|
|
174
|
+
if (options.batchSize) {
|
|
175
|
+
batchConfig.batchSize = Number.parseInt(options.batchSize, 10);
|
|
176
|
+
}
|
|
177
|
+
if (options.batchWait) {
|
|
178
|
+
batchConfig.wait = Number.parseInt(options.batchWait, 10);
|
|
179
|
+
}
|
|
180
|
+
result.batch = batchConfig;
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
function createBuildTransport(packageMap) {
|
|
185
|
+
async function buildTransport(parsed) {
|
|
186
|
+
const factory = await loadFactory(parsed.type, packageMap);
|
|
187
|
+
const options = buildOptions(parsed.options);
|
|
188
|
+
if (parsed.type === 'fallback' && parsed.children) {
|
|
189
|
+
const transports = await Promise.all(parsed.children.map(buildTransport));
|
|
190
|
+
return factory(transports, options);
|
|
191
|
+
}
|
|
192
|
+
if (parsed.type === 'cluster' && parsed.children) {
|
|
193
|
+
const transports = await Promise.all(parsed.children.map(buildTransport));
|
|
194
|
+
return factory(transports, { quorum: parsed.quorum, ...options });
|
|
195
|
+
}
|
|
196
|
+
// Simple transport
|
|
197
|
+
if (!parsed.url) {
|
|
198
|
+
throw new Error(`Missing URL for ${parsed.type} transport`);
|
|
199
|
+
}
|
|
200
|
+
return factory(parsed.url, options);
|
|
201
|
+
}
|
|
202
|
+
return buildTransport;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a `parse` function that uses a custom package map for dynamic imports.
|
|
206
|
+
*
|
|
207
|
+
* Override specific transport types while keeping defaults for the rest.
|
|
208
|
+
* Useful for creating protocol-specific parse variants (e.g. electrum-cash).
|
|
209
|
+
*/
|
|
210
|
+
export function createParse(overrides) {
|
|
211
|
+
const packageMap = { ...DEFAULT_PACKAGE_MAP, ...normalizeKeys(overrides) };
|
|
212
|
+
const buildTransport = createBuildTransport(packageMap);
|
|
213
|
+
return async (input) => {
|
|
214
|
+
const parsed = parseTransport(input);
|
|
215
|
+
const transport = await buildTransport(parsed);
|
|
216
|
+
return transport;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Create a synchronous `parse` function using pre-imported factory functions.
|
|
221
|
+
*
|
|
222
|
+
* Unlike `createParse` which uses dynamic imports, this variant accepts
|
|
223
|
+
* already-loaded factory functions, making it fully synchronous.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* import { webSocket } from '@rpckit/websocket/electrum-cash'
|
|
228
|
+
* import { fallback } from '@rpckit/fallback'
|
|
229
|
+
* import { createParseSync } from '@rpckit/core'
|
|
230
|
+
*
|
|
231
|
+
* const parseSync = createParseSync({ webSocket, fallback })
|
|
232
|
+
* const transport = parseSync('fallback(wss://a.com,wss://b.com)?eagerConnect=true')
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
export function createParseSync(factories) {
|
|
236
|
+
const normalized = normalizeKeys(factories);
|
|
237
|
+
function buildTransport(parsed) {
|
|
238
|
+
const factory = normalized[parsed.type];
|
|
239
|
+
if (!factory) {
|
|
240
|
+
throw new Error(`No factory for transport type "${parsed.type}". Available: ${Object.keys(normalized).join(', ')}`);
|
|
241
|
+
}
|
|
242
|
+
const options = buildOptions(parsed.options);
|
|
243
|
+
if (parsed.type === 'fallback' && parsed.children) {
|
|
244
|
+
const transports = parsed.children.map(buildTransport);
|
|
245
|
+
return factory(transports, options);
|
|
246
|
+
}
|
|
247
|
+
if (parsed.type === 'cluster' && parsed.children) {
|
|
248
|
+
const transports = parsed.children.map(buildTransport);
|
|
249
|
+
return factory(transports, { quorum: parsed.quorum, ...options });
|
|
250
|
+
}
|
|
251
|
+
if (!parsed.url) {
|
|
252
|
+
throw new Error(`Missing URL for ${parsed.type} transport`);
|
|
253
|
+
}
|
|
254
|
+
return factory(parsed.url, options);
|
|
255
|
+
}
|
|
256
|
+
return (input) => {
|
|
257
|
+
const parsed = parseTransport(input);
|
|
258
|
+
const transport = buildTransport(parsed);
|
|
259
|
+
return transport;
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Parse a transport one-liner string into a Transport instance.
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* // Simple transports
|
|
268
|
+
* const ws = await parse('wss://example.com')
|
|
269
|
+
* const tcp = await parse('tcp+tls://host:50002?timeout=10000')
|
|
270
|
+
*
|
|
271
|
+
* // Meta-transports
|
|
272
|
+
* const fb = await parse('fallback(wss://a.com,tcp://b.com)')
|
|
273
|
+
* const cl = await parse('cluster(2,ws://1.com,ws://2.com,ws://3.com)')
|
|
274
|
+
*
|
|
275
|
+
* // Nested
|
|
276
|
+
* const nested = await parse('fallback(wss://a.com,cluster(2,ws://1.com,ws://2.com))')
|
|
277
|
+
*
|
|
278
|
+
* // With options
|
|
279
|
+
* const withOpts = await parse('wss://example.com?timeout=10000&keepAlive=30000')
|
|
280
|
+
* const batched = await parse('wss://example.com?batchSize=10&batchWait=50')
|
|
281
|
+
* const fbRanked = await parse('fallback(wss://a.com,tcp://b.com)?rank=true')
|
|
282
|
+
* ```
|
|
283
|
+
*
|
|
284
|
+
* Supported schemes:
|
|
285
|
+
* - `wss://`, `ws://` → @rpckit/websocket
|
|
286
|
+
* - `tcp://`, `tcp+tls://` → @rpckit/tcp
|
|
287
|
+
* - `http://`, `https://` → @rpckit/http
|
|
288
|
+
* - `fallback(...)` → @rpckit/fallback
|
|
289
|
+
* - `cluster(quorum,...)` → @rpckit/cluster
|
|
290
|
+
*
|
|
291
|
+
* Supported options (via query params):
|
|
292
|
+
* - `timeout` - Request timeout in ms
|
|
293
|
+
* - `keepAlive` - Keep-alive ping interval in ms
|
|
294
|
+
* - `batch` - Enable batching (true/false)
|
|
295
|
+
* - `batchSize` - Max requests per batch
|
|
296
|
+
* - `batchWait` - Max wait time before flushing batch (ms)
|
|
297
|
+
* - `rank` - Enable health ranking for fallback (true/false)
|
|
298
|
+
* - `eagerConnect` - Connect all fallback transports in parallel (true/false)
|
|
299
|
+
* - `clientName` - Client name for electrum-cash handshake (default: 'rpckit')
|
|
300
|
+
* - `protocolVersion` - Protocol version for electrum-cash handshake (default: '1.6')
|
|
301
|
+
*
|
|
302
|
+
* Packages are loaded dynamically at runtime. Missing packages throw an error.
|
|
303
|
+
*/
|
|
304
|
+
export async function parse(input) {
|
|
305
|
+
const buildTransport = createBuildTransport(DEFAULT_PACKAGE_MAP);
|
|
306
|
+
const parsed = parseTransport(input);
|
|
307
|
+
const transport = await buildTransport(parsed);
|
|
308
|
+
return transport;
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface RpcRequest {
|
|
2
|
+
jsonrpc: '2.0';
|
|
3
|
+
method: string;
|
|
4
|
+
params?: unknown[];
|
|
5
|
+
id: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RpcResponse {
|
|
8
|
+
jsonrpc: '2.0';
|
|
9
|
+
result?: unknown;
|
|
10
|
+
error?: {
|
|
11
|
+
code: number;
|
|
12
|
+
message: string;
|
|
13
|
+
data?: unknown;
|
|
14
|
+
};
|
|
15
|
+
id: number;
|
|
16
|
+
}
|
|
17
|
+
export interface SubscriptionNotification {
|
|
18
|
+
jsonrpc: '2.0';
|
|
19
|
+
method: string;
|
|
20
|
+
params: unknown[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACzD,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,KAAK,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,EAAE,CAAA;CAClB"}
|
package/dist/protocol.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":""}
|
package/dist/retry.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RetryOptions {
|
|
2
|
+
retryCount?: number;
|
|
3
|
+
retryDelay?: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Execute an async function with exponential backoff retry.
|
|
7
|
+
*/
|
|
8
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
|
|
9
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAKD;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAuBZ"}
|
package/dist/retry.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const DEFAULT_RETRY_COUNT = 3;
|
|
2
|
+
const DEFAULT_RETRY_DELAY = 150;
|
|
3
|
+
/**
|
|
4
|
+
* Execute an async function with exponential backoff retry.
|
|
5
|
+
*/
|
|
6
|
+
export async function withRetry(fn, options = {}) {
|
|
7
|
+
const maxAttempts = (options.retryCount ?? DEFAULT_RETRY_COUNT) + 1;
|
|
8
|
+
const baseDelay = options.retryDelay ?? DEFAULT_RETRY_DELAY;
|
|
9
|
+
let lastError;
|
|
10
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
11
|
+
try {
|
|
12
|
+
return await fn();
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
lastError = error;
|
|
16
|
+
if (attempt === maxAttempts) {
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
// Exponential backoff: delay * 2^(attempt-1)
|
|
20
|
+
const delay = baseDelay * 2 ** (attempt - 1);
|
|
21
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
throw lastError;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAKA,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAC7B,MAAM,mBAAmB,GAAG,GAAG,CAAA;AAE/B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,UAAwB,EAAE;IAE1B,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAA;IAE3D,IAAI,SAAkB,CAAA;IAEtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YAEjB,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,MAAK;YACP,CAAC;YAED,6CAA6C;YAC7C,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;YAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Filter out entries with a specific method from a tuple */
|
|
2
|
+
export type FilterMethod<T extends readonly unknown[], M extends string> = T extends readonly [infer Head, ...infer Tail] ? Head extends {
|
|
3
|
+
method: M;
|
|
4
|
+
} ? FilterMethod<Tail, M> : [Head, ...FilterMethod<Tail, M>] : [];
|
|
5
|
+
/** Filter out multiple methods from a tuple */
|
|
6
|
+
export type FilterMethods<T extends readonly unknown[], Entries extends readonly {
|
|
7
|
+
method: string;
|
|
8
|
+
}[]> = Entries extends readonly [
|
|
9
|
+
infer E extends {
|
|
10
|
+
method: string;
|
|
11
|
+
},
|
|
12
|
+
...infer Rest extends {
|
|
13
|
+
method: string;
|
|
14
|
+
}[]
|
|
15
|
+
] ? FilterMethods<FilterMethod<T, E['method']>, Rest> : T;
|
|
16
|
+
/** Override request methods in a schema */
|
|
17
|
+
export type OverrideRequests<S extends {
|
|
18
|
+
requests: readonly unknown[];
|
|
19
|
+
subscriptions: readonly unknown[];
|
|
20
|
+
}, NewEntries extends readonly {
|
|
21
|
+
method: string;
|
|
22
|
+
params: unknown[];
|
|
23
|
+
return: unknown;
|
|
24
|
+
}[]> = {
|
|
25
|
+
requests: [...FilterMethods<S['requests'], NewEntries>, ...NewEntries];
|
|
26
|
+
subscriptions: S['subscriptions'];
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=schema-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-utils.d.ts","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,SAAS,OAAO,EAAE,EAC5B,CAAC,SAAS,MAAM,IACd,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAC9C,IAAI,SAAS;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,GACxB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,GACrB,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAClC,EAAE,CAAA;AAEN,+CAA+C;AAC/C,MAAM,MAAM,aAAa,CACvB,CAAC,SAAS,SAAS,OAAO,EAAE,EAC5B,OAAO,SAAS,SAAS;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,IAC3C,OAAO,SAAS,SAAS;IAC3B,MAAM,CAAC,SAAS;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAClC,GAAG,MAAM,IAAI,SAAS;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;CAC3C,GACG,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GACjD,CAAC,CAAA;AAEL,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS;IAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAAC,aAAa,EAAE,SAAS,OAAO,EAAE,CAAA;CAAE,EAC7E,UAAU,SAAS,SAAS;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;CAChB,EAAE,IACD;IACF,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,CAAA;IACtE,aAAa,EAAE,CAAC,CAAC,eAAe,CAAC,CAAA;CAClC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-utils.js","sourceRoot":"","sources":["../src/schema-utils.ts"],"names":[],"mappings":""}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type SchemaEntry = {
|
|
2
|
+
method: string;
|
|
3
|
+
params: unknown[];
|
|
4
|
+
return: unknown;
|
|
5
|
+
};
|
|
6
|
+
export type Schema = {
|
|
7
|
+
requests: SchemaEntry[];
|
|
8
|
+
subscriptions: SchemaEntry[];
|
|
9
|
+
};
|
|
10
|
+
export type AnySchema = {
|
|
11
|
+
requests: [{
|
|
12
|
+
method: string;
|
|
13
|
+
params: unknown[];
|
|
14
|
+
return: unknown;
|
|
15
|
+
}];
|
|
16
|
+
subscriptions: [{
|
|
17
|
+
method: string;
|
|
18
|
+
params: unknown[];
|
|
19
|
+
return: unknown;
|
|
20
|
+
}];
|
|
21
|
+
};
|
|
22
|
+
type AllEntries<S extends Schema> = [...S['requests'], ...S['subscriptions']];
|
|
23
|
+
export type ExtractMethod<S extends Schema> = AllEntries<S>[number]['method'];
|
|
24
|
+
export type ExtractRequestMethod<S extends Schema> = S['requests'][number]['method'];
|
|
25
|
+
export type ExtractSubscriptionMethod<S extends Schema> = S['subscriptions'][number]['method'];
|
|
26
|
+
export type ExtractEntry<S extends Schema, M extends string> = Extract<AllEntries<S>[number], {
|
|
27
|
+
method: M;
|
|
28
|
+
}>;
|
|
29
|
+
export type ExtractReturn<S extends Schema, M extends string> = ExtractEntry<S, M> extends never ? unknown : ExtractEntry<S, M>['return'];
|
|
30
|
+
export type ExtractParams<S extends Schema, M extends string> = ExtractEntry<S, M> extends never ? unknown[] : ExtractEntry<S, M>['params'];
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAEhF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAG9E,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,aAAa,EAAE,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CACxE,CAAA;AAED,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;AAE7E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAE7E,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,IAC/C,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEjC,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,MAAM,IACpD,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEtC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,OAAO,CACpE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACrB;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CACd,CAAA;AAGD,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,YAAY,CAC1E,CAAC,EACD,CAAC,CACF,SAAS,KAAK,GACX,OAAO,GACP,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAEhC,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,YAAY,CAC1E,CAAC,EACD,CAAC,CACF,SAAS,KAAK,GACX,OAAO,EAAE,GACT,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":""}
|