@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
@@ -83,8 +83,8 @@ function resolvePoolParams(
83
83
  export interface GetQuoteParams {
84
84
  assetIn: Asset
85
85
  assetOut: Asset
86
- amountInWei?: bigint
87
- amountOutWei?: bigint
86
+ amountInRaw?: bigint
87
+ amountOutRaw?: bigint
88
88
  chainId: SupportedChainId
89
89
  publicClient: PublicClient
90
90
  quoterAddress: Address
@@ -102,8 +102,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
102
102
  const {
103
103
  assetIn,
104
104
  assetOut,
105
- amountInWei,
106
- amountOutWei,
105
+ amountInRaw,
106
+ amountOutRaw,
107
107
  chainId,
108
108
  publicClient,
109
109
  quoterAddress,
@@ -120,7 +120,7 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
120
120
  tickSpacing,
121
121
  )
122
122
 
123
- const isExactInput = amountInWei !== undefined
123
+ const isExactInput = amountInRaw !== undefined
124
124
 
125
125
  // Read pool mid-price and quote in parallel — no extra sequential RPC call
126
126
  const [sqrtPriceX96, quoteResult] = await Promise.all([
@@ -134,7 +134,7 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
134
134
  {
135
135
  poolKey,
136
136
  zeroForOne,
137
- exactAmount: amountInWei,
137
+ exactAmount: amountInRaw,
138
138
  hookData: '0x' as `0x${string}`,
139
139
  },
140
140
  ],
@@ -147,15 +147,15 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
147
147
  {
148
148
  poolKey,
149
149
  zeroForOne,
150
- exactAmount: amountOutWei!,
150
+ exactAmount: amountOutRaw!,
151
151
  hookData: '0x' as `0x${string}`,
152
152
  },
153
153
  ],
154
154
  }),
155
155
  ])
156
156
 
157
- const amountIn = isExactInput ? amountInWei : quoteResult.result[0]
158
- const amountOut = isExactInput ? quoteResult.result[0] : amountOutWei!
157
+ const amountIn = isExactInput ? amountInRaw : quoteResult.result[0]
158
+ const amountOut = isExactInput ? quoteResult.result[0] : amountOutRaw!
159
159
  const gasEstimate = quoteResult.result[1]
160
160
 
161
161
  const price = calculatePrice(amountIn, amountOut, assetIn, assetOut)
@@ -183,8 +183,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
183
183
  priceInverse,
184
184
  amountIn: parseFloat(formatUnits(amountIn, assetIn.metadata.decimals)),
185
185
  amountOut: parseFloat(formatUnits(amountOut, assetOut.metadata.decimals)),
186
- amountInWei: amountIn,
187
- amountOutWei: amountOut,
186
+ amountInRaw: amountIn,
187
+ amountOutRaw: amountOut,
188
188
  priceImpact,
189
189
  route,
190
190
  gasEstimate,
@@ -192,8 +192,8 @@ export async function getQuote(params: GetQuoteParams): Promise<SwapPrice> {
192
192
  }
193
193
 
194
194
  export interface EncodeSwapParams {
195
- amountInWei?: bigint
196
- amountOutWei?: bigint
195
+ amountInRaw?: bigint
196
+ amountOutRaw?: bigint
197
197
  assetIn: Asset
198
198
  assetOut: Asset
199
199
  slippage: number
@@ -223,7 +223,7 @@ const TAKE_ALL = 0x0f
223
223
  */
224
224
  export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
225
225
  const {
226
- amountInWei,
226
+ amountInRaw,
227
227
  assetIn,
228
228
  assetOut,
229
229
  slippage,
@@ -242,14 +242,14 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
242
242
  tickSpacing,
243
243
  )
244
244
 
245
- const isExactInput = amountInWei !== undefined
245
+ const isExactInput = amountInRaw !== undefined
246
246
 
247
247
  let actions: Hex
248
248
  let actionParams: Hex[]
249
249
 
250
250
  if (isExactInput) {
251
251
  const minAmountOut =
252
- (quote.amountOutWei * BigInt(Math.round((1 - slippage) * 10000))) / 10000n
252
+ (quote.amountOutRaw * BigInt(Math.round((1 - slippage) * 10000))) / 10000n
253
253
 
254
254
  actions =
255
255
  `0x${[SWAP_EXACT_IN_SINGLE, SETTLE_ALL, TAKE_ALL].map((a) => a.toString(16).padStart(2, '0')).join('')}` as Hex
@@ -259,18 +259,18 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
259
259
  {
260
260
  poolKey,
261
261
  zeroForOne,
262
- amountIn: amountInWei,
262
+ amountIn: amountInRaw,
263
263
  amountOutMinimum: minAmountOut,
264
264
  hookData: '0x',
265
265
  },
266
266
  ]),
267
- encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn, amountInWei]),
267
+ encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn, amountInRaw]),
268
268
  encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenOut, minAmountOut]),
269
269
  ]
270
270
  } else {
271
271
  const maxAmountIn =
272
- quote.amountInWei +
273
- (quote.amountInWei * BigInt(Math.round(slippage * 10000))) / 10000n
272
+ quote.amountInRaw +
273
+ (quote.amountInRaw * BigInt(Math.round(slippage * 10000))) / 10000n
274
274
 
275
275
  actions =
276
276
  `0x${[SWAP_EXACT_OUT_SINGLE, SETTLE_ALL, TAKE_ALL].map((a) => a.toString(16).padStart(2, '0')).join('')}` as Hex
@@ -280,7 +280,7 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
280
280
  {
281
281
  poolKey,
282
282
  zeroForOne,
283
- amountOut: quote.amountOutWei,
283
+ amountOut: quote.amountOutRaw,
284
284
  amountInMaximum: maxAmountIn,
285
285
  hookData: '0x',
286
286
  },
@@ -288,7 +288,7 @@ export function encodeUniversalRouterSwap(params: EncodeSwapParams): Hex {
288
288
  encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [tokenIn, maxAmountIn]),
289
289
  encodeAbiParameters(CURRENCY_AMOUNT_PARAMS, [
290
290
  tokenOut,
291
- quote.amountOutWei,
291
+ quote.amountOutRaw,
292
292
  ]),
293
293
  ]
294
294
  }
@@ -0,0 +1,84 @@
1
+ import { type Address, encodeAbiParameters, keccak256 } from 'viem'
2
+
3
+ import { UNISWAP } from '@/constants/providers.js'
4
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import { assetPairs } from '@/swap/core/markets.js'
6
+ import { POOL_KEY_ABI_TYPE } from '@/swap/providers/uniswap/abis.js'
7
+ import type { Asset } from '@/types/asset.js'
8
+ import type { SwapMarket } from '@/types/swap/index.js'
9
+
10
+ import type { UniswapMarketConfig } from './types.js'
11
+
12
+ /** Validated Uniswap market config with required fee and tickSpacing */
13
+ export type ValidUniswapConfig = UniswapMarketConfig & {
14
+ fee: number
15
+ tickSpacing: number
16
+ }
17
+
18
+ /**
19
+ * Filter market allowlist to configs with required fee and tickSpacing.
20
+ */
21
+ export function getValidMarketConfigs(
22
+ allowlist?: UniswapMarketConfig[],
23
+ ): ValidUniswapConfig[] {
24
+ return (allowlist ?? []).filter(
25
+ (f): f is ValidUniswapConfig =>
26
+ f.fee !== undefined && f.tickSpacing !== undefined,
27
+ )
28
+ }
29
+
30
+ /**
31
+ * Expand a single UniswapMarketConfig into SwapMarket objects for a given chain.
32
+ * Used as the `toMarkets` callback for shared findMarket/expandMarkets.
33
+ */
34
+ export function configToMarkets(
35
+ config: ValidUniswapConfig,
36
+ chainId: SupportedChainId,
37
+ asset?: Asset,
38
+ ): SwapMarket[] {
39
+ return assetPairs(config.assets, asset)
40
+ .map(([a, b]) =>
41
+ pairToMarket(a, b, chainId, config.fee, config.tickSpacing),
42
+ )
43
+ .filter((m): m is SwapMarket => m !== null)
44
+ }
45
+
46
+ /**
47
+ * Build a SwapMarket from two assets and V4 pool parameters.
48
+ * Computes a deterministic poolId from the sorted pool key.
49
+ * @returns SwapMarket, or null if either asset lacks an address on this chain
50
+ */
51
+ function pairToMarket(
52
+ assetA: Asset,
53
+ assetB: Asset,
54
+ chainId: SupportedChainId,
55
+ fee: number,
56
+ tickSpacing: number,
57
+ ): SwapMarket | null {
58
+ const addrA = assetA.address[chainId]
59
+ const addrB = assetB.address[chainId]
60
+ if (!addrA || addrA === 'native' || !addrB || addrB === 'native') return null
61
+
62
+ const [currency0, currency1] =
63
+ addrA.toLowerCase() < addrB.toLowerCase() ? [addrA, addrB] : [addrB, addrA]
64
+
65
+ // V4 requires currency0 < currency1 for deterministic pool keys
66
+ // PoolId = keccak256(abi.encode(PoolKey)) per V4's PoolIdLibrary
67
+ // @see https://github.com/Uniswap/v4-core/blob/main/src/types/PoolId.sol
68
+ const poolId = keccak256(
69
+ encodeAbiParameters(POOL_KEY_ABI_TYPE, [
70
+ currency0 as Address,
71
+ currency1 as Address,
72
+ fee,
73
+ tickSpacing,
74
+ '0x0000000000000000000000000000000000000000' as Address,
75
+ ]),
76
+ )
77
+
78
+ return {
79
+ marketId: { poolId, chainId },
80
+ assets: [assetA, assetB],
81
+ fee,
82
+ provider: UNISWAP,
83
+ }
84
+ }
@@ -14,11 +14,12 @@ export interface UniswapMarketConfig extends SwapMarketConfig {
14
14
  }
15
15
 
16
16
  /**
17
- * Uniswap swap provider configuration
17
+ * Uniswap swap provider configuration.
18
+ * Provider-level values override the shared SwapGlobalConfig.
18
19
  */
19
20
  export interface UniswapSwapProviderConfig extends SwapProviderConfig {
20
21
  marketAllowlist?: UniswapMarketConfig[]
21
22
  marketBlocklist?: UniswapMarketConfig[]
22
- /** Permit2 approval expiry in seconds from now. Defaults to 30 days. */
23
- permit2ExpirySeconds?: number
23
+ /** Permit2 sub-approval expiration override in seconds from now. */
24
+ permit2ExpirationSeconds?: number
24
25
  }
@@ -0,0 +1,226 @@
1
+ import { formatUnits } from 'viem'
2
+
3
+ import { VELODROME } from '@/constants/providers.js'
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'
7
+ import { SwapProvider } from '@/swap/core/SwapProvider.js'
8
+ import {
9
+ getChainConfig,
10
+ getSupportedChainIds,
11
+ getValidMarketConfigs,
12
+ } from '@/swap/providers/velodrome/config.js'
13
+ import {
14
+ buildTokenApproval,
15
+ encodePoolSwap,
16
+ fetchPoolQuote,
17
+ } from '@/swap/providers/velodrome/encoding/index.js'
18
+ import {
19
+ configToMarkets,
20
+ resolvePoolConfig,
21
+ } from '@/swap/providers/velodrome/markets.js'
22
+ import type {
23
+ VelodromeMarketConfig,
24
+ VelodromeSwapProviderConfig,
25
+ } from '@/swap/providers/velodrome/types.js'
26
+ import type { Asset } from '@/types/asset.js'
27
+ import type {
28
+ GetSwapMarketParams,
29
+ GetSwapMarketsParams,
30
+ ResolvedSwapParams,
31
+ SwapMarket,
32
+ SwapQuote,
33
+ SwapTransaction,
34
+ } from '@/types/swap/index.js'
35
+ import { getAssetAddress, isNativeAsset } from '@/utils/assets.js'
36
+
37
+ /**
38
+ * Velodrome/Aerodrome swap provider for OP Stack chains.
39
+ * Supports v2 AMM pools, CL/Slipstream concentrated liquidity pools,
40
+ * v2 routers (Optimism, Base), leaf routers (Relay chains), and Universal Router (Base Sepolia).
41
+ */
42
+ export class VelodromeSwapProvider extends SwapProvider<VelodromeSwapProviderConfig> {
43
+ /** @returns Chain IDs where Velodrome/Aerodrome contracts are deployed */
44
+ protocolSupportedChainIds(): SupportedChainId[] {
45
+ return getSupportedChainIds()
46
+ }
47
+
48
+ /**
49
+ * Build a swap transaction from raw parameters.
50
+ * @param params - Resolved swap parameters (amounts as raw bigint, defaults applied)
51
+ * @returns Transaction data ready for wallet execution
52
+ * @throws If amountOut is provided (Velodrome only supports exact-input swaps)
53
+ */
54
+ protected async _execute(
55
+ params: ResolvedSwapParams,
56
+ ): Promise<SwapTransaction> {
57
+ if (params.amountOutRaw !== undefined) {
58
+ throw new Error(
59
+ 'Velodrome/Aerodrome does not support exact-output swaps. Provide amountIn instead of amountOut.',
60
+ )
61
+ }
62
+
63
+ const swapQuote = await this._getQuote({
64
+ assetIn: params.assetIn,
65
+ assetOut: params.assetOut,
66
+ amountIn: params.amountInRaw
67
+ ? parseFloat(
68
+ formatUnits(params.amountInRaw, params.assetIn.metadata.decimals),
69
+ )
70
+ : undefined,
71
+ chainId: params.chainId,
72
+ slippage: params.slippage,
73
+ deadline: params.deadline,
74
+ recipient: params.recipient,
75
+ })
76
+ return this.buildSwapTransactions(swapQuote)
77
+ }
78
+
79
+ /**
80
+ * Find a specific market by poolId from the allowlist.
81
+ * @param params - Pool ID and chain to look up
82
+ * @returns Matching market
83
+ * @throws If no matching market found in config
84
+ */
85
+ protected async _getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
86
+ return findMarket(
87
+ getValidMarketConfigs(this._config.marketAllowlist),
88
+ params.chainId,
89
+ params.poolId,
90
+ configToMarkets,
91
+ )
92
+ }
93
+
94
+ /**
95
+ * Expand the market allowlist into concrete SwapMarket objects.
96
+ * @param params - Optional filters (chainId, asset)
97
+ * @returns All configured markets matching the filters
98
+ */
99
+ protected async _getMarkets(
100
+ params: GetSwapMarketsParams,
101
+ ): Promise<SwapMarket[]> {
102
+ return expandMarkets({
103
+ configs: getValidMarketConfigs(this._config.marketAllowlist),
104
+ filters: params,
105
+ supportedChainIds: this.supportedChainIds(),
106
+ toMarkets: configToMarkets,
107
+ })
108
+ }
109
+
110
+ /**
111
+ * Get a full swap quote with pricing, slippage bounds, and pre-built execution data.
112
+ * @param params - Quote parameters (assets, amounts, chain, slippage, deadline)
113
+ * @returns SwapQuote with amounts, price, route, and encoded calldata
114
+ * @throws If amountOut is provided (Velodrome only supports exact-input)
115
+ */
116
+ protected async _getQuote(
117
+ params: SwapQuoteParamsResolved,
118
+ ): Promise<SwapQuote> {
119
+ const { chainId, assetIn, assetOut } = params
120
+
121
+ if (params.amountOut !== undefined) {
122
+ throw new Error(
123
+ 'Velodrome/Aerodrome does not support exact-output swaps. Provide amountIn instead of amountOut.',
124
+ )
125
+ }
126
+
127
+ const chain = getChainConfig(chainId)
128
+ const publicClient = this.chainManager.getPublicClient(chainId)
129
+ const poolConfig = this.resolveVelodromeMarketConfig(
130
+ assetIn,
131
+ assetOut,
132
+ chainId,
133
+ )
134
+ const { slippage, now, deadline, recipient, amountInRaw } =
135
+ this.resolveQuoteDefaults(params)
136
+
137
+ const { internalQuote, providerContext } = await fetchPoolQuote(
138
+ poolConfig,
139
+ { assetIn, assetOut, amountInRaw, chainId, publicClient, chain },
140
+ )
141
+
142
+ const { amountOutMinRaw, amountOutMin } = this.computeSlippageBounds(
143
+ internalQuote.amountOutRaw,
144
+ slippage,
145
+ assetOut,
146
+ )
147
+
148
+ const swapCalldata = encodePoolSwap(poolConfig, {
149
+ assetIn,
150
+ assetOut,
151
+ amountInRaw,
152
+ amountOutMinRaw,
153
+ recipient,
154
+ deadline,
155
+ chainId,
156
+ chain,
157
+ })
158
+
159
+ return {
160
+ assetIn,
161
+ assetOut,
162
+ chainId,
163
+ amountIn: internalQuote.amountIn,
164
+ amountInRaw,
165
+ amountOut: internalQuote.amountOut,
166
+ amountOutRaw: internalQuote.amountOutRaw,
167
+ amountOutMin,
168
+ amountOutMinRaw,
169
+ price: internalQuote.amountOut / internalQuote.amountIn,
170
+ priceInverse: internalQuote.amountIn / internalQuote.amountOut,
171
+ priceImpact: internalQuote.priceImpact,
172
+ route: internalQuote.route,
173
+ execution: {
174
+ swapCalldata,
175
+ routerAddress: chain.contracts.router,
176
+ value: isNativeAsset(assetIn) ? amountInRaw : 0n,
177
+ providerContext,
178
+ },
179
+ provider: VELODROME,
180
+ slippage,
181
+ deadline,
182
+ quotedAt: now,
183
+ expiresAt: deadline,
184
+ gasEstimate: internalQuote.gasEstimate,
185
+ quotedRecipient: recipient,
186
+ }
187
+ }
188
+
189
+ protected async _buildApprovals(quote: SwapQuote) {
190
+ const chain = getChainConfig(quote.chainId)
191
+ const publicClient = this.chainManager.getPublicClient(quote.chainId)
192
+
193
+ const tokenApproval = isNativeAsset(quote.assetIn)
194
+ ? undefined
195
+ : await buildTokenApproval(
196
+ getAssetAddress(quote.assetIn, quote.chainId),
197
+ chain.contracts.router,
198
+ chain.metadata.routerType,
199
+ quote.amountInRaw,
200
+ quote.recipient!,
201
+ publicClient,
202
+ )
203
+
204
+ return { tokenApproval }
205
+ }
206
+
207
+ /**
208
+ * Resolve market config to a discriminated pool config.
209
+ * @throws If pair not in allowlist, or has both/neither stable and tickSpacing
210
+ */
211
+ private resolveVelodromeMarketConfig(
212
+ assetIn: Asset,
213
+ assetOut: Asset,
214
+ chainId: SupportedChainId,
215
+ ) {
216
+ const config = this.resolveMarketConfig(assetIn, assetOut, chainId) as
217
+ | VelodromeMarketConfig
218
+ | undefined
219
+ if (!config) {
220
+ throw new Error(
221
+ `No market config for pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol}`,
222
+ )
223
+ }
224
+ return resolvePoolConfig(config)
225
+ }
226
+ }