@eth-optimism/actions-sdk 0.1.0 → 0.3.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/LICENSE +1 -1
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -0
  3. package/dist/{test → __mocks__}/MockAssets.js +2 -0
  4. package/dist/__mocks__/MockAssets.js.map +1 -0
  5. package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
  6. package/dist/__mocks__/MockPrivyClient.js.map +1 -0
  7. package/dist/__mocks__/utils.d.ts.map +1 -0
  8. package/dist/__mocks__/utils.js.map +1 -0
  9. package/dist/__tests__/actions.test.d.ts.map +1 -0
  10. package/dist/{actions.test.js → __tests__/actions.test.js} +5 -9
  11. package/dist/__tests__/actions.test.js.map +1 -0
  12. package/dist/actions.d.ts +20 -1
  13. package/dist/actions.d.ts.map +1 -1
  14. package/dist/actions.js +37 -13
  15. package/dist/actions.js.map +1 -1
  16. package/dist/constants/assets.d.ts +23 -0
  17. package/dist/constants/assets.d.ts.map +1 -1
  18. package/dist/constants/assets.js +99 -6
  19. package/dist/constants/assets.js.map +1 -1
  20. package/dist/constants/contracts.d.ts +4 -0
  21. package/dist/constants/contracts.d.ts.map +1 -0
  22. package/dist/constants/contracts.js +3 -0
  23. package/dist/constants/contracts.js.map +1 -0
  24. package/dist/constants/supportedChains.d.ts +1 -1
  25. package/dist/constants/supportedChains.d.ts.map +1 -1
  26. package/dist/constants/supportedChains.js +7 -3
  27. package/dist/constants/supportedChains.js.map +1 -1
  28. package/dist/core/asset/__mocks__/mockAsset.js +1 -1
  29. package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
  30. package/dist/index.d.ts +4 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +7 -6
  35. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
  36. package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
  37. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
  38. package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
  39. package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
  40. package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
  41. package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
  42. package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
  43. package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
  44. package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
  45. package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
  46. package/dist/lend/core/LendProvider.d.ts +14 -8
  47. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  48. package/dist/lend/core/LendProvider.js +29 -17
  49. package/dist/lend/core/LendProvider.js.map +1 -1
  50. package/dist/lend/core/__tests__/LendProvider.test.js +4 -6
  51. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  52. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -36
  53. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  54. package/dist/lend/namespaces/ActionsLendNamespace.js +2 -48
  55. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
  57. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
  58. package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
  59. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
  60. package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -36
  61. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  62. package/dist/lend/namespaces/WalletLendNamespace.js +14 -69
  63. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  64. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +2 -2
  65. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  66. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
  67. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
  68. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
  69. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
  70. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +8 -10
  71. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  72. package/dist/lend/providers/aave/AaveLendProvider.d.ts +19 -27
  73. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  74. package/dist/lend/providers/aave/AaveLendProvider.js +124 -180
  75. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  76. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
  77. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
  78. package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
  79. package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
  80. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
  81. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
  82. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
  83. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
  84. package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
  85. package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
  86. package/dist/lend/providers/aave/abis/pool.js +79 -0
  87. package/dist/lend/providers/aave/abis/pool.js.map +1 -0
  88. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  89. package/dist/lend/providers/aave/sdk.js +6 -65
  90. package/dist/lend/providers/aave/sdk.js.map +1 -1
  91. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +0 -1
  92. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  93. package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
  94. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  95. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +5 -24
  96. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  97. package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
  98. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  99. package/dist/lend/providers/morpho/__tests__/sdk.test.js +3 -2
  100. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  101. package/dist/lend/providers/morpho/api.d.ts +4 -0
  102. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  103. package/dist/lend/providers/morpho/api.js.map +1 -1
  104. package/dist/lend/providers/morpho/contracts.d.ts +19 -0
  105. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
  106. package/dist/lend/providers/morpho/contracts.js +32 -0
  107. package/dist/lend/providers/morpho/contracts.js.map +1 -0
  108. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  109. package/dist/lend/providers/morpho/sdk.js +177 -71
  110. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  111. package/dist/services/ChainManager.d.ts +1 -1
  112. package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
  113. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
  114. package/dist/services/__mocks__/MockChainManager.js.map +1 -0
  115. package/dist/services/tokenBalance.d.ts.map +1 -1
  116. package/dist/services/tokenBalance.js +4 -5
  117. package/dist/services/tokenBalance.js.map +1 -1
  118. package/dist/services/tokenBalance.spec.js +2 -2
  119. package/dist/services/tokenBalance.spec.js.map +1 -1
  120. package/dist/supported/tokens.d.ts +4 -4
  121. package/dist/supported/tokens.d.ts.map +1 -1
  122. package/dist/supported/tokens.js +10 -70
  123. package/dist/supported/tokens.js.map +1 -1
  124. package/dist/swap/__mocks__/MockSwapProvider.d.ts +38 -0
  125. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
  126. package/dist/swap/__mocks__/MockSwapProvider.js +138 -0
  127. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
  128. package/dist/swap/core/SwapProvider.d.ts +56 -0
  129. package/dist/swap/core/SwapProvider.d.ts.map +1 -0
  130. package/dist/swap/core/SwapProvider.js +177 -0
  131. package/dist/swap/core/SwapProvider.js.map +1 -0
  132. package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
  133. package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
  134. package/dist/swap/core/__tests__/SwapProvider.test.js +329 -0
  135. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
  136. package/dist/swap/index.d.ts +7 -0
  137. package/dist/swap/index.d.ts.map +1 -0
  138. package/dist/swap/index.js +8 -0
  139. package/dist/swap/index.js.map +1 -0
  140. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
  141. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
  142. package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
  143. package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
  144. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +33 -0
  145. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
  146. package/dist/swap/namespaces/BaseSwapNamespace.js +58 -0
  147. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
  148. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +22 -0
  149. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
  150. package/dist/swap/namespaces/WalletSwapNamespace.js +60 -0
  151. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
  152. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
  153. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
  154. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +106 -0
  155. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
  156. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
  157. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
  158. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +132 -0
  159. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
  160. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +68 -0
  161. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
  162. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +206 -0
  163. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
  164. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
  165. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
  166. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +257 -0
  167. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
  168. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
  169. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
  170. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
  171. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
  172. package/dist/swap/providers/uniswap/abis.d.ts +227 -0
  173. package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
  174. package/dist/swap/providers/uniswap/abis.js +138 -0
  175. package/dist/swap/providers/uniswap/abis.js.map +1 -0
  176. package/dist/swap/providers/uniswap/addresses.d.ts +21 -0
  177. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
  178. package/dist/swap/providers/uniswap/addresses.js +81 -0
  179. package/dist/swap/providers/uniswap/addresses.js.map +1 -0
  180. package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
  181. package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
  182. package/dist/swap/providers/uniswap/encoding.js +233 -0
  183. package/dist/swap/providers/uniswap/encoding.js.map +1 -0
  184. package/dist/swap/providers/uniswap/types.d.ts +20 -0
  185. package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
  186. package/dist/swap/providers/uniswap/types.js +2 -0
  187. package/dist/swap/providers/uniswap/types.js.map +1 -0
  188. package/dist/types/actions.d.ts +19 -5
  189. package/dist/types/actions.d.ts.map +1 -1
  190. package/dist/types/asset.d.ts +3 -3
  191. package/dist/types/asset.d.ts.map +1 -1
  192. package/dist/types/index.d.ts +2 -0
  193. package/dist/types/index.d.ts.map +1 -1
  194. package/dist/types/index.js +2 -0
  195. package/dist/types/index.js.map +1 -1
  196. package/dist/types/lend/base.d.ts +7 -22
  197. package/dist/types/lend/base.d.ts.map +1 -1
  198. package/dist/types/lend/base.js.map +1 -1
  199. package/dist/types/lend/contracts.d.ts +17 -0
  200. package/dist/types/lend/contracts.d.ts.map +1 -0
  201. package/dist/types/lend/contracts.js +2 -0
  202. package/dist/types/lend/contracts.js.map +1 -0
  203. package/dist/types/lend/index.d.ts +1 -0
  204. package/dist/types/lend/index.d.ts.map +1 -1
  205. package/dist/types/lend/index.js +1 -0
  206. package/dist/types/lend/index.js.map +1 -1
  207. package/dist/types/swap/base.d.ts +238 -0
  208. package/dist/types/swap/base.d.ts.map +1 -0
  209. package/dist/types/swap/base.js +4 -0
  210. package/dist/types/swap/base.js.map +1 -0
  211. package/dist/types/swap/index.d.ts +2 -0
  212. package/dist/types/swap/index.d.ts.map +1 -0
  213. package/dist/types/swap/index.js +2 -0
  214. package/dist/types/swap/index.js.map +1 -0
  215. package/dist/types/transaction.d.ts +14 -0
  216. package/dist/types/transaction.d.ts.map +1 -0
  217. package/dist/types/transaction.js +2 -0
  218. package/dist/types/transaction.js.map +1 -0
  219. package/dist/utils/assets.d.ts +11 -6
  220. package/dist/utils/assets.d.ts.map +1 -1
  221. package/dist/utils/assets.js +16 -12
  222. package/dist/utils/assets.js.map +1 -1
  223. package/dist/utils/assets.test.js +14 -2
  224. package/dist/utils/assets.test.js.map +1 -1
  225. package/dist/utils/constants.d.ts +5 -0
  226. package/dist/utils/constants.d.ts.map +1 -0
  227. package/dist/utils/constants.js +5 -0
  228. package/dist/utils/constants.js.map +1 -0
  229. package/dist/utils/permit2.d.ts +46 -0
  230. package/dist/utils/permit2.d.ts.map +1 -0
  231. package/dist/utils/permit2.js +100 -0
  232. package/dist/utils/permit2.js.map +1 -0
  233. package/dist/utils/permit2.test.d.ts +2 -0
  234. package/dist/utils/permit2.test.d.ts.map +1 -0
  235. package/dist/utils/permit2.test.js +110 -0
  236. package/dist/utils/permit2.test.js.map +1 -0
  237. package/dist/utils/validation.d.ts +12 -0
  238. package/dist/utils/validation.d.ts.map +1 -0
  239. package/dist/utils/validation.js +44 -0
  240. package/dist/utils/validation.js.map +1 -0
  241. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  242. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  243. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  244. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  245. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +4 -4
  246. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  247. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +7 -1
  248. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  249. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
  250. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  251. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
  252. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  253. package/dist/wallet/core/providers/hosted/types/index.d.ts +5 -1
  254. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  255. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +7 -1
  256. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  257. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
  258. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  259. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +5 -5
  260. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  261. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +13 -2
  262. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  263. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -1
  264. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  265. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
  266. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  267. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
  268. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
  269. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +7 -2
  270. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  271. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
  272. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  273. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +3 -3
  274. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  275. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
  276. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
  277. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
  278. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
  279. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  280. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  281. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
  282. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  283. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +4 -4
  284. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  285. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  286. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +4 -3
  287. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  288. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
  289. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  290. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -1
  291. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  292. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
  293. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  294. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +2 -2
  295. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  296. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +6 -1
  297. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  298. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
  299. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  300. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
  301. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  302. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
  303. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  304. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  305. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  306. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  307. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  308. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  309. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  310. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  311. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  312. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +7 -1
  313. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  314. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +6 -2
  315. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  316. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
  317. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
  318. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
  319. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +6 -2
  320. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  321. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  322. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  323. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -2
  324. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  325. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
  326. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
  327. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
  328. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +3 -2
  329. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  330. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -3
  331. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  332. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +5 -4
  333. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  334. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +2 -2
  335. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  336. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  337. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  338. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  339. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
  340. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  341. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -1
  342. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  343. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
  344. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  345. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +2 -2
  346. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
  347. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
  348. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
  349. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -1
  350. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  351. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  352. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  353. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +2 -2
  354. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  355. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
  356. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  357. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  358. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  359. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  360. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  361. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  362. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  363. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  364. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  365. package/package.json +2 -2
  366. package/src/{test → __mocks__}/MockAssets.ts +2 -0
  367. package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
  368. package/src/{actions.test.ts → __tests__/actions.test.ts} +2 -6
  369. package/src/actions.ts +57 -19
  370. package/src/constants/assets.ts +108 -8
  371. package/src/constants/contracts.ts +5 -0
  372. package/src/constants/supportedChains.ts +10 -2
  373. package/src/core/asset/__mocks__/mockAsset.ts +1 -1
  374. package/src/index.ts +30 -2
  375. package/src/{test → lend/__mocks__}/MockLendProvider.ts +20 -23
  376. package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
  377. package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
  378. package/src/lend/core/LendProvider.ts +40 -20
  379. package/src/lend/core/__tests__/LendProvider.test.ts +4 -7
  380. package/src/lend/namespaces/ActionsLendNamespace.ts +2 -85
  381. package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
  382. package/src/lend/namespaces/WalletLendNamespace.ts +25 -121
  383. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +10 -9
  384. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
  385. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +19 -22
  386. package/src/lend/providers/aave/AaveLendProvider.ts +163 -231
  387. package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
  388. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
  389. package/src/lend/providers/aave/abis/pool.ts +81 -0
  390. package/src/lend/providers/aave/sdk.ts +7 -69
  391. package/src/lend/providers/morpho/MorphoLendProvider.ts +20 -41
  392. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +8 -32
  393. package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
  394. package/src/lend/providers/morpho/__tests__/sdk.test.ts +3 -2
  395. package/src/lend/providers/morpho/api.ts +4 -0
  396. package/src/lend/providers/morpho/contracts.ts +37 -0
  397. package/src/lend/providers/morpho/sdk.ts +241 -84
  398. package/src/services/tokenBalance.spec.ts +2 -2
  399. package/src/services/tokenBalance.ts +6 -7
  400. package/src/supported/tokens.ts +18 -77
  401. package/src/swap/__mocks__/MockSwapProvider.ts +216 -0
  402. package/src/swap/core/SwapProvider.ts +319 -0
  403. package/src/swap/core/__tests__/SwapProvider.test.ts +478 -0
  404. package/src/swap/index.ts +14 -0
  405. package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
  406. package/src/swap/namespaces/BaseSwapNamespace.ts +77 -0
  407. package/src/swap/namespaces/WalletSwapNamespace.ts +82 -0
  408. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +138 -0
  409. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +162 -0
  410. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +304 -0
  411. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
  412. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +370 -0
  413. package/src/swap/providers/uniswap/abis.ts +144 -0
  414. package/src/swap/providers/uniswap/addresses.ts +108 -0
  415. package/src/swap/providers/uniswap/encoding.ts +406 -0
  416. package/src/swap/providers/uniswap/types.ts +24 -0
  417. package/src/types/actions.ts +22 -6
  418. package/src/types/asset.ts +3 -3
  419. package/src/types/index.ts +2 -0
  420. package/src/types/lend/base.ts +12 -25
  421. package/src/types/lend/contracts.ts +18 -0
  422. package/src/types/lend/index.ts +1 -0
  423. package/src/types/swap/base.ts +259 -0
  424. package/src/types/swap/index.ts +1 -0
  425. package/src/types/transaction.ts +14 -0
  426. package/src/utils/assets.test.ts +17 -2
  427. package/src/utils/assets.ts +28 -11
  428. package/src/utils/constants.ts +4 -0
  429. package/src/utils/permit2.test.ts +142 -0
  430. package/src/utils/permit2.ts +144 -0
  431. package/src/utils/validation.ts +76 -0
  432. package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
  433. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +6 -6
  434. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +6 -6
  435. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +9 -1
  436. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
  437. package/src/wallet/core/providers/hosted/types/index.ts +5 -1
  438. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +13 -1
  439. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +9 -9
  440. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -2
  441. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
  442. package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
  443. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +14 -5
  444. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +3 -3
  445. package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
  446. package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
  447. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -2
  448. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +5 -5
  449. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -2
  450. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
  451. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -2
  452. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +2 -2
  453. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +11 -2
  454. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
  455. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
  456. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
  457. package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  458. package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  459. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +10 -2
  460. package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
  461. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +9 -5
  462. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +9 -2
  463. package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
  464. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +5 -5
  465. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +9 -4
  466. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +2 -2
  467. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +18 -6
  468. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
  469. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -2
  470. package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
  471. package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
  472. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -2
  473. package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
  474. package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
  475. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
  476. package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  477. package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  478. package/dist/actions.test.d.ts.map +0 -1
  479. package/dist/actions.test.js.map +0 -1
  480. package/dist/test/MockAssets.d.ts.map +0 -1
  481. package/dist/test/MockAssets.js.map +0 -1
  482. package/dist/test/MockChainManager.d.ts.map +0 -1
  483. package/dist/test/MockChainManager.js.map +0 -1
  484. package/dist/test/MockLendProvider.d.ts.map +0 -1
  485. package/dist/test/MockLendProvider.js.map +0 -1
  486. package/dist/test/MockMarkets.d.ts.map +0 -1
  487. package/dist/test/MockMarkets.js.map +0 -1
  488. package/dist/test/MockPrivyClient.d.ts.map +0 -1
  489. package/dist/test/MockPrivyClient.js.map +0 -1
  490. package/dist/test/utils.d.ts.map +0 -1
  491. package/dist/test/utils.js.map +0 -1
  492. /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
  493. /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
  494. /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
  495. /package/dist/{test → __mocks__}/utils.d.ts +0 -0
  496. /package/dist/{test → __mocks__}/utils.js +0 -0
  497. /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
  498. /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
  499. /package/src/{test → __mocks__}/utils.ts +0 -0
  500. /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
@@ -0,0 +1,142 @@
1
+ import type { Address, PublicClient } from 'viem'
2
+ import { decodeFunctionData } from 'viem'
3
+ import { describe, expect, it, vi } from 'vitest'
4
+
5
+ import {
6
+ buildPermit2ApprovalTx,
7
+ buildTokenApprovalTx,
8
+ checkPermit2Allowance,
9
+ checkTokenAllowance,
10
+ DEFAULT_PERMIT2_EXPIRY_SECONDS,
11
+ } from '@/utils/permit2.js'
12
+
13
+ const PERMIT2_ABI = [
14
+ {
15
+ name: 'approve',
16
+ type: 'function',
17
+ stateMutability: 'nonpayable',
18
+ inputs: [
19
+ { name: 'token', type: 'address' },
20
+ { name: 'spender', type: 'address' },
21
+ { name: 'amount', type: 'uint160' },
22
+ { name: 'expiration', type: 'uint48' },
23
+ ],
24
+ outputs: [],
25
+ },
26
+ ] as const
27
+
28
+ const TOKEN = '0x1111111111111111111111111111111111111111' as Address
29
+ const OWNER = '0x2222222222222222222222222222222222222222' as Address
30
+ const SPENDER = '0x3333333333333333333333333333333333333333' as Address
31
+ const PERMIT2 = '0x000000000022D473030F116dDEE9F6B43aC78BA3' as Address
32
+
33
+ describe('checkPermit2Allowance', () => {
34
+ it('returns parsed allowance data', async () => {
35
+ const publicClient = {
36
+ readContract: vi.fn().mockResolvedValue([
37
+ 1000000n, // amount (uint160)
38
+ 1700000000, // expiration (uint48)
39
+ 5, // nonce (uint48)
40
+ ]),
41
+ } as unknown as PublicClient
42
+
43
+ const result = await checkPermit2Allowance({
44
+ publicClient,
45
+ permit2Address: PERMIT2,
46
+ owner: OWNER,
47
+ token: TOKEN,
48
+ spender: SPENDER,
49
+ })
50
+
51
+ expect(result.amount).toBe(1000000n)
52
+ expect(result.expiration).toBe(1700000000)
53
+ expect(result.nonce).toBe(5)
54
+ expect(publicClient.readContract).toHaveBeenCalledWith(
55
+ expect.objectContaining({
56
+ address: PERMIT2,
57
+ functionName: 'allowance',
58
+ args: [OWNER, TOKEN, SPENDER],
59
+ }),
60
+ )
61
+ })
62
+ })
63
+
64
+ describe('checkTokenAllowance', () => {
65
+ it('returns token allowance as bigint', async () => {
66
+ const publicClient = {
67
+ readContract: vi.fn().mockResolvedValue(500000n),
68
+ } as unknown as PublicClient
69
+
70
+ const result = await checkTokenAllowance({
71
+ publicClient,
72
+ token: TOKEN,
73
+ owner: OWNER,
74
+ spender: SPENDER,
75
+ })
76
+
77
+ expect(result).toBe(500000n)
78
+ expect(publicClient.readContract).toHaveBeenCalledWith(
79
+ expect.objectContaining({
80
+ address: TOKEN,
81
+ functionName: 'allowance',
82
+ args: [OWNER, SPENDER],
83
+ }),
84
+ )
85
+ })
86
+ })
87
+
88
+ describe('buildTokenApprovalTx', () => {
89
+ it('builds max approval to Permit2', () => {
90
+ const tx = buildTokenApprovalTx(TOKEN, PERMIT2)
91
+
92
+ expect(tx.to).toBe(TOKEN)
93
+ expect(tx.value).toBe(0n)
94
+ expect(tx.data).toMatch(/^0x/)
95
+ // Should encode approve(permit2, maxUint256)
96
+ expect(tx.data.length).toBeGreaterThan(10)
97
+ })
98
+ })
99
+
100
+ describe('buildPermit2ApprovalTx', () => {
101
+ it('approves exact amount with default expiry', () => {
102
+ const before = Math.floor(Date.now() / 1000)
103
+ const amount = 100000000n
104
+
105
+ const tx = buildPermit2ApprovalTx({
106
+ permit2Address: PERMIT2,
107
+ token: TOKEN,
108
+ spender: SPENDER,
109
+ amount,
110
+ })
111
+
112
+ expect(tx.to).toBe(PERMIT2)
113
+ expect(tx.value).toBe(0n)
114
+
115
+ const decoded = decodeFunctionData({ abi: PERMIT2_ABI, data: tx.data })
116
+ const [, , decodedAmount, expiration] = decoded.args
117
+ expect(decodedAmount).toBe(amount)
118
+ expect(Number(expiration)).toBeGreaterThanOrEqual(
119
+ before + DEFAULT_PERMIT2_EXPIRY_SECONDS,
120
+ )
121
+ })
122
+
123
+ it('uses custom expiry when provided', () => {
124
+ const before = Math.floor(Date.now() / 1000)
125
+ const customExpiry = 7 * 24 * 60 * 60 // 7 days
126
+
127
+ const tx = buildPermit2ApprovalTx({
128
+ permit2Address: PERMIT2,
129
+ token: TOKEN,
130
+ spender: SPENDER,
131
+ amount: 100000000n,
132
+ expirySeconds: customExpiry,
133
+ })
134
+
135
+ const decoded = decodeFunctionData({ abi: PERMIT2_ABI, data: tx.data })
136
+ const [, , , expiration] = decoded.args
137
+ expect(Number(expiration)).toBeGreaterThanOrEqual(before + customExpiry)
138
+ expect(Number(expiration)).toBeLessThan(
139
+ before + DEFAULT_PERMIT2_EXPIRY_SECONDS,
140
+ )
141
+ })
142
+ })
@@ -0,0 +1,144 @@
1
+ import type { Address, PublicClient } from 'viem'
2
+ import { encodeFunctionData, erc20Abi, maxUint256 } from 'viem'
3
+
4
+ import type { TransactionData } from '@/types/transaction.js'
5
+
6
+ /** Default Permit2 approval expiry: 30 days in seconds */
7
+ export const DEFAULT_PERMIT2_EXPIRY_SECONDS = 30 * 24 * 60 * 60
8
+
9
+ /**
10
+ * Permit2 ABI (subset for approvals)
11
+ */
12
+ const PERMIT2_ABI = [
13
+ {
14
+ name: 'allowance',
15
+ type: 'function',
16
+ stateMutability: 'view',
17
+ inputs: [
18
+ { name: 'owner', type: 'address' },
19
+ { name: 'token', type: 'address' },
20
+ { name: 'spender', type: 'address' },
21
+ ],
22
+ outputs: [
23
+ { name: 'amount', type: 'uint160' },
24
+ { name: 'expiration', type: 'uint48' },
25
+ { name: 'nonce', type: 'uint48' },
26
+ ],
27
+ },
28
+ {
29
+ name: 'approve',
30
+ type: 'function',
31
+ stateMutability: 'nonpayable',
32
+ inputs: [
33
+ { name: 'token', type: 'address' },
34
+ { name: 'spender', type: 'address' },
35
+ { name: 'amount', type: 'uint160' },
36
+ { name: 'expiration', type: 'uint48' },
37
+ ],
38
+ outputs: [],
39
+ },
40
+ ] as const
41
+
42
+ /**
43
+ * Permit2 allowance info
44
+ */
45
+ export interface Permit2Allowance {
46
+ amount: bigint
47
+ expiration: number
48
+ nonce: number
49
+ }
50
+
51
+ /**
52
+ * Check Permit2 allowance for a token/spender pair
53
+ */
54
+ export async function checkPermit2Allowance(params: {
55
+ publicClient: PublicClient
56
+ permit2Address: Address
57
+ owner: Address
58
+ token: Address
59
+ spender: Address
60
+ }): Promise<Permit2Allowance> {
61
+ const { publicClient, permit2Address, owner, token, spender } = params
62
+
63
+ const result = await publicClient.readContract({
64
+ address: permit2Address,
65
+ abi: PERMIT2_ABI,
66
+ functionName: 'allowance',
67
+ args: [owner, token, spender],
68
+ })
69
+
70
+ return {
71
+ amount: BigInt(result[0]),
72
+ expiration: Number(result[1]),
73
+ nonce: Number(result[2]),
74
+ }
75
+ }
76
+
77
+ /**
78
+ * Build ERC20 token approval transaction to Permit2
79
+ */
80
+ export function buildTokenApprovalTx(
81
+ token: Address,
82
+ permit2Address: Address,
83
+ ): TransactionData {
84
+ const data = encodeFunctionData({
85
+ abi: erc20Abi,
86
+ functionName: 'approve',
87
+ // ERC20 -> Permit2: maxUint256 is the Uniswap-canonical pattern.
88
+ // Permit2 is immutable with no owner — spending is scoped by its own allowance system.
89
+ args: [permit2Address, maxUint256],
90
+ })
91
+
92
+ return {
93
+ to: token,
94
+ data,
95
+ value: 0n,
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Build Permit2 approval transaction for a spender
101
+ */
102
+ export function buildPermit2ApprovalTx(params: {
103
+ permit2Address: Address
104
+ token: Address
105
+ spender: Address
106
+ amount: bigint
107
+ expirySeconds?: number
108
+ }): TransactionData {
109
+ const { permit2Address, token, spender, amount } = params
110
+ const expiration =
111
+ Math.floor(Date.now() / 1000) +
112
+ (params.expirySeconds ?? DEFAULT_PERMIT2_EXPIRY_SECONDS)
113
+
114
+ const data = encodeFunctionData({
115
+ abi: PERMIT2_ABI,
116
+ functionName: 'approve',
117
+ args: [token, spender, amount, expiration],
118
+ })
119
+
120
+ return {
121
+ to: permit2Address,
122
+ data,
123
+ value: 0n,
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Check ERC20 token allowance
129
+ */
130
+ export async function checkTokenAllowance(params: {
131
+ publicClient: PublicClient
132
+ token: Address
133
+ owner: Address
134
+ spender: Address
135
+ }): Promise<bigint> {
136
+ const { publicClient, token, owner, spender } = params
137
+
138
+ return publicClient.readContract({
139
+ address: token,
140
+ abi: erc20Abi,
141
+ functionName: 'allowance',
142
+ args: [owner, spender],
143
+ })
144
+ }
@@ -0,0 +1,76 @@
1
+ import type { Address } from 'viem'
2
+
3
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
4
+ import type { Asset } from '@/types/asset.js'
5
+ import { isAssetSupportedOnChain } from '@/utils/assets.js'
6
+
7
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'
8
+
9
+ export function validateAmountProvided(
10
+ amountIn?: number,
11
+ amountOut?: number,
12
+ ): void {
13
+ if (amountIn === undefined && amountOut === undefined) {
14
+ throw new Error('Either amountIn or amountOut must be provided')
15
+ }
16
+ }
17
+
18
+ export function validateAmountPositiveIfExists(amount?: number): void {
19
+ if (amount !== undefined && amount <= 0) {
20
+ throw new Error('Amount must be positive')
21
+ }
22
+ }
23
+
24
+ export function validateNotBothAmounts(
25
+ amountIn?: number,
26
+ amountOut?: number,
27
+ ): void {
28
+ if (amountIn !== undefined && amountOut !== undefined) {
29
+ throw new Error('Provide either amountIn or amountOut, not both')
30
+ }
31
+ }
32
+
33
+ export function validateNotSameAsset(assetIn: Asset, assetOut: Asset): void {
34
+ if (
35
+ assetIn.metadata.symbol.toLowerCase() ===
36
+ assetOut.metadata.symbol.toLowerCase()
37
+ ) {
38
+ throw new Error('Cannot swap an asset for itself')
39
+ }
40
+ }
41
+
42
+ export function validateNotZeroAddress(address: Address, label: string): void {
43
+ if (address === ZERO_ADDRESS) {
44
+ throw new Error(`${label} cannot be the zero address`)
45
+ }
46
+ }
47
+
48
+ export function validateSlippage(slippage: number, maxSlippage: number): void {
49
+ if (slippage < 0 || slippage > maxSlippage) {
50
+ throw new Error(
51
+ `Slippage ${slippage} exceeds allowed range [0, ${maxSlippage * 100}%]`,
52
+ )
53
+ }
54
+ }
55
+
56
+ export function validateChainSupported(
57
+ chainId: number,
58
+ supportedChainIds: readonly number[],
59
+ ): void {
60
+ if (!supportedChainIds.includes(chainId)) {
61
+ throw new Error(
62
+ `Chain ${chainId} is not supported. Supported chains: ${supportedChainIds.join(', ')}`,
63
+ )
64
+ }
65
+ }
66
+
67
+ export function validateAssetOnChain(
68
+ asset: Asset,
69
+ chainId: SupportedChainId,
70
+ ): void {
71
+ if (!isAssetSupportedOnChain(asset, chainId)) {
72
+ throw new Error(
73
+ `Asset ${asset.metadata.symbol} not supported on chain ${chainId}`,
74
+ )
75
+ }
76
+ }
@@ -18,10 +18,8 @@ import type { SmartWallet } from '@/wallet/core/wallets/smart/abstract/SmartWall
18
18
  export class WalletNamespace<
19
19
  THostedProviderType extends string,
20
20
  TToActionsMap extends Record<THostedProviderType, unknown>,
21
- H extends HostedWalletProvider<
22
- THostedProviderType,
23
- TToActionsMap
24
- > = HostedWalletProvider<THostedProviderType, TToActionsMap>,
21
+ H extends HostedWalletProvider<THostedProviderType, TToActionsMap> =
22
+ HostedWalletProvider<THostedProviderType, TToActionsMap>,
25
23
  S extends SmartWalletProvider = SmartWalletProvider,
26
24
  > {
27
25
  private provider: WalletProvider<THostedProviderType, TToActionsMap, H, S>
@@ -3,16 +3,16 @@ import { getAddress } from 'viem'
3
3
  import { unichain } from 'viem/chains'
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
5
 
6
- import type { SupportedChainId } from '@/constants/supportedChains.js'
7
- import type { ChainManager } from '@/services/ChainManager.js'
8
- import { MockChainManager } from '@/test/MockChainManager.js'
9
- import { createMockLendProvider } from '@/test/MockLendProvider.js'
10
6
  import {
11
7
  createMockPrivyClient,
12
8
  createMockPrivyWallet,
13
9
  getMockAuthorizationContext,
14
- } from '@/test/MockPrivyClient.js'
15
- import { getRandomAddress } from '@/test/utils.js'
10
+ } from '@/__mocks__/MockPrivyClient.js'
11
+ import { getRandomAddress } from '@/__mocks__/utils.js'
12
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
13
+ import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
14
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
15
+ import type { ChainManager } from '@/services/ChainManager.js'
16
16
  import { WalletNamespace } from '@/wallet/core/namespace/WalletNamespace.js'
17
17
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
18
18
  import { WalletProvider } from '@/wallet/core/providers/WalletProvider.js'
@@ -2,16 +2,16 @@ import type { WaitForUserOperationReceiptReturnType } from 'viem/account-abstrac
2
2
  import { unichain } from 'viem/chains'
3
3
  import { beforeEach, describe, expect, it, vi } from 'vitest'
4
4
 
5
- import type { SupportedChainId } from '@/constants/supportedChains.js'
6
- import type { ChainManager } from '@/services/ChainManager.js'
7
- import { MockChainManager } from '@/test/MockChainManager.js'
8
- import { createMockLendProvider } from '@/test/MockLendProvider.js'
9
5
  import {
10
6
  createMockPrivyClient,
11
7
  createMockPrivyWallet,
12
8
  getMockAuthorizationContext,
13
- } from '@/test/MockPrivyClient.js'
14
- import { getRandomAddress } from '@/test/utils.js'
9
+ } from '@/__mocks__/MockPrivyClient.js'
10
+ import { getRandomAddress } from '@/__mocks__/utils.js'
11
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
12
+ import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
13
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
14
+ import type { ChainManager } from '@/services/ChainManager.js'
15
15
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
16
16
  import { WalletProvider } from '@/wallet/core/providers/WalletProvider.js'
17
17
  import { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
@@ -2,7 +2,8 @@ import type { LocalAccount } from 'viem'
2
2
 
3
3
  import type { LendProvider } from '@/lend/core/LendProvider.js'
4
4
  import type { ChainManager } from '@/services/ChainManager.js'
5
- import type { LendProviderConfig } from '@/types/actions.js'
5
+ import type { SwapProvider } from '@/swap/core/SwapProvider.js'
6
+ import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
6
7
  import type { Asset } from '@/types/asset.js'
7
8
  import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
8
9
 
@@ -21,6 +22,9 @@ export abstract class HostedWalletProvider<
21
22
  morpho?: LendProvider<LendProviderConfig>
22
23
  aave?: LendProvider<LendProviderConfig>
23
24
  }
25
+ protected swapProviders: {
26
+ uniswap?: SwapProvider<SwapProviderConfig>
27
+ }
24
28
  protected supportedAssets?: Asset[]
25
29
 
26
30
  protected constructor(
@@ -29,10 +33,14 @@ export abstract class HostedWalletProvider<
29
33
  morpho?: LendProvider<LendProviderConfig>
30
34
  aave?: LendProvider<LendProviderConfig>
31
35
  },
36
+ swapProviders?: {
37
+ uniswap?: SwapProvider<SwapProviderConfig>
38
+ },
32
39
  supportedAssets?: Asset[],
33
40
  ) {
34
41
  this.chainManager = chainManager
35
42
  this.lendProviders = lendProviders || {}
43
+ this.swapProviders = swapProviders || {}
36
44
  this.supportedAssets = supportedAssets
37
45
  }
38
46
  /**
@@ -2,12 +2,12 @@ import type { PrivyClient } from '@privy-io/node'
2
2
  import { unichain } from 'viem/chains'
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
4
4
 
5
- import type { ChainManager } from '@/services/ChainManager.js'
6
- import { MockChainManager } from '@/test/MockChainManager.js'
7
5
  import {
8
6
  createMockPrivyClient,
9
7
  getMockAuthorizationContext,
10
- } from '@/test/MockPrivyClient.js'
8
+ } from '@/__mocks__/MockPrivyClient.js'
9
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
10
+ import type { ChainManager } from '@/services/ChainManager.js'
11
11
  import { HostedWalletProviderRegistry } from '@/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.js'
12
12
  import { PrivyHostedWalletProvider } from '@/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js'
13
13
  import type { NodeOptionsMap } from '@/wallet/node/providers/hosted/types/index.js'
@@ -1,6 +1,7 @@
1
1
  import type { LendProvider } from '@/lend/core/LendProvider.js'
2
2
  import type { ChainManager } from '@/services/ChainManager.js'
3
- import type { LendProviderConfig } from '@/types/actions.js'
3
+ import type { SwapProvider } from '@/swap/core/SwapProvider.js'
4
+ import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
4
5
  import type { Asset } from '@/types/asset.js'
5
6
  import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
6
7
 
@@ -16,6 +17,9 @@ export interface HostedProviderDeps {
16
17
  morpho?: LendProvider<LendProviderConfig>
17
18
  aave?: LendProvider<LendProviderConfig>
18
19
  }
20
+ swapProviders?: {
21
+ uniswap?: SwapProvider<SwapProviderConfig>
22
+ }
19
23
  supportedAssets?: Asset[]
20
24
  }
21
25
 
@@ -4,7 +4,8 @@ import { keccak256, slice, toHex } from 'viem'
4
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
5
  import type { LendProvider } from '@/lend/core/LendProvider.js'
6
6
  import type { ChainManager } from '@/services/ChainManager.js'
7
- import type { LendProviderConfig } from '@/types/actions.js'
7
+ import type { SwapProvider } from '@/swap/core/SwapProvider.js'
8
+ import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
8
9
  import type { Asset } from '@/types/asset.js'
9
10
  import { SmartWalletProvider } from '@/wallet/core/providers/smart/abstract/SmartWalletProvider.js'
10
11
  import type { SmartWalletCreationResult } from '@/wallet/core/providers/smart/abstract/types/index.js'
@@ -31,6 +32,10 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
31
32
  morpho?: LendProvider<LendProviderConfig>
32
33
  aave?: LendProvider<LendProviderConfig>
33
34
  }
35
+ /** Providers for swap operations */
36
+ private swapProviders: {
37
+ uniswap?: SwapProvider<SwapProviderConfig>
38
+ }
34
39
  /** Supported assets for this wallet provider */
35
40
  private supportedAssets?: Asset[]
36
41
  /** Optional 16-byte attribution suffix appended to callData */
@@ -40,6 +45,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
40
45
  * Initialize the Smart Wallet Provider
41
46
  * @param chainManager - Manages supported blockchain networks
42
47
  * @param lendProviders - Providers for lending market operations
48
+ * @param swapProviders - Providers for swap operations
43
49
  * @param supportedAssets - Optional list of supported assets
44
50
  * @param attributionSuffix - Optional attribution suffix
45
51
  */
@@ -49,12 +55,16 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
49
55
  morpho?: LendProvider<LendProviderConfig>
50
56
  aave?: LendProvider<LendProviderConfig>
51
57
  },
58
+ swapProviders?: {
59
+ uniswap?: SwapProvider<SwapProviderConfig>
60
+ },
52
61
  supportedAssets?: Asset[],
53
62
  attributionSuffix?: string,
54
63
  ) {
55
64
  super()
56
65
  this.chainManager = chainManager
57
66
  this.lendProviders = lendProviders || {}
67
+ this.swapProviders = swapProviders || {}
58
68
  this.supportedAssets = supportedAssets
59
69
  if (attributionSuffix) {
60
70
  this.attributionSuffix =
@@ -93,6 +103,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
93
103
  signer,
94
104
  chainManager: this.chainManager,
95
105
  lendProviders: this.lendProviders,
106
+ swapProviders: this.swapProviders,
96
107
  supportedAssets: this.supportedAssets,
97
108
  nonce,
98
109
  attributionSuffix: this.attributionSuffix,
@@ -182,6 +193,7 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
182
193
  signer,
183
194
  chainManager: this.chainManager,
184
195
  lendProviders: this.lendProviders,
196
+ swapProviders: this.swapProviders,
185
197
  supportedAssets: this.supportedAssets,
186
198
  deploymentAddress: walletAddress,
187
199
  attributionSuffix: this.attributionSuffix,
@@ -14,11 +14,11 @@ import type {
14
14
  } from 'viem/account-abstraction'
15
15
  import { beforeEach, describe, expect, it, vi } from 'vitest'
16
16
 
17
+ import { getRandomAddress } from '@/__mocks__/utils.js'
17
18
  import type { SupportedChainId } from '@/constants/supportedChains.js'
19
+ import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
20
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
18
21
  import type { ChainManager } from '@/services/ChainManager.js'
19
- import { MockChainManager } from '@/test/MockChainManager.js'
20
- import { createMockLendProvider } from '@/test/MockLendProvider.js'
21
- import { getRandomAddress } from '@/test/utils.js'
22
22
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
23
23
  import { createMock as createDefaultSmartWalletMock } from '@/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.js'
24
24
  import {
@@ -165,9 +165,8 @@ describe('DefaultSmartWalletProvider', () => {
165
165
  const nonce = BigInt(123)
166
166
 
167
167
  // Mock deploy to fail for all chains
168
- const { SmartWalletDeploymentError } = await import(
169
- '@/wallet/core/wallets/smart/error/errors.js'
170
- )
168
+ const { SmartWalletDeploymentError } =
169
+ await import('@/wallet/core/wallets/smart/error/errors.js')
171
170
  vi.mocked(mockWallet.deploy)
172
171
  .mockRejectedValueOnce(
173
172
  new SmartWalletDeploymentError('Deployment failed', 1),
@@ -209,9 +208,8 @@ describe('DefaultSmartWalletProvider', () => {
209
208
  const signers = [mockSigner.address, getRandomAddress()]
210
209
  const nonce = BigInt(123)
211
210
 
212
- const { SmartWalletDeploymentError } = await import(
213
- '@/wallet/core/wallets/smart/error/errors.js'
214
- )
211
+ const { SmartWalletDeploymentError } =
212
+ await import('@/wallet/core/wallets/smart/error/errors.js')
215
213
 
216
214
  // Mock deploy to succeed for chain 1, fail for chain 130
217
215
  vi.mocked(mockWallet.deploy)
@@ -415,6 +413,7 @@ describe('DefaultSmartWalletProvider', () => {
415
413
  const provider = new DefaultSmartWalletProvider(
416
414
  mockChainManager,
417
415
  { morpho: mockLendProvider },
416
+ undefined,
418
417
  supportedAssets,
419
418
  attributionSeed,
420
419
  )
@@ -442,6 +441,7 @@ describe('DefaultSmartWalletProvider', () => {
442
441
  const provider = new DefaultSmartWalletProvider(
443
442
  mockChainManager,
444
443
  { morpho: mockLendProvider },
444
+ undefined,
445
445
  supportedAssets,
446
446
  attributionSeed,
447
447
  )
@@ -6,9 +6,11 @@ import { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
6
6
  import type { ChainManager } from '@/services/ChainManager.js'
7
7
  import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
8
8
  import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
9
- import type { LendProviderConfig } from '@/types/actions.js'
9
+ import type { SwapProvider } from '@/swap/core/SwapProvider.js'
10
+ import { WalletSwapNamespace } from '@/swap/namespaces/WalletSwapNamespace.js'
11
+ import type { LendProviderConfig, SwapProviderConfig } from '@/types/actions.js'
10
12
  import type { Asset, TokenBalance } from '@/types/asset.js'
11
- import type { TransactionData } from '@/types/lend/index.js'
13
+ import type { TransactionData } from '@/types/transaction.js'
12
14
  import type {
13
15
  BatchTransactionReturnType,
14
16
  TransactionReturnType,
@@ -27,6 +29,12 @@ export abstract class Wallet {
27
29
  morpho?: LendProvider<LendProviderConfig>
28
30
  aave?: LendProvider<LendProviderConfig>
29
31
  }
32
+ /** Swap namespace with all swap operations */
33
+ swap?: WalletSwapNamespace
34
+ /** Providers for swap operations */
35
+ protected swapProviders: {
36
+ uniswap?: SwapProvider<SwapProviderConfig>
37
+ }
30
38
  /** Manages supported blockchain networks and RPC clients */
31
39
  protected chainManager: ChainManager
32
40
  /** List of supported assets for this wallet */
@@ -53,6 +61,7 @@ export abstract class Wallet {
53
61
  * Create a new wallet
54
62
  * @param chainManager - Chain manager for the wallet
55
63
  * @param lendProviders - Lend providers for the wallet
64
+ * @param swapProviders - Swap providers for the wallet
56
65
  * @param supportedAssets - List of supported assets (defaults to all SUPPORTED_TOKENS)
57
66
  */
58
67
  protected constructor(
@@ -61,14 +70,21 @@ export abstract class Wallet {
61
70
  morpho?: LendProvider<LendProviderConfig>
62
71
  aave?: LendProvider<LendProviderConfig>
63
72
  },
73
+ swapProviders?: {
74
+ uniswap?: SwapProvider<SwapProviderConfig>
75
+ },
64
76
  supportedAssets?: Asset[],
65
77
  ) {
66
78
  this.chainManager = chainManager
67
79
  this.lendProviders = lendProviders || {}
80
+ this.swapProviders = swapProviders || {}
68
81
  this.supportedAssets = supportedAssets || SUPPORTED_TOKENS
69
82
  if (this.lendProviders.morpho || this.lendProviders.aave) {
70
83
  this.lend = new WalletLendNamespace(this.lendProviders, this)
71
84
  }
85
+ if (this.swapProviders.uniswap) {
86
+ this.swap = new WalletSwapNamespace(this.swapProviders, this)
87
+ }
72
88
  }
73
89
 
74
90
  /**
@@ -2,12 +2,12 @@ import type { LocalAccount } from 'viem'
2
2
  import { unichain } from 'viem/chains'
3
3
  import { beforeEach, describe, expect, it, vi } from 'vitest'
4
4
 
5
+ import { getRandomAddress } from '@/__mocks__/utils.js'
5
6
  import type { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
7
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
6
8
  import type { ChainManager } from '@/services/ChainManager.js'
7
9
  import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
8
10
  import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
9
- import { MockChainManager } from '@/test/MockChainManager.js'
10
- import { getRandomAddress } from '@/test/utils.js'
11
11
  import { TestWallet } from '@/wallet/core/wallets/abstract/__mocks__/TestWallet.js'
12
12
 
13
13
  vi.mock('@/services/tokenBalance.js', async () => {