@eth-optimism/actions-sdk 0.0.4 → 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 (201) 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 +30 -80
  6. package/dist/actions.test.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/lend/core/LendProvider.d.ts +3 -2
  11. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  12. package/dist/lend/core/LendProvider.js.map +1 -1
  13. package/dist/lend/core/__tests__/LendProvider.test.js +18 -48
  14. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  15. package/dist/lend/index.d.ts +1 -0
  16. package/dist/lend/index.d.ts.map +1 -1
  17. package/dist/lend/index.js +1 -0
  18. package/dist/lend/index.js.map +1 -1
  19. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +35 -8
  20. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  21. package/dist/lend/namespaces/ActionsLendNamespace.js +45 -8
  22. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  23. package/dist/lend/namespaces/WalletLendNamespace.d.ts +35 -8
  24. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  25. package/dist/lend/namespaces/WalletLendNamespace.js +59 -11
  26. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  27. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +23 -15
  28. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  29. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +29 -11
  30. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  31. package/dist/lend/providers/aave/AaveLendProvider.d.ts +82 -0
  32. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
  33. package/dist/lend/providers/aave/AaveLendProvider.js +346 -0
  34. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
  35. package/dist/lend/providers/aave/addresses.d.ts +57 -0
  36. package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
  37. package/dist/lend/providers/aave/addresses.js +83 -0
  38. package/dist/lend/providers/aave/addresses.js.map +1 -0
  39. package/dist/lend/providers/aave/sdk.d.ts +57 -0
  40. package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
  41. package/dist/lend/providers/aave/sdk.js +260 -0
  42. package/dist/lend/providers/aave/sdk.js.map +1 -0
  43. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -3
  44. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  45. package/dist/lend/providers/morpho/MorphoLendProvider.js +2 -2
  46. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  47. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +1 -33
  48. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  49. package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
  50. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  51. package/dist/lend/providers/morpho/sdk.d.ts +4 -3
  52. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  53. package/dist/supported/tokens.d.ts.map +1 -1
  54. package/dist/supported/tokens.js +18 -2
  55. package/dist/supported/tokens.js.map +1 -1
  56. package/dist/test/MockLendProvider.d.ts +5 -4
  57. package/dist/test/MockLendProvider.d.ts.map +1 -1
  58. package/dist/test/MockLendProvider.js +5 -5
  59. package/dist/test/MockLendProvider.js.map +1 -1
  60. package/dist/types/actions.d.ts +26 -2
  61. package/dist/types/actions.d.ts.map +1 -1
  62. package/dist/types/lend/base.d.ts +6 -19
  63. package/dist/types/lend/base.d.ts.map +1 -1
  64. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +9 -9
  65. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  66. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +8 -8
  67. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  68. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
  69. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  70. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
  71. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  72. package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
  73. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  74. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
  75. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  76. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
  77. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  78. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +36 -13
  79. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  80. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
  81. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  82. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
  83. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  84. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
  85. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  86. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
  87. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  88. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +1 -1
  89. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  90. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
  91. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  92. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
  93. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  94. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +4 -3
  95. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  96. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  97. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
  98. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  99. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
  100. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  101. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
  102. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  103. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +4 -3
  104. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  105. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
  106. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  107. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
  108. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  109. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
  110. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  111. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  112. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  113. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
  114. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  115. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
  116. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  117. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +19 -7
  118. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  119. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
  120. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  121. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
  122. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  123. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -3
  124. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  125. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
  126. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  127. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
  128. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  129. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +6 -3
  130. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  131. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  132. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  133. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
  134. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  135. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  136. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  137. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
  138. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  139. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  140. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
  141. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  142. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  143. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  144. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
  145. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  146. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  147. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  148. package/package.json +4 -1
  149. package/src/actions.test.ts +32 -93
  150. package/src/actions.ts +82 -26
  151. package/src/index.ts +1 -2
  152. package/src/lend/core/LendProvider.ts +6 -5
  153. package/src/lend/core/__tests__/LendProvider.test.ts +19 -61
  154. package/src/lend/index.ts +1 -0
  155. package/src/lend/namespaces/ActionsLendNamespace.ts +77 -13
  156. package/src/lend/namespaces/WalletLendNamespace.ts +98 -18
  157. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +24 -18
  158. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +49 -11
  159. package/src/lend/providers/aave/AaveLendProvider.ts +463 -0
  160. package/src/lend/providers/aave/addresses.ts +95 -0
  161. package/src/lend/providers/aave/sdk.ts +369 -0
  162. package/src/lend/providers/morpho/MorphoLendProvider.ts +5 -5
  163. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +5 -53
  164. package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
  165. package/src/lend/providers/morpho/sdk.ts +3 -3
  166. package/src/supported/tokens.ts +24 -2
  167. package/src/test/MockLendProvider.ts +9 -9
  168. package/src/types/actions.ts +30 -2
  169. package/src/types/lend/base.ts +6 -22
  170. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +9 -9
  171. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +8 -8
  172. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
  173. package/src/wallet/core/providers/hosted/types/index.ts +8 -2
  174. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
  175. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +38 -46
  176. package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
  177. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
  178. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +4 -7
  179. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
  180. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +4 -4
  181. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
  182. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
  183. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +4 -4
  184. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
  185. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
  186. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
  187. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +25 -14
  188. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
  189. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +7 -7
  190. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
  191. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +6 -7
  192. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
  193. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
  194. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
  195. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
  196. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
  197. package/dist/constants/config.d.ts +0 -10
  198. package/dist/constants/config.d.ts.map +0 -1
  199. package/dist/constants/config.js +0 -10
  200. package/dist/constants/config.js.map +0 -1
  201. package/src/constants/config.ts +0 -9
@@ -1,7 +1,22 @@
1
+ import type { Asset } from '@/types/asset.js'
1
2
  import type { ChainConfig } from '@/types/chain.js'
2
- import type { LendConfig } from '@/types/lend/index.js'
3
+ import type { LendProviderConfig } from '@/types/lend/index.js'
3
4
  import type { ProviderSpec } from '@/wallet/core/providers/hosted/types/index.js'
4
5
 
6
+ // Re-export LendProviderConfig for convenience
7
+ export type { LendProviderConfig }
8
+
9
+ /**
10
+ * Lending configuration
11
+ * @description Configuration for all lending providers
12
+ */
13
+ export interface LendConfig {
14
+ /** Morpho lending provider configuration */
15
+ morpho?: LendProviderConfig
16
+ /** Aave lending provider configuration */
17
+ aave?: LendProviderConfig
18
+ }
19
+
5
20
  /**
6
21
  * Network configuration for lending providers
7
22
  * @description Basic network information that lending providers need
@@ -11,6 +26,17 @@ export interface LendNetworkConfig {
11
26
  name: string
12
27
  }
13
28
 
29
+ /**
30
+ * Assets configuration
31
+ * @description Configuration for supported assets
32
+ */
33
+ export interface AssetsConfig {
34
+ /** Allowlist of assets to support (optional - defaults to all SUPPORTED_TOKENS) */
35
+ allow?: Asset[]
36
+ /** Blocklist of assets to exclude (optional) */
37
+ block?: Asset[]
38
+ }
39
+
14
40
  /**
15
41
  * Actions SDK configuration
16
42
  * @description Configuration object for initializing the Actions SDK
@@ -21,8 +47,10 @@ export interface ActionsConfig<
21
47
  > {
22
48
  /** Wallet configuration */
23
49
  wallet: WalletConfig<THostedWalletProviderType, TConfigMap>
24
- /** Lending provider configuration (optional) */
50
+ /** Lending providers configuration (optional) */
25
51
  lend?: LendConfig
52
+ /** Assets configuration (optional) */
53
+ assets?: AssetsConfig
26
54
  /** Chains to use for the SDK */
27
55
  chains: ChainConfig[]
28
56
  }
@@ -30,7 +30,7 @@ export type LendMarketConfigMetadata = {
30
30
  /** Asset information for this market */
31
31
  asset: Asset
32
32
  /** Lending provider type */
33
- lendProvider: 'morpho'
33
+ lendProvider: 'morpho' | 'aave'
34
34
  }
35
35
 
36
36
  /**
@@ -215,32 +215,16 @@ export interface LendOptions {
215
215
  }
216
216
 
217
217
  /**
218
- * Base lending provider configuration
219
- * @description Base configuration shared by all lending providers
218
+ * Individual lending provider configuration
219
+ * @description Configuration for a single lending provider
220
220
  */
221
- export interface BaseLendConfig {
222
- /** Default slippage tolerance (basis points) */
223
- defaultSlippage?: number
221
+ export interface LendProviderConfig {
224
222
  /** Allowlist of markets available for lending */
225
223
  marketAllowlist?: LendMarketConfig[]
224
+ /** Blocklist of markets to exclude from lending */
225
+ marketBlocklist?: LendMarketConfig[]
226
226
  }
227
227
 
228
- /**
229
- * Morpho lending provider configuration
230
- * @description Configuration specific to Morpho lending provider
231
- */
232
- export interface MorphoLendConfig extends BaseLendConfig {
233
- /** Lending provider name */
234
- provider: 'morpho'
235
- // Morpho-specific fields can be added here in the future
236
- }
237
-
238
- /**
239
- * Lending provider configuration
240
- * @description Union of all possible lending provider configurations
241
- */
242
- export type LendConfig = MorphoLendConfig
243
-
244
228
  /**
245
229
  * Market position information
246
230
  * @description Position details for a user in a lending market
@@ -46,7 +46,7 @@ describe('WalletNamespace', () => {
46
46
  })
47
47
  const smartWalletProvider = new DefaultSmartWalletProvider(
48
48
  mockChainManager,
49
- mockLendProvider,
49
+ { morpho: mockLendProvider },
50
50
  )
51
51
  const walletProvider = new WalletProvider(
52
52
  hostedWalletProvider,
@@ -71,7 +71,7 @@ describe('WalletNamespace', () => {
71
71
  })
72
72
  const smartWalletProvider = new DefaultSmartWalletProvider(
73
73
  mockChainManager,
74
- mockLendProvider,
74
+ { morpho: mockLendProvider },
75
75
  )
76
76
  const walletProvider = new WalletProvider(
77
77
  hostedWalletProvider,
@@ -92,7 +92,7 @@ describe('WalletNamespace', () => {
92
92
  })
93
93
  const smartWalletProvider = new DefaultSmartWalletProvider(
94
94
  mockChainManager,
95
- mockLendProvider,
95
+ { morpho: mockLendProvider },
96
96
  )
97
97
  const walletProvider = new WalletProvider(
98
98
  hostedWalletProvider,
@@ -133,7 +133,7 @@ describe('WalletNamespace', () => {
133
133
  })
134
134
  const smartWalletProvider = new DefaultSmartWalletProvider(
135
135
  mockChainManager,
136
- mockLendProvider,
136
+ { morpho: mockLendProvider },
137
137
  )
138
138
  const walletProvider = new WalletProvider(
139
139
  hostedWalletProvider,
@@ -217,7 +217,7 @@ describe('WalletNamespace', () => {
217
217
  })
218
218
  const smartWalletProvider = new DefaultSmartWalletProvider(
219
219
  mockChainManager,
220
- mockLendProvider,
220
+ { morpho: mockLendProvider },
221
221
  )
222
222
  const walletProvider = new WalletProvider(
223
223
  hostedWalletProvider,
@@ -259,7 +259,7 @@ describe('WalletNamespace', () => {
259
259
  })
260
260
  const smartWalletProvider = new DefaultSmartWalletProvider(
261
261
  mockChainManager,
262
- mockLendProvider,
262
+ { morpho: mockLendProvider },
263
263
  )
264
264
  const walletProvider = new WalletProvider(
265
265
  hostedWalletProvider,
@@ -295,7 +295,7 @@ describe('WalletNamespace', () => {
295
295
  })
296
296
  const smartWalletProvider = new DefaultSmartWalletProvider(
297
297
  mockChainManager,
298
- mockLendProvider,
298
+ { morpho: mockLendProvider },
299
299
  )
300
300
  const walletProvider = new WalletProvider(
301
301
  hostedWalletProvider,
@@ -338,7 +338,7 @@ describe('WalletNamespace', () => {
338
338
  })
339
339
  const smartWalletProvider = new DefaultSmartWalletProvider(
340
340
  mockChainManager,
341
- mockLendProvider,
341
+ { morpho: mockLendProvider },
342
342
  )
343
343
  const walletProvider = new WalletProvider(
344
344
  hostedWalletProvider,
@@ -368,7 +368,7 @@ describe('WalletNamespace', () => {
368
368
  })
369
369
  const smartWalletProvider = new DefaultSmartWalletProvider(
370
370
  mockChainManager,
371
- mockLendProvider,
371
+ { morpho: mockLendProvider },
372
372
  )
373
373
  const walletProvider = new WalletProvider(
374
374
  hostedWalletProvider,
@@ -42,7 +42,7 @@ describe('WalletProvider', () => {
42
42
  })
43
43
  const smartWalletProvider = new DefaultSmartWalletProvider(
44
44
  mockChainManager,
45
- mockLendProvider,
45
+ { morpho: mockLendProvider },
46
46
  )
47
47
  const walletProvider = new WalletProvider(
48
48
  hostedWalletProvider,
@@ -96,7 +96,7 @@ describe('WalletProvider', () => {
96
96
  })
97
97
  const smartWalletProvider = new DefaultSmartWalletProvider(
98
98
  mockChainManager,
99
- mockLendProvider,
99
+ { morpho: mockLendProvider },
100
100
  )
101
101
  const walletProvider = new WalletProvider(
102
102
  hostedWalletProvider,
@@ -151,7 +151,7 @@ describe('WalletProvider', () => {
151
151
  })
152
152
  const smartWalletProvider = new DefaultSmartWalletProvider(
153
153
  mockChainManager,
154
- mockLendProvider,
154
+ { morpho: mockLendProvider },
155
155
  )
156
156
  const walletProvider = new WalletProvider(
157
157
  hostedWalletProvider,
@@ -204,7 +204,7 @@ describe('WalletProvider', () => {
204
204
  })
205
205
  const smartWalletProvider = new DefaultSmartWalletProvider(
206
206
  mockChainManager,
207
- mockLendProvider,
207
+ { morpho: mockLendProvider },
208
208
  )
209
209
  const walletProvider = new WalletProvider(
210
210
  hostedWalletProvider,
@@ -237,7 +237,7 @@ describe('WalletProvider', () => {
237
237
  })
238
238
  const smartWalletProvider = new DefaultSmartWalletProvider(
239
239
  mockChainManager,
240
- mockLendProvider,
240
+ { morpho: mockLendProvider },
241
241
  )
242
242
  const mockWalletAddress = getRandomAddress()
243
243
  const getWalletAddressSpy = vi
@@ -284,7 +284,7 @@ describe('WalletProvider', () => {
284
284
  })
285
285
  const smartWalletProvider = new DefaultSmartWalletProvider(
286
286
  mockChainManager,
287
- mockLendProvider,
287
+ { morpho: mockLendProvider },
288
288
  )
289
289
  const walletProvider = new WalletProvider(
290
290
  hostedWalletProvider,
@@ -318,7 +318,7 @@ describe('WalletProvider', () => {
318
318
  })
319
319
  const smartWalletProvider = new DefaultSmartWalletProvider(
320
320
  mockChainManager,
321
- mockLendProvider,
321
+ { morpho: mockLendProvider },
322
322
  )
323
323
  const walletProvider = new WalletProvider(
324
324
  hostedWalletProvider,
@@ -358,7 +358,7 @@ describe('WalletProvider', () => {
358
358
  })
359
359
  const smartWalletProvider = new DefaultSmartWalletProvider(
360
360
  mockChainManager,
361
- mockLendProvider,
361
+ { morpho: mockLendProvider },
362
362
  )
363
363
  const walletProvider = new WalletProvider(
364
364
  hostedWalletProvider,
@@ -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,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)