@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,620 @@
1
+ import type { Address } from 'viem'
2
+ import { describe, expect, it } from 'vitest'
3
+
4
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import { MockSwapProvider } from '@/swap/__mocks__/MockSwapProvider.js'
6
+ import type { Asset } from '@/types/asset.js'
7
+ import type { SwapMarketConfig } from '@/types/swap/index.js'
8
+
9
+ // Test assets
10
+ const MockUSDC: Asset = {
11
+ type: 'erc20',
12
+ address: { 84532: '0x1111111111111111111111111111111111111111' as Address },
13
+ metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
14
+ }
15
+
16
+ const MockWETH: Asset = {
17
+ type: 'erc20',
18
+ address: { 84532: '0x2222222222222222222222222222222222222222' as Address },
19
+ metadata: { name: 'Wrapped Ether', symbol: 'WETH', decimals: 18 },
20
+ }
21
+
22
+ const MockOP: Asset = {
23
+ type: 'erc20',
24
+ address: { 84532: '0x3333333333333333333333333333333333333333' as Address },
25
+ metadata: { name: 'Optimism', symbol: 'OP', decimals: 18 },
26
+ }
27
+
28
+ describe('SwapProvider', () => {
29
+ describe('constructor and configuration', () => {
30
+ it('should initialize with default config', () => {
31
+ const provider = new MockSwapProvider()
32
+ expect(provider).toBeDefined()
33
+ expect(provider.supportedChainIds()).toContain(84532)
34
+ })
35
+
36
+ it('should use default slippage when not configured', () => {
37
+ const provider = new MockSwapProvider()
38
+ expect(provider.defaultSlippage).toBe(0.005)
39
+ })
40
+
41
+ it('should use config slippage when provided', () => {
42
+ const provider = new MockSwapProvider({ defaultSlippage: 0.01 })
43
+ expect(provider.defaultSlippage).toBe(0.01)
44
+ })
45
+
46
+ it('should use settings slippage when provider does not set one', () => {
47
+ const provider = new MockSwapProvider({}, undefined, undefined, {
48
+ defaultSlippage: 0.02,
49
+ })
50
+ expect(provider.defaultSlippage).toBe(0.02)
51
+ })
52
+
53
+ it('should prefer provider slippage over settings', () => {
54
+ const provider = new MockSwapProvider(
55
+ { defaultSlippage: 0.03 },
56
+ undefined,
57
+ undefined,
58
+ { defaultSlippage: 0.02 },
59
+ )
60
+ expect(provider.defaultSlippage).toBe(0.03)
61
+ })
62
+
63
+ it('should resolve maxSlippage: provider → settings → default', () => {
64
+ expect(new MockSwapProvider().maxSlippage).toBe(0.5)
65
+ expect(
66
+ new MockSwapProvider({}, undefined, undefined, { maxSlippage: 0.3 })
67
+ .maxSlippage,
68
+ ).toBe(0.3)
69
+ expect(
70
+ new MockSwapProvider({ maxSlippage: 0.1 }, undefined, undefined, {
71
+ maxSlippage: 0.3,
72
+ }).maxSlippage,
73
+ ).toBe(0.1)
74
+ })
75
+
76
+ it('should resolve quoteExpirationSeconds: provider → settings → default', () => {
77
+ expect(new MockSwapProvider().quoteExpirationSeconds).toBe(60)
78
+ expect(
79
+ new MockSwapProvider({}, undefined, undefined, {
80
+ quoteExpirationSeconds: 120,
81
+ }).quoteExpirationSeconds,
82
+ ).toBe(120)
83
+ expect(
84
+ new MockSwapProvider(
85
+ { quoteExpirationSeconds: 30 },
86
+ undefined,
87
+ undefined,
88
+ { quoteExpirationSeconds: 120 },
89
+ ).quoteExpirationSeconds,
90
+ ).toBe(30)
91
+ })
92
+
93
+ it('should resolve permit2ExpirationSeconds: provider → settings → default', () => {
94
+ expect(new MockSwapProvider().permit2ExpirationSeconds).toBe(2_592_000)
95
+ expect(
96
+ new MockSwapProvider({}, undefined, undefined, {
97
+ permit2ExpirationSeconds: 86400,
98
+ }).permit2ExpirationSeconds,
99
+ ).toBe(86400)
100
+ })
101
+
102
+ it('should store market allowlist when provided', () => {
103
+ const config: SwapMarketConfig = {
104
+ assets: [MockUSDC, MockWETH],
105
+ chainId: 84532 as SupportedChainId,
106
+ }
107
+ const provider = new MockSwapProvider({ marketAllowlist: [config] })
108
+ expect(provider.config.marketAllowlist).toEqual([config])
109
+ })
110
+ })
111
+
112
+ describe('execute()', () => {
113
+ it('should throw if neither amountIn nor amountOut provided', async () => {
114
+ const provider = new MockSwapProvider()
115
+ await expect(
116
+ provider.execute({
117
+ assetIn: MockUSDC,
118
+ assetOut: MockWETH,
119
+ chainId: 84532 as SupportedChainId,
120
+ walletAddress: '0x1234' as Address,
121
+ }),
122
+ ).rejects.toThrow('Either amountIn or amountOut must be provided')
123
+ })
124
+
125
+ it('should throw if chain not supported', async () => {
126
+ const provider = new MockSwapProvider()
127
+ await expect(
128
+ provider.execute({
129
+ amountIn: 100,
130
+ assetIn: MockUSDC,
131
+ assetOut: MockWETH,
132
+ chainId: 999 as SupportedChainId,
133
+ walletAddress: '0x1234' as Address,
134
+ }),
135
+ ).rejects.toThrow('Chain 999 is not supported')
136
+ })
137
+
138
+ it('should throw if asset not supported on chain', async () => {
139
+ const unsupportedAsset: Asset = {
140
+ type: 'erc20',
141
+ address: { 1: '0x1111' as Address }, // Only on mainnet
142
+ metadata: { name: 'Test', symbol: 'TEST', decimals: 18 },
143
+ }
144
+ const provider = new MockSwapProvider()
145
+ await expect(
146
+ provider.execute({
147
+ amountIn: 100,
148
+ assetIn: unsupportedAsset,
149
+ assetOut: MockWETH,
150
+ chainId: 84532 as SupportedChainId,
151
+ walletAddress: '0x1234' as Address,
152
+ }),
153
+ ).rejects.toThrow('not supported on chain')
154
+ })
155
+
156
+ it('should use param slippage over config default', async () => {
157
+ const provider = new MockSwapProvider({ defaultSlippage: 0.01 })
158
+ const result = await provider.execute({
159
+ amountIn: 100,
160
+ assetIn: MockUSDC,
161
+ assetOut: MockWETH,
162
+ chainId: 84532 as SupportedChainId,
163
+ walletAddress: '0x1234' as Address,
164
+ slippage: 0.02,
165
+ })
166
+ expect(result).toBeDefined()
167
+ // Slippage is passed to internal params
168
+ expect(provider.mockExecute).toHaveBeenCalledWith(
169
+ expect.objectContaining({ slippage: 0.02 }),
170
+ )
171
+ })
172
+
173
+ it('should use default deadline when not specified', async () => {
174
+ const provider = new MockSwapProvider()
175
+ const beforeTime = Math.floor(Date.now() / 1000)
176
+ await provider.execute({
177
+ amountIn: 100,
178
+ assetIn: MockUSDC,
179
+ assetOut: MockWETH,
180
+ chainId: 84532 as SupportedChainId,
181
+ walletAddress: '0x1234' as Address,
182
+ })
183
+ const afterTime = Math.floor(Date.now() / 1000) + 60
184
+
185
+ expect(provider.mockExecute).toHaveBeenCalledWith(
186
+ expect.objectContaining({
187
+ deadline: expect.any(Number),
188
+ }),
189
+ )
190
+ const call = provider.mockExecute.mock.calls[0][0]
191
+ expect(call.deadline).toBeGreaterThanOrEqual(beforeTime + 60)
192
+ expect(call.deadline).toBeLessThanOrEqual(afterTime)
193
+ })
194
+
195
+ it('should convert human-readable amounts to wei', async () => {
196
+ const provider = new MockSwapProvider()
197
+ await provider.execute({
198
+ amountIn: 100,
199
+ assetIn: MockUSDC, // 6 decimals
200
+ assetOut: MockWETH,
201
+ chainId: 84532 as SupportedChainId,
202
+ walletAddress: '0x1234' as Address,
203
+ })
204
+
205
+ expect(provider.mockExecute).toHaveBeenCalledWith(
206
+ expect.objectContaining({
207
+ amountInRaw: 100000000n, // 100 * 10^6
208
+ }),
209
+ )
210
+ })
211
+
212
+ it('should return swap transaction', async () => {
213
+ const provider = new MockSwapProvider()
214
+ const result = await provider.execute({
215
+ amountIn: 100,
216
+ assetIn: MockUSDC,
217
+ assetOut: MockWETH,
218
+ chainId: 84532 as SupportedChainId,
219
+ walletAddress: '0x1234' as Address,
220
+ })
221
+
222
+ expect(result.amountIn).toBeDefined()
223
+ expect(result.amountOut).toBeDefined()
224
+ expect(result.transactionData.swap).toBeDefined()
225
+ })
226
+ })
227
+
228
+ describe('getQuote()', () => {
229
+ it('should throw if chain not supported', async () => {
230
+ const provider = new MockSwapProvider()
231
+ await expect(
232
+ provider.getQuote({
233
+ assetIn: MockUSDC,
234
+ assetOut: MockWETH,
235
+ chainId: 999 as SupportedChainId,
236
+ }),
237
+ ).rejects.toThrow('Chain 999 is not supported')
238
+ })
239
+
240
+ it('should return quote', async () => {
241
+ const provider = new MockSwapProvider()
242
+ const quote = await provider.getQuote({
243
+ assetIn: MockUSDC,
244
+ assetOut: MockWETH,
245
+ amountIn: 100,
246
+ chainId: 84532 as SupportedChainId,
247
+ })
248
+
249
+ expect(quote.price).toBeDefined()
250
+ expect(quote.amountIn).toBeDefined()
251
+ expect(quote.amountOut).toBeDefined()
252
+ expect(quote.route).toBeDefined()
253
+ })
254
+ })
255
+
256
+ describe('getMarket()', () => {
257
+ it('should throw if chain not supported', async () => {
258
+ const provider = new MockSwapProvider()
259
+ await expect(
260
+ provider.getMarket({
261
+ poolId: '0xpool1',
262
+ chainId: 999 as SupportedChainId,
263
+ }),
264
+ ).rejects.toThrow('Chain 999 is not supported')
265
+ })
266
+
267
+ it('should return market info', async () => {
268
+ const provider = new MockSwapProvider()
269
+ const market = await provider.getMarket({
270
+ poolId: '0xpool1',
271
+ chainId: 84532 as SupportedChainId,
272
+ })
273
+
274
+ expect(market.marketId.poolId).toBe('0xpool1')
275
+ expect(market.assets).toHaveLength(2)
276
+ expect(market.provider).toBe('uniswap')
277
+ })
278
+ })
279
+
280
+ describe('getMarkets()', () => {
281
+ it('should return markets array', async () => {
282
+ const provider = new MockSwapProvider()
283
+ const markets = await provider.getMarkets()
284
+
285
+ expect(Array.isArray(markets)).toBe(true)
286
+ expect(markets.length).toBeGreaterThan(0)
287
+ })
288
+
289
+ it('should validate chainId if provided', async () => {
290
+ const provider = new MockSwapProvider()
291
+ await expect(
292
+ provider.getMarkets({ chainId: 999 as SupportedChainId }),
293
+ ).rejects.toThrow('Chain 999 is not supported')
294
+ })
295
+ })
296
+
297
+ describe('supportedChainIds()', () => {
298
+ it('should return array of supported chain IDs', () => {
299
+ const provider = new MockSwapProvider()
300
+ const chainIds = provider.supportedChainIds()
301
+
302
+ expect(Array.isArray(chainIds)).toBe(true)
303
+ expect(chainIds).toContain(84532)
304
+ })
305
+ })
306
+
307
+ describe('isChainSupported()', () => {
308
+ it('should return true for supported chain', () => {
309
+ const provider = new MockSwapProvider()
310
+ expect(provider.isChainSupported(84532 as SupportedChainId)).toBe(true)
311
+ })
312
+
313
+ it('should return false for unsupported chain', () => {
314
+ const provider = new MockSwapProvider()
315
+ expect(provider.isChainSupported(999 as SupportedChainId)).toBe(false)
316
+ })
317
+ })
318
+
319
+ describe('validateMarketAllowed()', () => {
320
+ it('should allow any pair when no allowlist configured', () => {
321
+ const provider = new MockSwapProvider()
322
+ expect(() =>
323
+ provider.testValidateMarketAllowed(
324
+ MockUSDC,
325
+ MockWETH,
326
+ 84532 as SupportedChainId,
327
+ ),
328
+ ).not.toThrow()
329
+ })
330
+
331
+ it('should allow pairs in allowlist', () => {
332
+ const config: SwapMarketConfig = {
333
+ assets: [MockUSDC, MockWETH],
334
+ chainId: 84532 as SupportedChainId,
335
+ }
336
+ const provider = new MockSwapProvider({ marketAllowlist: [config] })
337
+ expect(() =>
338
+ provider.testValidateMarketAllowed(
339
+ MockUSDC,
340
+ MockWETH,
341
+ 84532 as SupportedChainId,
342
+ ),
343
+ ).not.toThrow()
344
+ })
345
+
346
+ it('should reject pairs not in allowlist', () => {
347
+ const config: SwapMarketConfig = {
348
+ assets: [MockUSDC, MockWETH],
349
+ chainId: 84532 as SupportedChainId,
350
+ }
351
+ const provider = new MockSwapProvider({ marketAllowlist: [config] })
352
+ expect(() =>
353
+ provider.testValidateMarketAllowed(
354
+ MockUSDC,
355
+ MockOP,
356
+ 84532 as SupportedChainId,
357
+ ),
358
+ ).toThrow('not in the allowlist')
359
+ })
360
+
361
+ it('should match pairs regardless of order', () => {
362
+ const config: SwapMarketConfig = {
363
+ assets: [MockUSDC, MockWETH],
364
+ chainId: 84532 as SupportedChainId,
365
+ }
366
+ const provider = new MockSwapProvider({ marketAllowlist: [config] })
367
+ // Reversed order should still match
368
+ expect(() =>
369
+ provider.testValidateMarketAllowed(
370
+ MockWETH,
371
+ MockUSDC,
372
+ 84532 as SupportedChainId,
373
+ ),
374
+ ).not.toThrow()
375
+ })
376
+
377
+ it('should reject blocklisted pairs', () => {
378
+ const config: SwapMarketConfig = {
379
+ assets: [MockUSDC, MockOP],
380
+ chainId: 84532 as SupportedChainId,
381
+ }
382
+ const provider = new MockSwapProvider({ marketBlocklist: [config] })
383
+ expect(() =>
384
+ provider.testValidateMarketAllowed(
385
+ MockUSDC,
386
+ MockOP,
387
+ 84532 as SupportedChainId,
388
+ ),
389
+ ).toThrow('is blocked')
390
+ })
391
+
392
+ it('should check blocklist before allowlist', () => {
393
+ const allowConfig: SwapMarketConfig = {
394
+ assets: [MockUSDC, MockWETH],
395
+ chainId: 84532 as SupportedChainId,
396
+ }
397
+ const blockConfig: SwapMarketConfig = {
398
+ assets: [MockUSDC, MockWETH],
399
+ chainId: 84532 as SupportedChainId,
400
+ }
401
+ const provider = new MockSwapProvider({
402
+ marketAllowlist: [allowConfig],
403
+ marketBlocklist: [blockConfig],
404
+ })
405
+ // Blocklist takes precedence
406
+ expect(() =>
407
+ provider.testValidateMarketAllowed(
408
+ MockUSDC,
409
+ MockWETH,
410
+ 84532 as SupportedChainId,
411
+ ),
412
+ ).toThrow('is blocked')
413
+ })
414
+
415
+ it('should expand multi-asset filter to all pairs', () => {
416
+ const config: SwapMarketConfig = {
417
+ assets: [MockUSDC, MockWETH, MockOP],
418
+ chainId: 84532 as SupportedChainId,
419
+ }
420
+ const provider = new MockSwapProvider({ marketAllowlist: [config] })
421
+
422
+ // All 3 pairs should be allowed: USDC/WETH, USDC/OP, WETH/OP
423
+ expect(() =>
424
+ provider.testValidateMarketAllowed(
425
+ MockUSDC,
426
+ MockWETH,
427
+ 84532 as SupportedChainId,
428
+ ),
429
+ ).not.toThrow()
430
+ expect(() =>
431
+ provider.testValidateMarketAllowed(
432
+ MockUSDC,
433
+ MockOP,
434
+ 84532 as SupportedChainId,
435
+ ),
436
+ ).not.toThrow()
437
+ expect(() =>
438
+ provider.testValidateMarketAllowed(
439
+ MockWETH,
440
+ MockOP,
441
+ 84532 as SupportedChainId,
442
+ ),
443
+ ).not.toThrow()
444
+ })
445
+
446
+ it('should match any chain when filter has no chainId', () => {
447
+ // Assets with addresses on both chains
448
+ const multiChainUSDC: Asset = {
449
+ ...MockUSDC,
450
+ address: {
451
+ 84532: '0x1111111111111111111111111111111111111111' as Address,
452
+ 10: '0x1111111111111111111111111111111111111112' as Address,
453
+ },
454
+ }
455
+ const multiChainWETH: Asset = {
456
+ ...MockWETH,
457
+ address: {
458
+ 84532: '0x2222222222222222222222222222222222222222' as Address,
459
+ 10: '0x2222222222222222222222222222222222222223' as Address,
460
+ },
461
+ }
462
+ const config: SwapMarketConfig = {
463
+ assets: [multiChainUSDC, multiChainWETH],
464
+ }
465
+ const provider = new MockSwapProvider(
466
+ { marketAllowlist: [config] },
467
+ {
468
+ supportedChains: [84532 as SupportedChainId, 10 as SupportedChainId],
469
+ },
470
+ )
471
+
472
+ // Should match on any supported chain
473
+ expect(() =>
474
+ provider.testValidateMarketAllowed(
475
+ multiChainUSDC,
476
+ multiChainWETH,
477
+ 84532 as SupportedChainId,
478
+ ),
479
+ ).not.toThrow()
480
+ expect(() =>
481
+ provider.testValidateMarketAllowed(
482
+ multiChainUSDC,
483
+ multiChainWETH,
484
+ 10 as SupportedChainId,
485
+ ),
486
+ ).not.toThrow()
487
+ })
488
+
489
+ it('should filter blocked markets from getMarkets()', async () => {
490
+ const allowConfig: SwapMarketConfig = {
491
+ assets: [MockUSDC, MockWETH, MockOP],
492
+ chainId: 84532 as SupportedChainId,
493
+ }
494
+ const blockConfig: SwapMarketConfig = {
495
+ assets: [MockUSDC, MockOP],
496
+ chainId: 84532 as SupportedChainId,
497
+ }
498
+ const provider = new MockSwapProvider({
499
+ marketAllowlist: [allowConfig],
500
+ marketBlocklist: [blockConfig],
501
+ })
502
+
503
+ // Mock _getMarkets to return markets with real assets
504
+ provider.mockGetMarkets.mockResolvedValue([
505
+ {
506
+ marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
507
+ assets: [MockUSDC, MockWETH],
508
+ fee: 0,
509
+ provider: 'uniswap',
510
+ },
511
+ {
512
+ marketId: { poolId: '0xpool2', chainId: 84532 as SupportedChainId },
513
+ assets: [MockUSDC, MockOP],
514
+ fee: 0,
515
+ provider: 'uniswap',
516
+ },
517
+ ])
518
+
519
+ const markets = await provider.getMarkets()
520
+ // USDC/OP is blocklisted, only USDC/WETH should remain
521
+ expect(markets).toHaveLength(1)
522
+ expect(markets[0].assets[0]).toBe(MockUSDC)
523
+ expect(markets[0].assets[1]).toBe(MockWETH)
524
+ })
525
+
526
+ it('should reject blocked market from getMarket()', async () => {
527
+ const blockConfig: SwapMarketConfig = {
528
+ assets: [MockUSDC, MockOP],
529
+ chainId: 84532 as SupportedChainId,
530
+ }
531
+ const provider = new MockSwapProvider({
532
+ marketBlocklist: [blockConfig],
533
+ })
534
+
535
+ // Mock _getMarket to return a blocked market
536
+ provider.mockGetMarket.mockResolvedValue({
537
+ marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
538
+ assets: [MockUSDC, MockOP],
539
+ fee: 0,
540
+ provider: 'uniswap',
541
+ })
542
+
543
+ await expect(
544
+ provider.getMarket({
545
+ poolId: '0xpool1',
546
+ chainId: 84532 as SupportedChainId,
547
+ }),
548
+ ).rejects.toThrow('is blocked')
549
+ })
550
+
551
+ it('should allow non-blocked market from getMarket()', async () => {
552
+ const blockConfig: SwapMarketConfig = {
553
+ assets: [MockUSDC, MockOP],
554
+ chainId: 84532 as SupportedChainId,
555
+ }
556
+ const provider = new MockSwapProvider({
557
+ marketBlocklist: [blockConfig],
558
+ })
559
+
560
+ provider.mockGetMarket.mockResolvedValue({
561
+ marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
562
+ assets: [MockUSDC, MockWETH],
563
+ fee: 0,
564
+ provider: 'uniswap',
565
+ })
566
+
567
+ const market = await provider.getMarket({
568
+ poolId: '0xpool1',
569
+ chainId: 84532 as SupportedChainId,
570
+ })
571
+ expect(market.assets[0]).toBe(MockUSDC)
572
+ expect(market.assets[1]).toBe(MockWETH)
573
+ })
574
+
575
+ it('should scope filter to specific chainId when provided', () => {
576
+ const multiChainUSDC: Asset = {
577
+ ...MockUSDC,
578
+ address: {
579
+ 84532: '0x1111111111111111111111111111111111111111' as Address,
580
+ 10: '0x1111111111111111111111111111111111111112' as Address,
581
+ },
582
+ }
583
+ const multiChainWETH: Asset = {
584
+ ...MockWETH,
585
+ address: {
586
+ 84532: '0x2222222222222222222222222222222222222222' as Address,
587
+ 10: '0x2222222222222222222222222222222222222223' as Address,
588
+ },
589
+ }
590
+ const config: SwapMarketConfig = {
591
+ assets: [multiChainUSDC, multiChainWETH],
592
+ chainId: 84532 as SupportedChainId,
593
+ }
594
+ const provider = new MockSwapProvider(
595
+ { marketAllowlist: [config] },
596
+ {
597
+ supportedChains: [84532 as SupportedChainId, 10 as SupportedChainId],
598
+ },
599
+ )
600
+
601
+ // Should match on 84532
602
+ expect(() =>
603
+ provider.testValidateMarketAllowed(
604
+ multiChainUSDC,
605
+ multiChainWETH,
606
+ 84532 as SupportedChainId,
607
+ ),
608
+ ).not.toThrow()
609
+
610
+ // Should NOT match on chain 10
611
+ expect(() =>
612
+ provider.testValidateMarketAllowed(
613
+ multiChainUSDC,
614
+ multiChainWETH,
615
+ 10 as SupportedChainId,
616
+ ),
617
+ ).toThrow('not in the allowlist')
618
+ })
619
+ })
620
+ })