@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
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Manages payment mechanism registry and coordinates payment flows.
5
5
  */
6
- import { ExactGasFreeClientMechanism } from '../mechanisms/exactGasfree.js';
6
+ import { ExactGasFreeClientMechanism } from '../mechanisms/tron/exact_gasfree/index.js';
7
7
  import { DefaultTokenSelectionStrategy } from './tokenSelection.js';
8
8
  import { UnsupportedNetworkError } from '../errors.js';
9
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402Client.js","sourceRoot":"","sources":["../../src/client/x402Client.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -38,4 +38,12 @@ export declare class PermitValidationError extends ValidationError {
38
38
  reason: string;
39
39
  constructor(reason: string, message?: string);
40
40
  }
41
+ /** Facilitator HTTP / protocol error */
42
+ export declare class FacilitatorError extends X402Error {
43
+ /** HTTP status code returned by facilitator (0 if request itself failed) */
44
+ status: number;
45
+ /** Response body, decoded as text or null if unavailable */
46
+ body: string | null;
47
+ constructor(message: string, status: number, body?: string | null);
48
+ }
41
49
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,8BAA8B;AAC9B,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,gCAAgC;AAChC,qBAAa,sBAAuB,SAAQ,cAAc;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,8BAA8B;AAC9B,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,6BAA6B;AAC7B,qBAAa,0BAA2B,SAAQ,cAAc;gBAChD,OAAO,EAAE,MAAM;CAI5B;AAED,kCAAkC;AAClC,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,0BAA0B;AAC1B,qBAAa,uBAAwB,SAAQ,kBAAkB;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAED,+BAA+B;AAC/B,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,+BAA+B;AAC/B,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,MAAM,EAAE,MAAM,CAAC;gBAEH,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAK7C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,8BAA8B;AAC9B,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,gCAAgC;AAChC,qBAAa,sBAAuB,SAAQ,cAAc;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,8BAA8B;AAC9B,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,6BAA6B;AAC7B,qBAAa,0BAA2B,SAAQ,cAAc;gBAChD,OAAO,EAAE,MAAM;CAI5B;AAED,kCAAkC;AAClC,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,0BAA0B;AAC1B,qBAAa,uBAAwB,SAAQ,kBAAkB;gBACjD,OAAO,EAAE,MAAM;CAI5B;AAED,+BAA+B;AAC/B,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,+BAA+B;AAC/B,qBAAa,qBAAsB,SAAQ,eAAe;IACxD,MAAM,EAAE,MAAM,CAAC;gBAEH,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAK7C;AAED,wCAAwC;AACxC,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;gBAER,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,IAAW;CAMxE"}
package/dist/errors.js CHANGED
@@ -66,4 +66,17 @@ export class PermitValidationError extends ValidationError {
66
66
  this.reason = reason;
67
67
  }
68
68
  }
69
+ /** Facilitator HTTP / protocol error */
70
+ export class FacilitatorError extends X402Error {
71
+ /** HTTP status code returned by facilitator (0 if request itself failed) */
72
+ status;
73
+ /** Response body, decoded as text or null if unavailable */
74
+ body;
75
+ constructor(message, status, body = null) {
76
+ super(message);
77
+ this.name = 'FacilitatorError';
78
+ this.status = status;
79
+ this.body = body;
80
+ }
81
+ }
69
82
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,gCAAgC;AAChC,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,6BAA6B;AAC7B,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,0BAA0B;AAC1B,MAAM,OAAO,uBAAwB,SAAQ,kBAAkB;IAC7D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,MAAM,CAAS;IAEf,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qCAAqC;AACrC,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,gCAAgC;AAChC,MAAM,OAAO,sBAAuB,SAAQ,cAAc;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,OAAO,cAAe,SAAQ,SAAS;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,6BAA6B;AAC7B,MAAM,OAAO,0BAA2B,SAAQ,cAAc;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,0BAA0B;AAC1B,MAAM,OAAO,uBAAwB,SAAQ,kBAAkB;IAC7D,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,MAAM,CAAS;IAEf,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,wCAAwC;AACxC,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,4EAA4E;IAC5E,MAAM,CAAS;IACf,4DAA4D;IAC5D,IAAI,CAAgB;IAEpB,YAAY,OAAe,EAAE,MAAc,EAAE,OAAsB,IAAI;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * FacilitatorClient — TypeScript port of `bankofai.x402.facilitator.FacilitatorClient`.
3
+ *
4
+ * Talks to a remote x402 facilitator via HTTP. Handles `/supported`, `/fee/quote`,
5
+ * `/verify`, `/settle`. Used by server middleware (Hono / Express / etc.) to verify
6
+ * payments off-chain and trigger on-chain settlement.
7
+ */
8
+ import type { FeeQuoteResponse, PaymentPayload, PaymentRequirements, SettleResponse, SupportedResponse, VerifyResponse } from '../types/index.js';
9
+ /** Configuration for {@link FacilitatorClient}. */
10
+ export interface FacilitatorClientConfig {
11
+ /** Facilitator service base URL (trailing slash optional, will be normalized). */
12
+ baseUrl: string;
13
+ /** Optional custom HTTP headers (e.g. `Authorization`). */
14
+ headers?: Record<string, string>;
15
+ /** Stable identifier for this facilitator. Defaults to `baseUrl`. */
16
+ facilitatorId?: string;
17
+ /** Per-request timeout in milliseconds. Defaults to 120 000 (120 s). */
18
+ timeoutMs?: number;
19
+ /** Custom fetch implementation (defaults to global `fetch`). Useful for tests. */
20
+ fetchImpl?: typeof fetch;
21
+ }
22
+ /**
23
+ * Optional payment context forwarded to `/fee/quote`.
24
+ *
25
+ * Wire field is `paymentPermitContext` to match the facilitator API; the client
26
+ * accepts a plain JSON-shaped object and forwards it as-is.
27
+ */
28
+ export type FeeQuoteContext = Record<string, unknown>;
29
+ /**
30
+ * HTTP client for an x402 facilitator service.
31
+ *
32
+ * Mirrors the Python `FacilitatorClient` interface 1:1 so server middleware on
33
+ * either runtime sees the same shape.
34
+ */
35
+ export declare class FacilitatorClient {
36
+ private readonly baseUrl;
37
+ private readonly headers;
38
+ private readonly timeoutMs;
39
+ private readonly fetchImpl;
40
+ /** Stable identifier for this facilitator (defaults to `baseUrl`). */
41
+ readonly facilitatorId: string;
42
+ constructor(config: FacilitatorClientConfig);
43
+ /**
44
+ * Query facilitator's supported (`x402Version`, `scheme`, `network`) tuples.
45
+ */
46
+ supported(): Promise<SupportedResponse>;
47
+ /**
48
+ * Request fee quotes for a list of payment requirements.
49
+ *
50
+ * @param accepts - The same `accepts[]` you would put in `PaymentRequired`.
51
+ * @param context - Optional `paymentPermitContext`.
52
+ */
53
+ feeQuote(accepts: PaymentRequirements[], context?: FeeQuoteContext): Promise<FeeQuoteResponse[]>;
54
+ /**
55
+ * Verify a payment payload off-chain (no on-chain transaction).
56
+ *
57
+ * Server middleware should call this **before** routing the actual request
58
+ * handler — only proceed to settlement if {@link VerifyResponse.isValid} is true.
59
+ */
60
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
61
+ /**
62
+ * Execute on-chain settlement for a verified payment.
63
+ *
64
+ * Returns a {@link SettleResponse} carrying the transaction hash on success
65
+ * or an `errorReason` on failure.
66
+ */
67
+ settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
68
+ /**
69
+ * Symmetry with the Python client. The TS implementation uses the global
70
+ * `fetch` (no persistent connection pool to close); this is a no-op kept for
71
+ * API parity so callers can write the same teardown logic on both runtimes.
72
+ */
73
+ close(): Promise<void>;
74
+ private requestJson;
75
+ private safeReadText;
76
+ }
77
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/facilitator/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kFAAkF;IAClF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAID;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;gBAEnB,MAAM,EAAE,uBAAuB;IAQ3C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI7C;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ9B;;;;;OAKG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAO1B;;;;;OAKG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAO1B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,WAAW;YA2DX,YAAY;CAO3B"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * FacilitatorClient — TypeScript port of `bankofai.x402.facilitator.FacilitatorClient`.
3
+ *
4
+ * Talks to a remote x402 facilitator via HTTP. Handles `/supported`, `/fee/quote`,
5
+ * `/verify`, `/settle`. Used by server middleware (Hono / Express / etc.) to verify
6
+ * payments off-chain and trigger on-chain settlement.
7
+ */
8
+ import { FacilitatorError } from '../errors.js';
9
+ const DEFAULT_TIMEOUT_MS = 120_000;
10
+ /**
11
+ * HTTP client for an x402 facilitator service.
12
+ *
13
+ * Mirrors the Python `FacilitatorClient` interface 1:1 so server middleware on
14
+ * either runtime sees the same shape.
15
+ */
16
+ export class FacilitatorClient {
17
+ baseUrl;
18
+ headers;
19
+ timeoutMs;
20
+ fetchImpl;
21
+ /** Stable identifier for this facilitator (defaults to `baseUrl`). */
22
+ facilitatorId;
23
+ constructor(config) {
24
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
25
+ this.headers = { ...(config.headers ?? {}) };
26
+ this.facilitatorId = config.facilitatorId ?? this.baseUrl;
27
+ this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
28
+ this.fetchImpl = config.fetchImpl ?? fetch;
29
+ }
30
+ /**
31
+ * Query facilitator's supported (`x402Version`, `scheme`, `network`) tuples.
32
+ */
33
+ async supported() {
34
+ return this.requestJson('GET', '/supported');
35
+ }
36
+ /**
37
+ * Request fee quotes for a list of payment requirements.
38
+ *
39
+ * @param accepts - The same `accepts[]` you would put in `PaymentRequired`.
40
+ * @param context - Optional `paymentPermitContext`.
41
+ */
42
+ async feeQuote(accepts, context) {
43
+ const body = { accepts };
44
+ if (context !== undefined) {
45
+ body.paymentPermitContext = context;
46
+ }
47
+ return this.requestJson('POST', '/fee/quote', body);
48
+ }
49
+ /**
50
+ * Verify a payment payload off-chain (no on-chain transaction).
51
+ *
52
+ * Server middleware should call this **before** routing the actual request
53
+ * handler — only proceed to settlement if {@link VerifyResponse.isValid} is true.
54
+ */
55
+ async verify(payload, requirements) {
56
+ return this.requestJson('POST', '/verify', {
57
+ paymentPayload: payload,
58
+ paymentRequirements: requirements,
59
+ });
60
+ }
61
+ /**
62
+ * Execute on-chain settlement for a verified payment.
63
+ *
64
+ * Returns a {@link SettleResponse} carrying the transaction hash on success
65
+ * or an `errorReason` on failure.
66
+ */
67
+ async settle(payload, requirements) {
68
+ return this.requestJson('POST', '/settle', {
69
+ paymentPayload: payload,
70
+ paymentRequirements: requirements,
71
+ });
72
+ }
73
+ /**
74
+ * Symmetry with the Python client. The TS implementation uses the global
75
+ * `fetch` (no persistent connection pool to close); this is a no-op kept for
76
+ * API parity so callers can write the same teardown logic on both runtimes.
77
+ */
78
+ async close() {
79
+ // no-op — `fetch` does not require explicit cleanup
80
+ }
81
+ async requestJson(method, path, body) {
82
+ const url = `${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`;
83
+ const controller = new AbortController();
84
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
85
+ const init = {
86
+ method,
87
+ headers: {
88
+ Accept: 'application/json',
89
+ ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),
90
+ ...this.headers,
91
+ },
92
+ signal: controller.signal,
93
+ };
94
+ if (body !== undefined) {
95
+ init.body = JSON.stringify(body);
96
+ }
97
+ let response;
98
+ try {
99
+ response = await this.fetchImpl(url, init);
100
+ }
101
+ catch (err) {
102
+ if (err instanceof Error && err.name === 'AbortError') {
103
+ throw new FacilitatorError(`Facilitator request to ${path} timed out after ${this.timeoutMs}ms`, 0);
104
+ }
105
+ throw new FacilitatorError(`Facilitator request to ${path} failed: ${err.message}`, 0);
106
+ }
107
+ finally {
108
+ clearTimeout(timer);
109
+ }
110
+ if (!response.ok) {
111
+ const text = await this.safeReadText(response);
112
+ throw new FacilitatorError(`Facilitator returned HTTP ${response.status} for ${path}`, response.status, text);
113
+ }
114
+ try {
115
+ return (await response.json());
116
+ }
117
+ catch (err) {
118
+ throw new FacilitatorError(`Facilitator response from ${path} was not valid JSON: ${err.message}`, response.status);
119
+ }
120
+ }
121
+ async safeReadText(response) {
122
+ try {
123
+ return await response.text();
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ }
130
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/facilitator/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Facilitator surface for the x402 payment protocol.
3
+ *
4
+ * - {@link FacilitatorClient} — talks to a remote facilitator (used by server middleware)
5
+ * - {@link X402Facilitator} — in-process payment processor (the engine of a facilitator service)
6
+ *
7
+ * Re-exported via the package root so consumers can `import { FacilitatorClient,
8
+ * X402Facilitator } from '@bankofai/x402'`.
9
+ */
10
+ export { FacilitatorClient } from './client.js';
11
+ export type { FacilitatorClientConfig, FeeQuoteContext } from './client.js';
12
+ export { X402Facilitator } from './x402Facilitator.js';
13
+ export type { FacilitatorMechanism, FacilitatorLogger } from './x402Facilitator.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/facilitator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Facilitator surface for the x402 payment protocol.
3
+ *
4
+ * - {@link FacilitatorClient} — talks to a remote facilitator (used by server middleware)
5
+ * - {@link X402Facilitator} — in-process payment processor (the engine of a facilitator service)
6
+ *
7
+ * Re-exported via the package root so consumers can `import { FacilitatorClient,
8
+ * X402Facilitator } from '@bankofai/x402'`.
9
+ */
10
+ export { FacilitatorClient } from './client.js';
11
+ export { X402Facilitator } from './x402Facilitator.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/facilitator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * X402Facilitator — TypeScript port of `bankofai.x402.facilitator.X402Facilitator`.
3
+ *
4
+ * The core in-process payment processor for an x402 facilitator service.
5
+ * Manages a registry of {@link FacilitatorMechanism}s keyed by `(network, scheme)`
6
+ * and routes verify / settle / feeQuote calls to the right implementation.
7
+ *
8
+ * This is the *engine* — wrap it with an HTTP server (Hono / Express / Fastify)
9
+ * to expose `/verify`, `/settle`, `/supported`, `/fee/quote` endpoints.
10
+ */
11
+ import type { FeeQuoteResponse, PaymentPayload, PaymentRequirements, SettleResponse, SupportedResponse, VerifyResponse } from '../types/index.js';
12
+ /**
13
+ * Server-side mechanism interface for the facilitator.
14
+ *
15
+ * One per `(network, scheme)` pair. Implementations live in the chain-specific
16
+ * mechanism packages (TRON / EVM / etc.) — this interface keeps the facilitator
17
+ * core agnostic of any particular chain.
18
+ */
19
+ export interface FacilitatorMechanism {
20
+ /** Scheme name this mechanism handles (e.g. `"exact"`, `"exact_permit"`). */
21
+ scheme(): string;
22
+ /**
23
+ * Optional fee quote for a single requirement. Return `null` when this
24
+ * mechanism cannot quote the requirement (e.g. token not in registry).
25
+ */
26
+ feeQuote(accept: PaymentRequirements, context?: Record<string, unknown>): Promise<FeeQuoteResponse | null>;
27
+ /** Off-chain signature / replay / timing verification. */
28
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
29
+ /** On-chain settlement. */
30
+ settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
31
+ }
32
+ /** Optional logger interface for observability hooks. */
33
+ export interface FacilitatorLogger {
34
+ warn(msg: string, meta?: Record<string, unknown>): void;
35
+ error(msg: string, meta?: Record<string, unknown>): void;
36
+ }
37
+ /**
38
+ * In-process payment processor. Mirrors the Python `X402Facilitator` 1:1.
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const facilitator = new X402Facilitator()
43
+ * .register(['tron:nile'], tronExactMechanism)
44
+ * .register(['eip155:97'], bscExactPermitMechanism);
45
+ *
46
+ * const verifyResult = await facilitator.verify(payload, requirements);
47
+ * if (verifyResult.isValid) {
48
+ * const settleResult = await facilitator.settle(payload, requirements);
49
+ * }
50
+ * ```
51
+ */
52
+ export declare class X402Facilitator {
53
+ /** network → scheme → mechanism */
54
+ private readonly mechanisms;
55
+ private readonly logger;
56
+ constructor(opts?: {
57
+ logger?: FacilitatorLogger;
58
+ });
59
+ /**
60
+ * Register a mechanism for a list of networks. Returns `this` for chaining.
61
+ */
62
+ register(networks: string[], mechanism: FacilitatorMechanism): this;
63
+ /** Snapshot of registered `(x402Version, scheme, network)` triples. */
64
+ supported(): SupportedResponse;
65
+ /**
66
+ * Fee quotes for a list of requirements. Unsupported `(network, scheme)` /
67
+ * mechanisms returning `null` are silently skipped — the result list may be
68
+ * shorter than the input. Per-mechanism exceptions surface as a thrown
69
+ * `Error` (caller decides whether to 4xx or 5xx the HTTP request).
70
+ */
71
+ feeQuote(accepts: PaymentRequirements[], context?: Record<string, unknown>): Promise<FeeQuoteResponse[]>;
72
+ /**
73
+ * Verify a payment payload off-chain. Always returns a {@link VerifyResponse};
74
+ * mechanism exceptions become `isValid: false` with the message as
75
+ * `invalidReason` and a logger.error entry.
76
+ */
77
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
78
+ /**
79
+ * Execute on-chain settlement. Always returns a {@link SettleResponse};
80
+ * exceptions become `success: false` with `errorReason` set.
81
+ */
82
+ settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
83
+ private findMechanism;
84
+ /**
85
+ * Strict variant — throws if any EVM address fails checksum. Used in verify /
86
+ * settle so the failure message ends up in the response.
87
+ */
88
+ private normalizeEvmRequirements;
89
+ /**
90
+ * Lenient variant for `feeQuote` — invalid-EVM-input requirements are simply
91
+ * skipped (returning the original so they can be filtered out by mechanism
92
+ * lookup miss).
93
+ */
94
+ private tryNormalizeEvmRequirements;
95
+ private checksumAddressStrict;
96
+ }
97
+ //# sourceMappingURL=x402Facilitator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Facilitator.d.ts","sourceRoot":"","sources":["../../src/facilitator/x402Facilitator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,MAAM,IAAI,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CACN,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpC,0DAA0D;IAC1D,MAAM,CACJ,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,2BAA2B;IAC3B,MAAM,CACJ,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5B;AAED,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1D;AAOD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe;IAC1B,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwD;IAEnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;gBAE/B,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAE;IAIjD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAanE,uEAAuE;IACvE,SAAS,IAAI,iBAAiB;IAU9B;;;;;OAKG;IACG,QAAQ,CACZ,OAAO,EAAE,mBAAmB,EAAE,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAuB9B;;;;OAIG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IA0B1B;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;IAmC1B,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,qBAAqB;CAM9B"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * X402Facilitator — TypeScript port of `bankofai.x402.facilitator.X402Facilitator`.
3
+ *
4
+ * The core in-process payment processor for an x402 facilitator service.
5
+ * Manages a registry of {@link FacilitatorMechanism}s keyed by `(network, scheme)`
6
+ * and routes verify / settle / feeQuote calls to the right implementation.
7
+ *
8
+ * This is the *engine* — wrap it with an HTTP server (Hono / Express / Fastify)
9
+ * to expose `/verify`, `/settle`, `/supported`, `/fee/quote` endpoints.
10
+ */
11
+ import { getAddress, isAddress } from 'viem';
12
+ const consoleLogger = {
13
+ warn: (msg, meta) => console.warn(`[X402Facilitator] ${msg}`, meta ?? ''),
14
+ error: (msg, meta) => console.error(`[X402Facilitator] ${msg}`, meta ?? ''),
15
+ };
16
+ /**
17
+ * In-process payment processor. Mirrors the Python `X402Facilitator` 1:1.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const facilitator = new X402Facilitator()
22
+ * .register(['tron:nile'], tronExactMechanism)
23
+ * .register(['eip155:97'], bscExactPermitMechanism);
24
+ *
25
+ * const verifyResult = await facilitator.verify(payload, requirements);
26
+ * if (verifyResult.isValid) {
27
+ * const settleResult = await facilitator.settle(payload, requirements);
28
+ * }
29
+ * ```
30
+ */
31
+ export class X402Facilitator {
32
+ /** network → scheme → mechanism */
33
+ mechanisms = new Map();
34
+ logger;
35
+ constructor(opts) {
36
+ this.logger = opts?.logger ?? consoleLogger;
37
+ }
38
+ /**
39
+ * Register a mechanism for a list of networks. Returns `this` for chaining.
40
+ */
41
+ register(networks, mechanism) {
42
+ const scheme = mechanism.scheme();
43
+ for (const network of networks) {
44
+ let bucket = this.mechanisms.get(network);
45
+ if (!bucket) {
46
+ bucket = new Map();
47
+ this.mechanisms.set(network, bucket);
48
+ }
49
+ bucket.set(scheme, mechanism);
50
+ }
51
+ return this;
52
+ }
53
+ /** Snapshot of registered `(x402Version, scheme, network)` triples. */
54
+ supported() {
55
+ const kinds = [];
56
+ for (const [network, schemes] of this.mechanisms) {
57
+ for (const scheme of schemes.keys()) {
58
+ kinds.push({ x402Version: 2, scheme, network });
59
+ }
60
+ }
61
+ return { kinds };
62
+ }
63
+ /**
64
+ * Fee quotes for a list of requirements. Unsupported `(network, scheme)` /
65
+ * mechanisms returning `null` are silently skipped — the result list may be
66
+ * shorter than the input. Per-mechanism exceptions surface as a thrown
67
+ * `Error` (caller decides whether to 4xx or 5xx the HTTP request).
68
+ */
69
+ async feeQuote(accepts, context) {
70
+ const results = [];
71
+ for (const accept of accepts) {
72
+ const normalized = this.tryNormalizeEvmRequirements(accept);
73
+ const mechanism = this.findMechanism(normalized.network, normalized.scheme);
74
+ if (!mechanism) {
75
+ continue;
76
+ }
77
+ try {
78
+ const quote = await mechanism.feeQuote(normalized, context);
79
+ if (quote !== null) {
80
+ results.push(quote);
81
+ }
82
+ }
83
+ catch (err) {
84
+ throw new Error(`Fee quote failed for ${normalized.network}/${normalized.scheme}: ${err.message}`, { cause: err });
85
+ }
86
+ }
87
+ return results;
88
+ }
89
+ /**
90
+ * Verify a payment payload off-chain. Always returns a {@link VerifyResponse};
91
+ * mechanism exceptions become `isValid: false` with the message as
92
+ * `invalidReason` and a logger.error entry.
93
+ */
94
+ async verify(payload, requirements) {
95
+ const mechanism = this.findMechanism(requirements.network, requirements.scheme);
96
+ if (!mechanism) {
97
+ return {
98
+ isValid: false,
99
+ invalidReason: `unsupported_network_scheme: ${requirements.network}/${requirements.scheme}`,
100
+ };
101
+ }
102
+ let normalized;
103
+ try {
104
+ normalized = this.normalizeEvmRequirements(requirements);
105
+ }
106
+ catch (err) {
107
+ return { isValid: false, invalidReason: err.message };
108
+ }
109
+ try {
110
+ return await mechanism.verify(payload, normalized);
111
+ }
112
+ catch (err) {
113
+ this.logger.error('verify failed', {
114
+ network: normalized.network,
115
+ scheme: normalized.scheme,
116
+ error: err.message,
117
+ });
118
+ return { isValid: false, invalidReason: err.message };
119
+ }
120
+ }
121
+ /**
122
+ * Execute on-chain settlement. Always returns a {@link SettleResponse};
123
+ * exceptions become `success: false` with `errorReason` set.
124
+ */
125
+ async settle(payload, requirements) {
126
+ const mechanism = this.findMechanism(requirements.network, requirements.scheme);
127
+ if (!mechanism) {
128
+ return {
129
+ success: false,
130
+ network: requirements.network,
131
+ errorReason: `unsupported_network_scheme: ${requirements.network}/${requirements.scheme}`,
132
+ };
133
+ }
134
+ let normalized;
135
+ try {
136
+ normalized = this.normalizeEvmRequirements(requirements);
137
+ }
138
+ catch (err) {
139
+ return {
140
+ success: false,
141
+ network: requirements.network,
142
+ errorReason: err.message,
143
+ };
144
+ }
145
+ try {
146
+ return await mechanism.settle(payload, normalized);
147
+ }
148
+ catch (err) {
149
+ this.logger.error('settle failed', {
150
+ network: normalized.network,
151
+ scheme: normalized.scheme,
152
+ error: err.message,
153
+ });
154
+ return {
155
+ success: false,
156
+ network: normalized.network,
157
+ errorReason: err.message,
158
+ };
159
+ }
160
+ }
161
+ findMechanism(network, scheme) {
162
+ return this.mechanisms.get(network)?.get(scheme) ?? null;
163
+ }
164
+ /**
165
+ * Strict variant — throws if any EVM address fails checksum. Used in verify /
166
+ * settle so the failure message ends up in the response.
167
+ */
168
+ normalizeEvmRequirements(reqs) {
169
+ if (!reqs.network.startsWith('eip155:')) {
170
+ return reqs;
171
+ }
172
+ return {
173
+ ...reqs,
174
+ asset: this.checksumAddressStrict(reqs.asset, 'asset'),
175
+ payTo: this.checksumAddressStrict(reqs.payTo, 'payTo'),
176
+ extra: reqs.extra
177
+ ? {
178
+ ...reqs.extra,
179
+ fee: reqs.extra.fee
180
+ ? {
181
+ ...reqs.extra.fee,
182
+ feeTo: this.checksumAddressStrict(reqs.extra.fee.feeTo, 'extra.fee.feeTo'),
183
+ caller: reqs.extra.fee.caller
184
+ ? this.checksumAddressStrict(reqs.extra.fee.caller, 'extra.fee.caller')
185
+ : reqs.extra.fee.caller,
186
+ }
187
+ : reqs.extra.fee,
188
+ }
189
+ : reqs.extra,
190
+ };
191
+ }
192
+ /**
193
+ * Lenient variant for `feeQuote` — invalid-EVM-input requirements are simply
194
+ * skipped (returning the original so they can be filtered out by mechanism
195
+ * lookup miss).
196
+ */
197
+ tryNormalizeEvmRequirements(reqs) {
198
+ try {
199
+ return this.normalizeEvmRequirements(reqs);
200
+ }
201
+ catch {
202
+ return reqs;
203
+ }
204
+ }
205
+ checksumAddressStrict(address, fieldName) {
206
+ if (!isAddress(address, { strict: false })) {
207
+ throw new Error(`Invalid EVM address for ${fieldName}: ${address}`);
208
+ }
209
+ return getAddress(address);
210
+ }
211
+ }
212
+ //# sourceMappingURL=x402Facilitator.js.map