@eth-optimism/actions-sdk 0.3.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 (436) 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 -6
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -1
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +8 -13
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +35 -27
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +215 -4
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +734 -11
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/providers.d.ts +6 -0
  16. package/dist/constants/providers.d.ts.map +1 -0
  17. package/dist/constants/providers.js +6 -0
  18. package/dist/constants/providers.js.map +1 -0
  19. package/dist/constants/supportedChains.d.ts +2 -2
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +12 -2
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/index.d.ts +4 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  28. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  29. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  30. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  31. package/dist/lend/core/LendProvider.d.ts +12 -8
  32. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  33. package/dist/lend/core/LendProvider.js +15 -21
  34. package/dist/lend/core/LendProvider.js.map +1 -1
  35. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  36. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  37. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  38. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  39. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  40. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  41. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  42. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  43. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  44. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  45. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  46. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  47. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  48. package/dist/lend/providers/aave/addresses.js +65 -60
  49. package/dist/lend/providers/aave/addresses.js.map +1 -1
  50. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  51. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  52. package/dist/lend/providers/aave/sdk.js +6 -28
  53. package/dist/lend/providers/aave/sdk.js.map +1 -1
  54. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  55. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  56. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  57. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  58. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  59. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  60. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
  61. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  62. package/dist/lend/providers/morpho/api.d.ts +3 -7
  63. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  64. package/dist/lend/providers/morpho/api.js +2 -2
  65. package/dist/lend/providers/morpho/api.js.map +1 -1
  66. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  67. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  68. package/dist/lend/providers/morpho/contracts.js +43 -10
  69. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  70. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  71. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  72. package/dist/lend/providers/morpho/sdk.js +67 -63
  73. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  74. package/dist/nodeActionsFactory.d.ts +1 -1
  75. package/dist/reactActionsFactory.d.ts +1 -1
  76. package/dist/services/ChainManager.d.ts +8 -8
  77. package/dist/services/ChainManager.d.ts.map +1 -1
  78. package/dist/services/ChainManager.js.map +1 -1
  79. package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
  80. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  81. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  82. package/dist/services/tokenBalance.d.ts +1 -1
  83. package/dist/services/tokenBalance.d.ts.map +1 -1
  84. package/dist/services/tokenBalance.js +31 -30
  85. package/dist/services/tokenBalance.js.map +1 -1
  86. package/dist/services/tokenBalance.spec.js +20 -24
  87. package/dist/services/tokenBalance.spec.js.map +1 -1
  88. package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
  89. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
  90. package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
  91. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
  92. package/dist/swap/core/SwapProvider.d.ts +105 -16
  93. package/dist/swap/core/SwapProvider.d.ts.map +1 -1
  94. package/dist/swap/core/SwapProvider.js +218 -36
  95. package/dist/swap/core/SwapProvider.js.map +1 -1
  96. package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
  97. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
  98. package/dist/swap/core/markets.d.ts +47 -0
  99. package/dist/swap/core/markets.d.ts.map +1 -0
  100. package/dist/swap/core/markets.js +65 -0
  101. package/dist/swap/core/markets.js.map +1 -0
  102. package/dist/swap/index.d.ts +2 -0
  103. package/dist/swap/index.d.ts.map +1 -1
  104. package/dist/swap/index.js +1 -0
  105. package/dist/swap/index.js.map +1 -1
  106. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
  107. package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
  108. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +48 -8
  109. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
  110. package/dist/swap/namespaces/BaseSwapNamespace.js +139 -16
  111. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
  112. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +19 -7
  113. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  114. package/dist/swap/namespaces/WalletSwapNamespace.js +39 -15
  115. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  116. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
  117. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
  118. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
  119. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
  120. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +9 -42
  121. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
  122. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
  123. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
  124. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
  125. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
  126. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
  127. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
  128. package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
  129. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
  130. package/dist/swap/providers/uniswap/addresses.js +1 -1
  131. package/dist/swap/providers/uniswap/addresses.js.map +1 -1
  132. package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
  133. package/dist/swap/providers/uniswap/encoding.js +17 -17
  134. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  135. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  136. package/dist/swap/providers/uniswap/markets.js +48 -0
  137. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  138. package/dist/swap/providers/uniswap/types.d.ts +4 -3
  139. package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
  140. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
  141. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  142. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  143. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  144. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  145. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  146. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  147. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  148. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  149. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  150. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  151. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  152. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  153. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  154. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
  155. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  156. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  157. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  158. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  159. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  160. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  161. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  162. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  163. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  164. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  165. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  166. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  167. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  168. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  169. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  170. package/dist/swap/providers/velodrome/abis.js +257 -0
  171. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  172. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  173. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  174. package/dist/swap/providers/velodrome/addresses.js +57 -0
  175. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  176. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  177. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  178. package/dist/swap/providers/velodrome/config.js +29 -0
  179. package/dist/swap/providers/velodrome/config.js.map +1 -0
  180. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  181. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  182. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  183. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  184. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  185. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  186. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  187. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  188. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  189. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  190. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  191. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  192. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  193. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  194. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  195. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  196. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  197. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  198. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  199. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  200. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  201. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  202. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  203. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  204. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  205. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  206. package/dist/swap/providers/velodrome/markets.js +69 -0
  207. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  208. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  209. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  210. package/dist/swap/providers/velodrome/types.js +2 -0
  211. package/dist/swap/providers/velodrome/types.js.map +1 -0
  212. package/dist/types/actions.d.ts +44 -9
  213. package/dist/types/actions.d.ts.map +1 -1
  214. package/dist/types/asset.d.ts +7 -9
  215. package/dist/types/asset.d.ts.map +1 -1
  216. package/dist/types/chain.d.ts +2 -2
  217. package/dist/types/chain.d.ts.map +1 -1
  218. package/dist/types/lend/base.d.ts +6 -6
  219. package/dist/types/lend/base.d.ts.map +1 -1
  220. package/dist/types/lend/base.js.map +1 -1
  221. package/dist/types/lend/contracts.d.ts +2 -1
  222. package/dist/types/lend/contracts.d.ts.map +1 -1
  223. package/dist/types/providers.d.ts +21 -0
  224. package/dist/types/providers.d.ts.map +1 -0
  225. package/dist/types/providers.js +2 -0
  226. package/dist/types/providers.js.map +1 -0
  227. package/dist/types/swap/base.d.ts +133 -33
  228. package/dist/types/swap/base.d.ts.map +1 -1
  229. package/dist/utils/approve.d.ts +82 -0
  230. package/dist/utils/approve.d.ts.map +1 -0
  231. package/dist/utils/{permit2.js → approve.js} +48 -14
  232. package/dist/utils/approve.js.map +1 -0
  233. package/dist/utils/approve.test.d.ts +2 -0
  234. package/dist/utils/approve.test.d.ts.map +1 -0
  235. package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
  236. package/dist/utils/approve.test.js.map +1 -0
  237. package/dist/utils/assets.d.ts +6 -0
  238. package/dist/utils/assets.d.ts.map +1 -1
  239. package/dist/utils/assets.js +10 -0
  240. package/dist/utils/assets.js.map +1 -1
  241. package/dist/utils/validateAddresses.d.ts +32 -0
  242. package/dist/utils/validateAddresses.d.ts.map +1 -0
  243. package/dist/utils/validateAddresses.js +103 -0
  244. package/dist/utils/validateAddresses.js.map +1 -0
  245. package/dist/utils/validateAddresses.test.d.ts +2 -0
  246. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  247. package/dist/utils/validateAddresses.test.js +314 -0
  248. package/dist/utils/validateAddresses.test.js.map +1 -0
  249. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  250. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  251. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  252. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  253. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  254. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  255. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
  256. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  257. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  258. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
  259. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  260. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
  261. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  262. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  263. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
  264. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  265. package/dist/wallet/core/wallets/abstract/Wallet.js +5 -6
  266. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  267. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  268. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  269. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  270. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  271. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  272. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  273. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
  274. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  275. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  276. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  277. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
  278. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  279. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  280. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  281. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  282. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
  283. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  284. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  285. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  286. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
  287. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  288. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  289. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
  290. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  291. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  292. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
  293. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  294. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  295. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
  296. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  297. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
  298. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  299. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
  300. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  301. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
  302. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  303. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
  304. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  305. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
  306. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  307. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  308. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  309. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  310. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  311. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  312. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  313. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
  314. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  315. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  316. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  317. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  318. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  319. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  320. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
  321. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  322. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  323. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  324. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
  325. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  326. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  327. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  328. package/package.json +3 -2
  329. package/src/__mocks__/MockAssets.ts +54 -6
  330. package/src/__tests__/actions.test.ts +1 -1
  331. package/src/actions.ts +58 -61
  332. package/src/constants/assets.ts +781 -10
  333. package/src/constants/providers.ts +5 -0
  334. package/src/constants/supportedChains.ts +22 -2
  335. package/src/index.ts +50 -8
  336. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  337. package/src/lend/core/LendProvider.ts +27 -28
  338. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  339. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  340. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  341. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  342. package/src/lend/providers/aave/addresses.ts +82 -64
  343. package/src/lend/providers/aave/sdk.ts +11 -36
  344. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  345. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  346. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
  347. package/src/lend/providers/morpho/api.ts +7 -8
  348. package/src/lend/providers/morpho/contracts.ts +62 -13
  349. package/src/lend/providers/morpho/sdk.ts +85 -63
  350. package/src/services/ChainManager.ts +12 -21
  351. package/src/services/__mocks__/MockChainManager.ts +4 -7
  352. package/src/services/tokenBalance.spec.ts +20 -24
  353. package/src/services/tokenBalance.ts +39 -33
  354. package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
  355. package/src/swap/core/SwapProvider.ts +307 -49
  356. package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
  357. package/src/swap/core/markets.ts +104 -0
  358. package/src/swap/index.ts +5 -0
  359. package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
  360. package/src/swap/namespaces/BaseSwapNamespace.ts +199 -18
  361. package/src/swap/namespaces/WalletSwapNamespace.ts +53 -14
  362. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +241 -14
  363. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
  364. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +108 -195
  365. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
  366. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
  367. package/src/swap/providers/uniswap/addresses.ts +3 -1
  368. package/src/swap/providers/uniswap/encoding.ts +22 -22
  369. package/src/swap/providers/uniswap/markets.ts +84 -0
  370. package/src/swap/providers/uniswap/types.ts +4 -3
  371. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
  372. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  373. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  374. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
  375. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  376. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  377. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  378. package/src/swap/providers/velodrome/abis.ts +264 -0
  379. package/src/swap/providers/velodrome/addresses.ts +107 -0
  380. package/src/swap/providers/velodrome/config.ts +46 -0
  381. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  382. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  383. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  384. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  385. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  386. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  387. package/src/swap/providers/velodrome/markets.ts +100 -0
  388. package/src/swap/providers/velodrome/types.ts +30 -0
  389. package/src/types/actions.ts +49 -9
  390. package/src/types/asset.ts +12 -9
  391. package/src/types/chain.ts +2 -2
  392. package/src/types/lend/base.ts +6 -6
  393. package/src/types/lend/contracts.ts +5 -1
  394. package/src/types/providers.ts +22 -0
  395. package/src/types/swap/base.ts +147 -34
  396. package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
  397. package/src/utils/{permit2.ts → approve.ts} +67 -14
  398. package/src/utils/assets.ts +14 -0
  399. package/src/utils/validateAddresses.test.ts +439 -0
  400. package/src/utils/validateAddresses.ts +153 -0
  401. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  402. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  403. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
  404. package/src/wallet/core/providers/hosted/types/index.ts +9 -11
  405. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
  406. package/src/wallet/core/wallets/abstract/Wallet.ts +15 -22
  407. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  408. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  409. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
  410. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  411. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
  412. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
  413. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  414. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
  415. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
  416. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
  417. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
  418. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
  419. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
  420. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
  421. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  422. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
  423. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  424. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
  425. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
  426. package/dist/supported/tokens.d.ts +0 -25
  427. package/dist/supported/tokens.d.ts.map +0 -1
  428. package/dist/supported/tokens.js +0 -44
  429. package/dist/supported/tokens.js.map +0 -1
  430. package/dist/utils/permit2.d.ts +0 -46
  431. package/dist/utils/permit2.d.ts.map +0 -1
  432. package/dist/utils/permit2.js.map +0 -1
  433. package/dist/utils/permit2.test.d.ts +0 -2
  434. package/dist/utils/permit2.test.d.ts.map +0 -1
  435. package/dist/utils/permit2.test.js.map +0 -1
  436. package/src/supported/tokens.ts +0 -66
@@ -1,6 +1,8 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
 
3
3
  import type { SupportedChainId } from '@/constants/supportedChains.js'
4
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
5
+ import type { ChainManager } from '@/services/ChainManager.js'
4
6
  import {
5
7
  createMockSwapProvider,
6
8
  MockSwapProvider,
@@ -19,27 +21,30 @@ describe('BaseSwapNamespace', () => {
19
21
  metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
20
22
  }
21
23
 
22
- describe('price', () => {
23
- it('delegates to provider getPrice', async () => {
24
+ describe('getQuote', () => {
25
+ it('delegates to provider getQuote', async () => {
24
26
  const provider = createMockSwapProvider()
25
27
  const namespace = new ActionsSwapNamespace({ uniswap: provider })
26
28
 
27
- const result = await namespace.price({
29
+ const result = await namespace.getQuote({
28
30
  assetIn: USDC,
29
31
  assetOut: ETH,
30
32
  amountIn: 100,
31
33
  chainId: 84532 as SupportedChainId,
32
34
  })
33
35
 
34
- expect(provider.mockGetPrice).toHaveBeenCalledTimes(1)
35
- expect(result.price).toBe('1.5')
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')
36
41
  })
37
42
 
38
43
  it('throws if no provider configured', async () => {
39
44
  const namespace = new ActionsSwapNamespace({})
40
45
 
41
46
  await expect(
42
- namespace.price({
47
+ namespace.getQuote({
43
48
  assetIn: USDC,
44
49
  assetOut: ETH,
45
50
  amountIn: 100,
@@ -49,6 +54,190 @@ describe('BaseSwapNamespace', () => {
49
54
  })
50
55
  })
51
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
+
52
241
  describe('getMarket', () => {
53
242
  it('delegates to provider getMarket', async () => {
54
243
  const provider = createMockSwapProvider()
@@ -62,6 +251,42 @@ describe('BaseSwapNamespace', () => {
62
251
  expect(provider.mockGetMarket).toHaveBeenCalledTimes(1)
63
252
  expect(result.marketId.poolId).toBe('0xpool123')
64
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
+ })
65
290
  })
66
291
 
67
292
  describe('getMarkets', () => {
@@ -73,11 +298,9 @@ describe('BaseSwapNamespace', () => {
73
298
 
74
299
  const namespace = new ActionsSwapNamespace({
75
300
  uniswap: provider1,
301
+ velodrome: provider2,
76
302
  })
77
303
 
78
- // Add second provider manually for testing aggregation
79
- ;(namespace as any).providers.oneInch = provider2
80
-
81
304
  const result = await namespace.getMarkets({})
82
305
 
83
306
  expect(result.length).toBeGreaterThanOrEqual(1)
@@ -99,14 +322,18 @@ describe('BaseSwapNamespace', () => {
99
322
  const provider1 = createMockSwapProvider(undefined, {
100
323
  supportedChains: [84532 as SupportedChainId],
101
324
  })
102
- const provider2 = new MockSwapProvider(undefined, {
103
- supportedChains: [1 as SupportedChainId, 10 as SupportedChainId],
104
- })
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
+ )
105
332
 
106
333
  const namespace = new ActionsSwapNamespace({
107
334
  uniswap: provider1,
335
+ velodrome: provider2,
108
336
  })
109
- ;(namespace as any).providers.oneInch = provider2
110
337
 
111
338
  const result = namespace.supportedChainIds()
112
339
 
@@ -126,8 +353,8 @@ describe('BaseSwapNamespace', () => {
126
353
 
127
354
  const namespace = new ActionsSwapNamespace({
128
355
  uniswap: provider1,
356
+ velodrome: provider2,
129
357
  })
130
- ;(namespace as any).providers.oneInch = provider2
131
358
 
132
359
  const result = namespace.supportedChainIds()
133
360
 
@@ -45,7 +45,7 @@ describe('WalletSwapNamespace', () => {
45
45
  expect(provider.mockExecute).toHaveBeenCalledTimes(1)
46
46
  expect(wallet.send).toHaveBeenCalledTimes(1)
47
47
  expect(wallet.sendBatch).not.toHaveBeenCalled()
48
- expect(result.price).toBe('1.5')
48
+ expect(result.price).toBe(1.5)
49
49
  expect(result.assetIn).toBe(USDC)
50
50
  expect(result.assetOut).toBe(ETH)
51
51
  })
@@ -59,11 +59,11 @@ describe('WalletSwapNamespace', () => {
59
59
  provider.mockExecute.mockResolvedValueOnce({
60
60
  amountIn: 100,
61
61
  amountOut: 1.5,
62
- amountInWei: 100000000n,
63
- amountOutWei: 1500000000000000000n,
62
+ amountInRaw: 100000000n,
63
+ amountOutRaw: 1500000000000000000n,
64
64
  assetIn: USDC,
65
65
  assetOut: ETH,
66
- price: '1.5',
66
+ price: 1.5,
67
67
  priceImpact: 0.001,
68
68
  transactionData: {
69
69
  tokenApproval: {
@@ -131,24 +131,119 @@ describe('WalletSwapNamespace', () => {
131
131
  }),
132
132
  ).rejects.toThrow('No swap provider configured')
133
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
+ })
134
157
  })
135
158
 
136
- describe('inherits read-only methods', () => {
137
- it('has price method from BaseSwapNamespace', async () => {
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 () => {
138
197
  const provider = createMockSwapProvider()
139
198
  const wallet = createMockWallet()
140
199
  const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
141
200
 
142
- const result = await namespace.price({
201
+ // Get quote without wallet (simulates ActionsSwapNamespace quote)
202
+ const quote = await provider.getQuote({
143
203
  assetIn: USDC,
144
204
  assetOut: ETH,
145
205
  amountIn: 100,
146
206
  chainId: 84532 as SupportedChainId,
207
+ // No recipient — uses placeholder
147
208
  })
148
209
 
149
- expect(result.price).toBe('1.5')
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)
150
220
  })
151
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', () => {
152
247
  it('has getMarkets method from BaseSwapNamespace', async () => {
153
248
  const provider = createMockSwapProvider()
154
249
  const wallet = createMockWallet()