@eth-optimism/actions-sdk 0.3.0 → 0.4.0

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