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,100 @@
1
+ import { noopLogger } from '../logger.js';
2
+ /**
3
+ * Creates an Express/Connect middleware that gates access behind x402 payments.
4
+ *
5
+ * When a request lacks a valid `X-PAYMENT` header, the middleware responds with
6
+ * 402 Payment Required and an x402-compliant JSON challenge body.
7
+ *
8
+ * When a valid `X-PAYMENT` header is present, it's decoded and optionally
9
+ * verified before calling `next()`.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * app.post('/api/premium', createX402Gate({
14
+ * payTo: '0xABC...',
15
+ * amount: '500000',
16
+ * asset: 'USDC',
17
+ * network: 'eip155:8453',
18
+ * }), handler);
19
+ * ```
20
+ */
21
+ export function createX402Gate(config) {
22
+ const log = config.logger ?? noopLogger;
23
+ const version = config.x402Version ?? 2;
24
+ const scheme = config.scheme ?? 'exact';
25
+ return async (req, res, next) => {
26
+ // Check for existing X-PAYMENT header
27
+ const paymentHeader = req.headers['x-payment'] ||
28
+ req.headers['X-PAYMENT'];
29
+ if (!paymentHeader) {
30
+ // No payment proof — return 402 challenge
31
+ log('[x402-gate] 💰 No X-PAYMENT header — returning 402 challenge');
32
+ const challenge = {
33
+ x402Version: version,
34
+ resource: {
35
+ url: req.url || '/',
36
+ description: config.description || 'Payment required',
37
+ ...(config.usdAmount ? { usdAmount: config.usdAmount } : {}),
38
+ },
39
+ accepts: [
40
+ {
41
+ scheme,
42
+ network: config.network,
43
+ amount: config.amount,
44
+ payTo: config.payTo,
45
+ asset: config.asset,
46
+ },
47
+ ],
48
+ };
49
+ res.writeHead(402, { 'Content-Type': 'application/json' });
50
+ res.end(JSON.stringify(challenge));
51
+ return;
52
+ }
53
+ // Decode X-PAYMENT proof
54
+ try {
55
+ const decoded = Buffer.from(paymentHeader, 'base64').toString('utf-8');
56
+ const proof = JSON.parse(decoded);
57
+ // Basic validation
58
+ if (!proof.payload?.transaction) {
59
+ log('[x402-gate] ❌ Missing transaction in payment proof');
60
+ res.writeHead(400, { 'Content-Type': 'application/json' });
61
+ res.end(JSON.stringify({ error: 'Invalid payment proof: missing transaction' }));
62
+ return;
63
+ }
64
+ // Verify payment destination matches
65
+ if (proof.accepted?.payTo && proof.accepted.payTo !== config.payTo) {
66
+ log('[x402-gate] ❌ Payment destination mismatch');
67
+ res.writeHead(400, { 'Content-Type': 'application/json' });
68
+ res.end(JSON.stringify({ error: 'Payment destination mismatch' }));
69
+ return;
70
+ }
71
+ // Verify amount matches
72
+ if (proof.accepted?.amount && proof.accepted.amount !== config.amount) {
73
+ log('[x402-gate] ❌ Payment amount mismatch');
74
+ res.writeHead(400, { 'Content-Type': 'application/json' });
75
+ res.end(JSON.stringify({ error: 'Payment amount mismatch' }));
76
+ return;
77
+ }
78
+ // Custom verification (if provided)
79
+ if (config.verifyPayment) {
80
+ const isValid = await config.verifyPayment(proof);
81
+ if (!isValid) {
82
+ log('[x402-gate] ❌ Custom verification failed');
83
+ res.writeHead(402, { 'Content-Type': 'application/json' });
84
+ res.end(JSON.stringify({ error: 'Payment verification failed' }));
85
+ return;
86
+ }
87
+ }
88
+ // Attach proof to request for downstream handlers
89
+ req.payment = proof;
90
+ log(`[x402-gate] ✅ Payment verified: tx=${proof.payload.transaction.slice(0, 16)}…`);
91
+ next();
92
+ }
93
+ catch (err) {
94
+ log(`[x402-gate] ❌ Failed to decode payment proof: ${err.message}`);
95
+ res.writeHead(400, { 'Content-Type': 'application/json' });
96
+ res.end(JSON.stringify({ error: 'Invalid X-PAYMENT header' }));
97
+ }
98
+ };
99
+ }
100
+ //# sourceMappingURL=x402-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-gate.js","sourceRoot":"","sources":["../../../src/server/x402-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ // envoy-pay/solana — opt-in Solana rail.
2
+ //
3
+ // Pulls in @solana/web3.js + @solana/spl-token (declared as optional peer deps),
4
+ // so it only loads when you import this subpath — the Celo core stays light.
5
+ export { SolanaPaymentAdapter } from './adapters/solana.js';
6
+ export { createSolanaWatcher } from './monitor/solana-watcher.js';
7
+ export { buildSolanaPayUri } from './requests/solana-pay.js';
8
+ //# sourceMappingURL=solana.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/solana.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ // envoy-pay/stellar — opt-in Stellar rail.
2
+ //
3
+ // Pulls in @stellar/stellar-sdk (declared as an optional peer dep), so it only
4
+ // loads when you import this subpath — the Celo core stays light.
5
+ export { StellarPaymentAdapter } from './adapters/stellar.js';
6
+ export { createStellarWatcher } from './monitor/stellar-watcher.js';
7
+ export { buildSep7Uri } from './requests/sep7.js';
8
+ //# sourceMappingURL=stellar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stellar.js","sourceRoot":"","sources":["../../src/stellar.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE;AACF,+EAA+E;AAC/E,kEAAkE;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * BalanceAggregator — Multi-chain balance aggregation.
3
+ *
4
+ * Queries all registered adapters in parallel to produce a unified
5
+ * balance snapshot. Handles adapters that don't implement `getBalance()`
6
+ * gracefully (returns 0).
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const aggregator = new BalanceAggregator(adapters);
11
+ * const balance = await aggregator.getUnifiedBalance();
12
+ * console.log(balance.totalFormatted); // "$400.00"
13
+ * ```
14
+ */
15
+ /**
16
+ * Known stablecoin tickers treated as 1:1 USD.
17
+ * All others use best-effort conversion.
18
+ */
19
+ const STABLECOIN_TICKERS = new Set([
20
+ 'USDC', 'USDT', 'DAI', 'BUSD', 'TUSD', 'FRAX', 'PYUSD', 'USD',
21
+ ]);
22
+ /**
23
+ * Rough USD conversion rates for non-stablecoin assets.
24
+ * Used only when precise oracle data is unavailable.
25
+ */
26
+ const FALLBACK_RATES = {
27
+ ETH: 3200,
28
+ XLM: 0.12,
29
+ SOL: 170,
30
+ BTC: 95000,
31
+ MATIC: 0.55,
32
+ AVAX: 35,
33
+ ARB: 1.1,
34
+ OP: 2.5,
35
+ };
36
+ export class BalanceAggregator {
37
+ adapters;
38
+ constructor(adapters) {
39
+ this.adapters = adapters;
40
+ }
41
+ /**
42
+ * Query all adapters and return a unified balance snapshot.
43
+ * Adapters without `getBalance()` report $0.
44
+ */
45
+ async getUnifiedBalance() {
46
+ const results = await Promise.allSettled(this.adapters.map((adapter, index) => this.queryAdapter(adapter, index)));
47
+ const breakdown = [];
48
+ for (const result of results) {
49
+ if (result.status === 'fulfilled') {
50
+ breakdown.push(result.value);
51
+ }
52
+ // Silently skip failed adapters — fail-open for balance reads
53
+ }
54
+ const totalUsd = breakdown.reduce((sum, b) => sum + b.balanceUsd, 0);
55
+ return {
56
+ totalUsd,
57
+ totalFormatted: `$${totalUsd.toFixed(2)}`,
58
+ breakdown,
59
+ timestamp: new Date(),
60
+ };
61
+ }
62
+ /**
63
+ * Get the balance for a specific chain by CAIP-2 ID.
64
+ */
65
+ async getChainBalance(caip2Id) {
66
+ const index = this.adapters.findIndex((a) => a.caip2Id === caip2Id);
67
+ if (index === -1)
68
+ return null;
69
+ return this.queryAdapter(this.adapters[index], index);
70
+ }
71
+ /**
72
+ * Find the adapter with the highest USD balance.
73
+ */
74
+ async getRichestChain() {
75
+ const unified = await this.getUnifiedBalance();
76
+ if (unified.breakdown.length === 0)
77
+ return null;
78
+ return unified.breakdown.reduce((richest, current) => current.balanceUsd > richest.balanceUsd ? current : richest);
79
+ }
80
+ /**
81
+ * Check if sufficient funds exist across all chains.
82
+ */
83
+ async hasSufficientFunds(amountUsd) {
84
+ const unified = await this.getUnifiedBalance();
85
+ return unified.totalUsd >= amountUsd;
86
+ }
87
+ /**
88
+ * Find all chains that can cover a given USD amount.
89
+ */
90
+ async getChainsWithSufficientFunds(amountUsd) {
91
+ const unified = await this.getUnifiedBalance();
92
+ return unified.breakdown.filter((b) => b.balanceUsd >= amountUsd);
93
+ }
94
+ // ─── Internal ──────────────────────────────────────────────────────
95
+ async queryAdapter(adapter, index) {
96
+ let balance = '0';
97
+ let asset = 'USDC'; // default assumption
98
+ if (adapter.getBalance) {
99
+ try {
100
+ balance = await adapter.getBalance();
101
+ }
102
+ catch {
103
+ balance = '0';
104
+ }
105
+ }
106
+ // Detect asset from chain name heuristics
107
+ asset = this.detectPrimaryAsset(adapter.chainName);
108
+ const balanceNum = parseFloat(balance) || 0;
109
+ const balanceUsd = this.toUsd(balanceNum, asset);
110
+ return {
111
+ chain: adapter.chainName,
112
+ caip2Id: adapter.caip2Id,
113
+ balance: balanceNum.toFixed(2),
114
+ balanceUsd,
115
+ asset,
116
+ adapterIndex: index,
117
+ };
118
+ }
119
+ /**
120
+ * Convert an asset amount to USD using stablecoin 1:1 or fallback rates.
121
+ */
122
+ toUsd(amount, asset) {
123
+ if (STABLECOIN_TICKERS.has(asset.toUpperCase())) {
124
+ return amount;
125
+ }
126
+ const rate = FALLBACK_RATES[asset.toUpperCase()] ?? 1;
127
+ return amount * rate;
128
+ }
129
+ /**
130
+ * Best-effort detection of the primary asset for a chain.
131
+ */
132
+ detectPrimaryAsset(chainName) {
133
+ const lower = chainName.toLowerCase();
134
+ if (lower.includes('stripe') || lower.includes('fiat'))
135
+ return 'USD';
136
+ if (lower.includes('stellar'))
137
+ return 'USDC'; // Stellar USDC
138
+ if (lower.includes('solana'))
139
+ return 'USDC'; // SPL USDC
140
+ if (lower.includes('bitcoin'))
141
+ return 'BTC';
142
+ return 'USDC'; // Default for EVM chains (Base, Arb, etc.)
143
+ }
144
+ }
145
+ //# sourceMappingURL=balance-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance-aggregator.js","sourceRoot":"","sources":["../../../src/wallet/balance-aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * ChainRouter — Optimal chain selection for payment execution.
3
+ *
4
+ * Given a payment intent ($5 USDC), the router scores all available
5
+ * adapters based on the configured strategy (cheapest, fastest,
6
+ * prefer-crypto, etc.) and returns a ranked list of PaymentPlans.
7
+ *
8
+ * Scoring is based on chain metadata (gas estimates, settlement times)
9
+ * and real-time balance availability.
10
+ *
11
+ * @see ERC-7521 — Intent-based execution patterns
12
+ */
13
+ /**
14
+ * Default chain metadata for known chains.
15
+ * These are best-effort estimates; production systems should
16
+ * query live gas oracles and fee estimators.
17
+ */
18
+ const DEFAULT_CHAIN_META = {
19
+ // Celo (first-class, default) — negative boost = preferred in scoring
20
+ 'eip155:42220': {
21
+ caip2Id: 'eip155:42220',
22
+ name: 'Celo',
23
+ avgSettlementSeconds: 5,
24
+ avgFeeUsd: 0.001,
25
+ isFiat: false,
26
+ priorityBoost: -3,
27
+ },
28
+ 'eip155:44787': {
29
+ caip2Id: 'eip155:44787',
30
+ name: 'Celo Alfajores',
31
+ avgSettlementSeconds: 5,
32
+ avgFeeUsd: 0,
33
+ isFiat: false,
34
+ priorityBoost: 0,
35
+ },
36
+ // EVM L2s
37
+ 'eip155:8453': {
38
+ caip2Id: 'eip155:8453',
39
+ name: 'Base',
40
+ avgSettlementSeconds: 2,
41
+ avgFeeUsd: 0.001,
42
+ isFiat: false,
43
+ priorityBoost: 0,
44
+ },
45
+ 'eip155:84532': {
46
+ caip2Id: 'eip155:84532',
47
+ name: 'Base Sepolia',
48
+ avgSettlementSeconds: 2,
49
+ avgFeeUsd: 0.0001,
50
+ isFiat: false,
51
+ priorityBoost: 0,
52
+ },
53
+ 'eip155:42161': {
54
+ caip2Id: 'eip155:42161',
55
+ name: 'Arbitrum',
56
+ avgSettlementSeconds: 2,
57
+ avgFeeUsd: 0.002,
58
+ isFiat: false,
59
+ priorityBoost: 0,
60
+ },
61
+ 'eip155:1': {
62
+ caip2Id: 'eip155:1',
63
+ name: 'Ethereum',
64
+ avgSettlementSeconds: 15,
65
+ avgFeeUsd: 2.5,
66
+ isFiat: false,
67
+ priorityBoost: 5, // penalise due to high gas
68
+ },
69
+ 'eip155:10': {
70
+ caip2Id: 'eip155:10',
71
+ name: 'Optimism',
72
+ avgSettlementSeconds: 2,
73
+ avgFeeUsd: 0.001,
74
+ isFiat: false,
75
+ priorityBoost: 0,
76
+ },
77
+ // Stellar
78
+ 'stellar:pubnet': {
79
+ caip2Id: 'stellar:pubnet',
80
+ name: 'Stellar',
81
+ avgSettlementSeconds: 5,
82
+ avgFeeUsd: 0.00001,
83
+ isFiat: false,
84
+ priorityBoost: 0,
85
+ },
86
+ 'stellar:testnet': {
87
+ caip2Id: 'stellar:testnet',
88
+ name: 'Stellar Testnet',
89
+ avgSettlementSeconds: 5,
90
+ avgFeeUsd: 0,
91
+ isFiat: false,
92
+ priorityBoost: 0,
93
+ },
94
+ // Solana
95
+ 'solana:mainnet': {
96
+ caip2Id: 'solana:mainnet',
97
+ name: 'Solana',
98
+ avgSettlementSeconds: 1,
99
+ avgFeeUsd: 0.0005,
100
+ isFiat: false,
101
+ priorityBoost: 0,
102
+ },
103
+ 'solana:devnet': {
104
+ caip2Id: 'solana:devnet',
105
+ name: 'Solana Devnet',
106
+ avgSettlementSeconds: 1,
107
+ avgFeeUsd: 0,
108
+ isFiat: false,
109
+ priorityBoost: 0,
110
+ },
111
+ // Fiat
112
+ 'fiat:stripe': {
113
+ caip2Id: 'fiat:stripe',
114
+ name: 'Stripe MPP',
115
+ avgSettlementSeconds: 3,
116
+ avgFeeUsd: 0.30, // Stripe minimum fee
117
+ isFiat: true,
118
+ priorityBoost: 0,
119
+ },
120
+ };
121
+ /**
122
+ * USDC decimals per chain for atomic unit conversion.
123
+ */
124
+ const USDC_DECIMALS = {
125
+ 'eip155:8453': 6,
126
+ 'eip155:84532': 6,
127
+ 'eip155:42161': 6,
128
+ 'eip155:1': 6,
129
+ 'eip155:10': 6,
130
+ 'stellar:pubnet': 7,
131
+ 'stellar:testnet': 7,
132
+ 'solana:mainnet': 6,
133
+ 'solana:devnet': 6,
134
+ 'fiat:stripe': 2,
135
+ };
136
+ export class ChainRouter {
137
+ adapters;
138
+ chainMeta;
139
+ roundRobinIndex = 0;
140
+ constructor(adapters, customMeta) {
141
+ this.adapters = adapters;
142
+ this.chainMeta = new Map();
143
+ // Load defaults
144
+ for (const [key, meta] of Object.entries(DEFAULT_CHAIN_META)) {
145
+ this.chainMeta.set(key, meta);
146
+ }
147
+ // Override with custom metadata
148
+ if (customMeta) {
149
+ for (const [key, meta] of Object.entries(customMeta)) {
150
+ this.chainMeta.set(key, meta);
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * Score and rank all adapters for a given payment intent.
156
+ * Returns plans sorted by score (lower = better).
157
+ */
158
+ route(intent, strategy) {
159
+ const amountUsd = parseFloat(intent.amount);
160
+ if (isNaN(amountUsd) || amountUsd <= 0) {
161
+ return [];
162
+ }
163
+ const plans = this.adapters.map((adapter, index) => {
164
+ const meta = this.getChainMeta(adapter.caip2Id);
165
+ const atomicAmount = this.toAtomicUnits(amountUsd, adapter.caip2Id);
166
+ return {
167
+ adapter,
168
+ adapterIndex: index,
169
+ chain: adapter.chainName,
170
+ caip2Id: adapter.caip2Id,
171
+ atomicAmount,
172
+ estimatedFeeUsd: meta.avgFeeUsd,
173
+ totalCostUsd: amountUsd + meta.avgFeeUsd,
174
+ estimatedSettlementSeconds: meta.avgSettlementSeconds,
175
+ score: this.calculateScore(meta, strategy, index),
176
+ };
177
+ });
178
+ // Apply max fee filter
179
+ const maxFee = intent.maxFeeUsd;
180
+ const filtered = maxFee !== undefined
181
+ ? plans.filter((p) => p.estimatedFeeUsd <= maxFee)
182
+ : plans;
183
+ // Sort by score (lower is better)
184
+ return filtered.sort((a, b) => a.score - b.score);
185
+ }
186
+ /**
187
+ * Get the single best adapter for a payment intent.
188
+ */
189
+ getBestPlan(intent, strategy) {
190
+ const plans = this.route(intent, strategy);
191
+ return plans.length > 0 ? plans[0] : null;
192
+ }
193
+ /**
194
+ * Get chain metadata for a CAIP-2 ID.
195
+ * Falls back to sensible defaults for unknown chains.
196
+ */
197
+ getChainMeta(caip2Id) {
198
+ return this.chainMeta.get(caip2Id) ?? {
199
+ caip2Id,
200
+ name: 'Unknown',
201
+ avgSettlementSeconds: 30,
202
+ avgFeeUsd: 0.01,
203
+ isFiat: false,
204
+ priorityBoost: 10,
205
+ };
206
+ }
207
+ // ─── Internal ──────────────────────────────────────────────────────
208
+ /**
209
+ * Calculate a composite score for an adapter/chain based on the strategy.
210
+ * Lower score = better.
211
+ */
212
+ calculateScore(meta, strategy, adapterIndex) {
213
+ let score = meta.priorityBoost;
214
+ switch (strategy) {
215
+ case 'cheapest':
216
+ // Weight: 80% fee, 20% speed
217
+ score += meta.avgFeeUsd * 1000 + meta.avgSettlementSeconds * 0.1;
218
+ break;
219
+ case 'fastest':
220
+ // Weight: 80% speed, 20% fee
221
+ score += meta.avgSettlementSeconds * 10 + meta.avgFeeUsd * 100;
222
+ break;
223
+ case 'prefer-crypto':
224
+ // Penalise fiat rails
225
+ score += meta.isFiat ? 1000 : 0;
226
+ score += meta.avgFeeUsd * 500 + meta.avgSettlementSeconds * 0.5;
227
+ break;
228
+ case 'prefer-fiat':
229
+ // Penalise crypto rails
230
+ score += meta.isFiat ? 0 : 1000;
231
+ score += meta.avgFeeUsd * 500 + meta.avgSettlementSeconds * 0.5;
232
+ break;
233
+ case 'round-robin':
234
+ // Cycle through adapters
235
+ score = adapterIndex === this.roundRobinIndex ? 0 : adapterIndex + 1;
236
+ this.roundRobinIndex = (this.roundRobinIndex + 1) % this.adapters.length;
237
+ break;
238
+ }
239
+ return score;
240
+ }
241
+ /**
242
+ * Convert a USD amount to atomic units for a specific chain.
243
+ */
244
+ toAtomicUnits(amountUsd, caip2Id) {
245
+ const decimals = USDC_DECIMALS[caip2Id] ?? 6;
246
+ const atomic = Math.round(amountUsd * Math.pow(10, decimals));
247
+ return atomic.toString();
248
+ }
249
+ }
250
+ //# sourceMappingURL=chain-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain-router.js","sourceRoot":"","sources":["../../../src/wallet/chain-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH;;;;GAIG;AACH,MAAM,kBAAkB,GAA8B;IACpD,sEAAsE;IACtE,cAAc,EAAE;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,MAAM;QACZ,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC,CAAC;KAClB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,gBAAgB;QACtB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IAED,UAAU;IACV,aAAa,EAAE;QACb,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,MAAM;QACZ,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,cAAc;QACpB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IACD,cAAc,EAAE;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,UAAU;QAChB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IACD,UAAU,EAAE;QACV,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,oBAAoB,EAAE,EAAE;QACxB,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC,EAAE,2BAA2B;KAC9C;IACD,WAAW,EAAE;QACX,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,UAAU;QAChB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IAED,UAAU;IACV,gBAAgB,EAAE;QAChB,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE,SAAS;QACf,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,OAAO;QAClB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IACD,iBAAiB,EAAE;QACjB,OAAO,EAAE,iBAAiB;QAC1B,IAAI,EAAE,iBAAiB;QACvB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IAED,SAAS;IACT,gBAAgB,EAAE;QAChB,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE,QAAQ;QACd,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IACD,eAAe,EAAE;QACf,OAAO,EAAE,eAAe;QACxB,IAAI,EAAE,eAAe;QACrB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,KAAK;QACb,aAAa,EAAE,CAAC;KACjB;IAED,OAAO;IACP,aAAa,EAAE;QACb,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,YAAY;QAClB,oBAAoB,EAAE,CAAC;QACvB,SAAS,EAAE,IAAI,EAAE,qBAAqB;QACtC,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,CAAC;KACjB;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,aAAa,GAA2B;IAC5C,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,OAAO,WAAW;IAKZ;IAJF,SAAS,CAAyB;IAClC,eAAe,GAAG,CAAC,CAAC;IAE5B,YACU,QAA0B,EAClC,UAAsC;QAD9B,aAAQ,GAAR,QAAQ,CAAkB;QAGlC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,gBAAgB;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,gCAAgC;QAChC,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAiB,EAAE,QAAyB;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAkB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAEpE,OAAO;gBACL,OAAO;gBACP,YAAY,EAAE,KAAK;gBACnB,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY;gBACZ,eAAe,EAAE,IAAI,CAAC,SAAS;gBAC/B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC,SAAS;gBACxC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB;gBACrD,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;aAClD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,KAAK,SAAS;YACnC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,MAAM,CAAC;YAClD,CAAC,CAAC,KAAK,CAAC;QAEV,kCAAkC;QAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAiB,EAAE,QAAyB;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;YACpC,OAAO;YACP,IAAI,EAAE,SAAS;YACf,oBAAoB,EAAE,EAAE;YACxB,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,sEAAsE;IAEtE;;;OAGG;IACK,cAAc,CACpB,IAAe,EACf,QAAyB,EACzB,YAAoB;QAEpB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QAE/B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU;gBACb,6BAA6B;gBAC7B,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;gBACjE,MAAM;YAER,KAAK,SAAS;gBACZ,6BAA6B;gBAC7B,KAAK,IAAI,IAAI,CAAC,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBAC/D,MAAM;YAER,KAAK,eAAe;gBAClB,sBAAsB;gBACtB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;gBAChE,MAAM;YAER,KAAK,aAAa;gBAChB,wBAAwB;gBACxB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChC,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;gBAChE,MAAM;YAER,KAAK,aAAa;gBAChB,yBAAyB;gBACzB,KAAK,GAAG,YAAY,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;gBACrE,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzE,MAAM;QACV,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,SAAiB,EAAE,OAAe;QACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ // Wallet Abstraction — Barrel exports
2
+ export { UnifiedWallet } from './unified-wallet.js';
3
+ export { BalanceAggregator } from './balance-aggregator.js';
4
+ export { ChainRouter } from './chain-router.js';
5
+ export { IntentResolver } from './intent-resolver.js';
6
+ export { SessionManager } from './session-manager.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}