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.
Files changed (133) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +125 -4
  3. package/dist/client/client.d.ts +37 -0
  4. package/dist/client/client.d.ts.map +1 -0
  5. package/dist/client/client.js +90 -0
  6. package/dist/client/client.js.map +1 -0
  7. package/dist/client/errors.d.ts +23 -0
  8. package/dist/client/errors.d.ts.map +1 -0
  9. package/dist/client/errors.js +38 -0
  10. package/dist/client/errors.js.map +1 -0
  11. package/dist/client/index.d.ts +6 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.js +6 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/interfaces.d.ts +34 -0
  16. package/dist/client/interfaces.d.ts.map +1 -0
  17. package/dist/client/interfaces.js +5 -0
  18. package/dist/client/interfaces.js.map +1 -0
  19. package/dist/client/signer.d.ts +136 -0
  20. package/dist/client/signer.d.ts.map +1 -0
  21. package/dist/client/signer.js +300 -0
  22. package/dist/client/signer.js.map +1 -0
  23. package/dist/client/transport.d.ts +44 -0
  24. package/dist/client/transport.d.ts.map +1 -0
  25. package/dist/client/transport.js +389 -0
  26. package/dist/client/transport.js.map +1 -0
  27. package/dist/core/codecs.d.ts +35 -0
  28. package/dist/core/codecs.d.ts.map +1 -0
  29. package/dist/core/codecs.js +177 -0
  30. package/dist/core/codecs.js.map +1 -0
  31. package/dist/core/errors.d.ts +33 -0
  32. package/dist/core/errors.d.ts.map +1 -0
  33. package/dist/core/errors.js +48 -0
  34. package/dist/core/errors.js.map +1 -0
  35. package/dist/core/index.d.ts +6 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/index.js +6 -0
  38. package/dist/core/index.js.map +1 -0
  39. package/dist/core/interop.d.ts +10 -0
  40. package/dist/core/interop.d.ts.map +1 -0
  41. package/dist/core/interop.js +28 -0
  42. package/dist/core/interop.js.map +1 -0
  43. package/dist/core/models.d.ts +155 -0
  44. package/dist/core/models.d.ts.map +1 -0
  45. package/dist/core/models.js +463 -0
  46. package/dist/core/models.js.map +1 -0
  47. package/dist/core/state.d.ts +82 -0
  48. package/dist/core/state.d.ts.map +1 -0
  49. package/dist/core/state.js +87 -0
  50. package/dist/core/state.js.map +1 -0
  51. package/dist/evm/constants.d.ts +52 -0
  52. package/dist/evm/constants.d.ts.map +1 -0
  53. package/dist/evm/constants.js +72 -0
  54. package/dist/evm/constants.js.map +1 -0
  55. package/dist/evm/eip3009.d.ts +43 -0
  56. package/dist/evm/eip3009.d.ts.map +1 -0
  57. package/dist/evm/eip3009.js +145 -0
  58. package/dist/evm/eip3009.js.map +1 -0
  59. package/dist/evm/index.d.ts +3 -0
  60. package/dist/evm/index.d.ts.map +1 -0
  61. package/dist/evm/index.js +3 -0
  62. package/dist/evm/index.js.map +1 -0
  63. package/dist/index.d.ts +12 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +12 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/integrations/index.d.ts +4 -0
  68. package/dist/integrations/index.d.ts.map +1 -0
  69. package/dist/integrations/index.js +4 -0
  70. package/dist/integrations/index.js.map +1 -0
  71. package/dist/integrations/langchain.d.ts +40 -0
  72. package/dist/integrations/langchain.d.ts.map +1 -0
  73. package/dist/integrations/langchain.js +68 -0
  74. package/dist/integrations/langchain.js.map +1 -0
  75. package/dist/integrations/mcp.d.ts +29 -0
  76. package/dist/integrations/mcp.d.ts.map +1 -0
  77. package/dist/integrations/mcp.js +73 -0
  78. package/dist/integrations/mcp.js.map +1 -0
  79. package/dist/integrations/vercel-ai.d.ts +31 -0
  80. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  81. package/dist/integrations/vercel-ai.js +50 -0
  82. package/dist/integrations/vercel-ai.js.map +1 -0
  83. package/dist/policy/db.d.ts +14 -0
  84. package/dist/policy/db.d.ts.map +1 -0
  85. package/dist/policy/db.js +86 -0
  86. package/dist/policy/db.js.map +1 -0
  87. package/dist/policy/errors.d.ts +31 -0
  88. package/dist/policy/errors.d.ts.map +1 -0
  89. package/dist/policy/errors.js +48 -0
  90. package/dist/policy/errors.js.map +1 -0
  91. package/dist/policy/evaluator.d.ts +22 -0
  92. package/dist/policy/evaluator.d.ts.map +1 -0
  93. package/dist/policy/evaluator.js +152 -0
  94. package/dist/policy/evaluator.js.map +1 -0
  95. package/dist/policy/index.d.ts +7 -0
  96. package/dist/policy/index.d.ts.map +1 -0
  97. package/dist/policy/index.js +7 -0
  98. package/dist/policy/index.js.map +1 -0
  99. package/dist/policy/interfaces.d.ts +59 -0
  100. package/dist/policy/interfaces.d.ts.map +1 -0
  101. package/dist/policy/interfaces.js +7 -0
  102. package/dist/policy/interfaces.js.map +1 -0
  103. package/dist/policy/models.d.ts +161 -0
  104. package/dist/policy/models.d.ts.map +1 -0
  105. package/dist/policy/models.js +449 -0
  106. package/dist/policy/models.js.map +1 -0
  107. package/dist/policy/sqlite-engine.d.ts +28 -0
  108. package/dist/policy/sqlite-engine.d.ts.map +1 -0
  109. package/dist/policy/sqlite-engine.js +501 -0
  110. package/dist/policy/sqlite-engine.js.map +1 -0
  111. package/dist/state/buyer-coordinator.d.ts +33 -0
  112. package/dist/state/buyer-coordinator.d.ts.map +1 -0
  113. package/dist/state/buyer-coordinator.js +363 -0
  114. package/dist/state/buyer-coordinator.js.map +1 -0
  115. package/dist/state/errors.d.ts +45 -0
  116. package/dist/state/errors.d.ts.map +1 -0
  117. package/dist/state/errors.js +88 -0
  118. package/dist/state/errors.js.map +1 -0
  119. package/dist/state/guards.d.ts +24 -0
  120. package/dist/state/guards.d.ts.map +1 -0
  121. package/dist/state/guards.js +211 -0
  122. package/dist/state/guards.js.map +1 -0
  123. package/dist/state/index.d.ts +5 -0
  124. package/dist/state/index.d.ts.map +1 -0
  125. package/dist/state/index.js +5 -0
  126. package/dist/state/index.js.map +1 -0
  127. package/dist/state/reconciliation.d.ts +105 -0
  128. package/dist/state/reconciliation.d.ts.map +1 -0
  129. package/dist/state/reconciliation.js +297 -0
  130. package/dist/state/reconciliation.js.map +1 -0
  131. package/package.json +98 -12
  132. package/index.d.ts +0 -2
  133. package/index.js +0 -8
@@ -0,0 +1,389 @@
1
+ /**
2
+ * HTTP Fetch Interceptor and Transport for AgentPay.
3
+ *
4
+ * Implements transparent 402 Payment Required interception, policy evaluation,
5
+ * EIP-712 / EIP-3009 signing, agentpay-wallet authorization, and post-dispatch safety.
6
+ */
7
+ import { createHash, randomUUID } from 'node:crypto';
8
+ import { extractChallengeFromHeaders, HEADER_PAYMENT_SIGNATURE, injectAuthorizationToHeaders, encodeWalletAuthorization, } from '../core/codecs.js';
9
+ import { WalletAuthorization } from '../core/models.js';
10
+ import { PolicyErrorCode, PolicyViolationError } from '../policy/errors.js';
11
+ export const ALLOW_UNMETERED_HEADER = 'x-agentpay-allow-unmetered';
12
+ export const DEFAULT_CREDENTIAL_HEADERS = ['x-agent-key'];
13
+ export const DEFAULT_CREDENTIAL_VALUE_PREFIXES = ['apk_'];
14
+ function safeRecordFailure(policy, reason) {
15
+ const p = policy;
16
+ if (typeof p.recordFailure === 'function') {
17
+ try {
18
+ p.recordFailure(reason);
19
+ }
20
+ catch {
21
+ // Avoid masking original error
22
+ }
23
+ }
24
+ }
25
+ function hasCredential(headers, credentialHeaders, credentialValuePrefixes) {
26
+ for (const name of credentialHeaders) {
27
+ if (headers.has(name)) {
28
+ return true;
29
+ }
30
+ }
31
+ const auth = headers.get('authorization');
32
+ if (auth && credentialValuePrefixes.length > 0) {
33
+ let token = auth.trim();
34
+ if (token.toLowerCase().startsWith('bearer ')) {
35
+ token = token.slice(7).trim();
36
+ }
37
+ for (const prefix of credentialValuePrefixes) {
38
+ if (token.startsWith(prefix)) {
39
+ return true;
40
+ }
41
+ }
42
+ }
43
+ return false;
44
+ }
45
+ export function computeRequestBinding(method, urlStr, bodyBytes) {
46
+ const url = new URL(urlStr);
47
+ const path = url.pathname || '/';
48
+ const query = url.search ? url.search.slice(1) : '';
49
+ const bodyHash = createHash('sha256').update(bodyBytes ?? new Uint8Array(0)).digest('hex');
50
+ const canonical = `${method.toUpperCase()}\n${path}\n${query}\n${bodyHash}`;
51
+ const canonicalHash = createHash('sha256').update(Buffer.from(canonical, 'utf-8')).digest('hex');
52
+ return `sha256:${canonicalHash}`;
53
+ }
54
+ export class AgentPayTransport {
55
+ options;
56
+ baseFetch;
57
+ clock;
58
+ credentialHeaders;
59
+ credentialValuePrefixes;
60
+ constructor(options) {
61
+ const credMode = options.unmeteredCredentialPolicy ?? 'block';
62
+ if (credMode !== 'block' && credMode !== 'meter' && credMode !== 'allow') {
63
+ throw new Error(`unmeteredCredentialPolicy must be block/meter/allow, got '${credMode}'`);
64
+ }
65
+ if (credMode === 'meter') {
66
+ if (typeof options.estimateCost !== 'function') {
67
+ throw new Error('meter mode requires estimateCost callback');
68
+ }
69
+ const p = options.policy;
70
+ if (typeof p.reserveMetered !== 'function' || typeof p.settleMetered !== 'function') {
71
+ throw new Error('meter mode requires a policy implementing IMeteredPolicyEngine');
72
+ }
73
+ }
74
+ this.options = {
75
+ autoRetryOn402: true,
76
+ raiseOnPolicyRejection: false,
77
+ unmeteredCredentialPolicy: 'block',
78
+ credentialTtlSeconds: 60,
79
+ walletChallengeMode: false,
80
+ ...options,
81
+ };
82
+ this.baseFetch = options.baseFetch ?? globalThis.fetch.bind(globalThis);
83
+ this.clock = options.clock ?? (options.policy._clock ?? (() => Math.floor(Date.now() / 1000)));
84
+ this.credentialHeaders = (options.credentialHeaders ?? DEFAULT_CREDENTIAL_HEADERS).map((h) => h.toLowerCase());
85
+ this.credentialValuePrefixes = options.credentialValuePrefixes ?? DEFAULT_CREDENTIAL_VALUE_PREFIXES;
86
+ }
87
+ async fetch(input, init) {
88
+ let urlStr;
89
+ let reqMethod;
90
+ if (input instanceof Request) {
91
+ urlStr = input.url;
92
+ reqMethod = (init?.method ?? input.method).toUpperCase();
93
+ }
94
+ else if (typeof input === 'string') {
95
+ urlStr = input;
96
+ reqMethod = (init?.method ?? 'GET').toUpperCase();
97
+ }
98
+ else {
99
+ urlStr = input.toString();
100
+ reqMethod = (init?.method ?? 'GET').toUpperCase();
101
+ }
102
+ if (this.options.baseUrl) {
103
+ urlStr = new URL(urlStr, this.options.baseUrl).toString();
104
+ }
105
+ if (init && 'params' in init && init.params) {
106
+ const p = init.params;
107
+ try {
108
+ const urlObj = new URL(urlStr);
109
+ if (p instanceof URLSearchParams) {
110
+ p.forEach((v, k) => urlObj.searchParams.append(k, v));
111
+ }
112
+ else if (typeof p === 'object') {
113
+ for (const [k, v] of Object.entries(p)) {
114
+ if (v !== undefined && v !== null) {
115
+ urlObj.searchParams.append(k, String(v));
116
+ }
117
+ }
118
+ }
119
+ urlStr = urlObj.toString();
120
+ }
121
+ catch {
122
+ // Leave urlStr as is if relative without baseUrl
123
+ }
124
+ }
125
+ const headers = new Headers();
126
+ if (this.options.defaultHeaders) {
127
+ for (const [k, v] of Object.entries(this.options.defaultHeaders)) {
128
+ headers.set(k, v);
129
+ }
130
+ }
131
+ if (input instanceof Request) {
132
+ input.headers.forEach((v, k) => headers.set(k, v));
133
+ }
134
+ if (init?.headers) {
135
+ if (init.headers instanceof Headers) {
136
+ init.headers.forEach((v, k) => headers.set(k, v));
137
+ }
138
+ else if (Array.isArray(init.headers)) {
139
+ for (const [k, v] of init.headers) {
140
+ headers.set(k, v);
141
+ }
142
+ }
143
+ else {
144
+ for (const [k, v] of Object.entries(init.headers)) {
145
+ if (v !== undefined) {
146
+ headers.set(k, String(v));
147
+ }
148
+ }
149
+ }
150
+ }
151
+ let bodyBytes = null;
152
+ if (init?.body !== undefined && init?.body !== null) {
153
+ if (typeof init.body === 'string') {
154
+ bodyBytes = new TextEncoder().encode(init.body);
155
+ }
156
+ else if (init.body instanceof Uint8Array) {
157
+ bodyBytes = init.body;
158
+ }
159
+ else if (init.body instanceof ArrayBuffer) {
160
+ bodyBytes = new Uint8Array(init.body);
161
+ }
162
+ else {
163
+ const arrayBuf = await new Response(init.body).arrayBuffer();
164
+ bodyBytes = new Uint8Array(arrayBuf);
165
+ }
166
+ }
167
+ else if (input instanceof Request && input.body) {
168
+ const arrayBuf = await input.arrayBuffer();
169
+ bodyBytes = new Uint8Array(arrayBuf);
170
+ }
171
+ const { method: _m, headers: _h, body: _b, ...restInit } = init ?? {};
172
+ const allowUnmetered = headers.get(ALLOW_UNMETERED_HEADER) === 'true';
173
+ const isCredential = !allowUnmetered && hasCredential(headers, this.credentialHeaders, this.credentialValuePrefixes);
174
+ let meterIntentId = null;
175
+ if (isCredential) {
176
+ if (this.options.walletChallengeMode) {
177
+ // First request is allowed through to obtain 402 challenge
178
+ }
179
+ else if (this.options.unmeteredCredentialPolicy === 'allow') {
180
+ // opt-in bypass
181
+ }
182
+ else if (this.options.unmeteredCredentialPolicy === 'block') {
183
+ throw new PolicyViolationError(PolicyErrorCode.UNMETERED_CREDENTIAL, 'Request carries a gateway credential that can bypass the HTTP 402 flow; the local budget/RPM firewall cannot meter it. Blocked (fail-closed).');
184
+ }
185
+ else if (this.options.unmeteredCredentialPolicy === 'meter') {
186
+ const dummyReq = new Request(urlStr, {
187
+ method: reqMethod,
188
+ headers,
189
+ body: bodyBytes ? new Uint8Array(bodyBytes) : undefined,
190
+ });
191
+ let estimate;
192
+ try {
193
+ estimate = this.options.estimateCost(dummyReq);
194
+ }
195
+ catch {
196
+ throw new PolicyViolationError(PolicyErrorCode.INVALID_AMOUNT_FORMAT, 'estimateCost callback failed');
197
+ }
198
+ const intentId = `cred_${randomUUID ? randomUUID().replace(/-/g, '') : Math.random().toString(16).slice(2)}`;
199
+ let host = null;
200
+ try {
201
+ host = new URL(urlStr).hostname;
202
+ }
203
+ catch {
204
+ host = null;
205
+ }
206
+ const meteredPolicy = this.options.policy;
207
+ const decision = meteredPolicy.reserveMetered(intentId, estimate, host, this.options.credentialTtlSeconds ?? 60);
208
+ if (!decision.approved) {
209
+ const code = decision.errorCode ?? PolicyErrorCode.POLICY_SYSTEM_ERROR;
210
+ throw new PolicyViolationError(code, `credential call rejected by policy: ${code}`);
211
+ }
212
+ meterIntentId = intentId;
213
+ }
214
+ }
215
+ let response;
216
+ try {
217
+ response = await this.baseFetch(urlStr, {
218
+ ...restInit,
219
+ method: reqMethod,
220
+ headers,
221
+ body: bodyBytes ? new Uint8Array(bodyBytes) : undefined,
222
+ });
223
+ }
224
+ catch (err) {
225
+ if (meterIntentId) {
226
+ safeRecordFailure(this.options.policy, 'transport error on credential call');
227
+ }
228
+ throw err;
229
+ }
230
+ if (meterIntentId) {
231
+ const code = response.status;
232
+ const meteredPolicy = this.options.policy;
233
+ if (code >= 200 && code < 300) {
234
+ let actual = null;
235
+ if (this.options.actualCost) {
236
+ try {
237
+ actual = this.options.actualCost(response);
238
+ }
239
+ catch {
240
+ // Keep estimate if callback fails
241
+ }
242
+ }
243
+ meteredPolicy.settleMetered(meterIntentId, actual);
244
+ }
245
+ else if (code >= 500) {
246
+ safeRecordFailure(this.options.policy, `upstream ${code} on credential call`);
247
+ }
248
+ else {
249
+ try {
250
+ this.options.policy.release(meterIntentId);
251
+ }
252
+ catch {
253
+ // ignore
254
+ }
255
+ }
256
+ }
257
+ if (this.options.walletChallengeMode && isCredential && response.status >= 200 && response.status < 300) {
258
+ throw new PolicyViolationError(PolicyErrorCode.UNMETERED_CREDENTIAL, 'Wallet challenge mode expected a 402 price challenge; the gateway served the credential request directly.');
259
+ }
260
+ if (response.status !== 402 || this.options.autoRetryOn402 === false) {
261
+ return response;
262
+ }
263
+ const challenge = extractChallengeFromHeaders(response.headers);
264
+ if (!challenge) {
265
+ return response;
266
+ }
267
+ if (challenge.isExpired(this.clock())) {
268
+ return response;
269
+ }
270
+ if (challenge.scheme !== 'EIP-3009' && challenge.scheme !== 'agentpay-wallet') {
271
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, `unsupported payment scheme: ${challenge.scheme}`);
272
+ }
273
+ let domain = null;
274
+ try {
275
+ domain = new URL(urlStr).hostname;
276
+ }
277
+ catch {
278
+ domain = null;
279
+ }
280
+ if (challenge.scheme === 'agentpay-wallet') {
281
+ const expectedBinding = computeRequestBinding(reqMethod, urlStr, bodyBytes);
282
+ const ext = challenge.extensions;
283
+ if (ext?.['requestBinding'] !== expectedBinding) {
284
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet challenge requestBinding mismatch');
285
+ }
286
+ if (!ext?.['routeId']) {
287
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet challenge missing routeId');
288
+ }
289
+ const urlObj = new URL(urlStr);
290
+ const path = urlObj.pathname || '/';
291
+ if (challenge.resourceUri !== path) {
292
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet challenge resourceUri mismatch');
293
+ }
294
+ }
295
+ const paymentRequest = challenge.toPaymentRequest({ domain: domain ?? undefined });
296
+ const decision = this.options.policy.reserve({
297
+ intentId: paymentRequest.intentId,
298
+ amount: paymentRequest.amount,
299
+ payee: paymentRequest.payee,
300
+ asset: paymentRequest.asset,
301
+ network: paymentRequest.network,
302
+ domain: paymentRequest.domain,
303
+ ttlSeconds: paymentRequest.ttlSeconds,
304
+ });
305
+ if (!decision.approved) {
306
+ if (this.options.raiseOnPolicyRejection) {
307
+ const code = decision.errorCode ?? PolicyErrorCode.POLICY_SYSTEM_ERROR;
308
+ throw new PolicyViolationError(code, `Payment policy rejected 402 challenge: ${code}`);
309
+ }
310
+ return response;
311
+ }
312
+ if (!decision.reservation) {
313
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'approved decision without reservation');
314
+ }
315
+ const reservation = decision.reservation;
316
+ const retryHeaders = new Headers(headers);
317
+ try {
318
+ if (challenge.scheme === 'agentpay-wallet') {
319
+ if (reservation.intentId !== challenge.challengeId || reservation.amount !== challenge.amountBaseUnits) {
320
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet reservation does not match challenge');
321
+ }
322
+ if (reservation.expiresAt < challenge.validBefore) {
323
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet reservation expires before challenge');
324
+ }
325
+ const ext = challenge.extensions;
326
+ const requestBinding = ext?.['requestBinding'];
327
+ if (!requestBinding) {
328
+ throw new PolicyViolationError(PolicyErrorCode.POLICY_SYSTEM_ERROR, 'wallet challenge missing requestBinding');
329
+ }
330
+ const nonceBytes = new Uint8Array(32);
331
+ crypto.getRandomValues(nonceBytes);
332
+ const nonce = `0x${Buffer.from(nonceBytes).toString('hex')}`;
333
+ const walletAuth = new WalletAuthorization({
334
+ challengeId: challenge.challengeId,
335
+ nonce,
336
+ validAfter: challenge.validAfter,
337
+ validBefore: challenge.validBefore,
338
+ amount: challenge.amount,
339
+ resourceUri: challenge.resourceUri ?? '/',
340
+ requestBinding,
341
+ });
342
+ retryHeaders.set(HEADER_PAYMENT_SIGNATURE, encodeWalletAuthorization(walletAuth));
343
+ }
344
+ else {
345
+ const authorization = await this.options.signer.signPaymentAuthorization(challenge, reservation);
346
+ injectAuthorizationToHeaders(retryHeaders, authorization);
347
+ }
348
+ }
349
+ catch (err) {
350
+ try {
351
+ this.options.policy.release(reservation.intentId);
352
+ }
353
+ catch {
354
+ // ignore
355
+ }
356
+ throw err;
357
+ }
358
+ let retryResponse;
359
+ try {
360
+ retryResponse = await this.baseFetch(urlStr, {
361
+ ...restInit,
362
+ method: reqMethod,
363
+ headers: retryHeaders,
364
+ body: bodyBytes ? new Uint8Array(bodyBytes) : undefined,
365
+ });
366
+ }
367
+ catch (err) {
368
+ safeRecordFailure(this.options.policy, 'transport error after payment signature sent');
369
+ throw err;
370
+ }
371
+ const statusCode = retryResponse.status;
372
+ if (statusCode >= 200 && statusCode < 300) {
373
+ this.options.policy.commit(reservation.intentId);
374
+ }
375
+ else if (challenge.scheme === 'agentpay-wallet' && statusCode >= 400 && statusCode < 500) {
376
+ this.options.policy.release(reservation.intentId);
377
+ }
378
+ else if (statusCode >= 500) {
379
+ safeRecordFailure(this.options.policy, `upstream ${statusCode} after payment`);
380
+ }
381
+ return retryResponse;
382
+ }
383
+ }
384
+ export function createAgentPayFetch(options) {
385
+ const transport = new AgentPayTransport(options);
386
+ const fetchFn = (input, init) => transport.fetch(input, init);
387
+ return fetchFn;
388
+ }
389
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * x402 V2 HTTP Header Codecs & Serialization Utilities.
3
+ *
4
+ * Implements Base64URL and standard JSON encoding/decoding for HTTP headers:
5
+ * - PAYMENT-REQUIRED (Response from Seller)
6
+ * - PAYMENT-SIGNATURE (Request from Buyer)
7
+ *
8
+ * Adheres strictly to RFC 4648 Base64URL encoding and the x402 V2 specification.
9
+ */
10
+ import { PaymentAuthorization, PaymentChallenge, WalletAuthorization } from './models.js';
11
+ export declare const HEADER_PAYMENT_REQUIRED = "PAYMENT-REQUIRED";
12
+ export declare const HEADER_PAYMENT_SIGNATURE = "PAYMENT-SIGNATURE";
13
+ /** Encode bytes or string into unpadded Base64URL string. */
14
+ export declare function base64urlEncode(data: Uint8Array | Buffer | string): string;
15
+ /** Decode Base64URL string (with or without padding) into raw bytes. */
16
+ export declare function base64urlDecode(s: string): Uint8Array;
17
+ export declare function encodeChallenge(challenge: PaymentChallenge, options?: {
18
+ base64Url?: boolean;
19
+ }): string;
20
+ export declare function decodeChallenge(headerValue: string): PaymentChallenge;
21
+ export declare function encodeAuthorization(authorization: PaymentAuthorization, options?: {
22
+ base64Url?: boolean;
23
+ }): string;
24
+ export declare function encodeWalletAuthorization(authorization: WalletAuthorization, options?: {
25
+ base64Url?: boolean;
26
+ }): string;
27
+ export declare function decodeAuthorization(headerValue: string): PaymentAuthorization;
28
+ export type HeadersLike = Headers | Record<string, string | undefined> | Map<string, string>;
29
+ export declare function extractChallengeFromHeaders(headers: HeadersLike): PaymentChallenge | null;
30
+ export declare function extractAuthorizationFromHeaders(headers: HeadersLike): PaymentAuthorization | null;
31
+ export declare function injectAuthorizationToHeaders(headers: Headers | Record<string, string> | Map<string, string>, authorization: PaymentAuthorization, options?: {
32
+ base64Url?: boolean;
33
+ headerName?: string;
34
+ }): void;
35
+ //# sourceMappingURL=codecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/core/codecs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE1F,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAM5D,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAO1E;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CASrD;AAgDD,wBAAgB,eAAe,CAC7B,SAAS,EAAE,gBAAgB,EAC3B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,MAAM,CAWR;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAYrE;AAMD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,oBAAoB,EACnC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,MAAM,CAWR;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,mBAAmB,EAClC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,MAAM,CAQR;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CAY7E;AAMD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAsB7F,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAMzF;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,WAAW,GAAG,oBAAoB,GAAG,IAAI,CAMjG;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/D,aAAa,EAAE,oBAAoB,EACnC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,IAAI,CAWN"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * x402 V2 HTTP Header Codecs & Serialization Utilities.
3
+ *
4
+ * Implements Base64URL and standard JSON encoding/decoding for HTTP headers:
5
+ * - PAYMENT-REQUIRED (Response from Seller)
6
+ * - PAYMENT-SIGNATURE (Request from Buyer)
7
+ *
8
+ * Adheres strictly to RFC 4648 Base64URL encoding and the x402 V2 specification.
9
+ */
10
+ import { X402DecodeError, X402EncodeError, X402ErrorCode, X402ValidationError } from './errors.js';
11
+ import { PaymentAuthorization, PaymentChallenge } from './models.js';
12
+ export const HEADER_PAYMENT_REQUIRED = 'PAYMENT-REQUIRED';
13
+ export const HEADER_PAYMENT_SIGNATURE = 'PAYMENT-SIGNATURE';
14
+ // ---------------------------------------------------------------------------
15
+ // Base64URL Helpers (RFC 4648 §5)
16
+ // ---------------------------------------------------------------------------
17
+ /** Encode bytes or string into unpadded Base64URL string. */
18
+ export function base64urlEncode(data) {
19
+ const buf = typeof data === 'string' ? Buffer.from(data, 'utf-8') : Buffer.from(data);
20
+ return buf
21
+ .toString('base64')
22
+ .replace(/\+/g, '-')
23
+ .replace(/\//g, '_')
24
+ .replace(/=+$/, '');
25
+ }
26
+ /** Decode Base64URL string (with or without padding) into raw bytes. */
27
+ export function base64urlDecode(s) {
28
+ const clean = s.trim();
29
+ if (!clean || !/^[A-Za-z0-9\-_]+=*$/.test(clean)) {
30
+ throw new ValueError('Malformed Base64URL input');
31
+ }
32
+ const missingPadding = clean.length % 4;
33
+ const padded = missingPadding ? clean + '='.repeat(4 - missingPadding) : clean;
34
+ const b64 = padded.replace(/-/g, '+').replace(/_/g, '/');
35
+ return new Uint8Array(Buffer.from(b64, 'base64'));
36
+ }
37
+ class ValueError extends Error {
38
+ }
39
+ function parseRawHeaderValue(headerValue) {
40
+ if (typeof headerValue !== 'string' || !headerValue.trim()) {
41
+ throw new X402DecodeError('Header value cannot be empty.', X402ErrorCode.MALFORMED_HEADER);
42
+ }
43
+ const val = headerValue.trim();
44
+ // Fast path: direct JSON string
45
+ if (val.startsWith('{') && val.endsWith('}')) {
46
+ try {
47
+ const parsed = JSON.parse(val);
48
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
49
+ throw new Error('Parsed JSON must be a JSON object');
50
+ }
51
+ return parsed;
52
+ }
53
+ catch (exc) {
54
+ throw new X402DecodeError(`Failed to parse raw JSON header value: ${exc instanceof Error ? exc.message : String(exc)}`, X402ErrorCode.MALFORMED_HEADER);
55
+ }
56
+ }
57
+ // Attempt Base64URL decoding
58
+ try {
59
+ const rawBytes = base64urlDecode(val);
60
+ const jsonStr = Buffer.from(rawBytes).toString('utf-8');
61
+ const parsed = JSON.parse(jsonStr);
62
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
63
+ throw new Error('Parsed Base64 payload must be a JSON object');
64
+ }
65
+ return parsed;
66
+ }
67
+ catch (exc) {
68
+ throw new X402DecodeError(`Failed to decode Base64URL x402 header value: ${exc instanceof Error ? exc.message : String(exc)}`, X402ErrorCode.MALFORMED_HEADER);
69
+ }
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Challenge Codecs (PAYMENT-REQUIRED)
73
+ // ---------------------------------------------------------------------------
74
+ export function encodeChallenge(challenge, options) {
75
+ const useBase64Url = options?.base64Url ?? true;
76
+ try {
77
+ const jsonStr = JSON.stringify(challenge.toJSON());
78
+ return useBase64Url ? base64urlEncode(jsonStr) : jsonStr;
79
+ }
80
+ catch (exc) {
81
+ throw new X402EncodeError(`Failed to encode challenge: ${exc instanceof Error ? exc.message : String(exc)}`, X402ErrorCode.MALFORMED_HEADER);
82
+ }
83
+ }
84
+ export function decodeChallenge(headerValue) {
85
+ const payloadDict = parseRawHeaderValue(headerValue);
86
+ try {
87
+ return PaymentChallenge.modelValidate(payloadDict);
88
+ }
89
+ catch (exc) {
90
+ if (exc instanceof X402ValidationError) {
91
+ throw exc;
92
+ }
93
+ throw new X402ValidationError(`Invalid challenge payload: ${exc instanceof Error ? exc.message : String(exc)}`);
94
+ }
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Authorization Codecs (PAYMENT-SIGNATURE)
98
+ // ---------------------------------------------------------------------------
99
+ export function encodeAuthorization(authorization, options) {
100
+ const useBase64Url = options?.base64Url ?? true;
101
+ try {
102
+ const jsonStr = JSON.stringify(authorization.toJSON());
103
+ return useBase64Url ? base64urlEncode(jsonStr) : jsonStr;
104
+ }
105
+ catch (exc) {
106
+ throw new X402EncodeError(`Failed to encode authorization: ${exc instanceof Error ? exc.message : String(exc)}`, X402ErrorCode.MALFORMED_HEADER);
107
+ }
108
+ }
109
+ export function encodeWalletAuthorization(authorization, options) {
110
+ const useBase64Url = options?.base64Url ?? true;
111
+ try {
112
+ const jsonStr = JSON.stringify(authorization.toJSON());
113
+ return useBase64Url ? base64urlEncode(jsonStr) : jsonStr;
114
+ }
115
+ catch {
116
+ throw new X402EncodeError('Failed to encode wallet authorization', X402ErrorCode.MALFORMED_HEADER);
117
+ }
118
+ }
119
+ export function decodeAuthorization(headerValue) {
120
+ const payloadDict = parseRawHeaderValue(headerValue);
121
+ try {
122
+ return PaymentAuthorization.modelValidate(payloadDict);
123
+ }
124
+ catch (exc) {
125
+ if (exc instanceof X402ValidationError) {
126
+ throw exc;
127
+ }
128
+ throw new X402ValidationError(`Invalid authorization payload: ${exc instanceof Error ? exc.message : String(exc)}`);
129
+ }
130
+ }
131
+ function findHeaderCaseInsensitive(headers, targetUpper) {
132
+ if (typeof Headers !== 'undefined' && headers instanceof Headers) {
133
+ return headers.get(targetUpper);
134
+ }
135
+ if (headers instanceof Map) {
136
+ for (const [k, v] of headers.entries()) {
137
+ if (k.toUpperCase() === targetUpper) {
138
+ return v;
139
+ }
140
+ }
141
+ return null;
142
+ }
143
+ for (const [k, v] of Object.entries(headers)) {
144
+ if (k.toUpperCase() === targetUpper && typeof v === 'string') {
145
+ return v;
146
+ }
147
+ }
148
+ return null;
149
+ }
150
+ export function extractChallengeFromHeaders(headers) {
151
+ const val = findHeaderCaseInsensitive(headers, HEADER_PAYMENT_REQUIRED);
152
+ if (val === null) {
153
+ return null;
154
+ }
155
+ return decodeChallenge(val);
156
+ }
157
+ export function extractAuthorizationFromHeaders(headers) {
158
+ const val = findHeaderCaseInsensitive(headers, HEADER_PAYMENT_SIGNATURE);
159
+ if (val === null) {
160
+ return null;
161
+ }
162
+ return decodeAuthorization(val);
163
+ }
164
+ export function injectAuthorizationToHeaders(headers, authorization, options) {
165
+ const headerName = options?.headerName ?? HEADER_PAYMENT_SIGNATURE;
166
+ const encoded = encodeAuthorization(authorization, { base64Url: options?.base64Url });
167
+ if (headers instanceof Headers) {
168
+ headers.set(headerName, encoded);
169
+ }
170
+ else if (headers instanceof Map) {
171
+ headers.set(headerName, encoded);
172
+ }
173
+ else {
174
+ headers[headerName] = encoded;
175
+ }
176
+ }
177
+ //# sourceMappingURL=codecs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecs.js","sourceRoot":"","sources":["../../src/core/codecs.ts"],"names":[],"mappings":"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"}