@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,7 +1,15 @@
1
1
  import type { Address } from 'viem'
2
+ import { formatUnits } from 'viem'
2
3
 
3
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import { ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
6
+ import type {
7
+ SwapExecuteParamsResolved,
8
+ SwapQuoteParamsResolved,
9
+ } from '@/ens/types.js'
4
10
  import type { ChainManager } from '@/services/ChainManager.js'
11
+ import { UNIVERSAL_ROUTER_MSG_SENDER } from '@/swap/core/markets.js'
12
+ import type { SwapSettings } from '@/types/actions.js'
5
13
  import type { Asset } from '@/types/asset.js'
6
14
  import type {
7
15
  GetSwapMarketParams,
@@ -10,23 +18,23 @@ import type {
10
18
  SwapExecuteParams,
11
19
  SwapMarket,
12
20
  SwapMarketConfig,
13
- SwapPrice,
14
- SwapPriceParams,
15
21
  SwapProviderConfig,
22
+ SwapQuote,
16
23
  SwapTransaction,
24
+ SwapTransactionData,
17
25
  } from '@/types/swap/index.js'
18
26
  import type { TransactionData } from '@/types/transaction.js'
19
- import {
20
- getAssetAddress,
21
- isNativeAsset,
22
- parseAssetAmount,
23
- } from '@/utils/assets.js'
24
27
  import {
25
28
  buildPermit2ApprovalTx,
26
29
  buildTokenApprovalTx,
27
30
  checkPermit2Allowance,
28
31
  checkTokenAllowance,
29
- } from '@/utils/permit2.js'
32
+ } from '@/utils/approve.js'
33
+ import {
34
+ getAssetAddress,
35
+ isNativeAsset,
36
+ parseAssetAmount,
37
+ } from '@/utils/assets.js'
30
38
  import {
31
39
  validateAmountPositiveIfExists,
32
40
  validateAmountProvided,
@@ -35,26 +43,45 @@ import {
35
43
  validateNotBothAmounts,
36
44
  validateNotSameAsset,
37
45
  validateNotZeroAddress,
46
+ validateRecipient,
38
47
  validateSlippage,
39
48
  } from '@/utils/validation.js'
40
49
 
41
- const DEFAULT_SLIPPAGE = 0.005
42
- const DEFAULT_DEADLINE_OFFSET = 60
43
- const DEFAULT_MAX_SLIPPAGE = 0.5
50
+ /** Hardcoded fallbacks when neither provider nor global config sets a value */
51
+ const DEFAULTS = {
52
+ slippage: 0.005,
53
+ maxSlippage: 0.5,
54
+ quoteExpirationSeconds: 60,
55
+ permit2ExpirationSeconds: 2_592_000, // 30 days
56
+ } as const
57
+
58
+ /** Basis points denominator for slippage calculations (1 bp = 0.01%) */
59
+ const BPS_DENOMINATOR = 10000n
60
+
61
+ /** Field used to distinguish a SwapQuote from raw SwapExecuteParams */
62
+ export const QUOTE_DISCRIMINATOR = 'quotedAt' as const
44
63
 
45
64
  /**
46
65
  * Abstract base class for swap providers.
47
66
  * Public methods handle validation and conversion,
48
67
  * protected abstract methods implement provider-specific logic.
68
+ *
69
+ * Settings are resolved with provider → global → hardcoded default precedence.
49
70
  */
50
71
  export abstract class SwapProvider<
51
72
  TConfig extends SwapProviderConfig = SwapProviderConfig,
52
73
  > {
53
74
  protected readonly _config: TConfig
75
+ protected readonly _settings: SwapSettings
54
76
  protected readonly chainManager: ChainManager
55
77
 
56
- constructor(config: TConfig, chainManager: ChainManager) {
78
+ constructor(
79
+ config: TConfig,
80
+ chainManager: ChainManager,
81
+ settings?: SwapSettings,
82
+ ) {
57
83
  this._config = config
84
+ this._settings = settings ?? {}
58
85
  this.chainManager = chainManager
59
86
  }
60
87
 
@@ -62,49 +89,144 @@ export abstract class SwapProvider<
62
89
  return this._config
63
90
  }
64
91
 
92
+ /** Resolved default slippage: provider → global → 0.005 */
65
93
  get defaultSlippage(): number {
66
- return this._config.defaultSlippage ?? DEFAULT_SLIPPAGE
94
+ return (
95
+ this._config.defaultSlippage ??
96
+ this._settings.defaultSlippage ??
97
+ DEFAULTS.slippage
98
+ )
99
+ }
100
+
101
+ /** Resolved max slippage: provider → global → 0.5 */
102
+ get maxSlippage(): number {
103
+ return (
104
+ this._config.maxSlippage ??
105
+ this._settings.maxSlippage ??
106
+ DEFAULTS.maxSlippage
107
+ )
108
+ }
109
+
110
+ /** Resolved quote expiration in seconds: provider → global → 60 */
111
+ get quoteExpirationSeconds(): number {
112
+ return (
113
+ this._config.quoteExpirationSeconds ??
114
+ this._settings.quoteExpirationSeconds ??
115
+ DEFAULTS.quoteExpirationSeconds
116
+ )
117
+ }
118
+
119
+ /** Resolved Permit2 sub-approval expiration in seconds: provider → global → 30 days */
120
+ get permit2ExpirationSeconds(): number {
121
+ return (
122
+ (this._config as { permit2ExpirationSeconds?: number })
123
+ .permit2ExpirationSeconds ??
124
+ this._settings.permit2ExpirationSeconds ??
125
+ DEFAULTS.permit2ExpirationSeconds
126
+ )
67
127
  }
68
128
 
69
129
  /**
70
- * Execute a token swap
71
- * @param params - Swap parameters including assets, amounts, and chain
72
- * @returns Swap transaction data ready for execution
130
+ * Execute a token swap.
131
+ * Accepts either raw params (re-quotes internally) or a pre-built SwapQuote (skips re-quoting).
132
+ * @param params - Swap parameters or a pre-built SwapQuote from getQuote()
133
+ * @returns Transaction data ready for wallet execution
73
134
  */
74
- async execute(params: SwapExecuteParams): Promise<SwapTransaction> {
75
- this.executeValidations(params)
76
- const resolvedParams = this.resolveParams(params)
77
- validateSlippage(
78
- resolvedParams.slippage,
79
- this._config.maxSlippage ?? DEFAULT_MAX_SLIPPAGE,
80
- )
81
- return this._execute(resolvedParams)
135
+ async execute(
136
+ params: SwapExecuteParamsResolved | SwapQuote,
137
+ ): Promise<SwapTransaction> {
138
+ if (QUOTE_DISCRIMINATOR in params) {
139
+ this.validateSwapExecute(params)
140
+ return this.executeFromQuote(params)
141
+ }
142
+
143
+ this.validateSwapExecute(params)
144
+
145
+ // Raw params only
146
+ validateNotBothAmounts(params.amountIn, params.amountOut)
147
+ validateNotZeroAddress(params.walletAddress, 'walletAddress')
148
+ return this._execute(this.resolveParams(params))
82
149
  }
83
150
 
84
- /** Get price quote for a swap */
85
- async getPrice(params: SwapPriceParams): Promise<SwapPrice> {
151
+ /**
152
+ * Get a full swap quote with pre-built execution data.
153
+ * The returned SwapQuote can be passed directly to execute() to skip re-quoting.
154
+ * @param params - Quote parameters (assets, amounts, chain, slippage)
155
+ * @returns SwapQuote with pricing, amounts, and pre-encoded calldata
156
+ */
157
+ async getQuote(params: SwapQuoteParamsResolved): Promise<SwapQuote> {
86
158
  validateChainSupported(params.chainId, this.supportedChainIds())
87
- return this._getPrice(params)
159
+ return this._getQuote(params)
88
160
  }
89
161
 
90
- /** Get a specific swap market by ID */
162
+ /**
163
+ * Get a specific swap market by ID.
164
+ * Validates the market is not blocklisted before returning.
165
+ * @param params - Market identifier (poolId + chainId)
166
+ * @returns Market information including assets and fee tier
167
+ * @throws If market is blocklisted
168
+ */
91
169
  async getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
92
170
  validateChainSupported(params.chainId, this.supportedChainIds())
93
- return this._getMarket(params)
171
+ const market = await this._getMarket(params)
172
+ this.validateMarketAllowed(
173
+ market.assets[0],
174
+ market.assets[1],
175
+ params.chainId,
176
+ )
177
+ return market
94
178
  }
95
179
 
96
- /** Get available swap markets, optionally filtered by chainId or asset */
180
+ /**
181
+ * Get available swap markets, optionally filtered.
182
+ * Excludes blocklisted markets from results.
183
+ * @param params - Optional filters (chainId, asset)
184
+ * @returns Array of non-blocked markets from this provider
185
+ */
97
186
  async getMarkets(params: GetSwapMarketsParams = {}): Promise<SwapMarket[]> {
98
187
  if (params.chainId) {
99
188
  validateChainSupported(params.chainId, this.supportedChainIds())
100
189
  }
101
- return this._getMarkets(params)
190
+ const markets = await this._getMarkets(params)
191
+ return this.filterBlockedMarkets(markets)
192
+ }
193
+
194
+ /**
195
+ * Effective supported chain IDs.
196
+ * @description Intersection of the protocol's supported chains,
197
+ * the Actions SDK's known chains, and the developer's ActionsConfig.chains.
198
+ */
199
+ supportedChainIds(): SupportedChainId[] {
200
+ const configuredChains = this.chainManager.getSupportedChains()
201
+ return this.protocolSupportedChainIds().filter(
202
+ (id) =>
203
+ (ACTIONS_SUPPORTED_CHAIN_IDS as readonly number[]).includes(id) &&
204
+ configuredChains.includes(id),
205
+ )
102
206
  }
103
207
 
104
208
  isChainSupported(chainId: SupportedChainId): boolean {
105
209
  return this.supportedChainIds().includes(chainId)
106
210
  }
107
211
 
212
+ /**
213
+ * Check if this provider supports a given market (asset pair on chain).
214
+ * Returns true if the pair passes allowlist/blocklist checks.
215
+ */
216
+ isMarketSupported(
217
+ assetIn: Asset,
218
+ assetOut: Asset,
219
+ chainId: SupportedChainId,
220
+ ): boolean {
221
+ if (!this.isChainSupported(chainId)) return false
222
+ try {
223
+ this.validateMarketAllowed(assetIn, assetOut, chainId)
224
+ return true
225
+ } catch {
226
+ return false
227
+ }
228
+ }
229
+
108
230
  // ─────────────────────────────────────────────────────────────────────────────
109
231
  // Protected helpers
110
232
  // ─────────────────────────────────────────────────────────────────────────────
@@ -145,6 +267,41 @@ export abstract class SwapProvider<
145
267
  }
146
268
  }
147
269
 
270
+ /**
271
+ * Resolve common quote parameters with provider defaults.
272
+ * @param params - Raw quote params from the user
273
+ * @returns Resolved slippage, deadline, recipient, amountInRaw, and current timestamp
274
+ */
275
+ protected resolveQuoteDefaults(params: SwapQuoteParamsResolved) {
276
+ const slippage = params.slippage ?? this.defaultSlippage
277
+ const now = Math.floor(Date.now() / 1000)
278
+ const deadline = params.deadline ?? now + this.quoteExpirationSeconds
279
+ const recipient = params.recipient ?? UNIVERSAL_ROUTER_MSG_SENDER
280
+ const amountInRaw = parseAssetAmount(params.assetIn, params.amountIn ?? 1)
281
+ return { slippage, now, deadline, recipient, amountInRaw }
282
+ }
283
+
284
+ /**
285
+ * Compute minimum output amount after slippage.
286
+ * @param amountOutRaw - Expected output as raw bigint
287
+ * @param slippage - Slippage tolerance as decimal (0.005 = 0.5%)
288
+ * @param assetOut - Output asset (for decimal conversion)
289
+ * @returns Raw and human-readable minimum output amounts
290
+ */
291
+ protected computeSlippageBounds(
292
+ amountOutRaw: bigint,
293
+ slippage: number,
294
+ assetOut: Asset,
295
+ ): { amountOutMinRaw: bigint; amountOutMin: number } {
296
+ const slippageBps = BigInt(Math.round(slippage * Number(BPS_DENOMINATOR)))
297
+ const amountOutMinRaw =
298
+ (amountOutRaw * (BPS_DENOMINATOR - slippageBps)) / BPS_DENOMINATOR
299
+ const amountOutMin = parseFloat(
300
+ formatUnits(amountOutMinRaw, assetOut.metadata.decimals),
301
+ )
302
+ return { amountOutMinRaw, amountOutMin }
303
+ }
304
+
148
305
  protected resolveMarketConfig(
149
306
  assetIn: Asset,
150
307
  assetOut: Asset,
@@ -162,18 +319,17 @@ export abstract class SwapProvider<
162
319
  /**
163
320
  * Build Permit2 approval transactions for an ERC20 swap input.
164
321
  * Skipped for native assets. Checks both ERC20→Permit2 and Permit2→spender allowances in parallel.
322
+ * Uses the resolved `permit2ExpirationSeconds` from provider → global → default.
165
323
  * @param params - Resolved swap params (wallet address, asset info, chain)
166
- * @param requiredAmount - Amount in wei that must be approved
324
+ * @param requiredAmount - Amount as raw bigint that must be approved
167
325
  * @param permit2Address - Permit2 contract address
168
326
  * @param permit2Spender - The router/contract that Permit2 should approve (e.g. Universal Router)
169
- * @param permit2ExpirySeconds - Optional custom expiry for the Permit2 approval
170
327
  */
171
328
  protected async buildPermit2Approvals(
172
329
  params: ResolvedSwapParams,
173
330
  requiredAmount: bigint,
174
331
  permit2Address: Address,
175
332
  permit2Spender: Address,
176
- permit2ExpirySeconds?: number,
177
333
  ): Promise<{
178
334
  tokenApproval: TransactionData | undefined
179
335
  permit2Approval: TransactionData | undefined
@@ -216,43 +372,110 @@ export abstract class SwapProvider<
216
372
  token,
217
373
  spender: permit2Spender,
218
374
  amount: requiredAmount,
219
- expirySeconds: permit2ExpirySeconds,
375
+ expirySeconds: this.permit2ExpirationSeconds,
220
376
  })
221
377
  : undefined
222
378
 
223
379
  return { tokenApproval, permit2Approval }
224
380
  }
225
381
 
382
+ /**
383
+ * Build a SwapTransaction from a quote by fetching approvals and wrapping the swap calldata.
384
+ * Used by both the quote-execute path and provider _execute implementations.
385
+ * @param quote - SwapQuote with recipient set for allowance checks
386
+ */
387
+ protected async buildSwapTransactions(
388
+ quote: SwapQuote,
389
+ ): Promise<SwapTransaction> {
390
+ const approvals = await this._buildApprovals(quote)
391
+
392
+ const swapTx: TransactionData = {
393
+ to: quote.execution.routerAddress,
394
+ data: quote.execution.swapCalldata,
395
+ value: quote.execution.value,
396
+ }
397
+
398
+ return {
399
+ amountIn: quote.amountIn,
400
+ amountOut: quote.amountOut,
401
+ amountInRaw: quote.amountInRaw,
402
+ amountOutRaw: quote.amountOutRaw,
403
+ assetIn: quote.assetIn,
404
+ assetOut: quote.assetOut,
405
+ price: quote.price,
406
+ priceImpact: quote.priceImpact,
407
+ transactionData: { ...approvals, swap: swapTx },
408
+ }
409
+ }
410
+
226
411
  // ─────────────────────────────────────────────────────────────────────────────
227
412
  // Private helpers
228
413
  // ─────────────────────────────────────────────────────────────────────────────
229
414
 
230
- private executeValidations(params: SwapExecuteParams): void {
231
- validateAmountProvided(params.amountIn, params.amountOut)
232
- validateAmountPositiveIfExists(params.amountIn)
233
- validateAmountPositiveIfExists(params.amountOut)
234
- validateNotBothAmounts(params.amountIn, params.amountOut)
235
- validateNotSameAsset(params.assetIn, params.assetOut)
236
- validateNotZeroAddress(params.walletAddress, 'walletAddress')
237
- if (params.recipient) {
238
- validateNotZeroAddress(params.recipient, 'recipient')
415
+ private async executeFromQuote(quote: SwapQuote): Promise<SwapTransaction> {
416
+ this.validateQuoteExpiration(quote)
417
+ validateNotZeroAddress(quote.execution.routerAddress, 'routerAddress')
418
+
419
+ if (!quote.recipient) {
420
+ throw new Error(
421
+ 'SwapQuote.recipient is required for execution. Pass the quote through WalletSwapNamespace.execute() which injects the wallet address.',
422
+ )
239
423
  }
424
+
425
+ // If the recipient changed since the quote was built (e.g. quote from
426
+ // ActionsSwapNamespace executed through WalletSwapNamespace), re-encode
427
+ // calldata with the correct recipient to prevent tokens going to the wrong address.
428
+ if (quote.recipient !== quote.quotedRecipient) {
429
+ const freshQuote = await this._getQuote({
430
+ assetIn: quote.assetIn,
431
+ assetOut: quote.assetOut,
432
+ amountIn: quote.amountIn,
433
+ chainId: quote.chainId,
434
+ slippage: quote.slippage,
435
+ deadline: quote.deadline,
436
+ recipient: quote.recipient,
437
+ })
438
+ return this.buildSwapTransactions({
439
+ ...freshQuote,
440
+ recipient: quote.recipient,
441
+ })
442
+ }
443
+
444
+ return this.buildSwapTransactions(quote)
445
+ }
446
+
447
+ private validateSwapExecute(params: SwapExecuteParams | SwapQuote): void {
448
+ validateNotSameAsset(params.assetIn, params.assetOut)
240
449
  validateChainSupported(params.chainId, this.supportedChainIds())
241
450
  this.validateMarketAllowed(params.assetIn, params.assetOut, params.chainId)
242
451
  validateAssetOnChain(params.assetIn, params.chainId)
243
452
  validateAssetOnChain(params.assetOut, params.chainId)
453
+ validateAmountProvided(params.amountIn, params.amountOut)
454
+ validateAmountPositiveIfExists(params.amountIn)
455
+ validateAmountPositiveIfExists(params.amountOut)
456
+ validateSlippage(params.slippage ?? this.defaultSlippage, this.maxSlippage)
457
+ validateRecipient('recipient' in params ? params.recipient : undefined)
458
+ }
459
+
460
+ private validateQuoteExpiration(quote: SwapQuote): void {
461
+ const now = Math.floor(Date.now() / 1000)
462
+ if (now >= quote.expiresAt) {
463
+ throw new Error(
464
+ `Quote expired at ${quote.expiresAt}, current time is ${now}`,
465
+ )
466
+ }
244
467
  }
245
468
 
246
- private resolveParams(params: SwapExecuteParams): ResolvedSwapParams {
469
+ private resolveParams(params: SwapExecuteParamsResolved): ResolvedSwapParams {
247
470
  return {
248
- amountInWei: parseAssetAmount(params.assetIn, params.amountIn),
249
- amountOutWei: parseAssetAmount(params.assetOut, params.amountOut),
471
+ amountInRaw: parseAssetAmount(params.assetIn, params.amountIn),
472
+ amountOutRaw: parseAssetAmount(params.assetOut, params.amountOut),
250
473
  assetIn: params.assetIn,
251
474
  assetOut: params.assetOut,
252
475
  slippage: params.slippage ?? this.defaultSlippage,
253
476
  deadline:
254
477
  params.deadline ??
255
- Math.floor(Date.now() / 1000) + DEFAULT_DEADLINE_OFFSET,
478
+ Math.floor(Date.now() / 1000) + this.quoteExpirationSeconds,
256
479
  // Send output tokens to specified recipient, or back to the initiating wallet
257
480
  recipient: params.recipient ?? params.walletAddress,
258
481
  walletAddress: params.walletAddress,
@@ -260,6 +483,25 @@ export abstract class SwapProvider<
260
483
  }
261
484
  }
262
485
 
486
+ /**
487
+ * Filter out markets whose asset pairs appear in the blocklist.
488
+ */
489
+ private filterBlockedMarkets(markets: SwapMarket[]): SwapMarket[] {
490
+ const { marketBlocklist } = this._config
491
+ if (!marketBlocklist?.length) return markets
492
+
493
+ return markets.filter((market) => {
494
+ const [assetA, assetB] = market.assets
495
+ const blocked = this.findMatchingConfig(
496
+ assetA,
497
+ assetB,
498
+ market.marketId.chainId,
499
+ marketBlocklist,
500
+ )
501
+ return !blocked
502
+ })
503
+ }
504
+
263
505
  private findMatchingConfig(
264
506
  assetIn: Asset,
265
507
  assetOut: Asset,
@@ -301,13 +543,30 @@ export abstract class SwapProvider<
301
543
  // Abstract methods (implement in provider)
302
544
  // ─────────────────────────────────────────────────────────────────────────────
303
545
 
304
- abstract supportedChainIds(): SupportedChainId[]
546
+ /**
547
+ * Chain IDs supported by the underlying protocol.
548
+ * Each provider declares the chains its protocol is deployed on,
549
+ * without any SDK-level or developer-config filtering.
550
+ */
551
+ abstract protocolSupportedChainIds(): SupportedChainId[]
305
552
 
306
553
  protected abstract _execute(
307
554
  params: ResolvedSwapParams,
308
555
  ): Promise<SwapTransaction>
309
556
 
310
- protected abstract _getPrice(params: SwapPriceParams): Promise<SwapPrice>
557
+ protected abstract _getQuote(
558
+ params: SwapQuoteParamsResolved,
559
+ ): Promise<SwapQuote>
560
+
561
+ /**
562
+ * Build provider-specific approval transactions for a swap.
563
+ * Called by the base class during executeFromQuote with a validated recipient.
564
+ * @param quote - SwapQuote with recipient set to the real wallet address
565
+ * @returns Approval transactions needed before the swap (tokenApproval, permit2Approval)
566
+ */
567
+ protected abstract _buildApprovals(
568
+ quote: SwapQuote,
569
+ ): Promise<Omit<SwapTransactionData, 'swap'>>
311
570
 
312
571
  protected abstract _getMarket(
313
572
  params: GetSwapMarketParams,