@seedhape/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/acp.test.d.ts +2 -0
- package/dist/__tests__/acp.test.d.ts.map +1 -0
- package/dist/__tests__/acp.test.js +16 -0
- package/dist/__tests__/acp.test.js.map +1 -0
- package/dist/__tests__/ap2-official.test.d.ts +2 -0
- package/dist/__tests__/ap2-official.test.d.ts.map +1 -0
- package/dist/__tests__/ap2-official.test.js +49 -0
- package/dist/__tests__/ap2-official.test.js.map +1 -0
- package/dist/__tests__/mpp.test.d.ts +2 -0
- package/dist/__tests__/mpp.test.d.ts.map +1 -0
- package/dist/__tests__/mpp.test.js +42 -0
- package/dist/__tests__/mpp.test.js.map +1 -0
- package/dist/__tests__/outbound.test.d.ts +2 -0
- package/dist/__tests__/outbound.test.d.ts.map +1 -0
- package/dist/__tests__/outbound.test.js +23 -0
- package/dist/__tests__/outbound.test.js.map +1 -0
- package/dist/__tests__/protocols.test.d.ts +2 -0
- package/dist/__tests__/protocols.test.d.ts.map +1 -0
- package/dist/__tests__/protocols.test.js +16 -0
- package/dist/__tests__/protocols.test.js.map +1 -0
- package/dist/__tests__/providers.test.d.ts +2 -0
- package/dist/__tests__/providers.test.d.ts.map +1 -0
- package/dist/__tests__/providers.test.js +41 -0
- package/dist/__tests__/providers.test.js.map +1 -0
- package/dist/__tests__/reconciliation.test.d.ts +2 -0
- package/dist/__tests__/reconciliation.test.d.ts.map +1 -0
- package/dist/__tests__/reconciliation.test.js +35 -0
- package/dist/__tests__/reconciliation.test.js.map +1 -0
- package/dist/__tests__/spending-controls.test.d.ts +2 -0
- package/dist/__tests__/spending-controls.test.d.ts.map +1 -0
- package/dist/__tests__/spending-controls.test.js +47 -0
- package/dist/__tests__/spending-controls.test.js.map +1 -0
- package/dist/__tests__/tax-and-policy.test.d.ts +7 -0
- package/dist/__tests__/tax-and-policy.test.d.ts.map +1 -0
- package/dist/__tests__/tax-and-policy.test.js +389 -0
- package/dist/__tests__/tax-and-policy.test.js.map +1 -0
- package/dist/__tests__/web-bot-auth.test.d.ts +2 -0
- package/dist/__tests__/web-bot-auth.test.d.ts.map +1 -0
- package/dist/__tests__/web-bot-auth.test.js +33 -0
- package/dist/__tests__/web-bot-auth.test.js.map +1 -0
- package/dist/__tests__/x402-solana.test.d.ts +2 -0
- package/dist/__tests__/x402-solana.test.d.ts.map +1 -0
- package/dist/__tests__/x402-solana.test.js +155 -0
- package/dist/__tests__/x402-solana.test.js.map +1 -0
- package/dist/acp.d.ts +28 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +49 -0
- package/dist/acp.js.map +1 -0
- package/dist/ap2/mandates.d.ts +319 -0
- package/dist/ap2/mandates.d.ts.map +1 -0
- package/dist/ap2/mandates.js +214 -0
- package/dist/ap2/mandates.js.map +1 -0
- package/dist/ap2/official.d.ts +156 -0
- package/dist/ap2/official.d.ts.map +1 -0
- package/dist/ap2/official.js +222 -0
- package/dist/ap2/official.js.map +1 -0
- package/dist/ap2/policy.d.ts +93 -0
- package/dist/ap2/policy.d.ts.map +1 -0
- package/dist/ap2/policy.js +216 -0
- package/dist/ap2/policy.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/india/fx.d.ts +59 -0
- package/dist/india/fx.d.ts.map +1 -0
- package/dist/india/fx.js +93 -0
- package/dist/india/fx.js.map +1 -0
- package/dist/india/vda-tax.d.ts +151 -0
- package/dist/india/vda-tax.d.ts.map +1 -0
- package/dist/india/vda-tax.js +226 -0
- package/dist/india/vda-tax.js.map +1 -0
- package/dist/mandate-builder.d.ts +102 -0
- package/dist/mandate-builder.d.ts.map +1 -0
- package/dist/mandate-builder.js +99 -0
- package/dist/mandate-builder.js.map +1 -0
- package/dist/mpp.d.ts +53 -0
- package/dist/mpp.d.ts.map +1 -0
- package/dist/mpp.js +164 -0
- package/dist/mpp.js.map +1 -0
- package/dist/orchestrator.d.ts +115 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +351 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/postgres-store.d.ts +60 -0
- package/dist/postgres-store.d.ts.map +1 -0
- package/dist/postgres-store.js +441 -0
- package/dist/postgres-store.js.map +1 -0
- package/dist/protocols.d.ts +18 -0
- package/dist/protocols.d.ts.map +1 -0
- package/dist/protocols.js +24 -0
- package/dist/protocols.js.map +1 -0
- package/dist/reconciliation.d.ts +27 -0
- package/dist/reconciliation.d.ts.map +1 -0
- package/dist/reconciliation.js +38 -0
- package/dist/reconciliation.js.map +1 -0
- package/dist/store.d.ts +110 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +369 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +195 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/dist/util/canonical.d.ts +9 -0
- package/dist/util/canonical.d.ts.map +1 -0
- package/dist/util/canonical.js +35 -0
- package/dist/util/canonical.js.map +1 -0
- package/dist/wallet/provider.d.ts +118 -0
- package/dist/wallet/provider.d.ts.map +1 -0
- package/dist/wallet/provider.js +160 -0
- package/dist/wallet/provider.js.map +1 -0
- package/dist/wallet/providers.d.ts +107 -0
- package/dist/wallet/providers.d.ts.map +1 -0
- package/dist/wallet/providers.js +188 -0
- package/dist/wallet/providers.js.map +1 -0
- package/dist/web-bot-auth.d.ts +54 -0
- package/dist/web-bot-auth.d.ts.map +1 -0
- package/dist/web-bot-auth.js +112 -0
- package/dist/web-bot-auth.js.map +1 -0
- package/dist/x402/client.d.ts +101 -0
- package/dist/x402/client.d.ts.map +1 -0
- package/dist/x402/client.js +291 -0
- package/dist/x402/client.js.map +1 -0
- package/dist/x402/outbound.d.ts +15 -0
- package/dist/x402/outbound.d.ts.map +1 -0
- package/dist/x402/outbound.js +59 -0
- package/dist/x402/outbound.js.map +1 -0
- package/dist/x402/types.d.ts +80 -0
- package/dist/x402/types.d.ts.map +1 -0
- package/dist/x402/types.js +2 -0
- package/dist/x402/types.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Official AP2 v0.2 credential primitives.
|
|
3
|
+
*
|
|
4
|
+
* AP2 uses SD-JWT VCs. This module deliberately does not expose the legacy
|
|
5
|
+
* EIP-712 IntentMandate representation. It signs AP2's versioned open/closed
|
|
6
|
+
* Checkout and Payment Mandates and verifies their selective disclosures.
|
|
7
|
+
*/
|
|
8
|
+
import { type JWK, type CryptoKey } from "jose";
|
|
9
|
+
import type { IntentMandate } from "../types.js";
|
|
10
|
+
export declare const AP2_VCT: {
|
|
11
|
+
readonly checkoutOpen: "mandate.checkout.open.1";
|
|
12
|
+
readonly checkout: "mandate.checkout.1";
|
|
13
|
+
readonly paymentOpen: "mandate.payment.open.1";
|
|
14
|
+
readonly payment: "mandate.payment.1";
|
|
15
|
+
readonly checkoutReceipt: "receipt.checkout.1";
|
|
16
|
+
readonly paymentReceipt: "receipt.payment.1";
|
|
17
|
+
};
|
|
18
|
+
export type Ap2Vct = typeof AP2_VCT[keyof typeof AP2_VCT];
|
|
19
|
+
export type Ap2KeyPair = {
|
|
20
|
+
privateKey: CryptoKey;
|
|
21
|
+
publicJwk: JWK;
|
|
22
|
+
};
|
|
23
|
+
export interface Ap2SignerConfig {
|
|
24
|
+
issuer: string;
|
|
25
|
+
privateKey: CryptoKey;
|
|
26
|
+
publicJwk: JWK;
|
|
27
|
+
keyId?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface Ap2SdJwt {
|
|
30
|
+
token: string;
|
|
31
|
+
issuerJwt: string;
|
|
32
|
+
disclosures: string[];
|
|
33
|
+
payload: Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
export interface Ap2MandateContext {
|
|
36
|
+
issuer: string;
|
|
37
|
+
subject: string;
|
|
38
|
+
agentPublicJwk: JWK;
|
|
39
|
+
expiresAt: number;
|
|
40
|
+
claims: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export declare function importAp2PrivateKey(pkcs8: string): Promise<CryptoKey>;
|
|
43
|
+
export declare function importAp2PublicKey(jwk: JWK): Promise<CryptoKey>;
|
|
44
|
+
/** Issue an AP2 SD-JWT with all application claims selectively disclosed. */
|
|
45
|
+
export declare function issueAp2SdJwt(input: {
|
|
46
|
+
vct: Ap2Vct;
|
|
47
|
+
issuer: string;
|
|
48
|
+
subject?: string;
|
|
49
|
+
privateKey: CryptoKey;
|
|
50
|
+
publicJwk: JWK;
|
|
51
|
+
claims: Record<string, unknown>;
|
|
52
|
+
expiresAt: number;
|
|
53
|
+
keyId?: string;
|
|
54
|
+
}): Promise<Ap2SdJwt>;
|
|
55
|
+
/** Verify the issuer signature and every disclosed digest in an AP2 SD-JWT. */
|
|
56
|
+
export declare function verifyAp2SdJwt(token: string, publicKey: CryptoKey, expectedVct?: Ap2Vct): Promise<Record<string, unknown>>;
|
|
57
|
+
export declare function hashAp2Token(token: string): Promise<string>;
|
|
58
|
+
/** Sign the merchant's AP2 Checkout JWT returned with an x402 challenge. */
|
|
59
|
+
export declare function issueAp2CheckoutJwt(input: {
|
|
60
|
+
issuer: string;
|
|
61
|
+
subject?: string;
|
|
62
|
+
checkout: Record<string, unknown>;
|
|
63
|
+
privateKey: CryptoKey;
|
|
64
|
+
keyId?: string;
|
|
65
|
+
expiresAt: number;
|
|
66
|
+
}): Promise<string>;
|
|
67
|
+
export declare function issueClosedAp2MandateBundle(input: {
|
|
68
|
+
open: Ap2OpenMandateBundle;
|
|
69
|
+
checkoutJwt: string;
|
|
70
|
+
amount: bigint;
|
|
71
|
+
decimals: number;
|
|
72
|
+
currency: string;
|
|
73
|
+
payee: {
|
|
74
|
+
id: string;
|
|
75
|
+
name: string;
|
|
76
|
+
website: string;
|
|
77
|
+
payTo: string;
|
|
78
|
+
};
|
|
79
|
+
paymentInstrument: {
|
|
80
|
+
id: string;
|
|
81
|
+
type: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
84
|
+
issuer: string;
|
|
85
|
+
privateKey: CryptoKey;
|
|
86
|
+
publicJwk: JWK;
|
|
87
|
+
keyId?: string;
|
|
88
|
+
expiresAt: number;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
checkout: Ap2SdJwt;
|
|
91
|
+
payment: Ap2SdJwt;
|
|
92
|
+
checkoutHash: string;
|
|
93
|
+
paymentHash: string;
|
|
94
|
+
}>;
|
|
95
|
+
export interface Ap2OpenCheckoutClaims {
|
|
96
|
+
constraints: Array<Record<string, unknown>>;
|
|
97
|
+
}
|
|
98
|
+
export interface Ap2OpenPaymentClaims {
|
|
99
|
+
constraints: Array<Record<string, unknown>>;
|
|
100
|
+
}
|
|
101
|
+
export interface Ap2ClosedCheckoutClaims {
|
|
102
|
+
checkout_jwt: string;
|
|
103
|
+
checkout_hash: string;
|
|
104
|
+
open_checkout_hash: string;
|
|
105
|
+
}
|
|
106
|
+
export interface Ap2ClosedPaymentClaims {
|
|
107
|
+
transaction_id: string;
|
|
108
|
+
open_payment_hash: string;
|
|
109
|
+
payment_amount: {
|
|
110
|
+
amount: number;
|
|
111
|
+
currency: string;
|
|
112
|
+
};
|
|
113
|
+
payee: Record<string, unknown>;
|
|
114
|
+
payment_instrument: Record<string, unknown>;
|
|
115
|
+
}
|
|
116
|
+
export interface Ap2Receipt {
|
|
117
|
+
vct: typeof AP2_VCT.checkoutReceipt | typeof AP2_VCT.paymentReceipt;
|
|
118
|
+
reference: string;
|
|
119
|
+
status: "approved" | "rejected";
|
|
120
|
+
error?: {
|
|
121
|
+
code: string;
|
|
122
|
+
message: string;
|
|
123
|
+
};
|
|
124
|
+
transaction_id?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface Ap2OpenMandateBundle {
|
|
127
|
+
checkout: Ap2SdJwt;
|
|
128
|
+
payment: Ap2SdJwt;
|
|
129
|
+
issuer: string;
|
|
130
|
+
issuedAt: number;
|
|
131
|
+
expiresAt: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates the user-authorized open mandates for Seedhape's single-merchant
|
|
135
|
+
* autonomous demo. The later purchase step closes these against a merchant
|
|
136
|
+
* Checkout JWT and a concrete x402 amount.
|
|
137
|
+
*/
|
|
138
|
+
export declare function issueOpenAp2MandateBundle(input: {
|
|
139
|
+
mandate: IntentMandate;
|
|
140
|
+
issuer: string;
|
|
141
|
+
privateKey: CryptoKey;
|
|
142
|
+
publicJwk: JWK;
|
|
143
|
+
merchant: {
|
|
144
|
+
id: string;
|
|
145
|
+
name: string;
|
|
146
|
+
website: string;
|
|
147
|
+
payTo: string;
|
|
148
|
+
};
|
|
149
|
+
instrument: {
|
|
150
|
+
id: string;
|
|
151
|
+
type: string;
|
|
152
|
+
description: string;
|
|
153
|
+
};
|
|
154
|
+
keyId?: string;
|
|
155
|
+
}): Promise<Ap2OpenMandateBundle>;
|
|
156
|
+
//# sourceMappingURL=official.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"official.d.ts","sourceRoot":"","sources":["../../src/ap2/official.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Official AP2 v0.2 credential primitives.
|
|
3
|
+
*
|
|
4
|
+
* AP2 uses SD-JWT VCs. This module deliberately does not expose the legacy
|
|
5
|
+
* EIP-712 IntentMandate representation. It signs AP2's versioned open/closed
|
|
6
|
+
* Checkout and Payment Mandates and verifies their selective disclosures.
|
|
7
|
+
*/
|
|
8
|
+
import { base64url, importJWK, importPKCS8, jwtVerify, SignJWT, } from "jose";
|
|
9
|
+
export const AP2_VCT = {
|
|
10
|
+
checkoutOpen: "mandate.checkout.open.1",
|
|
11
|
+
checkout: "mandate.checkout.1",
|
|
12
|
+
paymentOpen: "mandate.payment.open.1",
|
|
13
|
+
payment: "mandate.payment.1",
|
|
14
|
+
checkoutReceipt: "receipt.checkout.1",
|
|
15
|
+
paymentReceipt: "receipt.payment.1",
|
|
16
|
+
};
|
|
17
|
+
const encoder = new TextEncoder();
|
|
18
|
+
async function digest(value) {
|
|
19
|
+
const bytes = await globalThis.crypto.subtle.digest("SHA-256", encoder.encode(value));
|
|
20
|
+
return base64url.encode(new Uint8Array(bytes));
|
|
21
|
+
}
|
|
22
|
+
function disclosure(salt, key, value) {
|
|
23
|
+
return base64url.encode(encoder.encode(JSON.stringify([salt, key, value])));
|
|
24
|
+
}
|
|
25
|
+
function decodeDisclosure(value) {
|
|
26
|
+
const decoded = new TextDecoder().decode(base64url.decode(value));
|
|
27
|
+
const parsed = JSON.parse(decoded);
|
|
28
|
+
if (!Array.isArray(parsed) || parsed.length !== 3 || typeof parsed[0] !== "string" || typeof parsed[1] !== "string") {
|
|
29
|
+
throw new Error("Invalid AP2 SD-JWT disclosure.");
|
|
30
|
+
}
|
|
31
|
+
return parsed;
|
|
32
|
+
}
|
|
33
|
+
function constraintList(payload) {
|
|
34
|
+
return Array.isArray(payload.constraints)
|
|
35
|
+
? payload.constraints.filter((item) => Boolean(item) && typeof item === "object")
|
|
36
|
+
: [];
|
|
37
|
+
}
|
|
38
|
+
function sameIdentity(expected, actual) {
|
|
39
|
+
return ["id", "name", "website", "payTo", "type", "description"].every((key) => expected[key] === undefined || expected[key] === actual[key]);
|
|
40
|
+
}
|
|
41
|
+
export async function importAp2PrivateKey(pkcs8) {
|
|
42
|
+
return importPKCS8(pkcs8.replace(/\\n/g, "\n"), "ES256", { extractable: true });
|
|
43
|
+
}
|
|
44
|
+
export async function importAp2PublicKey(jwk) {
|
|
45
|
+
return importJWK(jwk, "ES256");
|
|
46
|
+
}
|
|
47
|
+
/** Issue an AP2 SD-JWT with all application claims selectively disclosed. */
|
|
48
|
+
export async function issueAp2SdJwt(input) {
|
|
49
|
+
const reserved = new Set(["iss", "sub", "vct", "iat", "exp", "cnf", "_sd", "_sd_alg"]);
|
|
50
|
+
if (Object.keys(input.claims).some((key) => reserved.has(key)))
|
|
51
|
+
throw new Error("AP2 claims cannot overwrite reserved credential fields.");
|
|
52
|
+
const disclosures = Object.entries(input.claims).map(([key, value], index) => disclosure(`${Date.now().toString(36)}-${index}-${crypto.randomUUID()}`, key, value));
|
|
53
|
+
const digests = await Promise.all(disclosures.map(digest));
|
|
54
|
+
const now = Math.floor(Date.now() / 1000);
|
|
55
|
+
const payload = {
|
|
56
|
+
iss: input.issuer,
|
|
57
|
+
vct: input.vct,
|
|
58
|
+
iat: now,
|
|
59
|
+
exp: input.expiresAt,
|
|
60
|
+
_sd_alg: "sha-256",
|
|
61
|
+
_sd: digests,
|
|
62
|
+
cnf: { jwk: input.publicJwk },
|
|
63
|
+
...(input.subject ? { sub: input.subject } : {}),
|
|
64
|
+
};
|
|
65
|
+
const issuerJwt = await new SignJWT(payload)
|
|
66
|
+
.setProtectedHeader({ alg: "ES256", typ: "vc+sd-jwt", kid: input.keyId })
|
|
67
|
+
.sign(input.privateKey);
|
|
68
|
+
return { token: `${issuerJwt}~${disclosures.join("~")}~`, issuerJwt, disclosures, payload };
|
|
69
|
+
}
|
|
70
|
+
/** Verify the issuer signature and every disclosed digest in an AP2 SD-JWT. */
|
|
71
|
+
export async function verifyAp2SdJwt(token, publicKey, expectedVct) {
|
|
72
|
+
const [issuerJwt, ...parts] = token.split("~");
|
|
73
|
+
const disclosures = parts.filter(Boolean);
|
|
74
|
+
const result = await jwtVerify(issuerJwt, publicKey, { algorithms: ["ES256"] });
|
|
75
|
+
const payload = result.payload;
|
|
76
|
+
if (expectedVct && payload.vct !== expectedVct)
|
|
77
|
+
throw new Error(`Unexpected AP2 vct: ${String(payload.vct)}`);
|
|
78
|
+
if (payload._sd_alg !== "sha-256" || !Array.isArray(payload._sd))
|
|
79
|
+
throw new Error("Invalid AP2 SD-JWT disclosure metadata.");
|
|
80
|
+
const expected = new Set(payload._sd.filter((item) => typeof item === "string"));
|
|
81
|
+
if (expected.size !== payload._sd.length)
|
|
82
|
+
throw new Error("Invalid AP2 SD-JWT disclosure metadata.");
|
|
83
|
+
const disclosed = { ...payload };
|
|
84
|
+
const seenDigests = new Set();
|
|
85
|
+
const seenKeys = new Set();
|
|
86
|
+
for (const item of disclosures) {
|
|
87
|
+
const itemDigest = await digest(item);
|
|
88
|
+
if (!expected.has(itemDigest) || seenDigests.has(itemDigest))
|
|
89
|
+
throw new Error("AP2 disclosure digest mismatch.");
|
|
90
|
+
const [, key, value] = decodeDisclosure(item);
|
|
91
|
+
if (seenKeys.has(key) || Object.prototype.hasOwnProperty.call(payload, key))
|
|
92
|
+
throw new Error("AP2 disclosure claim is duplicated.");
|
|
93
|
+
seenDigests.add(itemDigest);
|
|
94
|
+
seenKeys.add(key);
|
|
95
|
+
disclosed[key] = value;
|
|
96
|
+
}
|
|
97
|
+
return disclosed;
|
|
98
|
+
}
|
|
99
|
+
export async function hashAp2Token(token) {
|
|
100
|
+
return digest(token);
|
|
101
|
+
}
|
|
102
|
+
/** Sign the merchant's AP2 Checkout JWT returned with an x402 challenge. */
|
|
103
|
+
export async function issueAp2CheckoutJwt(input) {
|
|
104
|
+
const jwt = new SignJWT(input.checkout)
|
|
105
|
+
.setProtectedHeader({ alg: "ES256", typ: "JWT", kid: input.keyId })
|
|
106
|
+
.setIssuer(input.issuer)
|
|
107
|
+
.setIssuedAt()
|
|
108
|
+
.setExpirationTime(input.expiresAt);
|
|
109
|
+
if (input.subject)
|
|
110
|
+
jwt.setSubject(input.subject);
|
|
111
|
+
return jwt.sign(input.privateKey);
|
|
112
|
+
}
|
|
113
|
+
export async function issueClosedAp2MandateBundle(input) {
|
|
114
|
+
if (input.amount <= 0n || !Number.isSafeInteger(input.decimals) || input.decimals < 0 || input.decimals > 18 || !input.currency.trim()) {
|
|
115
|
+
throw new Error("AP2 closed mandate amount, decimals, and currency are invalid.");
|
|
116
|
+
}
|
|
117
|
+
const openCheckout = input.open.checkout.payload;
|
|
118
|
+
const openPayment = input.open.payment.payload;
|
|
119
|
+
const openSubject = typeof openCheckout.sub === "string" ? openCheckout.sub : undefined;
|
|
120
|
+
if (input.open.issuer !== input.issuer || openCheckout.iss !== input.issuer || openPayment.iss !== input.issuer) {
|
|
121
|
+
throw new Error("AP2 closed mandates must use the open mandate issuer.");
|
|
122
|
+
}
|
|
123
|
+
if (!openSubject || openPayment.sub !== openSubject) {
|
|
124
|
+
throw new Error("AP2 open checkout and payment mandates must have the same subject.");
|
|
125
|
+
}
|
|
126
|
+
if (input.expiresAt > input.open.expiresAt || input.expiresAt > Number(openCheckout.exp ?? 0) || input.expiresAt > Number(openPayment.exp ?? 0)) {
|
|
127
|
+
throw new Error("AP2 closed mandates cannot outlive the open mandate.");
|
|
128
|
+
}
|
|
129
|
+
const amount = Number(input.amount) / 10 ** input.decimals;
|
|
130
|
+
for (const constraint of constraintList(openPayment)) {
|
|
131
|
+
if (constraint.type === "payment.amount_range") {
|
|
132
|
+
if ((typeof constraint.min === "number" && (!Number.isFinite(amount) || amount < constraint.min)) || (typeof constraint.max === "number" && (!Number.isFinite(amount) || amount > constraint.max)) || typeof constraint.currency === "string" && constraint.currency !== input.currency) {
|
|
133
|
+
throw new Error("AP2 payment exceeds the open mandate amount constraint.");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (constraint.type === "payment.allowed_payees" && Array.isArray(constraint.allowed) && !constraint.allowed.some((item) => Boolean(item) && typeof item === "object" && sameIdentity(item, input.payee))) {
|
|
137
|
+
throw new Error("AP2 payee is not authorized by the open mandate.");
|
|
138
|
+
}
|
|
139
|
+
if (constraint.type === "payment.allowed_payment_instruments" && Array.isArray(constraint.allowed) && !constraint.allowed.some((item) => Boolean(item) && typeof item === "object" && sameIdentity(item, input.paymentInstrument))) {
|
|
140
|
+
throw new Error("AP2 payment instrument is not authorized by the open mandate.");
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
for (const constraint of constraintList(openCheckout)) {
|
|
144
|
+
if (constraint.type === "checkout.allowed_merchants" && Array.isArray(constraint.allowed) && !constraint.allowed.some((item) => Boolean(item) && typeof item === "object" && sameIdentity(item, input.payee))) {
|
|
145
|
+
throw new Error("AP2 merchant is not authorized by the open checkout mandate.");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const checkoutHash = await hashAp2Token(input.checkoutJwt);
|
|
149
|
+
const openCheckoutHash = await hashAp2Token(input.open.checkout.token);
|
|
150
|
+
const openPaymentHash = await hashAp2Token(input.open.payment.token);
|
|
151
|
+
const checkout = await issueAp2SdJwt({
|
|
152
|
+
vct: AP2_VCT.checkout,
|
|
153
|
+
issuer: input.issuer,
|
|
154
|
+
privateKey: input.privateKey,
|
|
155
|
+
publicJwk: input.publicJwk,
|
|
156
|
+
expiresAt: input.expiresAt,
|
|
157
|
+
keyId: input.keyId,
|
|
158
|
+
claims: { checkout_jwt: input.checkoutJwt, checkout_hash: checkoutHash, open_checkout_hash: openCheckoutHash },
|
|
159
|
+
});
|
|
160
|
+
const payment = await issueAp2SdJwt({
|
|
161
|
+
vct: AP2_VCT.payment,
|
|
162
|
+
issuer: input.issuer,
|
|
163
|
+
privateKey: input.privateKey,
|
|
164
|
+
publicJwk: input.publicJwk,
|
|
165
|
+
expiresAt: input.expiresAt,
|
|
166
|
+
keyId: input.keyId,
|
|
167
|
+
claims: {
|
|
168
|
+
transaction_id: checkoutHash,
|
|
169
|
+
open_payment_hash: openPaymentHash,
|
|
170
|
+
payment_amount: { amount: Number(input.amount) / 10 ** input.decimals, currency: input.currency },
|
|
171
|
+
payee: input.payee,
|
|
172
|
+
payment_instrument: input.paymentInstrument,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
return { checkout, payment, checkoutHash, paymentHash: await hashAp2Token(payment.token) };
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Creates the user-authorized open mandates for Seedhape's single-merchant
|
|
179
|
+
* autonomous demo. The later purchase step closes these against a merchant
|
|
180
|
+
* Checkout JWT and a concrete x402 amount.
|
|
181
|
+
*/
|
|
182
|
+
export async function issueOpenAp2MandateBundle(input) {
|
|
183
|
+
if (!input.merchant.payTo.trim())
|
|
184
|
+
throw new Error("AP2 merchant payout address is required.");
|
|
185
|
+
const now = Math.floor(Date.now() / 1000);
|
|
186
|
+
const expiresAt = input.mandate.expiry;
|
|
187
|
+
const merchant = { id: input.merchant.id, name: input.merchant.name, website: input.merchant.website, payTo: input.merchant.payTo };
|
|
188
|
+
const checkout = await issueAp2SdJwt({
|
|
189
|
+
vct: AP2_VCT.checkoutOpen,
|
|
190
|
+
issuer: input.issuer,
|
|
191
|
+
subject: input.mandate.subject,
|
|
192
|
+
privateKey: input.privateKey,
|
|
193
|
+
publicJwk: input.publicJwk,
|
|
194
|
+
expiresAt,
|
|
195
|
+
keyId: input.keyId,
|
|
196
|
+
claims: {
|
|
197
|
+
constraints: [
|
|
198
|
+
{ type: "checkout.allowed_merchants", allowed: [merchant] },
|
|
199
|
+
],
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
const payment = await issueAp2SdJwt({
|
|
203
|
+
vct: AP2_VCT.paymentOpen,
|
|
204
|
+
issuer: input.issuer,
|
|
205
|
+
subject: input.mandate.subject,
|
|
206
|
+
privateKey: input.privateKey,
|
|
207
|
+
publicJwk: input.publicJwk,
|
|
208
|
+
expiresAt,
|
|
209
|
+
keyId: input.keyId,
|
|
210
|
+
claims: {
|
|
211
|
+
constraints: [
|
|
212
|
+
{ type: "payment.amount_range", min: 0, max: Number(input.mandate.maxPerTransaction) / 10 ** input.mandate.asset.decimals, currency: input.mandate.asset.symbol },
|
|
213
|
+
{ type: "payment.budget", max: Number(input.mandate.maxPerPeriod) / 10 ** input.mandate.asset.decimals, currency: input.mandate.asset.symbol },
|
|
214
|
+
{ type: "payment.agent_recurrence", frequency: "DAILY", max_occurrences: input.mandate.maxTxPerPeriod },
|
|
215
|
+
{ type: "payment.allowed_payees", allowed: [merchant] },
|
|
216
|
+
{ type: "payment.allowed_payment_instruments", allowed: [input.instrument] },
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
return { checkout, payment, issuer: input.issuer, issuedAt: now, expiresAt };
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=official.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"official.js","sourceRoot":"","sources":["../../src/ap2/official.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The policy engine. This is the single chokepoint every payment passes
|
|
3
|
+
* through before a signature is produced.
|
|
4
|
+
*
|
|
5
|
+
* Design note: off-chain policy is defence in depth, NOT the security boundary.
|
|
6
|
+
* The hard cap must also exist on-chain as a spend permission on the smart
|
|
7
|
+
* account (see wallet/spendPermission.ts). If this process is compromised, the
|
|
8
|
+
* on-chain limit is what actually stops the bleeding. Everything here is about
|
|
9
|
+
* catching the far more common case: an agent that has been talked into
|
|
10
|
+
* spending badly by content it read.
|
|
11
|
+
*/
|
|
12
|
+
import type { IntentMandate, PolicyDecision, SignedIntentMandate, SpendRecord } from "../types.js";
|
|
13
|
+
export interface PaymentCandidate {
|
|
14
|
+
resource: string;
|
|
15
|
+
host: string;
|
|
16
|
+
payTo: string;
|
|
17
|
+
amount: bigint;
|
|
18
|
+
assetAddress: string;
|
|
19
|
+
network: string;
|
|
20
|
+
}
|
|
21
|
+
export interface PolicyContext {
|
|
22
|
+
now: number;
|
|
23
|
+
/** Settled + pending spends under this intent, newest first. */
|
|
24
|
+
history: SpendRecord[];
|
|
25
|
+
/**
|
|
26
|
+
* Median historical price paid for this exact resource, if known.
|
|
27
|
+
* Undefined for a first-time resource.
|
|
28
|
+
*/
|
|
29
|
+
medianPriceForResource?: bigint;
|
|
30
|
+
/**
|
|
31
|
+
* Median price across ALL of this user's settled payments.
|
|
32
|
+
*
|
|
33
|
+
* This exists because the per-resource median cannot fire on a resource the
|
|
34
|
+
* user has never paid before — which is precisely the prompt-injection shape:
|
|
35
|
+
* an agent reads a page that tells it to fetch some new expensive URL. A
|
|
36
|
+
* payment thirty times the user's typical spend deserves a look even if it
|
|
37
|
+
* fits under the per-transaction cap.
|
|
38
|
+
*/
|
|
39
|
+
medianPriceOverall?: bigint;
|
|
40
|
+
/** Hosts the user has knowingly transacted with before. */
|
|
41
|
+
knownHosts: Set<string>;
|
|
42
|
+
}
|
|
43
|
+
export interface PolicyOptions {
|
|
44
|
+
/**
|
|
45
|
+
* Flag (do not block) a payment more than this multiple above the median
|
|
46
|
+
* price previously paid for the same resource. Catches a merchant that
|
|
47
|
+
* quietly raises its 402 price by 100x for agent traffic.
|
|
48
|
+
*/
|
|
49
|
+
priceAnomalyMultiple: bigint;
|
|
50
|
+
/**
|
|
51
|
+
* Flag a payment more than this multiple above the user's median payment
|
|
52
|
+
* across all resources. Catches expensive first-time endpoints, which the
|
|
53
|
+
* per-resource check structurally cannot see. Set higher than
|
|
54
|
+
* `priceAnomalyMultiple` because it compares across unrelated services.
|
|
55
|
+
*/
|
|
56
|
+
overallAnomalyMultiple: bigint;
|
|
57
|
+
/**
|
|
58
|
+
* Below this, skip the overall-anomaly check entirely. Without a floor, a
|
|
59
|
+
* user whose median payment is 0.001 USDC gets prompted on every ordinary
|
|
60
|
+
* 0.05 USDC call, which trains them to click through.
|
|
61
|
+
*/
|
|
62
|
+
overallAnomalyFloor: bigint;
|
|
63
|
+
/** Require confirmation for a first-ever payment to a new host above this. */
|
|
64
|
+
newHostConfirmAbove: bigint;
|
|
65
|
+
/**
|
|
66
|
+
* Reject if the same resource is hit more than this many times inside
|
|
67
|
+
* `burstWindowSeconds`. Catches retry loops that would drain a daily cap.
|
|
68
|
+
*/
|
|
69
|
+
maxRepeatsPerResource: number;
|
|
70
|
+
burstWindowSeconds: number;
|
|
71
|
+
}
|
|
72
|
+
export declare const DEFAULT_POLICY_OPTIONS: PolicyOptions;
|
|
73
|
+
export declare class PolicyEngine {
|
|
74
|
+
private readonly opts;
|
|
75
|
+
constructor(opts?: PolicyOptions);
|
|
76
|
+
evaluate(signedIntent: SignedIntentMandate, candidate: PaymentCandidate, ctx: PolicyContext): PolicyDecision;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Host matching.
|
|
80
|
+
*
|
|
81
|
+
* A user writing an allowlist writes "api.example.in", not "api.example.in:443".
|
|
82
|
+
* So an allowlist entry WITHOUT a port matches on hostname alone and ignores
|
|
83
|
+
* the port; an entry WITH an explicit port must match exactly. The port is not
|
|
84
|
+
* a meaningful security boundary here — the payee address is checked separately
|
|
85
|
+
* — but honouring an explicit one costs nothing and some users will want it.
|
|
86
|
+
*
|
|
87
|
+
* Wildcards: "*.example.in" matches example.in and any subdomain, and must not
|
|
88
|
+
* degrade into a substring match ("evilexample.in" must not match).
|
|
89
|
+
*/
|
|
90
|
+
export declare function matchesHostList(host: string, list: string[]): boolean;
|
|
91
|
+
/** Guard against a tampered allowlist arriving separately from the signature. */
|
|
92
|
+
export declare function allowlistsMatchSignedRoots(m: IntentMandate): boolean;
|
|
93
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/ap2/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,WAAW,EACZ,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,sBAAsB,EAAE,aAOpC,CAAC;AAEF,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,aAAsC;IAEzE,QAAQ,CACN,YAAY,EAAE,mBAAmB,EACjC,SAAS,EAAE,gBAAgB,EAC3B,GAAG,EAAE,aAAa,GACjB,cAAc;CAsGlB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAmBrE;AA6FD,iFAAiF;AACjF,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAMpE"}
|