envoy-pay 0.1.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 (364) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/LICENSE +200 -0
  3. package/README.md +529 -0
  4. package/dist/cjs/adapters/base.js +174 -0
  5. package/dist/cjs/adapters/base.js.map +1 -0
  6. package/dist/cjs/adapters/evm.js +339 -0
  7. package/dist/cjs/adapters/evm.js.map +1 -0
  8. package/dist/cjs/adapters/index.js +15 -0
  9. package/dist/cjs/adapters/index.js.map +1 -0
  10. package/dist/cjs/adapters/ows.js +204 -0
  11. package/dist/cjs/adapters/ows.js.map +1 -0
  12. package/dist/cjs/adapters/solana.js +210 -0
  13. package/dist/cjs/adapters/solana.js.map +1 -0
  14. package/dist/cjs/adapters/stellar.js +173 -0
  15. package/dist/cjs/adapters/stellar.js.map +1 -0
  16. package/dist/cjs/adapters/stripe.js +338 -0
  17. package/dist/cjs/adapters/stripe.js.map +1 -0
  18. package/dist/cjs/adapters/types.js +3 -0
  19. package/dist/cjs/adapters/types.js.map +1 -0
  20. package/dist/cjs/client.js +309 -0
  21. package/dist/cjs/client.js.map +1 -0
  22. package/dist/cjs/contracts/abis/EnvoyFacilitator.js +197 -0
  23. package/dist/cjs/contracts/abis/EnvoyFacilitator.js.map +1 -0
  24. package/dist/cjs/contracts/addresses.js +42 -0
  25. package/dist/cjs/contracts/addresses.js.map +1 -0
  26. package/dist/cjs/contracts/facilitator.js +225 -0
  27. package/dist/cjs/contracts/facilitator.js.map +1 -0
  28. package/dist/cjs/contracts/index.js +21 -0
  29. package/dist/cjs/contracts/index.js.map +1 -0
  30. package/dist/cjs/facilitator/facilitator-service.js +305 -0
  31. package/dist/cjs/facilitator/facilitator-service.js.map +1 -0
  32. package/dist/cjs/facilitator/fee-calculator.js +134 -0
  33. package/dist/cjs/facilitator/fee-calculator.js.map +1 -0
  34. package/dist/cjs/facilitator/index.js +12 -0
  35. package/dist/cjs/facilitator/index.js.map +1 -0
  36. package/dist/cjs/facilitator/types.js +99 -0
  37. package/dist/cjs/facilitator/types.js.map +1 -0
  38. package/dist/cjs/identity/agent-card.js +143 -0
  39. package/dist/cjs/identity/agent-card.js.map +1 -0
  40. package/dist/cjs/identity/agent-identity.js +166 -0
  41. package/dist/cjs/identity/agent-identity.js.map +1 -0
  42. package/dist/cjs/identity/did-resolver.js +149 -0
  43. package/dist/cjs/identity/did-resolver.js.map +1 -0
  44. package/dist/cjs/identity/erc8004/abis.js +218 -0
  45. package/dist/cjs/identity/erc8004/abis.js.map +1 -0
  46. package/dist/cjs/identity/erc8004/identity.js +268 -0
  47. package/dist/cjs/identity/erc8004/identity.js.map +1 -0
  48. package/dist/cjs/identity/erc8004/index.js +36 -0
  49. package/dist/cjs/identity/erc8004/index.js.map +1 -0
  50. package/dist/cjs/identity/erc8004/reputation.js +110 -0
  51. package/dist/cjs/identity/erc8004/reputation.js.map +1 -0
  52. package/dist/cjs/identity/erc8004/types.js +3 -0
  53. package/dist/cjs/identity/erc8004/types.js.map +1 -0
  54. package/dist/cjs/identity/index.js +61 -0
  55. package/dist/cjs/identity/index.js.map +1 -0
  56. package/dist/cjs/identity/owner-registry.js +140 -0
  57. package/dist/cjs/identity/owner-registry.js.map +1 -0
  58. package/dist/cjs/identity/reputation.js +193 -0
  59. package/dist/cjs/identity/reputation.js.map +1 -0
  60. package/dist/cjs/identity/types.js +16 -0
  61. package/dist/cjs/identity/types.js.map +1 -0
  62. package/dist/cjs/index.js +72 -0
  63. package/dist/cjs/index.js.map +1 -0
  64. package/dist/cjs/logger.js +7 -0
  65. package/dist/cjs/logger.js.map +1 -0
  66. package/dist/cjs/monitor/evm-watcher.js +165 -0
  67. package/dist/cjs/monitor/evm-watcher.js.map +1 -0
  68. package/dist/cjs/monitor/index.js +32 -0
  69. package/dist/cjs/monitor/index.js.map +1 -0
  70. package/dist/cjs/monitor/multi-watcher.js +94 -0
  71. package/dist/cjs/monitor/multi-watcher.js.map +1 -0
  72. package/dist/cjs/monitor/solana-watcher.js +172 -0
  73. package/dist/cjs/monitor/solana-watcher.js.map +1 -0
  74. package/dist/cjs/monitor/stellar-watcher.js +125 -0
  75. package/dist/cjs/monitor/stellar-watcher.js.map +1 -0
  76. package/dist/cjs/mpp.js +187 -0
  77. package/dist/cjs/mpp.js.map +1 -0
  78. package/dist/cjs/policy.js +71 -0
  79. package/dist/cjs/policy.js.map +1 -0
  80. package/dist/cjs/providers/bridge.js +323 -0
  81. package/dist/cjs/providers/bridge.js.map +1 -0
  82. package/dist/cjs/providers/onchainos.js +210 -0
  83. package/dist/cjs/providers/onchainos.js.map +1 -0
  84. package/dist/cjs/requests/eip681.js +77 -0
  85. package/dist/cjs/requests/eip681.js.map +1 -0
  86. package/dist/cjs/requests/index.js +18 -0
  87. package/dist/cjs/requests/index.js.map +1 -0
  88. package/dist/cjs/requests/sep7.js +61 -0
  89. package/dist/cjs/requests/sep7.js.map +1 -0
  90. package/dist/cjs/requests/solana-pay.js +51 -0
  91. package/dist/cjs/requests/solana-pay.js.map +1 -0
  92. package/dist/cjs/requests/universal.js +40 -0
  93. package/dist/cjs/requests/universal.js.map +1 -0
  94. package/dist/cjs/server/index.js +35 -0
  95. package/dist/cjs/server/index.js.map +1 -0
  96. package/dist/cjs/server/mpp-gate.js +118 -0
  97. package/dist/cjs/server/mpp-gate.js.map +1 -0
  98. package/dist/cjs/server/payment-gate.js +92 -0
  99. package/dist/cjs/server/payment-gate.js.map +1 -0
  100. package/dist/cjs/server/receipt.js +52 -0
  101. package/dist/cjs/server/receipt.js.map +1 -0
  102. package/dist/cjs/server/webhook.js +122 -0
  103. package/dist/cjs/server/webhook.js.map +1 -0
  104. package/dist/cjs/server/x402-gate.js +103 -0
  105. package/dist/cjs/server/x402-gate.js.map +1 -0
  106. package/dist/cjs/solana.js +14 -0
  107. package/dist/cjs/solana.js.map +1 -0
  108. package/dist/cjs/stellar.js +14 -0
  109. package/dist/cjs/stellar.js.map +1 -0
  110. package/dist/cjs/wallet/balance-aggregator.js +149 -0
  111. package/dist/cjs/wallet/balance-aggregator.js.map +1 -0
  112. package/dist/cjs/wallet/chain-router.js +254 -0
  113. package/dist/cjs/wallet/chain-router.js.map +1 -0
  114. package/dist/cjs/wallet/index.js +15 -0
  115. package/dist/cjs/wallet/index.js.map +1 -0
  116. package/dist/cjs/wallet/intent-resolver.js +145 -0
  117. package/dist/cjs/wallet/intent-resolver.js.map +1 -0
  118. package/dist/cjs/wallet/session-manager.js +170 -0
  119. package/dist/cjs/wallet/session-manager.js.map +1 -0
  120. package/dist/cjs/wallet/types.js +14 -0
  121. package/dist/cjs/wallet/types.js.map +1 -0
  122. package/dist/cjs/wallet/unified-wallet.js +253 -0
  123. package/dist/cjs/wallet/unified-wallet.js.map +1 -0
  124. package/dist/esm/adapters/base.js +170 -0
  125. package/dist/esm/adapters/base.js.map +1 -0
  126. package/dist/esm/adapters/evm.js +334 -0
  127. package/dist/esm/adapters/evm.js.map +1 -0
  128. package/dist/esm/adapters/index.js +6 -0
  129. package/dist/esm/adapters/index.js.map +1 -0
  130. package/dist/esm/adapters/ows.js +194 -0
  131. package/dist/esm/adapters/ows.js.map +1 -0
  132. package/dist/esm/adapters/solana.js +206 -0
  133. package/dist/esm/adapters/solana.js.map +1 -0
  134. package/dist/esm/adapters/stellar.js +136 -0
  135. package/dist/esm/adapters/stellar.js.map +1 -0
  136. package/dist/esm/adapters/stripe.js +334 -0
  137. package/dist/esm/adapters/stripe.js.map +1 -0
  138. package/dist/esm/adapters/types.js +2 -0
  139. package/dist/esm/adapters/types.js.map +1 -0
  140. package/dist/esm/client.js +302 -0
  141. package/dist/esm/client.js.map +1 -0
  142. package/dist/esm/contracts/abis/EnvoyFacilitator.js +194 -0
  143. package/dist/esm/contracts/abis/EnvoyFacilitator.js.map +1 -0
  144. package/dist/esm/contracts/addresses.js +38 -0
  145. package/dist/esm/contracts/addresses.js.map +1 -0
  146. package/dist/esm/contracts/facilitator.js +218 -0
  147. package/dist/esm/contracts/facilitator.js.map +1 -0
  148. package/dist/esm/contracts/index.js +8 -0
  149. package/dist/esm/contracts/index.js.map +1 -0
  150. package/dist/esm/facilitator/facilitator-service.js +301 -0
  151. package/dist/esm/facilitator/facilitator-service.js.map +1 -0
  152. package/dist/esm/facilitator/fee-calculator.js +130 -0
  153. package/dist/esm/facilitator/fee-calculator.js.map +1 -0
  154. package/dist/esm/facilitator/index.js +5 -0
  155. package/dist/esm/facilitator/index.js.map +1 -0
  156. package/dist/esm/facilitator/types.js +96 -0
  157. package/dist/esm/facilitator/types.js.map +1 -0
  158. package/dist/esm/identity/agent-card.js +139 -0
  159. package/dist/esm/identity/agent-card.js.map +1 -0
  160. package/dist/esm/identity/agent-identity.js +162 -0
  161. package/dist/esm/identity/agent-identity.js.map +1 -0
  162. package/dist/esm/identity/did-resolver.js +145 -0
  163. package/dist/esm/identity/did-resolver.js.map +1 -0
  164. package/dist/esm/identity/erc8004/abis.js +215 -0
  165. package/dist/esm/identity/erc8004/abis.js.map +1 -0
  166. package/dist/esm/identity/erc8004/identity.js +250 -0
  167. package/dist/esm/identity/erc8004/identity.js.map +1 -0
  168. package/dist/esm/identity/erc8004/index.js +13 -0
  169. package/dist/esm/identity/erc8004/index.js.map +1 -0
  170. package/dist/esm/identity/erc8004/reputation.js +105 -0
  171. package/dist/esm/identity/erc8004/reputation.js.map +1 -0
  172. package/dist/esm/identity/erc8004/types.js +2 -0
  173. package/dist/esm/identity/erc8004/types.js.map +1 -0
  174. package/dist/esm/identity/index.js +19 -0
  175. package/dist/esm/identity/index.js.map +1 -0
  176. package/dist/esm/identity/owner-registry.js +136 -0
  177. package/dist/esm/identity/owner-registry.js.map +1 -0
  178. package/dist/esm/identity/reputation.js +189 -0
  179. package/dist/esm/identity/reputation.js.map +1 -0
  180. package/dist/esm/identity/types.js +15 -0
  181. package/dist/esm/identity/types.js.map +1 -0
  182. package/dist/esm/index.js +37 -0
  183. package/dist/esm/index.js.map +1 -0
  184. package/dist/esm/logger.js +3 -0
  185. package/dist/esm/logger.js.map +1 -0
  186. package/dist/esm/monitor/evm-watcher.js +162 -0
  187. package/dist/esm/monitor/evm-watcher.js.map +1 -0
  188. package/dist/esm/monitor/index.js +25 -0
  189. package/dist/esm/monitor/index.js.map +1 -0
  190. package/dist/esm/monitor/multi-watcher.js +91 -0
  191. package/dist/esm/monitor/multi-watcher.js.map +1 -0
  192. package/dist/esm/monitor/solana-watcher.js +169 -0
  193. package/dist/esm/monitor/solana-watcher.js.map +1 -0
  194. package/dist/esm/monitor/stellar-watcher.js +122 -0
  195. package/dist/esm/monitor/stellar-watcher.js.map +1 -0
  196. package/dist/esm/mpp.js +175 -0
  197. package/dist/esm/mpp.js.map +1 -0
  198. package/dist/esm/policy.js +67 -0
  199. package/dist/esm/policy.js.map +1 -0
  200. package/dist/esm/providers/bridge.js +319 -0
  201. package/dist/esm/providers/bridge.js.map +1 -0
  202. package/dist/esm/providers/onchainos.js +172 -0
  203. package/dist/esm/providers/onchainos.js.map +1 -0
  204. package/dist/esm/requests/eip681.js +74 -0
  205. package/dist/esm/requests/eip681.js.map +1 -0
  206. package/dist/esm/requests/index.js +11 -0
  207. package/dist/esm/requests/index.js.map +1 -0
  208. package/dist/esm/requests/sep7.js +58 -0
  209. package/dist/esm/requests/sep7.js.map +1 -0
  210. package/dist/esm/requests/solana-pay.js +48 -0
  211. package/dist/esm/requests/solana-pay.js.map +1 -0
  212. package/dist/esm/requests/universal.js +37 -0
  213. package/dist/esm/requests/universal.js.map +1 -0
  214. package/dist/esm/server/index.js +27 -0
  215. package/dist/esm/server/index.js.map +1 -0
  216. package/dist/esm/server/mpp-gate.js +115 -0
  217. package/dist/esm/server/mpp-gate.js.map +1 -0
  218. package/dist/esm/server/payment-gate.js +89 -0
  219. package/dist/esm/server/payment-gate.js.map +1 -0
  220. package/dist/esm/server/receipt.js +48 -0
  221. package/dist/esm/server/receipt.js.map +1 -0
  222. package/dist/esm/server/webhook.js +119 -0
  223. package/dist/esm/server/webhook.js.map +1 -0
  224. package/dist/esm/server/x402-gate.js +100 -0
  225. package/dist/esm/server/x402-gate.js.map +1 -0
  226. package/dist/esm/solana.js +8 -0
  227. package/dist/esm/solana.js.map +1 -0
  228. package/dist/esm/stellar.js +8 -0
  229. package/dist/esm/stellar.js.map +1 -0
  230. package/dist/esm/wallet/balance-aggregator.js +145 -0
  231. package/dist/esm/wallet/balance-aggregator.js.map +1 -0
  232. package/dist/esm/wallet/chain-router.js +250 -0
  233. package/dist/esm/wallet/chain-router.js.map +1 -0
  234. package/dist/esm/wallet/index.js +7 -0
  235. package/dist/esm/wallet/index.js.map +1 -0
  236. package/dist/esm/wallet/intent-resolver.js +141 -0
  237. package/dist/esm/wallet/intent-resolver.js.map +1 -0
  238. package/dist/esm/wallet/session-manager.js +166 -0
  239. package/dist/esm/wallet/session-manager.js.map +1 -0
  240. package/dist/esm/wallet/types.js +13 -0
  241. package/dist/esm/wallet/types.js.map +1 -0
  242. package/dist/esm/wallet/unified-wallet.js +249 -0
  243. package/dist/esm/wallet/unified-wallet.js.map +1 -0
  244. package/dist/types/adapters/base.d.ts +53 -0
  245. package/dist/types/adapters/base.d.ts.map +1 -0
  246. package/dist/types/adapters/evm.d.ts +93 -0
  247. package/dist/types/adapters/evm.d.ts.map +1 -0
  248. package/dist/types/adapters/index.d.ts +7 -0
  249. package/dist/types/adapters/index.d.ts.map +1 -0
  250. package/dist/types/adapters/ows.d.ts +123 -0
  251. package/dist/types/adapters/ows.d.ts.map +1 -0
  252. package/dist/types/adapters/solana.d.ts +77 -0
  253. package/dist/types/adapters/solana.d.ts.map +1 -0
  254. package/dist/types/adapters/stellar.d.ts +67 -0
  255. package/dist/types/adapters/stellar.d.ts.map +1 -0
  256. package/dist/types/adapters/stripe.d.ts +206 -0
  257. package/dist/types/adapters/stripe.d.ts.map +1 -0
  258. package/dist/types/adapters/types.d.ts +110 -0
  259. package/dist/types/adapters/types.d.ts.map +1 -0
  260. package/dist/types/client.d.ts +89 -0
  261. package/dist/types/client.d.ts.map +1 -0
  262. package/dist/types/contracts/abis/EnvoyFacilitator.d.ts +296 -0
  263. package/dist/types/contracts/abis/EnvoyFacilitator.d.ts.map +1 -0
  264. package/dist/types/contracts/addresses.d.ts +24 -0
  265. package/dist/types/contracts/addresses.d.ts.map +1 -0
  266. package/dist/types/contracts/facilitator.d.ts +172 -0
  267. package/dist/types/contracts/facilitator.d.ts.map +1 -0
  268. package/dist/types/contracts/index.d.ts +6 -0
  269. package/dist/types/contracts/index.d.ts.map +1 -0
  270. package/dist/types/facilitator/facilitator-service.d.ts +69 -0
  271. package/dist/types/facilitator/facilitator-service.d.ts.map +1 -0
  272. package/dist/types/facilitator/fee-calculator.d.ts +48 -0
  273. package/dist/types/facilitator/fee-calculator.d.ts.map +1 -0
  274. package/dist/types/facilitator/index.d.ts +5 -0
  275. package/dist/types/facilitator/index.d.ts.map +1 -0
  276. package/dist/types/facilitator/types.d.ts +221 -0
  277. package/dist/types/facilitator/types.d.ts.map +1 -0
  278. package/dist/types/identity/agent-card.d.ts +83 -0
  279. package/dist/types/identity/agent-card.d.ts.map +1 -0
  280. package/dist/types/identity/agent-identity.d.ts +102 -0
  281. package/dist/types/identity/agent-identity.d.ts.map +1 -0
  282. package/dist/types/identity/did-resolver.d.ts +70 -0
  283. package/dist/types/identity/did-resolver.d.ts.map +1 -0
  284. package/dist/types/identity/erc8004/abis.d.ts +336 -0
  285. package/dist/types/identity/erc8004/abis.d.ts.map +1 -0
  286. package/dist/types/identity/erc8004/identity.d.ts +109 -0
  287. package/dist/types/identity/erc8004/identity.d.ts.map +1 -0
  288. package/dist/types/identity/erc8004/index.d.ts +15 -0
  289. package/dist/types/identity/erc8004/index.d.ts.map +1 -0
  290. package/dist/types/identity/erc8004/reputation.d.ts +52 -0
  291. package/dist/types/identity/erc8004/reputation.d.ts.map +1 -0
  292. package/dist/types/identity/erc8004/types.d.ts +31 -0
  293. package/dist/types/identity/erc8004/types.d.ts.map +1 -0
  294. package/dist/types/identity/index.d.ts +10 -0
  295. package/dist/types/identity/index.d.ts.map +1 -0
  296. package/dist/types/identity/owner-registry.d.ts +68 -0
  297. package/dist/types/identity/owner-registry.d.ts.map +1 -0
  298. package/dist/types/identity/reputation.d.ts +66 -0
  299. package/dist/types/identity/reputation.d.ts.map +1 -0
  300. package/dist/types/identity/types.d.ts +182 -0
  301. package/dist/types/identity/types.d.ts.map +1 -0
  302. package/dist/types/index.d.ts +17 -0
  303. package/dist/types/index.d.ts.map +1 -0
  304. package/dist/types/logger.d.ts +10 -0
  305. package/dist/types/logger.d.ts.map +1 -0
  306. package/dist/types/monitor/evm-watcher.d.ts +40 -0
  307. package/dist/types/monitor/evm-watcher.d.ts.map +1 -0
  308. package/dist/types/monitor/index.d.ts +25 -0
  309. package/dist/types/monitor/index.d.ts.map +1 -0
  310. package/dist/types/monitor/multi-watcher.d.ts +48 -0
  311. package/dist/types/monitor/multi-watcher.d.ts.map +1 -0
  312. package/dist/types/monitor/solana-watcher.d.ts +36 -0
  313. package/dist/types/monitor/solana-watcher.d.ts.map +1 -0
  314. package/dist/types/monitor/stellar-watcher.d.ts +34 -0
  315. package/dist/types/monitor/stellar-watcher.d.ts.map +1 -0
  316. package/dist/types/mpp.d.ts +153 -0
  317. package/dist/types/mpp.d.ts.map +1 -0
  318. package/dist/types/policy.d.ts +40 -0
  319. package/dist/types/policy.d.ts.map +1 -0
  320. package/dist/types/providers/bridge.d.ts +162 -0
  321. package/dist/types/providers/bridge.d.ts.map +1 -0
  322. package/dist/types/providers/onchainos.d.ts +128 -0
  323. package/dist/types/providers/onchainos.d.ts.map +1 -0
  324. package/dist/types/requests/eip681.d.ts +51 -0
  325. package/dist/types/requests/eip681.d.ts.map +1 -0
  326. package/dist/types/requests/index.d.ts +11 -0
  327. package/dist/types/requests/index.d.ts.map +1 -0
  328. package/dist/types/requests/sep7.d.ts +56 -0
  329. package/dist/types/requests/sep7.d.ts.map +1 -0
  330. package/dist/types/requests/solana-pay.d.ts +50 -0
  331. package/dist/types/requests/solana-pay.d.ts.map +1 -0
  332. package/dist/types/requests/universal.d.ts +28 -0
  333. package/dist/types/requests/universal.d.ts.map +1 -0
  334. package/dist/types/server/index.d.ts +27 -0
  335. package/dist/types/server/index.d.ts.map +1 -0
  336. package/dist/types/server/mpp-gate.d.ts +66 -0
  337. package/dist/types/server/mpp-gate.d.ts.map +1 -0
  338. package/dist/types/server/payment-gate.d.ts +33 -0
  339. package/dist/types/server/payment-gate.d.ts.map +1 -0
  340. package/dist/types/server/receipt.d.ts +52 -0
  341. package/dist/types/server/receipt.d.ts.map +1 -0
  342. package/dist/types/server/webhook.d.ts +46 -0
  343. package/dist/types/server/webhook.d.ts.map +1 -0
  344. package/dist/types/server/x402-gate.d.ts +70 -0
  345. package/dist/types/server/x402-gate.d.ts.map +1 -0
  346. package/dist/types/solana.d.ts +7 -0
  347. package/dist/types/solana.d.ts.map +1 -0
  348. package/dist/types/stellar.d.ts +7 -0
  349. package/dist/types/stellar.d.ts.map +1 -0
  350. package/dist/types/wallet/balance-aggregator.d.ts +51 -0
  351. package/dist/types/wallet/balance-aggregator.d.ts.map +1 -0
  352. package/dist/types/wallet/chain-router.d.ts +44 -0
  353. package/dist/types/wallet/chain-router.d.ts.map +1 -0
  354. package/dist/types/wallet/index.d.ts +7 -0
  355. package/dist/types/wallet/index.d.ts.map +1 -0
  356. package/dist/types/wallet/intent-resolver.d.ts +39 -0
  357. package/dist/types/wallet/intent-resolver.d.ts.map +1 -0
  358. package/dist/types/wallet/session-manager.d.ts +57 -0
  359. package/dist/types/wallet/session-manager.d.ts.map +1 -0
  360. package/dist/types/wallet/types.d.ts +161 -0
  361. package/dist/types/wallet/types.d.ts.map +1 -0
  362. package/dist/types/wallet/unified-wallet.d.ts +122 -0
  363. package/dist/types/wallet/unified-wallet.d.ts.map +1 -0
  364. package/package.json +194 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * IntentResolver — Parses natural-language payment intents into PaymentPlans.
3
+ *
4
+ * Agents express payment desires as simple strings ("pay $5", "send 10 USDC
5
+ * to 0x1234..."). The IntentResolver parses these into structured PayIntent
6
+ * objects, then delegates to ChainRouter for execution planning.
7
+ *
8
+ * Supports:
9
+ * - "$5" / "$5.00" — USD amounts
10
+ * - "5 USDC" / "10 XLM" — Asset-specific amounts
11
+ * - "to 0x..." / "to G..." / "to ..." — destination extraction
12
+ * - "memo: invoice-123" — memo extraction
13
+ *
14
+ * @see ERC-7521 — Intent-centric execution pattern
15
+ */
16
+ /**
17
+ * Pattern: "$5.00" or "$5"
18
+ */
19
+ const USD_AMOUNT_RE = /\$(\d+(?:\.\d{1,2})?)/;
20
+ /**
21
+ * Pattern: "5 USDC" or "10.5 ETH"
22
+ */
23
+ const ASSET_AMOUNT_RE = /(\d+(?:\.\d+)?)\s+(USDC|ETH|XLM|SOL|USD|USDT|DAI|BTC)/i;
24
+ /**
25
+ * Pattern: Ethereum-style address "0x..." (42 chars)
26
+ */
27
+ const ETH_ADDRESS_RE = /\b(0x[a-fA-F0-9]{40})\b/;
28
+ /**
29
+ * Pattern: Stellar-style address "G..." (56 chars)
30
+ */
31
+ const STELLAR_ADDRESS_RE = /\b(G[A-Z2-7]{55})\b/;
32
+ /**
33
+ * Pattern: Solana-style address (base58, 32-44 chars)
34
+ */
35
+ const SOLANA_ADDRESS_RE = /\b([1-9A-HJ-NP-Za-km-z]{32,44})\b/;
36
+ /**
37
+ * Pattern: "memo: <text>" or "memo:<text>"
38
+ */
39
+ const MEMO_RE = /memo:\s*([^\s,]+)/i;
40
+ /**
41
+ * Rough USD rates for intent parsing (same as BalanceAggregator).
42
+ */
43
+ const INTENT_RATES = {
44
+ USDC: 1,
45
+ USDT: 1,
46
+ DAI: 1,
47
+ USD: 1,
48
+ cUSD: 1,
49
+ CUSD: 1,
50
+ cEUR: 1.08,
51
+ CEUR: 1.08,
52
+ cREAL: 0.2,
53
+ CREAL: 0.2,
54
+ CELO: 0.7,
55
+ ETH: 3200,
56
+ XLM: 0.12,
57
+ SOL: 170,
58
+ BTC: 95000,
59
+ };
60
+ export class IntentResolver {
61
+ /**
62
+ * Parse a natural-language payment intent string into a structured PayIntent.
63
+ *
64
+ * @example
65
+ * resolve('pay $5 to 0x1234...'); // { amount: '5.00', destination: '0x1234...' }
66
+ * resolve('send 100 USDC memo: inv-42'); // { amount: '100', asset: 'USDC', memo: 'inv-42' }
67
+ * resolve('$0.50'); // { amount: '0.50' }
68
+ */
69
+ resolve(input) {
70
+ const intent = {
71
+ amount: '0',
72
+ };
73
+ // ── Extract USD amount ──────────────────────────────────────────
74
+ const usdMatch = input.match(USD_AMOUNT_RE);
75
+ if (usdMatch) {
76
+ intent.amount = usdMatch[1];
77
+ intent.asset = 'USDC';
78
+ }
79
+ // ── Extract asset-denominated amount ────────────────────────────
80
+ const assetMatch = input.match(ASSET_AMOUNT_RE);
81
+ if (assetMatch) {
82
+ const rawAmount = parseFloat(assetMatch[1]);
83
+ const asset = assetMatch[2].toUpperCase();
84
+ intent.asset = asset;
85
+ // Convert to USD for the amount field
86
+ const rate = INTENT_RATES[asset] ?? 1;
87
+ intent.amount = (rawAmount * rate).toFixed(2);
88
+ }
89
+ // ── Extract destination ─────────────────────────────────────────
90
+ const ethMatch = input.match(ETH_ADDRESS_RE);
91
+ if (ethMatch) {
92
+ intent.destination = ethMatch[1];
93
+ }
94
+ else {
95
+ const stellarMatch = input.match(STELLAR_ADDRESS_RE);
96
+ if (stellarMatch) {
97
+ intent.destination = stellarMatch[1];
98
+ }
99
+ else {
100
+ const solanaMatch = input.match(SOLANA_ADDRESS_RE);
101
+ if (solanaMatch) {
102
+ intent.destination = solanaMatch[1];
103
+ }
104
+ }
105
+ }
106
+ // ── Extract memo ────────────────────────────────────────────────
107
+ const memoMatch = input.match(MEMO_RE);
108
+ if (memoMatch) {
109
+ intent.memo = memoMatch[1];
110
+ }
111
+ return intent;
112
+ }
113
+ /**
114
+ * Validate that a PayIntent has the minimum required fields.
115
+ */
116
+ validate(intent) {
117
+ const errors = [];
118
+ const amount = parseFloat(intent.amount);
119
+ if (isNaN(amount) || amount <= 0) {
120
+ errors.push('Amount must be a positive number');
121
+ }
122
+ if (amount > 1_000_000) {
123
+ errors.push('Amount exceeds maximum ($1,000,000)');
124
+ }
125
+ return {
126
+ valid: errors.length === 0,
127
+ errors,
128
+ };
129
+ }
130
+ /**
131
+ * Convert a raw USD amount string to a specific asset amount.
132
+ */
133
+ usdToAsset(usdAmount, asset) {
134
+ const usd = parseFloat(usdAmount);
135
+ if (isNaN(usd))
136
+ return '0';
137
+ const rate = INTENT_RATES[asset.toUpperCase()] ?? 1;
138
+ return (usd / rate).toFixed(asset.toUpperCase() === 'XLM' ? 7 : 6);
139
+ }
140
+ }
141
+ //# sourceMappingURL=intent-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-resolver.js","sourceRoot":"","sources":["../../../src/wallet/intent-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * SessionManager — Scoped, time-limited permission management.
3
+ *
4
+ * Implements session-key patterns inspired by EIP-7702, allowing
5
+ * agent owners to grant agents time-limited, capped permissions
6
+ * without exposing master private keys.
7
+ *
8
+ * Sessions enforce:
9
+ * - Per-transaction caps
10
+ * - Total session budget
11
+ * - Destination whitelists
12
+ * - Chain restrictions
13
+ * - Time-based expiry
14
+ *
15
+ * @see EIP-7702 — EOA → Smart Account delegation
16
+ * @see ERC-4337 — Account Abstraction session keys
17
+ */
18
+ /**
19
+ * Generate a unique session ID.
20
+ */
21
+ function generateSessionId() {
22
+ const timestamp = Date.now().toString(36);
23
+ const random = Math.random().toString(36).substring(2, 10);
24
+ return `sess_${timestamp}_${random}`;
25
+ }
26
+ export class SessionManager {
27
+ sessions = new Map();
28
+ /**
29
+ * Create a new session with scoped permissions.
30
+ */
31
+ createSession(permissions) {
32
+ // Validate permissions
33
+ if (permissions.maxPerTransaction <= 0) {
34
+ throw new Error('maxPerTransaction must be positive');
35
+ }
36
+ if (permissions.maxTotal <= 0) {
37
+ throw new Error('maxTotal must be positive');
38
+ }
39
+ if (permissions.maxPerTransaction > permissions.maxTotal) {
40
+ throw new Error('maxPerTransaction cannot exceed maxTotal');
41
+ }
42
+ if (permissions.expiresAt.getTime() <= Date.now()) {
43
+ throw new Error('Session expiry must be in the future');
44
+ }
45
+ const session = {
46
+ id: generateSessionId(),
47
+ permissions,
48
+ spent: 0,
49
+ txCount: 0,
50
+ createdAt: new Date(),
51
+ isActive: true,
52
+ };
53
+ this.sessions.set(session.id, session);
54
+ return session;
55
+ }
56
+ /**
57
+ * Revoke (deactivate) a session by ID.
58
+ */
59
+ revokeSession(sessionId) {
60
+ const session = this.sessions.get(sessionId);
61
+ if (!session)
62
+ return false;
63
+ session.isActive = false;
64
+ return true;
65
+ }
66
+ /**
67
+ * Check if a proposed spend is allowed within a session's permissions.
68
+ */
69
+ checkSession(sessionId, amountUsd, destination, chain) {
70
+ const session = this.sessions.get(sessionId);
71
+ if (!session) {
72
+ return { allowed: false, reason: 'Session not found' };
73
+ }
74
+ if (!session.isActive) {
75
+ return { allowed: false, reason: 'Session revoked' };
76
+ }
77
+ // Check expiry
78
+ if (Date.now() > session.permissions.expiresAt.getTime()) {
79
+ session.isActive = false;
80
+ return { allowed: false, reason: 'Session expired' };
81
+ }
82
+ // Check per-transaction limit
83
+ if (amountUsd > session.permissions.maxPerTransaction) {
84
+ return {
85
+ allowed: false,
86
+ reason: `Amount $${amountUsd} exceeds per-tx limit of $${session.permissions.maxPerTransaction}`,
87
+ };
88
+ }
89
+ // Check total session budget
90
+ if (session.spent + amountUsd > session.permissions.maxTotal) {
91
+ return {
92
+ allowed: false,
93
+ reason: `Amount $${amountUsd} would exceed session budget of $${session.permissions.maxTotal} (spent: $${session.spent})`,
94
+ };
95
+ }
96
+ // Check destination whitelist
97
+ const allowedDest = session.permissions.allowedDestinations;
98
+ if (allowedDest && allowedDest.length > 0 && destination) {
99
+ if (!allowedDest.includes(destination)) {
100
+ return {
101
+ allowed: false,
102
+ reason: `Destination ${destination} not in session whitelist`,
103
+ };
104
+ }
105
+ }
106
+ // Check chain whitelist
107
+ const allowedChains = session.permissions.allowedChains;
108
+ if (allowedChains && allowedChains.length > 0 && chain) {
109
+ if (!allowedChains.includes(chain)) {
110
+ return {
111
+ allowed: false,
112
+ reason: `Chain ${chain} not allowed in this session`,
113
+ };
114
+ }
115
+ }
116
+ return { allowed: true };
117
+ }
118
+ /**
119
+ * Record a successful spend against a session.
120
+ */
121
+ recordSpend(sessionId, amountUsd) {
122
+ const session = this.sessions.get(sessionId);
123
+ if (!session)
124
+ throw new Error(`Session ${sessionId} not found`);
125
+ session.spent += amountUsd;
126
+ session.txCount += 1;
127
+ }
128
+ /**
129
+ * Get a session by ID.
130
+ */
131
+ getSession(sessionId) {
132
+ return this.sessions.get(sessionId);
133
+ }
134
+ /**
135
+ * List all active sessions.
136
+ */
137
+ getActiveSessions() {
138
+ const now = Date.now();
139
+ return Array.from(this.sessions.values()).filter((s) => s.isActive && now <= s.permissions.expiresAt.getTime());
140
+ }
141
+ /**
142
+ * Get the remaining budget for a session.
143
+ */
144
+ getRemainingBudget(sessionId) {
145
+ const session = this.sessions.get(sessionId);
146
+ if (!session)
147
+ return 0;
148
+ return Math.max(0, session.permissions.maxTotal - session.spent);
149
+ }
150
+ /**
151
+ * Prune expired sessions from memory.
152
+ */
153
+ pruneExpired() {
154
+ const now = Date.now();
155
+ let pruned = 0;
156
+ for (const [id, session] of this.sessions) {
157
+ if (now > session.permissions.expiresAt.getTime()) {
158
+ session.isActive = false;
159
+ this.sessions.delete(id);
160
+ pruned++;
161
+ }
162
+ }
163
+ return pruned;
164
+ }
165
+ }
166
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/wallet/session-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Wallet Abstraction Types — Unified multi-chain balance & routing.
3
+ *
4
+ * These types power the UnifiedWallet, which abstracts away chain selection
5
+ * so that AI agents can simply say "pay $5" without knowing which chain,
6
+ * token, or gas mechanics are involved.
7
+ *
8
+ * @see EIP-7702 — Session keys & smart account delegation
9
+ * @see ERC-7521 — Intent-based execution
10
+ * @see ERC-4337 — Account abstraction (paymasters)
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/wallet/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * UnifiedWallet — Single entry point for multi-chain payments.
3
+ *
4
+ * Wraps multiple PaymentAdapters behind a unified interface so that
5
+ * AI agents can simply call `wallet.pay('$5')` without knowing about
6
+ * chains, tokens, gas, or atomic units.
7
+ *
8
+ * Architecture:
9
+ * ```
10
+ * Agent → UnifiedWallet → ChainRouter → best PaymentAdapter → settlement
11
+ * → BalanceAggregator → unified balance
12
+ * → IntentResolver → structured payment intent
13
+ * → SessionManager → scoped permissions
14
+ * ```
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const wallet = new UnifiedWallet({
19
+ * adapters: [evmAdapter, stellarAdapter, solanaAdapter],
20
+ * strategy: 'cheapest',
21
+ * });
22
+ *
23
+ * // Agent just pays — no chain knowledge needed
24
+ * const result = await wallet.pay({ amount: '5.00' });
25
+ * ```
26
+ *
27
+ * @see EIP-7702 — Smart account delegation
28
+ * @see ERC-7521 — Intent-based execution
29
+ */
30
+ import { BalanceAggregator } from './balance-aggregator.js';
31
+ import { ChainRouter } from './chain-router.js';
32
+ import { IntentResolver } from './intent-resolver.js';
33
+ import { SessionManager } from './session-manager.js';
34
+ export class UnifiedWallet {
35
+ adapters;
36
+ strategy;
37
+ log;
38
+ fallbackIndex;
39
+ balanceAggregator;
40
+ chainRouter;
41
+ intentResolver;
42
+ sessionManager;
43
+ constructor(options) {
44
+ if (!options.adapters || options.adapters.length === 0) {
45
+ throw new Error('UnifiedWallet requires at least one adapter');
46
+ }
47
+ this.adapters = options.adapters;
48
+ this.strategy = options.strategy ?? 'cheapest';
49
+ this.log = options.logger ?? (() => { });
50
+ this.fallbackIndex = options.fallbackIndex ?? 0;
51
+ this.balanceAggregator = new BalanceAggregator(this.adapters);
52
+ this.chainRouter = new ChainRouter(this.adapters);
53
+ this.intentResolver = new IntentResolver();
54
+ this.sessionManager = new SessionManager();
55
+ }
56
+ // ═══ Core API ═════════════════════════════════════════════════════
57
+ /**
58
+ * Execute a payment using the optimal chain route.
59
+ * The agent simply provides an amount — everything else is automatic.
60
+ */
61
+ async pay(intent) {
62
+ const strategy = intent.strategy ?? this.strategy;
63
+ this.log(`[Wallet] 💳 Pay intent: $${intent.amount} (strategy: ${strategy})`);
64
+ // Validate intent
65
+ const validation = this.intentResolver.validate(intent);
66
+ if (!validation.valid) {
67
+ return {
68
+ success: false,
69
+ transactionHash: null,
70
+ chain: 'none',
71
+ caip2Id: 'none',
72
+ amountUsd: intent.amount,
73
+ feeUsd: '0',
74
+ error: validation.errors.join('; '),
75
+ };
76
+ }
77
+ // Route to best chain
78
+ const plan = this.chainRouter.getBestPlan(intent, strategy);
79
+ if (!plan) {
80
+ this.log('[Wallet] ❌ No viable route found');
81
+ return {
82
+ success: false,
83
+ transactionHash: null,
84
+ chain: 'none',
85
+ caip2Id: 'none',
86
+ amountUsd: intent.amount,
87
+ feeUsd: '0',
88
+ error: 'No viable payment route found',
89
+ };
90
+ }
91
+ this.log(`[Wallet] 🔀 Routed to ${plan.chain} (${plan.caip2Id}), fee: $${plan.estimatedFeeUsd}`);
92
+ // Execute payment
93
+ return this.executePlan(plan, intent);
94
+ }
95
+ /**
96
+ * Pay using a natural-language string.
97
+ * @example wallet.payIntent('pay $5 to 0x1234...')
98
+ */
99
+ async payIntent(intentString) {
100
+ this.log(`[Wallet] 🧠 Resolving intent: "${intentString}"`);
101
+ const intent = this.intentResolver.resolve(intentString);
102
+ return this.pay(intent);
103
+ }
104
+ // ═══ Balance API ══════════════════════════════════════════════════
105
+ /**
106
+ * Get the unified balance across all chains.
107
+ */
108
+ async getBalance() {
109
+ return this.balanceAggregator.getUnifiedBalance();
110
+ }
111
+ /**
112
+ * Get the total USD balance as a simple number.
113
+ */
114
+ async getTotalBalanceUsd() {
115
+ const balance = await this.balanceAggregator.getUnifiedBalance();
116
+ return balance.totalUsd;
117
+ }
118
+ /**
119
+ * Check if the wallet has enough funds for a payment.
120
+ */
121
+ async canAfford(amountUsd) {
122
+ return this.balanceAggregator.hasSufficientFunds(amountUsd);
123
+ }
124
+ // ═══ Routing API ══════════════════════════════════════════════════
125
+ /**
126
+ * Preview all routing options for a payment without executing.
127
+ */
128
+ previewRoutes(intent) {
129
+ const strategy = intent.strategy ?? this.strategy;
130
+ return this.chainRouter.route(intent, strategy);
131
+ }
132
+ /**
133
+ * Get the default routing strategy.
134
+ */
135
+ getStrategy() {
136
+ return this.strategy;
137
+ }
138
+ /**
139
+ * Change the default routing strategy.
140
+ */
141
+ setStrategy(strategy) {
142
+ this.strategy = strategy;
143
+ this.log(`[Wallet] ⚙️ Strategy changed to: ${strategy}`);
144
+ }
145
+ // ═══ Session API (EIP-7702 compatible) ════════════════════════════
146
+ /**
147
+ * Create a scoped session for this wallet.
148
+ */
149
+ createSession(permissions) {
150
+ const session = this.sessionManager.createSession(permissions);
151
+ this.log(`[Wallet] 🔑 Session created: ${session.id} (max: $${permissions.maxTotal})`);
152
+ return session;
153
+ }
154
+ /**
155
+ * Revoke a session.
156
+ */
157
+ revokeSession(sessionId) {
158
+ const revoked = this.sessionManager.revokeSession(sessionId);
159
+ if (revoked) {
160
+ this.log(`[Wallet] 🚫 Session revoked: ${sessionId}`);
161
+ }
162
+ return revoked;
163
+ }
164
+ // ═══ Adapter Access ═══════════════════════════════════════════════
165
+ /**
166
+ * Get the primary address (first adapter's address).
167
+ */
168
+ getAddress() {
169
+ return this.adapters[0].getAddress();
170
+ }
171
+ /**
172
+ * Get all adapter addresses.
173
+ */
174
+ getAddresses() {
175
+ return this.adapters.map((a) => ({
176
+ chain: a.chainName,
177
+ caip2Id: a.caip2Id,
178
+ address: a.getAddress(),
179
+ }));
180
+ }
181
+ /**
182
+ * Get the number of registered adapters.
183
+ */
184
+ getAdapterCount() {
185
+ return this.adapters.length;
186
+ }
187
+ /**
188
+ * Get a specific adapter by CAIP-2 ID.
189
+ */
190
+ getAdapter(caip2Id) {
191
+ return this.adapters.find((a) => a.caip2Id === caip2Id);
192
+ }
193
+ /**
194
+ * Expose the underlying adapter for EnvoyClient backward compatibility.
195
+ * Returns the first (default) adapter.
196
+ */
197
+ getDefaultAdapter() {
198
+ return this.adapters[this.fallbackIndex] ?? this.adapters[0];
199
+ }
200
+ // ═══ Internal ═════════════════════════════════════════════════════
201
+ /**
202
+ * Execute a resolved payment plan.
203
+ */
204
+ async executePlan(plan, intent) {
205
+ const destination = intent.destination ?? plan.adapter.getAddress();
206
+ try {
207
+ const txHash = await plan.adapter.pay(destination, plan.atomicAmount, plan.caip2Id);
208
+ if (txHash) {
209
+ this.log(`[Wallet] ✅ Payment settled on ${plan.chain}: ${txHash}`);
210
+ return {
211
+ success: true,
212
+ transactionHash: txHash,
213
+ chain: plan.chain,
214
+ caip2Id: plan.caip2Id,
215
+ amountUsd: intent.amount,
216
+ feeUsd: plan.estimatedFeeUsd.toFixed(4),
217
+ };
218
+ }
219
+ // Primary route failed — try fallback
220
+ return this.tryFallback(intent, plan.adapterIndex);
221
+ }
222
+ catch (error) {
223
+ this.log(`[Wallet] ⚠️ ${plan.chain} failed: ${error.message}`);
224
+ return this.tryFallback(intent, plan.adapterIndex);
225
+ }
226
+ }
227
+ /**
228
+ * Fallback: try next-best adapter if primary fails.
229
+ */
230
+ async tryFallback(intent, excludeIndex) {
231
+ const strategy = intent.strategy ?? this.strategy;
232
+ const allPlans = this.chainRouter.route(intent, strategy);
233
+ const fallbackPlans = allPlans.filter((p) => p.adapterIndex !== excludeIndex);
234
+ if (fallbackPlans.length === 0) {
235
+ return {
236
+ success: false,
237
+ transactionHash: null,
238
+ chain: 'none',
239
+ caip2Id: 'none',
240
+ amountUsd: intent.amount,
241
+ feeUsd: '0',
242
+ error: 'All payment routes failed',
243
+ };
244
+ }
245
+ this.log(`[Wallet] 🔄 Falling back to ${fallbackPlans[0].chain}`);
246
+ return this.executePlan(fallbackPlans[0], intent);
247
+ }
248
+ }
249
+ //# sourceMappingURL=unified-wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-wallet.js","sourceRoot":"","sources":["../../../src/wallet/unified-wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { PaymentAdapter } from './types';
2
+ import { Logger } from '../logger';
3
+ export interface BaseAdapterOptions {
4
+ /** Hex private key (0x-prefixed). If omitted, a random key is generated. */
5
+ privateKey?: `0x${string}`;
6
+ /** 'mainnet' or 'testnet' (default: 'testnet') */
7
+ network?: 'mainnet' | 'testnet';
8
+ /** Optional custom RPC URL */
9
+ rpcUrl?: string;
10
+ /**
11
+ * Asset to settle with.
12
+ * - 'ETH' — native ETH transfer (default)
13
+ * - 'USDC' — ERC-20 USDC transfer via Circle's official contract
14
+ */
15
+ asset?: 'ETH' | 'USDC';
16
+ /** Optional logger. */
17
+ logger?: Logger;
18
+ }
19
+ /**
20
+ * BasePaymentAdapter — On-chain settlement on Base (Coinbase L2).
21
+ *
22
+ * Supports both native ETH transfers and USDC (ERC-20) transfers.
23
+ * Uses viem for lightweight, type-safe EVM interactions.
24
+ *
25
+ * Networks:
26
+ * - Base Mainnet (eip155:8453) — production
27
+ * - Base Sepolia (eip155:84532) — testnet
28
+ *
29
+ * @see https://base.org
30
+ * @see https://x402.org
31
+ */
32
+ export declare class BasePaymentAdapter implements PaymentAdapter {
33
+ readonly chainName = "Base";
34
+ readonly caip2Id: string;
35
+ private wallet;
36
+ private publicClient;
37
+ private account;
38
+ private chain;
39
+ private asset;
40
+ private log;
41
+ constructor(options?: BaseAdapterOptions);
42
+ getAddress(): string;
43
+ /** Get native ETH balance (formatted). */
44
+ getBalance(): Promise<string>;
45
+ /** Get USDC balance (formatted, 6 decimals). */
46
+ getUsdcBalance(): Promise<string>;
47
+ pay(destination: string, amount: string, network: string): Promise<string | null>;
48
+ /** Execute a native ETH transfer. */
49
+ private payEth;
50
+ /** Execute a USDC ERC-20 transfer. */
51
+ private payUsdc;
52
+ }
53
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/base.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,EAAc,MAAM,WAAW,CAAC;AA+B/C,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,SAAgB,SAAS,UAAU;IACnC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAEhC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,GAAG,CAAS;gBAER,OAAO,GAAE,kBAAuB;IAsB5C,UAAU,IAAI,MAAM;IAIpB,0CAA0C;IACpC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAOnC,gDAAgD;IAC1C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAgBjC,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOzB,qCAAqC;YACvB,MAAM;IAuCpB,sCAAsC;YACxB,OAAO;CAkDtB"}