@eth-optimism/actions-sdk 0.2.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 (500) 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 -4
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -5
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +23 -9
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +68 -36
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +217 -2
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +744 -6
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/contracts.d.ts +4 -0
  16. package/dist/constants/contracts.d.ts.map +1 -0
  17. package/dist/constants/contracts.js +3 -0
  18. package/dist/constants/contracts.js.map +1 -0
  19. package/dist/constants/providers.d.ts +6 -0
  20. package/dist/constants/providers.d.ts.map +1 -0
  21. package/dist/constants/providers.js +6 -0
  22. package/dist/constants/providers.js.map +1 -0
  23. package/dist/constants/supportedChains.d.ts +2 -2
  24. package/dist/constants/supportedChains.d.ts.map +1 -1
  25. package/dist/constants/supportedChains.js +12 -2
  26. package/dist/constants/supportedChains.js.map +1 -1
  27. package/dist/index.d.ts +4 -4
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  32. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  33. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  34. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  35. package/dist/lend/core/LendProvider.d.ts +12 -14
  36. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  37. package/dist/lend/core/LendProvider.js +16 -31
  38. package/dist/lend/core/LendProvider.js.map +1 -1
  39. package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
  40. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  41. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  42. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  43. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  44. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  45. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  46. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  47. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  48. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  49. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  50. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  51. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  52. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  53. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  54. package/dist/lend/providers/aave/addresses.js +65 -60
  55. package/dist/lend/providers/aave/addresses.js.map +1 -1
  56. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  57. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  58. package/dist/lend/providers/aave/sdk.js +6 -28
  59. package/dist/lend/providers/aave/sdk.js.map +1 -1
  60. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  61. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  62. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  63. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  64. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  65. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  66. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -41
  67. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  68. package/dist/lend/providers/morpho/api.d.ts +3 -3
  69. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  70. package/dist/lend/providers/morpho/api.js +2 -2
  71. package/dist/lend/providers/morpho/api.js.map +1 -1
  72. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  73. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  74. package/dist/lend/providers/morpho/contracts.js +43 -10
  75. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  76. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  77. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  78. package/dist/lend/providers/morpho/sdk.js +67 -54
  79. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  80. package/dist/nodeActionsFactory.d.ts +1 -1
  81. package/dist/reactActionsFactory.d.ts +1 -1
  82. package/dist/services/ChainManager.d.ts +8 -8
  83. package/dist/services/ChainManager.d.ts.map +1 -1
  84. package/dist/services/ChainManager.js.map +1 -1
  85. package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
  86. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  87. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  88. package/dist/services/tokenBalance.d.ts +1 -1
  89. package/dist/services/tokenBalance.d.ts.map +1 -1
  90. package/dist/services/tokenBalance.js +31 -30
  91. package/dist/services/tokenBalance.js.map +1 -1
  92. package/dist/services/tokenBalance.spec.js +20 -24
  93. package/dist/services/tokenBalance.spec.js.map +1 -1
  94. package/dist/swap/__mocks__/MockSwapProvider.d.ts +50 -0
  95. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
  96. package/dist/swap/__mocks__/MockSwapProvider.js +161 -0
  97. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
  98. package/dist/swap/core/SwapProvider.d.ts +145 -0
  99. package/dist/swap/core/SwapProvider.d.ts.map +1 -0
  100. package/dist/swap/core/SwapProvider.js +359 -0
  101. package/dist/swap/core/SwapProvider.js.map +1 -0
  102. package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
  103. package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
  104. package/dist/swap/core/__tests__/SwapProvider.test.js +435 -0
  105. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
  106. package/dist/swap/core/markets.d.ts +47 -0
  107. package/dist/swap/core/markets.d.ts.map +1 -0
  108. package/dist/swap/core/markets.js +65 -0
  109. package/dist/swap/core/markets.js.map +1 -0
  110. package/dist/swap/index.d.ts +9 -0
  111. package/dist/swap/index.d.ts.map +1 -0
  112. package/dist/swap/index.js +9 -0
  113. package/dist/swap/index.js.map +1 -0
  114. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
  115. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
  116. package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
  117. package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
  118. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +73 -0
  119. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
  120. package/dist/swap/namespaces/BaseSwapNamespace.js +181 -0
  121. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
  122. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +34 -0
  123. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
  124. package/dist/swap/namespaces/WalletSwapNamespace.js +84 -0
  125. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
  126. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
  127. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
  128. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +245 -0
  129. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
  130. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
  131. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
  132. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +209 -0
  133. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
  134. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +35 -0
  135. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
  136. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +148 -0
  137. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
  138. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
  139. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
  140. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +258 -0
  141. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
  142. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
  143. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
  144. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
  145. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
  146. package/dist/swap/providers/uniswap/abis.d.ts +227 -0
  147. package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
  148. package/dist/swap/providers/uniswap/abis.js +138 -0
  149. package/dist/swap/providers/uniswap/abis.js.map +1 -0
  150. package/dist/swap/providers/uniswap/addresses.d.ts +26 -0
  151. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
  152. package/dist/swap/providers/uniswap/addresses.js +81 -0
  153. package/dist/swap/providers/uniswap/addresses.js.map +1 -0
  154. package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
  155. package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
  156. package/dist/swap/providers/uniswap/encoding.js +233 -0
  157. package/dist/swap/providers/uniswap/encoding.js.map +1 -0
  158. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  159. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  160. package/dist/swap/providers/uniswap/markets.js +48 -0
  161. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  162. package/dist/swap/providers/uniswap/types.d.ts +21 -0
  163. package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
  164. package/dist/swap/providers/uniswap/types.js +2 -0
  165. package/dist/swap/providers/uniswap/types.js.map +1 -0
  166. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
  167. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  168. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  169. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  170. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  171. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  172. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  173. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  174. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  175. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  176. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  177. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  178. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  179. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  180. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
  181. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  182. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  183. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  184. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  185. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  186. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  187. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  188. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  189. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  190. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  191. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  192. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  193. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  194. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  195. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  196. package/dist/swap/providers/velodrome/abis.js +257 -0
  197. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  198. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  199. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  200. package/dist/swap/providers/velodrome/addresses.js +57 -0
  201. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  202. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  203. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  204. package/dist/swap/providers/velodrome/config.js +29 -0
  205. package/dist/swap/providers/velodrome/config.js.map +1 -0
  206. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  207. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  208. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  209. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  210. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  211. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  212. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  213. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  214. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  215. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  216. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  217. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  218. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  219. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  220. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  221. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  222. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  223. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  224. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  225. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  226. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  227. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  228. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  229. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  230. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  231. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  232. package/dist/swap/providers/velodrome/markets.js +69 -0
  233. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  234. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  235. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  236. package/dist/swap/providers/velodrome/types.js +2 -0
  237. package/dist/swap/providers/velodrome/types.js.map +1 -0
  238. package/dist/types/actions.d.ts +60 -11
  239. package/dist/types/actions.d.ts.map +1 -1
  240. package/dist/types/asset.d.ts +7 -9
  241. package/dist/types/asset.d.ts.map +1 -1
  242. package/dist/types/chain.d.ts +2 -2
  243. package/dist/types/chain.d.ts.map +1 -1
  244. package/dist/types/index.d.ts +2 -0
  245. package/dist/types/index.d.ts.map +1 -1
  246. package/dist/types/index.js +2 -0
  247. package/dist/types/index.js.map +1 -1
  248. package/dist/types/lend/base.d.ts +9 -19
  249. package/dist/types/lend/base.d.ts.map +1 -1
  250. package/dist/types/lend/base.js.map +1 -1
  251. package/dist/types/lend/contracts.d.ts +2 -1
  252. package/dist/types/lend/contracts.d.ts.map +1 -1
  253. package/dist/types/providers.d.ts +21 -0
  254. package/dist/types/providers.d.ts.map +1 -0
  255. package/dist/types/providers.js +2 -0
  256. package/dist/types/providers.js.map +1 -0
  257. package/dist/types/swap/base.d.ts +338 -0
  258. package/dist/types/swap/base.d.ts.map +1 -0
  259. package/dist/types/swap/base.js +4 -0
  260. package/dist/types/swap/base.js.map +1 -0
  261. package/dist/types/swap/index.d.ts +2 -0
  262. package/dist/types/swap/index.d.ts.map +1 -0
  263. package/dist/types/swap/index.js +2 -0
  264. package/dist/types/swap/index.js.map +1 -0
  265. package/dist/types/transaction.d.ts +14 -0
  266. package/dist/types/transaction.d.ts.map +1 -0
  267. package/dist/types/transaction.js +2 -0
  268. package/dist/types/transaction.js.map +1 -0
  269. package/dist/utils/approve.d.ts +82 -0
  270. package/dist/utils/approve.d.ts.map +1 -0
  271. package/dist/utils/approve.js +134 -0
  272. package/dist/utils/approve.js.map +1 -0
  273. package/dist/utils/approve.test.d.ts +2 -0
  274. package/dist/utils/approve.test.d.ts.map +1 -0
  275. package/dist/utils/approve.test.js +203 -0
  276. package/dist/utils/approve.test.js.map +1 -0
  277. package/dist/utils/assets.d.ts +10 -5
  278. package/dist/utils/assets.d.ts.map +1 -1
  279. package/dist/utils/assets.js +14 -11
  280. package/dist/utils/assets.js.map +1 -1
  281. package/dist/utils/assets.test.js +13 -1
  282. package/dist/utils/assets.test.js.map +1 -1
  283. package/dist/utils/validateAddresses.d.ts +32 -0
  284. package/dist/utils/validateAddresses.d.ts.map +1 -0
  285. package/dist/utils/validateAddresses.js +103 -0
  286. package/dist/utils/validateAddresses.js.map +1 -0
  287. package/dist/utils/validateAddresses.test.d.ts +2 -0
  288. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  289. package/dist/utils/validateAddresses.test.js +314 -0
  290. package/dist/utils/validateAddresses.test.js.map +1 -0
  291. package/dist/utils/validation.d.ts +12 -0
  292. package/dist/utils/validation.d.ts.map +1 -0
  293. package/dist/utils/validation.js +44 -0
  294. package/dist/utils/validation.js.map +1 -0
  295. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  296. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  297. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  298. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  299. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  300. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  301. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -10
  302. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  303. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
  304. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  305. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -7
  306. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  307. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +5 -6
  308. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  309. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
  310. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  311. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
  312. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  313. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +12 -12
  314. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  315. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -4
  316. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  317. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  318. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  319. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  320. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  321. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  322. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  323. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +5 -7
  324. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  325. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
  326. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  327. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  328. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +4 -6
  329. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  330. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
  331. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  332. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  333. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  334. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +8 -9
  335. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  336. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  337. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  338. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -6
  339. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  340. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
  341. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  342. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +4 -6
  343. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  344. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
  345. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  346. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -6
  347. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  348. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  349. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  350. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -6
  351. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  352. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +7 -2
  353. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  354. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
  355. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  356. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +5 -6
  357. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  358. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +6 -2
  359. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  360. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
  361. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  362. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -8
  363. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  364. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -4
  365. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  366. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  367. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  368. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  369. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  370. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  371. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  372. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -6
  373. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  374. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
  375. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  376. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  377. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  378. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  379. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -6
  380. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  381. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  382. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  383. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -6
  384. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  385. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  386. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  387. package/package.json +4 -3
  388. package/src/__mocks__/MockAssets.ts +54 -4
  389. package/src/__tests__/actions.test.ts +1 -5
  390. package/src/actions.ts +106 -71
  391. package/src/constants/assets.ts +792 -5
  392. package/src/constants/contracts.ts +5 -0
  393. package/src/constants/providers.ts +5 -0
  394. package/src/constants/supportedChains.ts +22 -2
  395. package/src/index.ts +76 -6
  396. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  397. package/src/lend/core/LendProvider.ts +28 -41
  398. package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
  399. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  400. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  401. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  402. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  403. package/src/lend/providers/aave/addresses.ts +82 -64
  404. package/src/lend/providers/aave/sdk.ts +11 -36
  405. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  406. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  407. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -42
  408. package/src/lend/providers/morpho/api.ts +7 -4
  409. package/src/lend/providers/morpho/contracts.ts +62 -13
  410. package/src/lend/providers/morpho/sdk.ts +85 -54
  411. package/src/services/ChainManager.ts +12 -21
  412. package/src/services/__mocks__/MockChainManager.ts +4 -7
  413. package/src/services/tokenBalance.spec.ts +20 -24
  414. package/src/services/tokenBalance.ts +39 -33
  415. package/src/swap/__mocks__/MockSwapProvider.ts +251 -0
  416. package/src/swap/core/SwapProvider.ts +577 -0
  417. package/src/swap/core/__tests__/SwapProvider.test.ts +620 -0
  418. package/src/swap/core/markets.ts +104 -0
  419. package/src/swap/index.ts +19 -0
  420. package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
  421. package/src/swap/namespaces/BaseSwapNamespace.ts +258 -0
  422. package/src/swap/namespaces/WalletSwapNamespace.ts +121 -0
  423. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +365 -0
  424. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +257 -0
  425. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +217 -0
  426. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
  427. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +369 -0
  428. package/src/swap/providers/uniswap/abis.ts +144 -0
  429. package/src/swap/providers/uniswap/addresses.ts +110 -0
  430. package/src/swap/providers/uniswap/encoding.ts +406 -0
  431. package/src/swap/providers/uniswap/markets.ts +84 -0
  432. package/src/swap/providers/uniswap/types.ts +25 -0
  433. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
  434. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  435. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  436. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
  437. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  438. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  439. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  440. package/src/swap/providers/velodrome/abis.ts +264 -0
  441. package/src/swap/providers/velodrome/addresses.ts +107 -0
  442. package/src/swap/providers/velodrome/config.ts +46 -0
  443. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  444. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  445. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  446. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  447. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  448. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  449. package/src/swap/providers/velodrome/markets.ts +100 -0
  450. package/src/swap/providers/velodrome/types.ts +30 -0
  451. package/src/types/actions.ts +68 -12
  452. package/src/types/asset.ts +12 -9
  453. package/src/types/chain.ts +2 -2
  454. package/src/types/index.ts +2 -0
  455. package/src/types/lend/base.ts +10 -20
  456. package/src/types/lend/contracts.ts +5 -1
  457. package/src/types/providers.ts +22 -0
  458. package/src/types/swap/base.ts +372 -0
  459. package/src/types/swap/index.ts +1 -0
  460. package/src/types/transaction.ts +14 -0
  461. package/src/utils/approve.test.ts +258 -0
  462. package/src/utils/approve.ts +197 -0
  463. package/src/utils/assets.test.ts +16 -1
  464. package/src/utils/assets.ts +27 -10
  465. package/src/utils/validateAddresses.test.ts +439 -0
  466. package/src/utils/validateAddresses.ts +153 -0
  467. package/src/utils/validation.ts +76 -0
  468. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  469. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  470. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +6 -10
  471. package/src/wallet/core/providers/hosted/types/index.ts +9 -7
  472. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +10 -10
  473. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
  474. package/src/wallet/core/wallets/abstract/Wallet.ts +23 -14
  475. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  476. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  477. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +11 -14
  478. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  479. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +11 -7
  480. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +16 -8
  481. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  482. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +6 -7
  483. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +8 -11
  484. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +7 -11
  485. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +11 -7
  486. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
  487. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +10 -7
  488. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
  489. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +10 -9
  490. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +38 -13
  491. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  492. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +13 -11
  493. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  494. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +11 -11
  495. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +11 -11
  496. package/dist/supported/tokens.d.ts +0 -25
  497. package/dist/supported/tokens.d.ts.map +0 -1
  498. package/dist/supported/tokens.js +0 -37
  499. package/dist/supported/tokens.js.map +0 -1
  500. package/src/supported/tokens.ts +0 -52
@@ -0,0 +1,577 @@
1
+ import type { Address } from 'viem'
2
+ import { formatUnits } from 'viem'
3
+
4
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import { ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
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'
9
+ import type { Asset } from '@/types/asset.js'
10
+ import type {
11
+ GetSwapMarketParams,
12
+ GetSwapMarketsParams,
13
+ ResolvedSwapParams,
14
+ SwapExecuteParams,
15
+ SwapMarket,
16
+ SwapMarketConfig,
17
+ SwapProviderConfig,
18
+ SwapQuote,
19
+ SwapQuoteParams,
20
+ SwapTransaction,
21
+ SwapTransactionData,
22
+ } from '@/types/swap/index.js'
23
+ import type { TransactionData } from '@/types/transaction.js'
24
+ import {
25
+ buildPermit2ApprovalTx,
26
+ buildTokenApprovalTx,
27
+ checkPermit2Allowance,
28
+ checkTokenAllowance,
29
+ } from '@/utils/approve.js'
30
+ import {
31
+ getAssetAddress,
32
+ isNativeAsset,
33
+ parseAssetAmount,
34
+ } from '@/utils/assets.js'
35
+ import {
36
+ validateAmountPositiveIfExists,
37
+ validateAmountProvided,
38
+ validateAssetOnChain,
39
+ validateChainSupported,
40
+ validateNotBothAmounts,
41
+ validateNotSameAsset,
42
+ validateNotZeroAddress,
43
+ validateSlippage,
44
+ } from '@/utils/validation.js'
45
+
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
59
+
60
+ /**
61
+ * Abstract base class for swap providers.
62
+ * Public methods handle validation and conversion,
63
+ * protected abstract methods implement provider-specific logic.
64
+ *
65
+ * Settings are resolved with provider → global → hardcoded default precedence.
66
+ */
67
+ export abstract class SwapProvider<
68
+ TConfig extends SwapProviderConfig = SwapProviderConfig,
69
+ > {
70
+ protected readonly _config: TConfig
71
+ protected readonly _settings: SwapSettings
72
+ protected readonly chainManager: ChainManager
73
+
74
+ constructor(
75
+ config: TConfig,
76
+ chainManager: ChainManager,
77
+ settings?: SwapSettings,
78
+ ) {
79
+ this._config = config
80
+ this._settings = settings ?? {}
81
+ this.chainManager = chainManager
82
+ }
83
+
84
+ get config(): TConfig {
85
+ return this._config
86
+ }
87
+
88
+ /** Resolved default slippage: provider → global → 0.005 */
89
+ get defaultSlippage(): number {
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
+ )
123
+ }
124
+
125
+ /**
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
130
+ */
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))
144
+ }
145
+
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> {
153
+ validateChainSupported(params.chainId, this.supportedChainIds())
154
+ return this._getQuote(params)
155
+ }
156
+
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
+ */
164
+ async getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
165
+ validateChainSupported(params.chainId, this.supportedChainIds())
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
173
+ }
174
+
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
+ */
181
+ async getMarkets(params: GetSwapMarketsParams = {}): Promise<SwapMarket[]> {
182
+ if (params.chainId) {
183
+ validateChainSupported(params.chainId, this.supportedChainIds())
184
+ }
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
+ )
201
+ }
202
+
203
+ isChainSupported(chainId: SupportedChainId): boolean {
204
+ return this.supportedChainIds().includes(chainId)
205
+ }
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
+
225
+ // ─────────────────────────────────────────────────────────────────────────────
226
+ // Protected helpers
227
+ // ─────────────────────────────────────────────────────────────────────────────
228
+
229
+ protected validateMarketAllowed(
230
+ assetIn: Asset,
231
+ assetOut: Asset,
232
+ chainId: SupportedChainId,
233
+ ): void {
234
+ const { marketBlocklist, marketAllowlist } = this._config
235
+
236
+ if (marketBlocklist?.length) {
237
+ const isBlocked = this.findMatchingConfig(
238
+ assetIn,
239
+ assetOut,
240
+ chainId,
241
+ marketBlocklist,
242
+ )
243
+ if (isBlocked) {
244
+ throw new Error(
245
+ `Pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol} is blocked on chain ${chainId}`,
246
+ )
247
+ }
248
+ }
249
+
250
+ if (marketAllowlist?.length) {
251
+ const isAllowed = this.findMatchingConfig(
252
+ assetIn,
253
+ assetOut,
254
+ chainId,
255
+ marketAllowlist,
256
+ )
257
+ if (!isAllowed) {
258
+ throw new Error(
259
+ `Pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol} is not in the allowlist for chain ${chainId}`,
260
+ )
261
+ }
262
+ }
263
+ }
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
+
300
+ protected resolveMarketConfig(
301
+ assetIn: Asset,
302
+ assetOut: Asset,
303
+ chainId: SupportedChainId,
304
+ ): SwapMarketConfig | undefined {
305
+ const { marketAllowlist } = this._config
306
+ if (!marketAllowlist?.length) {
307
+ throw new Error(
308
+ 'No markets configured. Provide a marketAllowlist in swap provider config.',
309
+ )
310
+ }
311
+ return this.findMatchingConfig(assetIn, assetOut, chainId, marketAllowlist)
312
+ }
313
+
314
+ /**
315
+ * Build Permit2 approval transactions for an ERC20 swap input.
316
+ * Skipped for native assets. Checks both ERC20→Permit2 and Permit2→spender allowances in parallel.
317
+ * Uses the resolved `permit2ExpirationSeconds` from provider → global → default.
318
+ * @param params - Resolved swap params (wallet address, asset info, chain)
319
+ * @param requiredAmount - Amount as raw bigint that must be approved
320
+ * @param permit2Address - Permit2 contract address
321
+ * @param permit2Spender - The router/contract that Permit2 should approve (e.g. Universal Router)
322
+ */
323
+ protected async buildPermit2Approvals(
324
+ params: ResolvedSwapParams,
325
+ requiredAmount: bigint,
326
+ permit2Address: Address,
327
+ permit2Spender: Address,
328
+ ): Promise<{
329
+ tokenApproval: TransactionData | undefined
330
+ permit2Approval: TransactionData | undefined
331
+ }> {
332
+ if (isNativeAsset(params.assetIn)) {
333
+ return { tokenApproval: undefined, permit2Approval: undefined }
334
+ }
335
+
336
+ const publicClient = this.chainManager.getPublicClient(params.chainId)
337
+ const token = getAssetAddress(params.assetIn, params.chainId)
338
+
339
+ const [tokenAllowance, permit2Allowance] = await Promise.all([
340
+ checkTokenAllowance({
341
+ publicClient,
342
+ token,
343
+ owner: params.walletAddress,
344
+ spender: permit2Address,
345
+ }),
346
+ checkPermit2Allowance({
347
+ publicClient,
348
+ permit2Address,
349
+ owner: params.walletAddress,
350
+ token,
351
+ spender: permit2Spender,
352
+ }),
353
+ ])
354
+
355
+ const tokenApproval =
356
+ tokenAllowance < requiredAmount
357
+ ? buildTokenApprovalTx(token, permit2Address)
358
+ : undefined
359
+
360
+ // Permit2 expiration is in Unix seconds (matching EVM block.timestamp)
361
+ const permit2Expired =
362
+ permit2Allowance.expiration < Math.floor(Date.now() / 1000)
363
+ const permit2Approval =
364
+ permit2Allowance.amount < requiredAmount || permit2Expired
365
+ ? buildPermit2ApprovalTx({
366
+ permit2Address,
367
+ token,
368
+ spender: permit2Spender,
369
+ amount: requiredAmount,
370
+ expirySeconds: this.permit2ExpirationSeconds,
371
+ })
372
+ : undefined
373
+
374
+ return { tokenApproval, permit2Approval }
375
+ }
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
+
406
+ // ─────────────────────────────────────────────────────────────────────────────
407
+ // Private helpers
408
+ // ─────────────────────────────────────────────────────────────────────────────
409
+
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
+ )
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)
444
+ validateChainSupported(params.chainId, this.supportedChainIds())
445
+ this.validateMarketAllowed(params.assetIn, params.assetOut, params.chainId)
446
+ validateAssetOnChain(params.assetIn, params.chainId)
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
+ }
468
+ }
469
+
470
+ private resolveParams(params: SwapExecuteParams): ResolvedSwapParams {
471
+ return {
472
+ amountInRaw: parseAssetAmount(params.assetIn, params.amountIn),
473
+ amountOutRaw: parseAssetAmount(params.assetOut, params.amountOut),
474
+ assetIn: params.assetIn,
475
+ assetOut: params.assetOut,
476
+ slippage: params.slippage ?? this.defaultSlippage,
477
+ deadline:
478
+ params.deadline ??
479
+ Math.floor(Date.now() / 1000) + this.quoteExpirationSeconds,
480
+ // Send output tokens to specified recipient, or back to the initiating wallet
481
+ recipient: params.recipient ?? params.walletAddress,
482
+ walletAddress: params.walletAddress,
483
+ chainId: params.chainId,
484
+ }
485
+ }
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
+
506
+ private findMatchingConfig(
507
+ assetIn: Asset,
508
+ assetOut: Asset,
509
+ chainId: SupportedChainId,
510
+ list: SwapMarketConfig[],
511
+ ): SwapMarketConfig | undefined {
512
+ const addressIn = assetIn.address[chainId]
513
+ const addressOut = assetOut.address[chainId]
514
+ if (!addressIn || !addressOut) return undefined
515
+
516
+ return list.find((config) => {
517
+ if (config.chainId !== undefined && config.chainId !== chainId)
518
+ return false
519
+ return this.containsPairByAddress(
520
+ addressIn,
521
+ addressOut,
522
+ chainId,
523
+ config.assets,
524
+ )
525
+ })
526
+ }
527
+
528
+ private containsPairByAddress(
529
+ addressIn: string,
530
+ addressOut: string,
531
+ chainId: SupportedChainId,
532
+ assets: Asset[],
533
+ ): boolean {
534
+ const addresses = assets
535
+ .map((a) => a.address[chainId]?.toLowerCase())
536
+ .filter(Boolean)
537
+ return (
538
+ addresses.includes(addressIn.toLowerCase()) &&
539
+ addresses.includes(addressOut.toLowerCase())
540
+ )
541
+ }
542
+
543
+ // ─────────────────────────────────────────────────────────────────────────────
544
+ // Abstract methods (implement in provider)
545
+ // ─────────────────────────────────────────────────────────────────────────────
546
+
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[]
553
+
554
+ protected abstract _execute(
555
+ params: ResolvedSwapParams,
556
+ ): Promise<SwapTransaction>
557
+
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'>>
569
+
570
+ protected abstract _getMarket(
571
+ params: GetSwapMarketParams,
572
+ ): Promise<SwapMarket>
573
+
574
+ protected abstract _getMarkets(
575
+ params: GetSwapMarketsParams,
576
+ ): Promise<SwapMarket[]>
577
+ }