@bananapus/nana-sdk-core 2.19.0 → 2.21.0
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/cjs/bendystrawOperations.d.ts +4 -1
- package/dist/cjs/bendystrawOperations.d.ts.map +1 -1
- package/dist/cjs/bendystrawOperations.js +4 -1
- package/dist/cjs/bendystrawOperations.js.map +1 -1
- package/dist/cjs/jbcenter/ensureDeployed.d.ts +5 -0
- package/dist/cjs/jbcenter/ensureDeployed.d.ts.map +1 -1
- package/dist/cjs/jbcenter/ensureDeployed.js +13 -15
- package/dist/cjs/jbcenter/ensureDeployed.js.map +1 -1
- package/dist/cjs/jbcenter/rateLimit.d.ts +80 -0
- package/dist/cjs/jbcenter/rateLimit.d.ts.map +1 -0
- package/dist/cjs/jbcenter/rateLimit.js +158 -0
- package/dist/cjs/jbcenter/rateLimit.js.map +1 -0
- package/dist/cjs/jbcenter.d.ts +55 -4
- package/dist/cjs/jbcenter.d.ts.map +1 -1
- package/dist/cjs/jbcenter.js +68 -17
- package/dist/cjs/jbcenter.js.map +1 -1
- package/dist/cjs/pause.d.ts +6 -0
- package/dist/cjs/pause.d.ts.map +1 -0
- package/dist/cjs/pause.js +25 -0
- package/dist/cjs/pause.js.map +1 -0
- package/dist/cjs/review/contractWrite.d.ts +8 -2
- package/dist/cjs/review/contractWrite.d.ts.map +1 -1
- package/dist/cjs/review/contractWrite.js +6 -3
- package/dist/cjs/review/contractWrite.js.map +1 -1
- package/dist/cjs/review/relayr.d.ts +77 -5
- package/dist/cjs/review/relayr.d.ts.map +1 -1
- package/dist/cjs/review/relayr.js +131 -39
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/safe.d.ts +17 -2
- package/dist/cjs/safe.d.ts.map +1 -1
- package/dist/cjs/safe.js +26 -6
- package/dist/cjs/safe.js.map +1 -1
- package/dist/cjs/safeService.d.ts +41 -7
- package/dist/cjs/safeService.d.ts.map +1 -1
- package/dist/cjs/safeService.js +116 -46
- package/dist/cjs/safeService.js.map +1 -1
- package/dist/cjs/untrusted.d.ts +8 -0
- package/dist/cjs/untrusted.d.ts.map +1 -1
- package/dist/cjs/untrusted.js +41 -0
- package/dist/cjs/untrusted.js.map +1 -1
- package/dist/cjs/v6/distributions.d.ts +18 -10
- package/dist/cjs/v6/distributions.d.ts.map +1 -1
- package/dist/cjs/v6/distributions.js +25 -11
- package/dist/cjs/v6/distributions.js.map +1 -1
- package/dist/esm/bendystrawOperations.d.ts +4 -1
- package/dist/esm/bendystrawOperations.d.ts.map +1 -1
- package/dist/esm/bendystrawOperations.js +4 -1
- package/dist/esm/bendystrawOperations.js.map +1 -1
- package/dist/esm/jbcenter/ensureDeployed.d.ts +5 -0
- package/dist/esm/jbcenter/ensureDeployed.d.ts.map +1 -1
- package/dist/esm/jbcenter/ensureDeployed.js +13 -15
- package/dist/esm/jbcenter/ensureDeployed.js.map +1 -1
- package/dist/esm/jbcenter/rateLimit.d.ts +80 -0
- package/dist/esm/jbcenter/rateLimit.d.ts.map +1 -0
- package/dist/esm/jbcenter/rateLimit.js +151 -0
- package/dist/esm/jbcenter/rateLimit.js.map +1 -0
- package/dist/esm/jbcenter.d.ts +55 -4
- package/dist/esm/jbcenter.d.ts.map +1 -1
- package/dist/esm/jbcenter.js +62 -16
- package/dist/esm/jbcenter.js.map +1 -1
- package/dist/esm/pause.d.ts +6 -0
- package/dist/esm/pause.d.ts.map +1 -0
- package/dist/esm/pause.js +22 -0
- package/dist/esm/pause.js.map +1 -0
- package/dist/esm/review/contractWrite.d.ts +8 -2
- package/dist/esm/review/contractWrite.d.ts.map +1 -1
- package/dist/esm/review/contractWrite.js +6 -3
- package/dist/esm/review/contractWrite.js.map +1 -1
- package/dist/esm/review/relayr.d.ts +77 -5
- package/dist/esm/review/relayr.d.ts.map +1 -1
- package/dist/esm/review/relayr.js +126 -38
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/safe.d.ts +17 -2
- package/dist/esm/safe.d.ts.map +1 -1
- package/dist/esm/safe.js +25 -5
- package/dist/esm/safe.js.map +1 -1
- package/dist/esm/safeService.d.ts +41 -7
- package/dist/esm/safeService.d.ts.map +1 -1
- package/dist/esm/safeService.js +116 -46
- package/dist/esm/safeService.js.map +1 -1
- package/dist/esm/untrusted.d.ts +8 -0
- package/dist/esm/untrusted.d.ts.map +1 -1
- package/dist/esm/untrusted.js +40 -0
- package/dist/esm/untrusted.js.map +1 -1
- package/dist/esm/v6/distributions.d.ts +18 -10
- package/dist/esm/v6/distributions.d.ts.map +1 -1
- package/dist/esm/v6/distributions.js +25 -11
- package/dist/esm/v6/distributions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureDeployed.js","sourceRoot":"","sources":["../../../src/jbcenter/ensureDeployed.ts"],"names":[],"mappings":"AACA,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,sDAAsD;AACtD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAQlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ensureDeployed.js","sourceRoot":"","sources":["../../../src/jbcenter/ensureDeployed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type Transport } from "viem";
|
|
2
|
+
/** What one link of an error chain can say about a refusal. */
|
|
3
|
+
export type ErrorChainLink = {
|
|
4
|
+
status?: unknown;
|
|
5
|
+
code?: unknown;
|
|
6
|
+
message?: unknown;
|
|
7
|
+
details?: unknown;
|
|
8
|
+
retryAfter?: unknown;
|
|
9
|
+
headers?: unknown;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* An error and what it wraps, outermost first, eight links at most. viem
|
|
13
|
+
* wraps whatever its transport throws, so the HTTP status or the JSON-RPC
|
|
14
|
+
* code Center answered with usually sits on a cause.
|
|
15
|
+
*/
|
|
16
|
+
export declare function errorChain(error: unknown): ErrorChainLink[];
|
|
17
|
+
/** Whether `error` is a 429, as an HTTP status or a JSON-RPC code, on it or on anything it wraps. */
|
|
18
|
+
export declare function isRateLimited(error: unknown): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* How long the refusal asked to wait, in seconds, or undefined when nothing
|
|
21
|
+
* says. The first `retryAfter` in the chain that is a finite number comes
|
|
22
|
+
* first: the SDK reads JB Center's Retry-After header into it. Failing that,
|
|
23
|
+
* a link's Retry-After header (viem's HTTP errors carry the response's
|
|
24
|
+
* headers) is read as `retryAfterMs` reads it, in whole seconds rounded up.
|
|
25
|
+
*/
|
|
26
|
+
export declare function retryAfterOf(error: unknown): number | undefined;
|
|
27
|
+
/** The longest a refusal holds a limiter's slots: Center's window is a minute. */
|
|
28
|
+
export declare const JBCENTER_MAX_RATE_LIMIT_PAUSE_MS = 60000;
|
|
29
|
+
export type JBCenterLimiterOptions = {
|
|
30
|
+
/**
|
|
31
|
+
* How many requests may be in flight at once, every chain's together. Slots
|
|
32
|
+
* bound how many are in flight, not how many go out a minute: two in flight
|
|
33
|
+
* send up to 343 a minute at the quickest round trip measured against
|
|
34
|
+
* Center's staging (0.35 s), under the 600 a first-party origin gets but over
|
|
35
|
+
* the 120 any other gets. Past the limit, the first 429 pauses the rest.
|
|
36
|
+
*/
|
|
37
|
+
slots: number;
|
|
38
|
+
};
|
|
39
|
+
/** Requests that share JB Center's rate limit. One limiter serves a whole page. */
|
|
40
|
+
export type JBCenterLimiter = {
|
|
41
|
+
/**
|
|
42
|
+
* `send`, once one of the limiter's slots is free: requests start in the
|
|
43
|
+
* order they came, at most `slots` at once. When Center refuses one with a
|
|
44
|
+
* 429 that says how long to wait, nothing starts until that has passed, a
|
|
45
|
+
* minute at most ({@link JBCENTER_MAX_RATE_LIMIT_PAUSE_MS}): every request in
|
|
46
|
+
* the minute would be refused, and would count. A request whose `signal`
|
|
47
|
+
* aborts while it waits leaves the line, rejecting with the reason, and is
|
|
48
|
+
* never sent. One under way answers to its own signal: the limiter does not
|
|
49
|
+
* stop it, and its slot frees when it ends. A request that `send` asks the
|
|
50
|
+
* same limiter for before it returns is refused at once with a TypeError,
|
|
51
|
+
* since it would wait on the slot its asker holds. One asked for after an
|
|
52
|
+
* await looks like any other request and is not refused, so a request never
|
|
53
|
+
* asks its own limiter for another.
|
|
54
|
+
*/
|
|
55
|
+
run<T>(send: () => Promise<T>, options?: {
|
|
56
|
+
signal?: AbortSignal;
|
|
57
|
+
}): Promise<T>;
|
|
58
|
+
/**
|
|
59
|
+
* `transport`, with every request it sends in one of the limiter's slots.
|
|
60
|
+
* Each try is a request of its own, so viem's retry of a refused request
|
|
61
|
+
* waits out the Retry-After with the rest, and a try made with a signal
|
|
62
|
+
* leaves the line when it aborts. This is for a transport that does not go
|
|
63
|
+
* through JB Center's provider, such as viem's `http`. Give that provider
|
|
64
|
+
* the limiter instead (`createJBCenterRpcProvider`'s `limiter`), so its
|
|
65
|
+
* waits for a node behind the head hold no slot. A transport that already
|
|
66
|
+
* sends through this limiter, one built on a provider that has it or one it
|
|
67
|
+
* wraps already, fails each request at once with a TypeError and sends
|
|
68
|
+
* nothing, where it would wait on its own slot for good.
|
|
69
|
+
*/
|
|
70
|
+
transport(transport: Transport): Transport;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* A limiter for every request a page sends to JB Center: create one when the
|
|
74
|
+
* page loads (at module level in the browser), hand it to every chain's
|
|
75
|
+
* provider (`createJBCenterRpcProvider`'s `limiter`), and wrap any other
|
|
76
|
+
* transport to Center with its `transport`. Every try takes its own slot, so
|
|
77
|
+
* a read waiting out a node behind the head holds none.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createJBCenterLimiter({ slots, }: JBCenterLimiterOptions): JBCenterLimiter;
|
|
80
|
+
//# sourceMappingURL=rateLimit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,MAAM,CAAC;AAUvD,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAU3D;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIrD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAe/D;AAMD,kFAAkF;AAClF,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,CAAC,EACH,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACjC,OAAO,CAAC,CAAC,CAAC,CAAC;IACd;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAC5C,CAAC;AAmDF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,GACN,EAAE,sBAAsB,GAAG,eAAe,CAyE1C"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { createTransport } from "viem";
|
|
2
|
+
import { retryAfterMs } from "../untrusted.js";
|
|
3
|
+
/**
|
|
4
|
+
* An error and what it wraps, outermost first, eight links at most. viem
|
|
5
|
+
* wraps whatever its transport throws, so the HTTP status or the JSON-RPC
|
|
6
|
+
* code Center answered with usually sits on a cause.
|
|
7
|
+
*/
|
|
8
|
+
export function errorChain(error) {
|
|
9
|
+
const chain = [];
|
|
10
|
+
for (let next = error; typeof next === "object" && next !== null && chain.length < 8; next = next.cause) {
|
|
11
|
+
chain.push(next);
|
|
12
|
+
}
|
|
13
|
+
return chain;
|
|
14
|
+
}
|
|
15
|
+
/** Whether `error` is a 429, as an HTTP status or a JSON-RPC code, on it or on anything it wraps. */
|
|
16
|
+
export function isRateLimited(error) {
|
|
17
|
+
return errorChain(error).some(({ status, code }) => status === 429 || code === 429);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* How long the refusal asked to wait, in seconds, or undefined when nothing
|
|
21
|
+
* says. The first `retryAfter` in the chain that is a finite number comes
|
|
22
|
+
* first: the SDK reads JB Center's Retry-After header into it. Failing that,
|
|
23
|
+
* a link's Retry-After header (viem's HTTP errors carry the response's
|
|
24
|
+
* headers) is read as `retryAfterMs` reads it, in whole seconds rounded up.
|
|
25
|
+
*/
|
|
26
|
+
export function retryAfterOf(error) {
|
|
27
|
+
const chain = errorChain(error);
|
|
28
|
+
const said = chain
|
|
29
|
+
.map((link) => link.retryAfter)
|
|
30
|
+
.find((seconds) => typeof seconds === "number" && Number.isFinite(seconds));
|
|
31
|
+
if (said !== undefined)
|
|
32
|
+
return said;
|
|
33
|
+
for (const { headers } of chain) {
|
|
34
|
+
if (!(headers instanceof Headers))
|
|
35
|
+
continue;
|
|
36
|
+
const ms = retryAfterMs(headers.get("retry-after"));
|
|
37
|
+
if (ms !== null)
|
|
38
|
+
return Math.ceil(ms / 1000);
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
/** What a limiter says when a request it is starting asks it for another slot. */
|
|
43
|
+
const NESTED = "A request this JB Center limiter was starting asked it for another slot. Give the limiter to JB Center's provider or wrap one transport with it, not both, and wrap only once.";
|
|
44
|
+
/** The longest a refusal holds a limiter's slots: Center's window is a minute. */
|
|
45
|
+
export const JBCENTER_MAX_RATE_LIMIT_PAUSE_MS = 60_000;
|
|
46
|
+
function line(room, held) {
|
|
47
|
+
let running = 0;
|
|
48
|
+
/** What waits, in the order it joined. */
|
|
49
|
+
const waiting = new Set();
|
|
50
|
+
function resume() {
|
|
51
|
+
while (!held() && running < room && waiting.size > 0) {
|
|
52
|
+
const [next] = waiting;
|
|
53
|
+
waiting.delete(next);
|
|
54
|
+
next();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function join(task, signal) {
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
if (signal?.aborted)
|
|
60
|
+
return reject(signal.reason);
|
|
61
|
+
function start() {
|
|
62
|
+
signal?.removeEventListener("abort", leave);
|
|
63
|
+
running += 1;
|
|
64
|
+
new Promise((begun) => begun(task()))
|
|
65
|
+
.then(resolve, reject)
|
|
66
|
+
.finally(() => {
|
|
67
|
+
running -= 1;
|
|
68
|
+
resume();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function leave() {
|
|
72
|
+
waiting.delete(start);
|
|
73
|
+
reject(signal.reason);
|
|
74
|
+
}
|
|
75
|
+
signal?.addEventListener("abort", leave, { once: true });
|
|
76
|
+
waiting.add(start);
|
|
77
|
+
resume();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return { join, resume };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A limiter for every request a page sends to JB Center: create one when the
|
|
84
|
+
* page loads (at module level in the browser), hand it to every chain's
|
|
85
|
+
* provider (`createJBCenterRpcProvider`'s `limiter`), and wrap any other
|
|
86
|
+
* transport to Center with its `transport`. Every try takes its own slot, so
|
|
87
|
+
* a read waiting out a node behind the head holds none.
|
|
88
|
+
*/
|
|
89
|
+
export function createJBCenterLimiter({ slots, }) {
|
|
90
|
+
if (!Number.isSafeInteger(slots) || slots <= 0) {
|
|
91
|
+
throw new TypeError("slots must be a positive safe integer");
|
|
92
|
+
}
|
|
93
|
+
/** When the slots open again after a refusal, by the clock, and the timer that opens them. */
|
|
94
|
+
let resumeAt = 0;
|
|
95
|
+
let paused;
|
|
96
|
+
const queue = line(slots, () => paused !== undefined);
|
|
97
|
+
/** Holds every slot for `ms`, or until a later end a refusal already set. */
|
|
98
|
+
function hold(ms) {
|
|
99
|
+
const until = Date.now() + ms;
|
|
100
|
+
if (paused !== undefined && until <= resumeAt)
|
|
101
|
+
return;
|
|
102
|
+
clearTimeout(paused);
|
|
103
|
+
resumeAt = until;
|
|
104
|
+
paused = setTimeout(() => {
|
|
105
|
+
paused = undefined;
|
|
106
|
+
queue.resume();
|
|
107
|
+
}, ms);
|
|
108
|
+
}
|
|
109
|
+
/** Whether one of the limiter's requests is starting: its `send` has not returned yet. */
|
|
110
|
+
let starting = false;
|
|
111
|
+
/** `send()`, with every request it asks this limiter for before it returns refused. */
|
|
112
|
+
function begin(send) {
|
|
113
|
+
starting = true;
|
|
114
|
+
try {
|
|
115
|
+
return send();
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
starting = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function run(send, { signal } = {}) {
|
|
122
|
+
// Asked for by a request this limiter is starting, it would wait on the
|
|
123
|
+
// slot that request holds, and the request on it.
|
|
124
|
+
if (starting)
|
|
125
|
+
return Promise.reject(new TypeError(NESTED));
|
|
126
|
+
return queue.join(async () => {
|
|
127
|
+
try {
|
|
128
|
+
return await begin(send);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const seconds = isRateLimited(error) ? retryAfterOf(error) : undefined;
|
|
132
|
+
if (seconds !== undefined && seconds > 0) {
|
|
133
|
+
hold(Math.min(seconds * 1_000, JBCENTER_MAX_RATE_LIMIT_PAUSE_MS));
|
|
134
|
+
}
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}, signal);
|
|
138
|
+
}
|
|
139
|
+
function transport(wrapped) {
|
|
140
|
+
return (parameters) => {
|
|
141
|
+
const { config, value } = wrapped(parameters);
|
|
142
|
+
const send = config.request;
|
|
143
|
+
const request = (args, options) => run(() => send(args, options), {
|
|
144
|
+
signal: options?.signal,
|
|
145
|
+
});
|
|
146
|
+
return createTransport({ ...config, request: request }, value);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return { run, transport };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=rateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../src/jbcenter/rateLimit.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/jbcenter.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Abi, type Address, type ContractFunctionName, type ContractFunctionParameters, type Hex } from "viem";
|
|
2
|
+
import type { JBCenterLimiter } from "./jbcenter/rateLimit.js";
|
|
2
3
|
export declare const JBCENTER_DEFAULT_URL = "https://juicebox.center";
|
|
3
4
|
export declare const JBCENTER_REQUEST_TIMEOUT_MS = 15000;
|
|
4
5
|
export declare const JBCENTER_DEPLOYMENT_TIMEOUT_MS = 45000;
|
|
@@ -6,15 +7,56 @@ export declare const JBCENTER_PIN_TIMEOUT_MS = 300000;
|
|
|
6
7
|
export declare const MAX_JBCENTER_RESPONSE_BYTES: number;
|
|
7
8
|
export declare const JBCENTER_RPC_METHODS: readonly ["eth_blobBaseFee", "eth_blockNumber", "eth_call", "eth_chainId", "eth_createAccessList", "eth_estimateGas", "eth_feeHistory", "eth_gasPrice", "eth_getBalance", "eth_getBlockByHash", "eth_getBlockByNumber", "eth_getBlockReceipts", "eth_getBlockTransactionCountByHash", "eth_getBlockTransactionCountByNumber", "eth_getCode", "eth_getLogs", "eth_getProof", "eth_getStorageAt", "eth_getTransactionByBlockHashAndIndex", "eth_getTransactionByBlockNumberAndIndex", "eth_getTransactionByHash", "eth_getTransactionCount", "eth_getTransactionReceipt", "eth_maxPriorityFeePerGas", "eth_simulateV1", "eth_syncing", "net_version"];
|
|
8
9
|
export type JBCenterRpcMethod = (typeof JBCENTER_RPC_METHODS)[number];
|
|
10
|
+
/**
|
|
11
|
+
* The waits, in milliseconds, before each retry of a read that a node behind
|
|
12
|
+
* the head could not answer: JSON-RPC -32001. JB Center load balances reads
|
|
13
|
+
* across nodes that import blocks at slightly different times, so a read
|
|
14
|
+
* pinned to a block one node has imported can land on a sibling that has not,
|
|
15
|
+
* which answers -32001 ("Requested resource not found." in viem). Waiting out
|
|
16
|
+
* the lag is the only correct answer: reading `latest` instead would read
|
|
17
|
+
* state older than the block the read pins. Base mines every two seconds, so
|
|
18
|
+
* these waits cover a few blocks of drift.
|
|
19
|
+
*/
|
|
20
|
+
export declare const JBCENTER_BLOCK_LAG_RETRY_DELAYS_MS: readonly [250, 500, 1000, 2000, 2000];
|
|
21
|
+
/** How a JB Center RPC provider retries a read. */
|
|
22
|
+
export type JBCenterRpcProviderOptions = {
|
|
23
|
+
/**
|
|
24
|
+
* The waits before each retry of a read a node behind the head answered
|
|
25
|
+
* with -32001, {@link JBCENTER_BLOCK_LAG_RETRY_DELAYS_MS} by default; `[]`
|
|
26
|
+
* retries nothing. No other failure is retried: that answer is the only one
|
|
27
|
+
* that changes by itself, once the node catches up. A revert, bad params or
|
|
28
|
+
* a refusal comes back the same, a 429 must wait out Center's minute, and a
|
|
29
|
+
* timeout has already waited its full time. Every method Center allows is a
|
|
30
|
+
* read, so a retry repeats work, never an effect.
|
|
31
|
+
*/
|
|
32
|
+
blockLagRetryDelaysMs?: readonly number[];
|
|
33
|
+
/**
|
|
34
|
+
* The limiter every try waits for a slot of ({@link createJBCenterLimiter}):
|
|
35
|
+
* one per page, shared by every chain's provider, so the page's requests
|
|
36
|
+
* share its slots and its pause after a 429. Each try takes its own slot, so
|
|
37
|
+
* a wait between tries holds none. Without one, requests go as they are
|
|
38
|
+
* made.
|
|
39
|
+
*/
|
|
40
|
+
limiter?: JBCenterLimiter;
|
|
41
|
+
};
|
|
9
42
|
export type JBCenterRpcRequest = {
|
|
10
43
|
method: JBCenterRpcMethod;
|
|
11
44
|
params?: readonly unknown[];
|
|
12
45
|
};
|
|
13
46
|
/** Structurally compatible with EIP-1193 providers, including viem's `custom`. */
|
|
14
47
|
export type JBCenterRpcProvider = {
|
|
48
|
+
/**
|
|
49
|
+
* One read-only JSON-RPC request, asked again while a node behind the head
|
|
50
|
+
* cannot answer it ({@link JBCenterRpcProviderOptions}). `options`, which
|
|
51
|
+
* viem's custom transport passes with the read's `signal`, goes with every
|
|
52
|
+
* try. Once the signal aborts, the request or the wait between tries ends
|
|
53
|
+
* at once with its reason, and nothing more is sent.
|
|
54
|
+
*/
|
|
15
55
|
request<TResult = unknown>(request: {
|
|
16
56
|
method: string;
|
|
17
57
|
params?: readonly unknown[];
|
|
58
|
+
}, options?: {
|
|
59
|
+
signal?: AbortSignal;
|
|
18
60
|
}): Promise<TResult>;
|
|
19
61
|
};
|
|
20
62
|
export type JBCenterJson = null | boolean | number | string | JBCenterJson[] | JBCenterJsonObject;
|
|
@@ -38,6 +80,8 @@ export type { PublishSignedIntentOptions } from "./jbcenter/publish.js";
|
|
|
38
80
|
export { JBCenterIntentMismatchError, publishSignedIntent, } from "./jbcenter/publish.js";
|
|
39
81
|
export type { JBCenterRefusal, JBCenterRefusalCode, } from "./jbcenter/refusal.js";
|
|
40
82
|
export { describeCenterRefusal } from "./jbcenter/refusal.js";
|
|
83
|
+
export type { ErrorChainLink, JBCenterLimiter, JBCenterLimiterOptions, } from "./jbcenter/rateLimit.js";
|
|
84
|
+
export { JBCENTER_MAX_RATE_LIMIT_PAUSE_MS, createJBCenterLimiter, errorChain, isRateLimited, retryAfterOf, } from "./jbcenter/rateLimit.js";
|
|
41
85
|
export type JBCenterContractCall<TAbi extends Abi = Abi, TFunctionName extends ContractFunctionName<TAbi, "payable" | "nonpayable"> = ContractFunctionName<TAbi, "payable" | "nonpayable">> = {
|
|
42
86
|
chainId: number;
|
|
43
87
|
address: Address;
|
|
@@ -177,8 +221,11 @@ export declare class JBCenterRequestError extends Error {
|
|
|
177
221
|
readonly status: number;
|
|
178
222
|
readonly code?: string | undefined;
|
|
179
223
|
readonly requestId?: string | undefined;
|
|
224
|
+
/** The whole seconds the answer's Retry-After asks for, when it can be read. */
|
|
180
225
|
readonly retryAfter?: number | undefined;
|
|
181
|
-
constructor(message: string, status: number, code?: string | undefined, requestId?: string | undefined,
|
|
226
|
+
constructor(message: string, status: number, code?: string | undefined, requestId?: string | undefined,
|
|
227
|
+
/** The whole seconds the answer's Retry-After asks for, when it can be read. */
|
|
228
|
+
retryAfter?: number | undefined);
|
|
182
229
|
}
|
|
183
230
|
export declare class JBCenterTimeoutError extends Error {
|
|
184
231
|
readonly timeoutMs: number;
|
|
@@ -231,11 +278,15 @@ export declare class JBCenterClient {
|
|
|
231
278
|
* wallet, signing, transaction-submission, batch, and privileged methods.
|
|
232
279
|
*/
|
|
233
280
|
rpc<TResult = unknown>(chainId: number, request: JBCenterRpcRequest, options?: JBCenterRequestOptions): Promise<TResult>;
|
|
234
|
-
/**
|
|
235
|
-
|
|
281
|
+
/**
|
|
282
|
+
* Returns an EIP-1193-shaped provider suitable for viem's `custom`. It asks
|
|
283
|
+
* again for a read a node behind the head could not answer, as
|
|
284
|
+
* {@link JBCenterRpcProviderOptions} describes.
|
|
285
|
+
*/
|
|
286
|
+
rpcProvider(chainId: number, options?: JBCenterRpcProviderOptions): JBCenterRpcProvider;
|
|
236
287
|
private pinFile;
|
|
237
288
|
private fetchJson;
|
|
238
289
|
}
|
|
239
290
|
export declare function createJBCenterClient(options?: JBCenterClientOptions): JBCenterClient;
|
|
240
|
-
export declare function createJBCenterRpcProvider(chainId: number, options?: JBCenterClientOptions): JBCenterRpcProvider;
|
|
291
|
+
export declare function createJBCenterRpcProvider(chainId: number, options?: JBCenterClientOptions & JBCenterRpcProviderOptions): JBCenterRpcProvider;
|
|
241
292
|
//# sourceMappingURL=jbcenter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/jbcenter.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { encodeFunctionData, } from "viem";
|
|
2
2
|
import { groupDeploymentCalls, isValidDeploymentCalls, } from "./jbcenter/setupCalls.js";
|
|
3
|
+
import { pause } from "./pause.js";
|
|
4
|
+
import { retryAfterMs } from "./untrusted.js";
|
|
3
5
|
export const JBCENTER_DEFAULT_URL = "https://juicebox.center";
|
|
4
6
|
export const JBCENTER_REQUEST_TIMEOUT_MS = 15_000;
|
|
5
7
|
export const JBCENTER_DEPLOYMENT_TIMEOUT_MS = 45_000;
|
|
@@ -34,12 +36,32 @@ export const JBCENTER_RPC_METHODS = [
|
|
|
34
36
|
"eth_syncing",
|
|
35
37
|
"net_version",
|
|
36
38
|
];
|
|
39
|
+
/**
|
|
40
|
+
* The waits, in milliseconds, before each retry of a read that a node behind
|
|
41
|
+
* the head could not answer: JSON-RPC -32001. JB Center load balances reads
|
|
42
|
+
* across nodes that import blocks at slightly different times, so a read
|
|
43
|
+
* pinned to a block one node has imported can land on a sibling that has not,
|
|
44
|
+
* which answers -32001 ("Requested resource not found." in viem). Waiting out
|
|
45
|
+
* the lag is the only correct answer: reading `latest` instead would read
|
|
46
|
+
* state older than the block the read pins. Base mines every two seconds, so
|
|
47
|
+
* these waits cover a few blocks of drift.
|
|
48
|
+
*/
|
|
49
|
+
export const JBCENTER_BLOCK_LAG_RETRY_DELAYS_MS = [
|
|
50
|
+
250, 500, 1_000, 2_000, 2_000,
|
|
51
|
+
];
|
|
52
|
+
/** A read pinned past the head of the node that answered it: JSON-RPC -32001. */
|
|
53
|
+
function isBehindHead(error) {
|
|
54
|
+
return (typeof error === "object" &&
|
|
55
|
+
error !== null &&
|
|
56
|
+
error.code === -32001);
|
|
57
|
+
}
|
|
37
58
|
export { decodeDeploymentCall } from "./jbcenter/decode.js";
|
|
38
59
|
export { intentCalls } from "./jbcenter/setupCalls.js";
|
|
39
60
|
export { deployedChains, intentPath, intentRow, isFullyDeployed, mergeSearch, } from "./jbcenter/merge.js";
|
|
40
61
|
export { EnsureDeployedError, ensureDeployed, } from "./jbcenter/ensureDeployed.js";
|
|
41
62
|
export { JBCenterIntentMismatchError, publishSignedIntent, } from "./jbcenter/publish.js";
|
|
42
63
|
export { describeCenterRefusal } from "./jbcenter/refusal.js";
|
|
64
|
+
export { JBCENTER_MAX_RATE_LIMIT_PAUSE_MS, createJBCenterLimiter, errorChain, isRateLimited, retryAfterOf, } from "./jbcenter/rateLimit.js";
|
|
43
65
|
/** Freeze a typed viem contract request into the call signed by JB Center. */
|
|
44
66
|
export function createJBCenterDeploymentCall(request) {
|
|
45
67
|
const { chainId, address, ...parameters } = request;
|
|
@@ -65,7 +87,9 @@ export function isSponsorable(chainIds) {
|
|
|
65
87
|
return chainIds.length > 0 && unsponsoredChains(chainIds).length === 0;
|
|
66
88
|
}
|
|
67
89
|
export class JBCenterRequestError extends Error {
|
|
68
|
-
constructor(message, status, code, requestId,
|
|
90
|
+
constructor(message, status, code, requestId,
|
|
91
|
+
/** The whole seconds the answer's Retry-After asks for, when it can be read. */
|
|
92
|
+
retryAfter) {
|
|
69
93
|
super(message);
|
|
70
94
|
this.status = status;
|
|
71
95
|
this.code = code;
|
|
@@ -462,17 +486,42 @@ export class JBCenterClient {
|
|
|
462
486
|
}
|
|
463
487
|
return body.result;
|
|
464
488
|
}
|
|
465
|
-
/**
|
|
466
|
-
|
|
489
|
+
/**
|
|
490
|
+
* Returns an EIP-1193-shaped provider suitable for viem's `custom`. It asks
|
|
491
|
+
* again for a read a node behind the head could not answer, as
|
|
492
|
+
* {@link JBCenterRpcProviderOptions} describes.
|
|
493
|
+
*/
|
|
494
|
+
rpcProvider(chainId, options = {}) {
|
|
467
495
|
if (!Number.isSafeInteger(chainId) || chainId <= 0) {
|
|
468
496
|
throw new TypeError("chainId must be a positive safe integer");
|
|
469
497
|
}
|
|
498
|
+
const given = options.blockLagRetryDelaysMs ?? JBCENTER_BLOCK_LAG_RETRY_DELAYS_MS;
|
|
499
|
+
if (!Array.isArray(given) ||
|
|
500
|
+
!given.every((ms) => Number.isFinite(ms) && ms >= 0)) {
|
|
501
|
+
throw new TypeError("blockLagRetryDelaysMs must be a list of finite waits of 0 ms or more");
|
|
502
|
+
}
|
|
503
|
+
// The provider keeps its own copy, so the waits it checked are the waits it uses.
|
|
504
|
+
const delays = [...given];
|
|
505
|
+
const { limiter } = options;
|
|
470
506
|
return {
|
|
471
|
-
request: async (request) => {
|
|
507
|
+
request: async (request, requestOptions) => {
|
|
472
508
|
if (!JBCENTER_RPC_METHODS.includes(request.method)) {
|
|
473
509
|
throw new TypeError("JB Center RPC method is not supported");
|
|
474
510
|
}
|
|
475
|
-
|
|
511
|
+
const signal = requestOptions?.signal;
|
|
512
|
+
const ask = () => this.rpc(chainId, request, requestOptions);
|
|
513
|
+
for (let attempt = 0;; attempt += 1) {
|
|
514
|
+
// A request whose signal has aborted is not sent.
|
|
515
|
+
signal?.throwIfAborted();
|
|
516
|
+
try {
|
|
517
|
+
return await (limiter ? limiter.run(ask, { signal }) : ask());
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
if (attempt >= delays.length || !isBehindHead(error))
|
|
521
|
+
throw error;
|
|
522
|
+
await pause(delays[attempt], signal, () => signal?.reason);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
476
525
|
},
|
|
477
526
|
};
|
|
478
527
|
}
|
|
@@ -494,6 +543,8 @@ export class JBCenterClient {
|
|
|
494
543
|
options.signal?.addEventListener("abort", abort, { once: true });
|
|
495
544
|
const timeoutReason = new JBCenterTimeoutError(timeoutMs);
|
|
496
545
|
const timeout = setTimeout(() => controller.abort(timeoutReason), timeoutMs);
|
|
546
|
+
// A failure is thrown once the timer and listener are cleaned up.
|
|
547
|
+
let failure;
|
|
497
548
|
try {
|
|
498
549
|
if (options.signal?.aborted)
|
|
499
550
|
abort();
|
|
@@ -516,13 +567,8 @@ export class JBCenterClient {
|
|
|
516
567
|
const message = typeof envelope.error?.message === "string"
|
|
517
568
|
? envelope.error.message
|
|
518
569
|
: `JB Center request failed (${response.status})`;
|
|
519
|
-
const
|
|
520
|
-
|
|
521
|
-
throw new JBCenterRequestError(message, response.status, code, response.headers.get("x-request-id") ?? undefined, retryAfterHeader !== null &&
|
|
522
|
-
Number.isFinite(retryAfter) &&
|
|
523
|
-
retryAfter >= 0
|
|
524
|
-
? retryAfter
|
|
525
|
-
: undefined);
|
|
570
|
+
const retryAfter = retryAfterMs(response.headers.get("retry-after"));
|
|
571
|
+
throw new JBCenterRequestError(message, response.status, code, response.headers.get("x-request-id") ?? undefined, retryAfter === null ? undefined : Math.ceil(retryAfter / 1000));
|
|
526
572
|
}
|
|
527
573
|
if (!validate(body)) {
|
|
528
574
|
throw new JBCenterRequestError("JB Center returned an invalid response", 502, undefined, response.headers.get("x-request-id") ?? undefined);
|
|
@@ -530,20 +576,20 @@ export class JBCenterClient {
|
|
|
530
576
|
return body;
|
|
531
577
|
}
|
|
532
578
|
catch (error) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
throw error;
|
|
579
|
+
failure =
|
|
580
|
+
controller.signal.reason === timeoutReason ? timeoutReason : error;
|
|
536
581
|
}
|
|
537
582
|
finally {
|
|
538
583
|
clearTimeout(timeout);
|
|
539
584
|
options.signal?.removeEventListener("abort", abort);
|
|
540
585
|
}
|
|
586
|
+
throw failure;
|
|
541
587
|
}
|
|
542
588
|
}
|
|
543
589
|
export function createJBCenterClient(options = {}) {
|
|
544
590
|
return new JBCenterClient(options);
|
|
545
591
|
}
|
|
546
592
|
export function createJBCenterRpcProvider(chainId, options = {}) {
|
|
547
|
-
return new JBCenterClient(options).rpcProvider(chainId);
|
|
593
|
+
return new JBCenterClient(options).rpcProvider(chainId, options);
|
|
548
594
|
}
|
|
549
595
|
//# sourceMappingURL=jbcenter.js.map
|