@agenticprimitives/payments 0.0.0-alpha.3 → 0.0.0-alpha.5
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/entitlement/index.d.ts +92 -0
- package/dist/entitlement/index.d.ts.map +1 -0
- package/dist/entitlement/index.js +93 -0
- package/dist/entitlement/index.js.map +1 -0
- package/dist/entitlement/voucher.d.ts +78 -0
- package/dist/entitlement/voucher.d.ts.map +1 -0
- package/dist/entitlement/voucher.js +102 -0
- package/dist/entitlement/voucher.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -1
- package/dist/mandate-sign.d.ts +173 -0
- package/dist/mandate-sign.d.ts.map +1 -0
- package/dist/mandate-sign.js +147 -0
- package/dist/mandate-sign.js.map +1 -0
- package/dist/mandate.d.ts +33 -0
- package/dist/mandate.d.ts.map +1 -0
- package/dist/mandate.js +40 -0
- package/dist/mandate.js.map +1 -0
- package/dist/ops.d.ts +55 -0
- package/dist/ops.d.ts.map +1 -0
- package/dist/ops.js +66 -0
- package/dist/ops.js.map +1 -0
- package/dist/rails/escrow.d.ts +143 -0
- package/dist/rails/escrow.d.ts.map +1 -0
- package/dist/rails/escrow.js +90 -0
- package/dist/rails/escrow.js.map +1 -0
- package/dist/rails/invoice.d.ts +65 -0
- package/dist/rails/invoice.d.ts.map +1 -0
- package/dist/rails/invoice.js +57 -0
- package/dist/rails/invoice.js.map +1 -0
- package/dist/rails/recurring.d.ts +56 -0
- package/dist/rails/recurring.d.ts.map +1 -0
- package/dist/rails/recurring.js +58 -0
- package/dist/rails/recurring.js.map +1 -0
- package/dist/rails/wallet.d.ts +16 -0
- package/dist/rails/wallet.d.ts.map +1 -0
- package/dist/rails/wallet.js +20 -0
- package/dist/rails/wallet.js.map +1 -0
- package/dist/rails/x402/executor.d.ts +109 -0
- package/dist/rails/x402/executor.d.ts.map +1 -0
- package/dist/rails/x402/executor.js +222 -0
- package/dist/rails/x402/executor.js.map +1 -0
- package/dist/rails/x402/index.d.ts +11 -0
- package/dist/rails/x402/index.d.ts.map +1 -0
- package/dist/rails/x402/index.js +8 -0
- package/dist/rails/x402/index.js.map +1 -0
- package/dist/rails/x402/nonce-store.d.ts +30 -0
- package/dist/rails/x402/nonce-store.d.ts.map +1 -0
- package/dist/rails/x402/nonce-store.js +35 -0
- package/dist/rails/x402/nonce-store.js.map +1 -0
- package/dist/rails/x402/quote.d.ts +41 -0
- package/dist/rails/x402/quote.d.ts.map +1 -0
- package/dist/rails/x402/quote.js +84 -0
- package/dist/rails/x402/quote.js.map +1 -0
- package/dist/rails/x402/resource.d.ts +42 -0
- package/dist/rails/x402/resource.d.ts.map +1 -0
- package/dist/rails/x402/resource.js +71 -0
- package/dist/rails/x402/resource.js.map +1 -0
- package/dist/rails/x402/wire.d.ts +81 -0
- package/dist/rails/x402/wire.d.ts.map +1 -0
- package/dist/rails/x402/wire.js +125 -0
- package/dist/rails/x402/wire.js.map +1 -0
- package/dist/receipt.d.ts +36 -0
- package/dist/receipt.d.ts.map +1 -0
- package/dist/receipt.js +50 -0
- package/dist/receipt.js.map +1 -0
- package/dist/refund.d.ts +29 -0
- package/dist/refund.d.ts.map +1 -0
- package/dist/refund.js +19 -0
- package/dist/refund.js.map +1 -0
- package/dist/split.d.ts +27 -0
- package/dist/split.d.ts.map +1 -0
- package/dist/split.js +33 -0
- package/dist/split.js.map +1 -0
- package/dist/transfer.d.ts +51 -0
- package/dist/transfer.d.ts.map +1 -0
- package/dist/transfer.js +54 -0
- package/dist/transfer.js.map +1 -0
- package/package.json +6 -5
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec 272 §10 — entitlements: pay-once-then-access.
|
|
3
|
+
*
|
|
4
|
+
* A successful settlement mints an `EntitlementRecord`. Later access reads CONSUME
|
|
5
|
+
* the entitlement (decrement `usesLeft`) with NO new settlement — one access lane
|
|
6
|
+
* (X402-D8): a request is served against {a fresh charge} OR {a live entitlement},
|
|
7
|
+
* never both. **Prepaid credits = an entitlement with `maxUses: N`** — same machinery.
|
|
8
|
+
*
|
|
9
|
+
* Two bindings:
|
|
10
|
+
* - `'sa'` — held by a specific SA; the presenter MUST be that SA.
|
|
11
|
+
* - `'bearer'`— held by whoever presents the matching voucher (tier A3, unlinkable);
|
|
12
|
+
* this module gates on `voucherId`, the voucher crypto lives in `./voucher`.
|
|
13
|
+
*
|
|
14
|
+
* Fail-closed: an unknown binding, scope mismatch, expiry, or exhausted uses all DENY.
|
|
15
|
+
* Pure (no store): `consumeEntitlement` returns the decremented record; the app persists.
|
|
16
|
+
*/
|
|
17
|
+
import { type Address } from 'viem';
|
|
18
|
+
import type { Hex32 } from '../index.js';
|
|
19
|
+
export * as voucher from './voucher.js';
|
|
20
|
+
export type EntitlementBinding = 'sa' | 'bearer';
|
|
21
|
+
export interface EntitlementRecord {
|
|
22
|
+
entitlementId: Hex32;
|
|
23
|
+
binding: EntitlementBinding;
|
|
24
|
+
/** what this grants access to (e.g. keccak of the resource/skill scope) */
|
|
25
|
+
scopeHash: Hex32;
|
|
26
|
+
/** for `'sa'` binding — the SA that may present it */
|
|
27
|
+
subject?: Address;
|
|
28
|
+
/** for `'bearer'` binding — the voucher this entitlement is tied to */
|
|
29
|
+
voucherId?: Hex32;
|
|
30
|
+
/** expiry (unix seconds) */
|
|
31
|
+
ttl: number;
|
|
32
|
+
maxUses: number;
|
|
33
|
+
usesLeft: number;
|
|
34
|
+
provenance: {
|
|
35
|
+
mandateId: Hex32;
|
|
36
|
+
settlementHash: Hex32;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface MintEntitlementInput {
|
|
40
|
+
binding: EntitlementBinding;
|
|
41
|
+
scopeHash: Hex32;
|
|
42
|
+
ttl: number;
|
|
43
|
+
maxUses: number;
|
|
44
|
+
mandateId: Hex32;
|
|
45
|
+
settlementHash: Hex32;
|
|
46
|
+
/** required for `'sa'` binding */
|
|
47
|
+
subject?: Address;
|
|
48
|
+
/** required for `'bearer'` binding */
|
|
49
|
+
voucherId?: Hex32;
|
|
50
|
+
}
|
|
51
|
+
/** Mint an entitlement from a settled payment. Throws if the binding's required handle is missing. */
|
|
52
|
+
export declare function mintEntitlementOnPayment(input: MintEntitlementInput): EntitlementRecord;
|
|
53
|
+
/** Prepaid credit pack = an SA-bound entitlement with `maxUses = count`. */
|
|
54
|
+
export declare function mintCredits(input: Omit<MintEntitlementInput, 'binding' | 'maxUses'> & {
|
|
55
|
+
subject: Address;
|
|
56
|
+
count: number;
|
|
57
|
+
}): EntitlementRecord;
|
|
58
|
+
export interface EntitlementContext {
|
|
59
|
+
scopeHash: Hex32;
|
|
60
|
+
now: number;
|
|
61
|
+
/** the SA presenting (required to match an `'sa'` binding) */
|
|
62
|
+
presenter?: Address;
|
|
63
|
+
/** the voucher id presented (required to match a `'bearer'` binding) */
|
|
64
|
+
voucherId?: Hex32;
|
|
65
|
+
}
|
|
66
|
+
export type EntitlementCheck = {
|
|
67
|
+
ok: true;
|
|
68
|
+
} | {
|
|
69
|
+
ok: false;
|
|
70
|
+
reason: string;
|
|
71
|
+
};
|
|
72
|
+
/** Fail-closed validity check (does NOT consume). */
|
|
73
|
+
export declare function checkEntitlement(record: EntitlementRecord, ctx: EntitlementContext): EntitlementCheck;
|
|
74
|
+
export interface ConsumptionReceipt {
|
|
75
|
+
entitlementId: Hex32;
|
|
76
|
+
scopeHash: Hex32;
|
|
77
|
+
usesLeftAfter: number;
|
|
78
|
+
at: number;
|
|
79
|
+
}
|
|
80
|
+
export type ConsumeResult = {
|
|
81
|
+
ok: true;
|
|
82
|
+
record: EntitlementRecord;
|
|
83
|
+
consumption: ConsumptionReceipt;
|
|
84
|
+
} | {
|
|
85
|
+
ok: false;
|
|
86
|
+
reason: string;
|
|
87
|
+
};
|
|
88
|
+
/** Validate + decrement. Returns the updated record (immutable) + a consumption receipt. */
|
|
89
|
+
export declare function consumeEntitlement(record: EntitlementRecord, ctx: EntitlementContext): ConsumeResult;
|
|
90
|
+
/** Convenience: keccak of a resource/skill scope string → `scopeHash`. */
|
|
91
|
+
export declare function scopeHashOf(scope: string): Hex32;
|
|
92
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entitlement/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAA2C,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,KAAK,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,2EAA2E;IAC3E,SAAS,EAAE,KAAK,CAAC;IACjB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QAAE,SAAS,EAAE,KAAK,CAAC;QAAC,cAAc,EAAE,KAAK,CAAA;KAAE,CAAC;CACzD;AA0BD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,KAAK,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;IACjB,cAAc,EAAE,KAAK,CAAC;IACtB,kCAAkC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,sGAAsG;AACtG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,oBAAoB,GAAG,iBAAiB,CAevF;AAED,4EAA4E;AAC5E,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,CAE7I;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,KAAK,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,GAAG,gBAAgB,CAerG;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,KAAK,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,kBAAkB,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,GAAG,aAAa,CASpG;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAEhD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec 272 §10 — entitlements: pay-once-then-access.
|
|
3
|
+
*
|
|
4
|
+
* A successful settlement mints an `EntitlementRecord`. Later access reads CONSUME
|
|
5
|
+
* the entitlement (decrement `usesLeft`) with NO new settlement — one access lane
|
|
6
|
+
* (X402-D8): a request is served against {a fresh charge} OR {a live entitlement},
|
|
7
|
+
* never both. **Prepaid credits = an entitlement with `maxUses: N`** — same machinery.
|
|
8
|
+
*
|
|
9
|
+
* Two bindings:
|
|
10
|
+
* - `'sa'` — held by a specific SA; the presenter MUST be that SA.
|
|
11
|
+
* - `'bearer'`— held by whoever presents the matching voucher (tier A3, unlinkable);
|
|
12
|
+
* this module gates on `voucherId`, the voucher crypto lives in `./voucher`.
|
|
13
|
+
*
|
|
14
|
+
* Fail-closed: an unknown binding, scope mismatch, expiry, or exhausted uses all DENY.
|
|
15
|
+
* Pure (no store): `consumeEntitlement` returns the decremented record; the app persists.
|
|
16
|
+
*/
|
|
17
|
+
import { keccak256, encodeAbiParameters, toBytes } from 'viem';
|
|
18
|
+
// tier A3 — blind bearer vouchers (Privacy Pass / VOPRF).
|
|
19
|
+
export * as voucher from './voucher.js';
|
|
20
|
+
const ZERO32 = ('0x' + '00'.repeat(32));
|
|
21
|
+
function entitlementId(args) {
|
|
22
|
+
return keccak256(encodeAbiParameters([{ type: 'string' }, { type: 'bytes32' }, { type: 'bytes32' }, { type: 'bytes32' }], [
|
|
23
|
+
args.binding,
|
|
24
|
+
args.scopeHash,
|
|
25
|
+
args.binding === 'sa'
|
|
26
|
+
? keccak256(toBytes(args.subject ?? '0x'))
|
|
27
|
+
: (args.voucherId ?? ZERO32),
|
|
28
|
+
args.mandateId,
|
|
29
|
+
]));
|
|
30
|
+
}
|
|
31
|
+
/** Mint an entitlement from a settled payment. Throws if the binding's required handle is missing. */
|
|
32
|
+
export function mintEntitlementOnPayment(input) {
|
|
33
|
+
if (input.binding === 'sa' && !input.subject)
|
|
34
|
+
throw new Error("[entitlement] 'sa' binding requires subject");
|
|
35
|
+
if (input.binding === 'bearer' && !input.voucherId)
|
|
36
|
+
throw new Error("[entitlement] 'bearer' binding requires voucherId");
|
|
37
|
+
if (input.maxUses < 1)
|
|
38
|
+
throw new Error('[entitlement] maxUses must be >= 1');
|
|
39
|
+
return {
|
|
40
|
+
entitlementId: entitlementId(input),
|
|
41
|
+
binding: input.binding,
|
|
42
|
+
scopeHash: input.scopeHash,
|
|
43
|
+
subject: input.subject,
|
|
44
|
+
voucherId: input.voucherId,
|
|
45
|
+
ttl: input.ttl,
|
|
46
|
+
maxUses: input.maxUses,
|
|
47
|
+
usesLeft: input.maxUses,
|
|
48
|
+
provenance: { mandateId: input.mandateId, settlementHash: input.settlementHash },
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Prepaid credit pack = an SA-bound entitlement with `maxUses = count`. */
|
|
52
|
+
export function mintCredits(input) {
|
|
53
|
+
return mintEntitlementOnPayment({ ...input, binding: 'sa', maxUses: input.count });
|
|
54
|
+
}
|
|
55
|
+
/** Fail-closed validity check (does NOT consume). */
|
|
56
|
+
export function checkEntitlement(record, ctx) {
|
|
57
|
+
if (record.binding !== 'sa' && record.binding !== 'bearer')
|
|
58
|
+
return { ok: false, reason: 'unknown entitlement binding' };
|
|
59
|
+
if (record.scopeHash.toLowerCase() !== ctx.scopeHash.toLowerCase())
|
|
60
|
+
return { ok: false, reason: 'scope mismatch' };
|
|
61
|
+
if (ctx.now >= record.ttl)
|
|
62
|
+
return { ok: false, reason: 'entitlement expired' };
|
|
63
|
+
if (record.usesLeft <= 0)
|
|
64
|
+
return { ok: false, reason: 'entitlement exhausted' };
|
|
65
|
+
if (record.binding === 'sa') {
|
|
66
|
+
if (!ctx.presenter || !record.subject || ctx.presenter.toLowerCase() !== record.subject.toLowerCase()) {
|
|
67
|
+
return { ok: false, reason: 'presenter is not the entitlement subject' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
if (!ctx.voucherId || !record.voucherId || ctx.voucherId.toLowerCase() !== record.voucherId.toLowerCase()) {
|
|
72
|
+
return { ok: false, reason: 'voucher mismatch' };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { ok: true };
|
|
76
|
+
}
|
|
77
|
+
/** Validate + decrement. Returns the updated record (immutable) + a consumption receipt. */
|
|
78
|
+
export function consumeEntitlement(record, ctx) {
|
|
79
|
+
const v = checkEntitlement(record, ctx);
|
|
80
|
+
if (!v.ok)
|
|
81
|
+
return v;
|
|
82
|
+
const updated = { ...record, usesLeft: record.usesLeft - 1 };
|
|
83
|
+
return {
|
|
84
|
+
ok: true,
|
|
85
|
+
record: updated,
|
|
86
|
+
consumption: { entitlementId: record.entitlementId, scopeHash: record.scopeHash, usesLeftAfter: updated.usesLeft, at: ctx.now },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/** Convenience: keccak of a resource/skill scope string → `scopeHash`. */
|
|
90
|
+
export function scopeHashOf(scope) {
|
|
91
|
+
return keccak256(toBytes(`entitlement-scope:${scope}`));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entitlement/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec 272 §10 tier A3 — blind bearer vouchers (Privacy Pass / RFC 9497 VOPRF).
|
|
3
|
+
*
|
|
4
|
+
* Pay once → receive a pack of UNLINKABLE one-use vouchers → redeem each from a
|
|
5
|
+
* separate context with no link back to the purchase. Built on ristretto255 VOPRF
|
|
6
|
+
* (`@noble/curves`) — the issuer never sees the unblinded token at issuance, so the
|
|
7
|
+
* blinded request it signs and the token presented at redemption cannot be linked.
|
|
8
|
+
*
|
|
9
|
+
* Flow:
|
|
10
|
+
* client blindVoucherRequest() → { request(blinded), secret(tokenId,blind,blinded) }
|
|
11
|
+
* issuer issueVoucher(key, request) → { evaluated, proof } (VOPRF blind-evaluate)
|
|
12
|
+
* client unblindVoucher(secret, issued, pubKey) → Voucher (verifies the issuer proof)
|
|
13
|
+
* issuer redeemVoucher(key, voucher, spentSet) → ok | reason (VOPRF verify + double-spend)
|
|
14
|
+
*
|
|
15
|
+
* One-use is enforced by the spent-set keyed on `voucherId = keccak(tokenId)`.
|
|
16
|
+
*/
|
|
17
|
+
import type { Hex } from '@agenticprimitives/types';
|
|
18
|
+
import type { Hex32 } from '../index.js';
|
|
19
|
+
export interface VoucherIssuerKey {
|
|
20
|
+
secretKey: Hex;
|
|
21
|
+
publicKey: Hex;
|
|
22
|
+
}
|
|
23
|
+
export interface BlindedVoucherRequest {
|
|
24
|
+
blinded: Hex;
|
|
25
|
+
}
|
|
26
|
+
/** The client's unblinding state — kept private until `unblindVoucher`. */
|
|
27
|
+
export interface VoucherSecret {
|
|
28
|
+
tokenId: Hex;
|
|
29
|
+
blind: Hex;
|
|
30
|
+
blinded: Hex;
|
|
31
|
+
}
|
|
32
|
+
export interface IssuedVoucher {
|
|
33
|
+
evaluated: Hex;
|
|
34
|
+
proof: Hex;
|
|
35
|
+
}
|
|
36
|
+
/** A redeemable one-use bearer token. */
|
|
37
|
+
export interface Voucher {
|
|
38
|
+
voucherId: Hex32;
|
|
39
|
+
tokenId: Hex;
|
|
40
|
+
output: Hex;
|
|
41
|
+
}
|
|
42
|
+
export declare function generateVoucherIssuerKey(): VoucherIssuerKey;
|
|
43
|
+
/** Deterministic issuer key from a 32-byte seed (stable across processes). */
|
|
44
|
+
export declare function deriveVoucherIssuerKey(seed: Hex, info?: string): VoucherIssuerKey;
|
|
45
|
+
/** `voucherId` — the public, spent-set key derived from the token (no link to the blinded request). */
|
|
46
|
+
export declare function voucherIdOf(tokenId: Hex): Hex32;
|
|
47
|
+
/** Client: blind a fresh random token (or a supplied one) for issuance. */
|
|
48
|
+
export declare function blindVoucherRequest(tokenId?: Hex): {
|
|
49
|
+
request: BlindedVoucherRequest;
|
|
50
|
+
secret: VoucherSecret;
|
|
51
|
+
};
|
|
52
|
+
/** Issuer: blind-evaluate one request (VOPRF — issuer learns nothing about the token). */
|
|
53
|
+
export declare function issueVoucher(key: VoucherIssuerKey, request: BlindedVoucherRequest): IssuedVoucher;
|
|
54
|
+
/** Issuer: issue a whole pack. */
|
|
55
|
+
export declare function issueVouchers(key: VoucherIssuerKey, requests: BlindedVoucherRequest[]): IssuedVoucher[];
|
|
56
|
+
/**
|
|
57
|
+
* Client: unblind into a finished voucher. Throws if the issuer's VOPRF proof fails
|
|
58
|
+
* (a malicious issuer using the wrong key is detected here — verifiability).
|
|
59
|
+
*/
|
|
60
|
+
export declare function unblindVoucher(secret: VoucherSecret, issued: IssuedVoucher, issuerPublicKey: Hex): Voucher;
|
|
61
|
+
/** Issuer: VOPRF validity of a presented voucher (does NOT check double-spend). Fail-closed. */
|
|
62
|
+
export declare function verifyVoucher(key: VoucherIssuerKey, voucher: Voucher): {
|
|
63
|
+
ok: boolean;
|
|
64
|
+
reason?: string;
|
|
65
|
+
};
|
|
66
|
+
export interface SpentSet {
|
|
67
|
+
has(id: Hex32): boolean | Promise<boolean>;
|
|
68
|
+
add(id: Hex32): void | Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
export declare function createMemorySpentSet(): SpentSet & {
|
|
71
|
+
size(): number;
|
|
72
|
+
};
|
|
73
|
+
/** Issuer: verify + one-shot redeem. Rejects an invalid voucher and a replayed one. */
|
|
74
|
+
export declare function redeemVoucher(key: VoucherIssuerKey, voucher: Voucher, spent: SpentSet): Promise<{
|
|
75
|
+
ok: boolean;
|
|
76
|
+
reason?: string;
|
|
77
|
+
}>;
|
|
78
|
+
//# sourceMappingURL=voucher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voucher.d.ts","sourceRoot":"","sources":["../../src/entitlement/voucher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAezC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,GAAG,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;CAChB;AACD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,GAAG,CAAC;CACd;AACD,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,GAAG,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,GAAG,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;CACZ;AACD,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;CACb;AAED,wBAAgB,wBAAwB,IAAI,gBAAgB,CAG3D;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,SAA2B,GAAG,gBAAgB,CAGnG;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK,CAE/C;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAO5G;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAGjG;AAED,kCAAkC;AAClC,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,aAAa,EAAE,CAEvG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,GAAG,OAAO,CAU1G;AASD,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAUvG;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,GAAG;IAAE,IAAI,IAAI,MAAM,CAAA;CAAE,CAOpE;AAED,uFAAuF;AACvF,wBAAsB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAMvI"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spec 272 §10 tier A3 — blind bearer vouchers (Privacy Pass / RFC 9497 VOPRF).
|
|
3
|
+
*
|
|
4
|
+
* Pay once → receive a pack of UNLINKABLE one-use vouchers → redeem each from a
|
|
5
|
+
* separate context with no link back to the purchase. Built on ristretto255 VOPRF
|
|
6
|
+
* (`@noble/curves`) — the issuer never sees the unblinded token at issuance, so the
|
|
7
|
+
* blinded request it signs and the token presented at redemption cannot be linked.
|
|
8
|
+
*
|
|
9
|
+
* Flow:
|
|
10
|
+
* client blindVoucherRequest() → { request(blinded), secret(tokenId,blind,blinded) }
|
|
11
|
+
* issuer issueVoucher(key, request) → { evaluated, proof } (VOPRF blind-evaluate)
|
|
12
|
+
* client unblindVoucher(secret, issued, pubKey) → Voucher (verifies the issuer proof)
|
|
13
|
+
* issuer redeemVoucher(key, voucher, spentSet) → ok | reason (VOPRF verify + double-spend)
|
|
14
|
+
*
|
|
15
|
+
* One-use is enforced by the spent-set keyed on `voucherId = keccak(tokenId)`.
|
|
16
|
+
*/
|
|
17
|
+
import { ristretto255_oprf } from '@noble/curves/ed25519.js';
|
|
18
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';
|
|
19
|
+
import { keccak256 } from 'viem';
|
|
20
|
+
const voprf = ristretto255_oprf.voprf;
|
|
21
|
+
const enc = new TextEncoder();
|
|
22
|
+
// @noble bytesToHex returns NO `0x` prefix; add it so values are real `Hex` and `.slice(2)` strips it.
|
|
23
|
+
const hx = (b) => ('0x' + bytesToHex(b));
|
|
24
|
+
export function generateVoucherIssuerKey() {
|
|
25
|
+
const kp = voprf.generateKeyPair();
|
|
26
|
+
return { secretKey: hx(kp.secretKey), publicKey: hx(kp.publicKey) };
|
|
27
|
+
}
|
|
28
|
+
/** Deterministic issuer key from a 32-byte seed (stable across processes). */
|
|
29
|
+
export function deriveVoucherIssuerKey(seed, info = 'agentic-voucher-issuer') {
|
|
30
|
+
const kp = voprf.deriveKeyPair(hexToBytes(seed.slice(2)), enc.encode(info));
|
|
31
|
+
return { secretKey: hx(kp.secretKey), publicKey: hx(kp.publicKey) };
|
|
32
|
+
}
|
|
33
|
+
/** `voucherId` — the public, spent-set key derived from the token (no link to the blinded request). */
|
|
34
|
+
export function voucherIdOf(tokenId) {
|
|
35
|
+
return keccak256(tokenId);
|
|
36
|
+
}
|
|
37
|
+
/** Client: blind a fresh random token (or a supplied one) for issuance. */
|
|
38
|
+
export function blindVoucherRequest(tokenId) {
|
|
39
|
+
const tok = tokenId ? hexToBytes(tokenId.slice(2)) : globalThis.crypto.getRandomValues(new Uint8Array(32));
|
|
40
|
+
const { blind, blinded } = voprf.blind(tok);
|
|
41
|
+
return {
|
|
42
|
+
request: { blinded: hx(blinded) },
|
|
43
|
+
secret: { tokenId: hx(tok), blind: hx(blind), blinded: hx(blinded) },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Issuer: blind-evaluate one request (VOPRF — issuer learns nothing about the token). */
|
|
47
|
+
export function issueVoucher(key, request) {
|
|
48
|
+
const be = voprf.blindEvaluate(hexToBytes(key.secretKey.slice(2)), hexToBytes(key.publicKey.slice(2)), hexToBytes(request.blinded.slice(2)));
|
|
49
|
+
return { evaluated: hx(be.evaluated), proof: hx(be.proof) };
|
|
50
|
+
}
|
|
51
|
+
/** Issuer: issue a whole pack. */
|
|
52
|
+
export function issueVouchers(key, requests) {
|
|
53
|
+
return requests.map((r) => issueVoucher(key, r));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Client: unblind into a finished voucher. Throws if the issuer's VOPRF proof fails
|
|
57
|
+
* (a malicious issuer using the wrong key is detected here — verifiability).
|
|
58
|
+
*/
|
|
59
|
+
export function unblindVoucher(secret, issued, issuerPublicKey) {
|
|
60
|
+
const output = voprf.finalize(hexToBytes(secret.tokenId.slice(2)), hexToBytes(secret.blind.slice(2)), hexToBytes(issued.evaluated.slice(2)), hexToBytes(secret.blinded.slice(2)), hexToBytes(issuerPublicKey.slice(2)), hexToBytes(issued.proof.slice(2)));
|
|
61
|
+
return { voucherId: voucherIdOf(secret.tokenId), tokenId: secret.tokenId, output: hx(output) };
|
|
62
|
+
}
|
|
63
|
+
function ctEqual(a, b) {
|
|
64
|
+
if (a.length !== b.length)
|
|
65
|
+
return false;
|
|
66
|
+
let d = 0;
|
|
67
|
+
for (let i = 0; i < a.length; i++)
|
|
68
|
+
d |= a[i] ^ b[i];
|
|
69
|
+
return d === 0;
|
|
70
|
+
}
|
|
71
|
+
/** Issuer: VOPRF validity of a presented voucher (does NOT check double-spend). Fail-closed. */
|
|
72
|
+
export function verifyVoucher(key, voucher) {
|
|
73
|
+
try {
|
|
74
|
+
if (voucher.voucherId.toLowerCase() !== voucherIdOf(voucher.tokenId).toLowerCase()) {
|
|
75
|
+
return { ok: false, reason: 'voucherId does not match tokenId' };
|
|
76
|
+
}
|
|
77
|
+
const expected = voprf.evaluate(hexToBytes(key.secretKey.slice(2)), hexToBytes(voucher.tokenId.slice(2)));
|
|
78
|
+
return ctEqual(expected, hexToBytes(voucher.output.slice(2))) ? { ok: true } : { ok: false, reason: 'invalid voucher' };
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return { ok: false, reason: 'malformed voucher' };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export function createMemorySpentSet() {
|
|
85
|
+
const set = new Set();
|
|
86
|
+
return {
|
|
87
|
+
has: (id) => set.has(id.toLowerCase()),
|
|
88
|
+
add: (id) => { set.add(id.toLowerCase()); },
|
|
89
|
+
size: () => set.size,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Issuer: verify + one-shot redeem. Rejects an invalid voucher and a replayed one. */
|
|
93
|
+
export async function redeemVoucher(key, voucher, spent) {
|
|
94
|
+
const v = verifyVoucher(key, voucher);
|
|
95
|
+
if (!v.ok)
|
|
96
|
+
return v;
|
|
97
|
+
if (await spent.has(voucher.voucherId))
|
|
98
|
+
return { ok: false, reason: 'voucher already spent' };
|
|
99
|
+
await spent.add(voucher.voucherId);
|
|
100
|
+
return { ok: true };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=voucher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voucher.js","sourceRoot":"","sources":["../../src/entitlement/voucher.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,10 @@ export interface ContextBinding {
|
|
|
53
53
|
url: string;
|
|
54
54
|
requestBodyHash: Hex32;
|
|
55
55
|
};
|
|
56
|
+
/** EXC-R2 — the ExchangeOrder this payment leg belongs to (273/274). x402 sets `orderHash = quoteId`. */
|
|
57
|
+
orderHash?: Hex32;
|
|
58
|
+
/** EXC-R2 — distinguishes legs within one order (charge / refund / split-out / escrow-release). */
|
|
59
|
+
legId?: Hex32;
|
|
56
60
|
chain: number;
|
|
57
61
|
asset: AssetRef;
|
|
58
62
|
nonce: bigint;
|
|
@@ -109,4 +113,23 @@ export interface PaymentRailExecutor {
|
|
|
109
113
|
}
|
|
110
114
|
export declare function registerRail(executor: PaymentRailExecutor): void;
|
|
111
115
|
export declare function getRail(rail: PaymentRail): PaymentRailExecutor | undefined;
|
|
116
|
+
export { PAYMENT_MANDATE_DOMAIN_NAME, PAYMENT_MANDATE_DOMAIN_VERSION, PAYMENT_MANDATE_EIP712_TYPES, ERC1271_MAGIC, mandateAmount, hashContextBinding, paymentMandateDomain, buildPaymentMandateTypedData, paymentMandateDigest, signPaymentMandate, verifyPaymentMandateSignature, } from './mandate-sign.js';
|
|
117
|
+
export type { MandateDomainOpts, MandateSigner, Erc1271Reader } from './mandate-sign.js';
|
|
118
|
+
export { PAYMENT_RECEIPT_TYPE, settlementEpochBucket, buildPaymentReceiptCredential } from './receipt.js';
|
|
119
|
+
export type { PaymentReceiptInput } from './receipt.js';
|
|
120
|
+
export * as x402 from './rails/x402/index.js';
|
|
121
|
+
export * as entitlement from './entitlement/index.js';
|
|
122
|
+
export { ERC20_TRANSFER_ABI, ERC20_APPROVE_ABI, buildErc20Transfer, buildErc20Approve, buildNativeTransfer } from './transfer.js';
|
|
123
|
+
export type { TransferPlan } from './transfer.js';
|
|
124
|
+
export { buildClosedMandate } from './mandate.js';
|
|
125
|
+
export type { ClosedMandateInput } from './mandate.js';
|
|
126
|
+
export * as wallet from './rails/wallet.js';
|
|
127
|
+
export * as invoice from './rails/invoice.js';
|
|
128
|
+
export * as escrow from './rails/escrow.js';
|
|
129
|
+
export * as recurring from './rails/recurring.js';
|
|
130
|
+
export { buildRefund } from './refund.js';
|
|
131
|
+
export type { RefundInput, RefundPlan } from './refund.js';
|
|
132
|
+
export { buildSplitPayout, BPS_DENOMINATOR } from './split.js';
|
|
133
|
+
export type { SplitRecipient, SplitLeg } from './split.js';
|
|
134
|
+
export * as ops from './ops.js';
|
|
112
135
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,4 +37,24 @@ export function registerRail(executor) {
|
|
|
37
37
|
export function getRail(rail) {
|
|
38
38
|
return _rails.get(rail);
|
|
39
39
|
}
|
|
40
|
+
// Spec 243 §4.2 / PMT-INV-02/12 — EIP-712 mandate signing + ERC-1271 verification.
|
|
41
|
+
export { PAYMENT_MANDATE_DOMAIN_NAME, PAYMENT_MANDATE_DOMAIN_VERSION, PAYMENT_MANDATE_EIP712_TYPES, ERC1271_MAGIC, mandateAmount, hashContextBinding, paymentMandateDomain, buildPaymentMandateTypedData, paymentMandateDigest, signPaymentMandate, verifyPaymentMandateSignature, } from './mandate-sign.js';
|
|
42
|
+
// Spec 243 §7 / X402-D9.3 — PaymentReceipt verifiable credential.
|
|
43
|
+
export { PAYMENT_RECEIPT_TYPE, settlementEpochBucket, buildPaymentReceiptCredential } from './receipt.js';
|
|
44
|
+
// Spec 272 — the x402 rail (staged executor + v2 wire + nonce store + resource binding).
|
|
45
|
+
export * as x402 from './rails/x402/index.js';
|
|
46
|
+
// Spec 272 §10 — entitlements (pay-once-then-access; credits = maxUses:N).
|
|
47
|
+
export * as entitlement from './entitlement/index.js';
|
|
48
|
+
// Spec 243 §5.5 — shared transfer plumbing + closed-mandate builder.
|
|
49
|
+
export { ERC20_TRANSFER_ABI, ERC20_APPROVE_ABI, buildErc20Transfer, buildErc20Approve, buildNativeTransfer } from './transfer.js';
|
|
50
|
+
export { buildClosedMandate } from './mandate.js';
|
|
51
|
+
// Spec 243 §5.5 — general-purpose rails + profiles + payout legs.
|
|
52
|
+
export * as wallet from './rails/wallet.js';
|
|
53
|
+
export * as invoice from './rails/invoice.js';
|
|
54
|
+
export * as escrow from './rails/escrow.js';
|
|
55
|
+
export * as recurring from './rails/recurring.js';
|
|
56
|
+
export { buildRefund } from './refund.js';
|
|
57
|
+
export { buildSplitPayout, BPS_DENOMINATOR } from './split.js';
|
|
58
|
+
// Spec 243 §5.5 — ops core (idempotent event log + reconciliation + export).
|
|
59
|
+
export * as ops from './ops.js';
|
|
40
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,MAAM,CAAC,MAAM,YAAY,GAAG,6BAA6B,CAAC;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,iBAA0B,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|