agentwallet-sdk 5.1.1 → 6.0.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 (366) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +463 -24
  3. package/dist/bridge/__tests__/solana.test.d.ts +2 -0
  4. package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
  5. package/dist/bridge/__tests__/solana.test.js +106 -0
  6. package/dist/bridge/__tests__/solana.test.js.map +1 -0
  7. package/dist/bridge/client.d.ts +21 -7
  8. package/dist/bridge/client.d.ts.map +1 -1
  9. package/dist/bridge/client.js +16 -1
  10. package/dist/bridge/client.js.map +1 -1
  11. package/dist/bridge/index.d.ts +12 -1
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/index.js +11 -0
  14. package/dist/bridge/index.js.map +1 -1
  15. package/dist/bridge/solana.d.ts +132 -0
  16. package/dist/bridge/solana.d.ts.map +1 -0
  17. package/dist/bridge/solana.js +313 -0
  18. package/dist/bridge/solana.js.map +1 -0
  19. package/dist/bridge/types.d.ts +35 -10
  20. package/dist/bridge/types.d.ts.map +1 -1
  21. package/dist/bridge/types.js +16 -4
  22. package/dist/bridge/types.js.map +1 -1
  23. package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -1
  24. package/dist/escrow/MutualStakeEscrow.js +3 -5
  25. package/dist/escrow/MutualStakeEscrow.js.map +1 -1
  26. package/dist/index.d.ts +192 -469
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +14 -8
  29. package/dist/index.js.map +1 -1
  30. package/dist/policy/SpendingPolicy.test.js.map +1 -1
  31. package/dist/swap/SwapModule.d.ts +17 -3
  32. package/dist/swap/SwapModule.d.ts.map +1 -1
  33. package/dist/swap/SwapModule.js +21 -5
  34. package/dist/swap/SwapModule.js.map +1 -1
  35. package/dist/swap/index.d.ts +9 -2
  36. package/dist/swap/index.d.ts.map +1 -1
  37. package/dist/swap/index.js +8 -1
  38. package/dist/swap/index.js.map +1 -1
  39. package/dist/swap/types.d.ts +58 -1
  40. package/dist/swap/types.d.ts.map +1 -1
  41. package/dist/swap/types.js +56 -1
  42. package/dist/swap/types.js.map +1 -1
  43. package/dist/tokens/__tests__/decimals.test.d.ts +2 -0
  44. package/dist/tokens/__tests__/decimals.test.d.ts.map +1 -0
  45. package/dist/tokens/__tests__/decimals.test.js +107 -0
  46. package/dist/tokens/__tests__/decimals.test.js.map +1 -0
  47. package/dist/tokens/__tests__/registry.test.d.ts +2 -0
  48. package/dist/tokens/__tests__/registry.test.d.ts.map +1 -0
  49. package/dist/tokens/__tests__/registry.test.js +191 -0
  50. package/dist/tokens/__tests__/registry.test.js.map +1 -0
  51. package/dist/tokens/__tests__/transfers.test.d.ts +2 -0
  52. package/dist/tokens/__tests__/transfers.test.d.ts.map +1 -0
  53. package/dist/tokens/__tests__/transfers.test.js +103 -0
  54. package/dist/tokens/__tests__/transfers.test.js.map +1 -0
  55. package/dist/tokens/decimals.d.ts +65 -0
  56. package/dist/tokens/decimals.d.ts.map +1 -0
  57. package/dist/tokens/decimals.js +112 -0
  58. package/dist/tokens/decimals.js.map +1 -0
  59. package/dist/tokens/index.d.ts +14 -0
  60. package/dist/tokens/index.d.ts.map +1 -0
  61. package/dist/tokens/index.js +14 -0
  62. package/dist/tokens/index.js.map +1 -0
  63. package/dist/tokens/registry.d.ts +82 -0
  64. package/dist/tokens/registry.d.ts.map +1 -0
  65. package/dist/tokens/registry.js +293 -0
  66. package/dist/tokens/registry.js.map +1 -0
  67. package/dist/tokens/solana.d.ts +108 -0
  68. package/dist/tokens/solana.d.ts.map +1 -0
  69. package/dist/tokens/solana.js +306 -0
  70. package/dist/tokens/solana.js.map +1 -0
  71. package/dist/tokens/transfers.d.ts +95 -0
  72. package/dist/tokens/transfers.d.ts.map +1 -0
  73. package/dist/tokens/transfers.js +196 -0
  74. package/dist/tokens/transfers.js.map +1 -0
  75. package/dist/types.d.ts +20 -1
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +6 -0
  78. package/dist/types.js.map +1 -1
  79. package/dist/x402/__tests__/client.test.js +77 -5
  80. package/dist/x402/__tests__/client.test.js.map +1 -1
  81. package/dist/x402/chains/abstract/index.d.ts.map +1 -1
  82. package/dist/x402/chains/abstract/index.js.map +1 -1
  83. package/dist/x402/chains/stellar/index.d.ts +149 -0
  84. package/dist/x402/chains/stellar/index.d.ts.map +1 -0
  85. package/dist/x402/chains/stellar/index.js +199 -0
  86. package/dist/x402/chains/stellar/index.js.map +1 -0
  87. package/dist/x402/client.d.ts +7 -1
  88. package/dist/x402/client.d.ts.map +1 -1
  89. package/dist/x402/client.js +24 -13
  90. package/dist/x402/client.js.map +1 -1
  91. package/dist/x402/index.d.ts +1 -0
  92. package/dist/x402/index.d.ts.map +1 -1
  93. package/dist/x402/index.js +2 -0
  94. package/dist/x402/index.js.map +1 -1
  95. package/dist/x402/middleware.d.ts.map +1 -1
  96. package/dist/x402/middleware.js +0 -3
  97. package/dist/x402/middleware.js.map +1 -1
  98. package/dist/x402/multi-asset.d.ts +54 -0
  99. package/dist/x402/multi-asset.d.ts.map +1 -0
  100. package/dist/x402/multi-asset.js +123 -0
  101. package/dist/x402/multi-asset.js.map +1 -0
  102. package/dist/x402/types.d.ts +22 -3
  103. package/dist/x402/types.d.ts.map +1 -1
  104. package/dist/x402/types.js +34 -4
  105. package/dist/x402/types.js.map +1 -1
  106. package/package.json +21 -6
  107. package/dist/ap2/index.d.ts +0 -185
  108. package/dist/ap2/index.d.ts.map +0 -1
  109. package/dist/ap2/index.js +0 -255
  110. package/dist/ap2/index.js.map +0 -1
  111. package/dist/bridge/unified.d.ts +0 -101
  112. package/dist/bridge/unified.d.ts.map +0 -1
  113. package/dist/bridge/unified.js +0 -284
  114. package/dist/bridge/unified.js.map +0 -1
  115. package/dist/chains.d.ts +0 -62
  116. package/dist/chains.d.ts.map +0 -1
  117. package/dist/chains.js +0 -108
  118. package/dist/chains.js.map +0 -1
  119. package/dist/fiat/index.d.ts +0 -10
  120. package/dist/fiat/index.d.ts.map +0 -1
  121. package/dist/fiat/index.js +0 -9
  122. package/dist/fiat/index.js.map +0 -1
  123. package/dist/fiat/onramp.d.ts +0 -101
  124. package/dist/fiat/onramp.d.ts.map +0 -1
  125. package/dist/fiat/onramp.js +0 -155
  126. package/dist/fiat/onramp.js.map +0 -1
  127. package/dist/fiat/providers/index.d.ts +0 -16
  128. package/dist/fiat/providers/index.d.ts.map +0 -1
  129. package/dist/fiat/providers/index.js +0 -30
  130. package/dist/fiat/providers/index.js.map +0 -1
  131. package/dist/fiat/providers/moonpay.d.ts +0 -22
  132. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  133. package/dist/fiat/providers/moonpay.js +0 -107
  134. package/dist/fiat/providers/moonpay.js.map +0 -1
  135. package/dist/fiat/providers/stripe.d.ts +0 -26
  136. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  137. package/dist/fiat/providers/stripe.js +0 -135
  138. package/dist/fiat/providers/stripe.js.map +0 -1
  139. package/dist/fiat/providers/transak.d.ts +0 -26
  140. package/dist/fiat/providers/transak.d.ts.map +0 -1
  141. package/dist/fiat/providers/transak.js +0 -119
  142. package/dist/fiat/providers/transak.js.map +0 -1
  143. package/dist/fiat/types.d.ts +0 -106
  144. package/dist/fiat/types.d.ts.map +0 -1
  145. package/dist/fiat/types.js +0 -13
  146. package/dist/fiat/types.js.map +0 -1
  147. package/dist/flash/executor.d.ts +0 -119
  148. package/dist/flash/executor.d.ts.map +0 -1
  149. package/dist/flash/executor.js +0 -195
  150. package/dist/flash/executor.js.map +0 -1
  151. package/dist/flash/index.d.ts +0 -28
  152. package/dist/flash/index.d.ts.map +0 -1
  153. package/dist/flash/index.js +0 -29
  154. package/dist/flash/index.js.map +0 -1
  155. package/dist/flash/scanner.d.ts +0 -133
  156. package/dist/flash/scanner.d.ts.map +0 -1
  157. package/dist/flash/scanner.js +0 -212
  158. package/dist/flash/scanner.js.map +0 -1
  159. package/dist/flash/types.d.ts +0 -136
  160. package/dist/flash/types.d.ts.map +0 -1
  161. package/dist/flash/types.js +0 -23
  162. package/dist/flash/types.js.map +0 -1
  163. package/dist/gas/index.d.ts +0 -4
  164. package/dist/gas/index.d.ts.map +0 -1
  165. package/dist/gas/index.js +0 -3
  166. package/dist/gas/index.js.map +0 -1
  167. package/dist/gas/sponsor.d.ts +0 -70
  168. package/dist/gas/sponsor.d.ts.map +0 -1
  169. package/dist/gas/sponsor.js +0 -193
  170. package/dist/gas/sponsor.js.map +0 -1
  171. package/dist/gas/types.d.ts +0 -76
  172. package/dist/gas/types.d.ts.map +0 -1
  173. package/dist/gas/types.js +0 -21
  174. package/dist/gas/types.js.map +0 -1
  175. package/dist/identity/agent-identity.d.ts +0 -276
  176. package/dist/identity/agent-identity.d.ts.map +0 -1
  177. package/dist/identity/agent-identity.js +0 -300
  178. package/dist/identity/agent-identity.js.map +0 -1
  179. package/dist/identity/email-resolver.d.ts +0 -235
  180. package/dist/identity/email-resolver.js +0 -283
  181. package/dist/identity/erc6551.d.ts +0 -441
  182. package/dist/identity/erc6551.d.ts.map +0 -1
  183. package/dist/identity/erc6551.js +0 -517
  184. package/dist/identity/erc6551.js.map +0 -1
  185. package/dist/mev/index.d.ts +0 -4
  186. package/dist/mev/index.d.ts.map +0 -1
  187. package/dist/mev/index.js +0 -8
  188. package/dist/mev/index.js.map +0 -1
  189. package/dist/mev/protection.d.ts +0 -54
  190. package/dist/mev/protection.d.ts.map +0 -1
  191. package/dist/mev/protection.js +0 -185
  192. package/dist/mev/protection.js.map +0 -1
  193. package/dist/mev/risk.d.ts +0 -19
  194. package/dist/mev/risk.d.ts.map +0 -1
  195. package/dist/mev/risk.js +0 -95
  196. package/dist/mev/risk.js.map +0 -1
  197. package/dist/mev/types.d.ts +0 -49
  198. package/dist/mev/types.d.ts.map +0 -1
  199. package/dist/mev/types.js +0 -2
  200. package/dist/mev/types.js.map +0 -1
  201. package/dist/plugins/elizaos.d.ts +0 -52
  202. package/dist/plugins/elizaos.d.ts.map +0 -1
  203. package/dist/plugins/elizaos.js +0 -89
  204. package/dist/plugins/elizaos.js.map +0 -1
  205. package/dist/settlement/index.d.ts +0 -4
  206. package/dist/settlement/index.d.ts.map +0 -1
  207. package/dist/settlement/index.js +0 -3
  208. package/dist/settlement/index.js.map +0 -1
  209. package/dist/settlement/types.d.ts +0 -66
  210. package/dist/settlement/types.d.ts.map +0 -1
  211. package/dist/settlement/types.js +0 -37
  212. package/dist/settlement/types.js.map +0 -1
  213. package/dist/settlement/verifier.d.ts +0 -75
  214. package/dist/settlement/verifier.d.ts.map +0 -1
  215. package/dist/settlement/verifier.js +0 -354
  216. package/dist/settlement/verifier.js.map +0 -1
  217. package/dist/solana/bridge.d.ts +0 -144
  218. package/dist/solana/bridge.d.ts.map +0 -1
  219. package/dist/solana/bridge.js +0 -352
  220. package/dist/solana/bridge.js.map +0 -1
  221. package/dist/solana/index.d.ts +0 -8
  222. package/dist/solana/index.d.ts.map +0 -1
  223. package/dist/solana/index.js +0 -6
  224. package/dist/solana/index.js.map +0 -1
  225. package/dist/solana/swap.d.ts +0 -85
  226. package/dist/solana/swap.d.ts.map +0 -1
  227. package/dist/solana/swap.js +0 -173
  228. package/dist/solana/swap.js.map +0 -1
  229. package/dist/solana/types.d.ts +0 -126
  230. package/dist/solana/types.d.ts.map +0 -1
  231. package/dist/solana/types.js +0 -10
  232. package/dist/solana/types.js.map +0 -1
  233. package/dist/solana/wallet.d.ts +0 -83
  234. package/dist/solana/wallet.d.ts.map +0 -1
  235. package/dist/solana/wallet.js +0 -164
  236. package/dist/solana/wallet.js.map +0 -1
  237. package/dist/solana/x402.d.ts +0 -69
  238. package/dist/solana/x402.d.ts.map +0 -1
  239. package/dist/solana/x402.js +0 -154
  240. package/dist/solana/x402.js.map +0 -1
  241. package/dist/solver/adapter.d.ts +0 -47
  242. package/dist/solver/adapter.d.ts.map +0 -1
  243. package/dist/solver/adapter.js +0 -146
  244. package/dist/solver/adapter.js.map +0 -1
  245. package/dist/solver/analyzer.d.ts +0 -48
  246. package/dist/solver/analyzer.d.ts.map +0 -1
  247. package/dist/solver/analyzer.js +0 -171
  248. package/dist/solver/analyzer.js.map +0 -1
  249. package/dist/solver/builder.d.ts +0 -31
  250. package/dist/solver/builder.d.ts.map +0 -1
  251. package/dist/solver/builder.js +0 -60
  252. package/dist/solver/builder.js.map +0 -1
  253. package/dist/solver/index.d.ts +0 -22
  254. package/dist/solver/index.d.ts.map +0 -1
  255. package/dist/solver/index.js +0 -25
  256. package/dist/solver/index.js.map +0 -1
  257. package/dist/solver/types.d.ts +0 -115
  258. package/dist/solver/types.d.ts.map +0 -1
  259. package/dist/solver/types.js +0 -10
  260. package/dist/solver/types.js.map +0 -1
  261. package/dist/spend-guard/index.d.ts +0 -125
  262. package/dist/spend-guard/index.d.ts.map +0 -1
  263. package/dist/spend-guard/index.js +0 -150
  264. package/dist/spend-guard/index.js.map +0 -1
  265. package/dist/swap/router/cache.d.ts +0 -13
  266. package/dist/swap/router/cache.d.ts.map +0 -1
  267. package/dist/swap/router/cache.js +0 -30
  268. package/dist/swap/router/cache.js.map +0 -1
  269. package/dist/swap/router/flashbots.d.ts +0 -10
  270. package/dist/swap/router/flashbots.d.ts.map +0 -1
  271. package/dist/swap/router/flashbots.js +0 -43
  272. package/dist/swap/router/flashbots.js.map +0 -1
  273. package/dist/swap/router/health.d.ts +0 -17
  274. package/dist/swap/router/health.d.ts.map +0 -1
  275. package/dist/swap/router/health.js +0 -38
  276. package/dist/swap/router/health.js.map +0 -1
  277. package/dist/swap/router/index.d.ts +0 -10
  278. package/dist/swap/router/index.d.ts.map +0 -1
  279. package/dist/swap/router/index.js +0 -10
  280. package/dist/swap/router/index.js.map +0 -1
  281. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  282. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  283. package/dist/swap/router/providers/cowswap.js +0 -79
  284. package/dist/swap/router/providers/cowswap.js.map +0 -1
  285. package/dist/swap/router/providers/index.d.ts +0 -20
  286. package/dist/swap/router/providers/index.d.ts.map +0 -1
  287. package/dist/swap/router/providers/index.js +0 -32
  288. package/dist/swap/router/providers/index.js.map +0 -1
  289. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  290. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  291. package/dist/swap/router/providers/jupiter.js +0 -73
  292. package/dist/swap/router/providers/jupiter.js.map +0 -1
  293. package/dist/swap/router/providers/lifi.d.ts +0 -11
  294. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  295. package/dist/swap/router/providers/lifi.js +0 -123
  296. package/dist/swap/router/providers/lifi.js.map +0 -1
  297. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  298. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  299. package/dist/swap/router/providers/oneinch.js +0 -71
  300. package/dist/swap/router/providers/oneinch.js.map +0 -1
  301. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  302. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  303. package/dist/swap/router/providers/paraswap.js +0 -73
  304. package/dist/swap/router/providers/paraswap.js.map +0 -1
  305. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  306. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  307. package/dist/swap/router/providers/uniswap.js +0 -237
  308. package/dist/swap/router/providers/uniswap.js.map +0 -1
  309. package/dist/swap/router/providers/zerox.d.ts +0 -13
  310. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  311. package/dist/swap/router/providers/zerox.js +0 -94
  312. package/dist/swap/router/providers/zerox.js.map +0 -1
  313. package/dist/swap/router/router.d.ts +0 -86
  314. package/dist/swap/router/router.d.ts.map +0 -1
  315. package/dist/swap/router/router.js +0 -224
  316. package/dist/swap/router/router.js.map +0 -1
  317. package/dist/swap/router/rsi/engine.d.ts +0 -60
  318. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  319. package/dist/swap/router/rsi/engine.js +0 -483
  320. package/dist/swap/router/rsi/engine.js.map +0 -1
  321. package/dist/swap/router/rsi/index.d.ts +0 -3
  322. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  323. package/dist/swap/router/rsi/index.js +0 -3
  324. package/dist/swap/router/rsi/index.js.map +0 -1
  325. package/dist/swap/router/rsi/types.d.ts +0 -106
  326. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  327. package/dist/swap/router/rsi/types.js +0 -3
  328. package/dist/swap/router/rsi/types.js.map +0 -1
  329. package/dist/swap/router/types.d.ts +0 -120
  330. package/dist/swap/router/types.d.ts.map +0 -1
  331. package/dist/swap/router/types.js +0 -16
  332. package/dist/swap/router/types.js.map +0 -1
  333. package/dist/tax/engine.d.ts +0 -131
  334. package/dist/tax/engine.d.ts.map +0 -1
  335. package/dist/tax/engine.js +0 -307
  336. package/dist/tax/engine.js.map +0 -1
  337. package/dist/tax/index.d.ts +0 -9
  338. package/dist/tax/index.d.ts.map +0 -1
  339. package/dist/tax/index.js +0 -12
  340. package/dist/tax/index.js.map +0 -1
  341. package/dist/tax/lots.d.ts +0 -60
  342. package/dist/tax/lots.d.ts.map +0 -1
  343. package/dist/tax/lots.js +0 -129
  344. package/dist/tax/lots.js.map +0 -1
  345. package/dist/tax/types.d.ts +0 -113
  346. package/dist/tax/types.d.ts.map +0 -1
  347. package/dist/tax/types.js +0 -18
  348. package/dist/tax/types.js.map +0 -1
  349. package/dist/verifiable-intent/index.d.ts +0 -84
  350. package/dist/verifiable-intent/index.js +0 -385
  351. package/dist/yield/index.d.ts +0 -26
  352. package/dist/yield/index.d.ts.map +0 -1
  353. package/dist/yield/index.js +0 -29
  354. package/dist/yield/index.js.map +0 -1
  355. package/dist/yield/rates.d.ts +0 -114
  356. package/dist/yield/rates.d.ts.map +0 -1
  357. package/dist/yield/rates.js +0 -351
  358. package/dist/yield/rates.js.map +0 -1
  359. package/dist/yield/types.d.ts +0 -134
  360. package/dist/yield/types.d.ts.map +0 -1
  361. package/dist/yield/types.js +0 -24
  362. package/dist/yield/types.js.map +0 -1
  363. package/dist/yield/vault.d.ts +0 -112
  364. package/dist/yield/vault.d.ts.map +0 -1
  365. package/dist/yield/vault.js +0 -264
  366. package/dist/yield/vault.js.map +0 -1
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Stellar x402 Payment Adapter
3
+ *
4
+ * Implements x402 payment protocol on Stellar network.
5
+ * Stellar x402 support went live March 11, 2026.
6
+ *
7
+ * Chain identifiers:
8
+ * - Stellar Mainnet: "stellar:pubnet"
9
+ * - Stellar Testnet: "stellar:testnet"
10
+ *
11
+ * Key differences from EVM chains:
12
+ * - Uses Ed25519 keypairs (not secp256k1)
13
+ * - Transaction format: Stellar XDR (not EVM tx)
14
+ * - Settlement: ~5 seconds (1 ledger close)
15
+ * - Fees: ~0.00001 XLM per operation (effectively free at scale)
16
+ * - USDC: Circle-issued USDC on Stellar
17
+ */
18
+ // ─── Stellar Chain Constants ─────────────────────────────────────────────────
19
+ export const STELLAR_NETWORK = {
20
+ pubnet: {
21
+ horizonUrl: 'https://horizon.stellar.org',
22
+ networkPassphrase: 'Public Global Stellar Network ; September 2015',
23
+ chainId: 'stellar:pubnet',
24
+ },
25
+ testnet: {
26
+ horizonUrl: 'https://horizon-testnet.stellar.org',
27
+ networkPassphrase: 'Test SDF Network ; September 2015',
28
+ chainId: 'stellar:testnet',
29
+ },
30
+ };
31
+ /**
32
+ * Circle USDC on Stellar (Mainnet)
33
+ * Asset code: USDC
34
+ * Issuer: GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
35
+ */
36
+ export const STELLAR_USDC = {
37
+ pubnet: {
38
+ code: 'USDC',
39
+ issuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
40
+ },
41
+ testnet: {
42
+ code: 'USDC',
43
+ issuer: 'GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5',
44
+ },
45
+ };
46
+ // ─── Stellar x402 Payment Adapter ────────────────────────────────────────────
47
+ /**
48
+ * StellarX402Adapter
49
+ *
50
+ * Handles x402 payment flow for Stellar network.
51
+ *
52
+ * Usage (with stellar-sdk):
53
+ * ```typescript
54
+ * import { StellarX402Adapter } from 'agentwallet-sdk/x402/stellar';
55
+ * import { Keypair, Networks } from '@stellar/stellar-sdk';
56
+ *
57
+ * const adapter = new StellarX402Adapter({ network: 'pubnet' });
58
+ * const result = await adapter.pay({
59
+ * destination: 'GDESTWVX3VMLQCXPHPVLS3FMNMG2X7L5IGGQT7BQMIZXZZ4V7KBQVS',
60
+ * amount: '0.50',
61
+ * sourcePublicKey: keypair.publicKey(),
62
+ * resource: '/api/data-endpoint',
63
+ * }, keypair.secret());
64
+ * ```
65
+ *
66
+ * Note: stellar-sdk must be installed separately:
67
+ * npm install @stellar/stellar-sdk
68
+ */
69
+ export class StellarX402Adapter {
70
+ constructor(config = {}) {
71
+ this.network = config.network ?? 'pubnet';
72
+ this.horizonUrl = config.horizonUrl ?? STELLAR_NETWORK[this.network].horizonUrl;
73
+ }
74
+ /**
75
+ * Parse an x402 402 response and extract Stellar payment details.
76
+ * The 402 response should include X-Payment-Chains: stellar:pubnet
77
+ * and X-Payment-Amount, X-Payment-Destination headers.
78
+ */
79
+ parseX402Response(headers) {
80
+ const chains = headers['x-payment-chains'] ?? headers['X-Payment-Chains'] ?? '';
81
+ const chainId = STELLAR_NETWORK[this.network].chainId;
82
+ if (!chains.includes(chainId) && !chains.includes('stellar')) {
83
+ return { supported: false };
84
+ }
85
+ return {
86
+ supported: true,
87
+ destination: headers['x-payment-destination'] ?? headers['X-Payment-Destination'],
88
+ amount: headers['x-payment-amount'] ?? headers['X-Payment-Amount'],
89
+ resource: headers['x-payment-resource'] ?? headers['X-Payment-Resource'],
90
+ };
91
+ }
92
+ /**
93
+ * Build a Stellar USDC payment transaction.
94
+ *
95
+ * Requires @stellar/stellar-sdk to be installed:
96
+ * npm install @stellar/stellar-sdk
97
+ *
98
+ * Returns the XDR-encoded transaction envelope for signing and submission.
99
+ */
100
+ async buildPaymentTransaction(request) {
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ let StellarSdk;
103
+ try {
104
+ // @ts-expect-error — @stellar/stellar-sdk is an optional peer dependency
105
+ StellarSdk = await import('@stellar/stellar-sdk');
106
+ }
107
+ catch {
108
+ throw new Error('Stellar support requires @stellar/stellar-sdk: npm install @stellar/stellar-sdk');
109
+ }
110
+ const networkConfig = STELLAR_NETWORK[request.network ?? this.network];
111
+ const usdcAsset = STELLAR_USDC[request.network ?? this.network];
112
+ // Load source account sequence number from Horizon
113
+ const account = await this._loadAccount(request.sourcePublicKey, networkConfig.horizonUrl);
114
+ const stellarAccount = new StellarSdk.Account(request.sourcePublicKey, account.sequence);
115
+ const asset = new StellarSdk.Asset(usdcAsset.code, usdcAsset.issuer);
116
+ const memoText = request.resource
117
+ ? request.resource.slice(0, 28) // Stellar memo max 28 bytes
118
+ : 'x402-payment';
119
+ const transaction = new StellarSdk.TransactionBuilder(stellarAccount, {
120
+ fee: StellarSdk.BASE_FEE,
121
+ networkPassphrase: networkConfig.networkPassphrase,
122
+ })
123
+ .addOperation(StellarSdk.Operation.payment({
124
+ destination: request.destination,
125
+ asset,
126
+ amount: request.amount,
127
+ }))
128
+ .addMemo(StellarSdk.Memo.text(memoText))
129
+ .setTimeout(300) // 5 minute window
130
+ .build();
131
+ return transaction.toXDR();
132
+ }
133
+ /**
134
+ * Submit a signed Stellar transaction to Horizon.
135
+ */
136
+ async submitTransaction(signedXdr) {
137
+ const networkConfig = STELLAR_NETWORK[this.network];
138
+ const body = new URLSearchParams({ tx: signedXdr }).toString();
139
+ const resp = await fetch(`${networkConfig.horizonUrl}/transactions`, {
140
+ method: 'POST',
141
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
142
+ body,
143
+ });
144
+ if (!resp.ok) {
145
+ const err = await resp.text();
146
+ throw new Error(`Stellar transaction failed: ${resp.status} ${err.slice(0, 200)}`);
147
+ }
148
+ const result = await resp.json();
149
+ return {
150
+ hash: result.hash,
151
+ ledger: result.ledger,
152
+ successful: result.successful ?? true,
153
+ network: this.network,
154
+ };
155
+ }
156
+ async _loadAccount(publicKey, horizonUrl) {
157
+ const resp = await fetch(`${horizonUrl}/accounts/${publicKey}`);
158
+ if (!resp.ok) {
159
+ throw new Error(`Cannot load Stellar account ${publicKey}: ${resp.status}. ` +
160
+ `Ensure the account exists and has a USDC trustline established.`);
161
+ }
162
+ const data = await resp.json();
163
+ return { sequence: data.sequence };
164
+ }
165
+ /** Chain ID for this adapter (e.g. "stellar:pubnet") */
166
+ get chainId() {
167
+ return STELLAR_NETWORK[this.network].chainId;
168
+ }
169
+ }
170
+ // ─── x402 Auto-Pay Helper ────────────────────────────────────────────────────
171
+ /**
172
+ * Full x402 payment flow for Stellar.
173
+ * 1. Detects 402 response from API
174
+ * 2. Parses Stellar payment details from headers
175
+ * 3. Builds, signs, and submits Stellar USDC payment
176
+ * 4. Retries the original request with payment proof
177
+ *
178
+ * Requires stellar-sdk: npm install @stellar/stellar-sdk
179
+ */
180
+ export async function stellarX402Pay(params) {
181
+ const adapter = new StellarX402Adapter({ network: params.network ?? 'pubnet' });
182
+ const details = adapter.parseX402Response(params.responseHeaders);
183
+ if (!details.supported) {
184
+ throw new Error('This endpoint does not support Stellar x402 payments');
185
+ }
186
+ if (!details.destination || !details.amount) {
187
+ throw new Error('x402 response missing destination or amount headers');
188
+ }
189
+ const xdr = await adapter.buildPaymentTransaction({
190
+ destination: details.destination,
191
+ amount: details.amount,
192
+ sourcePublicKey: params.sourcePublicKey,
193
+ resource: details.resource,
194
+ network: params.network ?? 'pubnet',
195
+ });
196
+ const signedXdr = await params.sign(xdr);
197
+ return adapter.submitTransaction(signedXdr);
198
+ }
199
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/x402/chains/stellar/index.ts"],"names":[],"mappings":"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"}
@@ -26,11 +26,17 @@ export declare class X402Client {
26
26
  parse402Response(response: Response): Promise<X402PaymentRequired | null>;
27
27
  /**
28
28
  * Select the best compatible payment option from offered requirements.
29
- * Prefers: Base network, USDC, exact scheme.
29
+ * Prefers: Base network, stablecoins, exact scheme.
30
+ *
31
+ * v6 change: resolves assets via TokenRegistry in addition to USDC_ADDRESSES.
32
+ * Now accepts any ERC-20 whose address is in the TokenRegistry for the network.
30
33
  */
31
34
  selectPaymentOption(accepts: X402PaymentRequirements[]): X402PaymentRequirements | null;
32
35
  /**
33
36
  * Execute the payment via AgentWallet's agentTransferToken.
37
+ *
38
+ * v6 change: resolves asset address via TokenRegistry before executing.
39
+ * The 402 response may specify an asset by symbol ("USDC") or by address.
34
40
  */
35
41
  private executePayment;
36
42
  /** Get the budget tracker for direct inspection */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EAGvB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQhD;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,iBAAiB,CAAc;gBAE3B,MAAM,EAAE,GAAG,EAAE,MAAM,GAAE,gBAAqB;IAYtD;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmFrE;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2B/E;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,GAAG,IAAI;IAmBvF;;OAEG;YACW,cAAc;IA+B5B,mDAAmD;IACnD,IAAI,aAAa,IAAI,iBAAiB,CAErC;IAED,0BAA0B;IAC1B,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,EAAE;IAItF,8BAA8B;IAC9B,oBAAoB;;;;;CAGrB;AAID,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,mBAAmB,EAAE,uBAAuB;gBAD5D,OAAO,EAAE,MAAM,EACC,mBAAmB,EAAE,uBAAuB;CAK/D;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,MAAM,EAAE,MAAM;aACd,GAAG,EAAE,MAAM;aACX,mBAAmB,EAAE,uBAAuB;gBAF5C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,uBAAuB;CAK/D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EAEvB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,iBAAiB,CAAc;gBAE3B,MAAM,EAAE,GAAG,EAAE,MAAM,GAAE,gBAAqB;IAYtD;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmFrE;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA2B/E;;;;;;OAMG;IACH,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,GAAG,IAAI;IA2BvF;;;;;OAKG;YACW,cAAc;IAwC5B,mDAAmD;IACnD,IAAI,aAAa,IAAI,iBAAiB,CAErC;IAED,0BAA0B;IAC1B,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,EAAE;IAItF,8BAA8B;IAC9B,oBAAoB;;;;;CAGrB;AAID,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,mBAAmB,EAAE,uBAAuB;gBAD5D,OAAO,EAAE,MAAM,EACC,mBAAmB,EAAE,uBAAuB;CAK/D;AAED,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,MAAM,EAAE,MAAM;aACd,GAAG,EAAE,MAAM;aACX,mBAAmB,EAAE,uBAAuB;gBAF5C,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,uBAAuB;CAK/D"}
@@ -1,11 +1,7 @@
1
- import { parseAbi } from 'viem';
2
- import { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
1
+ import { DEFAULT_SUPPORTED_NETWORKS } from './types.js';
3
2
  import { X402BudgetTracker } from './budget.js';
4
3
  import { agentTransferToken, checkBudget } from '../index.js';
5
- // ERC20 transfer ABI for encoding
6
- const ERC20_TRANSFER_ABI = parseAbi([
7
- 'function transfer(address to, uint256 amount) returns (bool)',
8
- ]);
4
+ import { resolveAssetAddress } from './multi-asset.js';
9
5
  /**
10
6
  * [MAX-ADDED] x402 Payment Client for AgentWallet.
11
7
  *
@@ -131,16 +127,23 @@ export class X402Client {
131
127
  }
132
128
  /**
133
129
  * Select the best compatible payment option from offered requirements.
134
- * Prefers: Base network, USDC, exact scheme.
130
+ * Prefers: Base network, stablecoins, exact scheme.
131
+ *
132
+ * v6 change: resolves assets via TokenRegistry in addition to USDC_ADDRESSES.
133
+ * Now accepts any ERC-20 whose address is in the TokenRegistry for the network.
135
134
  */
136
135
  selectPaymentOption(accepts) {
137
- // Filter to supported networks and known assets
136
+ // Filter to supported networks and resolvable assets
138
137
  const compatible = accepts.filter(req => {
139
138
  if (!this.supportedNetworks.has(req.network))
140
139
  return false;
141
- const networkAssets = this.config.supportedAssets?.[req.network]
142
- ?? [USDC_ADDRESSES[req.network]].filter(Boolean);
143
- return networkAssets.some(a => a.toLowerCase() === req.asset.toLowerCase());
140
+ // Config override: explicit supportedAssets list
141
+ if (this.config.supportedAssets?.[req.network]) {
142
+ return this.config.supportedAssets[req.network].some(a => a.toLowerCase() === req.asset.toLowerCase());
143
+ }
144
+ // v6: resolve via TokenRegistry — accept any known ERC-20 on this network
145
+ const resolved = resolveAssetAddress(req.asset, req.network);
146
+ return resolved != null;
144
147
  });
145
148
  if (compatible.length === 0)
146
149
  return null;
@@ -152,10 +155,18 @@ export class X402Client {
152
155
  }
153
156
  /**
154
157
  * Execute the payment via AgentWallet's agentTransferToken.
158
+ *
159
+ * v6 change: resolves asset address via TokenRegistry before executing.
160
+ * The 402 response may specify an asset by symbol ("USDC") or by address.
155
161
  */
156
162
  async executePayment(req) {
163
+ // Resolve the actual contract address for the requested asset
164
+ const resolvedAddress = resolveAssetAddress(req.asset, req.network);
165
+ if (!resolvedAddress) {
166
+ throw new X402PaymentError(`Cannot resolve asset "${req.asset}" on network "${req.network}" to a contract address`, req);
167
+ }
157
168
  // First check on-chain budget
158
- const onChainBudget = await checkBudget(this.wallet, req.asset);
169
+ const onChainBudget = await checkBudget(this.wallet, resolvedAddress);
159
170
  const amount = BigInt(req.amount);
160
171
  if (amount > onChainBudget.perTxLimit) {
161
172
  throw new X402PaymentError(`Amount ${amount} exceeds on-chain per-tx limit ${onChainBudget.perTxLimit}`, req);
@@ -165,7 +176,7 @@ export class X402Client {
165
176
  }
166
177
  // Execute the ERC20 transfer via AgentWallet
167
178
  const txHash = await agentTransferToken(this.wallet, {
168
- token: req.asset,
179
+ token: resolvedAddress,
169
180
  to: req.payTo,
170
181
  amount,
171
182
  });
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/x402/client.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export { X402BudgetTracker } from './budget.js';
3
3
  export { createX402Client, createX402Fetch, wrapWithX402 } from './middleware.js';
4
4
  export type { X402PaymentRequired, X402PaymentRequirements, X402PaymentPayload, X402SettlementResponse, X402ResourceInfo, X402ServiceBudget, X402TransactionLog, X402ClientConfig, } from './types.js';
5
5
  export { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
6
+ export { resolveAssetAddress, resolveAssetDecimals, buildSupportedAssets, isStablecoin, parseNetworkChainId, } from './multi-asset.js';
6
7
  export { AbstractDelegatedFacilitatorAdapter, ABSTRACT_CHAIN_IDS, ABSTRACT_USDC, ABSTRACT_APPROVED_FACILITATORS, ABSTRACT_SUPPORTED_CHAINS, } from './chains/abstract/index.js';
7
8
  export type { AbstractDelegatedPaymentConfig, DelegatedPaymentPermit, AbstractPaymentResult, } from './chains/abstract/index.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAClF,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC"}
@@ -3,6 +3,8 @@ export { X402Client, X402PaymentError, X402BudgetExceededError } from './client.
3
3
  export { X402BudgetTracker } from './budget.js';
4
4
  export { createX402Client, createX402Fetch, wrapWithX402 } from './middleware.js';
5
5
  export { USDC_ADDRESSES, DEFAULT_SUPPORTED_NETWORKS } from './types.js';
6
+ // v6: Multi-asset resolution utilities
7
+ export { resolveAssetAddress, resolveAssetDecimals, buildSupportedAssets, isStablecoin, parseNetworkChainId, } from './multi-asset.js';
6
8
  // ─── Chain-Specific Adapters ──────────────────────────────────────────────────
7
9
  export { AbstractDelegatedFacilitatorAdapter, ABSTRACT_CHAIN_IDS, ABSTRACT_USDC, ABSTRACT_APPROVED_FACILITATORS, ABSTRACT_SUPPORTED_CHAINS, } from './chains/abstract/index.js';
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWlF,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExE,iFAAiF;AACjF,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/x402/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAWlF,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExE,uCAAuC;AACvC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,iFAAiF;AACjF,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAEnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAyBzB"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAEnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAMzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,UAAU,CAAC,KAAK,CAqBzB"}
@@ -41,9 +41,6 @@ export function createX402Fetch(wallet, config) {
41
41
  * @param config - Optional x402 client configuration
42
42
  */
43
43
  export function wrapWithX402(fetchFn, wallet, config) {
44
- const client = new X402Client(wallet, config);
45
- // Override the global fetch used by X402Client
46
- const originalGlobalFetch = globalThis.fetch;
47
44
  const wrappedClient = new X402Client(wallet, config);
48
45
  return async (input, init) => {
49
46
  const url = input instanceof Request ? input.url : input.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW,EAAE,MAAyB;IACrE,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAW,EACX,MAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,KAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgC,EAChC,MAAW,EACX,MAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,+CAA+C;IAC/C,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe;YAAE,OAAO,QAAQ,CAAC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE/B,kEAAkE;QAClE,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/x402/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAW,EAAE,MAAyB;IACrE,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAW,EACX,MAAyB;IAEzB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,CAAC,KAA6B,EAAE,IAAkB,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgC,EAChC,MAAW,EACX,MAAyB;IAEzB,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE;QACjE,MAAM,GAAG,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,sCAAsC;QACtC,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe;YAAE,OAAO,QAAQ,CAAC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,mBAAmB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE/B,kEAAkE;QAClE,OAAO,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @module x402/multi-asset
3
+ * Multi-asset support utilities for the x402 payment client.
4
+ *
5
+ * Resolves asset names/symbols → token addresses via the global TokenRegistry.
6
+ * This extends x402 beyond USDC-only to support any token the 402 response requests.
7
+ *
8
+ * All address lookups use the TokenRegistry from src/tokens/registry.ts.
9
+ * Fallback: USDC_ADDRESSES from x402/types.ts.
10
+ */
11
+ import type { Address } from 'viem';
12
+ /**
13
+ * Network string format used in x402: "chainName:chainId" (e.g. "base:8453").
14
+ * Returns the chainId portion as a number.
15
+ */
16
+ export declare function parseNetworkChainId(network: string): number | null;
17
+ /**
18
+ * Resolve an asset address in the context of a 402 response.
19
+ * The asset field may be:
20
+ * 1. A token symbol ("USDC", "WETH", etc.) → look up in registry by symbol
21
+ * 2. A hex contract address → look up in registry by address (must be registered)
22
+ *
23
+ * Only returns an address if the asset is known in the TokenRegistry.
24
+ * Unknown addresses are NOT accepted — they must be explicitly added or
25
+ * whitelisted via supportedAssets config.
26
+ *
27
+ * @param asset - Asset identifier from the 402 response
28
+ * @param network - Network string from the 402 response (e.g. "base:8453")
29
+ * @returns Resolved contract address, or null if not found in registry
30
+ */
31
+ export declare function resolveAssetAddress(asset: string, network: string): Address | null;
32
+ /**
33
+ * Get token decimals for a given asset+network pair.
34
+ * Used to correctly format amounts in x402 payments.
35
+ *
36
+ * @param asset - Asset address (hex) or symbol
37
+ * @param network - Network string (e.g. "base:8453")
38
+ * @returns Decimals, defaults to 6 for USDC-like stable, 18 for everything else
39
+ */
40
+ export declare function resolveAssetDecimals(asset: string, network: string): number;
41
+ /**
42
+ * Build a set of accepted payment assets for an x402 client, using the
43
+ * global registry to auto-populate known tokens per network.
44
+ *
45
+ * @param networks - List of network strings (e.g. ["base:8453", "arbitrum:42161"])
46
+ * @param symbols - Token symbols to include (e.g. ["USDC", "USDT", "WETH"])
47
+ * @returns Map from network string → array of token addresses
48
+ */
49
+ export declare function buildSupportedAssets(networks: string[], symbols?: string[]): Record<string, Address[]>;
50
+ /**
51
+ * Check if a given asset address is a known stablecoin (6 decimals) on the network.
52
+ */
53
+ export declare function isStablecoin(asset: string, network: string): boolean;
54
+ //# sourceMappingURL=multi-asset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-asset.d.ts","sourceRoot":"","sources":["../../src/x402/multi-asset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAIpC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAkBlF;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB3E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,MAAM,EAAoC,GAClD,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CA6B3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @module x402/multi-asset
3
+ * Multi-asset support utilities for the x402 payment client.
4
+ *
5
+ * Resolves asset names/symbols → token addresses via the global TokenRegistry.
6
+ * This extends x402 beyond USDC-only to support any token the 402 response requests.
7
+ *
8
+ * All address lookups use the TokenRegistry from src/tokens/registry.ts.
9
+ * Fallback: USDC_ADDRESSES from x402/types.ts.
10
+ */
11
+ import { getGlobalRegistry } from '../tokens/registry.js';
12
+ import { USDC_ADDRESSES } from './types.js';
13
+ /**
14
+ * Network string format used in x402: "chainName:chainId" (e.g. "base:8453").
15
+ * Returns the chainId portion as a number.
16
+ */
17
+ export function parseNetworkChainId(network) {
18
+ const parts = network.split(':');
19
+ if (parts.length < 2)
20
+ return null;
21
+ const id = parseInt(parts[parts.length - 1], 10);
22
+ return isNaN(id) ? null : id;
23
+ }
24
+ /**
25
+ * Resolve an asset address in the context of a 402 response.
26
+ * The asset field may be:
27
+ * 1. A token symbol ("USDC", "WETH", etc.) → look up in registry by symbol
28
+ * 2. A hex contract address → look up in registry by address (must be registered)
29
+ *
30
+ * Only returns an address if the asset is known in the TokenRegistry.
31
+ * Unknown addresses are NOT accepted — they must be explicitly added or
32
+ * whitelisted via supportedAssets config.
33
+ *
34
+ * @param asset - Asset identifier from the 402 response
35
+ * @param network - Network string from the 402 response (e.g. "base:8453")
36
+ * @returns Resolved contract address, or null if not found in registry
37
+ */
38
+ export function resolveAssetAddress(asset, network) {
39
+ const chainId = parseNetworkChainId(network);
40
+ if (chainId == null)
41
+ return null;
42
+ const registry = getGlobalRegistry();
43
+ // If it looks like an EVM address, check registry by address
44
+ if (/^0x[0-9a-fA-F]{40}$/.test(asset)) {
45
+ const entry = registry.getTokenByAddress(asset, chainId);
46
+ if (entry)
47
+ return entry.address;
48
+ return null; // unknown address — reject for safety
49
+ }
50
+ // Try registry lookup by symbol (e.g. "USDC", "WETH")
51
+ const entry = registry.getToken(asset.toUpperCase(), chainId);
52
+ if (entry)
53
+ return entry.address;
54
+ return null;
55
+ }
56
+ /**
57
+ * Get token decimals for a given asset+network pair.
58
+ * Used to correctly format amounts in x402 payments.
59
+ *
60
+ * @param asset - Asset address (hex) or symbol
61
+ * @param network - Network string (e.g. "base:8453")
62
+ * @returns Decimals, defaults to 6 for USDC-like stable, 18 for everything else
63
+ */
64
+ export function resolveAssetDecimals(asset, network) {
65
+ const chainId = parseNetworkChainId(network);
66
+ if (chainId == null)
67
+ return 6;
68
+ const registry = getGlobalRegistry();
69
+ // Try by address first
70
+ if (/^0x[0-9a-fA-F]{40}$/.test(asset)) {
71
+ const entry = registry.getTokenByAddress(asset, chainId);
72
+ if (entry)
73
+ return entry.decimals;
74
+ // Unknown token — default to 18
75
+ return 18;
76
+ }
77
+ // Try by symbol
78
+ const entry = registry.getToken(asset.toUpperCase(), chainId);
79
+ if (entry)
80
+ return entry.decimals;
81
+ return 18;
82
+ }
83
+ /**
84
+ * Build a set of accepted payment assets for an x402 client, using the
85
+ * global registry to auto-populate known tokens per network.
86
+ *
87
+ * @param networks - List of network strings (e.g. ["base:8453", "arbitrum:42161"])
88
+ * @param symbols - Token symbols to include (e.g. ["USDC", "USDT", "WETH"])
89
+ * @returns Map from network string → array of token addresses
90
+ */
91
+ export function buildSupportedAssets(networks, symbols = ['USDC', 'USDT', 'DAI', 'WETH']) {
92
+ const result = {};
93
+ const registry = getGlobalRegistry();
94
+ for (const network of networks) {
95
+ const chainId = parseNetworkChainId(network);
96
+ if (chainId == null)
97
+ continue;
98
+ const addrs = [];
99
+ for (const symbol of symbols) {
100
+ const entry = registry.getToken(symbol, chainId);
101
+ if (entry && !entry.isNative) {
102
+ addrs.push(entry.address);
103
+ }
104
+ }
105
+ // Always include USDC from the existing USDC_ADDRESSES table as fallback
106
+ const usdcFallback = USDC_ADDRESSES[network];
107
+ if (usdcFallback && !addrs.some(a => a.toLowerCase() === usdcFallback.toLowerCase())) {
108
+ addrs.push(usdcFallback);
109
+ }
110
+ if (addrs.length > 0) {
111
+ result[network] = addrs;
112
+ }
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Check if a given asset address is a known stablecoin (6 decimals) on the network.
118
+ */
119
+ export function isStablecoin(asset, network) {
120
+ const decimals = resolveAssetDecimals(asset, network);
121
+ return decimals === 6;
122
+ }
123
+ //# sourceMappingURL=multi-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-asset.js","sourceRoot":"","sources":["../../src/x402/multi-asset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa,EAAE,OAAe;IAChE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,6DAA6D;IAC7D,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAgB,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAChC,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;IAED,sDAAsD;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IAEhC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,OAAe;IACjE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,uBAAuB;IACvB,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAgB,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;QACjC,gCAAgC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IAEjC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAkB,EAClB,UAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IAEnD,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,OAAO,IAAI,IAAI;YAAE,SAAS;QAE9B,MAAM,KAAK,GAAc,EAAE,CAAC;QAE5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACrF,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,QAAQ,KAAK,CAAC,CAAC;AACxB,CAAC"}
@@ -1,3 +1,14 @@
1
+ /**
2
+ * @module x402/types
3
+ * x402 protocol type definitions and well-known asset constants.
4
+ *
5
+ * Implements the x402 HTTP payment protocol spec (coinbase/x402) for
6
+ * multi-chain USDC payments. Covers 10 mainnet chains: Base, Ethereum,
7
+ * Arbitrum, Polygon, Optimism, Avalanche, Unichain, Linea, Sonic, Worldchain.
8
+ *
9
+ * USDC addresses are sourced from Circle's official registry:
10
+ * https://developers.circle.com/stablecoins/usdc-contract-addresses
11
+ */
1
12
  import type { Address, Hash } from 'viem';
2
13
  /** Resource information included in x402 responses */
3
14
  export interface X402ResourceInfo {
@@ -84,8 +95,16 @@ export interface X402ClientConfig {
84
95
  /** Callback after payment */
85
96
  onPaymentComplete?: (log: X402TransactionLog) => void;
86
97
  }
87
- /** USDC contract addresses by network */
98
+ /**
99
+ * USDC contract addresses by network (chain-name:chainId format).
100
+ * Sources:
101
+ * - EVM chains: https://developers.circle.com/cctp/references/contract-addresses
102
+ * - Linea: https://linea.build/ecosystem/usdc
103
+ * - Unichain: https://docs.unichain.org/docs/technical-information/token-addresses
104
+ * - Sonic: https://docs.soniclabs.com/build/useful-addresses
105
+ * - Worldchain: https://docs.worldcoin.org/world-chain/addresses/usdc
106
+ */
88
107
  export declare const USDC_ADDRESSES: Record<string, Address>;
89
- /** Default supported networks */
90
- export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453"];
108
+ /** Default supported networks (all mainnet chains) */
109
+ export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453", "ethereum:1", "arbitrum:42161", "polygon:137", "optimism:10", "avalanche:43114", "unichain:130", "linea:59144", "sonic:146", "worldchain:480"];
91
110
  //# sourceMappingURL=types.d.ts.map