@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,71 @@
1
+ const SCHEME_EXACT_GASFREE = 'exact_gasfree';
2
+ /**
3
+ * TRON facilitator mechanism for the `exact_gasfree` scheme.
4
+ *
5
+ * Mirrors Python `mechanisms.tron.exact_gasfree.facilitator.ExactGasFreeFacilitatorMechanism`.
6
+ * Uses TRON GasFree (custodial relayer) — user signs TIP-712 permit, the
7
+ * service provider submits the transaction on-chain.
8
+ */
9
+ export class ExactGasFreeFacilitatorMechanism {
10
+ fee;
11
+ constructor(fee) {
12
+ this.fee = fee;
13
+ }
14
+ scheme() {
15
+ return SCHEME_EXACT_GASFREE;
16
+ }
17
+ async feeQuote(accept, _context) {
18
+ const key = `${accept.network}:${accept.asset.toLowerCase()}`;
19
+ const feeAmount = this.fee.baseFeesByToken?.[key] ?? this.fee.defaultBaseFee ?? '0';
20
+ return {
21
+ fee: {
22
+ feeTo: this.fee.feeTo,
23
+ feeAmount,
24
+ ...(this.fee.caller ? { caller: this.fee.caller } : {}),
25
+ },
26
+ pricing: 'fixed',
27
+ scheme: this.scheme(),
28
+ network: accept.network,
29
+ asset: accept.asset,
30
+ };
31
+ }
32
+ /**
33
+ * Off-chain verify: structural checks. Real TIP-712 signature + GasFree
34
+ * API deadline-clamping checks left as TODO.
35
+ */
36
+ async verify(payload, requirements) {
37
+ const permit = payload.payload.paymentPermit;
38
+ if (!permit) {
39
+ return { isValid: false, invalidReason: 'missing_permit' };
40
+ }
41
+ if (permit.payment.payToken !== requirements.asset) {
42
+ return { isValid: false, invalidReason: 'asset_mismatch' };
43
+ }
44
+ if (permit.payment.payTo !== requirements.payTo) {
45
+ return { isValid: false, invalidReason: 'payTo_mismatch' };
46
+ }
47
+ try {
48
+ if (BigInt(permit.payment.payAmount) < BigInt(requirements.amount)) {
49
+ return { isValid: false, invalidReason: 'amount_too_low' };
50
+ }
51
+ }
52
+ catch {
53
+ return { isValid: false, invalidReason: 'invalid_amount' };
54
+ }
55
+ // TODO(v0.6.0b): TIP-712 signature recovery + GasFree balance/deadline check.
56
+ return { isValid: true };
57
+ }
58
+ /**
59
+ * Submit the GasFree permit through the GasFreeController contract.
60
+ *
61
+ * TODO(v0.6.0b): call GasFree relayer API or contract directly.
62
+ */
63
+ async settle(_payload, requirements) {
64
+ return {
65
+ success: false,
66
+ network: requirements.network,
67
+ errorReason: 'tron_exact_gasfree_settle_not_implemented',
68
+ };
69
+ }
70
+ }
71
+ //# sourceMappingURL=facilitator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_gasfree/facilitator.ts"],"names":[],"mappings":"AASA,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAc7C;;;;;;GAMG;AACH,MAAM,OAAO,gCAAgC;IACd;IAA7B,YAA6B,GAAoB;QAApB,QAAG,GAAH,GAAG,CAAiB;IAAG,CAAC;IAErD,MAAM;QACJ,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,MAA2B,EAC3B,QAAkC;QAElC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC9D,MAAM,SAAS,GACb,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC;QACpE,OAAO;YACL,GAAG,EAAE;gBACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;gBACrB,SAAS;gBACT,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD;YACD,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,OAAuB,EACvB,YAAiC;QAEjC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;YAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;QAC7D,CAAC;QACD,8EAA8E;QAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,QAAwB,EACxB,YAAiC;QAEjC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,WAAW,EAAE,2CAA2C;SACzD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { ExactGasFreeClientMechanism } from './client.js';
2
+ export { ExactGasFreeServerMechanism } from './server.js';
3
+ export { ExactGasFreeFacilitatorMechanism } from './facilitator.js';
4
+ export type { ExactGasFreeFee } from './facilitator.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_gasfree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ExactGasFreeClientMechanism } from './client.js';
2
+ export { ExactGasFreeServerMechanism } from './server.js';
3
+ export { ExactGasFreeFacilitatorMechanism } from './facilitator.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_gasfree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ServerMechanism } from '../../../server/types.js';
2
+ import type { PaymentPermit, PaymentRequirements } from '../../../types/index.js';
3
+ /**
4
+ * TRON server mechanism for the `exact_gasfree` scheme.
5
+ *
6
+ * Mirrors Python `mechanisms.tron.exact_gasfree.server.ExactGasFreeServerMechanism`.
7
+ * GasFree is TRON-only (no EVM counterpart) so there is no shared
8
+ * `_exact_gasfree_base/`.
9
+ */
10
+ export declare class ExactGasFreeServerMechanism implements ServerMechanism {
11
+ scheme(): string;
12
+ parsePrice(price: string, network: string): Promise<import("../../../tokens.js").AssetAmount>;
13
+ enhancePaymentRequirements(requirements: PaymentRequirements, _deliveryMode: string): Promise<PaymentRequirements>;
14
+ validatePaymentRequirements(requirements: PaymentRequirements): boolean;
15
+ /**
16
+ * TIP-712 GasFree permit signature recovery.
17
+ *
18
+ * TODO(v0.6.0b): port from Python — TIP-712 hash + signature recovery.
19
+ * Returns `true` for now; facilitator authoritative.
20
+ */
21
+ verifySignature(_permit: PaymentPermit | null | undefined, _signature: string, _network: string): Promise<boolean>;
22
+ }
23
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_gasfree/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAIjC;;;;;;GAMG;AACH,qBAAa,2BAA4B,YAAW,eAAe;IACjE,MAAM,IAAI,MAAM;IAIV,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIzC,0BAA0B,CAC9B,YAAY,EAAE,mBAAmB,EACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,CAAC;IAa/B,2BAA2B,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO;IAIvE;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;CAGpB"}
@@ -0,0 +1,43 @@
1
+ import { findByAddress, parsePrice } from '../../../tokens.js';
2
+ const SCHEME_EXACT_GASFREE = 'exact_gasfree';
3
+ /**
4
+ * TRON server mechanism for the `exact_gasfree` scheme.
5
+ *
6
+ * Mirrors Python `mechanisms.tron.exact_gasfree.server.ExactGasFreeServerMechanism`.
7
+ * GasFree is TRON-only (no EVM counterpart) so there is no shared
8
+ * `_exact_gasfree_base/`.
9
+ */
10
+ export class ExactGasFreeServerMechanism {
11
+ scheme() {
12
+ return SCHEME_EXACT_GASFREE;
13
+ }
14
+ async parsePrice(price, network) {
15
+ return parsePrice(price, network);
16
+ }
17
+ async enhancePaymentRequirements(requirements, _deliveryMode) {
18
+ const token = findByAddress(requirements.network, requirements.asset);
19
+ if (!token)
20
+ return requirements;
21
+ return {
22
+ ...requirements,
23
+ extra: {
24
+ ...(requirements.extra ?? {}),
25
+ name: token.name,
26
+ ...(token.version ? { version: token.version } : {}),
27
+ },
28
+ };
29
+ }
30
+ validatePaymentRequirements(requirements) {
31
+ return requirements.network.startsWith('tron:');
32
+ }
33
+ /**
34
+ * TIP-712 GasFree permit signature recovery.
35
+ *
36
+ * TODO(v0.6.0b): port from Python — TIP-712 hash + signature recovery.
37
+ * Returns `true` for now; facilitator authoritative.
38
+ */
39
+ async verifySignature(_permit, _signature, _network) {
40
+ return true;
41
+ }
42
+ }
43
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_gasfree/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAO/D,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,OAAO,2BAA2B;IACtC,MAAM;QACJ,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAe;QAC7C,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,YAAiC,EACjC,aAAqB;QAErB,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK;YAAE,OAAO,YAAY,CAAC;QAChC,OAAO;YACL,GAAG,YAAY;YACf,KAAK,EAAE;gBACL,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD;SACF,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,YAAiC;QAC3D,OAAO,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CACnB,OAAyC,EACzC,UAAkB,EAClB,QAAgB;QAEhB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Uses TIP-712 (TRON's EIP-712 implementation) for signing PaymentPermit.
5
5
  */
6
- import type { ClientMechanism, ClientSigner, PaymentRequirements, PaymentPayload, PaymentPermitContext } from '../index.js';
6
+ import type { ClientMechanism, ClientSigner, PaymentRequirements, PaymentPayload, PaymentPermitContext } from '../../../index.js';
7
7
  /**
8
8
  * TRON client mechanism for "exact_permit" payment scheme
9
9
  */
@@ -17,4 +17,4 @@ export declare class ExactPermitTronClientMechanism implements ClientMechanism {
17
17
  paymentPermitContext?: PaymentPermitContext;
18
18
  }): Promise<PaymentPayload>;
19
19
  }
20
- //# sourceMappingURL=exact.d.ts.map
20
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,cAAc,EAEd,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAa3B;;GAEG;AACH,qBAAa,8BAA+B,YAAW,eAAe;IACpE,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,gBAAgB,CAA8B;gBAE1C,MAAM,EAAE,YAAY;IAIhC,SAAS,IAAI,YAAY;IAIzB,MAAM,IAAI,MAAM;IAIV,oBAAoB,CACxB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;KAAE,GAC3D,OAAO,CAAC,cAAc,CAAC;CAyG3B"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Uses TIP-712 (TRON's EIP-712 implementation) for signing PaymentPermit.
5
5
  */
6
- import { KIND_MAP, PAYMENT_PERMIT_TYPES, PAYMENT_PERMIT_PRIMARY_TYPE, getChainId, getPaymentPermitAddress, TronAddressConverter, TRON_ZERO_ADDRESS, PermitValidationError, } from '../index.js';
6
+ import { KIND_MAP, PAYMENT_PERMIT_TYPES, PAYMENT_PERMIT_PRIMARY_TYPE, getChainId, getPaymentPermitAddress, TronAddressConverter, TRON_ZERO_ADDRESS, PermitValidationError, } from '../../../index.js';
7
7
  /**
8
8
  * TRON client mechanism for "exact_permit" payment scheme
9
9
  */
@@ -107,4 +107,4 @@ export class ExactPermitTronClientMechanism {
107
107
  };
108
108
  }
109
109
  }
110
- //# sourceMappingURL=exact.js.map
110
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { BaseExactPermitFacilitatorMechanism, type BaseExactPermitFee } from '../../_exact_permit_base/facilitator.js';
2
+ import type { PaymentPayload, PaymentRequirements, SettleResponse } from '../../../types/index.js';
3
+ /**
4
+ * TRON facilitator mechanism for the `exact_permit` scheme.
5
+ *
6
+ * Mirrors Python `mechanisms.tron.exact_permit.facilitator.ExactPermitTronFacilitatorMechanism`.
7
+ */
8
+ export declare class ExactPermitTronFacilitatorMechanism extends BaseExactPermitFacilitatorMechanism {
9
+ constructor(fee: BaseExactPermitFee);
10
+ /**
11
+ * Submit `permitTransferFrom` to the TRON PaymentPermit contract.
12
+ *
13
+ * TODO(v0.6.0b): wire tronweb and call `PaymentPermit.permitTransferFrom`.
14
+ */
15
+ settle(_payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
16
+ }
17
+ //# sourceMappingURL=facilitator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facilitator.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/facilitator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EACnC,KAAK,kBAAkB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,qBAAa,mCAAoC,SAAQ,mCAAmC;gBAC9E,GAAG,EAAE,kBAAkB;IAInC;;;;OAIG;IACG,MAAM,CACV,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,mBAAmB,GAChC,OAAO,CAAC,cAAc,CAAC;CAO3B"}
@@ -0,0 +1,24 @@
1
+ import { BaseExactPermitFacilitatorMechanism, } from '../../_exact_permit_base/facilitator.js';
2
+ /**
3
+ * TRON facilitator mechanism for the `exact_permit` scheme.
4
+ *
5
+ * Mirrors Python `mechanisms.tron.exact_permit.facilitator.ExactPermitTronFacilitatorMechanism`.
6
+ */
7
+ export class ExactPermitTronFacilitatorMechanism extends BaseExactPermitFacilitatorMechanism {
8
+ constructor(fee) {
9
+ super(fee);
10
+ }
11
+ /**
12
+ * Submit `permitTransferFrom` to the TRON PaymentPermit contract.
13
+ *
14
+ * TODO(v0.6.0b): wire tronweb and call `PaymentPermit.permitTransferFrom`.
15
+ */
16
+ async settle(_payload, requirements) {
17
+ return {
18
+ success: false,
19
+ network: requirements.network,
20
+ errorReason: 'tron_exact_permit_settle_not_implemented',
21
+ };
22
+ }
23
+ }
24
+ //# sourceMappingURL=facilitator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facilitator.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/facilitator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,GAEpC,MAAM,yCAAyC,CAAC;AAOjD;;;;GAIG;AACH,MAAM,OAAO,mCAAoC,SAAQ,mCAAmC;IAC1F,YAAY,GAAuB;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CACV,QAAwB,EACxB,YAAiC;QAEjC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,WAAW,EAAE,0CAA0C;SACxD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { ExactPermitTronClientMechanism } from './client.js';
2
+ export { ExactPermitTronServerMechanism } from './server.js';
3
+ export { ExactPermitTronFacilitatorMechanism } from './facilitator.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ExactPermitTronClientMechanism } from './client.js';
2
+ export { ExactPermitTronServerMechanism } from './server.js';
3
+ export { ExactPermitTronFacilitatorMechanism } from './facilitator.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,mCAAmC,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { BaseExactPermitServerMechanism } from '../../_exact_permit_base/server.js';
2
+ /**
3
+ * TRON server mechanism for the `exact_permit` scheme.
4
+ *
5
+ * Mirrors Python `mechanisms.tron.exact_permit.server.ExactPermitTronServerMechanism`.
6
+ */
7
+ export declare class ExactPermitTronServerMechanism extends BaseExactPermitServerMechanism {
8
+ protected getNetworkPrefix(): string;
9
+ protected validateAddressFormat(address: string): boolean;
10
+ }
11
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,8BAA8B;IAChF,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAIpC,SAAS,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAO1D"}
@@ -0,0 +1,22 @@
1
+ import { BaseExactPermitServerMechanism } from '../../_exact_permit_base/server.js';
2
+ /**
3
+ * TRON server mechanism for the `exact_permit` scheme.
4
+ *
5
+ * Mirrors Python `mechanisms.tron.exact_permit.server.ExactPermitTronServerMechanism`.
6
+ */
7
+ export class ExactPermitTronServerMechanism extends BaseExactPermitServerMechanism {
8
+ getNetworkPrefix() {
9
+ return 'tron:';
10
+ }
11
+ validateAddressFormat(address) {
12
+ if (typeof address !== 'string')
13
+ return false;
14
+ // Accept both Base58 (T...) and 0x-prefixed hex forms
15
+ if (address.startsWith('T') && address.length === 34)
16
+ return true;
17
+ if (address.startsWith('0x') && address.length === 42)
18
+ return true;
19
+ return false;
20
+ }
21
+ }
22
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/mechanisms/tron/exact_permit/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AAEpF;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,8BAA8B;IACtE,gBAAgB;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,qBAAqB,CAAC,OAAe;QAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9C,sDAAsD;QACtD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAClE,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Framework-agnostic core for x402 server middleware.
3
+ *
4
+ * Implements the verify → settle → header-attach pipeline used by all
5
+ * server adapters (Hono, Express, Fastify, ...). Adapters read the request
6
+ * headers, hand them to {@link processX402Request}, then translate the
7
+ * resulting {@link X402Decision} back into their framework's response shape.
8
+ *
9
+ * This mirrors `bankofai.x402.fastapi.X402Middleware` on the Python side but
10
+ * splits the framework binding from the protocol logic so we can target any
11
+ * Node.js HTTP framework with a thin adapter.
12
+ */
13
+ import type { FacilitatorClient } from '../facilitator/client.js';
14
+ import { PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER } from '../http/client.js';
15
+ import type { PaymentRequired, PaymentRequirements, SettleResponse } from '../types/index.js';
16
+ export { PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, };
17
+ export declare const X402_VERSION = 2;
18
+ /** Minimum config needed to protect an endpoint. */
19
+ export interface X402MiddlewareConfig {
20
+ /** Facilitator client used for `/verify` and `/settle`. */
21
+ facilitator: FacilitatorClient;
22
+ /**
23
+ * `accepts` array advertised in the 402 challenge. Multiple entries express
24
+ * multi-token / multi-scheme acceptance — clients pick one and pay it.
25
+ */
26
+ accepts: PaymentRequirements[];
27
+ /** Optional resource info echoed back in the 402 body. */
28
+ resource?: PaymentRequired['resource'];
29
+ /**
30
+ * Optional extensions advertised on the 402 (e.g. `payment-identifier`).
31
+ * Forwarded as-is into the `PaymentRequired.extensions` field.
32
+ */
33
+ extensions?: PaymentRequired['extensions'];
34
+ }
35
+ /** Outcome of {@link processX402Request}. The adapter renders this. */
36
+ export type X402Decision =
37
+ /** No payment header → return a 402 with PAYMENT-REQUIRED set. */
38
+ {
39
+ kind: 'paymentRequired';
40
+ status: 402;
41
+ paymentRequired: PaymentRequired;
42
+ headers: Record<string, string>;
43
+ }
44
+ /** Payload was malformed or doesn't match any acceptable requirement. */
45
+ | {
46
+ kind: 'invalid';
47
+ status: 400;
48
+ reason: string;
49
+ }
50
+ /** Verify or settle failed → tell the client. */
51
+ | {
52
+ kind: 'failed';
53
+ status: 500;
54
+ reason: string;
55
+ transaction?: string;
56
+ network?: string;
57
+ }
58
+ /**
59
+ * Payment succeeded. Adapter should run the protected handler and attach
60
+ * `headers` (which contains `PAYMENT-RESPONSE`) onto the response.
61
+ */
62
+ | {
63
+ kind: 'allow';
64
+ settleResult: SettleResponse;
65
+ headers: Record<string, string>;
66
+ };
67
+ /**
68
+ * Run one x402 protocol iteration against the given config.
69
+ *
70
+ * @param signatureHeader - Value of the `PAYMENT-SIGNATURE` request header (or
71
+ * null/undefined if absent).
72
+ * @param config - Server-side payment configuration.
73
+ */
74
+ export declare function processX402Request(signatureHeader: string | null | undefined, config: X402MiddlewareConfig): Promise<X402Decision>;
75
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/middleware/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAEV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,CAAC;AAEF,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,2DAA2D;IAC3D,WAAW,EAAE,iBAAiB,CAAC;IAC/B;;;OAGG;IACH,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACvC;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;CAC5C;AAED,uEAAuE;AACvE,MAAM,MAAM,YAAY;AACtB,kEAAkE;AAChE;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AACH,yEAAyE;GACvE;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AACH,iDAAiD;GAC/C;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACH;;;GAGG;GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEN;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,YAAY,CAAC,CA8EvB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Framework-agnostic core for x402 server middleware.
3
+ *
4
+ * Implements the verify → settle → header-attach pipeline used by all
5
+ * server adapters (Hono, Express, Fastify, ...). Adapters read the request
6
+ * headers, hand them to {@link processX402Request}, then translate the
7
+ * resulting {@link X402Decision} back into their framework's response shape.
8
+ *
9
+ * This mirrors `bankofai.x402.fastapi.X402Middleware` on the Python side but
10
+ * splits the framework binding from the protocol logic so we can target any
11
+ * Node.js HTTP framework with a thin adapter.
12
+ */
13
+ import { PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, } from '../http/client.js';
14
+ import { decodePaymentPayload, encodePaymentPayload, } from '../utils/encoding.js';
15
+ // Re-export header constants from http/client (single source of truth).
16
+ export { PAYMENT_REQUIRED_HEADER, PAYMENT_RESPONSE_HEADER, PAYMENT_SIGNATURE_HEADER, };
17
+ export const X402_VERSION = 2;
18
+ /**
19
+ * Run one x402 protocol iteration against the given config.
20
+ *
21
+ * @param signatureHeader - Value of the `PAYMENT-SIGNATURE` request header (or
22
+ * null/undefined if absent).
23
+ * @param config - Server-side payment configuration.
24
+ */
25
+ export async function processX402Request(signatureHeader, config) {
26
+ if (!signatureHeader) {
27
+ const paymentRequired = buildPaymentRequired(config);
28
+ return {
29
+ kind: 'paymentRequired',
30
+ status: 402,
31
+ paymentRequired,
32
+ headers: {
33
+ [PAYMENT_REQUIRED_HEADER]: encodePaymentPayload(paymentRequired),
34
+ },
35
+ };
36
+ }
37
+ let payload;
38
+ try {
39
+ payload = decodePaymentPayload(signatureHeader);
40
+ }
41
+ catch (err) {
42
+ return {
43
+ kind: 'invalid',
44
+ status: 400,
45
+ reason: `Invalid payment payload: ${err.message}`,
46
+ };
47
+ }
48
+ const matched = matchAccepts(config.accepts, payload);
49
+ if (!matched) {
50
+ return {
51
+ kind: 'invalid',
52
+ status: 400,
53
+ reason: 'Unsupported payment token / network / scheme',
54
+ };
55
+ }
56
+ let verifyResult;
57
+ try {
58
+ verifyResult = await config.facilitator.verify(payload, matched);
59
+ }
60
+ catch (err) {
61
+ return {
62
+ kind: 'failed',
63
+ status: 500,
64
+ reason: `Verify request failed: ${err.message}`,
65
+ };
66
+ }
67
+ if (!verifyResult.isValid) {
68
+ return {
69
+ kind: 'failed',
70
+ status: 500,
71
+ reason: verifyResult.invalidReason ?? 'verify rejected payment',
72
+ };
73
+ }
74
+ let settleResult;
75
+ try {
76
+ settleResult = await config.facilitator.settle(payload, matched);
77
+ }
78
+ catch (err) {
79
+ return {
80
+ kind: 'failed',
81
+ status: 500,
82
+ reason: `Settle request failed: ${err.message}`,
83
+ };
84
+ }
85
+ if (!settleResult.success) {
86
+ return {
87
+ kind: 'failed',
88
+ status: 500,
89
+ reason: settleResult.errorReason ?? 'settle failed',
90
+ transaction: settleResult.transaction,
91
+ network: settleResult.network,
92
+ };
93
+ }
94
+ return {
95
+ kind: 'allow',
96
+ settleResult,
97
+ headers: {
98
+ [PAYMENT_RESPONSE_HEADER]: encodePaymentPayload(settleResult),
99
+ },
100
+ };
101
+ }
102
+ /** Build the 402 challenge body from the middleware config. */
103
+ function buildPaymentRequired(config) {
104
+ return {
105
+ x402Version: X402_VERSION,
106
+ accepts: config.accepts,
107
+ ...(config.resource ? { resource: config.resource } : {}),
108
+ ...(config.extensions ? { extensions: config.extensions } : {}),
109
+ };
110
+ }
111
+ /**
112
+ * Pick the `accepts[]` entry that matches the client's chosen payment.
113
+ *
114
+ * The wire format requires the client to echo `payload.accepted` — we trust
115
+ * that as the discriminator and verify it lines up with our offer.
116
+ */
117
+ function matchAccepts(accepts, payload) {
118
+ const want = payload.accepted;
119
+ for (const offer of accepts) {
120
+ if (offer.network !== want.network)
121
+ continue;
122
+ if (offer.scheme !== want.scheme)
123
+ continue;
124
+ if (offer.asset.toLowerCase() !== want.asset.toLowerCase())
125
+ continue;
126
+ if (offer.payTo.toLowerCase() !== want.payTo.toLowerCase())
127
+ continue;
128
+ return offer;
129
+ }
130
+ return null;
131
+ }
132
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/middleware/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Express adapter for the x402 server middleware.
3
+ *
4
+ * Usage:
5
+ * ```ts
6
+ * import express from 'express';
7
+ * import { FacilitatorClient, x402Express } from '@bankofai/x402';
8
+ *
9
+ * const facilitator = new FacilitatorClient({ baseUrl: 'https://facilitator.example' });
10
+ * const app = express();
11
+ *
12
+ * app.use(
13
+ * '/api/llm-summary',
14
+ * x402Express({
15
+ * facilitator,
16
+ * accepts: [{
17
+ * scheme: 'exact_permit',
18
+ * network: 'eip155:97',
19
+ * amount: '1000000',
20
+ * asset: '0x...',
21
+ * payTo: '0x...',
22
+ * }],
23
+ * }),
24
+ * );
25
+ *
26
+ * app.get('/api/llm-summary', (req, res) => res.json({ summary: '...' }));
27
+ * ```
28
+ *
29
+ * Express is imported via `peerDependencies`; consumers add it to their app.
30
+ */
31
+ import type { RequestHandler } from 'express';
32
+ import { type X402MiddlewareConfig } from './core.js';
33
+ /**
34
+ * Build an Express request handler that gates the route on x402 payment.
35
+ *
36
+ * Behavior matches the Hono adapter — see {@link X402MiddlewareConfig} and
37
+ * {@link processX402Request} for the underlying decision logic.
38
+ */
39
+ export declare function x402Express(config: X402MiddlewareConfig): RequestHandler;
40
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/middleware/express.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAyB,cAAc,EAAY,MAAM,SAAS,CAAC;AAE/E,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,WAAW,CAAC;AAEnB;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAoCxE"}