@bankofai/x402 0.5.9 → 0.6.0-beta.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.
Files changed (211) hide show
  1. package/dist/client/x402Client.js +1 -1
  2. package/dist/client/x402Client.js.map +1 -1
  3. package/dist/errors.d.ts +8 -0
  4. package/dist/errors.d.ts.map +1 -1
  5. package/dist/errors.js +13 -0
  6. package/dist/errors.js.map +1 -1
  7. package/dist/facilitator/client.d.ts +77 -0
  8. package/dist/facilitator/client.d.ts.map +1 -0
  9. package/dist/facilitator/client.js +130 -0
  10. package/dist/facilitator/client.js.map +1 -0
  11. package/dist/facilitator/index.d.ts +14 -0
  12. package/dist/facilitator/index.d.ts.map +1 -0
  13. package/dist/facilitator/index.js +12 -0
  14. package/dist/facilitator/index.js.map +1 -0
  15. package/dist/facilitator/x402Facilitator.d.ts +97 -0
  16. package/dist/facilitator/x402Facilitator.d.ts.map +1 -0
  17. package/dist/facilitator/x402Facilitator.js +212 -0
  18. package/dist/facilitator/x402Facilitator.js.map +1 -0
  19. package/dist/http/client.d.ts +66 -17
  20. package/dist/http/client.d.ts.map +1 -1
  21. package/dist/http/client.js +90 -31
  22. package/dist/http/client.js.map +1 -1
  23. package/dist/index.d.ts +4 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +7 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/mechanisms/_base/index.d.ts +19 -0
  28. package/dist/mechanisms/_base/index.d.ts.map +1 -0
  29. package/dist/mechanisms/_base/index.js +17 -0
  30. package/dist/mechanisms/_base/index.js.map +1 -0
  31. package/dist/mechanisms/_exact_base/adapter.d.ts +23 -0
  32. package/dist/mechanisms/_exact_base/adapter.d.ts.map +1 -0
  33. package/dist/mechanisms/_exact_base/adapter.js +9 -0
  34. package/dist/mechanisms/_exact_base/adapter.js.map +1 -0
  35. package/dist/mechanisms/_exact_base/evmAdapter.d.ts +10 -0
  36. package/dist/mechanisms/_exact_base/evmAdapter.d.ts.map +1 -0
  37. package/dist/mechanisms/_exact_base/evmAdapter.js +28 -0
  38. package/dist/mechanisms/_exact_base/evmAdapter.js.map +1 -0
  39. package/dist/mechanisms/_exact_base/facilitator.d.ts +46 -0
  40. package/dist/mechanisms/_exact_base/facilitator.d.ts.map +1 -0
  41. package/dist/mechanisms/_exact_base/facilitator.js +87 -0
  42. package/dist/mechanisms/_exact_base/facilitator.js.map +1 -0
  43. package/dist/mechanisms/_exact_base/index.d.ts +12 -0
  44. package/dist/mechanisms/_exact_base/index.d.ts.map +1 -0
  45. package/dist/mechanisms/_exact_base/index.js +10 -0
  46. package/dist/mechanisms/_exact_base/index.js.map +1 -0
  47. package/dist/mechanisms/_exact_base/server.d.ts +40 -0
  48. package/dist/mechanisms/_exact_base/server.d.ts.map +1 -0
  49. package/dist/mechanisms/_exact_base/server.js +62 -0
  50. package/dist/mechanisms/_exact_base/server.js.map +1 -0
  51. package/dist/mechanisms/_exact_base/tronAdapter.d.ts +11 -0
  52. package/dist/mechanisms/_exact_base/tronAdapter.d.ts.map +1 -0
  53. package/dist/mechanisms/_exact_base/tronAdapter.js +48 -0
  54. package/dist/mechanisms/_exact_base/tronAdapter.js.map +1 -0
  55. package/dist/mechanisms/{nativeExact.d.ts → _exact_base/types.d.ts} +4 -4
  56. package/dist/mechanisms/_exact_base/types.d.ts.map +1 -0
  57. package/dist/mechanisms/{nativeExact.js → _exact_base/types.js} +1 -1
  58. package/dist/mechanisms/_exact_base/types.js.map +1 -0
  59. package/dist/mechanisms/_exact_permit_base/facilitator.d.ts +44 -0
  60. package/dist/mechanisms/_exact_permit_base/facilitator.d.ts.map +1 -0
  61. package/dist/mechanisms/_exact_permit_base/facilitator.js +65 -0
  62. package/dist/mechanisms/_exact_permit_base/facilitator.js.map +1 -0
  63. package/dist/mechanisms/_exact_permit_base/index.d.ts +8 -0
  64. package/dist/mechanisms/_exact_permit_base/index.d.ts.map +1 -0
  65. package/dist/mechanisms/_exact_permit_base/index.js +7 -0
  66. package/dist/mechanisms/_exact_permit_base/index.js.map +1 -0
  67. package/dist/mechanisms/_exact_permit_base/server.d.ts +31 -0
  68. package/dist/mechanisms/_exact_permit_base/server.d.ts.map +1 -0
  69. package/dist/mechanisms/_exact_permit_base/server.js +53 -0
  70. package/dist/mechanisms/_exact_permit_base/server.js.map +1 -0
  71. package/dist/mechanisms/{nativeExactEvm.d.ts → evm/exact/client.d.ts} +2 -2
  72. package/dist/mechanisms/evm/exact/client.d.ts.map +1 -0
  73. package/dist/mechanisms/{nativeExactEvm.js → evm/exact/client.js} +4 -4
  74. package/dist/mechanisms/evm/exact/client.js.map +1 -0
  75. package/dist/mechanisms/evm/exact/facilitator.d.ts +20 -0
  76. package/dist/mechanisms/evm/exact/facilitator.d.ts.map +1 -0
  77. package/dist/mechanisms/evm/exact/facilitator.js +28 -0
  78. package/dist/mechanisms/evm/exact/facilitator.js.map +1 -0
  79. package/dist/mechanisms/evm/exact/index.d.ts +4 -0
  80. package/dist/mechanisms/evm/exact/index.d.ts.map +1 -0
  81. package/dist/mechanisms/evm/exact/index.js +4 -0
  82. package/dist/mechanisms/evm/exact/index.js.map +1 -0
  83. package/dist/mechanisms/evm/exact/server.d.ts +19 -0
  84. package/dist/mechanisms/evm/exact/server.d.ts.map +1 -0
  85. package/dist/mechanisms/evm/exact/server.js +23 -0
  86. package/dist/mechanisms/evm/exact/server.js.map +1 -0
  87. package/dist/mechanisms/{exactEvm.d.ts → evm/exact_permit/client.d.ts} +2 -2
  88. package/dist/mechanisms/evm/exact_permit/client.d.ts.map +1 -0
  89. package/dist/mechanisms/{exactEvm.js → evm/exact_permit/client.js} +2 -2
  90. package/dist/mechanisms/evm/exact_permit/client.js.map +1 -0
  91. package/dist/mechanisms/evm/exact_permit/facilitator.d.ts +18 -0
  92. package/dist/mechanisms/evm/exact_permit/facilitator.d.ts.map +1 -0
  93. package/dist/mechanisms/evm/exact_permit/facilitator.js +25 -0
  94. package/dist/mechanisms/evm/exact_permit/facilitator.js.map +1 -0
  95. package/dist/mechanisms/evm/exact_permit/index.d.ts +4 -0
  96. package/dist/mechanisms/evm/exact_permit/index.d.ts.map +1 -0
  97. package/dist/mechanisms/evm/exact_permit/index.js +4 -0
  98. package/dist/mechanisms/evm/exact_permit/index.js.map +1 -0
  99. package/dist/mechanisms/evm/exact_permit/server.d.ts +11 -0
  100. package/dist/mechanisms/evm/exact_permit/server.d.ts.map +1 -0
  101. package/dist/mechanisms/evm/exact_permit/server.js +16 -0
  102. package/dist/mechanisms/evm/exact_permit/server.js.map +1 -0
  103. package/dist/mechanisms/index.d.ts +27 -7
  104. package/dist/mechanisms/index.d.ts.map +1 -1
  105. package/dist/mechanisms/index.js +27 -11
  106. package/dist/mechanisms/index.js.map +1 -1
  107. package/dist/mechanisms/{nativeExactTron.d.ts → tron/exact/client.d.ts} +2 -2
  108. package/dist/mechanisms/tron/exact/client.d.ts.map +1 -0
  109. package/dist/mechanisms/{nativeExactTron.js → tron/exact/client.js} +4 -4
  110. package/dist/mechanisms/tron/exact/client.js.map +1 -0
  111. package/dist/mechanisms/tron/exact/facilitator.d.ts +17 -0
  112. package/dist/mechanisms/tron/exact/facilitator.d.ts.map +1 -0
  113. package/dist/mechanisms/tron/exact/facilitator.js +25 -0
  114. package/dist/mechanisms/tron/exact/facilitator.js.map +1 -0
  115. package/dist/mechanisms/tron/exact/index.d.ts +4 -0
  116. package/dist/mechanisms/tron/exact/index.d.ts.map +1 -0
  117. package/dist/mechanisms/tron/exact/index.js +4 -0
  118. package/dist/mechanisms/tron/exact/index.js.map +1 -0
  119. package/dist/mechanisms/tron/exact/server.d.ts +18 -0
  120. package/dist/mechanisms/tron/exact/server.d.ts.map +1 -0
  121. package/dist/mechanisms/tron/exact/server.js +22 -0
  122. package/dist/mechanisms/tron/exact/server.js.map +1 -0
  123. package/dist/mechanisms/{exactGasfree.d.ts → tron/exact_gasfree/client.d.ts} +3 -3
  124. package/dist/mechanisms/tron/exact_gasfree/client.d.ts.map +1 -0
  125. package/dist/mechanisms/{exactGasfree.js → tron/exact_gasfree/client.js} +4 -4
  126. package/dist/mechanisms/tron/exact_gasfree/client.js.map +1 -0
  127. package/dist/mechanisms/tron/exact_gasfree/facilitator.d.ts +38 -0
  128. package/dist/mechanisms/tron/exact_gasfree/facilitator.d.ts.map +1 -0
  129. package/dist/mechanisms/tron/exact_gasfree/facilitator.js +71 -0
  130. package/dist/mechanisms/tron/exact_gasfree/facilitator.js.map +1 -0
  131. package/dist/mechanisms/tron/exact_gasfree/index.d.ts +5 -0
  132. package/dist/mechanisms/tron/exact_gasfree/index.d.ts.map +1 -0
  133. package/dist/mechanisms/tron/exact_gasfree/index.js +4 -0
  134. package/dist/mechanisms/tron/exact_gasfree/index.js.map +1 -0
  135. package/dist/mechanisms/tron/exact_gasfree/server.d.ts +23 -0
  136. package/dist/mechanisms/tron/exact_gasfree/server.d.ts.map +1 -0
  137. package/dist/mechanisms/tron/exact_gasfree/server.js +43 -0
  138. package/dist/mechanisms/tron/exact_gasfree/server.js.map +1 -0
  139. package/dist/mechanisms/{exact.d.ts → tron/exact_permit/client.d.ts} +2 -2
  140. package/dist/mechanisms/tron/exact_permit/client.d.ts.map +1 -0
  141. package/dist/mechanisms/{exact.js → tron/exact_permit/client.js} +2 -2
  142. package/dist/mechanisms/tron/exact_permit/client.js.map +1 -0
  143. package/dist/mechanisms/tron/exact_permit/facilitator.d.ts +17 -0
  144. package/dist/mechanisms/tron/exact_permit/facilitator.d.ts.map +1 -0
  145. package/dist/mechanisms/tron/exact_permit/facilitator.js +24 -0
  146. package/dist/mechanisms/tron/exact_permit/facilitator.js.map +1 -0
  147. package/dist/mechanisms/tron/exact_permit/index.d.ts +4 -0
  148. package/dist/mechanisms/tron/exact_permit/index.d.ts.map +1 -0
  149. package/dist/mechanisms/tron/exact_permit/index.js +4 -0
  150. package/dist/mechanisms/tron/exact_permit/index.js.map +1 -0
  151. package/dist/mechanisms/tron/exact_permit/server.d.ts +11 -0
  152. package/dist/mechanisms/tron/exact_permit/server.d.ts.map +1 -0
  153. package/dist/mechanisms/tron/exact_permit/server.js +22 -0
  154. package/dist/mechanisms/tron/exact_permit/server.js.map +1 -0
  155. package/dist/middleware/core.d.ts +75 -0
  156. package/dist/middleware/core.d.ts.map +1 -0
  157. package/dist/middleware/core.js +132 -0
  158. package/dist/middleware/core.js.map +1 -0
  159. package/dist/middleware/express.d.ts +40 -0
  160. package/dist/middleware/express.d.ts.map +1 -0
  161. package/dist/middleware/express.js +83 -0
  162. package/dist/middleware/express.js.map +1 -0
  163. package/dist/middleware/hono.d.ts +43 -0
  164. package/dist/middleware/hono.d.ts.map +1 -0
  165. package/dist/middleware/hono.js +72 -0
  166. package/dist/middleware/hono.js.map +1 -0
  167. package/dist/middleware/index.d.ts +12 -0
  168. package/dist/middleware/index.d.ts.map +1 -0
  169. package/dist/middleware/index.js +11 -0
  170. package/dist/middleware/index.js.map +1 -0
  171. package/dist/server/index.d.ts +12 -0
  172. package/dist/server/index.d.ts.map +1 -0
  173. package/dist/server/index.js +10 -0
  174. package/dist/server/index.js.map +1 -0
  175. package/dist/server/types.d.ts +78 -0
  176. package/dist/server/types.d.ts.map +1 -0
  177. package/dist/server/types.js +12 -0
  178. package/dist/server/types.js.map +1 -0
  179. package/dist/server/x402Server.d.ts +115 -0
  180. package/dist/server/x402Server.d.ts.map +1 -0
  181. package/dist/server/x402Server.js +318 -0
  182. package/dist/server/x402Server.js.map +1 -0
  183. package/dist/tokens.d.ts +29 -0
  184. package/dist/tokens.d.ts.map +1 -1
  185. package/dist/tokens.js +44 -0
  186. package/dist/tokens.js.map +1 -1
  187. package/dist/utils/encoding.d.ts +7 -0
  188. package/dist/utils/encoding.d.ts.map +1 -1
  189. package/dist/utils/encoding.js +15 -0
  190. package/dist/utils/encoding.js.map +1 -1
  191. package/dist/utils/index.d.ts +1 -1
  192. package/dist/utils/index.d.ts.map +1 -1
  193. package/dist/utils/index.js +1 -1
  194. package/dist/utils/index.js.map +1 -1
  195. package/dist/utils/tx_verification.d.ts +113 -0
  196. package/dist/utils/tx_verification.d.ts.map +1 -0
  197. package/dist/utils/tx_verification.js +98 -0
  198. package/dist/utils/tx_verification.js.map +1 -0
  199. package/package.json +15 -2
  200. package/dist/mechanisms/exact.d.ts.map +0 -1
  201. package/dist/mechanisms/exact.js.map +0 -1
  202. package/dist/mechanisms/exactEvm.d.ts.map +0 -1
  203. package/dist/mechanisms/exactEvm.js.map +0 -1
  204. package/dist/mechanisms/exactGasfree.d.ts.map +0 -1
  205. package/dist/mechanisms/exactGasfree.js.map +0 -1
  206. package/dist/mechanisms/nativeExact.d.ts.map +0 -1
  207. package/dist/mechanisms/nativeExact.js.map +0 -1
  208. package/dist/mechanisms/nativeExactEvm.d.ts.map +0 -1
  209. package/dist/mechanisms/nativeExactEvm.js.map +0 -1
  210. package/dist/mechanisms/nativeExactTron.d.ts.map +0 -1
  211. package/dist/mechanisms/nativeExactTron.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Facilitator.js","sourceRoot":"","sources":["../../src/facilitator/x402Facilitator.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,82 @@
1
1
  /**
2
- * X402FetchClient - Fetch-based HTTP client with automatic 402 payment handling
2
+ * X402FetchClient Fetch-based HTTP client with automatic 402 payment handling.
3
+ *
4
+ * Mirrors `bankofai.x402.clients.X402HttpClient` on the Python side. Wraps the
5
+ * global `fetch` (configurable for tests) so agent code can call any URL and
6
+ * have 402 challenges silently handled — challenge → sign → retry → return
7
+ * the final 200 response, with the settled payment receipt parseable via
8
+ * {@link parsePaymentResponseHeader}.
3
9
  */
4
- import { X402Client, PaymentRequirementsSelector } from '../index.js';
10
+ import { type PaymentRequirementsSelector, type SettleResponse, X402Client } from '../index.js';
11
+ /** Wire-format header names. */
12
+ export declare const PAYMENT_SIGNATURE_HEADER = "PAYMENT-SIGNATURE";
13
+ export declare const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
14
+ export declare const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
15
+ /** Constructor options for {@link X402FetchClient}. */
16
+ export interface X402FetchClientOptions {
17
+ /** Custom payment requirements selector (defaults to library default). */
18
+ selector?: PaymentRequirementsSelector;
19
+ /** Custom fetch implementation (defaults to global `fetch`). Useful for tests. */
20
+ fetchImpl?: typeof fetch;
21
+ }
5
22
  /**
6
- * Fetch-based HTTP client with automatic 402 payment handling
23
+ * Fetch-based HTTP client with automatic 402 payment handling.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const x402Client = new X402Client(...).register(mechanism);
28
+ * const httpClient = new X402FetchClient(x402Client);
29
+ *
30
+ * const res = await httpClient.get('https://api.example.com/llm');
31
+ * if (res.ok) {
32
+ * const settled = parsePaymentResponseHeader(res);
33
+ * console.log('paid via tx', settled?.transaction);
34
+ * }
35
+ * ```
7
36
  */
8
37
  export declare class X402FetchClient {
9
- private x402Client;
10
- private selector?;
11
- constructor(x402Client: X402Client, selector?: PaymentRequirementsSelector);
38
+ private readonly x402Client;
39
+ private readonly selector?;
40
+ private readonly fetchImpl;
41
+ constructor(x402Client: X402Client, selectorOrOptions?: PaymentRequirementsSelector | X402FetchClientOptions);
12
42
  /**
13
- * Make request with automatic 402 payment handling
43
+ * Issue a request with automatic 402 pay → retry handling.
44
+ *
45
+ * If the server returns a non-402 status, the response is passed through.
46
+ * If the 402 cannot be parsed (no PAYMENT-REQUIRED header and no parseable
47
+ * body), the original 402 is returned to the caller for inspection.
14
48
  */
15
49
  request(url: string, init?: RequestInit): Promise<Response>;
16
- /**
17
- * GET request with payment handling
18
- */
50
+ /** GET shorthand. */
19
51
  get(url: string, init?: RequestInit): Promise<Response>;
20
- /**
21
- * POST request with payment handling
22
- */
52
+ /** POST shorthand. */
23
53
  post(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
54
+ /** PUT shorthand. */
55
+ put(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
56
+ /** PATCH shorthand. */
57
+ patch(url: string, body?: RequestInit['body'], init?: RequestInit): Promise<Response>;
58
+ /** DELETE shorthand. */
59
+ delete(url: string, init?: RequestInit): Promise<Response>;
24
60
  /**
25
- * Parse PaymentRequired from 402 response
61
+ * Try to parse a `PaymentRequired` from the 402 response.
62
+ *
63
+ * Order:
64
+ * 1. `PAYMENT-REQUIRED` header (base64 JSON).
65
+ * 2. JSON body fallback when header is missing or undecodable.
66
+ *
67
+ * Returns `null` if neither path yields a recognizable shape.
26
68
  */
27
69
  private parsePaymentRequired;
28
- /**
29
- * Retry request with payment payload
30
- */
70
+ /** Re-issue the original request with the encoded payment payload header. */
31
71
  private retryWithPayment;
32
72
  }
73
+ /**
74
+ * Pull the {@link SettleResponse} out of a 200 response's PAYMENT-RESPONSE header.
75
+ *
76
+ * Servers attach this on success so the client can record the settlement tx
77
+ * hash / network without making a separate facilitator call.
78
+ *
79
+ * @returns The decoded settle response, or `null` if the header is absent or malformed.
80
+ */
81
+ export declare function parsePaymentResponseHeader(response: Response): SettleResponse | null;
33
82
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EAGV,2BAA2B,EAG5B,MAAM,aAAa,CAAC;AAOrB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAA8B;gBAG7C,UAAU,EAAE,UAAU,EACtB,QAAQ,CAAC,EAAE,2BAA2B;IAMxC;;OAEG;IACG,OAAO,CACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAsBpB;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7D;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI1F;;OAEG;YACW,oBAAoB;IAsBlC;;OAEG;YACW,gBAAgB;CAe/B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,cAAc,EACnB,UAAU,EAGX,MAAM,aAAa,CAAC;AAErB,gCAAgC;AAChC,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,2BAA2B,CAAC;IACvC,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAGvC,UAAU,EAAE,UAAU,EACtB,iBAAiB,CAAC,EAAE,2BAA2B,GAAG,sBAAsB;IAY1E;;;;;;OAMG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAqBjE,qBAAqB;IACf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI7D,sBAAsB;IAChB,IAAI,CACR,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,qBAAqB;IACf,GAAG,CACP,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,uBAAuB;IACjB,KAAK,CACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC;IAIpB,wBAAwB;IAClB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIhE;;;;;;;;OAQG;YACW,oBAAoB;IAsBlC,6EAA6E;YAC/D,gBAAgB;CAU/B;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,IAAI,CAUpF"}
@@ -1,26 +1,56 @@
1
1
  /**
2
- * X402FetchClient - Fetch-based HTTP client with automatic 402 payment handling
2
+ * X402FetchClient Fetch-based HTTP client with automatic 402 payment handling.
3
+ *
4
+ * Mirrors `bankofai.x402.clients.X402HttpClient` on the Python side. Wraps the
5
+ * global `fetch` (configurable for tests) so agent code can call any URL and
6
+ * have 402 challenges silently handled — challenge → sign → retry → return
7
+ * the final 200 response, with the settled payment receipt parseable via
8
+ * {@link parsePaymentResponseHeader}.
3
9
  */
4
- import { encodePaymentPayload, decodePaymentPayload, } from '../index.js';
5
- /** HTTP headers for x402 protocol */
6
- const PAYMENT_SIGNATURE_HEADER = 'PAYMENT-SIGNATURE';
7
- const PAYMENT_REQUIRED_HEADER = 'PAYMENT-REQUIRED';
8
- const PAYMENT_RESPONSE_HEADER = 'PAYMENT-RESPONSE';
10
+ import { decodePaymentPayload, encodePaymentPayload, } from '../index.js';
11
+ /** Wire-format header names. */
12
+ export const PAYMENT_SIGNATURE_HEADER = 'PAYMENT-SIGNATURE';
13
+ export const PAYMENT_REQUIRED_HEADER = 'PAYMENT-REQUIRED';
14
+ export const PAYMENT_RESPONSE_HEADER = 'PAYMENT-RESPONSE';
9
15
  /**
10
- * Fetch-based HTTP client with automatic 402 payment handling
16
+ * Fetch-based HTTP client with automatic 402 payment handling.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const x402Client = new X402Client(...).register(mechanism);
21
+ * const httpClient = new X402FetchClient(x402Client);
22
+ *
23
+ * const res = await httpClient.get('https://api.example.com/llm');
24
+ * if (res.ok) {
25
+ * const settled = parsePaymentResponseHeader(res);
26
+ * console.log('paid via tx', settled?.transaction);
27
+ * }
28
+ * ```
11
29
  */
12
30
  export class X402FetchClient {
13
31
  x402Client;
14
32
  selector;
15
- constructor(x402Client, selector) {
33
+ fetchImpl;
34
+ constructor(x402Client, selectorOrOptions) {
16
35
  this.x402Client = x402Client;
17
- this.selector = selector;
36
+ if (typeof selectorOrOptions === 'function') {
37
+ this.selector = selectorOrOptions;
38
+ this.fetchImpl = fetch;
39
+ }
40
+ else {
41
+ this.selector = selectorOrOptions?.selector;
42
+ this.fetchImpl = selectorOrOptions?.fetchImpl ?? fetch;
43
+ }
18
44
  }
19
45
  /**
20
- * Make request with automatic 402 payment handling
46
+ * Issue a request with automatic 402 pay → retry handling.
47
+ *
48
+ * If the server returns a non-402 status, the response is passed through.
49
+ * If the 402 cannot be parsed (no PAYMENT-REQUIRED header and no parseable
50
+ * body), the original 402 is returned to the caller for inspection.
21
51
  */
22
52
  async request(url, init) {
23
- const response = await fetch(url, init);
53
+ const response = await this.fetchImpl(url, init);
24
54
  if (response.status !== 402) {
25
55
  return response;
26
56
  }
@@ -31,20 +61,34 @@ export class X402FetchClient {
31
61
  const paymentPayload = await this.x402Client.handlePayment(paymentRequired.accepts, url, paymentRequired.extensions, this.selector);
32
62
  return this.retryWithPayment(url, init, paymentPayload);
33
63
  }
34
- /**
35
- * GET request with payment handling
36
- */
64
+ /** GET shorthand. */
37
65
  async get(url, init) {
38
66
  return this.request(url, { ...init, method: 'GET' });
39
67
  }
40
- /**
41
- * POST request with payment handling
42
- */
68
+ /** POST shorthand. */
43
69
  async post(url, body, init) {
44
70
  return this.request(url, { ...init, method: 'POST', body });
45
71
  }
72
+ /** PUT shorthand. */
73
+ async put(url, body, init) {
74
+ return this.request(url, { ...init, method: 'PUT', body });
75
+ }
76
+ /** PATCH shorthand. */
77
+ async patch(url, body, init) {
78
+ return this.request(url, { ...init, method: 'PATCH', body });
79
+ }
80
+ /** DELETE shorthand. */
81
+ async delete(url, init) {
82
+ return this.request(url, { ...init, method: 'DELETE' });
83
+ }
46
84
  /**
47
- * Parse PaymentRequired from 402 response
85
+ * Try to parse a `PaymentRequired` from the 402 response.
86
+ *
87
+ * Order:
88
+ * 1. `PAYMENT-REQUIRED` header (base64 JSON).
89
+ * 2. JSON body fallback when header is missing or undecodable.
90
+ *
91
+ * Returns `null` if neither path yields a recognizable shape.
48
92
  */
49
93
  async parsePaymentRequired(response) {
50
94
  const headerValue = response.headers.get(PAYMENT_REQUIRED_HEADER);
@@ -53,31 +97,46 @@ export class X402FetchClient {
53
97
  return decodePaymentPayload(headerValue);
54
98
  }
55
99
  catch {
56
- // Continue to parse body
100
+ // Header malformed — fall through to body.
57
101
  }
58
102
  }
59
103
  try {
60
- const body = await response.json();
61
- if (body.accepts && Array.isArray(body.accepts)) {
104
+ const body = (await response.clone().json());
105
+ if (Array.isArray(body.accepts)) {
62
106
  return body;
63
107
  }
64
108
  }
65
109
  catch {
66
- // Unable to parse
110
+ // Body not parseable — give up.
67
111
  }
68
112
  return null;
69
113
  }
70
- /**
71
- * Retry request with payment payload
72
- */
114
+ /** Re-issue the original request with the encoded payment payload header. */
73
115
  async retryWithPayment(url, init, paymentPayload) {
74
- const encodedPayload = encodePaymentPayload(paymentPayload);
116
+ const encoded = encodePaymentPayload(paymentPayload);
75
117
  const headers = new Headers(init?.headers);
76
- headers.set(PAYMENT_SIGNATURE_HEADER, encodedPayload);
77
- return fetch(url, {
78
- ...init,
79
- headers,
80
- });
118
+ headers.set(PAYMENT_SIGNATURE_HEADER, encoded);
119
+ return this.fetchImpl(url, { ...init, headers });
120
+ }
121
+ }
122
+ /**
123
+ * Pull the {@link SettleResponse} out of a 200 response's PAYMENT-RESPONSE header.
124
+ *
125
+ * Servers attach this on success so the client can record the settlement tx
126
+ * hash / network without making a separate facilitator call.
127
+ *
128
+ * @returns The decoded settle response, or `null` if the header is absent or malformed.
129
+ */
130
+ export function parsePaymentResponseHeader(response) {
131
+ const headerValue = response.headers.get(PAYMENT_RESPONSE_HEADER);
132
+ if (!headerValue) {
133
+ return null;
134
+ }
135
+ try {
136
+ return decodePaymentPayload(headerValue);
137
+ }
138
+ catch {
139
+ return null;
81
140
  }
82
141
  }
83
142
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,8 +12,11 @@ export * from './errors.js';
12
12
  export * from './tokens.js';
13
13
  export * from './address.js';
14
14
  export * from './http/client.js';
15
+ export * from './facilitator/index.js';
16
+ export * from './server/index.js';
17
+ export * from './middleware/index.js';
15
18
  export * from './mechanisms/index.js';
16
- export * from './mechanisms/exactEvm.js';
19
+ export * from './mechanisms/evm/exact_permit/index.js';
17
20
  export * from './signers/signer.js';
18
21
  export * from './signers/evmSigner.js';
19
22
  export type { TronWeb, TypedDataDomain, TypedDataField, TronNetwork, TRON_CHAIN_IDS } from './signers/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAG7B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -14,10 +14,16 @@ export * from './tokens.js';
14
14
  export * from './address.js';
15
15
  // HTTP Client
16
16
  export * from './http/client.js';
17
+ // Facilitator client (talks to remote /verify, /settle, /supported, /fee/quote)
18
+ export * from './facilitator/index.js';
19
+ // High-level server API (X402Server, ResourceConfig, ServerMechanism)
20
+ export * from './server/index.js';
21
+ // Server middleware (Hono / Express adapters + framework-agnostic core)
22
+ export * from './middleware/index.js';
17
23
  // Mechanisms
18
24
  export * from './mechanisms/index.js';
19
25
  // EVM ExactPermit Mechanism
20
- export * from './mechanisms/exactEvm.js';
26
+ export * from './mechanisms/evm/exact_permit/index.js';
21
27
  // TRON Signer
22
28
  export * from './signers/signer.js';
23
29
  // EVM Signer
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO;AACP,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,4BAA4B;AAC5B,cAAc,0BAA0B,CAAC;AAEzC,cAAc;AACd,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO;AACP,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,cAAc;AACd,cAAc,kBAAkB,CAAC;AAEjC,gFAAgF;AAChF,cAAc,wBAAwB,CAAC;AAEvC,sEAAsE;AACtE,cAAc,mBAAmB,CAAC;AAElC,wEAAwE;AACxE,cAAc,uBAAuB,CAAC;AAEtC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,4BAA4B;AAC5B,cAAc,wCAAwC,CAAC;AAEvD,cAAc;AACd,cAAc,qBAAqB,CAAC;AACpC,aAAa;AACb,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Base mechanism interfaces — mirrors Python `bankofai.x402.mechanisms._base`.
3
+ *
4
+ * The three role interfaces (`ClientMechanism`, `ServerMechanism`,
5
+ * `FacilitatorMechanism`) currently live close to where they're consumed:
6
+ *
7
+ * - `ClientMechanism` → `src/client/x402Client.ts`
8
+ * - `ServerMechanism` → `src/server/types.ts`
9
+ * - `FacilitatorMechanism` → `src/facilitator/x402Facilitator.ts`
10
+ *
11
+ * This file re-exports them under one mechanism-rooted location so that
12
+ * `mechanisms/<chain>/<scheme>/{client,server,facilitator}.ts` modules import
13
+ * their role contract from a single canonical path. Mirrors how Python's
14
+ * `_base/{client,server,facilitator}.py` are imported by concrete mechanisms.
15
+ */
16
+ export type { ClientMechanism, ClientSigner } from '../../client/x402Client.js';
17
+ export type { ServerMechanism } from '../../server/types.js';
18
+ export type { FacilitatorMechanism, FacilitatorLogger, } from '../../facilitator/x402Facilitator.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mechanisms/_base/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAChF,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EACV,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Base mechanism interfaces — mirrors Python `bankofai.x402.mechanisms._base`.
3
+ *
4
+ * The three role interfaces (`ClientMechanism`, `ServerMechanism`,
5
+ * `FacilitatorMechanism`) currently live close to where they're consumed:
6
+ *
7
+ * - `ClientMechanism` → `src/client/x402Client.ts`
8
+ * - `ServerMechanism` → `src/server/types.ts`
9
+ * - `FacilitatorMechanism` → `src/facilitator/x402Facilitator.ts`
10
+ *
11
+ * This file re-exports them under one mechanism-rooted location so that
12
+ * `mechanisms/<chain>/<scheme>/{client,server,facilitator}.ts` modules import
13
+ * their role contract from a single canonical path. Mirrors how Python's
14
+ * `_base/{client,server,facilitator}.py` are imported by concrete mechanisms.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mechanisms/_base/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ChainAdapter — pluggable per-chain primitives for the `exact` scheme.
3
+ *
4
+ * Mirrors Python `mechanisms._exact_base.base.ChainAdapter`. Subclasses
5
+ * provide chain-specific parsing / validation / address normalization so
6
+ * `ExactBase{Client,Server,Facilitator}Mechanism` can stay chain-agnostic.
7
+ */
8
+ export interface ChainAdapter {
9
+ /** Parse chain id from CAIP-2 network (e.g. `"eip155:97"` → `97`). */
10
+ parseChainId(network: string): number;
11
+ /** Check the CAIP-2 prefix is valid for this adapter (`"eip155:"` / `"tron:"`). */
12
+ validateNetwork(network: string): boolean;
13
+ /** Format check (no on-chain lookup). */
14
+ validateAddress(address: string): boolean;
15
+ /** Canonicalize for storage / comparison (lowercase EVM, Base58 TRON, ...). */
16
+ normalizeAddress(address: string): string;
17
+ /**
18
+ * Convert to the address representation used inside EIP-712 / TIP-712 typed
19
+ * data (0x-prefixed hex on both chains). Used by signing path.
20
+ */
21
+ toSigningAddress(address: string): string;
22
+ }
23
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/mechanisms/_exact_base/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,mFAAmF;IACnF,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,yCAAyC;IACzC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1C,+EAA+E;IAC/E,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1C;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3C"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ChainAdapter — pluggable per-chain primitives for the `exact` scheme.
3
+ *
4
+ * Mirrors Python `mechanisms._exact_base.base.ChainAdapter`. Subclasses
5
+ * provide chain-specific parsing / validation / address normalization so
6
+ * `ExactBase{Client,Server,Facilitator}Mechanism` can stay chain-agnostic.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/mechanisms/_exact_base/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,10 @@
1
+ import type { ChainAdapter } from './adapter.js';
2
+ /** EVM (`eip155:<chainId>`) ChainAdapter. */
3
+ export declare class EvmChainAdapter implements ChainAdapter {
4
+ parseChainId(network: string): number;
5
+ validateNetwork(network: string): boolean;
6
+ validateAddress(address: string): boolean;
7
+ normalizeAddress(address: string): string;
8
+ toSigningAddress(address: string): string;
9
+ }
10
+ //# sourceMappingURL=evmAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evmAdapter.d.ts","sourceRoot":"","sources":["../../../src/mechanisms/_exact_base/evmAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,6CAA6C;AAC7C,qBAAa,eAAgB,YAAW,YAAY;IAClD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAYrC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIzC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG1C"}
@@ -0,0 +1,28 @@
1
+ import { getAddress, isAddress } from 'viem';
2
+ /** EVM (`eip155:<chainId>`) ChainAdapter. */
3
+ export class EvmChainAdapter {
4
+ parseChainId(network) {
5
+ const parts = network.split(':');
6
+ if (parts.length !== 2 || parts[0] !== 'eip155') {
7
+ throw new Error(`Invalid EVM network identifier: ${network}`);
8
+ }
9
+ const id = parseInt(parts[1], 10);
10
+ if (!Number.isFinite(id) || id <= 0) {
11
+ throw new Error(`Invalid EVM chain id in ${network}`);
12
+ }
13
+ return id;
14
+ }
15
+ validateNetwork(network) {
16
+ return network.startsWith('eip155:');
17
+ }
18
+ validateAddress(address) {
19
+ return isAddress(address, { strict: false });
20
+ }
21
+ normalizeAddress(address) {
22
+ return this.validateAddress(address) ? address.toLowerCase() : address;
23
+ }
24
+ toSigningAddress(address) {
25
+ return this.validateAddress(address) ? getAddress(address) : address;
26
+ }
27
+ }
28
+ //# sourceMappingURL=evmAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evmAdapter.js","sourceRoot":"","sources":["../../../src/mechanisms/_exact_base/evmAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAI7C,6CAA6C;AAC7C,MAAM,OAAO,eAAe;IAC1B,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,OAAO,SAAS,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAED,gBAAgB,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Shared base for `exact` scheme facilitator mechanisms.
3
+ *
4
+ * Mirrors Python `mechanisms._exact_base.base.ExactBaseFacilitatorMechanism`.
5
+ *
6
+ * Per-chain subclasses provide a {@link ChainAdapter} and the chain RPC client
7
+ * (viem PublicClient / tronweb instance). The base handles:
8
+ * - basic structural verification (asset / payTo / value match, time window)
9
+ * - dispatching feeQuote / verify / settle to the chain-specific impl
10
+ *
11
+ * Subclasses MUST implement chain interactions: signature recovery, balance
12
+ * check, transaction broadcast. The base provides defaults that return
13
+ * `null` / `false` so non-fully-implemented mechanisms remain visible at
14
+ * the structural level but don't pretend to verify on-chain state.
15
+ */
16
+ import type { ChainAdapter } from './adapter.js';
17
+ import type { FacilitatorMechanism } from '../../facilitator/x402Facilitator.js';
18
+ import type { FeeQuoteResponse, PaymentPayload, PaymentRequirements, SettleResponse, VerifyResponse } from '../../types/index.js';
19
+ export declare abstract class ExactBaseFacilitatorMechanism implements FacilitatorMechanism {
20
+ protected readonly adapter: ChainAdapter;
21
+ constructor(adapter: ChainAdapter);
22
+ scheme(): string;
23
+ /**
24
+ * `exact` scheme has no facilitator fee — return `null` to drop from the
25
+ * supported quote list. Permit-based schemes override this.
26
+ */
27
+ feeQuote(_accept: PaymentRequirements, _context?: Record<string, unknown>): Promise<FeeQuoteResponse | null>;
28
+ /**
29
+ * Off-chain verification: structural + timing checks. Chain-specific
30
+ * subclasses extend this to add signature recovery and balance check.
31
+ */
32
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
33
+ /**
34
+ * Settle the authorization on-chain. Chain-specific — subclasses must
35
+ * implement using viem (EVM) or tronweb (TRON).
36
+ */
37
+ abstract settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
38
+ /**
39
+ * Chain-specific signature recovery + balance check. Default returns
40
+ * `isValid: true` (trust upstream); subclasses MUST override for real
41
+ * signature verification. Marked protected so subclass can call super.
42
+ */
43
+ protected verifySignatureOnChain(_payload: PaymentPayload, _requirements: PaymentRequirements): Promise<VerifyResponse>;
44
+ protected extractAuthorization(payload: PaymentPayload): NonNullable<PaymentPayload['payload']['authorization']> | null;
45
+ }
46
+ //# sourceMappingURL=facilitator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../../src/mechanisms/_exact_base/facilitator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAG9B,8BAAsB,6BAA8B,YAAW,oBAAoB;IACrE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY;gBAArB,OAAO,EAAE,YAAY;IAEpD,MAAM,IAAI,MAAM;IAIhB;;;OAGG;IACG,QAAQ,CACZ,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAInC;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAsC1B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CACb,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAE1B;;;;OAIG;cACa,sBAAsB,CACpC,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,mBAAmB,GACjC,OAAO,CAAC,cAAc,CAAC;IAI1B,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,cAAc,GACtB,WAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI;CAKlE"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Shared base for `exact` scheme facilitator mechanisms.
3
+ *
4
+ * Mirrors Python `mechanisms._exact_base.base.ExactBaseFacilitatorMechanism`.
5
+ *
6
+ * Per-chain subclasses provide a {@link ChainAdapter} and the chain RPC client
7
+ * (viem PublicClient / tronweb instance). The base handles:
8
+ * - basic structural verification (asset / payTo / value match, time window)
9
+ * - dispatching feeQuote / verify / settle to the chain-specific impl
10
+ *
11
+ * Subclasses MUST implement chain interactions: signature recovery, balance
12
+ * check, transaction broadcast. The base provides defaults that return
13
+ * `null` / `false` so non-fully-implemented mechanisms remain visible at
14
+ * the structural level but don't pretend to verify on-chain state.
15
+ */
16
+ import { SCHEME_EXACT } from './types.js';
17
+ export class ExactBaseFacilitatorMechanism {
18
+ adapter;
19
+ constructor(adapter) {
20
+ this.adapter = adapter;
21
+ }
22
+ scheme() {
23
+ return SCHEME_EXACT;
24
+ }
25
+ /**
26
+ * `exact` scheme has no facilitator fee — return `null` to drop from the
27
+ * supported quote list. Permit-based schemes override this.
28
+ */
29
+ async feeQuote(_accept, _context) {
30
+ return null;
31
+ }
32
+ /**
33
+ * Off-chain verification: structural + timing checks. Chain-specific
34
+ * subclasses extend this to add signature recovery and balance check.
35
+ */
36
+ async verify(payload, requirements) {
37
+ const authorization = this.extractAuthorization(payload);
38
+ if (!authorization) {
39
+ return { isValid: false, invalidReason: 'missing_authorization' };
40
+ }
41
+ // Validate basic structural correctness
42
+ if (String(authorization.to).toLowerCase() !== String(requirements.payTo).toLowerCase()) {
43
+ return { isValid: false, invalidReason: 'payTo_mismatch' };
44
+ }
45
+ try {
46
+ if (BigInt(authorization.value) < BigInt(requirements.amount)) {
47
+ return { isValid: false, invalidReason: 'amount_too_low' };
48
+ }
49
+ }
50
+ catch {
51
+ return { isValid: false, invalidReason: 'invalid_value' };
52
+ }
53
+ // Validate time window
54
+ const now = Math.floor(Date.now() / 1000);
55
+ try {
56
+ if (BigInt(String(authorization.validBefore ?? '0')) < BigInt(now)) {
57
+ return { isValid: false, invalidReason: 'expired' };
58
+ }
59
+ if (BigInt(String(authorization.validAfter ?? now)) > BigInt(now)) {
60
+ return { isValid: false, invalidReason: 'not_yet_valid' };
61
+ }
62
+ }
63
+ catch {
64
+ return { isValid: false, invalidReason: 'invalid_time_window' };
65
+ }
66
+ // Chain-specific signature + balance check (overridable)
67
+ const sigResult = await this.verifySignatureOnChain(payload, requirements);
68
+ if (!sigResult.isValid)
69
+ return sigResult;
70
+ return { isValid: true };
71
+ }
72
+ /**
73
+ * Chain-specific signature recovery + balance check. Default returns
74
+ * `isValid: true` (trust upstream); subclasses MUST override for real
75
+ * signature verification. Marked protected so subclass can call super.
76
+ */
77
+ async verifySignatureOnChain(_payload, _requirements) {
78
+ return { isValid: true };
79
+ }
80
+ extractAuthorization(payload) {
81
+ if (payload.payload.authorization)
82
+ return payload.payload.authorization;
83
+ const ext = (payload.extensions ?? {})['transferAuthorization'];
84
+ return ext ?? null;
85
+ }
86
+ }
87
+ //# sourceMappingURL=facilitator.js.map