@eth-optimism/actions-sdk 0.2.0 → 0.4.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 (500) hide show
  1. package/dist/__mocks__/MockAssets.d.ts +17 -2
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -1
  3. package/dist/__mocks__/MockAssets.js +49 -4
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -5
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +23 -9
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +68 -36
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +217 -2
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +744 -6
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/contracts.d.ts +4 -0
  16. package/dist/constants/contracts.d.ts.map +1 -0
  17. package/dist/constants/contracts.js +3 -0
  18. package/dist/constants/contracts.js.map +1 -0
  19. package/dist/constants/providers.d.ts +6 -0
  20. package/dist/constants/providers.d.ts.map +1 -0
  21. package/dist/constants/providers.js +6 -0
  22. package/dist/constants/providers.js.map +1 -0
  23. package/dist/constants/supportedChains.d.ts +2 -2
  24. package/dist/constants/supportedChains.d.ts.map +1 -1
  25. package/dist/constants/supportedChains.js +12 -2
  26. package/dist/constants/supportedChains.js.map +1 -1
  27. package/dist/index.d.ts +4 -4
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  32. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  33. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  34. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  35. package/dist/lend/core/LendProvider.d.ts +12 -14
  36. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  37. package/dist/lend/core/LendProvider.js +16 -31
  38. package/dist/lend/core/LendProvider.js.map +1 -1
  39. package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
  40. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  41. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  42. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  43. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  44. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  45. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  46. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  47. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  48. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  49. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  50. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  51. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  52. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  53. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  54. package/dist/lend/providers/aave/addresses.js +65 -60
  55. package/dist/lend/providers/aave/addresses.js.map +1 -1
  56. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  57. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  58. package/dist/lend/providers/aave/sdk.js +6 -28
  59. package/dist/lend/providers/aave/sdk.js.map +1 -1
  60. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  61. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  62. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  63. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  64. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  65. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  66. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -41
  67. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  68. package/dist/lend/providers/morpho/api.d.ts +3 -3
  69. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  70. package/dist/lend/providers/morpho/api.js +2 -2
  71. package/dist/lend/providers/morpho/api.js.map +1 -1
  72. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  73. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  74. package/dist/lend/providers/morpho/contracts.js +43 -10
  75. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  76. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  77. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  78. package/dist/lend/providers/morpho/sdk.js +67 -54
  79. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  80. package/dist/nodeActionsFactory.d.ts +1 -1
  81. package/dist/reactActionsFactory.d.ts +1 -1
  82. package/dist/services/ChainManager.d.ts +8 -8
  83. package/dist/services/ChainManager.d.ts.map +1 -1
  84. package/dist/services/ChainManager.js.map +1 -1
  85. package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
  86. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  87. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  88. package/dist/services/tokenBalance.d.ts +1 -1
  89. package/dist/services/tokenBalance.d.ts.map +1 -1
  90. package/dist/services/tokenBalance.js +31 -30
  91. package/dist/services/tokenBalance.js.map +1 -1
  92. package/dist/services/tokenBalance.spec.js +20 -24
  93. package/dist/services/tokenBalance.spec.js.map +1 -1
  94. package/dist/swap/__mocks__/MockSwapProvider.d.ts +50 -0
  95. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
  96. package/dist/swap/__mocks__/MockSwapProvider.js +161 -0
  97. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
  98. package/dist/swap/core/SwapProvider.d.ts +145 -0
  99. package/dist/swap/core/SwapProvider.d.ts.map +1 -0
  100. package/dist/swap/core/SwapProvider.js +359 -0
  101. package/dist/swap/core/SwapProvider.js.map +1 -0
  102. package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
  103. package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
  104. package/dist/swap/core/__tests__/SwapProvider.test.js +435 -0
  105. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
  106. package/dist/swap/core/markets.d.ts +47 -0
  107. package/dist/swap/core/markets.d.ts.map +1 -0
  108. package/dist/swap/core/markets.js +65 -0
  109. package/dist/swap/core/markets.js.map +1 -0
  110. package/dist/swap/index.d.ts +9 -0
  111. package/dist/swap/index.d.ts.map +1 -0
  112. package/dist/swap/index.js +9 -0
  113. package/dist/swap/index.js.map +1 -0
  114. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
  115. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
  116. package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
  117. package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
  118. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +73 -0
  119. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
  120. package/dist/swap/namespaces/BaseSwapNamespace.js +181 -0
  121. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
  122. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +34 -0
  123. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
  124. package/dist/swap/namespaces/WalletSwapNamespace.js +84 -0
  125. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
  126. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
  127. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
  128. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +245 -0
  129. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
  130. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
  131. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
  132. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +209 -0
  133. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
  134. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +35 -0
  135. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
  136. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +148 -0
  137. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
  138. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
  139. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
  140. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +258 -0
  141. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
  142. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
  143. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
  144. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
  145. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
  146. package/dist/swap/providers/uniswap/abis.d.ts +227 -0
  147. package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
  148. package/dist/swap/providers/uniswap/abis.js +138 -0
  149. package/dist/swap/providers/uniswap/abis.js.map +1 -0
  150. package/dist/swap/providers/uniswap/addresses.d.ts +26 -0
  151. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
  152. package/dist/swap/providers/uniswap/addresses.js +81 -0
  153. package/dist/swap/providers/uniswap/addresses.js.map +1 -0
  154. package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
  155. package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
  156. package/dist/swap/providers/uniswap/encoding.js +233 -0
  157. package/dist/swap/providers/uniswap/encoding.js.map +1 -0
  158. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  159. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  160. package/dist/swap/providers/uniswap/markets.js +48 -0
  161. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  162. package/dist/swap/providers/uniswap/types.d.ts +21 -0
  163. package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
  164. package/dist/swap/providers/uniswap/types.js +2 -0
  165. package/dist/swap/providers/uniswap/types.js.map +1 -0
  166. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
  167. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  168. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  169. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  170. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  171. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  172. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  173. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  174. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  175. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  176. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  177. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  178. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  179. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  180. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
  181. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  182. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  183. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  184. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  185. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  186. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  187. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  188. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  189. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  190. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  191. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  192. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  193. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  194. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  195. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  196. package/dist/swap/providers/velodrome/abis.js +257 -0
  197. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  198. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  199. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  200. package/dist/swap/providers/velodrome/addresses.js +57 -0
  201. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  202. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  203. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  204. package/dist/swap/providers/velodrome/config.js +29 -0
  205. package/dist/swap/providers/velodrome/config.js.map +1 -0
  206. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  207. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  208. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  209. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  210. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  211. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  212. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  213. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  214. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  215. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  216. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  217. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  218. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  219. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  220. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  221. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  222. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  223. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  224. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  225. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  226. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  227. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  228. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  229. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  230. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  231. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  232. package/dist/swap/providers/velodrome/markets.js +69 -0
  233. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  234. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  235. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  236. package/dist/swap/providers/velodrome/types.js +2 -0
  237. package/dist/swap/providers/velodrome/types.js.map +1 -0
  238. package/dist/types/actions.d.ts +60 -11
  239. package/dist/types/actions.d.ts.map +1 -1
  240. package/dist/types/asset.d.ts +7 -9
  241. package/dist/types/asset.d.ts.map +1 -1
  242. package/dist/types/chain.d.ts +2 -2
  243. package/dist/types/chain.d.ts.map +1 -1
  244. package/dist/types/index.d.ts +2 -0
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/index.js +2 -0
  247. package/dist/types/index.js.map +1 -1
  248. package/dist/types/lend/base.d.ts +9 -19
  249. package/dist/types/lend/base.d.ts.map +1 -1
  250. package/dist/types/lend/base.js.map +1 -1
  251. package/dist/types/lend/contracts.d.ts +2 -1
  252. package/dist/types/lend/contracts.d.ts.map +1 -1
  253. package/dist/types/providers.d.ts +21 -0
  254. package/dist/types/providers.d.ts.map +1 -0
  255. package/dist/types/providers.js +2 -0
  256. package/dist/types/providers.js.map +1 -0
  257. package/dist/types/swap/base.d.ts +338 -0
  258. package/dist/types/swap/base.d.ts.map +1 -0
  259. package/dist/types/swap/base.js +4 -0
  260. package/dist/types/swap/base.js.map +1 -0
  261. package/dist/types/swap/index.d.ts +2 -0
  262. package/dist/types/swap/index.d.ts.map +1 -0
  263. package/dist/types/swap/index.js +2 -0
  264. package/dist/types/swap/index.js.map +1 -0
  265. package/dist/types/transaction.d.ts +14 -0
  266. package/dist/types/transaction.d.ts.map +1 -0
  267. package/dist/types/transaction.js +2 -0
  268. package/dist/types/transaction.js.map +1 -0
  269. package/dist/utils/approve.d.ts +82 -0
  270. package/dist/utils/approve.d.ts.map +1 -0
  271. package/dist/utils/approve.js +134 -0
  272. package/dist/utils/approve.js.map +1 -0
  273. package/dist/utils/approve.test.d.ts +2 -0
  274. package/dist/utils/approve.test.d.ts.map +1 -0
  275. package/dist/utils/approve.test.js +203 -0
  276. package/dist/utils/approve.test.js.map +1 -0
  277. package/dist/utils/assets.d.ts +10 -5
  278. package/dist/utils/assets.d.ts.map +1 -1
  279. package/dist/utils/assets.js +14 -11
  280. package/dist/utils/assets.js.map +1 -1
  281. package/dist/utils/assets.test.js +13 -1
  282. package/dist/utils/assets.test.js.map +1 -1
  283. package/dist/utils/validateAddresses.d.ts +32 -0
  284. package/dist/utils/validateAddresses.d.ts.map +1 -0
  285. package/dist/utils/validateAddresses.js +103 -0
  286. package/dist/utils/validateAddresses.js.map +1 -0
  287. package/dist/utils/validateAddresses.test.d.ts +2 -0
  288. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  289. package/dist/utils/validateAddresses.test.js +314 -0
  290. package/dist/utils/validateAddresses.test.js.map +1 -0
  291. package/dist/utils/validation.d.ts +12 -0
  292. package/dist/utils/validation.d.ts.map +1 -0
  293. package/dist/utils/validation.js +44 -0
  294. package/dist/utils/validation.js.map +1 -0
  295. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  296. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  297. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  298. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  299. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  300. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  301. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -10
  302. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  303. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
  304. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  305. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -7
  306. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  307. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +5 -6
  308. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  309. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
  310. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  311. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
  312. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  313. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +12 -12
  314. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  315. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -4
  316. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  317. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  318. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  319. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  320. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  321. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  322. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  323. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +5 -7
  324. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  325. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
  326. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  327. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  328. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +4 -6
  329. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  330. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
  331. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  332. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  333. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  334. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +8 -9
  335. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  336. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  337. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  338. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -6
  339. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  340. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
  341. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  342. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +4 -6
  343. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  344. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
  345. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  346. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -6
  347. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  348. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  349. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  350. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -6
  351. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  352. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +7 -2
  353. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  354. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
  355. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  356. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +5 -6
  357. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  358. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +6 -2
  359. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  360. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
  361. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  362. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -8
  363. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  364. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -4
  365. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  366. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  367. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  368. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  369. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  370. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  371. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  372. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -6
  373. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  374. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
  375. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  376. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  377. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  378. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  379. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -6
  380. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  381. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  382. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  383. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -6
  384. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  385. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  386. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  387. package/package.json +4 -3
  388. package/src/__mocks__/MockAssets.ts +54 -4
  389. package/src/__tests__/actions.test.ts +1 -5
  390. package/src/actions.ts +106 -71
  391. package/src/constants/assets.ts +792 -5
  392. package/src/constants/contracts.ts +5 -0
  393. package/src/constants/providers.ts +5 -0
  394. package/src/constants/supportedChains.ts +22 -2
  395. package/src/index.ts +76 -6
  396. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  397. package/src/lend/core/LendProvider.ts +28 -41
  398. package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
  399. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  400. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  401. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  402. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  403. package/src/lend/providers/aave/addresses.ts +82 -64
  404. package/src/lend/providers/aave/sdk.ts +11 -36
  405. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  406. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  407. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -42
  408. package/src/lend/providers/morpho/api.ts +7 -4
  409. package/src/lend/providers/morpho/contracts.ts +62 -13
  410. package/src/lend/providers/morpho/sdk.ts +85 -54
  411. package/src/services/ChainManager.ts +12 -21
  412. package/src/services/__mocks__/MockChainManager.ts +4 -7
  413. package/src/services/tokenBalance.spec.ts +20 -24
  414. package/src/services/tokenBalance.ts +39 -33
  415. package/src/swap/__mocks__/MockSwapProvider.ts +251 -0
  416. package/src/swap/core/SwapProvider.ts +577 -0
  417. package/src/swap/core/__tests__/SwapProvider.test.ts +620 -0
  418. package/src/swap/core/markets.ts +104 -0
  419. package/src/swap/index.ts +19 -0
  420. package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
  421. package/src/swap/namespaces/BaseSwapNamespace.ts +258 -0
  422. package/src/swap/namespaces/WalletSwapNamespace.ts +121 -0
  423. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +365 -0
  424. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +257 -0
  425. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +217 -0
  426. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
  427. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +369 -0
  428. package/src/swap/providers/uniswap/abis.ts +144 -0
  429. package/src/swap/providers/uniswap/addresses.ts +110 -0
  430. package/src/swap/providers/uniswap/encoding.ts +406 -0
  431. package/src/swap/providers/uniswap/markets.ts +84 -0
  432. package/src/swap/providers/uniswap/types.ts +25 -0
  433. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
  434. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  435. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  436. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
  437. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  438. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  439. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  440. package/src/swap/providers/velodrome/abis.ts +264 -0
  441. package/src/swap/providers/velodrome/addresses.ts +107 -0
  442. package/src/swap/providers/velodrome/config.ts +46 -0
  443. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  444. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  445. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  446. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  447. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  448. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  449. package/src/swap/providers/velodrome/markets.ts +100 -0
  450. package/src/swap/providers/velodrome/types.ts +30 -0
  451. package/src/types/actions.ts +68 -12
  452. package/src/types/asset.ts +12 -9
  453. package/src/types/chain.ts +2 -2
  454. package/src/types/index.ts +2 -0
  455. package/src/types/lend/base.ts +10 -20
  456. package/src/types/lend/contracts.ts +5 -1
  457. package/src/types/providers.ts +22 -0
  458. package/src/types/swap/base.ts +372 -0
  459. package/src/types/swap/index.ts +1 -0
  460. package/src/types/transaction.ts +14 -0
  461. package/src/utils/approve.test.ts +258 -0
  462. package/src/utils/approve.ts +197 -0
  463. package/src/utils/assets.test.ts +16 -1
  464. package/src/utils/assets.ts +27 -10
  465. package/src/utils/validateAddresses.test.ts +439 -0
  466. package/src/utils/validateAddresses.ts +153 -0
  467. package/src/utils/validation.ts +76 -0
  468. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  469. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  470. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +6 -10
  471. package/src/wallet/core/providers/hosted/types/index.ts +9 -7
  472. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +10 -10
  473. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
  474. package/src/wallet/core/wallets/abstract/Wallet.ts +23 -14
  475. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  476. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  477. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +11 -14
  478. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  479. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +11 -7
  480. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +16 -8
  481. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  482. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +6 -7
  483. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +8 -11
  484. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +7 -11
  485. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +11 -7
  486. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
  487. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +10 -7
  488. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
  489. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +10 -9
  490. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +38 -13
  491. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  492. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +13 -11
  493. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  494. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +11 -11
  495. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +11 -11
  496. package/dist/supported/tokens.d.ts +0 -25
  497. package/dist/supported/tokens.d.ts.map +0 -1
  498. package/dist/supported/tokens.js +0 -37
  499. package/dist/supported/tokens.js.map +0 -1
  500. package/src/supported/tokens.ts +0 -52
@@ -0,0 +1,365 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
4
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
5
+ import type { ChainManager } from '@/services/ChainManager.js'
6
+ import {
7
+ createMockSwapProvider,
8
+ MockSwapProvider,
9
+ } from '@/swap/__mocks__/MockSwapProvider.js'
10
+ import { ActionsSwapNamespace } from '@/swap/namespaces/ActionsSwapNamespace.js'
11
+
12
+ describe('BaseSwapNamespace', () => {
13
+ const USDC = {
14
+ type: 'erc20' as const,
15
+ address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' as const },
16
+ metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
17
+ }
18
+ const ETH = {
19
+ type: 'native' as const,
20
+ address: { 84532: '0x0000000000000000000000000000000000000000' as const },
21
+ metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
22
+ }
23
+
24
+ describe('getQuote', () => {
25
+ it('delegates to provider getQuote', async () => {
26
+ const provider = createMockSwapProvider()
27
+ const namespace = new ActionsSwapNamespace({ uniswap: provider })
28
+
29
+ const result = await namespace.getQuote({
30
+ assetIn: USDC,
31
+ assetOut: ETH,
32
+ amountIn: 100,
33
+ chainId: 84532 as SupportedChainId,
34
+ })
35
+
36
+ expect(provider.mockGetQuote).toHaveBeenCalledTimes(1)
37
+ expect(result.price).toBe(1.5)
38
+ expect(result.execution).toBeDefined()
39
+ expect(result.execution.swapCalldata).toMatch(/^0x/)
40
+ expect(result.provider).toBe('uniswap')
41
+ })
42
+
43
+ it('throws if no provider configured', async () => {
44
+ const namespace = new ActionsSwapNamespace({})
45
+
46
+ await expect(
47
+ namespace.getQuote({
48
+ assetIn: USDC,
49
+ assetOut: ETH,
50
+ amountIn: 100,
51
+ chainId: 84532 as SupportedChainId,
52
+ }),
53
+ ).rejects.toThrow('No swap provider configured')
54
+ })
55
+ })
56
+
57
+ describe('getQuote with price routing', () => {
58
+ it('returns the best price across providers when routing is price', async () => {
59
+ const cheapProvider = new MockSwapProvider(
60
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
61
+ { defaultPrice: 1.2, provider: 'uniswap' },
62
+ )
63
+ const expensiveProvider = new MockSwapProvider(
64
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
65
+ { defaultPrice: 1.8, provider: 'velodrome' },
66
+ )
67
+
68
+ const namespace = new ActionsSwapNamespace(
69
+ { uniswap: cheapProvider, velodrome: expensiveProvider },
70
+ { routing: 'price' },
71
+ )
72
+
73
+ const result = await namespace.getQuote({
74
+ assetIn: USDC,
75
+ assetOut: ETH,
76
+ amountIn: 100,
77
+ chainId: 84532 as SupportedChainId,
78
+ })
79
+
80
+ // Should pick velodrome because 1.8 > 1.2 (higher amountOut)
81
+ expect(result.provider).toBe('velodrome')
82
+ })
83
+
84
+ it('skips providers that fail to quote', async () => {
85
+ const workingProvider = createMockSwapProvider(
86
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
87
+ { provider: 'velodrome' },
88
+ )
89
+ const failingProvider = createMockSwapProvider(
90
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
91
+ { provider: 'uniswap' },
92
+ )
93
+ failingProvider.mockGetQuote.mockRejectedValue(new Error('RPC failure'))
94
+
95
+ const namespace = new ActionsSwapNamespace(
96
+ { uniswap: failingProvider, velodrome: workingProvider },
97
+ { routing: 'price' },
98
+ )
99
+
100
+ const result = await namespace.getQuote({
101
+ assetIn: USDC,
102
+ assetOut: ETH,
103
+ amountIn: 100,
104
+ chainId: 84532 as SupportedChainId,
105
+ })
106
+
107
+ expect(result.provider).toBe('velodrome')
108
+ })
109
+
110
+ it('throws when all providers fail to quote', async () => {
111
+ const failingProvider = createMockSwapProvider({
112
+ marketAllowlist: [{ assets: [USDC, ETH] }],
113
+ })
114
+ failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
115
+
116
+ const namespace = new ActionsSwapNamespace(
117
+ { uniswap: failingProvider },
118
+ { routing: 'price' },
119
+ )
120
+
121
+ await expect(
122
+ namespace.getQuote({
123
+ assetIn: USDC,
124
+ assetOut: ETH,
125
+ amountIn: 100,
126
+ chainId: 84532 as SupportedChainId,
127
+ }),
128
+ ).rejects.toThrow('All providers failed')
129
+ })
130
+
131
+ it('uses explicit provider when specified, ignoring routing', async () => {
132
+ const cheapProvider = new MockSwapProvider(
133
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
134
+ { defaultPrice: 1.2, provider: 'uniswap' },
135
+ )
136
+ const expensiveProvider = new MockSwapProvider(
137
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
138
+ { defaultPrice: 1.8, provider: 'velodrome' },
139
+ )
140
+
141
+ const namespace = new ActionsSwapNamespace(
142
+ { uniswap: cheapProvider, velodrome: expensiveProvider },
143
+ { routing: 'price' },
144
+ )
145
+
146
+ const result = await namespace.getQuote({
147
+ assetIn: USDC,
148
+ assetOut: ETH,
149
+ amountIn: 100,
150
+ chainId: 84532 as SupportedChainId,
151
+ provider: 'uniswap',
152
+ })
153
+
154
+ // Should use uniswap despite worse price because it was explicitly requested
155
+ expect(result.provider).toBe('uniswap')
156
+ })
157
+ })
158
+
159
+ describe('getQuotes', () => {
160
+ it('returns quotes from all eligible providers sorted by best price', async () => {
161
+ const cheapProvider = new MockSwapProvider(
162
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
163
+ { defaultPrice: 1.2, provider: 'uniswap' },
164
+ )
165
+ const expensiveProvider = new MockSwapProvider(
166
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
167
+ { defaultPrice: 1.8, provider: 'velodrome' },
168
+ )
169
+
170
+ const namespace = new ActionsSwapNamespace({
171
+ uniswap: cheapProvider,
172
+ velodrome: expensiveProvider,
173
+ })
174
+
175
+ const quotes = await namespace.getQuotes({
176
+ assetIn: USDC,
177
+ assetOut: ETH,
178
+ amountIn: 100,
179
+ chainId: 84532 as SupportedChainId,
180
+ })
181
+
182
+ expect(quotes).toHaveLength(2)
183
+ expect(quotes[0].provider).toBe('velodrome')
184
+ expect(quotes[1].provider).toBe('uniswap')
185
+ })
186
+
187
+ it('skips failed providers and returns successful ones', async () => {
188
+ const workingProvider = createMockSwapProvider(
189
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
190
+ { provider: 'velodrome' },
191
+ )
192
+ const failingProvider = createMockSwapProvider(
193
+ { marketAllowlist: [{ assets: [USDC, ETH] }] },
194
+ { provider: 'uniswap' },
195
+ )
196
+ failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
197
+
198
+ const namespace = new ActionsSwapNamespace({
199
+ uniswap: failingProvider,
200
+ velodrome: workingProvider,
201
+ })
202
+
203
+ const quotes = await namespace.getQuotes({
204
+ assetIn: USDC,
205
+ assetOut: ETH,
206
+ amountIn: 100,
207
+ chainId: 84532 as SupportedChainId,
208
+ })
209
+
210
+ expect(quotes).toHaveLength(1)
211
+ expect(quotes[0].provider).toBe('velodrome')
212
+ })
213
+
214
+ it('returns single-element array when explicit provider specified', async () => {
215
+ const provider1 = createMockSwapProvider(undefined, {
216
+ provider: 'uniswap',
217
+ })
218
+ const provider2 = new MockSwapProvider(undefined, {
219
+ supportedChains: [84532 as SupportedChainId],
220
+ provider: 'velodrome',
221
+ })
222
+
223
+ const namespace = new ActionsSwapNamespace({
224
+ uniswap: provider1,
225
+ velodrome: provider2,
226
+ })
227
+
228
+ const quotes = await namespace.getQuotes({
229
+ assetIn: USDC,
230
+ assetOut: ETH,
231
+ amountIn: 100,
232
+ chainId: 84532 as SupportedChainId,
233
+ provider: 'uniswap',
234
+ })
235
+
236
+ expect(quotes).toHaveLength(1)
237
+ expect(quotes[0].provider).toBe('uniswap')
238
+ })
239
+ })
240
+
241
+ describe('getMarket', () => {
242
+ it('delegates to provider getMarket', async () => {
243
+ const provider = createMockSwapProvider()
244
+ const namespace = new ActionsSwapNamespace({ uniswap: provider })
245
+
246
+ const result = await namespace.getMarket({
247
+ poolId: '0xpool123',
248
+ chainId: 84532 as SupportedChainId,
249
+ })
250
+
251
+ expect(provider.mockGetMarket).toHaveBeenCalledTimes(1)
252
+ expect(result.marketId.poolId).toBe('0xpool123')
253
+ })
254
+
255
+ it('queries specific provider when specified', async () => {
256
+ const provider1 = createMockSwapProvider(undefined, {
257
+ provider: 'uniswap',
258
+ })
259
+ const provider2 = new MockSwapProvider(undefined, {
260
+ supportedChains: [84532 as SupportedChainId],
261
+ provider: 'velodrome',
262
+ })
263
+
264
+ const namespace = new ActionsSwapNamespace({
265
+ uniswap: provider1,
266
+ velodrome: provider2,
267
+ })
268
+
269
+ await namespace.getMarket(
270
+ { poolId: '0xpool123', chainId: 84532 as SupportedChainId },
271
+ 'velodrome',
272
+ )
273
+
274
+ expect(provider2.mockGetMarket).toHaveBeenCalledTimes(1)
275
+ expect(provider1.mockGetMarket).not.toHaveBeenCalled()
276
+ })
277
+
278
+ it('throws for unknown provider name', async () => {
279
+ const namespace = new ActionsSwapNamespace({
280
+ uniswap: createMockSwapProvider(),
281
+ })
282
+
283
+ await expect(
284
+ namespace.getMarket(
285
+ { poolId: '0x1', chainId: 84532 as SupportedChainId },
286
+ 'velodrome',
287
+ ),
288
+ ).rejects.toThrow('not configured')
289
+ })
290
+ })
291
+
292
+ describe('getMarkets', () => {
293
+ it('aggregates markets from all providers', async () => {
294
+ const provider1 = createMockSwapProvider()
295
+ const provider2 = new MockSwapProvider(undefined, {
296
+ supportedChains: [84532 as SupportedChainId],
297
+ })
298
+
299
+ const namespace = new ActionsSwapNamespace({
300
+ uniswap: provider1,
301
+ velodrome: provider2,
302
+ })
303
+
304
+ const result = await namespace.getMarkets({})
305
+
306
+ expect(result.length).toBeGreaterThanOrEqual(1)
307
+ expect(provider1.mockGetMarkets).toHaveBeenCalledTimes(1)
308
+ expect(provider2.mockGetMarkets).toHaveBeenCalledTimes(1)
309
+ })
310
+
311
+ it('returns empty array when no providers', async () => {
312
+ const namespace = new ActionsSwapNamespace({})
313
+
314
+ const result = await namespace.getMarkets({})
315
+
316
+ expect(result).toEqual([])
317
+ })
318
+ })
319
+
320
+ describe('supportedChainIds', () => {
321
+ it('returns union of chains from all providers', () => {
322
+ const provider1 = createMockSwapProvider(undefined, {
323
+ supportedChains: [84532 as SupportedChainId],
324
+ })
325
+ const provider2 = new MockSwapProvider(
326
+ undefined,
327
+ { supportedChains: [1 as SupportedChainId, 10 as SupportedChainId] },
328
+ new MockChainManager({
329
+ supportedChains: [1 as SupportedChainId, 10 as SupportedChainId],
330
+ }) as unknown as ChainManager,
331
+ )
332
+
333
+ const namespace = new ActionsSwapNamespace({
334
+ uniswap: provider1,
335
+ velodrome: provider2,
336
+ })
337
+
338
+ const result = namespace.supportedChainIds()
339
+
340
+ expect(result).toContain(84532)
341
+ expect(result).toContain(1)
342
+ expect(result).toContain(10)
343
+ expect(result.length).toBe(3)
344
+ })
345
+
346
+ it('deduplicates chain IDs', () => {
347
+ const provider1 = createMockSwapProvider(undefined, {
348
+ supportedChains: [84532 as SupportedChainId, 1 as SupportedChainId],
349
+ })
350
+ const provider2 = new MockSwapProvider(undefined, {
351
+ supportedChains: [1 as SupportedChainId],
352
+ })
353
+
354
+ const namespace = new ActionsSwapNamespace({
355
+ uniswap: provider1,
356
+ velodrome: provider2,
357
+ })
358
+
359
+ const result = namespace.supportedChainIds()
360
+
361
+ // Should have unique values only
362
+ expect(new Set(result).size).toBe(result.length)
363
+ })
364
+ })
365
+ })
@@ -0,0 +1,257 @@
1
+ import type { Address } from 'viem'
2
+ import { describe, expect, it, vi } from 'vitest'
3
+
4
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import { createMockSwapProvider } from '@/swap/__mocks__/MockSwapProvider.js'
6
+ import { WalletSwapNamespace } from '@/swap/namespaces/WalletSwapNamespace.js'
7
+ import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
8
+
9
+ describe('WalletSwapNamespace', () => {
10
+ const USDC = {
11
+ type: 'erc20' as const,
12
+ address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' as const },
13
+ metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
14
+ }
15
+ const ETH = {
16
+ type: 'native' as const,
17
+ address: { 84532: '0x0000000000000000000000000000000000000000' as const },
18
+ metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
19
+ }
20
+
21
+ const mockWalletAddress =
22
+ '0x1234567890123456789012345678901234567890' as Address
23
+
24
+ function createMockWallet(): Wallet {
25
+ return {
26
+ address: mockWalletAddress,
27
+ send: vi.fn().mockResolvedValue({ transactionHash: '0xtx1' }),
28
+ sendBatch: vi.fn().mockResolvedValue({ transactionHash: '0xtx2' }),
29
+ } as unknown as Wallet
30
+ }
31
+
32
+ describe('execute', () => {
33
+ it('executes swap with single transaction', async () => {
34
+ const provider = createMockSwapProvider()
35
+ const wallet = createMockWallet()
36
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
37
+
38
+ const result = await namespace.execute({
39
+ amountIn: 100,
40
+ assetIn: USDC,
41
+ assetOut: ETH,
42
+ chainId: 84532 as SupportedChainId,
43
+ })
44
+
45
+ expect(provider.mockExecute).toHaveBeenCalledTimes(1)
46
+ expect(wallet.send).toHaveBeenCalledTimes(1)
47
+ expect(wallet.sendBatch).not.toHaveBeenCalled()
48
+ expect(result.price).toBe(1.5)
49
+ expect(result.assetIn).toBe(USDC)
50
+ expect(result.assetOut).toBe(ETH)
51
+ })
52
+
53
+ it('batches transactions when approvals needed', async () => {
54
+ const provider = createMockSwapProvider()
55
+ const wallet = createMockWallet()
56
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
57
+
58
+ // Override mock to return transaction with approvals
59
+ provider.mockExecute.mockResolvedValueOnce({
60
+ amountIn: 100,
61
+ amountOut: 1.5,
62
+ amountInRaw: 100000000n,
63
+ amountOutRaw: 1500000000000000000n,
64
+ assetIn: USDC,
65
+ assetOut: ETH,
66
+ price: 1.5,
67
+ priceImpact: 0.001,
68
+ transactionData: {
69
+ tokenApproval: {
70
+ to: '0xpermit2' as Address,
71
+ data: '0xapprove' as `0x${string}`,
72
+ value: 0n,
73
+ },
74
+ permit2Approval: {
75
+ to: '0xpermit2' as Address,
76
+ data: '0xpermit' as `0x${string}`,
77
+ value: 0n,
78
+ },
79
+ swap: {
80
+ to: '0xrouter' as Address,
81
+ data: '0xswap' as `0x${string}`,
82
+ value: 0n,
83
+ },
84
+ },
85
+ })
86
+
87
+ await namespace.execute({
88
+ amountIn: 100,
89
+ assetIn: USDC,
90
+ assetOut: ETH,
91
+ chainId: 84532 as SupportedChainId,
92
+ })
93
+
94
+ expect(wallet.sendBatch).toHaveBeenCalledTimes(1)
95
+ expect(wallet.send).not.toHaveBeenCalled()
96
+
97
+ // Verify all 3 transactions were batched
98
+ const batchCall = vi.mocked(wallet.sendBatch).mock.calls[0]
99
+ expect(batchCall[0]).toHaveLength(3)
100
+ })
101
+
102
+ it('passes wallet address to provider', async () => {
103
+ const provider = createMockSwapProvider()
104
+ const wallet = createMockWallet()
105
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
106
+
107
+ await namespace.execute({
108
+ amountIn: 100,
109
+ assetIn: USDC,
110
+ assetOut: ETH,
111
+ chainId: 84532 as SupportedChainId,
112
+ })
113
+
114
+ expect(provider.mockExecute).toHaveBeenCalledWith(
115
+ expect.objectContaining({
116
+ walletAddress: mockWalletAddress,
117
+ }),
118
+ )
119
+ })
120
+
121
+ it('throws when no provider configured', async () => {
122
+ const wallet = createMockWallet()
123
+ const namespace = new WalletSwapNamespace({}, wallet)
124
+
125
+ await expect(
126
+ namespace.execute({
127
+ amountIn: 100,
128
+ assetIn: USDC,
129
+ assetOut: ETH,
130
+ chainId: 84532 as SupportedChainId,
131
+ }),
132
+ ).rejects.toThrow('No swap provider configured')
133
+ })
134
+
135
+ it('executes swap from a SwapQuote (skips re-quoting)', async () => {
136
+ const provider = createMockSwapProvider()
137
+ const wallet = createMockWallet()
138
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
139
+
140
+ // Get a quote first
141
+ const quote = await namespace.getQuote({
142
+ assetIn: USDC,
143
+ assetOut: ETH,
144
+ amountIn: 100,
145
+ chainId: 84532 as SupportedChainId,
146
+ })
147
+
148
+ // Execute with the quote
149
+ const result = await namespace.execute(quote)
150
+
151
+ // Should use quote path: _buildApprovals called, not _execute
152
+ expect(provider.mockBuildApprovals).toHaveBeenCalledTimes(1)
153
+ expect(provider.mockExecute).not.toHaveBeenCalled()
154
+ expect(result.price).toBe(1.5)
155
+ expect(wallet.send).toHaveBeenCalledTimes(1)
156
+ })
157
+ })
158
+
159
+ describe('getQuote recipient injection', () => {
160
+ it('injects wallet address as recipient', async () => {
161
+ const provider = createMockSwapProvider()
162
+ const wallet = createMockWallet()
163
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
164
+
165
+ const quote = await namespace.getQuote({
166
+ assetIn: USDC,
167
+ assetOut: ETH,
168
+ amountIn: 100,
169
+ chainId: 84532 as SupportedChainId,
170
+ })
171
+
172
+ // Quote should have wallet address as the encoded recipient
173
+ expect(quote.quotedRecipient).toBe(mockWalletAddress)
174
+ })
175
+
176
+ it('preserves explicit recipient over wallet address', async () => {
177
+ const provider = createMockSwapProvider()
178
+ const wallet = createMockWallet()
179
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
180
+ const customRecipient =
181
+ '0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' as Address
182
+
183
+ const quote = await namespace.getQuote({
184
+ assetIn: USDC,
185
+ assetOut: ETH,
186
+ amountIn: 100,
187
+ chainId: 84532 as SupportedChainId,
188
+ recipient: customRecipient,
189
+ })
190
+
191
+ expect(quote.quotedRecipient).toBe(customRecipient)
192
+ })
193
+ })
194
+
195
+ describe('execute with recipient mismatch', () => {
196
+ it('re-encodes when quote recipient differs from wallet', async () => {
197
+ const provider = createMockSwapProvider()
198
+ const wallet = createMockWallet()
199
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
200
+
201
+ // Get quote without wallet (simulates ActionsSwapNamespace quote)
202
+ const quote = await provider.getQuote({
203
+ assetIn: USDC,
204
+ assetOut: ETH,
205
+ amountIn: 100,
206
+ chainId: 84532 as SupportedChainId,
207
+ // No recipient — uses placeholder
208
+ })
209
+
210
+ // quotedRecipient should be the placeholder, not the wallet
211
+ expect(quote.quotedRecipient).not.toBe(mockWalletAddress)
212
+
213
+ // Execute through wallet namespace — should re-quote with correct recipient
214
+ const result = await namespace.execute(quote)
215
+ expect(result.price).toBeDefined()
216
+
217
+ // Provider's getQuote should have been called twice:
218
+ // 1) original quote, 2) re-quote with wallet address
219
+ expect(provider.mockGetQuote).toHaveBeenCalledTimes(2)
220
+ })
221
+
222
+ it('skips re-encode when quote already has correct recipient', async () => {
223
+ const provider = createMockSwapProvider()
224
+ const wallet = createMockWallet()
225
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
226
+
227
+ // Get quote through wallet namespace (has correct recipient)
228
+ const quote = await namespace.getQuote({
229
+ assetIn: USDC,
230
+ assetOut: ETH,
231
+ amountIn: 100,
232
+ chainId: 84532 as SupportedChainId,
233
+ })
234
+
235
+ expect(quote.quotedRecipient).toBe(mockWalletAddress)
236
+
237
+ // Execute — should NOT re-quote
238
+ const result = await namespace.execute(quote)
239
+ expect(result.price).toBeDefined()
240
+
241
+ // getQuote called only once (the original)
242
+ expect(provider.mockGetQuote).toHaveBeenCalledTimes(1)
243
+ })
244
+ })
245
+
246
+ describe('inherits read-only methods', () => {
247
+ it('has getMarkets method from BaseSwapNamespace', async () => {
248
+ const provider = createMockSwapProvider()
249
+ const wallet = createMockWallet()
250
+ const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
251
+
252
+ const result = await namespace.getMarkets({})
253
+
254
+ expect(result.length).toBeGreaterThanOrEqual(1)
255
+ })
256
+ })
257
+ })