@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,372 @@
1
+ import type { Address, Hex } from 'viem'
2
+
3
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
4
+ import type { SwapProviderName } from '@/types/actions.js'
5
+ import type { Asset } from '@/types/asset.js'
6
+ import type { TransactionData } from '@/types/transaction.js'
7
+ import type {
8
+ BatchTransactionReturnType,
9
+ TransactionReturnType,
10
+ } from '@/wallet/core/wallets/abstract/types/index.js'
11
+
12
+ export { SwapProvider } from '@/swap/core/SwapProvider.js'
13
+ export { ActionsSwapNamespace } from '@/swap/namespaces/ActionsSwapNamespace.js'
14
+ export { WalletSwapNamespace } from '@/swap/namespaces/WalletSwapNamespace.js'
15
+ export type { SwapProviders } from '@/types/providers.js'
16
+
17
+ /**
18
+ * Per-provider swap configuration.
19
+ * Provider-level values override the shared SwapGlobalConfig defaults.
20
+ */
21
+ export interface SwapProviderConfig {
22
+ /** Slippage tolerance override for this provider (e.g., 0.005 for 0.5%) */
23
+ defaultSlippage?: number
24
+ /** Maximum allowed slippage override for this provider (e.g., 0.5 for 50%) */
25
+ maxSlippage?: number
26
+ /** Quote expiration override for this provider, in seconds from now */
27
+ quoteExpirationSeconds?: number
28
+ /** Allowlist of swap markets (optional - defaults to all supported assets) */
29
+ marketAllowlist?: SwapMarketConfig[]
30
+ /** Blocklist of swap markets to exclude */
31
+ marketBlocklist?: SwapMarketConfig[]
32
+ }
33
+
34
+ /**
35
+ * Swap market filter
36
+ * @description Define allowed/blocked trading markets by assets.
37
+ * 2 assets = one explicit pair. 3+ = all pairs between them.
38
+ */
39
+ export interface SwapMarketConfig {
40
+ /** 2 assets = one explicit pair. 3+ = all pairs between them. */
41
+ assets: [Asset, Asset, ...Asset[]]
42
+ /** Restrict to a specific chain. Omit = all configured chains. */
43
+ chainId?: SupportedChainId
44
+ }
45
+
46
+ /**
47
+ * Swap market identifier
48
+ * @description Unique identifier for a swap market (mirrors LendMarketId pattern)
49
+ */
50
+ export type SwapMarketId = {
51
+ /** Pool identifier (keccak256 hash of PoolKey) */
52
+ poolId: string
53
+ /** Chain ID where this market exists */
54
+ chainId: SupportedChainId
55
+ }
56
+
57
+ /**
58
+ * Parameters for getting a specific swap market
59
+ */
60
+ export type GetSwapMarketParams = SwapMarketId
61
+
62
+ /**
63
+ * Parameters for getting swap markets
64
+ */
65
+ export interface GetSwapMarketsParams {
66
+ /** Filter by chain ID */
67
+ chainId?: SupportedChainId
68
+ /** Filter by asset (returns markets containing this asset) */
69
+ asset?: Asset
70
+ }
71
+
72
+ /**
73
+ * Parameters for a wallet swap — what the developer passes.
74
+ * Exactly one of amountIn or amountOut must be provided.
75
+ */
76
+ export interface WalletSwapParams {
77
+ /** Amount of input token (human-readable). For exact-in swaps. Mutually exclusive with amountOut. */
78
+ amountIn?: number
79
+ /** Amount of output token (human-readable). For exact-out swaps. Mutually exclusive with amountIn. */
80
+ amountOut?: number
81
+ /** Token to sell */
82
+ assetIn: Asset
83
+ /** Token to buy */
84
+ assetOut: Asset
85
+ /** Chain to execute swap on */
86
+ chainId: SupportedChainId
87
+ /** Slippage tolerance override (e.g., 0.01 for 1%). Overrides provider and config defaults. */
88
+ slippage?: number
89
+ /** Transaction deadline as Unix timestamp. Defaults to now + 1 minute. */
90
+ deadline?: number
91
+ /** Recipient address. Defaults to wallet address. */
92
+ recipient?: Address
93
+ /** Explicitly select a swap provider. Overrides routing config. */
94
+ provider?: SwapProviderName
95
+ }
96
+
97
+ /**
98
+ * Full swap execute parameters including wallet address.
99
+ * walletAddress is auto-injected by the wallet namespace.
100
+ */
101
+ export interface SwapExecuteParams extends WalletSwapParams {
102
+ walletAddress: Address
103
+ }
104
+
105
+ /**
106
+ * Fully resolved swap parameters with defaults applied and amounts as raw bigint.
107
+ * Passed to provider _execute() implementations.
108
+ */
109
+ export interface ResolvedSwapParams {
110
+ amountInRaw?: bigint
111
+ amountOutRaw?: bigint
112
+ assetIn: Asset
113
+ assetOut: Asset
114
+ slippage: number
115
+ deadline: number
116
+ recipient: Address
117
+ walletAddress: Address
118
+ chainId: SupportedChainId
119
+ }
120
+
121
+ /**
122
+ * Parameters for getting a swap price quote
123
+ * @description Specify either amountIn (for exact-in) or amountOut (for exact-out),
124
+ * not both. Amounts should be human-readable numbers (e.g., 100 for 100 USDC).
125
+ */
126
+ export interface SwapPriceParams {
127
+ /** Token to get price for (required) */
128
+ assetIn: Asset
129
+ /** Token to price against. Defaults to USDC if not provided. */
130
+ assetOut?: Asset
131
+ /** Amount of input token (human-readable). Defaults to 1 unit. For exact-in quotes. */
132
+ amountIn?: number
133
+ /** Amount of output token (human-readable). For exact-out quotes. */
134
+ amountOut?: number
135
+ /** Chain to get price on */
136
+ chainId: SupportedChainId
137
+ /** Explicitly select a swap provider. Overrides routing config. */
138
+ provider?: SwapProviderName
139
+ }
140
+
141
+ /**
142
+ * Parameters for getting a swap quote with pre-built execution data.
143
+ */
144
+ export interface SwapQuoteParams {
145
+ /** Token to sell */
146
+ assetIn: Asset
147
+ /** Token to buy (required) */
148
+ assetOut: Asset
149
+ /** Amount of input token (human-readable). Mutually exclusive with amountOut. */
150
+ amountIn?: number
151
+ /** Amount of output token (human-readable). Mutually exclusive with amountIn. */
152
+ amountOut?: number
153
+ /** Chain to execute swap on */
154
+ chainId: SupportedChainId
155
+ /** Slippage tolerance baked into the quote */
156
+ slippage?: number
157
+ /** Transaction deadline as Unix timestamp */
158
+ deadline?: number
159
+ /** Recipient address */
160
+ recipient?: Address
161
+ /** Explicitly select a swap provider */
162
+ provider?: SwapProviderName
163
+ }
164
+
165
+ /**
166
+ * Pre-built execution data from a quote, ready to submit on-chain.
167
+ */
168
+ export interface SwapQuoteExecution {
169
+ /** Encoded swap calldata */
170
+ swapCalldata: Hex
171
+ /** Router/contract to send the swap transaction to */
172
+ routerAddress: Address
173
+ /** Native ETH value for ETH-in swaps, else 0n */
174
+ value: bigint
175
+ /** Opaque provider-specific context (e.g. stable flag, factory address) */
176
+ providerContext?: Record<string, unknown>
177
+ }
178
+
179
+ /**
180
+ * A complete swap quote: pricing, amounts, and pre-built execution data.
181
+ * Pass to execute() to skip re-quoting.
182
+ *
183
+ * **Precision note:** `Raw` fields (bigint) are the on-chain source of truth.
184
+ * Number fields (`amountIn`, `amountOut`, `price`, etc.) are display approximations
185
+ * derived via `formatUnits` → `parseFloat`. For tokens with many significant digits,
186
+ * numbers may lose precision. Use `Raw` fields for any math that matters.
187
+ */
188
+ export interface SwapQuote {
189
+ // ── What you're swapping ──
190
+ /** Token being sold */
191
+ assetIn: Asset
192
+ /** Token being bought */
193
+ assetOut: Asset
194
+ /** Chain to execute on */
195
+ chainId: SupportedChainId
196
+
197
+ // ── Amounts (Raw = on-chain precision, number = display approximation) ──
198
+ /** Human-readable input amount (display only — use amountInRaw for precision) */
199
+ amountIn: number
200
+ /** Input amount as raw bigint (native decimals). Source of truth. */
201
+ amountInRaw: bigint
202
+ /** Human-readable expected output (display only — use amountOutRaw for precision) */
203
+ amountOut: number
204
+ /** Expected output as raw bigint. Source of truth. */
205
+ amountOutRaw: bigint
206
+ /** Human-readable minimum output after slippage (display only) */
207
+ amountOutMin: number
208
+ /** Minimum output as raw bigint after slippage. Source of truth for on-chain execution. */
209
+ amountOutMinRaw: bigint
210
+
211
+ // ── Price (display approximations derived from number amounts) ──
212
+ /** Exchange rate: amountOut / amountIn. Display approximation. */
213
+ price: number
214
+ /** Inverse exchange rate: amountIn / amountOut. Display approximation. */
215
+ priceInverse: number
216
+ /** Price impact as decimal (0.03 = 3%) */
217
+ priceImpact: number
218
+
219
+ // ── Route ──
220
+ /** Route taken for the swap */
221
+ route: SwapRoute
222
+
223
+ // ── Execution ──
224
+ /** Pre-built transaction data. Pass quote to execute() to use. */
225
+ execution: SwapQuoteExecution
226
+
227
+ // ── Metadata ──
228
+ /** Provider that generated this quote */
229
+ provider: SwapProviderName
230
+ /** Slippage tolerance applied to this quote */
231
+ slippage: number
232
+ /** Transaction deadline (Unix seconds) */
233
+ deadline: number
234
+ /** When the quote was generated (Unix seconds) */
235
+ quotedAt: number
236
+ /** When the quote expires (Unix seconds) */
237
+ expiresAt: number
238
+ /** Estimated gas cost as raw bigint (native decimals) */
239
+ gasEstimate?: bigint
240
+ /**
241
+ * Wallet address that will execute this quote.
242
+ * Set by WalletSwapNamespace before execution — not available on price-only quotes.
243
+ * Used to check existing on-chain allowances and skip redundant approvals.
244
+ */
245
+ recipient?: Address
246
+ /**
247
+ * The recipient address baked into execution.swapCalldata at quote time.
248
+ * If recipient differs from quotedRecipient at execute time, calldata is re-encoded
249
+ * with the correct recipient to prevent tokens from being sent to the wrong address.
250
+ */
251
+ quotedRecipient: Address
252
+ }
253
+
254
+ /**
255
+ * Market information for a swap hop
256
+ */
257
+ export interface SwapMarketInfo {
258
+ /** Market address or identifier */
259
+ address: Address
260
+ /** Fee tier in pips */
261
+ fee: number
262
+ /** Protocol version used (v2, v3, v4) */
263
+ version: 'v2' | 'v3' | 'v4'
264
+ }
265
+
266
+ /**
267
+ * Swap route information
268
+ */
269
+ export interface SwapRoute {
270
+ /** Ordered list of assets in the route path */
271
+ path: Asset[]
272
+ /** Market information for each hop */
273
+ pools: SwapMarketInfo[]
274
+ }
275
+
276
+ /**
277
+ * Swap price quote response
278
+ */
279
+ export interface SwapPrice {
280
+ /** Exchange rate as human-readable string (e.g., "3245.50") */
281
+ price: string
282
+ /** Inverse exchange rate */
283
+ priceInverse: string
284
+ /** Human-readable input amount */
285
+ amountIn: number
286
+ /** Human-readable output amount */
287
+ amountOut: number
288
+ /** Input amount as raw bigint (native decimals) */
289
+ amountInRaw: bigint
290
+ /** Expected output amount as raw bigint (native decimals) */
291
+ amountOutRaw: bigint
292
+ /** Price impact as decimal (0.03 = 3%). Derived from pool mid-price vs execution price. */
293
+ priceImpact: number
294
+ /** Route taken for the swap */
295
+ route: SwapRoute
296
+ /** Estimated gas cost as raw bigint (native decimals) */
297
+ gasEstimate?: bigint
298
+ }
299
+
300
+ /**
301
+ * Transaction data for swap execution
302
+ */
303
+ export interface SwapTransactionData {
304
+ /** Permit2 approval transaction (if needed) */
305
+ permit2Approval?: TransactionData
306
+ /** Token approval to Permit2 (if needed) */
307
+ tokenApproval?: TransactionData
308
+ /** Main swap transaction */
309
+ swap: TransactionData
310
+ }
311
+
312
+ /**
313
+ * Swap transaction result
314
+ */
315
+ export interface SwapTransaction {
316
+ /** Human-readable input amount */
317
+ amountIn: number
318
+ /** Human-readable output amount */
319
+ amountOut: number
320
+ /** Input amount as raw bigint (native decimals) */
321
+ amountInRaw: bigint
322
+ /** Output amount as raw bigint (native decimals) (expected) */
323
+ amountOutRaw: bigint
324
+ /** Input asset */
325
+ assetIn: Asset
326
+ /** Output asset */
327
+ assetOut: Asset
328
+ /** Exchange rate: amountOut / amountIn */
329
+ price: number
330
+ /** Price impact as decimal (0.03 = 3%) */
331
+ priceImpact: number
332
+ /** Transaction data for execution */
333
+ transactionData: SwapTransactionData
334
+ }
335
+
336
+ /**
337
+ * Swap execution receipt
338
+ */
339
+ export interface SwapReceipt {
340
+ /** Transaction receipt(s) */
341
+ receipt: TransactionReturnType | BatchTransactionReturnType
342
+ /** Human-readable input amount */
343
+ amountIn: number
344
+ /** Human-readable output amount */
345
+ amountOut: number
346
+ /** Actual input amount as raw bigint (native decimals) */
347
+ amountInRaw: bigint
348
+ /** Actual output amount as raw bigint (native decimals) */
349
+ amountOutRaw: bigint
350
+ /** Input asset */
351
+ assetIn: Asset
352
+ /** Output asset */
353
+ assetOut: Asset
354
+ /** Exchange rate: amountOut / amountIn */
355
+ price: number
356
+ /** Price impact as decimal (0.03 = 3%) */
357
+ priceImpact: number
358
+ }
359
+
360
+ /**
361
+ * Swap market information
362
+ */
363
+ export interface SwapMarket {
364
+ /** Market identifier (contains poolId and chainId) */
365
+ marketId: SwapMarketId
366
+ /** Token pair in the market */
367
+ assets: [Asset, Asset]
368
+ /** Fee tier in pips (500 = 0.05%) */
369
+ fee: number
370
+ /** Provider name */
371
+ provider: SwapProviderName
372
+ }
@@ -0,0 +1 @@
1
+ export * from '@/types/swap/base.js'
@@ -0,0 +1,14 @@
1
+ import type { Address, Hex } from 'viem'
2
+
3
+ /**
4
+ * Transaction data for execution
5
+ * @description Raw transaction data for wallet execution
6
+ */
7
+ export interface TransactionData {
8
+ /** Target contract address */
9
+ to: Address
10
+ /** Encoded function call data */
11
+ data: Hex
12
+ /** ETH value to send */
13
+ value: bigint
14
+ }
@@ -0,0 +1,258 @@
1
+ import type { Address, PublicClient } from 'viem'
2
+ import { decodeFunctionData } from 'viem'
3
+ import { describe, expect, it, vi } from 'vitest'
4
+
5
+ import {
6
+ buildApprovalTxIfNeeded,
7
+ buildErc20ApprovalTx,
8
+ buildPermit2ApprovalTx,
9
+ buildTokenApprovalTx,
10
+ checkPermit2Allowance,
11
+ checkTokenAllowance,
12
+ DEFAULT_PERMIT2_EXPIRY_SECONDS,
13
+ getApprovalDeficit,
14
+ } from '@/utils/approve.js'
15
+
16
+ const PERMIT2_ABI = [
17
+ {
18
+ name: 'approve',
19
+ type: 'function',
20
+ stateMutability: 'nonpayable',
21
+ inputs: [
22
+ { name: 'token', type: 'address' },
23
+ { name: 'spender', type: 'address' },
24
+ { name: 'amount', type: 'uint160' },
25
+ { name: 'expiration', type: 'uint48' },
26
+ ],
27
+ outputs: [],
28
+ },
29
+ ] as const
30
+
31
+ const TOKEN = '0x1111111111111111111111111111111111111111' as Address
32
+ const OWNER = '0x2222222222222222222222222222222222222222' as Address
33
+ const SPENDER = '0x3333333333333333333333333333333333333333' as Address
34
+ const PERMIT2 = '0x000000000022D473030F116dDEE9F6B43aC78BA3' as Address
35
+
36
+ describe('checkPermit2Allowance', () => {
37
+ it('returns parsed allowance data', async () => {
38
+ const publicClient = {
39
+ readContract: vi.fn().mockResolvedValue([
40
+ 1000000n, // amount (uint160)
41
+ 1700000000, // expiration (uint48)
42
+ 5, // nonce (uint48)
43
+ ]),
44
+ } as unknown as PublicClient
45
+
46
+ const result = await checkPermit2Allowance({
47
+ publicClient,
48
+ permit2Address: PERMIT2,
49
+ owner: OWNER,
50
+ token: TOKEN,
51
+ spender: SPENDER,
52
+ })
53
+
54
+ expect(result.amount).toBe(1000000n)
55
+ expect(result.expiration).toBe(1700000000)
56
+ expect(result.nonce).toBe(5)
57
+ expect(publicClient.readContract).toHaveBeenCalledWith(
58
+ expect.objectContaining({
59
+ address: PERMIT2,
60
+ functionName: 'allowance',
61
+ args: [OWNER, TOKEN, SPENDER],
62
+ }),
63
+ )
64
+ })
65
+ })
66
+
67
+ describe('checkTokenAllowance', () => {
68
+ it('returns token allowance as bigint', async () => {
69
+ const publicClient = {
70
+ readContract: vi.fn().mockResolvedValue(500000n),
71
+ } as unknown as PublicClient
72
+
73
+ const result = await checkTokenAllowance({
74
+ publicClient,
75
+ token: TOKEN,
76
+ owner: OWNER,
77
+ spender: SPENDER,
78
+ })
79
+
80
+ expect(result).toBe(500000n)
81
+ expect(publicClient.readContract).toHaveBeenCalledWith(
82
+ expect.objectContaining({
83
+ address: TOKEN,
84
+ functionName: 'allowance',
85
+ args: [OWNER, SPENDER],
86
+ }),
87
+ )
88
+ })
89
+ })
90
+
91
+ describe('buildTokenApprovalTx', () => {
92
+ it('builds max approval to Permit2', () => {
93
+ const tx = buildTokenApprovalTx(TOKEN, PERMIT2)
94
+
95
+ expect(tx.to).toBe(TOKEN)
96
+ expect(tx.value).toBe(0n)
97
+ expect(tx.data).toMatch(/^0x/)
98
+ // Should encode approve(permit2, maxUint256)
99
+ expect(tx.data.length).toBeGreaterThan(10)
100
+ })
101
+ })
102
+
103
+ describe('buildPermit2ApprovalTx', () => {
104
+ it('approves exact amount with default expiry', () => {
105
+ const before = Math.floor(Date.now() / 1000)
106
+ const amount = 100000000n
107
+
108
+ const tx = buildPermit2ApprovalTx({
109
+ permit2Address: PERMIT2,
110
+ token: TOKEN,
111
+ spender: SPENDER,
112
+ amount,
113
+ })
114
+
115
+ expect(tx.to).toBe(PERMIT2)
116
+ expect(tx.value).toBe(0n)
117
+
118
+ const decoded = decodeFunctionData({ abi: PERMIT2_ABI, data: tx.data })
119
+ const [, , decodedAmount, expiration] = decoded.args
120
+ expect(decodedAmount).toBe(amount)
121
+ expect(Number(expiration)).toBeGreaterThanOrEqual(
122
+ before + DEFAULT_PERMIT2_EXPIRY_SECONDS,
123
+ )
124
+ })
125
+
126
+ it('uses custom expiry when provided', () => {
127
+ const before = Math.floor(Date.now() / 1000)
128
+ const customExpiry = 7 * 24 * 60 * 60 // 7 days
129
+
130
+ const tx = buildPermit2ApprovalTx({
131
+ permit2Address: PERMIT2,
132
+ token: TOKEN,
133
+ spender: SPENDER,
134
+ amount: 100000000n,
135
+ expirySeconds: customExpiry,
136
+ })
137
+
138
+ const decoded = decodeFunctionData({ abi: PERMIT2_ABI, data: tx.data })
139
+ const [, , , expiration] = decoded.args
140
+ expect(Number(expiration)).toBeGreaterThanOrEqual(before + customExpiry)
141
+ expect(Number(expiration)).toBeLessThan(
142
+ before + DEFAULT_PERMIT2_EXPIRY_SECONDS,
143
+ )
144
+ })
145
+ })
146
+
147
+ describe('buildErc20ApprovalTx', () => {
148
+ it('builds approval for exact amount', () => {
149
+ const tx = buildErc20ApprovalTx(TOKEN, SPENDER, 500000n)
150
+
151
+ expect(tx.to).toBe(TOKEN)
152
+ expect(tx.value).toBe(0n)
153
+ expect(tx.data).toMatch(/^0x/)
154
+ })
155
+ })
156
+
157
+ describe('getApprovalDeficit', () => {
158
+ it('returns 0n when allowance is sufficient', async () => {
159
+ const publicClient = {
160
+ readContract: vi.fn().mockResolvedValue(1000000n),
161
+ } as unknown as PublicClient
162
+
163
+ const deficit = await getApprovalDeficit({
164
+ publicClient,
165
+ token: TOKEN,
166
+ owner: OWNER,
167
+ spender: SPENDER,
168
+ amount: 500000n,
169
+ })
170
+
171
+ expect(deficit).toBe(0n)
172
+ })
173
+
174
+ it('returns deficit when allowance is insufficient', async () => {
175
+ const publicClient = {
176
+ readContract: vi.fn().mockResolvedValue(300000n),
177
+ } as unknown as PublicClient
178
+
179
+ const deficit = await getApprovalDeficit({
180
+ publicClient,
181
+ token: TOKEN,
182
+ owner: OWNER,
183
+ spender: SPENDER,
184
+ amount: 500000n,
185
+ })
186
+
187
+ expect(deficit).toBe(200000n)
188
+ })
189
+
190
+ it('returns full amount when allowance is zero', async () => {
191
+ const publicClient = {
192
+ readContract: vi.fn().mockResolvedValue(0n),
193
+ } as unknown as PublicClient
194
+
195
+ const deficit = await getApprovalDeficit({
196
+ publicClient,
197
+ token: TOKEN,
198
+ owner: OWNER,
199
+ spender: SPENDER,
200
+ amount: 500000n,
201
+ })
202
+
203
+ expect(deficit).toBe(500000n)
204
+ })
205
+ })
206
+
207
+ describe('buildApprovalTxIfNeeded', () => {
208
+ it('returns undefined when allowance is sufficient', async () => {
209
+ const publicClient = {
210
+ readContract: vi.fn().mockResolvedValue(1000000n),
211
+ } as unknown as PublicClient
212
+
213
+ const tx = await buildApprovalTxIfNeeded({
214
+ publicClient,
215
+ token: TOKEN,
216
+ owner: OWNER,
217
+ spender: SPENDER,
218
+ amount: 500000n,
219
+ })
220
+
221
+ expect(tx).toBeUndefined()
222
+ })
223
+
224
+ it('returns approval tx for the deficit only', async () => {
225
+ const publicClient = {
226
+ readContract: vi.fn().mockResolvedValue(300000n),
227
+ } as unknown as PublicClient
228
+
229
+ const tx = await buildApprovalTxIfNeeded({
230
+ publicClient,
231
+ token: TOKEN,
232
+ owner: OWNER,
233
+ spender: SPENDER,
234
+ amount: 500000n,
235
+ })
236
+
237
+ expect(tx).toBeDefined()
238
+ expect(tx!.to).toBe(TOKEN)
239
+ expect(tx!.value).toBe(0n)
240
+ })
241
+
242
+ it('returns approval for full amount when allowance is zero', async () => {
243
+ const publicClient = {
244
+ readContract: vi.fn().mockResolvedValue(0n),
245
+ } as unknown as PublicClient
246
+
247
+ const tx = await buildApprovalTxIfNeeded({
248
+ publicClient,
249
+ token: TOKEN,
250
+ owner: OWNER,
251
+ spender: SPENDER,
252
+ amount: 500000n,
253
+ })
254
+
255
+ expect(tx).toBeDefined()
256
+ expect(tx!.to).toBe(TOKEN)
257
+ })
258
+ })