open-agentpay 0.1.0 → 0.2.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/LICENSE +201 -0
- package/README.md +125 -4
- package/dist/client/client.d.ts +37 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +90 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/errors.d.ts +23 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +38 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/interfaces.d.ts +34 -0
- package/dist/client/interfaces.d.ts.map +1 -0
- package/dist/client/interfaces.js +5 -0
- package/dist/client/interfaces.js.map +1 -0
- package/dist/client/signer.d.ts +136 -0
- package/dist/client/signer.d.ts.map +1 -0
- package/dist/client/signer.js +300 -0
- package/dist/client/signer.js.map +1 -0
- package/dist/client/transport.d.ts +44 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +389 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/core/codecs.d.ts +35 -0
- package/dist/core/codecs.d.ts.map +1 -0
- package/dist/core/codecs.js +177 -0
- package/dist/core/codecs.js.map +1 -0
- package/dist/core/errors.d.ts +33 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +48 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/interop.d.ts +10 -0
- package/dist/core/interop.d.ts.map +1 -0
- package/dist/core/interop.js +28 -0
- package/dist/core/interop.js.map +1 -0
- package/dist/core/models.d.ts +155 -0
- package/dist/core/models.d.ts.map +1 -0
- package/dist/core/models.js +463 -0
- package/dist/core/models.js.map +1 -0
- package/dist/core/state.d.ts +82 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +87 -0
- package/dist/core/state.js.map +1 -0
- package/dist/evm/constants.d.ts +52 -0
- package/dist/evm/constants.d.ts.map +1 -0
- package/dist/evm/constants.js +72 -0
- package/dist/evm/constants.js.map +1 -0
- package/dist/evm/eip3009.d.ts +43 -0
- package/dist/evm/eip3009.d.ts.map +1 -0
- package/dist/evm/eip3009.js +145 -0
- package/dist/evm/eip3009.js.map +1 -0
- package/dist/evm/index.d.ts +3 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +3 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/langchain.d.ts +40 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +68 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/mcp.d.ts +29 -0
- package/dist/integrations/mcp.d.ts.map +1 -0
- package/dist/integrations/mcp.js +73 -0
- package/dist/integrations/mcp.js.map +1 -0
- package/dist/integrations/vercel-ai.d.ts +31 -0
- package/dist/integrations/vercel-ai.d.ts.map +1 -0
- package/dist/integrations/vercel-ai.js +50 -0
- package/dist/integrations/vercel-ai.js.map +1 -0
- package/dist/policy/db.d.ts +14 -0
- package/dist/policy/db.d.ts.map +1 -0
- package/dist/policy/db.js +86 -0
- package/dist/policy/db.js.map +1 -0
- package/dist/policy/errors.d.ts +31 -0
- package/dist/policy/errors.d.ts.map +1 -0
- package/dist/policy/errors.js +48 -0
- package/dist/policy/errors.js.map +1 -0
- package/dist/policy/evaluator.d.ts +22 -0
- package/dist/policy/evaluator.d.ts.map +1 -0
- package/dist/policy/evaluator.js +152 -0
- package/dist/policy/evaluator.js.map +1 -0
- package/dist/policy/index.d.ts +7 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +7 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/interfaces.d.ts +59 -0
- package/dist/policy/interfaces.d.ts.map +1 -0
- package/dist/policy/interfaces.js +7 -0
- package/dist/policy/interfaces.js.map +1 -0
- package/dist/policy/models.d.ts +161 -0
- package/dist/policy/models.d.ts.map +1 -0
- package/dist/policy/models.js +449 -0
- package/dist/policy/models.js.map +1 -0
- package/dist/policy/sqlite-engine.d.ts +28 -0
- package/dist/policy/sqlite-engine.d.ts.map +1 -0
- package/dist/policy/sqlite-engine.js +501 -0
- package/dist/policy/sqlite-engine.js.map +1 -0
- package/dist/state/buyer-coordinator.d.ts +33 -0
- package/dist/state/buyer-coordinator.d.ts.map +1 -0
- package/dist/state/buyer-coordinator.js +363 -0
- package/dist/state/buyer-coordinator.js.map +1 -0
- package/dist/state/errors.d.ts +45 -0
- package/dist/state/errors.d.ts.map +1 -0
- package/dist/state/errors.js +88 -0
- package/dist/state/errors.js.map +1 -0
- package/dist/state/guards.d.ts +24 -0
- package/dist/state/guards.d.ts.map +1 -0
- package/dist/state/guards.js +211 -0
- package/dist/state/guards.js.map +1 -0
- package/dist/state/index.d.ts +5 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +5 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/reconciliation.d.ts +105 -0
- package/dist/state/reconciliation.d.ts.map +1 -0
- package/dist/state/reconciliation.js +297 -0
- package/dist/state/reconciliation.js.map +1 -0
- package/package.json +98 -12
- package/index.d.ts +0 -2
- package/index.js +0 -8
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core x402 V2 Protocol Models.
|
|
3
|
+
*
|
|
4
|
+
* Defines frozen, byte-conforming value objects for x402 V2
|
|
5
|
+
* PaymentChallenge, PaymentAuthorization, WalletAuthorization, and SignatureData.
|
|
6
|
+
*/
|
|
7
|
+
import { X402ErrorCode, X402ValidationError } from './errors.js';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Regex patterns & Constants
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/** CAIP-2: namespace:reference (e.g. eip155:84532) */
|
|
12
|
+
const CAIP2_RE = /^[a-z0-9]+:[a-zA-Z0-9_-]+$/;
|
|
13
|
+
/** Canonical EVM address: 0x followed by 40 hex chars */
|
|
14
|
+
const EVM_ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
15
|
+
/** 32-byte hex nonce: 0x followed by 64 hex chars (or 64 hex chars without 0x) */
|
|
16
|
+
const NONCE_HEX_RE = /^(0x)?[0-9a-fA-F]{64}$/;
|
|
17
|
+
/** 32-byte r or s hex: 0x followed by 1 to 64 hex chars (canonicalized to 32 bytes) */
|
|
18
|
+
const BYTES32_HEX_RE = /^(0x)?[0-9a-fA-F]{1,64}$/;
|
|
19
|
+
/** AgentPay route identifier regex for internal virtual wallet */
|
|
20
|
+
const AGENTPAY_ROUTE_RE = /^agentpay:route:[A-Za-z0-9_-]+$/;
|
|
21
|
+
/** Maximum signed 64-bit integer for base units */
|
|
22
|
+
export const SQLITE_MAX_INT = 9223372036854775807n;
|
|
23
|
+
/** Supported fiat base currencies for AgentPay internal virtual wallet */
|
|
24
|
+
export const WALLET_FIAT_CURRENCIES = new Set(['CNY', 'USD', 'EUR']);
|
|
25
|
+
export function validateEvmAddress(value, fieldName) {
|
|
26
|
+
if (typeof value !== 'string' || !EVM_ADDRESS_RE.test(value)) {
|
|
27
|
+
throw new X402ValidationError(`${fieldName}: invalid EVM address format: ${JSON.stringify(value)}. Must be 0x followed by 40 hexadecimal characters.`, X402ErrorCode.INVALID_ADDRESS);
|
|
28
|
+
}
|
|
29
|
+
return value.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
export function validateCaip2(value) {
|
|
32
|
+
if (typeof value !== 'string' || !CAIP2_RE.test(value)) {
|
|
33
|
+
throw new X402ValidationError(`Invalid CAIP-2 network identifier: ${JSON.stringify(value)}. Expected format: namespace:reference (e.g. eip155:84532).`, X402ErrorCode.NETWORK_NOT_WHITELISTED);
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
function validateUnixTimestamp(value, fieldName) {
|
|
38
|
+
if (value === undefined || value === null) {
|
|
39
|
+
throw new X402ValidationError(`Missing required field '${fieldName}'`, X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === 'boolean' || (typeof value !== 'number' && typeof value !== 'string' && typeof value !== 'bigint')) {
|
|
42
|
+
throw new X402ValidationError(`${fieldName} must be integer Unix seconds`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === 'number' && !Number.isInteger(value)) {
|
|
45
|
+
throw new X402ValidationError(`${fieldName} must be integer Unix seconds, got float ${value}`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
46
|
+
}
|
|
47
|
+
const parsed = typeof value === 'bigint' ? Number(value) : Number.parseInt(String(value), 10);
|
|
48
|
+
if (Number.isNaN(parsed) || !Number.isSafeInteger(parsed) || String(parsed) !== String(value).trim()) {
|
|
49
|
+
throw new X402ValidationError(`${fieldName} must be integer Unix seconds, got ${JSON.stringify(value)}`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
50
|
+
}
|
|
51
|
+
if (parsed < 0) {
|
|
52
|
+
throw new X402ValidationError(`${fieldName} cannot be negative, got ${parsed}`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
53
|
+
}
|
|
54
|
+
return parsed;
|
|
55
|
+
}
|
|
56
|
+
export class SignatureData {
|
|
57
|
+
v;
|
|
58
|
+
r;
|
|
59
|
+
s;
|
|
60
|
+
serialized;
|
|
61
|
+
compact;
|
|
62
|
+
constructor(input) {
|
|
63
|
+
if (!input || typeof input !== 'object') {
|
|
64
|
+
throw new X402ValidationError('Invalid SignatureData input', X402ErrorCode.INVALID_SIGNATURE);
|
|
65
|
+
}
|
|
66
|
+
if (typeof input.v !== 'number' || !Number.isInteger(input.v) || (![27, 28, 0, 1].includes(input.v) && input.v < 35)) {
|
|
67
|
+
throw new X402ValidationError(`Invalid signature v value: ${String(input.v)}. Expected 27 or 28 (or 0/1).`, X402ErrorCode.INVALID_SIGNATURE);
|
|
68
|
+
}
|
|
69
|
+
if (typeof input.r !== 'string' || !BYTES32_HEX_RE.test(input.r)) {
|
|
70
|
+
throw new X402ValidationError('Invalid signature r: must be a 32-byte hex string.', X402ErrorCode.INVALID_SIGNATURE);
|
|
71
|
+
}
|
|
72
|
+
if (typeof input.s !== 'string' || !BYTES32_HEX_RE.test(input.s)) {
|
|
73
|
+
throw new X402ValidationError('Invalid signature s: must be a 32-byte hex string.', X402ErrorCode.INVALID_SIGNATURE);
|
|
74
|
+
}
|
|
75
|
+
this.v = input.v;
|
|
76
|
+
const rRaw = input.r.startsWith('0x') ? input.r.slice(2) : input.r;
|
|
77
|
+
const sRaw = input.s.startsWith('0x') ? input.s.slice(2) : input.s;
|
|
78
|
+
const rClean = rRaw.toLowerCase().padStart(64, '0');
|
|
79
|
+
const sClean = sRaw.toLowerCase().padStart(64, '0');
|
|
80
|
+
this.r = `0x${rClean}`;
|
|
81
|
+
this.s = `0x${sClean}`;
|
|
82
|
+
const vHex = this.v.toString(16).padStart(2, '0');
|
|
83
|
+
const expectedRaw = `${rClean}${sClean}${vHex}`.toLowerCase();
|
|
84
|
+
this.serialized = input.serialized != null ? input.serialized : expectedRaw;
|
|
85
|
+
this.compact = (input.compact != null ? input.compact : `0x${expectedRaw}`);
|
|
86
|
+
Object.freeze(this);
|
|
87
|
+
}
|
|
88
|
+
static fromRawSignature(r, s, v, serialized) {
|
|
89
|
+
const rStr = typeof r === 'bigint' ? `0x${r.toString(16).padStart(64, '0')}` : r.startsWith('0x') ? `0x${r.slice(2).padStart(64, '0')}` : `0x${r.padStart(64, '0')}`;
|
|
90
|
+
const sStr = typeof s === 'bigint' ? `0x${s.toString(16).padStart(64, '0')}` : s.startsWith('0x') ? `0x${s.slice(2).padStart(64, '0')}` : `0x${s.padStart(64, '0')}`;
|
|
91
|
+
return new SignatureData({ v, r: rStr, s: sStr, serialized });
|
|
92
|
+
}
|
|
93
|
+
toJSON() {
|
|
94
|
+
return {
|
|
95
|
+
v: this.v,
|
|
96
|
+
r: this.r,
|
|
97
|
+
s: this.s,
|
|
98
|
+
serialized: this.serialized,
|
|
99
|
+
compact: this.compact,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export class PaymentChallenge {
|
|
104
|
+
version;
|
|
105
|
+
challengeId;
|
|
106
|
+
scheme;
|
|
107
|
+
network;
|
|
108
|
+
asset;
|
|
109
|
+
assetSymbol;
|
|
110
|
+
decimals;
|
|
111
|
+
amount;
|
|
112
|
+
payee;
|
|
113
|
+
validAfter;
|
|
114
|
+
validBefore;
|
|
115
|
+
facilitatorUrl;
|
|
116
|
+
resourceUri;
|
|
117
|
+
extensions;
|
|
118
|
+
// Python snake_case aliases for seamless cross-language ergonomics
|
|
119
|
+
get challenge_id() {
|
|
120
|
+
return this.challengeId;
|
|
121
|
+
}
|
|
122
|
+
get asset_symbol() {
|
|
123
|
+
return this.assetSymbol;
|
|
124
|
+
}
|
|
125
|
+
get valid_after() {
|
|
126
|
+
return this.validAfter;
|
|
127
|
+
}
|
|
128
|
+
get valid_before() {
|
|
129
|
+
return this.validBefore;
|
|
130
|
+
}
|
|
131
|
+
get facilitator_url() {
|
|
132
|
+
return this.facilitatorUrl;
|
|
133
|
+
}
|
|
134
|
+
get resource_uri() {
|
|
135
|
+
return this.resourceUri;
|
|
136
|
+
}
|
|
137
|
+
constructor(data) {
|
|
138
|
+
if (!data || typeof data !== 'object') {
|
|
139
|
+
throw new X402ValidationError('Invalid PaymentChallenge payload', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
140
|
+
}
|
|
141
|
+
const version = data.version ?? '2.0';
|
|
142
|
+
if (version !== '2.0') {
|
|
143
|
+
throw new X402ValidationError(`Unsupported protocol version: ${JSON.stringify(version)}. Expected '2.0'.`, X402ErrorCode.UNSUPPORTED_VERSION);
|
|
144
|
+
}
|
|
145
|
+
this.version = version;
|
|
146
|
+
const rawChallengeId = data.challengeId ?? data.challenge_id;
|
|
147
|
+
if (typeof rawChallengeId !== 'string' || !rawChallengeId.trim()) {
|
|
148
|
+
throw new X402ValidationError('challengeId cannot be empty.', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
149
|
+
}
|
|
150
|
+
this.challengeId = rawChallengeId.trim();
|
|
151
|
+
const scheme = data.scheme ?? 'EIP-3009';
|
|
152
|
+
if (typeof scheme !== 'string' || !scheme.trim()) {
|
|
153
|
+
throw new X402ValidationError('scheme is required', X402ErrorCode.INVALID_SCHEME);
|
|
154
|
+
}
|
|
155
|
+
this.scheme = scheme;
|
|
156
|
+
// Network validation
|
|
157
|
+
const rawNetwork = data.network ?? null;
|
|
158
|
+
if (this.scheme === 'agentpay-wallet' && rawNetwork === 'agentpay:internal-ledger') {
|
|
159
|
+
this.network = rawNetwork;
|
|
160
|
+
}
|
|
161
|
+
else if (rawNetwork === null || rawNetwork === undefined) {
|
|
162
|
+
throw new X402ValidationError('network is required', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.network = validateCaip2(rawNetwork);
|
|
166
|
+
}
|
|
167
|
+
// Asset validation
|
|
168
|
+
const rawAsset = data.asset ?? null;
|
|
169
|
+
if (this.scheme === 'agentpay-wallet' && typeof rawAsset === 'string' && WALLET_FIAT_CURRENCIES.has(rawAsset)) {
|
|
170
|
+
this.asset = rawAsset;
|
|
171
|
+
}
|
|
172
|
+
else if (rawAsset === null || rawAsset === undefined) {
|
|
173
|
+
throw new X402ValidationError('asset is required', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.asset = validateEvmAddress(rawAsset, 'asset');
|
|
177
|
+
}
|
|
178
|
+
const rawSymbol = data.assetSymbol ?? data.asset_symbol ?? null;
|
|
179
|
+
this.assetSymbol = typeof rawSymbol === 'string' ? rawSymbol : null;
|
|
180
|
+
// Decimals validation
|
|
181
|
+
const rawDecimals = data.decimals ?? 6;
|
|
182
|
+
if (typeof rawDecimals !== 'number' || !Number.isInteger(rawDecimals) || rawDecimals < 0 || rawDecimals > 36) {
|
|
183
|
+
throw new X402ValidationError(`decimals out of range or not integer: ${String(rawDecimals)}. Expected 0 to 36.`, X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
184
|
+
}
|
|
185
|
+
this.decimals = rawDecimals;
|
|
186
|
+
// Amount validation (strictly integer base units, no float, no boolean)
|
|
187
|
+
const rawAmount = data.amount;
|
|
188
|
+
if (rawAmount === undefined || rawAmount === null) {
|
|
189
|
+
throw new X402ValidationError('amount is a required field.', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
190
|
+
}
|
|
191
|
+
if (typeof rawAmount === 'boolean') {
|
|
192
|
+
throw new X402ValidationError('amount cannot be boolean.', X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
193
|
+
}
|
|
194
|
+
if (typeof rawAmount === 'number') {
|
|
195
|
+
if (!Number.isInteger(rawAmount) || !Number.isSafeInteger(rawAmount)) {
|
|
196
|
+
throw new X402ValidationError('amount cannot be float or unsafe number (precision loss risk). Use integer base units string or bigint.', X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
let amountBig;
|
|
200
|
+
try {
|
|
201
|
+
const strVal = String(rawAmount).trim();
|
|
202
|
+
if (!/^-?\d+$/.test(strVal)) {
|
|
203
|
+
throw new Error('Not an integer string');
|
|
204
|
+
}
|
|
205
|
+
amountBig = BigInt(strVal);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
throw new X402ValidationError(`Invalid amount format: ${JSON.stringify(rawAmount)}. Must be a positive integer base units.`, X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
209
|
+
}
|
|
210
|
+
if (amountBig <= 0n) {
|
|
211
|
+
throw new X402ValidationError(`amount must be strictly positive (> 0), got ${amountBig.toString()}.`, X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
212
|
+
}
|
|
213
|
+
if (amountBig > SQLITE_MAX_INT) {
|
|
214
|
+
throw new X402ValidationError(`amount exceeds supported maximum int64 (${SQLITE_MAX_INT.toString()}).`, X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
215
|
+
}
|
|
216
|
+
this.amount = amountBig.toString();
|
|
217
|
+
// Payee validation
|
|
218
|
+
const rawPayee = data.payee ?? null;
|
|
219
|
+
if (this.scheme === 'agentpay-wallet' && typeof rawPayee === 'string' && rawPayee.startsWith('agentpay:route:')) {
|
|
220
|
+
this.payee = rawPayee;
|
|
221
|
+
}
|
|
222
|
+
else if (rawPayee === null || rawPayee === undefined) {
|
|
223
|
+
throw new X402ValidationError('payee is required', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this.payee = validateEvmAddress(rawPayee, 'payee');
|
|
227
|
+
}
|
|
228
|
+
// Timestamps
|
|
229
|
+
const rawValidAfter = data.validAfter ?? data.valid_after;
|
|
230
|
+
const rawValidBefore = data.validBefore ?? data.valid_before;
|
|
231
|
+
this.validAfter = validateUnixTimestamp(rawValidAfter, 'validAfter');
|
|
232
|
+
this.validBefore = validateUnixTimestamp(rawValidBefore, 'validBefore');
|
|
233
|
+
if (this.validBefore <= this.validAfter) {
|
|
234
|
+
throw new X402ValidationError(`Invalid time window: validBefore (${this.validBefore}) must be strictly greater than validAfter (${this.validAfter}).`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
235
|
+
}
|
|
236
|
+
const rawFacilitatorUrl = data.facilitatorUrl ?? data.facilitator_url ?? null;
|
|
237
|
+
this.facilitatorUrl = typeof rawFacilitatorUrl === 'string' ? rawFacilitatorUrl : null;
|
|
238
|
+
const rawResourceUri = data.resourceUri ?? data.resource_uri ?? null;
|
|
239
|
+
this.resourceUri = typeof rawResourceUri === 'string' ? rawResourceUri : null;
|
|
240
|
+
this.extensions = data.extensions && typeof data.extensions === 'object' ? { ...data.extensions } : null;
|
|
241
|
+
// Scheme-specific cross-field checks
|
|
242
|
+
if (this.scheme === 'agentpay-wallet') {
|
|
243
|
+
if (this.network !== 'agentpay:internal-ledger' ||
|
|
244
|
+
!this.asset ||
|
|
245
|
+
!WALLET_FIAT_CURRENCIES.has(this.asset) ||
|
|
246
|
+
!this.resourceUri) {
|
|
247
|
+
throw new X402ValidationError('invalid agentpay-wallet challenge fields', X402ErrorCode.INVALID_SCHEME);
|
|
248
|
+
}
|
|
249
|
+
if (this.facilitatorUrl) {
|
|
250
|
+
throw new X402ValidationError('agentpay-wallet challenge must not name an EIP-3009 facilitator', X402ErrorCode.INVALID_SCHEME);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (!this.network || !this.asset || !this.payee || !this.facilitatorUrl) {
|
|
254
|
+
throw new X402ValidationError('EIP-3009 challenge requires network, asset, payee, and facilitatorUrl', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
255
|
+
}
|
|
256
|
+
if (this.extensions) {
|
|
257
|
+
Object.freeze(this.extensions);
|
|
258
|
+
}
|
|
259
|
+
Object.freeze(this);
|
|
260
|
+
}
|
|
261
|
+
static modelValidate(obj) {
|
|
262
|
+
if (obj instanceof PaymentChallenge) {
|
|
263
|
+
return obj;
|
|
264
|
+
}
|
|
265
|
+
return new PaymentChallenge(obj);
|
|
266
|
+
}
|
|
267
|
+
get amountBaseUnits() {
|
|
268
|
+
return BigInt(this.amount);
|
|
269
|
+
}
|
|
270
|
+
get amount_base_units() {
|
|
271
|
+
return BigInt(this.amount);
|
|
272
|
+
}
|
|
273
|
+
isExpired(currentTimeSeconds) {
|
|
274
|
+
return currentTimeSeconds > this.validBefore;
|
|
275
|
+
}
|
|
276
|
+
is_expired(currentTimeSeconds) {
|
|
277
|
+
return this.isExpired(currentTimeSeconds);
|
|
278
|
+
}
|
|
279
|
+
toPaymentRequest(options) {
|
|
280
|
+
const intentId = options?.intentId ?? this.challengeId;
|
|
281
|
+
const domain = options?.domain ? options.domain.trim().toLowerCase() : null;
|
|
282
|
+
const ttlSeconds = options?.ttlSeconds ?? 360;
|
|
283
|
+
const network = this.network ?? 'agentpay:internal-ledger';
|
|
284
|
+
const asset = this.asset ?? 'USD';
|
|
285
|
+
const payee = this.payee ?? 'agentpay:route:unknown';
|
|
286
|
+
return Object.freeze({
|
|
287
|
+
intentId,
|
|
288
|
+
amount: this.amountBaseUnits,
|
|
289
|
+
payee,
|
|
290
|
+
asset,
|
|
291
|
+
network,
|
|
292
|
+
domain,
|
|
293
|
+
ttlSeconds,
|
|
294
|
+
isAgentpayWallet: network === 'agentpay:internal-ledger' &&
|
|
295
|
+
WALLET_FIAT_CURRENCIES.has(asset) &&
|
|
296
|
+
AGENTPAY_ROUTE_RE.test(payee),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
toJSON() {
|
|
300
|
+
const out = {
|
|
301
|
+
version: this.version,
|
|
302
|
+
challengeId: this.challengeId,
|
|
303
|
+
scheme: this.scheme,
|
|
304
|
+
};
|
|
305
|
+
if (this.network !== null)
|
|
306
|
+
out.network = this.network;
|
|
307
|
+
if (this.asset !== null)
|
|
308
|
+
out.asset = this.asset;
|
|
309
|
+
if (this.assetSymbol !== null)
|
|
310
|
+
out.assetSymbol = this.assetSymbol;
|
|
311
|
+
out.decimals = this.decimals;
|
|
312
|
+
out.amount = this.amount;
|
|
313
|
+
if (this.payee !== null)
|
|
314
|
+
out.payee = this.payee;
|
|
315
|
+
out.validAfter = this.validAfter;
|
|
316
|
+
out.validBefore = this.validBefore;
|
|
317
|
+
if (this.facilitatorUrl !== null)
|
|
318
|
+
out.facilitatorUrl = this.facilitatorUrl;
|
|
319
|
+
if (this.resourceUri !== null)
|
|
320
|
+
out.resourceUri = this.resourceUri;
|
|
321
|
+
if (this.extensions !== null)
|
|
322
|
+
out.extensions = this.extensions;
|
|
323
|
+
return out;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
export class PaymentAuthorization {
|
|
327
|
+
version;
|
|
328
|
+
challengeId;
|
|
329
|
+
payer;
|
|
330
|
+
scheme;
|
|
331
|
+
nonce;
|
|
332
|
+
validAfter;
|
|
333
|
+
validBefore;
|
|
334
|
+
signature;
|
|
335
|
+
get challenge_id() {
|
|
336
|
+
return this.challengeId;
|
|
337
|
+
}
|
|
338
|
+
get valid_after() {
|
|
339
|
+
return this.validAfter;
|
|
340
|
+
}
|
|
341
|
+
get valid_before() {
|
|
342
|
+
return this.validBefore;
|
|
343
|
+
}
|
|
344
|
+
constructor(data) {
|
|
345
|
+
if (!data || typeof data !== 'object') {
|
|
346
|
+
throw new X402ValidationError('Invalid PaymentAuthorization payload', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
347
|
+
}
|
|
348
|
+
const version = data.version ?? '2.0';
|
|
349
|
+
if (version !== '2.0') {
|
|
350
|
+
throw new X402ValidationError(`Unsupported protocol version: ${JSON.stringify(version)}. Expected '2.0'.`, X402ErrorCode.UNSUPPORTED_VERSION);
|
|
351
|
+
}
|
|
352
|
+
this.version = version;
|
|
353
|
+
const rawChallengeId = data.challengeId ?? data.challenge_id;
|
|
354
|
+
if (typeof rawChallengeId !== 'string' || !rawChallengeId.trim()) {
|
|
355
|
+
throw new X402ValidationError('challengeId is required', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
356
|
+
}
|
|
357
|
+
this.challengeId = rawChallengeId.trim();
|
|
358
|
+
if (data.payer === undefined || data.payer === null) {
|
|
359
|
+
throw new X402ValidationError('payer is required', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
360
|
+
}
|
|
361
|
+
this.payer = validateEvmAddress(data.payer, 'payer');
|
|
362
|
+
this.scheme = data.scheme ?? 'EIP-3009';
|
|
363
|
+
if (typeof data.nonce !== 'string' || !NONCE_HEX_RE.test(data.nonce)) {
|
|
364
|
+
throw new X402ValidationError(`Invalid nonce: ${JSON.stringify(data.nonce)}. Must be a 32-byte hex string (64 hex characters).`, X402ErrorCode.INVALID_NONCE);
|
|
365
|
+
}
|
|
366
|
+
this.nonce = (data.nonce.startsWith('0x') ? data.nonce.toLowerCase() : `0x${data.nonce.toLowerCase()}`);
|
|
367
|
+
const rawValidAfter = data.validAfter ?? data.valid_after;
|
|
368
|
+
const rawValidBefore = data.validBefore ?? data.valid_before;
|
|
369
|
+
this.validAfter = validateUnixTimestamp(rawValidAfter, 'validAfter');
|
|
370
|
+
this.validBefore = validateUnixTimestamp(rawValidBefore, 'validBefore');
|
|
371
|
+
if (this.validBefore <= this.validAfter) {
|
|
372
|
+
throw new X402ValidationError(`Invalid time window: validBefore (${this.validBefore}) must be strictly greater than validAfter (${this.validAfter}).`, X402ErrorCode.INVALID_TIME_WINDOW);
|
|
373
|
+
}
|
|
374
|
+
if (data.signature instanceof SignatureData) {
|
|
375
|
+
this.signature = data.signature;
|
|
376
|
+
}
|
|
377
|
+
else if (typeof data.signature === 'string') {
|
|
378
|
+
const clean = data.signature.trim();
|
|
379
|
+
if (!clean) {
|
|
380
|
+
throw new X402ValidationError('signature string cannot be empty.', X402ErrorCode.INVALID_SIGNATURE);
|
|
381
|
+
}
|
|
382
|
+
this.signature = clean;
|
|
383
|
+
}
|
|
384
|
+
else if (data.signature && typeof data.signature === 'object') {
|
|
385
|
+
this.signature = new SignatureData(data.signature);
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
throw new X402ValidationError('Invalid signature format: expected SignatureData object or hex string', X402ErrorCode.INVALID_SIGNATURE);
|
|
389
|
+
}
|
|
390
|
+
Object.freeze(this);
|
|
391
|
+
}
|
|
392
|
+
static modelValidate(obj) {
|
|
393
|
+
if (obj instanceof PaymentAuthorization) {
|
|
394
|
+
return obj;
|
|
395
|
+
}
|
|
396
|
+
return new PaymentAuthorization(obj);
|
|
397
|
+
}
|
|
398
|
+
toJSON() {
|
|
399
|
+
return {
|
|
400
|
+
version: this.version,
|
|
401
|
+
challengeId: this.challengeId,
|
|
402
|
+
payer: this.payer,
|
|
403
|
+
scheme: this.scheme,
|
|
404
|
+
nonce: this.nonce,
|
|
405
|
+
validAfter: this.validAfter,
|
|
406
|
+
validBefore: this.validBefore,
|
|
407
|
+
signature: this.signature instanceof SignatureData ? this.signature.toJSON() : this.signature,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
export class WalletAuthorization {
|
|
412
|
+
version;
|
|
413
|
+
challengeId;
|
|
414
|
+
scheme;
|
|
415
|
+
nonce;
|
|
416
|
+
validAfter;
|
|
417
|
+
validBefore;
|
|
418
|
+
amount;
|
|
419
|
+
resourceUri;
|
|
420
|
+
requestBinding;
|
|
421
|
+
constructor(data) {
|
|
422
|
+
this.version = data.version ?? '2.0';
|
|
423
|
+
this.scheme = data.scheme ?? 'agentpay-wallet';
|
|
424
|
+
this.challengeId = (data.challengeId ?? data.challenge_id ?? '').trim();
|
|
425
|
+
this.resourceUri = (data.resourceUri ?? data.resource_uri ?? '').trim();
|
|
426
|
+
this.requestBinding = (data.requestBinding ?? data.request_binding ?? '').trim();
|
|
427
|
+
if (typeof data.nonce !== 'string' || !/^0x[0-9a-f]{64}$/.test(data.nonce)) {
|
|
428
|
+
throw new X402ValidationError('wallet nonce must be 32 random bytes encoded as lowercase hex', X402ErrorCode.INVALID_NONCE);
|
|
429
|
+
}
|
|
430
|
+
this.nonce = data.nonce;
|
|
431
|
+
if (typeof data.amount !== 'string' || !/^\d+$/.test(data.amount)) {
|
|
432
|
+
throw new X402ValidationError('wallet amount must be a positive int64 decimal string', X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
433
|
+
}
|
|
434
|
+
const amtBig = BigInt(data.amount);
|
|
435
|
+
if (amtBig <= 0n || amtBig > SQLITE_MAX_INT) {
|
|
436
|
+
throw new X402ValidationError('wallet amount must be a positive int64 decimal string', X402ErrorCode.INVALID_AMOUNT_FORMAT);
|
|
437
|
+
}
|
|
438
|
+
this.amount = data.amount;
|
|
439
|
+
this.validAfter = validateUnixTimestamp(data.validAfter ?? data.valid_after, 'validAfter');
|
|
440
|
+
this.validBefore = validateUnixTimestamp(data.validBefore ?? data.valid_before, 'validBefore');
|
|
441
|
+
if (this.version !== '2.0' || this.scheme !== 'agentpay-wallet' || this.validBefore <= this.validAfter) {
|
|
442
|
+
throw new X402ValidationError('invalid agentpay-wallet authorization fields', X402ErrorCode.INVALID_SCHEME);
|
|
443
|
+
}
|
|
444
|
+
if (!this.challengeId || !this.resourceUri || !/^sha256:[0-9a-f]{64}$/.test(this.requestBinding)) {
|
|
445
|
+
throw new X402ValidationError('wallet authorization is missing challenge binding fields', X402ErrorCode.MISSING_REQUIRED_FIELD);
|
|
446
|
+
}
|
|
447
|
+
Object.freeze(this);
|
|
448
|
+
}
|
|
449
|
+
toJSON() {
|
|
450
|
+
return {
|
|
451
|
+
version: this.version,
|
|
452
|
+
challengeId: this.challengeId,
|
|
453
|
+
scheme: this.scheme,
|
|
454
|
+
nonce: this.nonce,
|
|
455
|
+
validAfter: this.validAfter,
|
|
456
|
+
validBefore: this.validBefore,
|
|
457
|
+
amount: this.amount,
|
|
458
|
+
resourceUri: this.resourceUri,
|
|
459
|
+
requestBinding: this.requestBinding,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/core/models.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Multi-Dimensional State Enums and Entity Models for AgentPay.
|
|
3
|
+
*
|
|
4
|
+
* Defines the four orthogonal state objects adhering to specs/payment-state-machine-v2.md:
|
|
5
|
+
* 1. PaymentIntentState (Buyer request lifecycle)
|
|
6
|
+
* 2. SettlementState (Blockchain / clearing funds transfer)
|
|
7
|
+
* 3. FulfillmentState (Upstream API / resource payload delivery)
|
|
8
|
+
* 4. BudgetLedgerState (Buyer firewall local quota reservation)
|
|
9
|
+
*/
|
|
10
|
+
export declare enum PaymentIntentState {
|
|
11
|
+
CREATED = "CREATED",
|
|
12
|
+
AUTHORIZED = "AUTHORIZED",
|
|
13
|
+
PROCESSING = "PROCESSING",
|
|
14
|
+
SIGNATURE_SENT = "SIGNATURE_SENT",
|
|
15
|
+
COMPLETED = "COMPLETED",
|
|
16
|
+
SUCCEEDED = "SUCCEEDED",
|
|
17
|
+
REJECTED = "REJECTED",
|
|
18
|
+
EXPIRED = "EXPIRED",
|
|
19
|
+
CANCELLED = "CANCELLED",
|
|
20
|
+
RECOVERY_HOLD = "RECOVERY_HOLD"
|
|
21
|
+
}
|
|
22
|
+
export declare enum SettlementState {
|
|
23
|
+
NOT_STARTED = "NOT_STARTED",
|
|
24
|
+
NOT_SUBMITTED = "NOT_SUBMITTED",
|
|
25
|
+
SUBMITTED = "SUBMITTED",
|
|
26
|
+
PENDING = "PENDING",
|
|
27
|
+
CONFIRMED = "CONFIRMED",
|
|
28
|
+
SUCCESS = "SUCCESS",
|
|
29
|
+
FAILED = "FAILED",
|
|
30
|
+
REORGED = "REORGED",
|
|
31
|
+
UNKNOWN = "UNKNOWN"
|
|
32
|
+
}
|
|
33
|
+
export declare enum FulfillmentState {
|
|
34
|
+
NOT_STARTED = "NOT_STARTED",
|
|
35
|
+
NOT_DELIVERED = "NOT_DELIVERED",
|
|
36
|
+
PROCESSING = "PROCESSING",
|
|
37
|
+
DELIVERING = "DELIVERING",
|
|
38
|
+
DELIVERED = "DELIVERED",
|
|
39
|
+
FAILED = "FAILED",
|
|
40
|
+
RECOVERY_REQUIRED = "RECOVERY_REQUIRED"
|
|
41
|
+
}
|
|
42
|
+
export declare enum BudgetLedgerState {
|
|
43
|
+
RESERVED = "RESERVED",
|
|
44
|
+
COMMITTED = "COMMITTED",
|
|
45
|
+
RELEASED = "RELEASED"
|
|
46
|
+
}
|
|
47
|
+
export interface BuyerIntentRecordInput {
|
|
48
|
+
intentId: string;
|
|
49
|
+
policyId: string;
|
|
50
|
+
idempotencyKey: string;
|
|
51
|
+
payerAddress: string;
|
|
52
|
+
payeeAddress: string;
|
|
53
|
+
assetAddress: string;
|
|
54
|
+
networkId: string;
|
|
55
|
+
amountBaseUnits: bigint | number;
|
|
56
|
+
status?: PaymentIntentState;
|
|
57
|
+
nonce?: string | null;
|
|
58
|
+
validAfter?: number | null;
|
|
59
|
+
validBefore?: number | null;
|
|
60
|
+
rawSignature?: string | null;
|
|
61
|
+
createdAt?: number;
|
|
62
|
+
updatedAt?: number;
|
|
63
|
+
}
|
|
64
|
+
export declare class BuyerIntentRecord {
|
|
65
|
+
readonly intentId: string;
|
|
66
|
+
readonly policyId: string;
|
|
67
|
+
readonly idempotencyKey: string;
|
|
68
|
+
readonly payerAddress: string;
|
|
69
|
+
readonly payeeAddress: string;
|
|
70
|
+
readonly assetAddress: string;
|
|
71
|
+
readonly networkId: string;
|
|
72
|
+
readonly amountBaseUnits: bigint;
|
|
73
|
+
readonly status: PaymentIntentState;
|
|
74
|
+
readonly nonce: string | null;
|
|
75
|
+
readonly validAfter: number | null;
|
|
76
|
+
readonly validBefore: number | null;
|
|
77
|
+
readonly rawSignature: string | null;
|
|
78
|
+
readonly createdAt: number;
|
|
79
|
+
readonly updatedAt: number;
|
|
80
|
+
constructor(data: BuyerIntentRecordInput);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,aAAa,kBAAkB;CAChC;AAED,oBAAY,eAAe;IACzB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,oBAAY,gBAAgB;IAC1B,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,iBAAiB,sBAAsB;CACxC;AAED,oBAAY,iBAAiB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,sBAAsB;CAmBzC"}
|