@pinionengineering/prover-client 0.10.0 → 0.11.1
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 -54
- package/dist/client.d.ts +127 -69
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +177 -81
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +40 -19
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/client.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Pass the full base URL including the path prefix, e.g.:
|
|
9
9
|
* new PinionProverClient("https://hydrogen.pinion.build/prover", { getToken })
|
|
10
10
|
*/
|
|
11
|
-
import type { AuditResult, ChallengeKeyInfo, CreateKeyResult, ParsedSetup, ProveJobStatusResponse, RawSetupResponse, TagJobListEntry, TagJobProgress, TagJobStatusResponse, TagResponse } from './types.js';
|
|
11
|
+
import type { AuditResult, ChallengeKeyInfo, CreateKeyResult, ParsedSetup, ProveJobStatusResponse, ProveSubmission, RawSetupResponse, TagJobListEntry, TagJobProgress, TagJobStatusResponse, TagResponse, TagSubmission } from './types.js';
|
|
12
12
|
export interface PinionProverClientOptions {
|
|
13
13
|
/**
|
|
14
14
|
* Returns a JWT Bearer token for authenticated endpoints, or null/undefined
|
|
@@ -20,7 +20,7 @@ export interface PinionProverClientOptions {
|
|
|
20
20
|
* Options for the audit() convenience wrapper.
|
|
21
21
|
*
|
|
22
22
|
* For exact control over block count, use buildChallenge(n, total) +
|
|
23
|
-
* prove() + verifyProof() directly.
|
|
23
|
+
* prove() + waitForProve() + verifyProof() directly.
|
|
24
24
|
*/
|
|
25
25
|
export interface AuditOptions {
|
|
26
26
|
/**
|
|
@@ -29,42 +29,71 @@ export interface AuditOptions {
|
|
|
29
29
|
roots?: string[];
|
|
30
30
|
/**
|
|
31
31
|
* Percentage of blocks to sample per round, 0–100. Default 1.
|
|
32
|
-
* Repeated 1% rounds accumulate statistical certainty over time
|
|
32
|
+
* Repeated 1% rounds accumulate statistical certainty over time. Each round
|
|
33
33
|
* forces the server to prove possession of an independently random sample.
|
|
34
34
|
* Use 100 for a one-shot full audit.
|
|
35
35
|
*
|
|
36
36
|
* For an exact block count use buildChallenge(n, total) + prove() + verifyProof().
|
|
37
37
|
*/
|
|
38
38
|
challengePct?: number;
|
|
39
|
+
/** Milliseconds between GET /prove/:job_id polls during audit()'s wait
|
|
40
|
+
* phase. Default 500. */
|
|
41
|
+
pollIntervalMs?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Optional cancellation of audit()'s wait phase. There is no default
|
|
44
|
+
* deadline. Omit to wait as long as the proof takes. Pass
|
|
45
|
+
* `AbortSignal.timeout(ms)` to restore a fixed ceiling.
|
|
46
|
+
*/
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
/** Called after every status poll with the raw status string
|
|
49
|
+
* ("prove-queued" | "prove-running"), for progress UI. There is no
|
|
50
|
+
* per-block progress signal for proving, unlike tag()'s onProgress. */
|
|
51
|
+
onStatus?: (status: string) => void;
|
|
39
52
|
}
|
|
40
|
-
/** Options for
|
|
41
|
-
export interface
|
|
53
|
+
/** Options for waitForTag()'s job-status polling. */
|
|
54
|
+
export interface WaitForTagOptions {
|
|
42
55
|
/** Milliseconds between GET /tag/:job_id polls. Default 1000. */
|
|
43
56
|
pollIntervalMs?: number;
|
|
44
|
-
/**
|
|
45
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Optional cancellation. There is no default deadline, omit to wait
|
|
59
|
+
* indefinitely. Pass `AbortSignal.timeout(ms)` to restore the old fixed
|
|
60
|
+
* ceiling (waitForTag() throws TagTimeoutError when the signal fires
|
|
61
|
+
* before the job reaches a terminal state).
|
|
62
|
+
*/
|
|
63
|
+
signal?: AbortSignal;
|
|
46
64
|
/**
|
|
47
65
|
* Called after every status poll with the latest progress and the raw
|
|
48
66
|
* status string ("tag-queued" | "tag-planning" | "tag-running" |
|
|
49
67
|
* "tag-merging" | "tag-done" | "tag-failed"). The server populates
|
|
50
68
|
* progress on every poll regardless of status, including "tag-queued"
|
|
51
|
-
* before any work has started (as {total_blocks: 0, completed_blocks: 0})
|
|
52
|
-
*
|
|
69
|
+
* before any work has started (as {total_blocks: 0, completed_blocks: 0}).
|
|
70
|
+
* Check `status` if you need to distinguish "not started yet" from
|
|
53
71
|
* "actively running".
|
|
54
72
|
*/
|
|
55
73
|
onProgress?: (progress: TagJobProgress, status: string) => void;
|
|
56
74
|
}
|
|
57
|
-
/** Options for
|
|
58
|
-
export interface
|
|
75
|
+
/** Options for waitForProve()'s job-status polling. */
|
|
76
|
+
export interface WaitForProveOptions {
|
|
59
77
|
/** Milliseconds between GET /prove/:job_id polls. Default 500. */
|
|
60
78
|
pollIntervalMs?: number;
|
|
61
79
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
80
|
+
* Optional cancellation. There is no default deadline, omit to wait
|
|
81
|
+
* indefinitely. Pass `AbortSignal.timeout(ms)` to restore the old fixed
|
|
82
|
+
* ceiling (waitForProve() throws ProveTimeoutError when the signal fires
|
|
83
|
+
* before the job reaches a terminal state).
|
|
66
84
|
*/
|
|
67
|
-
|
|
85
|
+
signal?: AbortSignal;
|
|
86
|
+
/**
|
|
87
|
+
* The challenge/roots this job was submitted with. Optional, but passing
|
|
88
|
+
* them lets a thrown ProveFailedError/ProveTimeoutError carry enough to
|
|
89
|
+
* reconstruct a retry. Pass what prove() gave you back.
|
|
90
|
+
*/
|
|
91
|
+
challenge?: string;
|
|
92
|
+
roots?: string[];
|
|
93
|
+
/** Called after every status poll with the raw status string
|
|
94
|
+
* ("prove-queued" | "prove-running"). There is no per-block progress
|
|
95
|
+
* signal for proving, unlike waitForTag()'s onProgress. */
|
|
96
|
+
onStatus?: (status: string) => void;
|
|
68
97
|
}
|
|
69
98
|
export declare class PinionProverClient {
|
|
70
99
|
private readonly baseUrl;
|
|
@@ -76,7 +105,7 @@ export declare class PinionProverClient {
|
|
|
76
105
|
*
|
|
77
106
|
* The server generates a key pair and keeps the private scalar α. The returned
|
|
78
107
|
* `publicKey` is the public half: G1 points U[0..s-1] and G2 point V = α·G₂.
|
|
79
|
-
* Store these alongside `keyId
|
|
108
|
+
* Store these alongside `keyId`. They are all you need to verify proofs locally,
|
|
80
109
|
* independent of the server returning the same material later.
|
|
81
110
|
*/
|
|
82
111
|
createKey(label?: string): Promise<CreateKeyResult>;
|
|
@@ -86,7 +115,7 @@ export declare class PinionProverClient {
|
|
|
86
115
|
/**
|
|
87
116
|
* Fetch the setup document for a key: public key material and, per
|
|
88
117
|
* registered root, either the block ID list (non-chunked protocols) or the
|
|
89
|
-
* super-block count (chunked protocols: SW-Priv, SW-Pub)
|
|
118
|
+
* super-block count (chunked protocols: SW-Priv, SW-Pub). parseSetupResponse
|
|
90
119
|
* turns either into a uniform ParsedRoot.blockIds array.
|
|
91
120
|
*
|
|
92
121
|
* Call this once after tagging to obtain the ParsedSetup needed for auditing.
|
|
@@ -98,24 +127,31 @@ export declare class PinionProverClient {
|
|
|
98
127
|
* authentication tags, and store them under keyId.
|
|
99
128
|
*
|
|
100
129
|
* The root must already be in the "pinned" lifecycle state for the
|
|
101
|
-
* authenticated account.
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* next audit
|
|
107
|
-
*
|
|
108
|
-
* Throws TagFailedError if the job reaches "tag-failed", or
|
|
109
|
-
* TagTimeoutError if it doesn't reach a terminal state within
|
|
110
|
-
* options.timeoutMs.
|
|
130
|
+
* authenticated account. Tagging runs asynchronously on the server. This
|
|
131
|
+
* submits the job and returns immediately with a job handle. Poll
|
|
132
|
+
* tagStatus(jobId) yourself, or await waitForTag(jobId, options) to wait
|
|
133
|
+
* for a terminal state (with no default deadline, pass `signal:
|
|
134
|
+
* AbortSignal.timeout(ms)` if you want one). Call getSetup() after
|
|
135
|
+
* tagging completes to get the updated block ID lists for the next audit
|
|
136
|
+
* cycle.
|
|
111
137
|
*/
|
|
112
|
-
tag(root: string, keyId: string
|
|
113
|
-
/** Poll the status of a tag job started by tag(). Exposed for callers that want progress UI without waiting on
|
|
138
|
+
tag(root: string, keyId: string): Promise<TagSubmission>;
|
|
139
|
+
/** Poll the status of a tag job started by tag(). Exposed for callers that want progress UI without waiting on waitForTag()'s full promise. */
|
|
114
140
|
tagStatus(jobId: string): Promise<TagJobStatusResponse>;
|
|
141
|
+
/**
|
|
142
|
+
* Wait for a tag job started by tag() to reach a terminal state, polling
|
|
143
|
+
* tagStatus(jobId) on an interval.
|
|
144
|
+
*
|
|
145
|
+
* There is no default deadline. This waits as long as the job takes
|
|
146
|
+
* unless options.signal is given and fires first, in which case it
|
|
147
|
+
* throws TagTimeoutError with the last-seen status. Throws TagFailedError
|
|
148
|
+
* if the job reaches "tag-failed".
|
|
149
|
+
*/
|
|
150
|
+
waitForTag(jobId: string, options?: WaitForTagOptions): Promise<TagResponse>;
|
|
115
151
|
/**
|
|
116
152
|
* List the caller's tag jobs, most recently created first.
|
|
117
153
|
*
|
|
118
|
-
* Unlike tagStatus(), this doesn't require already knowing a job_id
|
|
154
|
+
* Unlike tagStatus(), this doesn't require already knowing a job_id. Use
|
|
119
155
|
* it to discover in-flight tagging after a page reload or from a
|
|
120
156
|
* different tab/device than the one that started it. Pass
|
|
121
157
|
* `{ active: true }` to list only non-terminal jobs (queued/planning/
|
|
@@ -127,55 +163,67 @@ export declare class PinionProverClient {
|
|
|
127
163
|
}): Promise<TagJobListEntry[]>;
|
|
128
164
|
deregister(keyId: string, root: string): Promise<void>;
|
|
129
165
|
/**
|
|
130
|
-
* POST /prove
|
|
166
|
+
* POST /prove: unauthenticated, the server resolves the account from key_id.
|
|
131
167
|
*
|
|
132
|
-
* Proving is asynchronous: this
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* should use audit() instead, which
|
|
137
|
-
* response.
|
|
168
|
+
* Proving is asynchronous: this submits the challenge and returns
|
|
169
|
+
* immediately with a job handle. Poll proveStatus(jobId) yourself, or
|
|
170
|
+
* await waitForProve(jobId, options) to wait for a terminal state (with
|
|
171
|
+
* no default deadline (pass `signal: AbortSignal.timeout(ms)` if you
|
|
172
|
+
* want one). Most callers should use audit() instead, which submits,
|
|
173
|
+
* waits, and cryptographically verifies the response in one call.
|
|
138
174
|
*
|
|
139
175
|
* @param keyId Challenge key ID.
|
|
140
176
|
* @param roots CID strings to prove, in the same order as the challenge.
|
|
141
177
|
* @param challenge base64(JSON(WireChallenge)) from buildChallenge().
|
|
142
178
|
* @param challengeId Optional idempotency key. If a caller's own retry
|
|
143
179
|
* logic re-calls prove() for what is logically the
|
|
144
|
-
* same request (e.g. after
|
|
145
|
-
* outcome), passing the
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* against a previous one.
|
|
180
|
+
* same request (e.g. after giving up waiting on an
|
|
181
|
+
* earlier attempt with an unclear outcome), passing the
|
|
182
|
+
* same challengeId across those attempts makes the
|
|
183
|
+
* server return the original job instead of starting a
|
|
184
|
+
* redundant one. Leave unset for normal audit rounds:
|
|
185
|
+
* each is a fresh, independently random challenge,
|
|
186
|
+
* which should never be deduped against a previous one.
|
|
151
187
|
*
|
|
152
188
|
* Throws PinNotActiveError (409, checked synchronously before any job is
|
|
153
|
-
* created)
|
|
154
|
-
* ProveTimeoutError if it doesn't reach a terminal state within
|
|
155
|
-
* options.timeoutMs.
|
|
189
|
+
* created) or ProverError for any other non-2xx submit response.
|
|
156
190
|
*/
|
|
157
|
-
prove(keyId: string, roots: string[], challenge: string, challengeId?: string
|
|
158
|
-
/** Poll the status of a proof job started by prove(). Exposed for callers that want to observe progress without waiting on
|
|
191
|
+
prove(keyId: string, roots: string[], challenge: string, challengeId?: string): Promise<ProveSubmission>;
|
|
192
|
+
/** Poll the status of a proof job started by prove(). Exposed for callers that want to observe progress without waiting on waitForProve()'s full promise. */
|
|
159
193
|
proveStatus(jobId: string): Promise<ProveJobStatusResponse>;
|
|
194
|
+
/**
|
|
195
|
+
* Wait for a proof job started by prove() to reach a terminal state,
|
|
196
|
+
* polling proveStatus(jobId) on an interval. Returns the raw proof bytes.
|
|
197
|
+
*
|
|
198
|
+
* There is no default deadline. This waits as long as the proof takes
|
|
199
|
+
* unless options.signal is given and fires first, in which case it
|
|
200
|
+
* throws ProveTimeoutError with the last-seen status. Throws
|
|
201
|
+
* ProveFailedError if the job reaches "prove-failed".
|
|
202
|
+
*/
|
|
203
|
+
waitForProve(jobId: string, options?: WaitForProveOptions): Promise<Uint8Array>;
|
|
160
204
|
/**
|
|
161
205
|
* Run one audit round against a pre-fetched setup.
|
|
162
206
|
*
|
|
163
207
|
* Builds a random challenge for the requested percentage of blocks, posts it
|
|
164
208
|
* to POST /prove, and cryptographically verifies the response. Pass the
|
|
165
|
-
* ParsedSetup obtained from getSetup()
|
|
209
|
+
* ParsedSetup obtained from getSetup(). audit() does not fetch it for you,
|
|
166
210
|
* keeping the setup and audit phases explicit.
|
|
167
211
|
*
|
|
168
212
|
* ```ts
|
|
169
|
-
* // Setup phase
|
|
213
|
+
* // Setup phase (done once, or after adding/removing roots):
|
|
170
214
|
* const { keyId } = await client.createKey();
|
|
171
215
|
* await client.tag(cid, keyId);
|
|
172
216
|
* const setup = await client.getSetup(keyId);
|
|
173
217
|
*
|
|
174
|
-
* // Audit phase
|
|
218
|
+
* // Audit phase (repeat on a schedule):
|
|
175
219
|
* const result = await client.audit(keyId, setup);
|
|
176
220
|
* const result = await client.audit(keyId, setup, { challengePct: 100 });
|
|
177
221
|
* ```
|
|
178
222
|
*
|
|
223
|
+
* Waits for the proof with no default deadline. Pass `options.signal` if
|
|
224
|
+
* you want to cancel or bound how long this waits (e.g.
|
|
225
|
+
* `AbortSignal.timeout(60_000)` for the old fixed ceiling).
|
|
226
|
+
*
|
|
179
227
|
* Throws `PinNotActiveError` if any challenged root is no longer pinned.
|
|
180
228
|
*/
|
|
181
229
|
audit(keyId: string, setup: ParsedSetup, options?: AuditOptions): Promise<AuditResult>;
|
|
@@ -193,7 +241,7 @@ export declare class ProverError extends Error {
|
|
|
193
241
|
}
|
|
194
242
|
/**
|
|
195
243
|
* Thrown when a response has a successful HTTP status but a body that
|
|
196
|
-
* isn't valid JSON
|
|
244
|
+
* isn't valid JSON. This is what an infra problem often looks like from
|
|
197
245
|
* the client's perspective (a proxy's HTML error page returned with a 200,
|
|
198
246
|
* a response cut off mid-stream), as opposed to a clean non-2xx status
|
|
199
247
|
* (which surfaces as ProverError instead). bodyPreview is truncated to 200
|
|
@@ -214,39 +262,49 @@ export declare class PinNotActiveError extends Error {
|
|
|
214
262
|
readonly cid: string;
|
|
215
263
|
constructor(cid: string);
|
|
216
264
|
}
|
|
217
|
-
/** Thrown by
|
|
265
|
+
/** Thrown by waitForTag() when the async tag job reaches the "tag-failed" state. */
|
|
218
266
|
export declare class TagFailedError extends Error {
|
|
219
267
|
readonly jobId: string;
|
|
220
268
|
readonly reason: string;
|
|
221
269
|
constructor(jobId: string, reason: string);
|
|
222
270
|
}
|
|
223
|
-
/**
|
|
271
|
+
/**
|
|
272
|
+
* Thrown by waitForTag() when its `options.signal` fires before the job
|
|
273
|
+
* reaches a terminal state. There is no default deadline anymore. This
|
|
274
|
+
* only happens if the caller opted into one (e.g. `signal:
|
|
275
|
+
* AbortSignal.timeout(ms)`).
|
|
276
|
+
*/
|
|
224
277
|
export declare class TagTimeoutError extends Error {
|
|
225
278
|
readonly jobId: string;
|
|
226
279
|
readonly lastStatus: string;
|
|
227
280
|
constructor(jobId: string, lastStatus: string);
|
|
228
281
|
}
|
|
229
|
-
/** Thrown by
|
|
282
|
+
/** Thrown by waitForProve() when the async proof job reaches the "prove-failed" state. */
|
|
230
283
|
export declare class ProveFailedError extends Error {
|
|
231
284
|
readonly jobId: string;
|
|
232
285
|
readonly reason: string;
|
|
233
|
-
/** The challenge this job was for
|
|
234
|
-
readonly challenge: string;
|
|
235
|
-
readonly roots: string[];
|
|
286
|
+
/** The challenge this job was for: base64(JSON(WireChallenge)), decode with decodeChallenge(). Undefined if the caller didn't pass one to waitForProve(). */
|
|
287
|
+
readonly challenge: string | undefined;
|
|
288
|
+
readonly roots: string[] | undefined;
|
|
236
289
|
constructor(jobId: string, reason: string,
|
|
237
|
-
/** The challenge this job was for
|
|
238
|
-
challenge: string, roots: string[]);
|
|
290
|
+
/** The challenge this job was for: base64(JSON(WireChallenge)), decode with decodeChallenge(). Undefined if the caller didn't pass one to waitForProve(). */
|
|
291
|
+
challenge: string | undefined, roots: string[] | undefined);
|
|
239
292
|
}
|
|
240
|
-
/**
|
|
293
|
+
/**
|
|
294
|
+
* Thrown by waitForProve() when its `options.signal` fires before the job
|
|
295
|
+
* reaches a terminal state. There is no default deadline anymore. This
|
|
296
|
+
* only happens if the caller opted into one (e.g. `signal:
|
|
297
|
+
* AbortSignal.timeout(ms)`).
|
|
298
|
+
*/
|
|
241
299
|
export declare class ProveTimeoutError extends Error {
|
|
242
300
|
readonly jobId: string;
|
|
243
301
|
readonly lastStatus: string;
|
|
244
|
-
/** The challenge this job was for
|
|
245
|
-
readonly challenge: string;
|
|
246
|
-
readonly roots: string[];
|
|
302
|
+
/** The challenge this job was for: base64(JSON(WireChallenge)), decode with decodeChallenge(). Undefined if the caller didn't pass one to waitForProve(). */
|
|
303
|
+
readonly challenge: string | undefined;
|
|
304
|
+
readonly roots: string[] | undefined;
|
|
247
305
|
constructor(jobId: string, lastStatus: string,
|
|
248
|
-
/** The challenge this job was for
|
|
249
|
-
challenge: string, roots: string[]);
|
|
306
|
+
/** The challenge this job was for: base64(JSON(WireChallenge)), decode with decodeChallenge(). Undefined if the caller didn't pass one to waitForProve(). */
|
|
307
|
+
challenge: string | undefined, roots: string[] | undefined);
|
|
250
308
|
}
|
|
251
309
|
/**
|
|
252
310
|
* Decode a raw /setup response into a ParsedSetup.
|
|
@@ -257,7 +315,7 @@ export declare class ProveTimeoutError extends Error {
|
|
|
257
315
|
* decoded to raw CID bytes (Uint8Array) via multiformats/cid.
|
|
258
316
|
* - chunked (SW-Priv/SW-Pub): roots[].block_count is a super-block count;
|
|
259
317
|
* ids are synthesized locally as superBlockId(rootBytes, i) for i in
|
|
260
|
-
* [0, block_count)
|
|
318
|
+
* [0, block_count), see superBlockId()'s doc comment in challenge.ts for
|
|
261
319
|
* why no per-block manifest is needed for these protocols.
|
|
262
320
|
*/
|
|
263
321
|
export declare function parseSetupResponse(raw: RawSetupResponse): ParsedSetup;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAEhB,eAAe,EACf,WAAW,EAGX,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EAEf,cAAc,EAEd,oBAAoB,EACpB,WAAW,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|