agentwallet-sdk 5.0.0 → 5.0.2

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 (371) hide show
  1. package/README.md +221 -0
  2. package/dist/abi.d.ts +397 -0
  3. package/dist/abi.d.ts.map +1 -0
  4. package/dist/abi.js +255 -0
  5. package/dist/abi.js.map +1 -0
  6. package/dist/ap2/index.d.ts +185 -0
  7. package/dist/ap2/index.d.ts.map +1 -0
  8. package/dist/ap2/index.js +255 -0
  9. package/dist/ap2/index.js.map +1 -0
  10. package/dist/bridge/abis.d.ts +64 -0
  11. package/dist/bridge/abis.d.ts.map +1 -0
  12. package/dist/bridge/abis.js +129 -0
  13. package/dist/bridge/abis.js.map +1 -0
  14. package/dist/bridge/client.d.ts +35 -0
  15. package/dist/bridge/client.d.ts.map +1 -0
  16. package/dist/bridge/client.js +245 -0
  17. package/dist/bridge/client.js.map +1 -0
  18. package/dist/bridge/index.d.ts +4 -0
  19. package/dist/bridge/index.d.ts.map +1 -0
  20. package/dist/bridge/index.js +3 -0
  21. package/dist/bridge/index.js.map +1 -0
  22. package/dist/bridge/types.d.ts +68 -0
  23. package/dist/bridge/types.d.ts.map +1 -0
  24. package/dist/bridge/types.js +93 -0
  25. package/dist/bridge/types.js.map +1 -0
  26. package/dist/bridge/unified.d.ts +101 -0
  27. package/dist/bridge/unified.d.ts.map +1 -0
  28. package/dist/bridge/unified.js +284 -0
  29. package/dist/bridge/unified.js.map +1 -0
  30. package/dist/chains.d.ts +62 -0
  31. package/dist/chains.d.ts.map +1 -0
  32. package/dist/chains.js +108 -0
  33. package/dist/chains.js.map +1 -0
  34. package/dist/escrow/MutualStakeEscrow.d.ts +75 -0
  35. package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -0
  36. package/dist/escrow/MutualStakeEscrow.js +339 -0
  37. package/dist/escrow/MutualStakeEscrow.js.map +1 -0
  38. package/dist/escrow/types.d.ts +59 -0
  39. package/dist/escrow/types.d.ts.map +1 -0
  40. package/dist/escrow/types.js +11 -0
  41. package/dist/escrow/types.js.map +1 -0
  42. package/dist/escrow/verifiers.d.ts +26 -0
  43. package/dist/escrow/verifiers.d.ts.map +1 -0
  44. package/dist/escrow/verifiers.js +53 -0
  45. package/dist/escrow/verifiers.js.map +1 -0
  46. package/dist/fiat/index.d.ts +10 -0
  47. package/dist/fiat/index.d.ts.map +1 -0
  48. package/dist/fiat/index.js +9 -0
  49. package/dist/fiat/index.js.map +1 -0
  50. package/dist/fiat/onramp.d.ts +101 -0
  51. package/dist/fiat/onramp.d.ts.map +1 -0
  52. package/dist/fiat/onramp.js +155 -0
  53. package/dist/fiat/onramp.js.map +1 -0
  54. package/dist/fiat/providers/index.d.ts +16 -0
  55. package/dist/fiat/providers/index.d.ts.map +1 -0
  56. package/dist/fiat/providers/index.js +30 -0
  57. package/dist/fiat/providers/index.js.map +1 -0
  58. package/dist/fiat/providers/moonpay.d.ts +22 -0
  59. package/dist/fiat/providers/moonpay.d.ts.map +1 -0
  60. package/dist/fiat/providers/moonpay.js +107 -0
  61. package/dist/fiat/providers/moonpay.js.map +1 -0
  62. package/dist/fiat/providers/stripe.d.ts +26 -0
  63. package/dist/fiat/providers/stripe.d.ts.map +1 -0
  64. package/dist/fiat/providers/stripe.js +135 -0
  65. package/dist/fiat/providers/stripe.js.map +1 -0
  66. package/dist/fiat/providers/transak.d.ts +26 -0
  67. package/dist/fiat/providers/transak.d.ts.map +1 -0
  68. package/dist/fiat/providers/transak.js +119 -0
  69. package/dist/fiat/providers/transak.js.map +1 -0
  70. package/dist/fiat/types.d.ts +106 -0
  71. package/dist/fiat/types.d.ts.map +1 -0
  72. package/dist/fiat/types.js +13 -0
  73. package/dist/fiat/types.js.map +1 -0
  74. package/dist/flash/executor.d.ts +119 -0
  75. package/dist/flash/executor.d.ts.map +1 -0
  76. package/dist/flash/executor.js +195 -0
  77. package/dist/flash/executor.js.map +1 -0
  78. package/dist/flash/index.d.ts +28 -0
  79. package/dist/flash/index.d.ts.map +1 -0
  80. package/dist/flash/index.js +29 -0
  81. package/dist/flash/index.js.map +1 -0
  82. package/dist/flash/scanner.d.ts +133 -0
  83. package/dist/flash/scanner.d.ts.map +1 -0
  84. package/dist/flash/scanner.js +212 -0
  85. package/dist/flash/scanner.js.map +1 -0
  86. package/dist/flash/types.d.ts +136 -0
  87. package/dist/flash/types.d.ts.map +1 -0
  88. package/dist/flash/types.js +23 -0
  89. package/dist/flash/types.js.map +1 -0
  90. package/dist/gas/index.d.ts +4 -0
  91. package/dist/gas/index.d.ts.map +1 -0
  92. package/dist/gas/index.js +3 -0
  93. package/dist/gas/index.js.map +1 -0
  94. package/dist/gas/sponsor.d.ts +70 -0
  95. package/dist/gas/sponsor.d.ts.map +1 -0
  96. package/dist/gas/sponsor.js +193 -0
  97. package/dist/gas/sponsor.js.map +1 -0
  98. package/dist/gas/types.d.ts +76 -0
  99. package/dist/gas/types.d.ts.map +1 -0
  100. package/dist/gas/types.js +21 -0
  101. package/dist/gas/types.js.map +1 -0
  102. package/dist/identity/agent-identity.d.ts +276 -0
  103. package/dist/identity/agent-identity.d.ts.map +1 -0
  104. package/dist/identity/agent-identity.js +300 -0
  105. package/dist/identity/agent-identity.js.map +1 -0
  106. package/dist/identity/erc6551.d.ts +441 -0
  107. package/dist/identity/erc6551.d.ts.map +1 -0
  108. package/dist/identity/erc6551.js +517 -0
  109. package/dist/identity/erc6551.js.map +1 -0
  110. package/dist/identity/erc8004.d.ts +305 -0
  111. package/dist/identity/erc8004.d.ts.map +1 -0
  112. package/dist/identity/erc8004.js +413 -0
  113. package/dist/identity/erc8004.js.map +1 -0
  114. package/dist/identity/index.d.ts +7 -0
  115. package/dist/identity/index.d.ts.map +1 -0
  116. package/dist/identity/index.js +4 -0
  117. package/dist/identity/index.js.map +1 -0
  118. package/dist/identity/reputation.d.ts +318 -0
  119. package/dist/identity/reputation.d.ts.map +1 -0
  120. package/dist/identity/reputation.js +272 -0
  121. package/dist/identity/reputation.js.map +1 -0
  122. package/dist/identity/validation.d.ts +284 -0
  123. package/dist/identity/validation.d.ts.map +1 -0
  124. package/dist/identity/validation.js +226 -0
  125. package/dist/identity/validation.js.map +1 -0
  126. package/dist/index.d.ts +38803 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +376 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/mev/index.d.ts +4 -0
  131. package/dist/mev/index.d.ts.map +1 -0
  132. package/dist/mev/index.js +8 -0
  133. package/dist/mev/index.js.map +1 -0
  134. package/dist/mev/protection.d.ts +54 -0
  135. package/dist/mev/protection.d.ts.map +1 -0
  136. package/dist/mev/protection.js +185 -0
  137. package/dist/mev/protection.js.map +1 -0
  138. package/dist/mev/risk.d.ts +19 -0
  139. package/dist/mev/risk.d.ts.map +1 -0
  140. package/dist/mev/risk.js +95 -0
  141. package/dist/mev/risk.js.map +1 -0
  142. package/dist/mev/types.d.ts +49 -0
  143. package/dist/mev/types.d.ts.map +1 -0
  144. package/dist/mev/types.js +2 -0
  145. package/dist/mev/types.js.map +1 -0
  146. package/dist/plugins/elizaos.d.ts +52 -0
  147. package/dist/plugins/elizaos.d.ts.map +1 -0
  148. package/dist/plugins/elizaos.js +89 -0
  149. package/dist/plugins/elizaos.js.map +1 -0
  150. package/dist/policy/SpendingPolicy.d.ts +106 -0
  151. package/dist/policy/SpendingPolicy.d.ts.map +1 -0
  152. package/dist/policy/SpendingPolicy.js +155 -0
  153. package/dist/policy/SpendingPolicy.js.map +1 -0
  154. package/dist/policy/SpendingPolicy.test.d.ts +2 -0
  155. package/dist/policy/SpendingPolicy.test.d.ts.map +1 -0
  156. package/dist/policy/SpendingPolicy.test.js +143 -0
  157. package/dist/policy/SpendingPolicy.test.js.map +1 -0
  158. package/dist/settlement/index.d.ts +4 -0
  159. package/dist/settlement/index.d.ts.map +1 -0
  160. package/dist/settlement/index.js +3 -0
  161. package/dist/settlement/index.js.map +1 -0
  162. package/dist/settlement/types.d.ts +66 -0
  163. package/dist/settlement/types.d.ts.map +1 -0
  164. package/dist/settlement/types.js +37 -0
  165. package/dist/settlement/types.js.map +1 -0
  166. package/dist/settlement/verifier.d.ts +75 -0
  167. package/dist/settlement/verifier.d.ts.map +1 -0
  168. package/dist/settlement/verifier.js +354 -0
  169. package/dist/settlement/verifier.js.map +1 -0
  170. package/dist/solana/bridge.d.ts +144 -0
  171. package/dist/solana/bridge.d.ts.map +1 -0
  172. package/dist/solana/bridge.js +352 -0
  173. package/dist/solana/bridge.js.map +1 -0
  174. package/dist/solana/index.d.ts +8 -0
  175. package/dist/solana/index.d.ts.map +1 -0
  176. package/dist/solana/index.js +6 -0
  177. package/dist/solana/index.js.map +1 -0
  178. package/dist/solana/swap.d.ts +85 -0
  179. package/dist/solana/swap.d.ts.map +1 -0
  180. package/dist/solana/swap.js +173 -0
  181. package/dist/solana/swap.js.map +1 -0
  182. package/dist/solana/types.d.ts +126 -0
  183. package/dist/solana/types.d.ts.map +1 -0
  184. package/dist/solana/types.js +10 -0
  185. package/dist/solana/types.js.map +1 -0
  186. package/dist/solana/wallet.d.ts +83 -0
  187. package/dist/solana/wallet.d.ts.map +1 -0
  188. package/dist/solana/wallet.js +164 -0
  189. package/dist/solana/wallet.js.map +1 -0
  190. package/dist/solana/x402.d.ts +69 -0
  191. package/dist/solana/x402.d.ts.map +1 -0
  192. package/dist/solana/x402.js +154 -0
  193. package/dist/solana/x402.js.map +1 -0
  194. package/dist/solver/adapter.d.ts +47 -0
  195. package/dist/solver/adapter.d.ts.map +1 -0
  196. package/dist/solver/adapter.js +146 -0
  197. package/dist/solver/adapter.js.map +1 -0
  198. package/dist/solver/analyzer.d.ts +48 -0
  199. package/dist/solver/analyzer.d.ts.map +1 -0
  200. package/dist/solver/analyzer.js +171 -0
  201. package/dist/solver/analyzer.js.map +1 -0
  202. package/dist/solver/builder.d.ts +31 -0
  203. package/dist/solver/builder.d.ts.map +1 -0
  204. package/dist/solver/builder.js +60 -0
  205. package/dist/solver/builder.js.map +1 -0
  206. package/dist/solver/index.d.ts +22 -0
  207. package/dist/solver/index.d.ts.map +1 -0
  208. package/dist/solver/index.js +25 -0
  209. package/dist/solver/index.js.map +1 -0
  210. package/dist/solver/types.d.ts +115 -0
  211. package/dist/solver/types.d.ts.map +1 -0
  212. package/dist/solver/types.js +10 -0
  213. package/dist/solver/types.js.map +1 -0
  214. package/dist/spend-guard/index.d.ts +125 -0
  215. package/dist/spend-guard/index.d.ts.map +1 -0
  216. package/dist/spend-guard/index.js +150 -0
  217. package/dist/spend-guard/index.js.map +1 -0
  218. package/dist/swap/SwapModule.d.ts +34 -0
  219. package/dist/swap/SwapModule.d.ts.map +1 -0
  220. package/dist/swap/SwapModule.js +144 -0
  221. package/dist/swap/SwapModule.js.map +1 -0
  222. package/dist/swap/abi.d.ts +51 -0
  223. package/dist/swap/abi.d.ts.map +1 -0
  224. package/dist/swap/abi.js +118 -0
  225. package/dist/swap/abi.js.map +1 -0
  226. package/dist/swap/index.d.ts +5 -0
  227. package/dist/swap/index.d.ts.map +1 -0
  228. package/dist/swap/index.js +4 -0
  229. package/dist/swap/index.js.map +1 -0
  230. package/dist/swap/router/cache.d.ts +13 -0
  231. package/dist/swap/router/cache.d.ts.map +1 -0
  232. package/dist/swap/router/cache.js +30 -0
  233. package/dist/swap/router/cache.js.map +1 -0
  234. package/dist/swap/router/flashbots.d.ts +10 -0
  235. package/dist/swap/router/flashbots.d.ts.map +1 -0
  236. package/dist/swap/router/flashbots.js +43 -0
  237. package/dist/swap/router/flashbots.js.map +1 -0
  238. package/dist/swap/router/health.d.ts +17 -0
  239. package/dist/swap/router/health.d.ts.map +1 -0
  240. package/dist/swap/router/health.js +38 -0
  241. package/dist/swap/router/health.js.map +1 -0
  242. package/dist/swap/router/index.d.ts +10 -0
  243. package/dist/swap/router/index.d.ts.map +1 -0
  244. package/dist/swap/router/index.js +10 -0
  245. package/dist/swap/router/index.js.map +1 -0
  246. package/dist/swap/router/providers/cowswap.d.ts +11 -0
  247. package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
  248. package/dist/swap/router/providers/cowswap.js +79 -0
  249. package/dist/swap/router/providers/cowswap.js.map +1 -0
  250. package/dist/swap/router/providers/index.d.ts +20 -0
  251. package/dist/swap/router/providers/index.d.ts.map +1 -0
  252. package/dist/swap/router/providers/index.js +32 -0
  253. package/dist/swap/router/providers/index.js.map +1 -0
  254. package/dist/swap/router/providers/jupiter.d.ts +12 -0
  255. package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
  256. package/dist/swap/router/providers/jupiter.js +73 -0
  257. package/dist/swap/router/providers/jupiter.js.map +1 -0
  258. package/dist/swap/router/providers/lifi.d.ts +11 -0
  259. package/dist/swap/router/providers/lifi.d.ts.map +1 -0
  260. package/dist/swap/router/providers/lifi.js +123 -0
  261. package/dist/swap/router/providers/lifi.js.map +1 -0
  262. package/dist/swap/router/providers/oneinch.d.ts +13 -0
  263. package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
  264. package/dist/swap/router/providers/oneinch.js +71 -0
  265. package/dist/swap/router/providers/oneinch.js.map +1 -0
  266. package/dist/swap/router/providers/paraswap.d.ts +11 -0
  267. package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
  268. package/dist/swap/router/providers/paraswap.js +73 -0
  269. package/dist/swap/router/providers/paraswap.js.map +1 -0
  270. package/dist/swap/router/providers/uniswap.d.ts +31 -0
  271. package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
  272. package/dist/swap/router/providers/uniswap.js +237 -0
  273. package/dist/swap/router/providers/uniswap.js.map +1 -0
  274. package/dist/swap/router/providers/zerox.d.ts +13 -0
  275. package/dist/swap/router/providers/zerox.d.ts.map +1 -0
  276. package/dist/swap/router/providers/zerox.js +94 -0
  277. package/dist/swap/router/providers/zerox.js.map +1 -0
  278. package/dist/swap/router/router.d.ts +86 -0
  279. package/dist/swap/router/router.d.ts.map +1 -0
  280. package/dist/swap/router/router.js +224 -0
  281. package/dist/swap/router/router.js.map +1 -0
  282. package/dist/swap/router/rsi/engine.d.ts +60 -0
  283. package/dist/swap/router/rsi/engine.d.ts.map +1 -0
  284. package/dist/swap/router/rsi/engine.js +483 -0
  285. package/dist/swap/router/rsi/engine.js.map +1 -0
  286. package/dist/swap/router/rsi/index.d.ts +3 -0
  287. package/dist/swap/router/rsi/index.d.ts.map +1 -0
  288. package/dist/swap/router/rsi/index.js +3 -0
  289. package/dist/swap/router/rsi/index.js.map +1 -0
  290. package/dist/swap/router/rsi/types.d.ts +106 -0
  291. package/dist/swap/router/rsi/types.d.ts.map +1 -0
  292. package/dist/swap/router/rsi/types.js +3 -0
  293. package/dist/swap/router/rsi/types.js.map +1 -0
  294. package/dist/swap/router/types.d.ts +120 -0
  295. package/dist/swap/router/types.d.ts.map +1 -0
  296. package/dist/swap/router/types.js +16 -0
  297. package/dist/swap/router/types.js.map +1 -0
  298. package/dist/swap/types.d.ts +51 -0
  299. package/dist/swap/types.d.ts.map +1 -0
  300. package/dist/swap/types.js +17 -0
  301. package/dist/swap/types.js.map +1 -0
  302. package/dist/tax/engine.d.ts +131 -0
  303. package/dist/tax/engine.d.ts.map +1 -0
  304. package/dist/tax/engine.js +307 -0
  305. package/dist/tax/engine.js.map +1 -0
  306. package/dist/tax/index.d.ts +9 -0
  307. package/dist/tax/index.d.ts.map +1 -0
  308. package/dist/tax/index.js +12 -0
  309. package/dist/tax/index.js.map +1 -0
  310. package/dist/tax/lots.d.ts +60 -0
  311. package/dist/tax/lots.d.ts.map +1 -0
  312. package/dist/tax/lots.js +129 -0
  313. package/dist/tax/lots.js.map +1 -0
  314. package/dist/tax/types.d.ts +113 -0
  315. package/dist/tax/types.d.ts.map +1 -0
  316. package/dist/tax/types.js +18 -0
  317. package/dist/tax/types.js.map +1 -0
  318. package/dist/types.d.ts +110 -0
  319. package/dist/types.d.ts.map +1 -0
  320. package/dist/types.js +9 -0
  321. package/dist/types.js.map +1 -0
  322. package/dist/x402/__tests__/budget.test.d.ts +2 -0
  323. package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
  324. package/dist/x402/__tests__/budget.test.js +114 -0
  325. package/dist/x402/__tests__/budget.test.js.map +1 -0
  326. package/dist/x402/__tests__/client.test.d.ts +2 -0
  327. package/dist/x402/__tests__/client.test.d.ts.map +1 -0
  328. package/dist/x402/__tests__/client.test.js +107 -0
  329. package/dist/x402/__tests__/client.test.js.map +1 -0
  330. package/dist/x402/budget.d.ts +52 -0
  331. package/dist/x402/budget.d.ts.map +1 -0
  332. package/dist/x402/budget.js +113 -0
  333. package/dist/x402/budget.js.map +1 -0
  334. package/dist/x402/chains/abstract/index.d.ts +135 -0
  335. package/dist/x402/chains/abstract/index.d.ts.map +1 -0
  336. package/dist/x402/chains/abstract/index.js +190 -0
  337. package/dist/x402/chains/abstract/index.js.map +1 -0
  338. package/dist/x402/client.d.ts +60 -0
  339. package/dist/x402/client.d.ts.map +1 -0
  340. package/dist/x402/client.js +205 -0
  341. package/dist/x402/client.js.map +1 -0
  342. package/dist/x402/index.d.ts +8 -0
  343. package/dist/x402/index.d.ts.map +1 -0
  344. package/dist/x402/index.js +8 -0
  345. package/dist/x402/index.js.map +1 -0
  346. package/dist/x402/middleware.d.ts +37 -0
  347. package/dist/x402/middleware.d.ts.map +1 -0
  348. package/dist/x402/middleware.js +65 -0
  349. package/dist/x402/middleware.js.map +1 -0
  350. package/dist/x402/types.d.ts +91 -0
  351. package/dist/x402/types.d.ts.map +1 -0
  352. package/dist/x402/types.js +9 -0
  353. package/dist/x402/types.js.map +1 -0
  354. package/dist/yield/index.d.ts +26 -0
  355. package/dist/yield/index.d.ts.map +1 -0
  356. package/dist/yield/index.js +29 -0
  357. package/dist/yield/index.js.map +1 -0
  358. package/dist/yield/rates.d.ts +114 -0
  359. package/dist/yield/rates.d.ts.map +1 -0
  360. package/dist/yield/rates.js +351 -0
  361. package/dist/yield/rates.js.map +1 -0
  362. package/dist/yield/types.d.ts +134 -0
  363. package/dist/yield/types.d.ts.map +1 -0
  364. package/dist/yield/types.js +24 -0
  365. package/dist/yield/types.js.map +1 -0
  366. package/dist/yield/vault.d.ts +112 -0
  367. package/dist/yield/vault.d.ts.map +1 -0
  368. package/dist/yield/vault.js +264 -0
  369. package/dist/yield/vault.js.map +1 -0
  370. package/package.json +46 -7
  371. package/index.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.test.js","sourceRoot":"","sources":["../../../src/x402/__tests__/budget.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../src/x402/__tests__/client.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ // [MAX-ADDED] Tests for x402 Client — protocol parsing and payment selection
2
+ import { describe, it, expect } from 'vitest';
3
+ import { X402Client } from '../client.js';
4
+ // Mock wallet (we test protocol logic, not on-chain execution)
5
+ const mockWallet = {};
6
+ describe('X402Client', () => {
7
+ describe('parse402Response', () => {
8
+ it('parses base64 PAYMENT-REQUIRED header', async () => {
9
+ const client = new X402Client(mockWallet, { autoPay: false });
10
+ const paymentRequired = {
11
+ x402Version: 1,
12
+ resource: { url: '/api/data', description: 'Data API', mimeType: 'application/json' },
13
+ accepts: [
14
+ {
15
+ scheme: 'exact',
16
+ network: 'base:8453',
17
+ asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
18
+ amount: '1000000',
19
+ payTo: '0xRecipient',
20
+ maxTimeoutSeconds: 30,
21
+ extra: {},
22
+ },
23
+ ],
24
+ };
25
+ const b64 = btoa(JSON.stringify(paymentRequired));
26
+ const response = new Response(null, {
27
+ status: 402,
28
+ headers: { 'payment-required': b64 },
29
+ });
30
+ const parsed = await client.parse402Response(response);
31
+ expect(parsed).not.toBeNull();
32
+ expect(parsed.x402Version).toBe(1);
33
+ expect(parsed.accepts).toHaveLength(1);
34
+ expect(parsed.accepts[0].scheme).toBe('exact');
35
+ expect(parsed.accepts[0].amount).toBe('1000000');
36
+ });
37
+ it('parses JSON body fallback', async () => {
38
+ const client = new X402Client(mockWallet, { autoPay: false });
39
+ const paymentRequired = {
40
+ x402Version: 1,
41
+ resource: { url: '/api/data', description: 'Data', mimeType: 'application/json' },
42
+ accepts: [
43
+ {
44
+ scheme: 'exact',
45
+ network: 'base:8453',
46
+ asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
47
+ amount: '500000',
48
+ payTo: '0xRecipient',
49
+ maxTimeoutSeconds: 30,
50
+ extra: {},
51
+ },
52
+ ],
53
+ };
54
+ const response = new Response(JSON.stringify(paymentRequired), {
55
+ status: 402,
56
+ headers: { 'content-type': 'application/json' },
57
+ });
58
+ const parsed = await client.parse402Response(response);
59
+ expect(parsed).not.toBeNull();
60
+ expect(parsed.accepts[0].amount).toBe('500000');
61
+ });
62
+ it('returns null for unparseable 402', async () => {
63
+ const client = new X402Client(mockWallet, { autoPay: false });
64
+ const response = new Response('Payment Required', { status: 402 });
65
+ const parsed = await client.parse402Response(response);
66
+ expect(parsed).toBeNull();
67
+ });
68
+ });
69
+ describe('selectPaymentOption', () => {
70
+ it('selects Base USDC exact scheme', () => {
71
+ const client = new X402Client(mockWallet);
72
+ const accepts = [
73
+ { scheme: 'exact', network: 'ethereum:1', asset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
74
+ { scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
75
+ ];
76
+ const selected = client.selectPaymentOption(accepts);
77
+ expect(selected).not.toBeNull();
78
+ expect(selected.network).toBe('base:8453');
79
+ });
80
+ it('prefers lowest amount among compatible options', () => {
81
+ const client = new X402Client(mockWallet);
82
+ const accepts = [
83
+ { scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '5000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
84
+ { scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
85
+ ];
86
+ const selected = client.selectPaymentOption(accepts);
87
+ expect(selected.amount).toBe('1000000');
88
+ });
89
+ it('returns null when no compatible option exists', () => {
90
+ const client = new X402Client(mockWallet);
91
+ const accepts = [
92
+ { scheme: 'exact', network: 'solana:mainnet', asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', amount: '1000000', payTo: 'sol_addr', maxTimeoutSeconds: 30, extra: {} },
93
+ ];
94
+ expect(client.selectPaymentOption(accepts)).toBeNull();
95
+ });
96
+ it('prefers exact scheme over others', () => {
97
+ const client = new X402Client(mockWallet);
98
+ const accepts = [
99
+ { scheme: 'upto', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '500000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
100
+ { scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
101
+ ];
102
+ const selected = client.selectPaymentOption(accepts);
103
+ expect(selected.scheme).toBe('exact');
104
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/x402/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { X402ServiceBudget, X402TransactionLog, X402ClientConfig } from './types.js';
2
+ /**
3
+ * [MAX-ADDED] In-memory budget tracker for x402 payments.
4
+ * Enforces per-service caps, daily limits, and per-request maximums.
5
+ * On-chain spend limits are ALSO enforced by the AgentWallet contract —
6
+ * this is an additional client-side layer for granular service-level control.
7
+ */
8
+ export declare class X402BudgetTracker {
9
+ private serviceBudgets;
10
+ private dailySpend;
11
+ private globalDailySpend;
12
+ private dailyResetTimestamp;
13
+ private transactionLog;
14
+ private globalDailyLimit;
15
+ private globalPerRequestMax;
16
+ constructor(config?: X402ClientConfig);
17
+ /**
18
+ * Check if a payment is within budget limits.
19
+ * Returns { allowed: true } or { allowed: false, reason: string }.
20
+ */
21
+ checkBudget(service: string, amount: bigint): {
22
+ allowed: boolean;
23
+ reason?: string;
24
+ };
25
+ /**
26
+ * Record a completed payment.
27
+ */
28
+ recordPayment(log: X402TransactionLog): void;
29
+ /**
30
+ * Get transaction history, optionally filtered.
31
+ */
32
+ getTransactionLog(filter?: {
33
+ service?: string;
34
+ since?: number;
35
+ }): X402TransactionLog[];
36
+ /**
37
+ * Get current daily spend summary.
38
+ */
39
+ getDailySpendSummary(): {
40
+ global: bigint;
41
+ byService: Record<string, bigint>;
42
+ resetsAt: number;
43
+ };
44
+ /**
45
+ * Add or update a service budget at runtime.
46
+ */
47
+ setServiceBudget(budget: X402ServiceBudget): void;
48
+ private findServiceBudget;
49
+ private maybeResetDaily;
50
+ private startOfDay;
51
+ }
52
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/x402/budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1F;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,gBAAgB,CAAc;IACtC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,cAAc,CAA4B;IAElD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;gBAExB,MAAM,GAAE,gBAAqB;IAYzC;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IA4BnF;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAW5C;;OAEG;IACH,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,EAAE;IAWtF;;OAEG;IACH,oBAAoB,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAa/F;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAMjD,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;CAInB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * [MAX-ADDED] In-memory budget tracker for x402 payments.
3
+ * Enforces per-service caps, daily limits, and per-request maximums.
4
+ * On-chain spend limits are ALSO enforced by the AgentWallet contract —
5
+ * this is an additional client-side layer for granular service-level control.
6
+ */
7
+ export class X402BudgetTracker {
8
+ constructor(config = {}) {
9
+ this.serviceBudgets = new Map();
10
+ this.dailySpend = new Map(); // service -> today's total
11
+ this.globalDailySpend = 0n;
12
+ this.transactionLog = [];
13
+ this.globalDailyLimit = config.globalDailyLimit ?? BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFF'); // effectively unlimited
14
+ this.globalPerRequestMax = config.globalPerRequestMax ?? BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFF');
15
+ this.dailyResetTimestamp = this.startOfDay();
16
+ if (config.serviceBudgets) {
17
+ for (const budget of config.serviceBudgets) {
18
+ this.serviceBudgets.set(budget.service, budget);
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Check if a payment is within budget limits.
24
+ * Returns { allowed: true } or { allowed: false, reason: string }.
25
+ */
26
+ checkBudget(service, amount) {
27
+ this.maybeResetDaily();
28
+ // Global per-request check
29
+ if (amount > this.globalPerRequestMax) {
30
+ return { allowed: false, reason: `Amount ${amount} exceeds global per-request max ${this.globalPerRequestMax}` };
31
+ }
32
+ // Global daily check
33
+ if (this.globalDailySpend + amount > this.globalDailyLimit) {
34
+ return { allowed: false, reason: `Would exceed global daily limit ${this.globalDailyLimit}` };
35
+ }
36
+ // Service-specific checks
37
+ const budget = this.findServiceBudget(service);
38
+ if (budget) {
39
+ if (amount > budget.maxPerRequest) {
40
+ return { allowed: false, reason: `Amount ${amount} exceeds service per-request max ${budget.maxPerRequest} for ${service}` };
41
+ }
42
+ const serviceDailySpend = this.dailySpend.get(service) ?? 0n;
43
+ if (serviceDailySpend + amount > budget.dailyLimit) {
44
+ return { allowed: false, reason: `Would exceed daily limit ${budget.dailyLimit} for ${service}` };
45
+ }
46
+ }
47
+ return { allowed: true };
48
+ }
49
+ /**
50
+ * Record a completed payment.
51
+ */
52
+ recordPayment(log) {
53
+ this.maybeResetDaily();
54
+ this.transactionLog.push(log);
55
+ if (log.success) {
56
+ const service = log.service;
57
+ this.dailySpend.set(service, (this.dailySpend.get(service) ?? 0n) + log.amount);
58
+ this.globalDailySpend += log.amount;
59
+ }
60
+ }
61
+ /**
62
+ * Get transaction history, optionally filtered.
63
+ */
64
+ getTransactionLog(filter) {
65
+ let logs = this.transactionLog;
66
+ if (filter?.service) {
67
+ logs = logs.filter(l => l.service === filter.service);
68
+ }
69
+ if (filter?.since) {
70
+ logs = logs.filter(l => l.timestamp >= filter.since);
71
+ }
72
+ return logs;
73
+ }
74
+ /**
75
+ * Get current daily spend summary.
76
+ */
77
+ getDailySpendSummary() {
78
+ this.maybeResetDaily();
79
+ const byService = {};
80
+ for (const [service, amount] of this.dailySpend) {
81
+ byService[service] = amount;
82
+ }
83
+ return {
84
+ global: this.globalDailySpend,
85
+ byService,
86
+ resetsAt: this.dailyResetTimestamp + 86400,
87
+ };
88
+ }
89
+ /**
90
+ * Add or update a service budget at runtime.
91
+ */
92
+ setServiceBudget(budget) {
93
+ this.serviceBudgets.set(budget.service, budget);
94
+ }
95
+ // ─── Internals ───
96
+ findServiceBudget(service) {
97
+ // Exact match first, then wildcard
98
+ return this.serviceBudgets.get(service) ?? this.serviceBudgets.get('*');
99
+ }
100
+ maybeResetDaily() {
101
+ const now = this.startOfDay();
102
+ if (now > this.dailyResetTimestamp) {
103
+ this.dailySpend.clear();
104
+ this.globalDailySpend = 0n;
105
+ this.dailyResetTimestamp = now;
106
+ }
107
+ }
108
+ startOfDay() {
109
+ const now = Math.floor(Date.now() / 1000);
110
+ return now - (now % 86400);
111
+ }
112
+ }
113
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/x402/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Abstract x402 Delegated Payment Facilitator Adapter
3
+ *
4
+ * Abstract's x402 implementation uses a delegated facilitator pattern:
5
+ * 1. The agent wallet does NOT sign the payment tx directly
6
+ * 2. A "payment facilitator" contract is designated per-merchant
7
+ * 3. The agent's wallet delegates authorization via a signed EIP-712 permit
8
+ * 4. The facilitator executes the actual chain transaction
9
+ *
10
+ * Chain IDs:
11
+ * - Abstract Mainnet: 2741
12
+ * - Abstract Testnet: 11124
13
+ */
14
+ import type { Address, Hex, WalletClient } from 'viem';
15
+ export declare const ABSTRACT_CHAIN_IDS: {
16
+ readonly mainnet: 2741;
17
+ readonly testnet: 11124;
18
+ };
19
+ /** USDC on Abstract Mainnet (official Bridged USDC) */
20
+ export declare const ABSTRACT_USDC: Record<number, Address>;
21
+ /** Abstract's approved payment facilitator contracts */
22
+ export declare const ABSTRACT_APPROVED_FACILITATORS: Address[];
23
+ export interface AbstractDelegatedPaymentConfig {
24
+ /** The facilitator contract address (must be on approved list or user-allowlisted) */
25
+ facilitatorAddress: Address;
26
+ /** Token to pay with (default: USDC on Abstract) */
27
+ token?: Address;
28
+ /** Permit deadline in seconds from now (default: 300 = 5 min) */
29
+ deadlineSeconds?: number;
30
+ /** User-allowlisted facilitator addresses (extends the approved list) */
31
+ userAllowlist?: Address[];
32
+ }
33
+ export interface DelegatedPaymentPermit {
34
+ facilitator: Address;
35
+ token: Address;
36
+ amount: bigint;
37
+ payTo: Address;
38
+ nonce: bigint;
39
+ deadline: bigint;
40
+ resource: string;
41
+ }
42
+ export interface AbstractPaymentResult {
43
+ /** EIP-712 signature for the facilitator permit */
44
+ permitSignature: Hex;
45
+ /** Encoded permit data to submit to the facilitator contract */
46
+ permitData: Hex;
47
+ /** The permit fields for verification */
48
+ permit: DelegatedPaymentPermit;
49
+ /** Chain ID this payment is valid on */
50
+ chainId: number;
51
+ }
52
+ /**
53
+ * Adapter for Abstract's delegated payment facilitator x402 model.
54
+ *
55
+ * Instead of signing a direct payment transaction, the agent signs an EIP-712
56
+ * permit authorizing a facilitator contract to execute the payment on its behalf.
57
+ * This is Abstract's model — the agent's keys never touch the chain directly.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const adapter = new AbstractDelegatedFacilitatorAdapter(walletClient, {
62
+ * facilitatorAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
63
+ * });
64
+ *
65
+ * const result = await adapter.signPaymentPermit({
66
+ * amount: 1_000_000n, // 1 USDC (6 decimals)
67
+ * payTo: '0xmerchant...',
68
+ * nonce: 0n,
69
+ * resource: 'https://api.example.com/resource',
70
+ * });
71
+ * ```
72
+ */
73
+ export declare class AbstractDelegatedFacilitatorAdapter {
74
+ private walletClient;
75
+ private config;
76
+ private chainId;
77
+ constructor(walletClient: WalletClient, config: AbstractDelegatedPaymentConfig, chainId?: number);
78
+ /**
79
+ * Sign an EIP-712 delegated payment permit for the Abstract facilitator.
80
+ * This replaces direct tx signing — the permit is submitted to the facilitator contract.
81
+ */
82
+ signPaymentPermit(params: {
83
+ amount: bigint;
84
+ payTo: Address;
85
+ nonce: bigint;
86
+ resource: string;
87
+ }): Promise<AbstractPaymentResult>;
88
+ /**
89
+ * Build the x402 payment payload for Abstract's delegated facilitator model.
90
+ * This payload replaces the standard txHash payload in the X-PAYMENT header.
91
+ */
92
+ buildX402Payload(params: {
93
+ amount: bigint;
94
+ payTo: Address;
95
+ nonce: bigint;
96
+ resource: string;
97
+ }): Promise<Record<string, unknown>>;
98
+ /** Check if a chain ID is an Abstract chain */
99
+ static isAbstractChain(chainId: number): boolean;
100
+ /** Get the network string for x402 payment requirements (e.g. "abstract:2741") */
101
+ static getNetworkString(chainId: number): string;
102
+ }
103
+ /**
104
+ * Abstract chain IDs to add to SUPPORTED_CHAINS in the main SDK.
105
+ * These route through AbstractDelegatedFacilitatorAdapter for x402 payments.
106
+ */
107
+ export declare const ABSTRACT_SUPPORTED_CHAINS: {
108
+ readonly 'abstract:2741': {
109
+ readonly chainId: 2741;
110
+ readonly name: "Abstract Mainnet";
111
+ readonly rpcUrl: "https://api.mainnet.abs.xyz";
112
+ readonly nativeCurrency: {
113
+ readonly name: "Ether";
114
+ readonly symbol: "ETH";
115
+ readonly decimals: 18;
116
+ };
117
+ readonly blockExplorer: "https://explorer.mainnet.abs.xyz";
118
+ readonly x402Model: "delegated-facilitator";
119
+ readonly usdc: `0x${string}`;
120
+ };
121
+ readonly 'abstract-testnet:11124': {
122
+ readonly chainId: 11124;
123
+ readonly name: "Abstract Testnet";
124
+ readonly rpcUrl: "https://api.testnet.abs.xyz";
125
+ readonly nativeCurrency: {
126
+ readonly name: "Ether";
127
+ readonly symbol: "ETH";
128
+ readonly decimals: 18;
129
+ };
130
+ readonly blockExplorer: "https://explorer.testnet.abs.xyz";
131
+ readonly x402Model: "delegated-facilitator";
132
+ readonly usdc: `0x${string}`;
133
+ };
134
+ };
135
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/x402/chains/abstract/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAQ,GAAG,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAK7D,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,uDAAuD;AACvD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAGjD,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,8BAA8B,EAAE,OAAO,EAEnD,CAAC;AAwBF,MAAM,WAAW,8BAA8B;IAC7C,sFAAsF;IACtF,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,eAAe,EAAE,GAAG,CAAC;IACrB,gEAAgE;IAChE,UAAU,EAAE,GAAG,CAAC;IAChB,yCAAyC;IACzC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mCAAmC;IAC9C,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,OAAO,CAAS;gBAGtB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,8BAA8B,EACtC,OAAO,GAAE,MAAmC;IA4B9C;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoDlC;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAkBpC,+CAA+C;IAC/C,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIhD,kFAAkF;IAClF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAGjD;AAID;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmB5B,CAAC"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Abstract x402 Delegated Payment Facilitator Adapter
3
+ *
4
+ * Abstract's x402 implementation uses a delegated facilitator pattern:
5
+ * 1. The agent wallet does NOT sign the payment tx directly
6
+ * 2. A "payment facilitator" contract is designated per-merchant
7
+ * 3. The agent's wallet delegates authorization via a signed EIP-712 permit
8
+ * 4. The facilitator executes the actual chain transaction
9
+ *
10
+ * Chain IDs:
11
+ * - Abstract Mainnet: 2741
12
+ * - Abstract Testnet: 11124
13
+ */
14
+ import { encodeAbiParameters, parseAbiParameters } from 'viem';
15
+ // ─── Abstract Chain Constants ────────────────────────────────────────────────
16
+ export const ABSTRACT_CHAIN_IDS = {
17
+ mainnet: 2741,
18
+ testnet: 11124,
19
+ };
20
+ /** USDC on Abstract Mainnet (official Bridged USDC) */
21
+ export const ABSTRACT_USDC = {
22
+ 2741: '0x84A71ccD554Cc1b02749b35d22F684CC8ec987e1', // Abstract Mainnet USDC
23
+ 11124: '0x3eBdeaA0DB3FfDe96E7a0DBBAFEC961FC50F725f', // Abstract Testnet USDC
24
+ };
25
+ /** Abstract's approved payment facilitator contracts */
26
+ export const ABSTRACT_APPROVED_FACILITATORS = [
27
+ '0x5FbDB2315678afecb367f032d93F642f64180aa3', // Abstract official facilitator (mainnet)
28
+ ];
29
+ // ─── EIP-712 Types for Abstract Delegated Payment ───────────────────────────
30
+ const ABSTRACT_PERMIT_DOMAIN = {
31
+ name: 'AbstractDelegatedPayment',
32
+ version: '1',
33
+ chainId: ABSTRACT_CHAIN_IDS.mainnet,
34
+ };
35
+ const ABSTRACT_PERMIT_TYPES = {
36
+ DelegatedPaymentPermit: [
37
+ { name: 'facilitator', type: 'address' },
38
+ { name: 'token', type: 'address' },
39
+ { name: 'amount', type: 'uint256' },
40
+ { name: 'payTo', type: 'address' },
41
+ { name: 'nonce', type: 'uint256' },
42
+ { name: 'deadline', type: 'uint256' },
43
+ { name: 'resource', type: 'string' },
44
+ ],
45
+ };
46
+ // ─── AbstractDelegatedFacilitatorAdapter ─────────────────────────────────────
47
+ /**
48
+ * Adapter for Abstract's delegated payment facilitator x402 model.
49
+ *
50
+ * Instead of signing a direct payment transaction, the agent signs an EIP-712
51
+ * permit authorizing a facilitator contract to execute the payment on its behalf.
52
+ * This is Abstract's model — the agent's keys never touch the chain directly.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const adapter = new AbstractDelegatedFacilitatorAdapter(walletClient, {
57
+ * facilitatorAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
58
+ * });
59
+ *
60
+ * const result = await adapter.signPaymentPermit({
61
+ * amount: 1_000_000n, // 1 USDC (6 decimals)
62
+ * payTo: '0xmerchant...',
63
+ * nonce: 0n,
64
+ * resource: 'https://api.example.com/resource',
65
+ * });
66
+ * ```
67
+ */
68
+ export class AbstractDelegatedFacilitatorAdapter {
69
+ constructor(walletClient, config, chainId = ABSTRACT_CHAIN_IDS.mainnet) {
70
+ this.walletClient = walletClient;
71
+ this.chainId = chainId;
72
+ // Validate facilitator
73
+ const approved = [
74
+ ...ABSTRACT_APPROVED_FACILITATORS,
75
+ ...(config.userAllowlist ?? []),
76
+ ];
77
+ const isApproved = approved.some((a) => a.toLowerCase() === config.facilitatorAddress.toLowerCase());
78
+ if (!isApproved) {
79
+ throw new Error(`Facilitator ${config.facilitatorAddress} is not on the Abstract approved list. ` +
80
+ `Pass it in userAllowlist to explicitly allow it.`);
81
+ }
82
+ this.config = {
83
+ facilitatorAddress: config.facilitatorAddress,
84
+ token: config.token ?? ABSTRACT_USDC[chainId] ?? ABSTRACT_USDC[ABSTRACT_CHAIN_IDS.mainnet],
85
+ deadlineSeconds: config.deadlineSeconds ?? 300,
86
+ userAllowlist: config.userAllowlist ?? [],
87
+ };
88
+ }
89
+ /**
90
+ * Sign an EIP-712 delegated payment permit for the Abstract facilitator.
91
+ * This replaces direct tx signing — the permit is submitted to the facilitator contract.
92
+ */
93
+ async signPaymentPermit(params) {
94
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + this.config.deadlineSeconds);
95
+ const permit = {
96
+ facilitator: this.config.facilitatorAddress,
97
+ token: this.config.token,
98
+ amount: params.amount,
99
+ payTo: params.payTo,
100
+ nonce: params.nonce,
101
+ deadline,
102
+ resource: params.resource,
103
+ };
104
+ const domain = {
105
+ ...ABSTRACT_PERMIT_DOMAIN,
106
+ chainId: this.chainId,
107
+ };
108
+ const account = this.walletClient.account;
109
+ if (!account)
110
+ throw new Error('WalletClient has no account attached');
111
+ const signature = await this.walletClient.signTypedData({
112
+ account,
113
+ domain,
114
+ types: ABSTRACT_PERMIT_TYPES,
115
+ primaryType: 'DelegatedPaymentPermit',
116
+ message: permit,
117
+ });
118
+ // Encode the permit for submission to the facilitator contract
119
+ const permitData = encodeAbiParameters(parseAbiParameters('address facilitator, address token, uint256 amount, address payTo, uint256 nonce, uint256 deadline, string resource, bytes signature'), [
120
+ permit.facilitator,
121
+ permit.token,
122
+ permit.amount,
123
+ permit.payTo,
124
+ permit.nonce,
125
+ permit.deadline,
126
+ permit.resource,
127
+ signature,
128
+ ]);
129
+ return {
130
+ permitSignature: signature,
131
+ permitData,
132
+ permit,
133
+ chainId: this.chainId,
134
+ };
135
+ }
136
+ /**
137
+ * Build the x402 payment payload for Abstract's delegated facilitator model.
138
+ * This payload replaces the standard txHash payload in the X-PAYMENT header.
139
+ */
140
+ async buildX402Payload(params) {
141
+ const result = await this.signPaymentPermit(params);
142
+ return {
143
+ scheme: 'abstract-delegated',
144
+ chainId: result.chainId,
145
+ facilitator: result.permit.facilitator,
146
+ token: result.permit.token,
147
+ amount: result.permit.amount.toString(),
148
+ payTo: result.permit.payTo,
149
+ nonce: result.permit.nonce.toString(),
150
+ deadline: result.permit.deadline.toString(),
151
+ resource: result.permit.resource,
152
+ permitSignature: result.permitSignature,
153
+ permitData: result.permitData,
154
+ };
155
+ }
156
+ /** Check if a chain ID is an Abstract chain */
157
+ static isAbstractChain(chainId) {
158
+ return Object.values(ABSTRACT_CHAIN_IDS).includes(chainId);
159
+ }
160
+ /** Get the network string for x402 payment requirements (e.g. "abstract:2741") */
161
+ static getNetworkString(chainId) {
162
+ return `abstract:${chainId}`;
163
+ }
164
+ }
165
+ // ─── SUPPORTED_CHAINS Extension ──────────────────────────────────────────────
166
+ /**
167
+ * Abstract chain IDs to add to SUPPORTED_CHAINS in the main SDK.
168
+ * These route through AbstractDelegatedFacilitatorAdapter for x402 payments.
169
+ */
170
+ export const ABSTRACT_SUPPORTED_CHAINS = {
171
+ 'abstract:2741': {
172
+ chainId: ABSTRACT_CHAIN_IDS.mainnet,
173
+ name: 'Abstract Mainnet',
174
+ rpcUrl: 'https://api.mainnet.abs.xyz',
175
+ nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
176
+ blockExplorer: 'https://explorer.mainnet.abs.xyz',
177
+ x402Model: 'delegated-facilitator',
178
+ usdc: ABSTRACT_USDC[ABSTRACT_CHAIN_IDS.mainnet],
179
+ },
180
+ 'abstract-testnet:11124': {
181
+ chainId: ABSTRACT_CHAIN_IDS.testnet,
182
+ name: 'Abstract Testnet',
183
+ rpcUrl: 'https://api.testnet.abs.xyz',
184
+ nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
185
+ blockExplorer: 'https://explorer.testnet.abs.xyz',
186
+ x402Model: 'delegated-facilitator',
187
+ usdc: ABSTRACT_USDC[ABSTRACT_CHAIN_IDS.testnet],
188
+ },
189
+ };
190
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/x402/chains/abstract/index.ts"],"names":[],"mappings":"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"}