@eth-optimism/actions-sdk 0.3.0 → 0.5.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 (479) 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 +17 -13
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +46 -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/ens/EnsNamespace.d.ts +57 -0
  24. package/dist/ens/EnsNamespace.d.ts.map +1 -0
  25. package/dist/ens/EnsNamespace.js +158 -0
  26. package/dist/ens/EnsNamespace.js.map +1 -0
  27. package/dist/ens/EnsNamespace.spec.d.ts +2 -0
  28. package/dist/ens/EnsNamespace.spec.d.ts.map +1 -0
  29. package/dist/ens/EnsNamespace.spec.js +144 -0
  30. package/dist/ens/EnsNamespace.spec.js.map +1 -0
  31. package/dist/ens/errors.d.ts +24 -0
  32. package/dist/ens/errors.d.ts.map +1 -0
  33. package/dist/ens/errors.js +35 -0
  34. package/dist/ens/errors.js.map +1 -0
  35. package/dist/ens/index.d.ts +4 -0
  36. package/dist/ens/index.d.ts.map +1 -0
  37. package/dist/ens/index.js +4 -0
  38. package/dist/ens/index.js.map +1 -0
  39. package/dist/ens/types.d.ts +63 -0
  40. package/dist/ens/types.d.ts.map +1 -0
  41. package/dist/ens/types.js +14 -0
  42. package/dist/ens/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -5
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +5 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  48. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  49. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  50. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  51. package/dist/lend/core/LendProvider.d.ts +12 -8
  52. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  53. package/dist/lend/core/LendProvider.js +15 -21
  54. package/dist/lend/core/LendProvider.js.map +1 -1
  55. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  57. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  58. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  59. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  60. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  61. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  62. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  63. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  64. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  65. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  66. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  67. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  68. package/dist/lend/providers/aave/addresses.js +65 -60
  69. package/dist/lend/providers/aave/addresses.js.map +1 -1
  70. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  71. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  72. package/dist/lend/providers/aave/sdk.js +6 -28
  73. package/dist/lend/providers/aave/sdk.js.map +1 -1
  74. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  75. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  76. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  77. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  78. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  79. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  80. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
  81. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  82. package/dist/lend/providers/morpho/api.d.ts +3 -7
  83. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  84. package/dist/lend/providers/morpho/api.js +2 -2
  85. package/dist/lend/providers/morpho/api.js.map +1 -1
  86. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  87. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  88. package/dist/lend/providers/morpho/contracts.js +43 -10
  89. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  90. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  91. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  92. package/dist/lend/providers/morpho/sdk.js +67 -63
  93. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  94. package/dist/nodeActionsFactory.d.ts +1 -1
  95. package/dist/reactActionsFactory.d.ts +1 -1
  96. package/dist/services/ChainManager.d.ts +15 -8
  97. package/dist/services/ChainManager.d.ts.map +1 -1
  98. package/dist/services/ChainManager.js +9 -0
  99. package/dist/services/ChainManager.js.map +1 -1
  100. package/dist/services/__mocks__/MockChainManager.d.ts +5 -4
  101. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  102. package/dist/services/__mocks__/MockChainManager.js +5 -0
  103. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  104. package/dist/services/tokenBalance.d.ts +1 -1
  105. package/dist/services/tokenBalance.d.ts.map +1 -1
  106. package/dist/services/tokenBalance.js +31 -30
  107. package/dist/services/tokenBalance.js.map +1 -1
  108. package/dist/services/tokenBalance.spec.js +20 -24
  109. package/dist/services/tokenBalance.spec.js.map +1 -1
  110. package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
  111. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
  112. package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
  113. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
  114. package/dist/swap/core/SwapProvider.d.ts +105 -16
  115. package/dist/swap/core/SwapProvider.d.ts.map +1 -1
  116. package/dist/swap/core/SwapProvider.js +215 -37
  117. package/dist/swap/core/SwapProvider.js.map +1 -1
  118. package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
  119. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
  120. package/dist/swap/core/markets.d.ts +47 -0
  121. package/dist/swap/core/markets.d.ts.map +1 -0
  122. package/dist/swap/core/markets.js +65 -0
  123. package/dist/swap/core/markets.js.map +1 -0
  124. package/dist/swap/index.d.ts +2 -0
  125. package/dist/swap/index.d.ts.map +1 -1
  126. package/dist/swap/index.js +1 -0
  127. package/dist/swap/index.js.map +1 -1
  128. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
  129. package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
  130. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +50 -8
  131. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
  132. package/dist/swap/namespaces/BaseSwapNamespace.js +144 -16
  133. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
  134. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +20 -7
  135. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  136. package/dist/swap/namespaces/WalletSwapNamespace.js +44 -15
  137. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  138. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
  139. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
  140. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
  141. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
  142. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +10 -42
  143. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
  144. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
  145. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
  146. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
  147. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
  148. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
  149. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
  150. package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
  151. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
  152. package/dist/swap/providers/uniswap/addresses.js +1 -1
  153. package/dist/swap/providers/uniswap/addresses.js.map +1 -1
  154. package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
  155. package/dist/swap/providers/uniswap/encoding.js +17 -17
  156. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  157. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  158. package/dist/swap/providers/uniswap/markets.js +48 -0
  159. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  160. package/dist/swap/providers/uniswap/types.d.ts +4 -3
  161. package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
  162. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +50 -0
  163. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  164. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  165. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  166. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  167. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  168. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  169. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  170. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  171. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  172. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  173. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  174. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  175. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  176. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +420 -0
  177. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  178. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  179. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  180. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  181. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  182. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  183. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  184. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  185. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  186. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  187. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  188. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  189. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  190. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  191. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  192. package/dist/swap/providers/velodrome/abis.js +257 -0
  193. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  194. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  195. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  196. package/dist/swap/providers/velodrome/addresses.js +57 -0
  197. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  198. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  199. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  200. package/dist/swap/providers/velodrome/config.js +29 -0
  201. package/dist/swap/providers/velodrome/config.js.map +1 -0
  202. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  203. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  204. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  205. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  206. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  207. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  208. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  209. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  210. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  211. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  212. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  213. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  214. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  215. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  216. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  217. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  218. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  219. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  220. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  221. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  222. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  223. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  224. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  225. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  226. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  227. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  228. package/dist/swap/providers/velodrome/markets.js +69 -0
  229. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  230. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  231. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  232. package/dist/swap/providers/velodrome/types.js +2 -0
  233. package/dist/swap/providers/velodrome/types.js.map +1 -0
  234. package/dist/types/actions.d.ts +44 -9
  235. package/dist/types/actions.d.ts.map +1 -1
  236. package/dist/types/asset.d.ts +7 -9
  237. package/dist/types/asset.d.ts.map +1 -1
  238. package/dist/types/chain.d.ts +2 -2
  239. package/dist/types/chain.d.ts.map +1 -1
  240. package/dist/types/lend/base.d.ts +6 -6
  241. package/dist/types/lend/base.d.ts.map +1 -1
  242. package/dist/types/lend/base.js.map +1 -1
  243. package/dist/types/lend/contracts.d.ts +2 -1
  244. package/dist/types/lend/contracts.d.ts.map +1 -1
  245. package/dist/types/providers.d.ts +21 -0
  246. package/dist/types/providers.d.ts.map +1 -0
  247. package/dist/types/providers.js +2 -0
  248. package/dist/types/providers.js.map +1 -0
  249. package/dist/types/swap/base.d.ts +136 -35
  250. package/dist/types/swap/base.d.ts.map +1 -1
  251. package/dist/types/swap/base.js.map +1 -1
  252. package/dist/utils/approve.d.ts +82 -0
  253. package/dist/utils/approve.d.ts.map +1 -0
  254. package/dist/utils/{permit2.js → approve.js} +48 -14
  255. package/dist/utils/approve.js.map +1 -0
  256. package/dist/utils/approve.test.d.ts +2 -0
  257. package/dist/utils/approve.test.d.ts.map +1 -0
  258. package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
  259. package/dist/utils/approve.test.js.map +1 -0
  260. package/dist/utils/assets.d.ts +6 -0
  261. package/dist/utils/assets.d.ts.map +1 -1
  262. package/dist/utils/assets.js +10 -0
  263. package/dist/utils/assets.js.map +1 -1
  264. package/dist/utils/ens.d.ts +25 -0
  265. package/dist/utils/ens.d.ts.map +1 -0
  266. package/dist/utils/ens.js +53 -0
  267. package/dist/utils/ens.js.map +1 -0
  268. package/dist/utils/ens.test.d.ts +2 -0
  269. package/dist/utils/ens.test.d.ts.map +1 -0
  270. package/dist/utils/ens.test.js +75 -0
  271. package/dist/utils/ens.test.js.map +1 -0
  272. package/dist/utils/validateAddresses.d.ts +32 -0
  273. package/dist/utils/validateAddresses.d.ts.map +1 -0
  274. package/dist/utils/validateAddresses.js +103 -0
  275. package/dist/utils/validateAddresses.js.map +1 -0
  276. package/dist/utils/validateAddresses.test.d.ts +2 -0
  277. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  278. package/dist/utils/validateAddresses.test.js +314 -0
  279. package/dist/utils/validateAddresses.test.js.map +1 -0
  280. package/dist/utils/validation.d.ts +5 -0
  281. package/dist/utils/validation.d.ts.map +1 -1
  282. package/dist/utils/validation.js +10 -0
  283. package/dist/utils/validation.js.map +1 -1
  284. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  285. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  286. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  287. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  288. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  289. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  290. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
  291. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  292. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  293. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
  294. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  295. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
  296. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  297. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  298. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
  299. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  300. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -6
  301. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  302. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  303. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  304. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  305. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  306. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  307. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  308. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
  309. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  310. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  311. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  312. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
  313. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  314. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  315. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  316. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  317. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
  318. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  319. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  320. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  321. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
  322. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  323. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  324. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
  325. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  326. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  327. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
  328. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  329. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  330. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
  331. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  332. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
  333. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  334. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
  335. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  336. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
  337. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  338. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
  339. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  340. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
  341. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  342. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  343. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  344. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  345. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  346. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  347. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  348. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
  349. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  350. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  351. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  352. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  353. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  354. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  355. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
  356. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  357. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  358. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  359. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
  360. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  361. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  362. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  363. package/package.json +3 -2
  364. package/src/__mocks__/MockAssets.ts +54 -6
  365. package/src/__tests__/actions.test.ts +1 -1
  366. package/src/actions.ts +73 -61
  367. package/src/constants/assets.ts +781 -10
  368. package/src/constants/providers.ts +5 -0
  369. package/src/constants/supportedChains.ts +22 -2
  370. package/src/ens/EnsNamespace.spec.ts +171 -0
  371. package/src/ens/EnsNamespace.ts +210 -0
  372. package/src/ens/errors.ts +45 -0
  373. package/src/ens/index.ts +12 -0
  374. package/src/ens/types.ts +76 -0
  375. package/src/index.ts +59 -8
  376. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  377. package/src/lend/core/LendProvider.ts +27 -28
  378. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  379. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  380. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  381. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  382. package/src/lend/providers/aave/addresses.ts +82 -64
  383. package/src/lend/providers/aave/sdk.ts +11 -36
  384. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  385. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  386. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
  387. package/src/lend/providers/morpho/api.ts +7 -8
  388. package/src/lend/providers/morpho/contracts.ts +62 -13
  389. package/src/lend/providers/morpho/sdk.ts +85 -63
  390. package/src/services/ChainManager.ts +22 -21
  391. package/src/services/__mocks__/MockChainManager.ts +12 -7
  392. package/src/services/tokenBalance.spec.ts +20 -24
  393. package/src/services/tokenBalance.ts +39 -33
  394. package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
  395. package/src/swap/core/SwapProvider.ts +309 -50
  396. package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
  397. package/src/swap/core/markets.ts +104 -0
  398. package/src/swap/index.ts +5 -0
  399. package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
  400. package/src/swap/namespaces/BaseSwapNamespace.ts +215 -18
  401. package/src/swap/namespaces/WalletSwapNamespace.ts +61 -14
  402. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +245 -14
  403. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
  404. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +110 -195
  405. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
  406. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
  407. package/src/swap/providers/uniswap/addresses.ts +3 -1
  408. package/src/swap/providers/uniswap/encoding.ts +22 -22
  409. package/src/swap/providers/uniswap/markets.ts +84 -0
  410. package/src/swap/providers/uniswap/types.ts +4 -3
  411. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +226 -0
  412. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  413. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  414. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +507 -0
  415. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  416. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  417. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  418. package/src/swap/providers/velodrome/abis.ts +264 -0
  419. package/src/swap/providers/velodrome/addresses.ts +107 -0
  420. package/src/swap/providers/velodrome/config.ts +46 -0
  421. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  422. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  423. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  424. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  425. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  426. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  427. package/src/swap/providers/velodrome/markets.ts +100 -0
  428. package/src/swap/providers/velodrome/types.ts +30 -0
  429. package/src/types/actions.ts +49 -9
  430. package/src/types/asset.ts +12 -9
  431. package/src/types/chain.ts +2 -2
  432. package/src/types/lend/base.ts +6 -6
  433. package/src/types/lend/contracts.ts +5 -1
  434. package/src/types/providers.ts +22 -0
  435. package/src/types/swap/base.ts +150 -36
  436. package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
  437. package/src/utils/{permit2.ts → approve.ts} +67 -14
  438. package/src/utils/assets.ts +14 -0
  439. package/src/utils/ens.test.ts +104 -0
  440. package/src/utils/ens.ts +85 -0
  441. package/src/utils/validateAddresses.test.ts +439 -0
  442. package/src/utils/validateAddresses.ts +153 -0
  443. package/src/utils/validation.ts +11 -0
  444. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  445. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  446. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
  447. package/src/wallet/core/providers/hosted/types/index.ts +9 -11
  448. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
  449. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -22
  450. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  451. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  452. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
  453. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  454. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
  455. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
  456. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  457. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
  458. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
  459. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
  460. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
  461. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
  462. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
  463. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
  464. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  465. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
  466. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  467. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
  468. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
  469. package/dist/supported/tokens.d.ts +0 -25
  470. package/dist/supported/tokens.d.ts.map +0 -1
  471. package/dist/supported/tokens.js +0 -44
  472. package/dist/supported/tokens.js.map +0 -1
  473. package/dist/utils/permit2.d.ts +0 -46
  474. package/dist/utils/permit2.d.ts.map +0 -1
  475. package/dist/utils/permit2.js.map +0 -1
  476. package/dist/utils/permit2.test.d.ts +0 -2
  477. package/dist/utils/permit2.test.d.ts.map +0 -1
  478. package/dist/utils/permit2.test.js.map +0 -1
  479. package/src/supported/tokens.ts +0 -66
@@ -1,8 +1,10 @@
1
- import { type Address, encodeAbiParameters, formatUnits, keccak256 } from 'viem'
1
+ import { formatUnits } from 'viem'
2
2
 
3
+ import { UNISWAP } from '@/constants/providers.js'
3
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import type { SwapQuoteParamsResolved } from '@/ens/types.js'
6
+ import { expandMarkets, findMarket } from '@/swap/core/markets.js'
4
7
  import { SwapProvider } from '@/swap/core/SwapProvider.js'
5
- import { POOL_KEY_ABI_TYPE } from '@/swap/providers/uniswap/abis.js'
6
8
  import {
7
9
  getSupportedChainIds,
8
10
  getUniswapAddresses,
@@ -11,6 +13,10 @@ import {
11
13
  encodeUniversalRouterSwap,
12
14
  getQuote,
13
15
  } from '@/swap/providers/uniswap/encoding.js'
16
+ import {
17
+ configToMarkets,
18
+ getValidMarketConfigs,
19
+ } from '@/swap/providers/uniswap/markets.js'
14
20
  import type {
15
21
  UniswapMarketConfig,
16
22
  UniswapSwapProviderConfig,
@@ -21,40 +27,80 @@ import type {
21
27
  GetSwapMarketsParams,
22
28
  ResolvedSwapParams,
23
29
  SwapMarket,
24
- SwapPrice,
25
- SwapPriceParams,
30
+ SwapQuote,
26
31
  SwapTransaction,
27
32
  } from '@/types/swap/index.js'
28
- import type { TransactionData } from '@/types/transaction.js'
29
33
  import { isNativeAsset, parseAssetAmount } from '@/utils/assets.js'
30
34
 
31
35
  /**
32
36
  * Uniswap V4 swap provider using Universal Router and Permit2 approvals.
33
37
  */
34
38
  export class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig> {
35
- /** @returns Chain IDs where Uniswap V4 contracts are deployed */
36
- supportedChainIds(): SupportedChainId[] {
39
+ protocolSupportedChainIds(): SupportedChainId[] {
37
40
  return getSupportedChainIds()
38
41
  }
39
42
 
40
- /**
41
- * Build a swap transaction with quote, calldata, and any required approvals.
42
- * @param params - Resolved swap parameters (amounts in wei, defaults applied)
43
- * @returns Transaction data ready for wallet execution
44
- */
45
43
  protected async _execute(
46
44
  params: ResolvedSwapParams,
47
45
  ): Promise<SwapTransaction> {
46
+ const swapQuote = await this._getQuote({
47
+ assetIn: params.assetIn,
48
+ assetOut: params.assetOut,
49
+ amountIn: params.amountInRaw
50
+ ? parseFloat(
51
+ formatUnits(params.amountInRaw, params.assetIn.metadata.decimals),
52
+ )
53
+ : undefined,
54
+ amountOut: params.amountOutRaw
55
+ ? parseFloat(
56
+ formatUnits(params.amountOutRaw, params.assetOut.metadata.decimals),
57
+ )
58
+ : undefined,
59
+ chainId: params.chainId,
60
+ slippage: params.slippage,
61
+ deadline: params.deadline,
62
+ recipient: params.recipient,
63
+ })
64
+ return this.buildSwapTransactions(swapQuote)
65
+ }
66
+
67
+ protected async _buildApprovals(quote: SwapQuote) {
68
+ const addresses = getUniswapAddresses(quote.chainId)
69
+
70
+ return this.buildPermit2Approvals(
71
+ {
72
+ assetIn: quote.assetIn,
73
+ assetOut: quote.assetOut,
74
+ slippage: quote.slippage,
75
+ deadline: quote.deadline,
76
+ recipient: quote.recipient!,
77
+ walletAddress: quote.recipient!,
78
+ chainId: quote.chainId,
79
+ amountInRaw: quote.amountInRaw,
80
+ },
81
+ quote.amountInRaw,
82
+ addresses.permit2,
83
+ addresses.universalRouter,
84
+ )
85
+ }
86
+
87
+ protected async _getQuote(
88
+ params: SwapQuoteParamsResolved,
89
+ ): Promise<SwapQuote> {
48
90
  const { chainId, assetIn, assetOut } = params
49
91
  const addresses = getUniswapAddresses(chainId)
50
92
  const publicClient = this.chainManager.getPublicClient(chainId)
51
93
  const marketConfig = this.resolveUniswapConfig(assetIn, assetOut, chainId)
52
94
 
95
+ const { slippage, now, deadline, recipient, amountInRaw } =
96
+ this.resolveQuoteDefaults(params)
97
+ const amountOutRaw = parseAssetAmount(assetOut, params.amountOut)
98
+
53
99
  const quote = await getQuote({
54
100
  assetIn,
55
101
  assetOut,
56
- amountInWei: params.amountInWei,
57
- amountOutWei: params.amountOutWei,
102
+ amountInRaw: amountOutRaw ? undefined : amountInRaw,
103
+ amountOutRaw,
58
104
  chainId,
59
105
  publicClient,
60
106
  quoterAddress: addresses.quoter,
@@ -64,13 +110,13 @@ export class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig>
64
110
  })
65
111
 
66
112
  const swapCalldata = encodeUniversalRouterSwap({
67
- amountInWei: params.amountInWei,
68
- amountOutWei: params.amountOutWei,
113
+ amountInRaw: amountOutRaw ? undefined : amountInRaw,
114
+ amountOutRaw,
69
115
  assetIn,
70
116
  assetOut,
71
- slippage: params.slippage,
72
- deadline: params.deadline,
73
- recipient: params.recipient,
117
+ slippage,
118
+ deadline,
119
+ recipient,
74
120
  chainId,
75
121
  quote,
76
122
  universalRouterAddress: addresses.universalRouter,
@@ -78,70 +124,48 @@ export class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig>
78
124
  tickSpacing: marketConfig.tickSpacing,
79
125
  })
80
126
 
81
- const amountInWei = params.amountInWei ?? quote.amountInWei
82
- const { tokenApproval, permit2Approval } = await this.buildPermit2Approvals(
83
- params,
84
- amountInWei,
85
- addresses.permit2,
86
- addresses.universalRouter,
87
- this._config.permit2ExpirySeconds,
88
- )
127
+ const finalAmountInRaw = amountOutRaw ? quote.amountInRaw : amountInRaw
89
128
 
90
- const swapTx: TransactionData = {
91
- to: addresses.universalRouter,
92
- data: swapCalldata,
93
- value: isNativeAsset(assetIn) ? (params.amountInWei ?? 0n) : 0n,
94
- }
129
+ const { amountOutMinRaw, amountOutMin } = this.computeSlippageBounds(
130
+ quote.amountOutRaw,
131
+ slippage,
132
+ assetOut,
133
+ )
95
134
 
96
135
  return {
97
- amountIn: parseFloat(formatUnits(amountInWei, assetIn.metadata.decimals)),
98
- amountOut: parseFloat(
99
- formatUnits(quote.amountOutWei, assetOut.metadata.decimals),
100
- ),
101
- amountInWei,
102
- amountOutWei: quote.amountOutWei,
103
136
  assetIn,
104
137
  assetOut,
105
- price: quote.price,
138
+ chainId,
139
+ amountIn: quote.amountIn,
140
+ amountInRaw: finalAmountInRaw,
141
+ amountOut: quote.amountOut,
142
+ amountOutRaw: quote.amountOutRaw,
143
+ amountOutMin,
144
+ amountOutMinRaw,
145
+ price: quote.amountOut / quote.amountIn,
146
+ priceInverse: quote.amountIn / quote.amountOut,
106
147
  priceImpact: quote.priceImpact,
107
- transactionData: { tokenApproval, permit2Approval, swap: swapTx },
148
+ route: quote.route,
149
+ execution: {
150
+ swapCalldata,
151
+ routerAddress: addresses.universalRouter,
152
+ value: isNativeAsset(assetIn) ? (amountInRaw ?? 0n) : 0n,
153
+ providerContext: {
154
+ fee: marketConfig.fee,
155
+ tickSpacing: marketConfig.tickSpacing,
156
+ permit2Address: addresses.permit2,
157
+ },
158
+ },
159
+ provider: UNISWAP,
160
+ slippage,
161
+ deadline,
162
+ quotedAt: now,
163
+ expiresAt: deadline,
164
+ gasEstimate: quote.gasEstimate,
165
+ quotedRecipient: recipient,
108
166
  }
109
167
  }
110
168
 
111
- /**
112
- * Get a price quote for a swap pair.
113
- * @param params - Price query with assets, optional amounts, and chain
114
- * @returns Quote with price, amounts, price impact, and route
115
- */
116
- protected async _getPrice(params: SwapPriceParams): Promise<SwapPrice> {
117
- const { chainId, assetIn, assetOut } = params
118
- const addresses = getUniswapAddresses(chainId)
119
- const publicClient = this.chainManager.getPublicClient(chainId)
120
-
121
- if (!assetOut) {
122
- throw new Error('assetOut is required')
123
- }
124
-
125
- const marketConfig = this.resolveUniswapConfig(assetIn, assetOut, chainId)
126
-
127
- // Default to 1 unit for price quotes when no amount specified
128
- const amountInWei = parseAssetAmount(assetIn, params.amountIn ?? 1)
129
- const amountOutWei = parseAssetAmount(assetOut, params.amountOut)
130
-
131
- return getQuote({
132
- assetIn,
133
- assetOut,
134
- amountInWei: amountOutWei ? undefined : amountInWei,
135
- amountOutWei,
136
- chainId,
137
- publicClient,
138
- quoterAddress: addresses.quoter,
139
- poolManagerAddress: addresses.poolManager,
140
- fee: marketConfig.fee,
141
- tickSpacing: marketConfig.tickSpacing,
142
- })
143
- }
144
-
145
169
  /**
146
170
  * Find a specific market by poolId from the allowlist.
147
171
  * @param params - Pool ID and chain to look up
@@ -149,53 +173,32 @@ export class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig>
149
173
  * @throws If no matching market found in config
150
174
  */
151
175
  protected async _getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
152
- const { poolId, chainId } = params
153
-
154
- for (const config of this.validConfigs()) {
155
- if (config.chainId !== undefined && config.chainId !== chainId) continue
156
- const match = this.marketsFromConfig(config, chainId).find(
157
- (m) => m.marketId.poolId === poolId,
158
- )
159
- if (match) return match
160
- }
161
-
162
- throw new Error(
163
- `Market with poolId ${poolId} not found on chain ${chainId}`,
176
+ return findMarket(
177
+ getValidMarketConfigs(this._config.marketAllowlist),
178
+ params.chainId,
179
+ params.poolId,
180
+ configToMarkets,
164
181
  )
165
182
  }
166
183
 
167
184
  /**
168
185
  * Expand the market allowlist into concrete SwapMarket objects.
169
- * Derives poolId from each asset pair's pool key — no RPC calls needed.
170
- * @param params - Optional chain and asset filters
186
+ * @param params - Optional filters (chainId, asset)
171
187
  * @returns All configured markets matching the filters
172
188
  */
173
189
  protected async _getMarkets(
174
190
  params: GetSwapMarketsParams,
175
191
  ): Promise<SwapMarket[]> {
176
- return this.validConfigs().flatMap((config) => {
177
- const chainIds = params.chainId
178
- ? [params.chainId]
179
- : config.chainId
180
- ? [config.chainId]
181
- : this.supportedChainIds()
182
-
183
- return chainIds.flatMap((chainId) =>
184
- this.marketsFromConfig(config, chainId, params.asset),
185
- )
192
+ return expandMarkets({
193
+ configs: getValidMarketConfigs(this._config.marketAllowlist),
194
+ filters: params,
195
+ supportedChainIds: this.supportedChainIds(),
196
+ toMarkets: configToMarkets,
186
197
  })
187
198
  }
188
199
 
189
- // ─────────────────────────────────────────────────────────────────────────────
190
- // Private helpers
191
- // ─────────────────────────────────────────────────────────────────────────────
192
-
193
200
  /**
194
- * Look up the Uniswap-specific market config for a pair, validating fee/tickSpacing.
195
- * @param assetIn - Input asset
196
- * @param assetOut - Output asset
197
- * @param chainId - Target chain
198
- * @returns Market config with guaranteed fee and tickSpacing
201
+ * Resolve and validate Uniswap market config for a pair.
199
202
  * @throws If pair not in allowlist or missing fee/tickSpacing
200
203
  */
201
204
  private resolveUniswapConfig(
@@ -213,92 +216,4 @@ export class UniswapSwapProvider extends SwapProvider<UniswapSwapProviderConfig>
213
216
  }
214
217
  return config as UniswapMarketConfig & { fee: number; tickSpacing: number }
215
218
  }
216
-
217
- /** @returns Allowlist entries that have the required fee and tickSpacing set */
218
- private validConfigs(): Array<
219
- UniswapMarketConfig & { fee: number; tickSpacing: number }
220
- > {
221
- return (this._config.marketAllowlist ?? []).filter(
222
- (f): f is UniswapMarketConfig & { fee: number; tickSpacing: number } =>
223
- f.fee !== undefined && f.tickSpacing !== undefined,
224
- )
225
- }
226
-
227
- /**
228
- * Generate all SwapMarket objects from a single config entry on a given chain.
229
- * @param config - Market config with fee/tickSpacing
230
- * @param chainId - Target chain
231
- * @param asset - If provided, only return markets containing this asset
232
- */
233
- private marketsFromConfig(
234
- config: UniswapMarketConfig & { fee: number; tickSpacing: number },
235
- chainId: SupportedChainId,
236
- asset?: Asset,
237
- ): SwapMarket[] {
238
- return this.assetPairs(config.assets, asset)
239
- .map(([a, b]) =>
240
- this.configToMarket(a, b, chainId, config.fee, config.tickSpacing),
241
- )
242
- .filter((m): m is SwapMarket => m !== null)
243
- }
244
-
245
- /**
246
- * Generate unique asset pairs, optionally scoped to pairs containing a required asset.
247
- * @param assets - Full list of assets from a market config
248
- * @param requiredAsset - If set, only pairs including this asset are returned
249
- */
250
- private assetPairs(
251
- assets: Asset[],
252
- requiredAsset?: Asset,
253
- ): Array<[Asset, Asset]> {
254
- return assets
255
- .flatMap((a, i) => assets.slice(i + 1).map((b): [Asset, Asset] => [a, b]))
256
- .filter(
257
- ([a, b]) =>
258
- !requiredAsset || a === requiredAsset || b === requiredAsset,
259
- )
260
- }
261
-
262
- /**
263
- * Build a SwapMarket from two assets and V4 pool parameters.
264
- * Computes a deterministic poolId from the sorted pool key.
265
- * @returns SwapMarket, or null if either asset lacks an address on this chain
266
- */
267
- private configToMarket(
268
- assetA: Asset,
269
- assetB: Asset,
270
- chainId: SupportedChainId,
271
- fee: number,
272
- tickSpacing: number,
273
- ): SwapMarket | null {
274
- const addrA = assetA.address[chainId]
275
- const addrB = assetB.address[chainId]
276
- if (!addrA || addrA === 'native' || !addrB || addrB === 'native')
277
- return null
278
-
279
- // V4 requires currency0 < currency1 for deterministic pool keys
280
- const [currency0, currency1] =
281
- addrA.toLowerCase() < addrB.toLowerCase()
282
- ? [addrA, addrB]
283
- : [addrB, addrA]
284
-
285
- // PoolId = keccak256(abi.encode(PoolKey)) per V4's PoolIdLibrary
286
- // @see https://github.com/Uniswap/v4-core/blob/main/src/types/PoolId.sol
287
- const poolId = keccak256(
288
- encodeAbiParameters(POOL_KEY_ABI_TYPE, [
289
- currency0 as Address,
290
- currency1 as Address,
291
- fee,
292
- tickSpacing,
293
- '0x0000000000000000000000000000000000000000' as Address,
294
- ]),
295
- )
296
-
297
- return {
298
- marketId: { poolId, chainId },
299
- assets: [assetA, assetB],
300
- fee,
301
- provider: 'uniswap',
302
- }
303
- }
304
219
  }
@@ -5,11 +5,10 @@ import { describe, expect, it, vi } from 'vitest'
5
5
  import { MockWETHAsset } from '@/__mocks__/MockAssets.js'
6
6
  import type { SupportedChainId } from '@/constants/supportedChains.js'
7
7
  import type { ChainManager } from '@/services/ChainManager.js'
8
+ import type { UniswapSwapProviderConfig } from '@/swap/providers/uniswap/types.js'
9
+ import { UniswapSwapProvider } from '@/swap/providers/uniswap/UniswapSwapProvider.js'
8
10
  import type { Asset } from '@/types/asset.js'
9
11
 
10
- import type { UniswapSwapProviderConfig } from '../types.js'
11
- import { UniswapSwapProvider } from '../UniswapSwapProvider.js'
12
-
13
12
  const CHAIN_ID = baseSepolia.id as SupportedChainId
14
13
 
15
14
  const USDC: Asset = {
@@ -127,32 +126,33 @@ describe('UniswapSwapProvider', () => {
127
126
  })
128
127
  })
129
128
 
130
- describe('getPrice', () => {
131
- it('returns price quote', async () => {
129
+ describe('getQuote', () => {
130
+ it('returns swap quote', async () => {
132
131
  const provider = createProvider()
133
- const price = await provider.getPrice({
132
+ const quote = await provider.getQuote({
134
133
  assetIn: USDC,
135
134
  assetOut: OP,
136
135
  amountIn: 100,
137
136
  chainId: CHAIN_ID,
138
137
  })
139
138
 
140
- expect(price.price).toBeDefined()
141
- expect(price.amountIn).toBeDefined()
142
- expect(price.amountOut).toBeDefined()
143
- expect(price.route.path).toEqual([USDC, OP])
139
+ expect(quote.price).toBeTypeOf('number')
140
+ expect(quote.amountIn).toBeDefined()
141
+ expect(quote.amountOut).toBeDefined()
142
+ expect(quote.route.path).toEqual([USDC, OP])
143
+ expect(quote.execution).toBeDefined()
144
144
  })
145
145
 
146
146
  it('defaults to 1 unit when no amount specified', async () => {
147
147
  const provider = createProvider()
148
- const price = await provider.getPrice({
148
+ const quote = await provider.getQuote({
149
149
  assetIn: USDC,
150
150
  assetOut: OP,
151
151
  chainId: CHAIN_ID,
152
152
  })
153
153
 
154
154
  // 1 USDC = 1000000 (6 decimals)
155
- expect(price.amountInWei).toBe(1000000n)
155
+ expect(quote.amountInRaw).toBe(1000000n)
156
156
  })
157
157
  })
158
158
 
@@ -2,13 +2,12 @@ import { type Address, type PublicClient, zeroAddress } from 'viem'
2
2
  import { describe, expect, it, vi } from 'vitest'
3
3
 
4
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
- import type { Asset } from '@/types/asset.js'
6
-
7
5
  import {
8
6
  calculatePriceImpact,
9
7
  encodeUniversalRouterSwap,
10
8
  getQuote,
11
- } from '../encoding.js'
9
+ } from '@/swap/providers/uniswap/encoding.js'
10
+ import type { Asset } from '@/types/asset.js'
12
11
 
13
12
  const USDC: Asset = {
14
13
  type: 'erc20',
@@ -58,7 +57,7 @@ describe('getQuote', () => {
58
57
  const quote = await getQuote({
59
58
  assetIn: USDC,
60
59
  assetOut: WETH,
61
- amountInWei: 100000000n, // 100 USDC
60
+ amountInRaw: 100000000n, // 100 USDC
62
61
  chainId: CHAIN_ID,
63
62
  publicClient,
64
63
  quoterAddress: QUOTER,
@@ -69,8 +68,8 @@ describe('getQuote', () => {
69
68
 
70
69
  expect(quote.amountIn).toBe(100)
71
70
  expect(quote.amountOut).toBe(0.5)
72
- expect(quote.amountInWei).toBe(100000000n)
73
- expect(quote.amountOutWei).toBe(500000000000000000n)
71
+ expect(quote.amountInRaw).toBe(100000000n)
72
+ expect(quote.amountOutRaw).toBe(500000000000000000n)
74
73
  expect(quote.price).toBeDefined()
75
74
  expect(quote.priceInverse).toBeDefined()
76
75
  expect(typeof quote.priceImpact).toBe('number')
@@ -98,7 +97,7 @@ describe('getQuote', () => {
98
97
  const quote = await getQuote({
99
98
  assetIn: USDC,
100
99
  assetOut: WETH,
101
- amountOutWei: 500000000000000000n, // 0.5 WETH
100
+ amountOutRaw: 500000000000000000n, // 0.5 WETH
102
101
  chainId: CHAIN_ID,
103
102
  publicClient,
104
103
  quoterAddress: QUOTER,
@@ -107,8 +106,8 @@ describe('getQuote', () => {
107
106
  tickSpacing: TICK_SPACING,
108
107
  })
109
108
 
110
- expect(quote.amountInWei).toBe(100000000n)
111
- expect(quote.amountOutWei).toBe(500000000000000000n)
109
+ expect(quote.amountInRaw).toBe(100000000n)
110
+ expect(quote.amountOutRaw).toBe(500000000000000000n)
112
111
 
113
112
  expect(publicClient.simulateContract).toHaveBeenCalledWith(
114
113
  expect.objectContaining({
@@ -122,7 +121,7 @@ describe('getQuote', () => {
122
121
  await getQuote({
123
122
  assetIn: WETH, // higher address
124
123
  assetOut: USDC, // lower address
125
- amountInWei: 1000000000000000000n,
124
+ amountInRaw: 1000000000000000000n,
126
125
  chainId: CHAIN_ID,
127
126
  publicClient,
128
127
  quoterAddress: QUOTER,
@@ -145,7 +144,7 @@ describe('getQuote', () => {
145
144
  await getQuote({
146
145
  assetIn: ETH,
147
146
  assetOut: USDC,
148
- amountInWei: 1000000000000000000n,
147
+ amountInRaw: 1000000000000000000n,
149
148
  chainId: CHAIN_ID,
150
149
  publicClient,
151
150
  quoterAddress: QUOTER,
@@ -165,7 +164,7 @@ describe('getQuote', () => {
165
164
  await getQuote({
166
165
  assetIn: USDC,
167
166
  assetOut: ETH,
168
- amountInWei: 100000000n,
167
+ amountInRaw: 100000000n,
169
168
  chainId: CHAIN_ID,
170
169
  publicClient,
171
170
  quoterAddress: QUOTER,
@@ -258,8 +257,8 @@ describe('encodeUniversalRouterSwap', () => {
258
257
  priceInverse: '200',
259
258
  amountIn: 100,
260
259
  amountOut: 0.5,
261
- amountInWei: 100000000n,
262
- amountOutWei: 500000000000000000n,
260
+ amountInRaw: 100000000n,
261
+ amountOutRaw: 500000000000000000n,
263
262
  priceImpact: 0.001,
264
263
  route: { path: [USDC, WETH], pools: [] },
265
264
  gasEstimate: 150000n,
@@ -267,7 +266,7 @@ describe('encodeUniversalRouterSwap', () => {
267
266
 
268
267
  it('encodes exact-in swap calldata', () => {
269
268
  const calldata = encodeUniversalRouterSwap({
270
- amountInWei: 100000000n,
269
+ amountInRaw: 100000000n,
271
270
  assetIn: USDC,
272
271
  assetOut: WETH,
273
272
  slippage: 0.005,
@@ -286,7 +285,7 @@ describe('encodeUniversalRouterSwap', () => {
286
285
 
287
286
  it('encodes exact-out swap calldata', () => {
288
287
  const calldata = encodeUniversalRouterSwap({
289
- amountOutWei: 500000000000000000n,
288
+ amountOutRaw: 500000000000000000n,
290
289
  assetIn: USDC,
291
290
  assetOut: WETH,
292
291
  slippage: 0.005,
@@ -305,7 +304,7 @@ describe('encodeUniversalRouterSwap', () => {
305
304
 
306
305
  it('produces different calldata for exact-in vs exact-out', () => {
307
306
  const exactIn = encodeUniversalRouterSwap({
308
- amountInWei: 100000000n,
307
+ amountInRaw: 100000000n,
309
308
  assetIn: USDC,
310
309
  assetOut: WETH,
311
310
  slippage: 0.005,
@@ -319,7 +318,7 @@ describe('encodeUniversalRouterSwap', () => {
319
318
  })
320
319
 
321
320
  const exactOut = encodeUniversalRouterSwap({
322
- amountOutWei: 500000000000000000n,
321
+ amountOutRaw: 500000000000000000n,
323
322
  assetIn: USDC,
324
323
  assetOut: WETH,
325
324
  slippage: 0.005,
@@ -337,7 +336,7 @@ describe('encodeUniversalRouterSwap', () => {
337
336
 
338
337
  it('applies slippage to minimum output for exact-in', () => {
339
338
  const noSlippage = encodeUniversalRouterSwap({
340
- amountInWei: 100000000n,
339
+ amountInRaw: 100000000n,
341
340
  assetIn: USDC,
342
341
  assetOut: WETH,
343
342
  slippage: 0,
@@ -351,7 +350,7 @@ describe('encodeUniversalRouterSwap', () => {
351
350
  })
352
351
 
353
352
  const withSlippage = encodeUniversalRouterSwap({
354
- amountInWei: 100000000n,
353
+ amountInRaw: 100000000n,
355
354
  assetIn: USDC,
356
355
  assetOut: WETH,
357
356
  slippage: 0.05, // 5%
@@ -28,7 +28,9 @@ export interface UniswapAddresses {
28
28
  * Uniswap V4 contract addresses per chain
29
29
  * @see https://docs.uniswap.org/contracts/v4/deployments
30
30
  */
31
- const UNISWAP_ADDRESSES: Partial<Record<SupportedChainId, UniswapAddresses>> = {
31
+ export const UNISWAP_ADDRESSES: Partial<
32
+ Record<SupportedChainId, UniswapAddresses>
33
+ > = {
32
34
  [mainnet.id]: {
33
35
  poolManager: '0x000000000004444c5dc75cB358380D2e3dE08A90',
34
36
  positionManager: '0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e',