@zkproofport-ai/sdk 0.2.17 → 0.3.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/README.md +81 -33
- package/dist/actionApproval.d.ts +51 -0
- package/dist/actionApproval.d.ts.map +1 -0
- package/dist/actionApproval.js +216 -0
- package/dist/actionApproval.js.map +1 -0
- package/dist/arcWallet.d.ts.map +1 -1
- package/dist/arcWallet.js +7 -1
- package/dist/arcWallet.js.map +1 -1
- package/dist/flow.d.ts +2 -2
- package/dist/flow.d.ts.map +1 -1
- package/dist/flow.js +29 -16
- package/dist/flow.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +7 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@ Client SDK for ZKProofport zero-knowledge proofs, including experimental exact-a
|
|
|
4
4
|
|
|
5
5
|
The shared `hashTypedAction` helper is available from **SDK 0.2.12**. Arc/GIWA optional actions require **SDK 0.2.14 or later**; MCP stepwise input preparation requires **MCP 0.2.15 or later**. Release Please owns the versions. Confirm the resolved npm versions before using this path.
|
|
6
6
|
|
|
7
|
+
Human action approval requires SDK **0.3.0 or later** and a compatible AI service with the approval API enabled. For the CLI/MCP flow, use MCP **0.3.0 or later** as well. Earlier releases that support action hashing do not implement this approval lifecycle. Action requests now pause for human approval; handle `ActionApprovalRequiredError` and resume as shown below.
|
|
8
|
+
|
|
7
9
|
## Overview
|
|
8
10
|
|
|
9
11
|
@zkproofport-ai/sdk is a TypeScript SDK for generating privacy-preserving zero-knowledge proofs using Coinbase KYC attestations and OIDC JWT tokens. Generate a proof with a single function call, or fine-tune each step for custom workflows.
|
|
@@ -93,11 +95,11 @@ Use **SDK 0.2.14 or later** and **MCP 0.2.15 or later** for both Arc/GIWA signat
|
|
|
93
95
|
|
|
94
96
|
1. **Coinbase account with KYC verification** — Complete identity verification on [Coinbase](https://www.coinbase.com/)
|
|
95
97
|
2. **Coinbase KYC EAS attestation on Base** — Obtain an attestation via [Coinbase Verifications](https://www.coinbase.com/onchain-verify). This creates an on-chain EAS attestation on Base linked to your wallet address.
|
|
96
|
-
3. **Credential signer**
|
|
98
|
+
3. **Credential signer for proofs without an action** — A local signer for the wallet holding the EAS attestation. The CLI uses `ATTESTATION_KEY`; programmatic callers can supply a compatible `ProofportSigner`. An Arc/GIWA action instead requires the credential holder to connect a wallet and sign through the approval page. Keep key material outside model context.
|
|
97
99
|
|
|
98
100
|
**For OIDC circuits** (`oidc_domain`): No wallet or attestation needed — just a JWT `id_token` from your OIDC provider.
|
|
99
101
|
|
|
100
|
-
**For GIWA** (`giwa_attestation`): an attestation from GIWA's attester on **GIWA Sepolia**, and
|
|
102
|
+
**For GIWA** (`giwa_attestation`): an attestation from GIWA's attester on **GIWA Sepolia**, and control of that wallet. Without an action, supply its local signer; with an action, the person connects that wallet on the approval page. The attestation must belong to the wallet signing the proof request on the chain the circuit reads.
|
|
101
103
|
|
|
102
104
|
**For the circuits that can bind an action** (`arc_eligibility`, `giwa_attestation`): the attestation above for whichever one you ask for. What differs is what the wallet signs, and the action is **optional** — see below.
|
|
103
105
|
|
|
@@ -135,7 +137,7 @@ console.log('Valid:', verification.valid);
|
|
|
135
137
|
>
|
|
136
138
|
> The Ledger House EligibilityGate on Arc is `0xD0F3eE648386B59B484157332E736388Fcc41F47`. Public-input layouts and deployments may change; do not put either in front of real funds. Generally available: `coinbase_kyc`, `coinbase_country`, `oidc_domain`.
|
|
137
139
|
>
|
|
138
|
-
> **The action is optional on both.** Send one and the
|
|
140
|
+
> **The action is optional on both.** Send one and the SDK pauses for a human to connect a wallet and sign the exact typed data. Send none and the supplied credential signer signs the request's signal hash as before. Supplying `ATTESTATION_KEY` does not bypass action approval.
|
|
139
141
|
|
|
140
142
|
### The problem it solves
|
|
141
143
|
|
|
@@ -154,15 +156,18 @@ wallet and scope no matter what the proof is later used for, so:
|
|
|
154
156
|
|
|
155
157
|
### What changes
|
|
156
158
|
|
|
157
|
-
Pass an `action` and
|
|
158
|
-
typed structure
|
|
159
|
-
|
|
159
|
+
Pass an `action` and a human wallet signs an [EIP-712](https://eips.ethereum.org/EIPS/eip-712)
|
|
160
|
+
typed structure through the AI service's approval page. You define the structure;
|
|
161
|
+
the SDK does not invent action fields. No proof challenge or payment starts while
|
|
162
|
+
approval is pending. The agent's payment wallet remains separately configured.
|
|
160
163
|
|
|
161
164
|
```typescript
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
165
|
+
import {
|
|
166
|
+
ActionApprovalRequiredError, generateProof, getActionApprovalStatus,
|
|
167
|
+
type ActionApproval, type ClientConfig, type PaymentWallet, type ProofParams,
|
|
168
|
+
} from '@zkproofport-ai/sdk';
|
|
169
|
+
|
|
170
|
+
const params: ProofParams = {
|
|
166
171
|
circuit: 'arc_eligibility',
|
|
167
172
|
scope: 'my-app',
|
|
168
173
|
action: {
|
|
@@ -180,15 +185,56 @@ const result = await generateProof(
|
|
|
180
185
|
],
|
|
181
186
|
},
|
|
182
187
|
primaryType: 'Deposit',
|
|
183
|
-
message: { amount:
|
|
188
|
+
message: { amount: '100000', nonce: '1', expiry: String(deadline) },
|
|
184
189
|
},
|
|
185
|
-
|
|
186
|
-
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
// For a CLI or backend with an appropriate request lifetime. An MCP tool should
|
|
193
|
+
// return the URL promptly and resume in a later call instead of waiting here.
|
|
194
|
+
async function waitForHumanApproval(config: ClientConfig, approval: ActionApproval) {
|
|
195
|
+
while (Date.now() < Date.parse(approval.expiresAt)) {
|
|
196
|
+
const status = await getActionApprovalStatus(config, approval);
|
|
197
|
+
if (status.status === 'approved') return;
|
|
198
|
+
if (status.status !== 'pending') throw new Error(`Action approval is ${status.status}`);
|
|
199
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
200
|
+
}
|
|
201
|
+
throw new Error('Action approval expired');
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
async function generateWithHumanApproval(config: ClientConfig, payment: PaymentWallet, params: ProofParams) {
|
|
205
|
+
try {
|
|
206
|
+
return await generateProof(config, { payment }, params);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
if (!(error instanceof ActionApprovalRequiredError)) throw error;
|
|
209
|
+
const approval = error.approval;
|
|
210
|
+
console.error('Review and sign:', approval.approvalUrl);
|
|
211
|
+
await waitForHumanApproval(config, approval);
|
|
212
|
+
// Consume once. Do not retry this call automatically after a failure.
|
|
213
|
+
return generateProof(config, { payment }, { ...params, actionApproval: approval });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const result = await generateWithHumanApproval(config, payment, params);
|
|
187
218
|
```
|
|
188
219
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
220
|
+
`ActionApprovalRequiredError` is a pause, not a failed proof. Its `.approval`
|
|
221
|
+
handle contains `{approvalId, approvalUrl, requesterToken, expiresAt}`. Keep
|
|
222
|
+
`requesterToken` in private application storage; only show the approval URL to
|
|
223
|
+
the person. Status replies contain no signature. `resolveActionApproval`
|
|
224
|
+
checks the original circuit, scope, full action and recovered signer before
|
|
225
|
+
preparing inputs. Rejected, expired and consumed sessions cannot proceed.
|
|
226
|
+
|
|
227
|
+
The session expires after ten minutes and can be consumed once. If a response
|
|
228
|
+
is lost after consumption, inspect the previous proof/payment outcome before
|
|
229
|
+
requesting fresh approval; never automatically pay again. Session expiry does
|
|
230
|
+
not expire the EIP-712 signature on chain. The relying contract must enforce
|
|
231
|
+
the action's own nonce and deadline. This flow supports EOA credential wallets;
|
|
232
|
+
contract-wallet signature verification is outside the current circuit.
|
|
233
|
+
|
|
234
|
+
Ask for `giwa_attestation` instead to use the credential wallet's GIWA Sepolia
|
|
235
|
+
attestation. The action domain names the relying contract's execution chain;
|
|
236
|
+
it is independent of the chain used for attestation lookup or proof payment.
|
|
237
|
+
The approval page asks the wallet to use the action's declared chain.
|
|
192
238
|
|
|
193
239
|
The wallet renders `amount`, `nonce` and `expiry` by name for the person to
|
|
194
240
|
read. Two 32-byte hashes reach the circuit — the EIP-712 domain separator and
|
|
@@ -239,11 +285,11 @@ the one-per-person property it exists for.
|
|
|
239
285
|
|
|
240
286
|
### Omitting `action`
|
|
241
287
|
|
|
242
|
-
`arc_eligibility`
|
|
288
|
+
Both `arc_eligibility` and `giwa_attestation` accept an omitted action and retain their local `personal_sign` path. Coinbase circuits reject `action` and retain their existing signing path; OIDC rejects `action` and uses its JWT flow without wallet signing. For action proofs, the application must verify the exact target, operational wallet, amount, nonce and deadline as well as the proof.
|
|
243
289
|
|
|
244
290
|
## Arc Circle Agent Wallet path — EXPERIMENTAL
|
|
245
291
|
|
|
246
|
-
Use the existing Circle CLI login and selected Arc Agent Wallet; do not create or switch wallets as part of proof generation. Install the CLI if needed, then let the user complete any missing login locally.
|
|
292
|
+
Use the existing Circle CLI login and selected Arc Agent Wallet; do not create or switch wallets as part of proof generation. Install the CLI if needed, then let the user complete any missing login locally. Credential holder A connects their wallet on the human approval page; this action flow does not load A's `ATTESTATION_KEY`. Keep credential data and Circle login secrets outside model context and ordinary logs.
|
|
247
293
|
|
|
248
294
|
```bash
|
|
249
295
|
npm install -g @circle-fin/cli
|
|
@@ -261,17 +307,15 @@ After the user reviews the action and the live x402 offer, save those exact appr
|
|
|
261
307
|
```typescript
|
|
262
308
|
import { readFile } from 'node:fs/promises';
|
|
263
309
|
import {
|
|
264
|
-
createConfig,
|
|
310
|
+
createConfig, verifyProof, walletFor,
|
|
265
311
|
type ProofParams, type ApprovedPayment,
|
|
266
312
|
} from '@zkproofport-ai/sdk';
|
|
267
313
|
|
|
268
314
|
const config = createConfig({baseUrl: 'https://stg-ai.zkproofport.app'});
|
|
269
315
|
const action: NonNullable<ProofParams['action']> = JSON.parse(await readFile('approved-action.json', 'utf8'));
|
|
270
316
|
const approvedPayment: ApprovedPayment = JSON.parse(await readFile('approved-payment.json', 'utf8'));
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
payment: await walletFor('arc'), // existing Circle wallet B
|
|
274
|
-
}, {
|
|
317
|
+
// generateWithHumanApproval is the bounded catch/poll/resume helper above.
|
|
318
|
+
const result = await generateWithHumanApproval(config, await walletFor('arc'), {
|
|
275
319
|
circuit: 'arc_eligibility', scope: 'ledger-house', action,
|
|
276
320
|
payOn: 'arc-testnet-nano', maxPayment: '0.001', approvedPayment,
|
|
277
321
|
});
|
|
@@ -299,7 +343,7 @@ Both `generateProof`/`generate_proof` and Arc input preparation use this complet
|
|
|
299
343
|
| `primaryType` | non-empty string | The declared top-level struct; it must equal the single root inferred by the encoder. |
|
|
300
344
|
| `message` | object | Values matching the declared field types, including nested objects and arrays. |
|
|
301
345
|
|
|
302
|
-
No SDK action registry restricts struct names, field names or
|
|
346
|
+
No SDK action registry restricts business-specific struct names, field names or values. For example, `Instruction` can contain `terms: Terms` and `labels: string[]`, where `Terms` contains `quantity: uint256` and `memo: string`. The circuit binds their hashes; each relying application decides which structures it can execute. Declare every approval-critical field in `types`; the approval API rejects extra unsigned message keys. Invalid shape, missing declared fields (including nested structs/arrays), non-boolean `bool` values, malformed field declarations/encoded values, ambiguous roots and a mismatched `primaryType` are rejected before human signing. The API also bounds request size, nesting, array length and declaration count.
|
|
303
347
|
|
|
304
348
|
Use decimal **integer strings** for JSON integer message values, especially `uint256` (for example `"10000000"`); JSON cannot represent `bigint`, and large JavaScript numbers can lose precision. Addresses/bytes are `0x` strings, booleans remain JSON booleans, and nested values follow their declared types. `domain.chainId` remains an integer JSON number.
|
|
305
349
|
|
|
@@ -441,14 +485,14 @@ if (verification.valid) {
|
|
|
441
485
|
|
|
442
486
|
## Step-by-Step API
|
|
443
487
|
|
|
444
|
-
For Arc,
|
|
488
|
+
For Arc/GIWA actions, obtain human approval before preparing inputs. `prepareInputs` needs the camelCase hashes to recover A's public key from the approved EIP-712 digest; it does not add those hashes to its returned object. Attach the snake_case fields for submission. `signal_hash` is still computed internally for nullifier derivation and is not the action signing message. Low-level witness APIs accept signatures but cannot establish who operated the signing wallet.
|
|
445
489
|
|
|
446
490
|
Prepared inputs are **private witness data**: they include A's public key, signature and attestation data. Keep them inside trusted local code and send them only to the chosen prover (encrypted when a supported TEE key is provided). Do not forward them to the dApp, model, UI or logs. The `generateProof` public result is the boundary for sharing a proof; step callbacks and `proofport://config` can contain sensitive signer data and must not be forwarded wholesale.
|
|
447
491
|
|
|
448
492
|
```typescript
|
|
449
493
|
import { readFile } from 'node:fs/promises';
|
|
450
494
|
import {
|
|
451
|
-
createConfig,
|
|
495
|
+
createConfig, createActionApproval, resolveActionApproval, hashTypedAction, prepareInputs,
|
|
452
496
|
requestChallenge, signPayment, submitProof, submitEncryptedProof,
|
|
453
497
|
encryptForTee, walletFor, CIRCUIT_IDS,
|
|
454
498
|
type TypedAction, type ApprovedPayment,
|
|
@@ -457,17 +501,20 @@ import {
|
|
|
457
501
|
const config = createConfig({ baseUrl: 'https://stg-ai.zkproofport.app' });
|
|
458
502
|
const action: TypedAction = JSON.parse(await readFile('approved-action.json', 'utf8'));
|
|
459
503
|
const approvedPayment: ApprovedPayment = JSON.parse(await readFile('approved-payment.json', 'utf8'));
|
|
460
|
-
const signer = fromPrivateKey(process.env.ATTESTATION_KEY!); // local A only
|
|
461
504
|
const scope = 'ledger-house';
|
|
462
505
|
|
|
463
|
-
// 1.
|
|
506
|
+
// 1. Create an immutable request, then let the person connect and sign.
|
|
464
507
|
const { domainSeparator, actionHash } = hashTypedAction(action);
|
|
465
|
-
const
|
|
508
|
+
const request = { circuit: 'arc_eligibility' as const, scope, action };
|
|
509
|
+
const approval = await createActionApproval(config, request);
|
|
510
|
+
console.error('Review and sign:', approval.approvalUrl);
|
|
511
|
+
await waitForHumanApproval(config, approval); // bounded helper from the example above
|
|
512
|
+
const approved = await resolveActionApproval(config, request, approval);
|
|
466
513
|
|
|
467
|
-
// 2.
|
|
514
|
+
// 2. The signature has been verified and consumed. Build the private witness.
|
|
468
515
|
const prepared = await prepareInputs(config, {
|
|
469
516
|
circuitId: CIRCUIT_IDS.ARC_ELIGIBILITY,
|
|
470
|
-
userAddress:
|
|
517
|
+
userAddress: approved.address, userSignature: approved.signature, scope,
|
|
471
518
|
domainSeparator, actionHash,
|
|
472
519
|
});
|
|
473
520
|
const inputs = { ...prepared, domain_separator: domainSeparator, action_hash: actionHash };
|
|
@@ -616,8 +663,8 @@ The proof contains 148 public input fields (32 bytes each):
|
|
|
616
663
|
**Circuit Types:**
|
|
617
664
|
|
|
618
665
|
```typescript
|
|
619
|
-
type CircuitName = 'coinbase_kyc' | 'coinbase_country' | 'oidc_domain' | 'arc_eligibility';
|
|
620
|
-
type CircuitId = 'coinbase_attestation' | 'coinbase_country_attestation' | 'oidc_domain_attestation' | 'arc_eligibility';
|
|
666
|
+
type CircuitName = 'coinbase_kyc' | 'coinbase_country' | 'oidc_domain' | 'arc_eligibility' | 'giwa_attestation';
|
|
667
|
+
type CircuitId = 'coinbase_attestation' | 'coinbase_country_attestation' | 'oidc_domain_attestation' | 'arc_eligibility' | 'giwa_attestation';
|
|
621
668
|
```
|
|
622
669
|
|
|
623
670
|
**Configuration:**
|
|
@@ -651,6 +698,7 @@ function fromSigner(signer: ethers.Signer): ProofportSigner;
|
|
|
651
698
|
interface ProofParams {
|
|
652
699
|
circuit: CircuitName;
|
|
653
700
|
action?: { domain: { name: string; version: string; chainId: number; verifyingContract: string }; types: Record<string, Array<{name: string; type: string}>>; primaryType: string; message: Record<string, unknown> }; // optional for arc_eligibility and giwa_attestation
|
|
701
|
+
actionApproval?: ActionApproval; // private handle; resume the original action after human approval
|
|
654
702
|
payOn?: string;
|
|
655
703
|
maxPayment?: string; // decimal USDC
|
|
656
704
|
approvedPayment?: ApprovedPayment;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CircuitName, ClientConfig, TypedAction } from './types.js';
|
|
2
|
+
/** Requester capability. Keep this handle private; show only approvalUrl to the person. */
|
|
3
|
+
export interface ActionApproval {
|
|
4
|
+
approvalId: string;
|
|
5
|
+
approvalUrl: string;
|
|
6
|
+
requesterToken: string;
|
|
7
|
+
/** Fixed session expiry, as an ISO timestamp. This is not an on-chain signature deadline. */
|
|
8
|
+
expiresAt: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ActionApprovalRequest {
|
|
11
|
+
circuit: CircuitName;
|
|
12
|
+
scope: string;
|
|
13
|
+
action: TypedAction;
|
|
14
|
+
expectedSigner?: string;
|
|
15
|
+
}
|
|
16
|
+
export type ActionApprovalState = 'pending' | 'approved' | 'rejected' | 'consumed' | 'expired';
|
|
17
|
+
export interface ActionApprovalStatus extends ActionApprovalRequest {
|
|
18
|
+
approvalId: string;
|
|
19
|
+
status: ActionApprovalState;
|
|
20
|
+
expiresAt: string;
|
|
21
|
+
address?: string;
|
|
22
|
+
}
|
|
23
|
+
export type ActionApprovalErrorCode = 'ACTION_APPROVAL_INVALID' | 'ACTION_APPROVAL_REJECTED' | 'ACTION_APPROVAL_CONSUMED' | 'ACTION_APPROVAL_EXPIRED' | 'ACTION_APPROVAL_UNAVAILABLE';
|
|
24
|
+
export declare class ActionApprovalError extends Error {
|
|
25
|
+
readonly code: ActionApprovalErrorCode;
|
|
26
|
+
constructor(code: ActionApprovalErrorCode, message: string);
|
|
27
|
+
}
|
|
28
|
+
/** A resumable pause before proof work or payment, not a failed proof. */
|
|
29
|
+
export declare class ActionApprovalRequiredError extends Error {
|
|
30
|
+
readonly code = "ACTION_APPROVAL_REQUIRED";
|
|
31
|
+
readonly approval: ActionApproval;
|
|
32
|
+
constructor(approval: ActionApproval);
|
|
33
|
+
}
|
|
34
|
+
/** Create a pending session; this does not sign, prepare a proof, or pay. */
|
|
35
|
+
export declare function createActionApproval(config: ClientConfig, request: ActionApprovalRequest): Promise<ActionApproval>;
|
|
36
|
+
/** Status never returns a raw signature or a requester credential. */
|
|
37
|
+
export declare function getActionApprovalStatus(config: ClientConfig, approval: ActionApproval): Promise<ActionApprovalStatus>;
|
|
38
|
+
/**
|
|
39
|
+
* Consume once and cryptographically check the returned signature against the
|
|
40
|
+
* caller's frozen action. A lost response must be inspected, never auto-retried.
|
|
41
|
+
*/
|
|
42
|
+
export declare function consumeActionApproval(config: ClientConfig, request: ActionApprovalRequest, approval: ActionApproval): Promise<{
|
|
43
|
+
address: string;
|
|
44
|
+
signature: string;
|
|
45
|
+
}>;
|
|
46
|
+
/** Resume an approved action, or yield a handle for human review before any proof work. */
|
|
47
|
+
export declare function resolveActionApproval(config: ClientConfig, request: ActionApprovalRequest, approval?: ActionApproval): Promise<{
|
|
48
|
+
address: string;
|
|
49
|
+
signature: string;
|
|
50
|
+
}>;
|
|
51
|
+
//# sourceMappingURL=actionApproval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionApproval.d.ts","sourceRoot":"","sources":["../src/actionApproval.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,2FAA2F;AAC3F,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/F,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,uBAAuB,GAC/B,yBAAyB,GACzB,0BAA0B,GAC1B,0BAA0B,GAC1B,yBAAyB,GACzB,6BAA6B,CAAC;AAElC,qBAAa,mBAAoB,SAAQ,KAAK;aAChB,IAAI,EAAE,uBAAuB;gBAA7B,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM;CAI3E;AAED,0EAA0E;AAC1E,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,8BAA8B;IAC3C,SAAiB,QAAQ,EAAE,cAAc,CAAC;gBAE9B,QAAQ,EAAE,cAAc;CAMrC;AAiGD,6EAA6E;AAC7E,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAOxH;AAED,sEAAsE;AACtE,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAa3H;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB3K;AAED,2FAA2F;AAC3F,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB5K"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { getAddress, verifyTypedData } from 'ethers';
|
|
2
|
+
import { hashTypedAction } from './action.js';
|
|
3
|
+
export class ActionApprovalError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
constructor(code, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.name = 'ActionApprovalError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** A resumable pause before proof work or payment, not a failed proof. */
|
|
12
|
+
export class ActionApprovalRequiredError extends Error {
|
|
13
|
+
code = 'ACTION_APPROVAL_REQUIRED';
|
|
14
|
+
constructor(approval) {
|
|
15
|
+
super('Human wallet approval is required before this action proof can continue.');
|
|
16
|
+
this.name = 'ActionApprovalRequiredError';
|
|
17
|
+
// Generic error serialization must not expose the requester capability.
|
|
18
|
+
Object.defineProperty(this, 'approval', { value: { ...approval }, enumerable: false });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const invalid = () => new ActionApprovalError('ACTION_APPROVAL_INVALID', 'Action approval does not match the requested action or has an invalid response.');
|
|
22
|
+
const expired = () => new ActionApprovalError('ACTION_APPROVAL_EXPIRED', 'Action approval expired. A new human approval is required.');
|
|
23
|
+
function object(value) {
|
|
24
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
25
|
+
throw invalid();
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
/** Compare the full JSON request, independently of object-key ordering. */
|
|
29
|
+
function canonical(value, depth = 0) {
|
|
30
|
+
if (depth > 64)
|
|
31
|
+
throw invalid();
|
|
32
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
33
|
+
return JSON.stringify(value);
|
|
34
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
35
|
+
return JSON.stringify(value);
|
|
36
|
+
if (Array.isArray(value))
|
|
37
|
+
return '[' + value.map(item => canonical(item, depth + 1)).join(',') + ']';
|
|
38
|
+
if (value && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {
|
|
39
|
+
return '{' + Object.keys(value).sort().map(key => JSON.stringify(key) + ':' + canonical(value[key], depth + 1)).join(',') + '}';
|
|
40
|
+
}
|
|
41
|
+
// JSON cannot preserve bigint/undefined/functions. Use decimal strings for large integers.
|
|
42
|
+
throw invalid();
|
|
43
|
+
}
|
|
44
|
+
function address(value) {
|
|
45
|
+
if (typeof value !== 'string')
|
|
46
|
+
throw invalid();
|
|
47
|
+
try {
|
|
48
|
+
return getAddress(value);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw invalid();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function snapshotRequest(request) {
|
|
55
|
+
try {
|
|
56
|
+
const copy = structuredClone(request);
|
|
57
|
+
if (copy.circuit !== 'giwa_attestation' && copy.circuit !== 'arc_eligibility')
|
|
58
|
+
throw invalid();
|
|
59
|
+
if (typeof copy.scope !== 'string' || !copy.scope.trim())
|
|
60
|
+
throw invalid();
|
|
61
|
+
canonical(copy.action);
|
|
62
|
+
hashTypedAction(copy.action);
|
|
63
|
+
if (copy.expectedSigner !== undefined)
|
|
64
|
+
copy.expectedSigner = address(copy.expectedSigner);
|
|
65
|
+
return copy;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
throw invalid();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function timestamp(value) {
|
|
72
|
+
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}T/.test(value))
|
|
73
|
+
throw invalid();
|
|
74
|
+
const time = Date.parse(value);
|
|
75
|
+
if (!Number.isFinite(time))
|
|
76
|
+
throw invalid();
|
|
77
|
+
return time;
|
|
78
|
+
}
|
|
79
|
+
function snapshotApproval(value) {
|
|
80
|
+
const item = object(value);
|
|
81
|
+
if (typeof item.approvalId !== 'string' || !/^[A-Za-z0-9_-]{1,200}$/.test(item.approvalId))
|
|
82
|
+
throw invalid();
|
|
83
|
+
if (typeof item.requesterToken !== 'string' || !/^[A-Za-z0-9._~-]{1,512}$/.test(item.requesterToken))
|
|
84
|
+
throw invalid();
|
|
85
|
+
if (typeof item.approvalUrl !== 'string')
|
|
86
|
+
throw invalid();
|
|
87
|
+
try {
|
|
88
|
+
const url = new URL(item.approvalUrl);
|
|
89
|
+
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)
|
|
90
|
+
throw invalid();
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw invalid();
|
|
94
|
+
}
|
|
95
|
+
timestamp(item.expiresAt);
|
|
96
|
+
return { approvalId: item.approvalId, approvalUrl: item.approvalUrl,
|
|
97
|
+
requesterToken: item.requesterToken, expiresAt: item.expiresAt };
|
|
98
|
+
}
|
|
99
|
+
function assertLive(approval) {
|
|
100
|
+
if (timestamp(approval.expiresAt) <= Date.now())
|
|
101
|
+
throw expired();
|
|
102
|
+
}
|
|
103
|
+
function assertRequest(response, request) {
|
|
104
|
+
if (response.circuit !== request.circuit || response.scope !== request.scope || canonical(response.action) !== canonical(request.action))
|
|
105
|
+
throw invalid();
|
|
106
|
+
// Also revalidate the EIP-712 schema and digest of the independently received action.
|
|
107
|
+
try {
|
|
108
|
+
const actual = hashTypedAction(response.action);
|
|
109
|
+
const expected = hashTypedAction(request.action);
|
|
110
|
+
if (actual.domainSeparator !== expected.domainSeparator || actual.actionHash !== expected.actionHash)
|
|
111
|
+
throw invalid();
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
throw invalid();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async function api(config, path, method, token, body) {
|
|
118
|
+
try {
|
|
119
|
+
const response = await fetch(`${config.baseUrl.replace(/\/$/, '')}/api/v1/action-approvals${path}`, {
|
|
120
|
+
method,
|
|
121
|
+
headers: { 'Content-Type': 'application/json', ...(token && { Authorization: `Bearer ${token}` }) },
|
|
122
|
+
...(body !== undefined && { body: JSON.stringify(body) }),
|
|
123
|
+
signal: AbortSignal.timeout(15_000),
|
|
124
|
+
cache: 'no-store',
|
|
125
|
+
redirect: 'error',
|
|
126
|
+
referrerPolicy: 'no-referrer',
|
|
127
|
+
});
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
// Provider bodies can reflect secrets; never incorporate them into an error.
|
|
130
|
+
throw new ActionApprovalError('ACTION_APPROVAL_UNAVAILABLE', `Action approval request failed (HTTP ${response.status}). Check its status before trying again.`);
|
|
131
|
+
}
|
|
132
|
+
return object(await response.json());
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof ActionApprovalError)
|
|
136
|
+
throw error;
|
|
137
|
+
throw new ActionApprovalError('ACTION_APPROVAL_UNAVAILABLE', 'Action approval request could not be completed. Check its status before trying again.');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Create a pending session; this does not sign, prepare a proof, or pay. */
|
|
141
|
+
export async function createActionApproval(config, request) {
|
|
142
|
+
const frozen = snapshotRequest(request);
|
|
143
|
+
const response = await api(config, '', 'POST', undefined, frozen);
|
|
144
|
+
if (response.status !== 'pending')
|
|
145
|
+
throw invalid();
|
|
146
|
+
const approval = snapshotApproval(response);
|
|
147
|
+
assertLive(approval);
|
|
148
|
+
return approval;
|
|
149
|
+
}
|
|
150
|
+
/** Status never returns a raw signature or a requester credential. */
|
|
151
|
+
export async function getActionApprovalStatus(config, approval) {
|
|
152
|
+
const handle = snapshotApproval(approval);
|
|
153
|
+
const response = await api(config, `/${encodeURIComponent(handle.approvalId)}`, 'GET', handle.requesterToken);
|
|
154
|
+
if (response.approvalId !== handle.approvalId || timestamp(response.expiresAt) !== timestamp(handle.expiresAt))
|
|
155
|
+
throw invalid();
|
|
156
|
+
const state = response.status;
|
|
157
|
+
if (state !== 'pending' && state !== 'approved' && state !== 'rejected' && state !== 'consumed' && state !== 'expired')
|
|
158
|
+
throw invalid();
|
|
159
|
+
const request = snapshotRequest({ circuit: response.circuit, scope: response.scope, action: response.action,
|
|
160
|
+
...(response.expectedSigner !== undefined && { expectedSigner: response.expectedSigner }) });
|
|
161
|
+
const signer = response.address === undefined ? undefined : address(response.address);
|
|
162
|
+
if (state === 'approved' && !signer)
|
|
163
|
+
throw invalid();
|
|
164
|
+
if (signer && request.expectedSigner && signer !== request.expectedSigner)
|
|
165
|
+
throw invalid();
|
|
166
|
+
return { ...request, approvalId: handle.approvalId, status: state, expiresAt: handle.expiresAt,
|
|
167
|
+
...(signer && { address: signer }) };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Consume once and cryptographically check the returned signature against the
|
|
171
|
+
* caller's frozen action. A lost response must be inspected, never auto-retried.
|
|
172
|
+
*/
|
|
173
|
+
export async function consumeActionApproval(config, request, approval) {
|
|
174
|
+
const frozen = snapshotRequest(request);
|
|
175
|
+
const handle = snapshotApproval(approval);
|
|
176
|
+
assertLive(handle);
|
|
177
|
+
const response = await api(config, `/${encodeURIComponent(handle.approvalId)}/consume`, 'POST', handle.requesterToken, { circuit: frozen.circuit, scope: frozen.scope, action: frozen.action });
|
|
178
|
+
assertLive(handle);
|
|
179
|
+
assertRequest(response, frozen);
|
|
180
|
+
const signer = address(response.address);
|
|
181
|
+
if (frozen.expectedSigner && signer !== frozen.expectedSigner)
|
|
182
|
+
throw invalid();
|
|
183
|
+
if (typeof response.signature !== 'string' || !/^0x[0-9a-fA-F]{130}$/.test(response.signature))
|
|
184
|
+
throw invalid();
|
|
185
|
+
try {
|
|
186
|
+
const recovered = verifyTypedData(frozen.action.domain, frozen.action.types, frozen.action.message, response.signature);
|
|
187
|
+
if (getAddress(recovered) !== signer)
|
|
188
|
+
throw invalid();
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
throw invalid();
|
|
192
|
+
}
|
|
193
|
+
return { address: signer, signature: response.signature };
|
|
194
|
+
}
|
|
195
|
+
/** Resume an approved action, or yield a handle for human review before any proof work. */
|
|
196
|
+
export async function resolveActionApproval(config, request, approval) {
|
|
197
|
+
const frozen = snapshotRequest(request);
|
|
198
|
+
if (!approval)
|
|
199
|
+
throw new ActionApprovalRequiredError(await createActionApproval(config, frozen));
|
|
200
|
+
const handle = snapshotApproval(approval);
|
|
201
|
+
assertLive(handle);
|
|
202
|
+
const status = await getActionApprovalStatus(config, handle);
|
|
203
|
+
assertLive(handle);
|
|
204
|
+
assertRequest(status, frozen);
|
|
205
|
+
if (frozen.expectedSigner && status.expectedSigner !== frozen.expectedSigner)
|
|
206
|
+
throw invalid();
|
|
207
|
+
switch (status.status) {
|
|
208
|
+
case 'pending': throw new ActionApprovalRequiredError(handle);
|
|
209
|
+
case 'rejected': throw new ActionApprovalError('ACTION_APPROVAL_REJECTED', 'The person rejected this action approval.');
|
|
210
|
+
case 'expired': throw expired();
|
|
211
|
+
case 'consumed': throw new ActionApprovalError('ACTION_APPROVAL_CONSUMED', 'This action approval was already consumed. Check the previous proof/payment outcome before requesting a new approval.');
|
|
212
|
+
case 'approved': return consumeActionApproval(config, { ...frozen, expectedSigner: status.address }, handle);
|
|
213
|
+
default: throw invalid();
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=actionApproval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionApproval.js","sourceRoot":"","sources":["../src/actionApproval.ts"],"names":[],"mappings":"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"}
|
package/dist/arcWallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcWallet.d.ts","sourceRoot":"","sources":["../src/arcWallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,yDAAyD;AACzD,eAAO,MAAM,cAAc;;;CAAsD,CAAC;AAClF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"arcWallet.d.ts","sourceRoot":"","sources":["../src/arcWallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,yDAAyD;AACzD,eAAO,MAAM,cAAc;;;CAAsD,CAAC;AAClF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AA+C/E,kEAAkE;AAClE,wBAAsB,mBAAmB,CAAC,KAAK,GAAE,WAAoC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKxG;AAED,kDAAkD;AAClD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAK5D;AAiBD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,GAAE;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAkE9B"}
|
package/dist/arcWallet.js
CHANGED
|
@@ -43,7 +43,7 @@ async function circle(args) {
|
|
|
43
43
|
const err = error;
|
|
44
44
|
if (err.code === 'ENOENT') {
|
|
45
45
|
throw new Error('Circle CLI is not installed, so an Arc agent wallet cannot sign. Install it with ' +
|
|
46
|
-
'`npm install -g @circle-fin/cli`, then `circle wallet login <email> --testnet`.');
|
|
46
|
+
'`npm install -g @circle-fin/cli@>=1.1.4`, then `circle wallet login <email> --testnet`.');
|
|
47
47
|
}
|
|
48
48
|
// The CLI prints a JSON error on stdout even when it exits non-zero.
|
|
49
49
|
let reason = err.stderr?.trim() || err.message || 'unknown error';
|
|
@@ -56,6 +56,12 @@ async function circle(args) {
|
|
|
56
56
|
catch {
|
|
57
57
|
// stdout was not JSON; the stderr text above is the best there is.
|
|
58
58
|
}
|
|
59
|
+
if (/no longer supported/i.test(reason)) {
|
|
60
|
+
throw new Error(`Circle CLI is too old: ${reason} Update it with \`circle update\` or ` +
|
|
61
|
+
'`npm install -g @circle-fin/cli@latest`. Circle disables wallet operations on ' +
|
|
62
|
+
'versions it has retired, so the pin cannot be held here — 1.0.0 stopped working ' +
|
|
63
|
+
'for wallet commands and 1.1.4 was current on 2026-09-22.');
|
|
64
|
+
}
|
|
59
65
|
if (/AUTH_REQUIRED|Not logged in/i.test(reason)) {
|
|
60
66
|
throw new Error(`Circle CLI is not logged in for this environment: ${reason}. ` +
|
|
61
67
|
'Testnet and mainnet are separate logins — `circle wallet login <email> --testnet` for Arc Testnet.');
|
package/dist/arcWallet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arcWallet.js","sourceRoot":"","sources":["../src/arcWallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEhC,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAW,CAAC;AAGlF,KAAK,UAAU,MAAM,CAAC,IAAc;IAClC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;YACpE,uEAAuE;YACvE,mDAAmD;YACnD,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,EAAE,GAAG,EAAE;YACjD,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAA8E,CAAC;QAC3F,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,mFAAmF;gBACnF,
|
|
1
|
+
{"version":3,"file":"arcWallet.js","sourceRoot":"","sources":["../src/arcWallet.ts"],"names":[],"mappings":"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"}
|
package/dist/flow.d.ts
CHANGED
|
@@ -13,13 +13,13 @@ export interface FlowCallbacks {
|
|
|
13
13
|
* sent in plaintext.
|
|
14
14
|
*
|
|
15
15
|
* @param config - Server URL
|
|
16
|
-
* @param signers -
|
|
16
|
+
* @param signers - Attestation signer for proofs without an action; optional payment wallet
|
|
17
17
|
* @param params - Circuit name, scope, and optional country params
|
|
18
18
|
* @param callbacks - Optional callbacks for step progress
|
|
19
19
|
* @returns ProofResult with proof, publicInputs, and attestation info
|
|
20
20
|
*/
|
|
21
21
|
export declare function generateProof(config: ClientConfig, signers: {
|
|
22
|
-
attestation
|
|
22
|
+
attestation?: ProofportSigner;
|
|
23
23
|
/**
|
|
24
24
|
* The wallet that pays, when the service charges. A different wallet from
|
|
25
25
|
* `attestation` and deliberately so: the attestation wallet is fixed by
|
package/dist/flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAQpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEZ,WAAW,EACX,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAQpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAOhD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;CACrC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IACP,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,EACD,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,aAAa,GACxB,OAAO,CAAC,WAAW,CAAC,CA4MtB"}
|
package/dist/flow.js
CHANGED
|
@@ -9,6 +9,7 @@ import { CIRCUITS } from './constants.js';
|
|
|
9
9
|
import { hashTypedAction } from './action.js';
|
|
10
10
|
import { CIRCUIT_IDS } from './circuits.js';
|
|
11
11
|
import { encryptForTee } from './tee.js';
|
|
12
|
+
import { ActionApprovalError, resolveActionApproval } from './actionApproval.js';
|
|
12
13
|
/**
|
|
13
14
|
* Generate a ZK proof end-to-end.
|
|
14
15
|
*
|
|
@@ -18,17 +19,21 @@ import { encryptForTee } from './tee.js';
|
|
|
18
19
|
* sent in plaintext.
|
|
19
20
|
*
|
|
20
21
|
* @param config - Server URL
|
|
21
|
-
* @param signers -
|
|
22
|
+
* @param signers - Attestation signer for proofs without an action; optional payment wallet
|
|
22
23
|
* @param params - Circuit name, scope, and optional country params
|
|
23
24
|
* @param callbacks - Optional callbacks for step progress
|
|
24
25
|
* @returns ProofResult with proof, publicInputs, and attestation info
|
|
25
26
|
*/
|
|
26
27
|
export async function generateProof(config, signers, params, callbacks) {
|
|
27
|
-
// Keep the approved values stable across asynchronous
|
|
28
|
+
// Keep the requested circuit and approved values stable across asynchronous operations.
|
|
29
|
+
const circuit = params.circuit;
|
|
28
30
|
const action = params.action ? structuredClone(params.action) : params.action;
|
|
29
|
-
const circuitId = CIRCUIT_NAME_MAP[
|
|
31
|
+
const circuitId = CIRCUIT_NAME_MAP[circuit];
|
|
30
32
|
const scope = params.scope || 'proofport';
|
|
31
33
|
const isOidc = CIRCUITS[circuitId]?.inputType === 'oidc';
|
|
34
|
+
if (params.actionApproval && !action) {
|
|
35
|
+
throw new ActionApprovalError('ACTION_APPROVAL_INVALID', 'Resuming an action approval requires its original action.');
|
|
36
|
+
}
|
|
32
37
|
const steps = [];
|
|
33
38
|
function recordStep(step, name, data, startTime) {
|
|
34
39
|
const result = { step, name, data, durationMs: Date.now() - startTime };
|
|
@@ -60,6 +65,10 @@ export async function generateProof(config, signers, params, callbacks) {
|
|
|
60
65
|
}
|
|
61
66
|
const actionHashes = action ? hashTypedAction(action) : undefined;
|
|
62
67
|
if (!isOidc) {
|
|
68
|
+
const credentialSigner = signers.attestation;
|
|
69
|
+
if (!action && !credentialSigner) {
|
|
70
|
+
throw new Error('An attestation signer is required for this proof without an action. Pass signers.attestation.');
|
|
71
|
+
}
|
|
63
72
|
// Step 1: Sign.
|
|
64
73
|
//
|
|
65
74
|
// `signal_hash` is computed either way, because the nullifier derives from
|
|
@@ -71,25 +80,27 @@ export async function generateProof(config, signers, params, callbacks) {
|
|
|
71
80
|
// structure, which the wallet renders as named fields, and the verifying
|
|
72
81
|
// contract can recompute.
|
|
73
82
|
let t = Date.now();
|
|
74
|
-
const
|
|
83
|
+
const approved = action
|
|
84
|
+
? await resolveActionApproval(config, { circuit, scope, action }, params.actionApproval)
|
|
85
|
+
: undefined;
|
|
86
|
+
const attestationAddress = approved ? approved.address : await credentialSigner.getAddress();
|
|
75
87
|
const signalHash = computeSignalHash(attestationAddress, scope, circuitId);
|
|
76
88
|
const signalHashHex = ethers.hexlify(signalHash);
|
|
77
89
|
let signature;
|
|
78
90
|
if (action) {
|
|
79
|
-
const { domain
|
|
91
|
+
const { domain } = action;
|
|
80
92
|
({ domainSeparator, actionHash } = actionHashes);
|
|
81
|
-
signature =
|
|
82
|
-
recordStep(1, '
|
|
93
|
+
signature = approved.signature;
|
|
94
|
+
recordStep(1, 'Approve Typed Action', {
|
|
83
95
|
signalHash: signalHashHex,
|
|
84
96
|
domainSeparator,
|
|
85
97
|
actionHash,
|
|
86
98
|
primaryType: action.primaryType,
|
|
87
99
|
verifyingContract: domain.verifyingContract,
|
|
88
|
-
signature,
|
|
89
100
|
}, t);
|
|
90
101
|
}
|
|
91
102
|
else {
|
|
92
|
-
signature = await
|
|
103
|
+
signature = await credentialSigner.signMessage(signalHash);
|
|
93
104
|
recordStep(1, 'Sign Signal Hash', { signalHash: signalHashHex, signature }, t);
|
|
94
105
|
}
|
|
95
106
|
// Step 2: Prepare inputs
|
|
@@ -127,9 +138,9 @@ export async function generateProof(config, signers, params, callbacks) {
|
|
|
127
138
|
}
|
|
128
139
|
// Step 3: Request challenge (server returns nonce + TEE key if available)
|
|
129
140
|
let t = Date.now();
|
|
130
|
-
const challenge = await requestChallenge(config,
|
|
141
|
+
const challenge = await requestChallenge(config, circuit);
|
|
131
142
|
const isE2E = !!challenge.teePublicKey;
|
|
132
|
-
recordStep(3, 'Request Challenge', { nonce: challenge.nonce, e2e: isE2E, keyId: challenge.teePublicKey?.keyId ?? null }, t);
|
|
143
|
+
recordStep(3, 'Request Challenge', action ? { e2e: isE2E } : { nonce: challenge.nonce, e2e: isE2E, keyId: challenge.teePublicKey?.keyId ?? null }, t);
|
|
133
144
|
// Step 3b: Pay, if the service charges.
|
|
134
145
|
//
|
|
135
146
|
// The buyer signs an EIP-3009 authorization and the service settles it, so
|
|
@@ -160,17 +171,17 @@ export async function generateProof(config, signers, params, callbacks) {
|
|
|
160
171
|
const inputsToEncrypt = isOidc ? oidcPayload : easInputs;
|
|
161
172
|
const encryptedPayload = encryptForTee(JSON.stringify({ circuitId, inputs: inputsToEncrypt }), challenge.teePublicKey.publicKey);
|
|
162
173
|
proveResponse = await submitEncryptedProof(config, {
|
|
163
|
-
circuit
|
|
174
|
+
circuit,
|
|
164
175
|
encryptedPayload,
|
|
165
176
|
nonce: challenge.nonce,
|
|
166
177
|
paymentHeaders,
|
|
167
178
|
});
|
|
168
|
-
recordStep(4, 'Generate Proof (E2E Encrypted)', proveResponse, t);
|
|
179
|
+
recordStep(4, 'Generate Proof (E2E Encrypted)', action ? { circuit, completed: true } : proveResponse, t);
|
|
169
180
|
}
|
|
170
181
|
else if (isOidc) {
|
|
171
182
|
// OIDC plaintext path: send payload (JWT + JWKS) — server relays to prover, prover validates + builds inputs
|
|
172
183
|
proveResponse = await submitProof(config, {
|
|
173
|
-
circuit
|
|
184
|
+
circuit,
|
|
174
185
|
inputs: oidcPayload,
|
|
175
186
|
nonce: challenge.nonce,
|
|
176
187
|
paymentHeaders,
|
|
@@ -180,12 +191,14 @@ export async function generateProof(config, signers, params, callbacks) {
|
|
|
180
191
|
else {
|
|
181
192
|
// Coinbase plaintext path: send pre-computed inputs (TEE disabled / local dev)
|
|
182
193
|
proveResponse = await submitProof(config, {
|
|
183
|
-
circuit
|
|
194
|
+
circuit,
|
|
184
195
|
inputs: easInputs,
|
|
185
196
|
nonce: challenge.nonce,
|
|
186
197
|
paymentHeaders,
|
|
187
198
|
});
|
|
188
|
-
|
|
199
|
+
// An untrusted response may echo witness fields. Progress for an action
|
|
200
|
+
// reports completion without forwarding the provider's response object.
|
|
201
|
+
recordStep(4, 'Generate Proof', action ? { circuit, completed: true } : proveResponse, t);
|
|
189
202
|
}
|
|
190
203
|
return {
|
|
191
204
|
circuit: proveResponse.circuit,
|
package/dist/flow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { CIRCUITS, COINBASE_ATTESTER_CONTRACT, AUTHORIZED_SIGNERS, } from './con
|
|
|
6
6
|
export { createConfig } from './config.js';
|
|
7
7
|
export { generateProof } from './flow.js';
|
|
8
8
|
export type { FlowCallbacks } from './flow.js';
|
|
9
|
+
export { createActionApproval, getActionApprovalStatus, consumeActionApproval, resolveActionApproval, ActionApprovalRequiredError, ActionApprovalError, } from './actionApproval.js';
|
|
10
|
+
export type { ActionApproval, ActionApprovalRequest, ActionApprovalStatus, ActionApprovalState, ActionApprovalErrorCode, } from './actionApproval.js';
|
|
9
11
|
export { requestChallenge, createSession } from './session.js';
|
|
10
12
|
export { submitProof, submitEncryptedProof } from './prove.js';
|
|
11
13
|
export { encryptForTee } from './tee.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG9E,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI9D,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG9E,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG/F,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGnF,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,EAChB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,KAAK,WAAW,GACjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ export { CIRCUITS, COINBASE_ATTESTER_CONTRACT, AUTHORIZED_SIGNERS, } from './con
|
|
|
8
8
|
export { createConfig } from './config.js';
|
|
9
9
|
// Flow (main entry point)
|
|
10
10
|
export { generateProof } from './flow.js';
|
|
11
|
+
export { createActionApproval, getActionApprovalStatus, consumeActionApproval, resolveActionApproval, ActionApprovalRequiredError, ActionApprovalError, } from './actionApproval.js';
|
|
11
12
|
// Individual steps (for step-by-step usage)
|
|
12
13
|
export { requestChallenge, createSession } from './session.js';
|
|
13
14
|
export { submitProof, submitEncryptedProof } from './prove.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,iCAAiC;AACjC,8EAA8E;AAC9E,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAGvB,YAAY;AACZ,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,0BAA0B;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE9D,iCAAiC;AACjC,8EAA8E;AAC9E,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAGvB,YAAY;AACZ,OAAO,EACL,QAAQ,EACR,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAExB,gBAAgB;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,0BAA0B;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAS7B,4CAA4C;AAC5C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,8CAA8C;AAC9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,oEAAoE;AACpE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMzE,6EAA6E;AAC7E,6DAA6D;AAC7D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnF,6DAA6D;AAC7D,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,wCAAwC;AACxC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,+EAA+E;AAC/E,gEAAgE;AAChE,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,+EAA+E;AAC/E,wEAAwE;AACxE,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,kBAAkB,CAAC;AAE1B,uEAAuE;AACvE,iFAAiF;AACjF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,UAAU,EACV,uBAAuB,EACvB,gBAAgB,GAEjB,MAAM,iBAAiB,CAAC;AAEzB,uEAAuE;AACvE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,GAEf,MAAM,gBAAgB,CAAC;AAExB,+DAA+D;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PROVABLE_CIRCUIT_IDS } from './circuits.js';
|
|
2
|
+
import type { ActionApproval } from './actionApproval.js';
|
|
2
3
|
/** Client-friendly circuit aliases. */
|
|
3
4
|
export type CircuitName = 'coinbase_kyc' | 'coinbase_country' | 'oidc_domain'
|
|
4
5
|
/** Coinbase KYC, optionally binding the signature to one EIP-712 action. */
|
|
@@ -203,12 +204,16 @@ export interface ProofParams {
|
|
|
203
204
|
/**
|
|
204
205
|
* Optional for arc_eligibility and giwa_attestation; rejected for every
|
|
205
206
|
* other circuit, including OIDC.
|
|
206
|
-
*
|
|
207
|
-
*
|
|
207
|
+
* A human wallet must approve these exact EIP-712 fields. generateProof throws
|
|
208
|
+
* ActionApprovalRequiredError with a resumable handle until approval is ready.
|
|
209
|
+
* The supplied attestation signer is never used for actions.
|
|
210
|
+
* The relying contract must compare the domain/action hashes
|
|
208
211
|
* and enforce the approved actor, amount, nonce and deadline.
|
|
209
212
|
* Coinbase circuits without an action use personal_sign; OIDC does not sign.
|
|
210
213
|
*/
|
|
211
214
|
action?: TypedAction;
|
|
215
|
+
/** Private handle returned by ActionApprovalRequiredError; resume the same action with it. */
|
|
216
|
+
actionApproval?: ActionApproval;
|
|
212
217
|
}
|
|
213
218
|
export interface ProofResult {
|
|
214
219
|
circuit: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,WAAW,EAAwB,MAAM,eAAe,CAAC;AAwBlE,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,YAAY,EAAE,WAAW,CAAC,oBAAoB;IAC9C,gBAAgB,EAAE,WAAW,CAAC,4BAA4B;IAC1D,WAAW,EAAE,WAAW,CAAC,uBAAuB;IAChD,eAAe,EAAE,WAAW,CAAC,eAAe;IAC5C,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;CAC/C,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAmC;IAC5D,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,cAAc;IAClD,CAAC,WAAW,CAAC,4BAA4B,CAAC,EAAE,kBAAkB;IAC9D,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,aAAa;IACpD,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,iBAAiB;IAChD,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;CACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zkproofport-ai/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "TypeScript SDK for ZKProofport Coinbase KYC, country, OIDC, Arc eligibility and GIWA attestation proofs. Optional EIP-712 action binding for Arc/GIWA; x402 USDC and Circle Gateway payments.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sdk",
|