@eth-optimism/actions-sdk 0.0.3 → 0.1.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 (243) hide show
  1. package/dist/actions.d.ts +19 -7
  2. package/dist/actions.d.ts.map +1 -1
  3. package/dist/actions.js +49 -19
  4. package/dist/actions.js.map +1 -1
  5. package/dist/actions.test.js +51 -81
  6. package/dist/actions.test.js.map +1 -1
  7. package/dist/constants/assets.d.ts.map +1 -1
  8. package/dist/constants/assets.js +2 -1
  9. package/dist/constants/assets.js.map +1 -1
  10. package/dist/constants/supportedChains.d.ts +1 -1
  11. package/dist/constants/supportedChains.d.ts.map +1 -1
  12. package/dist/constants/supportedChains.js +2 -1
  13. package/dist/constants/supportedChains.js.map +1 -1
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/lend/core/LendProvider.d.ts +3 -2
  18. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  19. package/dist/lend/core/LendProvider.js.map +1 -1
  20. package/dist/lend/core/__tests__/LendProvider.test.js +18 -48
  21. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  22. package/dist/lend/index.d.ts +1 -0
  23. package/dist/lend/index.d.ts.map +1 -1
  24. package/dist/lend/index.js +1 -0
  25. package/dist/lend/index.js.map +1 -1
  26. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +35 -8
  27. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  28. package/dist/lend/namespaces/ActionsLendNamespace.js +45 -8
  29. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  30. package/dist/lend/namespaces/WalletLendNamespace.d.ts +43 -10
  31. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  32. package/dist/lend/namespaces/WalletLendNamespace.js +67 -13
  33. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  34. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +23 -15
  35. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  36. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +29 -11
  37. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  38. package/dist/lend/providers/aave/AaveLendProvider.d.ts +82 -0
  39. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
  40. package/dist/lend/providers/aave/AaveLendProvider.js +346 -0
  41. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
  42. package/dist/lend/providers/aave/addresses.d.ts +57 -0
  43. package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
  44. package/dist/lend/providers/aave/addresses.js +83 -0
  45. package/dist/lend/providers/aave/addresses.js.map +1 -0
  46. package/dist/lend/providers/aave/sdk.d.ts +57 -0
  47. package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
  48. package/dist/lend/providers/aave/sdk.js +260 -0
  49. package/dist/lend/providers/aave/sdk.js.map +1 -0
  50. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -3
  51. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  52. package/dist/lend/providers/morpho/MorphoLendProvider.js +2 -2
  53. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  54. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +1 -33
  55. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  56. package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
  57. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  58. package/dist/lend/providers/morpho/sdk.d.ts +4 -3
  59. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  60. package/dist/lend/providers/morpho/sdk.js +0 -1
  61. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  62. package/dist/services/ChainManager.d.ts +1 -1
  63. package/dist/supported/tokens.d.ts.map +1 -1
  64. package/dist/supported/tokens.js +18 -2
  65. package/dist/supported/tokens.js.map +1 -1
  66. package/dist/test/MockLendProvider.d.ts +5 -4
  67. package/dist/test/MockLendProvider.d.ts.map +1 -1
  68. package/dist/test/MockLendProvider.js +5 -5
  69. package/dist/test/MockLendProvider.js.map +1 -1
  70. package/dist/test/MockPrivyClient.d.ts +10 -49
  71. package/dist/test/MockPrivyClient.d.ts.map +1 -1
  72. package/dist/test/MockPrivyClient.js +13 -72
  73. package/dist/test/MockPrivyClient.js.map +1 -1
  74. package/dist/types/actions.d.ts +26 -2
  75. package/dist/types/actions.d.ts.map +1 -1
  76. package/dist/types/lend/base.d.ts +6 -19
  77. package/dist/types/lend/base.d.ts.map +1 -1
  78. package/dist/wallet/core/namespace/WalletNamespace.d.ts +13 -13
  79. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  80. package/dist/wallet/core/namespace/WalletNamespace.js +13 -13
  81. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  82. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +64 -42
  83. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  84. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +51 -23
  85. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  86. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
  87. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  88. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
  89. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  90. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +14 -4
  91. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  92. package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
  93. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  94. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
  95. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  96. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
  97. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  98. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +36 -13
  99. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  100. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
  101. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  102. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
  103. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  104. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
  105. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  106. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
  107. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  108. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +1 -1
  109. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  110. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +24 -4
  111. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  112. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +21 -6
  113. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  114. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +34 -14
  115. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  116. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  117. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +10 -4
  118. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  119. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +9 -1
  120. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  121. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
  122. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  123. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
  124. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  125. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +4 -3
  126. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  127. package/dist/wallet/node/providers/hosted/types/index.d.ts +6 -1
  128. package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -1
  129. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +19 -7
  130. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  131. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +13 -7
  132. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  133. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +26 -28
  134. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  135. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +12 -12
  136. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  137. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +6 -2
  138. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -1
  139. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +10 -7
  140. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -1
  141. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
  142. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  143. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  144. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  145. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
  146. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  147. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
  148. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  149. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +19 -7
  150. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  151. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
  152. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  153. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
  154. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  155. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -3
  156. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  157. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
  158. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  159. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
  160. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  161. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +6 -3
  162. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  163. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  164. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  165. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
  166. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  167. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  168. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  169. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
  170. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  171. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  172. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
  173. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  174. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  175. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  176. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
  177. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  178. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  179. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  180. package/package.json +5 -2
  181. package/src/actions.test.ts +55 -96
  182. package/src/actions.ts +82 -26
  183. package/src/constants/assets.ts +8 -1
  184. package/src/constants/supportedChains.ts +8 -1
  185. package/src/index.ts +1 -2
  186. package/src/lend/core/LendProvider.ts +6 -5
  187. package/src/lend/core/__tests__/LendProvider.test.ts +19 -61
  188. package/src/lend/index.ts +1 -0
  189. package/src/lend/namespaces/ActionsLendNamespace.ts +77 -13
  190. package/src/lend/namespaces/WalletLendNamespace.ts +106 -20
  191. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +24 -18
  192. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +49 -11
  193. package/src/lend/providers/aave/AaveLendProvider.ts +463 -0
  194. package/src/lend/providers/aave/addresses.ts +95 -0
  195. package/src/lend/providers/aave/sdk.ts +369 -0
  196. package/src/lend/providers/morpho/MorphoLendProvider.ts +5 -5
  197. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +5 -53
  198. package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
  199. package/src/lend/providers/morpho/sdk.ts +3 -4
  200. package/src/supported/tokens.ts +24 -2
  201. package/src/test/MockLendProvider.ts +9 -9
  202. package/src/test/MockPrivyClient.ts +24 -91
  203. package/src/types/actions.ts +30 -2
  204. package/src/types/lend/base.ts +6 -22
  205. package/src/wallet/core/namespace/WalletNamespace.ts +13 -13
  206. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +69 -70
  207. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +55 -47
  208. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
  209. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +20 -7
  210. package/src/wallet/core/providers/hosted/types/index.ts +8 -2
  211. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
  212. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +38 -46
  213. package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
  214. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
  215. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +4 -7
  216. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +37 -11
  217. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +43 -24
  218. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -7
  219. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +17 -2
  220. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
  221. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +4 -4
  222. package/src/wallet/node/providers/hosted/types/index.ts +9 -2
  223. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +31 -11
  224. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +35 -40
  225. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +18 -14
  226. package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +11 -9
  227. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
  228. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
  229. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +25 -14
  230. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
  231. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +7 -7
  232. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
  233. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +6 -7
  234. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
  235. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
  236. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
  237. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
  238. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
  239. package/dist/constants/config.d.ts +0 -10
  240. package/dist/constants/config.d.ts.map +0 -1
  241. package/dist/constants/config.js +0 -10
  242. package/dist/constants/config.js.map +0 -1
  243. package/src/constants/config.ts +0 -9
@@ -6,7 +6,11 @@ import type { SupportedChainId } from '@/constants/supportedChains.js'
6
6
  import type { ChainManager } from '@/services/ChainManager.js'
7
7
  import { MockChainManager } from '@/test/MockChainManager.js'
8
8
  import { createMockLendProvider } from '@/test/MockLendProvider.js'
9
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
9
+ import {
10
+ createMockPrivyClient,
11
+ createMockPrivyWallet,
12
+ getMockAuthorizationContext,
13
+ } from '@/test/MockPrivyClient.js'
10
14
  import { getRandomAddress } from '@/test/utils.js'
11
15
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
12
16
  import { WalletProvider } from '@/wallet/core/providers/WalletProvider.js'
@@ -31,13 +35,14 @@ describe('WalletProvider', () => {
31
35
 
32
36
  describe('createSmartWallet', () => {
33
37
  it('should create a smart wallet and return deployment result', async () => {
34
- const hostedWalletProvider = new PrivyHostedWalletProvider(
35
- mockPrivyClient,
36
- mockChainManager,
37
- )
38
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
39
+ privyClient: mockPrivyClient,
40
+ authorizationContext: getMockAuthorizationContext(),
41
+ chainManager: mockChainManager,
42
+ })
38
43
  const smartWalletProvider = new DefaultSmartWalletProvider(
39
44
  mockChainManager,
40
- mockLendProvider,
45
+ { morpho: mockLendProvider },
41
46
  )
42
47
  const walletProvider = new WalletProvider(
43
48
  hostedWalletProvider,
@@ -84,13 +89,14 @@ describe('WalletProvider', () => {
84
89
  })
85
90
 
86
91
  it('should pass through deployment successes and failures', async () => {
87
- const hostedWalletProvider = new PrivyHostedWalletProvider(
88
- mockPrivyClient,
89
- mockChainManager,
90
- )
92
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
93
+ privyClient: mockPrivyClient,
94
+ authorizationContext: getMockAuthorizationContext(),
95
+ chainManager: mockChainManager,
96
+ })
91
97
  const smartWalletProvider = new DefaultSmartWalletProvider(
92
98
  mockChainManager,
93
- mockLendProvider,
99
+ { morpho: mockLendProvider },
94
100
  )
95
101
  const walletProvider = new WalletProvider(
96
102
  hostedWalletProvider,
@@ -138,13 +144,14 @@ describe('WalletProvider', () => {
138
144
  })
139
145
 
140
146
  it('should forward deploymentChainIds parameter', async () => {
141
- const hostedWalletProvider = new PrivyHostedWalletProvider(
142
- mockPrivyClient,
143
- mockChainManager,
144
- )
147
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
148
+ privyClient: mockPrivyClient,
149
+ authorizationContext: getMockAuthorizationContext(),
150
+ chainManager: mockChainManager,
151
+ })
145
152
  const smartWalletProvider = new DefaultSmartWalletProvider(
146
153
  mockChainManager,
147
- mockLendProvider,
154
+ { morpho: mockLendProvider },
148
155
  )
149
156
  const walletProvider = new WalletProvider(
150
157
  hostedWalletProvider,
@@ -190,13 +197,14 @@ describe('WalletProvider', () => {
190
197
  })
191
198
 
192
199
  it('should throw error if signer is not in signers array', async () => {
193
- const hostedWalletProvider = new PrivyHostedWalletProvider(
194
- mockPrivyClient,
195
- mockChainManager,
196
- )
200
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
201
+ privyClient: mockPrivyClient,
202
+ authorizationContext: getMockAuthorizationContext(),
203
+ chainManager: mockChainManager,
204
+ })
197
205
  const smartWalletProvider = new DefaultSmartWalletProvider(
198
206
  mockChainManager,
199
- mockLendProvider,
207
+ { morpho: mockLendProvider },
200
208
  )
201
209
  const walletProvider = new WalletProvider(
202
210
  hostedWalletProvider,
@@ -222,13 +230,14 @@ describe('WalletProvider', () => {
222
230
 
223
231
  describe('getSmartWallet', () => {
224
232
  it('should get a smart wallet with provided signer', async () => {
225
- const hostedWalletProvider = new PrivyHostedWalletProvider(
226
- mockPrivyClient,
227
- mockChainManager,
228
- )
233
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
234
+ privyClient: mockPrivyClient,
235
+ authorizationContext: getMockAuthorizationContext(),
236
+ chainManager: mockChainManager,
237
+ })
229
238
  const smartWalletProvider = new DefaultSmartWalletProvider(
230
239
  mockChainManager,
231
- mockLendProvider,
240
+ { morpho: mockLendProvider },
232
241
  )
233
242
  const mockWalletAddress = getRandomAddress()
234
243
  const getWalletAddressSpy = vi
@@ -268,13 +277,14 @@ describe('WalletProvider', () => {
268
277
  })
269
278
 
270
279
  it('should throw error when getting smart wallet without required parameters', async () => {
271
- const hostedWalletProvider = new PrivyHostedWalletProvider(
272
- mockPrivyClient,
273
- mockChainManager,
274
- )
280
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
281
+ privyClient: mockPrivyClient,
282
+ authorizationContext: getMockAuthorizationContext(),
283
+ chainManager: mockChainManager,
284
+ })
275
285
  const smartWalletProvider = new DefaultSmartWalletProvider(
276
286
  mockChainManager,
277
- mockLendProvider,
287
+ { morpho: mockLendProvider },
278
288
  )
279
289
  const walletProvider = new WalletProvider(
280
290
  hostedWalletProvider,
@@ -301,13 +311,14 @@ describe('WalletProvider', () => {
301
311
 
302
312
  describe('hostedWalletToActionsWallet', () => {
303
313
  it('should convert a hosted wallet to an Actions wallet', async () => {
304
- const hostedWalletProvider = new PrivyHostedWalletProvider(
305
- mockPrivyClient,
306
- mockChainManager,
307
- )
314
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
315
+ privyClient: mockPrivyClient,
316
+ authorizationContext: getMockAuthorizationContext(),
317
+ chainManager: mockChainManager,
318
+ })
308
319
  const smartWalletProvider = new DefaultSmartWalletProvider(
309
320
  mockChainManager,
310
- mockLendProvider,
321
+ { morpho: mockLendProvider },
311
322
  )
312
323
  const walletProvider = new WalletProvider(
313
324
  hostedWalletProvider,
@@ -318,9 +329,7 @@ describe('WalletProvider', () => {
318
329
  'toActionsWallet',
319
330
  )
320
331
 
321
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
322
- chainType: 'ethereum',
323
- })
332
+ const privyWallet = createMockPrivyWallet()
324
333
  const hostedWallet = await walletProvider.hostedWalletToActionsWallet({
325
334
  walletId: privyWallet.id,
326
335
  address: privyWallet.address,
@@ -342,13 +351,14 @@ describe('WalletProvider', () => {
342
351
  'test-app-id',
343
352
  'test-app-secret',
344
353
  )
345
- const hostedWalletProvider = new PrivyHostedWalletProvider(
346
- mockPrivyClient,
347
- mockChainManager,
348
- )
354
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
355
+ privyClient: mockPrivyClient,
356
+ authorizationContext: getMockAuthorizationContext(),
357
+ chainManager: mockChainManager,
358
+ })
349
359
  const smartWalletProvider = new DefaultSmartWalletProvider(
350
360
  mockChainManager,
351
- mockLendProvider,
361
+ { morpho: mockLendProvider },
352
362
  )
353
363
  const walletProvider = new WalletProvider(
354
364
  hostedWalletProvider,
@@ -356,9 +366,7 @@ describe('WalletProvider', () => {
356
366
  )
357
367
  const createSignerSpy = vi.spyOn(hostedWalletProvider, 'createSigner')
358
368
 
359
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
360
- chainType: 'ethereum',
361
- })
369
+ const privyWallet = createMockPrivyWallet()
362
370
  const params = {
363
371
  walletId: privyWallet.id,
364
372
  address: privyWallet.address,
@@ -1,7 +1,9 @@
1
1
  import type { LocalAccount } from 'viem'
2
2
 
3
+ import type { LendProvider } from '@/lend/core/LendProvider.js'
3
4
  import type { ChainManager } from '@/services/ChainManager.js'
4
- import type { LendConfig, LendProvider } from '@/types/lend/index.js'
5
+ import type { LendProviderConfig } from '@/types/actions.js'
6
+ import type { Asset } from '@/types/asset.js'
5
7
  import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
6
8
 
7
9
  /**
@@ -15,14 +17,23 @@ export abstract class HostedWalletProvider<
15
17
  TOptionsMap extends Record<TType, unknown>,
16
18
  > {
17
19
  protected chainManager: ChainManager
18
- protected lendProvider?: LendProvider<LendConfig>
20
+ protected lendProviders: {
21
+ morpho?: LendProvider<LendProviderConfig>
22
+ aave?: LendProvider<LendProviderConfig>
23
+ }
24
+ protected supportedAssets?: Asset[]
19
25
 
20
26
  protected constructor(
21
27
  chainManager: ChainManager,
22
- lendProvider?: LendProvider<LendConfig>,
28
+ lendProviders?: {
29
+ morpho?: LendProvider<LendProviderConfig>
30
+ aave?: LendProvider<LendProviderConfig>
31
+ },
32
+ supportedAssets?: Asset[],
23
33
  ) {
24
34
  this.chainManager = chainManager
25
- this.lendProvider = lendProvider
35
+ this.lendProviders = lendProviders || {}
36
+ this.supportedAssets = supportedAssets
26
37
  }
27
38
  /**
28
39
  * Convert a hosted wallet to an Actions wallet
@@ -1,10 +1,13 @@
1
- import type { PrivyClient } from '@privy-io/server-auth'
1
+ 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
5
  import type { ChainManager } from '@/services/ChainManager.js'
6
6
  import { MockChainManager } from '@/test/MockChainManager.js'
7
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
7
+ import {
8
+ createMockPrivyClient,
9
+ getMockAuthorizationContext,
10
+ } from '@/test/MockPrivyClient.js'
8
11
  import { HostedWalletProviderRegistry } from '@/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.js'
9
12
  import { PrivyHostedWalletProvider } from '@/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js'
10
13
  import type { NodeOptionsMap } from '@/wallet/node/providers/hosted/types/index.js'
@@ -23,7 +26,11 @@ class TestHostedWalletProviderRegistry extends HostedWalletProviderRegistry<
23
26
  return Boolean((options as NodeOptionsMap['privy'])?.privyClient)
24
27
  },
25
28
  create({ chainManager }, options) {
26
- return new PrivyHostedWalletProvider(options.privyClient, chainManager)
29
+ return new PrivyHostedWalletProvider({
30
+ privyClient: options.privyClient,
31
+ chainManager,
32
+ authorizationContext: options.authorizationContext,
33
+ })
27
34
  },
28
35
  })
29
36
  }
@@ -48,9 +55,12 @@ describe('HostedWalletProviderRegistry', () => {
48
55
  const factory = registry.getFactory('privy')
49
56
 
50
57
  expect(factory.type).toBe('privy')
51
- expect(factory.validateOptions?.({ privyClient: mockPrivyClient })).toBe(
52
- true,
53
- )
58
+ expect(
59
+ factory.validateOptions?.({
60
+ privyClient: mockPrivyClient,
61
+ authorizationContext: getMockAuthorizationContext(),
62
+ }),
63
+ ).toBe(true)
54
64
  // Invalid shape should not pass validation
55
65
  expect(factory.validateOptions?.({})).toBe(false)
56
66
  })
@@ -61,7 +71,10 @@ describe('HostedWalletProviderRegistry', () => {
61
71
 
62
72
  const provider = factory.create(
63
73
  { chainManager: mockChainManager },
64
- { privyClient: mockPrivyClient },
74
+ {
75
+ privyClient: mockPrivyClient,
76
+ authorizationContext: getMockAuthorizationContext(),
77
+ },
65
78
  )
66
79
 
67
80
  expect(provider).toBeInstanceOf(PrivyHostedWalletProvider)
@@ -1,5 +1,7 @@
1
+ import type { LendProvider } from '@/lend/core/LendProvider.js'
1
2
  import type { ChainManager } from '@/services/ChainManager.js'
2
- import type { LendConfig, LendProvider } from '@/types/lend/index.js'
3
+ import type { LendProviderConfig } from '@/types/actions.js'
4
+ import type { Asset } from '@/types/asset.js'
3
5
  import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
4
6
 
5
7
  /**
@@ -10,7 +12,11 @@ import type { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstra
10
12
  */
11
13
  export interface HostedProviderDeps {
12
14
  chainManager: ChainManager
13
- lendProvider?: LendProvider<LendConfig>
15
+ lendProviders?: {
16
+ morpho?: LendProvider<LendProviderConfig>
17
+ aave?: LendProvider<LendProviderConfig>
18
+ }
19
+ supportedAssets?: Asset[]
14
20
  }
15
21
 
16
22
  /**
@@ -2,8 +2,10 @@ import type { Address, Hex, LocalAccount } from 'viem'
2
2
  import { keccak256, slice, toHex } from 'viem'
3
3
 
4
4
  import type { SupportedChainId } from '@/constants/supportedChains.js'
5
+ import type { LendProvider } from '@/lend/core/LendProvider.js'
5
6
  import type { ChainManager } from '@/services/ChainManager.js'
6
- import type { LendConfig, LendProvider } from '@/types/lend/index.js'
7
+ import type { LendProviderConfig } from '@/types/actions.js'
8
+ import type { Asset } from '@/types/asset.js'
7
9
  import { SmartWalletProvider } from '@/wallet/core/providers/smart/abstract/SmartWalletProvider.js'
8
10
  import type { SmartWalletCreationResult } from '@/wallet/core/providers/smart/abstract/types/index.js'
9
11
  import type { Signer } from '@/wallet/core/wallets/smart/abstract/types/index.js'
@@ -24,25 +26,36 @@ import { SmartWalletDeploymentError } from '@/wallet/core/wallets/smart/error/er
24
26
  export class DefaultSmartWalletProvider extends SmartWalletProvider {
25
27
  /** Manages supported blockchain networks */
26
28
  private chainManager: ChainManager
27
- /** Provider for lending market operations */
28
- private lendProvider?: LendProvider<LendConfig>
29
+ /** Providers for lending market operations */
30
+ private lendProviders: {
31
+ morpho?: LendProvider<LendProviderConfig>
32
+ aave?: LendProvider<LendProviderConfig>
33
+ }
34
+ /** Supported assets for this wallet provider */
35
+ private supportedAssets?: Asset[]
29
36
  /** Optional 16-byte attribution suffix appended to callData */
30
37
  private attributionSuffix?: Hex
31
38
 
32
39
  /**
33
40
  * Initialize the Smart Wallet Provider
34
41
  * @param chainManager - Manages supported blockchain networks
35
- * @param paymasterAndBundlerUrl - URL for ERC-4337 bundler and paymaster services
36
- * @param lendProvider - Provider for lending market operations
42
+ * @param lendProviders - Providers for lending market operations
43
+ * @param supportedAssets - Optional list of supported assets
44
+ * @param attributionSuffix - Optional attribution suffix
37
45
  */
38
46
  constructor(
39
47
  chainManager: ChainManager,
40
- lendProvider?: LendProvider<LendConfig>,
48
+ lendProviders?: {
49
+ morpho?: LendProvider<LendProviderConfig>
50
+ aave?: LendProvider<LendProviderConfig>
51
+ },
52
+ supportedAssets?: Asset[],
41
53
  attributionSuffix?: string,
42
54
  ) {
43
55
  super()
44
56
  this.chainManager = chainManager
45
- this.lendProvider = lendProvider
57
+ this.lendProviders = lendProviders || {}
58
+ this.supportedAssets = supportedAssets
46
59
  if (attributionSuffix) {
47
60
  this.attributionSuffix =
48
61
  DefaultSmartWalletProvider.computeAttributionSuffix(attributionSuffix)
@@ -79,7 +92,8 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
79
92
  signers,
80
93
  signer,
81
94
  chainManager: this.chainManager,
82
- lendProvider: this.lendProvider,
95
+ lendProviders: this.lendProviders,
96
+ supportedAssets: this.supportedAssets,
83
97
  nonce,
84
98
  attributionSuffix: this.attributionSuffix,
85
99
  })
@@ -167,7 +181,8 @@ export class DefaultSmartWalletProvider extends SmartWalletProvider {
167
181
  signers,
168
182
  signer,
169
183
  chainManager: this.chainManager,
170
- lendProvider: this.lendProvider,
184
+ lendProviders: this.lendProviders,
185
+ supportedAssets: this.supportedAssets,
171
186
  deploymentAddress: walletAddress,
172
187
  attributionSuffix: this.attributionSuffix,
173
188
  })
@@ -35,6 +35,7 @@ const mockSigner: LocalAccount = {
35
35
  address: getRandomAddress(),
36
36
  type: 'local',
37
37
  } as unknown as LocalAccount
38
+ const supportedAssets = undefined
38
39
 
39
40
  describe('DefaultSmartWalletProvider', () => {
40
41
  const mockWallet: ReturnType<typeof createDefaultSmartWalletMock> =
@@ -75,10 +76,9 @@ describe('DefaultSmartWalletProvider', () => {
75
76
  })
76
77
 
77
78
  it('should create a wallet and return deployment results', async () => {
78
- const provider = new DefaultSmartWalletProvider(
79
- mockChainManager,
80
- mockLendProvider,
81
- )
79
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
80
+ morpho: mockLendProvider,
81
+ })
82
82
  const signers = [mockSigner.address, getRandomAddress()]
83
83
  const nonce = BigInt(123)
84
84
 
@@ -117,10 +117,9 @@ describe('DefaultSmartWalletProvider', () => {
117
117
  })
118
118
 
119
119
  it('should report deployment successes across multiple chains', async () => {
120
- const provider = new DefaultSmartWalletProvider(
121
- mockChainManager,
122
- mockLendProvider,
123
- )
120
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
121
+ morpho: mockLendProvider,
122
+ })
124
123
  const signers = [mockSigner.address, getRandomAddress()]
125
124
  const nonce = BigInt(123)
126
125
 
@@ -159,10 +158,9 @@ describe('DefaultSmartWalletProvider', () => {
159
158
  })
160
159
 
161
160
  it('should report deployment failures', async () => {
162
- const provider = new DefaultSmartWalletProvider(
163
- mockChainManager,
164
- mockLendProvider,
165
- )
161
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
162
+ morpho: mockLendProvider,
163
+ })
166
164
  const signers = [mockSigner.address, getRandomAddress()]
167
165
  const nonce = BigInt(123)
168
166
 
@@ -205,10 +203,9 @@ describe('DefaultSmartWalletProvider', () => {
205
203
  })
206
204
 
207
205
  it('should handle mixed deployment successes and failures', async () => {
208
- const provider = new DefaultSmartWalletProvider(
209
- mockChainManager,
210
- mockLendProvider,
211
- )
206
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
207
+ morpho: mockLendProvider,
208
+ })
212
209
  const signers = [mockSigner.address, getRandomAddress()]
213
210
  const nonce = BigInt(123)
214
211
 
@@ -255,10 +252,9 @@ describe('DefaultSmartWalletProvider', () => {
255
252
  })
256
253
 
257
254
  it('should respect deploymentChainIds parameter', async () => {
258
- const provider = new DefaultSmartWalletProvider(
259
- mockChainManager,
260
- mockLendProvider,
261
- )
255
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
256
+ morpho: mockLendProvider,
257
+ })
262
258
  const signers = [mockSigner.address, getRandomAddress()]
263
259
  const nonce = BigInt(123)
264
260
  const deploymentChainIds: SupportedChainId[] = [1]
@@ -286,10 +282,9 @@ describe('DefaultSmartWalletProvider', () => {
286
282
  })
287
283
 
288
284
  it('should throw error for non-SmartWalletDeploymentError failures', async () => {
289
- const provider = new DefaultSmartWalletProvider(
290
- mockChainManager,
291
- mockLendProvider,
292
- )
285
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
286
+ morpho: mockLendProvider,
287
+ })
293
288
  const signers = [mockSigner.address, getRandomAddress()]
294
289
  const nonce = BigInt(123)
295
290
 
@@ -306,10 +301,9 @@ describe('DefaultSmartWalletProvider', () => {
306
301
  })
307
302
 
308
303
  it('should get wallet address with correct contract call', async () => {
309
- const provider = new DefaultSmartWalletProvider(
310
- mockChainManager,
311
- mockLendProvider,
312
- )
304
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
305
+ morpho: mockLendProvider,
306
+ })
313
307
  const signers = [mockSigner.address, getRandomAddress()]
314
308
  const nonce = BigInt(456)
315
309
  const mockAddress = getRandomAddress()
@@ -329,10 +323,9 @@ describe('DefaultSmartWalletProvider', () => {
329
323
  })
330
324
 
331
325
  it('should get wallet address with default nonce', async () => {
332
- const provider = new DefaultSmartWalletProvider(
333
- mockChainManager,
334
- mockLendProvider,
335
- )
326
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
327
+ morpho: mockLendProvider,
328
+ })
336
329
  const signers = [getRandomAddress()]
337
330
  const mockAddress = getRandomAddress()
338
331
 
@@ -351,10 +344,9 @@ describe('DefaultSmartWalletProvider', () => {
351
344
  })
352
345
 
353
346
  it('should handle WebAuthn accounts in wallet address calculation', async () => {
354
- const provider = new DefaultSmartWalletProvider(
355
- mockChainManager,
356
- mockLendProvider,
357
- )
347
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
348
+ morpho: mockLendProvider,
349
+ })
358
350
  const webAuthnAccount: WebAuthnAccount = {
359
351
  type: 'webAuthn',
360
352
  publicKey: '0x123456789abcdef',
@@ -380,10 +372,9 @@ describe('DefaultSmartWalletProvider', () => {
380
372
  })
381
373
 
382
374
  it('should throw error for invalid signer type', async () => {
383
- const provider = new DefaultSmartWalletProvider(
384
- mockChainManager,
385
- mockLendProvider,
386
- )
375
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
376
+ morpho: mockLendProvider,
377
+ })
387
378
  const invalidSigner = { type: 'invalid' } as unknown as Address
388
379
  const signers = [invalidSigner]
389
380
 
@@ -393,10 +384,9 @@ describe('DefaultSmartWalletProvider', () => {
393
384
  })
394
385
 
395
386
  it('should get existing wallet', async () => {
396
- const provider = new DefaultSmartWalletProvider(
397
- mockChainManager,
398
- mockLendProvider,
399
- )
387
+ const provider = new DefaultSmartWalletProvider(mockChainManager, {
388
+ morpho: mockLendProvider,
389
+ })
400
390
  const walletAddress = getRandomAddress()
401
391
 
402
392
  const wallet = await provider.getWallet({
@@ -424,7 +414,8 @@ describe('DefaultSmartWalletProvider', () => {
424
414
  DefaultSmartWalletProvider.computeAttributionSuffix(attributionSeed)
425
415
  const provider = new DefaultSmartWalletProvider(
426
416
  mockChainManager,
427
- mockLendProvider,
417
+ { morpho: mockLendProvider },
418
+ supportedAssets,
428
419
  attributionSeed,
429
420
  )
430
421
 
@@ -450,7 +441,8 @@ describe('DefaultSmartWalletProvider', () => {
450
441
  DefaultSmartWalletProvider.computeAttributionSuffix(attributionSeed)
451
442
  const provider = new DefaultSmartWalletProvider(
452
443
  mockChainManager,
453
- mockLendProvider,
444
+ { morpho: mockLendProvider },
445
+ supportedAssets,
454
446
  attributionSeed,
455
447
  )
456
448
 
@@ -1,17 +1,14 @@
1
1
  import type { Address, LocalAccount } from 'viem'
2
2
 
3
3
  import type { SupportedChainId } from '@/constants/supportedChains.js'
4
+ import type { LendProvider } from '@/lend/core/LendProvider.js'
4
5
  import { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
5
6
  import type { ChainManager } from '@/services/ChainManager.js'
6
7
  import { fetchERC20Balance, fetchETHBalance } from '@/services/tokenBalance.js'
7
8
  import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
8
- import type { TokenBalance } from '@/types/asset.js'
9
- import type {
10
- BaseLendConfig,
11
- LendConfig,
12
- LendProvider,
13
- TransactionData,
14
- } from '@/types/lend/index.js'
9
+ import type { LendProviderConfig } from '@/types/actions.js'
10
+ import type { Asset, TokenBalance } from '@/types/asset.js'
11
+ import type { TransactionData } from '@/types/lend/index.js'
15
12
  import type {
16
13
  BatchTransactionReturnType,
17
14
  TransactionReturnType,
@@ -24,11 +21,16 @@ import type {
24
21
  */
25
22
  export abstract class Wallet {
26
23
  /** Lend namespace with all lending operations */
27
- lend?: WalletLendNamespace<BaseLendConfig>
28
- /** Provider for lending market operations */
29
- protected lendProvider?: LendProvider<LendConfig>
24
+ lend?: WalletLendNamespace
25
+ /** Providers for lending market operations */
26
+ protected lendProviders: {
27
+ morpho?: LendProvider<LendProviderConfig>
28
+ aave?: LendProvider<LendProviderConfig>
29
+ }
30
30
  /** Manages supported blockchain networks and RPC clients */
31
31
  protected chainManager: ChainManager
32
+ /** List of supported assets for this wallet */
33
+ protected supportedAssets: Asset[]
32
34
  /** Promise to initialize the wallet */
33
35
  private initPromise?: Promise<void>
34
36
 
@@ -50,27 +52,33 @@ export abstract class Wallet {
50
52
  /**
51
53
  * Create a new wallet
52
54
  * @param chainManager - Chain manager for the wallet
53
- * @param lendProvider - Lend provider for the wallet
55
+ * @param lendProviders - Lend providers for the wallet
56
+ * @param supportedAssets - List of supported assets (defaults to all SUPPORTED_TOKENS)
54
57
  */
55
58
  protected constructor(
56
59
  chainManager: ChainManager,
57
- lendProvider?: LendProvider<LendConfig>,
60
+ lendProviders?: {
61
+ morpho?: LendProvider<LendProviderConfig>
62
+ aave?: LendProvider<LendProviderConfig>
63
+ },
64
+ supportedAssets?: Asset[],
58
65
  ) {
59
66
  this.chainManager = chainManager
60
- this.lendProvider = lendProvider
61
- if (this.lendProvider) {
62
- this.lend = new WalletLendNamespace(this.lendProvider, this)
67
+ this.lendProviders = lendProviders || {}
68
+ this.supportedAssets = supportedAssets || SUPPORTED_TOKENS
69
+ if (this.lendProviders.morpho || this.lendProviders.aave) {
70
+ this.lend = new WalletLendNamespace(this.lendProviders, this)
63
71
  }
64
72
  }
65
73
 
66
74
  /**
67
75
  * Get asset balances across all supported chains
68
76
  * @description Fetches ETH and ERC20 token balances for this wallet across all supported networks.
77
+ * Uses the configured supported assets from ActionsConfig.assets if provided.
69
78
  * @returns Promise resolving to array of token balances with chain breakdown
70
79
  */
71
80
  async getBalance(): Promise<TokenBalance[]> {
72
- // TEMPORARY - will use optimism token list eventually
73
- const tokenBalancePromises = SUPPORTED_TOKENS.map(async (asset) => {
81
+ const tokenBalancePromises = this.supportedAssets.map(async (asset) => {
74
82
  return fetchERC20Balance(this.chainManager, this.address, asset)
75
83
  })
76
84
  const ethBalancePromise = fetchETHBalance(this.chainManager, this.address)