@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.
- package/dist/actions.d.ts +19 -7
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +49 -19
- package/dist/actions.js.map +1 -1
- package/dist/actions.test.js +51 -81
- package/dist/actions.test.js.map +1 -1
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +2 -1
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/supportedChains.d.ts +1 -1
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +2 -1
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +3 -2
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +18 -48
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/index.d.ts +1 -0
- package/dist/lend/index.d.ts.map +1 -1
- package/dist/lend/index.js +1 -0
- package/dist/lend/index.js.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts +35 -8
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.js +45 -8
- package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +43 -10
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.js +67 -13
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +23 -15
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +29 -11
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +82 -0
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
- package/dist/lend/providers/aave/AaveLendProvider.js +346 -0
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
- package/dist/lend/providers/aave/addresses.d.ts +57 -0
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
- package/dist/lend/providers/aave/addresses.js +83 -0
- package/dist/lend/providers/aave/addresses.js.map +1 -0
- package/dist/lend/providers/aave/sdk.d.ts +57 -0
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
- package/dist/lend/providers/aave/sdk.js +260 -0
- package/dist/lend/providers/aave/sdk.js.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -3
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +2 -2
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +1 -33
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts +4 -3
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +0 -1
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/services/ChainManager.d.ts +1 -1
- package/dist/supported/tokens.d.ts.map +1 -1
- package/dist/supported/tokens.js +18 -2
- package/dist/supported/tokens.js.map +1 -1
- package/dist/test/MockLendProvider.d.ts +5 -4
- package/dist/test/MockLendProvider.d.ts.map +1 -1
- package/dist/test/MockLendProvider.js +5 -5
- package/dist/test/MockLendProvider.js.map +1 -1
- package/dist/test/MockPrivyClient.d.ts +10 -49
- package/dist/test/MockPrivyClient.d.ts.map +1 -1
- package/dist/test/MockPrivyClient.js +13 -72
- package/dist/test/MockPrivyClient.js.map +1 -1
- package/dist/types/actions.d.ts +26 -2
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/lend/base.d.ts +6 -19
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.d.ts +13 -13
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js +13 -13
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +64 -42
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +51 -23
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +14 -4
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +36 -13
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +24 -4
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +21 -6
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +34 -14
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +10 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +9 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +4 -3
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/types/index.d.ts +6 -1
- package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +19 -7
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +13 -7
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +26 -28
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +12 -12
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +6 -2
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +10 -7
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +19 -7
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -3
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +6 -3
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/package.json +5 -2
- package/src/actions.test.ts +55 -96
- package/src/actions.ts +82 -26
- package/src/constants/assets.ts +8 -1
- package/src/constants/supportedChains.ts +8 -1
- package/src/index.ts +1 -2
- package/src/lend/core/LendProvider.ts +6 -5
- package/src/lend/core/__tests__/LendProvider.test.ts +19 -61
- package/src/lend/index.ts +1 -0
- package/src/lend/namespaces/ActionsLendNamespace.ts +77 -13
- package/src/lend/namespaces/WalletLendNamespace.ts +106 -20
- package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +24 -18
- package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +49 -11
- package/src/lend/providers/aave/AaveLendProvider.ts +463 -0
- package/src/lend/providers/aave/addresses.ts +95 -0
- package/src/lend/providers/aave/sdk.ts +369 -0
- package/src/lend/providers/morpho/MorphoLendProvider.ts +5 -5
- package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +5 -53
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
- package/src/lend/providers/morpho/sdk.ts +3 -4
- package/src/supported/tokens.ts +24 -2
- package/src/test/MockLendProvider.ts +9 -9
- package/src/test/MockPrivyClient.ts +24 -91
- package/src/types/actions.ts +30 -2
- package/src/types/lend/base.ts +6 -22
- package/src/wallet/core/namespace/WalletNamespace.ts +13 -13
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +69 -70
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +55 -47
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
- package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +20 -7
- package/src/wallet/core/providers/hosted/types/index.ts +8 -2
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +38 -46
- package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +4 -7
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +37 -11
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +43 -24
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -7
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +17 -2
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
- package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/types/index.ts +9 -2
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +31 -11
- package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +35 -40
- package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +18 -14
- package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +11 -9
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +25 -14
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +7 -7
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +6 -7
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
- package/dist/constants/config.d.ts +0 -10
- package/dist/constants/config.d.ts.map +0 -1
- package/dist/constants/config.js +0 -10
- package/dist/constants/config.js.map +0 -1
- package/src/constants/config.ts +0 -9
|
@@ -13,13 +13,11 @@ import { toCoinbaseSmartAccount } from 'viem/account-abstraction'
|
|
|
13
13
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
14
14
|
import { TransactionConfirmedButRevertedError } from '@/core/error/errors.js'
|
|
15
15
|
import { retryOnStaleRead } from '@/core/utils/retryOnStaleRead.js'
|
|
16
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
16
17
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
18
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
17
19
|
import type { Asset } from '@/types/asset.js'
|
|
18
|
-
import type {
|
|
19
|
-
LendConfig,
|
|
20
|
-
LendProvider,
|
|
21
|
-
TransactionData,
|
|
22
|
-
} from '@/types/lend/index.js'
|
|
20
|
+
import type { TransactionData } from '@/types/lend/index.js'
|
|
23
21
|
import { parseAssetAmount } from '@/utils/assets.js'
|
|
24
22
|
import { SmartWallet } from '@/wallet/core/wallets/smart/abstract/SmartWallet.js'
|
|
25
23
|
import type { Signer } from '@/wallet/core/wallets/smart/abstract/types/index.js'
|
|
@@ -60,7 +58,7 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
60
58
|
* @param owners - Array of wallet owners (addresses or WebAuthn accounts)
|
|
61
59
|
* @param signer - Local account for signing transactions
|
|
62
60
|
* @param chainManager - Network management service
|
|
63
|
-
* @param
|
|
61
|
+
* @param lendProviders - Lending operations providers
|
|
64
62
|
* @param deploymentAddress - Known wallet address (if already deployed)
|
|
65
63
|
* @param ownerIndex - Index of signer in owners array
|
|
66
64
|
* @param nonce - Nonce for address generation
|
|
@@ -69,12 +67,16 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
69
67
|
signers: Signer[],
|
|
70
68
|
signer: LocalAccount,
|
|
71
69
|
chainManager: ChainManager,
|
|
72
|
-
|
|
70
|
+
lendProviders?: {
|
|
71
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
72
|
+
aave?: LendProvider<LendProviderConfig>
|
|
73
|
+
},
|
|
74
|
+
supportedAssets?: Asset[],
|
|
73
75
|
deploymentAddress?: Address,
|
|
74
76
|
nonce?: bigint,
|
|
75
77
|
attributionSuffix?: Hex,
|
|
76
78
|
) {
|
|
77
|
-
super(chainManager,
|
|
79
|
+
super(chainManager, lendProviders, supportedAssets)
|
|
78
80
|
|
|
79
81
|
const { signersWithLocalAccount, signerIndex } =
|
|
80
82
|
DefaultSmartWallet.ensureLocalAccountSigner(signers, signer)
|
|
@@ -115,7 +117,11 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
115
117
|
signer: LocalAccount
|
|
116
118
|
chainManager: ChainManager
|
|
117
119
|
signers?: Signer[]
|
|
118
|
-
|
|
120
|
+
lendProviders?: {
|
|
121
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
122
|
+
aave?: LendProvider<LendProviderConfig>
|
|
123
|
+
}
|
|
124
|
+
supportedAssets?: Asset[]
|
|
119
125
|
deploymentAddress?: Address
|
|
120
126
|
nonce?: bigint
|
|
121
127
|
attributionSuffix?: Hex
|
|
@@ -125,7 +131,8 @@ export class DefaultSmartWallet extends SmartWallet {
|
|
|
125
131
|
signers,
|
|
126
132
|
params.signer,
|
|
127
133
|
params.chainManager,
|
|
128
|
-
params.
|
|
134
|
+
params.lendProviders,
|
|
135
|
+
params.supportedAssets,
|
|
129
136
|
params.deploymentAddress,
|
|
130
137
|
params.nonce,
|
|
131
138
|
params.attributionSuffix,
|
|
@@ -13,11 +13,8 @@ import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
|
|
|
13
13
|
import { MockChainManager } from '@/test/MockChainManager.js'
|
|
14
14
|
import { createMockLendProvider } from '@/test/MockLendProvider.js'
|
|
15
15
|
import { getRandomAddress } from '@/test/utils.js'
|
|
16
|
-
import type {
|
|
17
|
-
|
|
18
|
-
LendProvider,
|
|
19
|
-
TransactionData,
|
|
20
|
-
} from '@/types/lend/index.js'
|
|
16
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
17
|
+
import type { LendProvider, TransactionData } from '@/types/lend/index.js'
|
|
21
18
|
import {
|
|
22
19
|
smartWalletAbi,
|
|
23
20
|
smartWalletFactoryAbi,
|
|
@@ -754,7 +751,7 @@ async function createAndInitDefaultSmartWallet(
|
|
|
754
751
|
signers?: Address[]
|
|
755
752
|
signer?: LocalAccount
|
|
756
753
|
chainManager?: ChainManager
|
|
757
|
-
lendProvider?: LendProvider<
|
|
754
|
+
lendProvider?: LendProvider<LendProviderConfig>
|
|
758
755
|
deploymentAddress?: Address
|
|
759
756
|
nonce?: bigint
|
|
760
757
|
attributionSuffix?: Hex
|
|
@@ -773,7 +770,7 @@ async function createAndInitDefaultSmartWallet(
|
|
|
773
770
|
signers,
|
|
774
771
|
signer,
|
|
775
772
|
chainManager,
|
|
776
|
-
lendProvider,
|
|
773
|
+
lendProviders: lendProvider ? { morpho: lendProvider } : undefined,
|
|
777
774
|
deploymentAddress,
|
|
778
775
|
nonce,
|
|
779
776
|
attributionSuffix,
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
1
|
+
import type { AuthorizationContext, PrivyClient } from '@privy-io/node'
|
|
2
2
|
import type { LocalAccount } from 'viem'
|
|
3
3
|
import { getAddress } from 'viem'
|
|
4
4
|
|
|
5
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
5
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
|
-
import type {
|
|
7
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
8
|
+
import type { Asset } from '@/types/asset.js'
|
|
7
9
|
import { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
8
10
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
9
11
|
import type {
|
|
@@ -21,16 +23,34 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
21
23
|
'privy',
|
|
22
24
|
NodeToActionsOptionsMap
|
|
23
25
|
> {
|
|
26
|
+
private readonly privyClient: PrivyClient
|
|
27
|
+
private readonly authorizationContext?: AuthorizationContext
|
|
28
|
+
|
|
24
29
|
/**
|
|
25
30
|
* Create a new Privy wallet provider
|
|
26
|
-
* @param
|
|
31
|
+
* @param params - Configuration parameters
|
|
32
|
+
* @param params.privyClient - Privy client instance
|
|
33
|
+
* @param params.chainManager - Chain manager for multi-chain operations
|
|
34
|
+
* @param params.lendProviders - Optional lend providers for DeFi operations
|
|
35
|
+
* @param params.supportedAssets - Optional list of supported assets
|
|
36
|
+
* @param params.authorizationContext - Optional authorization context for the Privy client.
|
|
37
|
+
* Used when Privy needs to sign requests.
|
|
38
|
+
* See https://docs.privy.io/controls/authorization-keys/using-owners/sign/automatic#using-the-authorization-context
|
|
39
|
+
* for more information on building and using the authorization context.
|
|
27
40
|
*/
|
|
28
|
-
constructor(
|
|
29
|
-
|
|
30
|
-
chainManager: ChainManager
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
41
|
+
constructor(params: {
|
|
42
|
+
privyClient: PrivyClient
|
|
43
|
+
chainManager: ChainManager
|
|
44
|
+
lendProviders?: {
|
|
45
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
46
|
+
aave?: LendProvider<LendProviderConfig>
|
|
47
|
+
}
|
|
48
|
+
supportedAssets?: Asset[]
|
|
49
|
+
authorizationContext?: AuthorizationContext
|
|
50
|
+
}) {
|
|
51
|
+
super(params.chainManager, params.lendProviders, params.supportedAssets)
|
|
52
|
+
this.privyClient = params.privyClient
|
|
53
|
+
this.authorizationContext = params.authorizationContext
|
|
34
54
|
}
|
|
35
55
|
|
|
36
56
|
async toActionsWallet(
|
|
@@ -38,10 +58,12 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
38
58
|
): Promise<Wallet> {
|
|
39
59
|
return PrivyWallet.create({
|
|
40
60
|
privyClient: this.privyClient,
|
|
61
|
+
authorizationContext: this.authorizationContext,
|
|
41
62
|
walletId: params.walletId,
|
|
42
63
|
address: getAddress(params.address),
|
|
43
64
|
chainManager: this.chainManager,
|
|
44
|
-
|
|
65
|
+
lendProviders: this.lendProviders,
|
|
66
|
+
supportedAssets: this.supportedAssets,
|
|
45
67
|
})
|
|
46
68
|
}
|
|
47
69
|
|
|
@@ -60,6 +82,10 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
|
|
|
60
82
|
async createSigner(
|
|
61
83
|
params: NodeToActionsOptionsMap['privy'],
|
|
62
84
|
): Promise<LocalAccount> {
|
|
63
|
-
return createSigner({
|
|
85
|
+
return createSigner({
|
|
86
|
+
...params,
|
|
87
|
+
privyClient: this.privyClient,
|
|
88
|
+
authorizationContext: this.authorizationContext,
|
|
89
|
+
})
|
|
64
90
|
}
|
|
65
91
|
}
|
|
@@ -5,9 +5,13 @@ import { describe, expect, it, vi } from 'vitest'
|
|
|
5
5
|
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
7
|
import { MockChainManager } from '@/test/MockChainManager.js'
|
|
8
|
-
import {
|
|
8
|
+
import { createMockLendProvider } from '@/test/MockLendProvider.js'
|
|
9
|
+
import {
|
|
10
|
+
createMockPrivyClient,
|
|
11
|
+
createMockPrivyWallet,
|
|
12
|
+
getMockAuthorizationContext,
|
|
13
|
+
} from '@/test/MockPrivyClient.js'
|
|
9
14
|
import { getRandomAddress } from '@/test/utils.js'
|
|
10
|
-
import type { LendConfig, LendProvider } from '@/types/lend/index.js'
|
|
11
15
|
import { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
12
16
|
import { PrivyHostedWalletProvider } from '@/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js'
|
|
13
17
|
import { PrivyWallet } from '@/wallet/node/wallets/hosted/privy/PrivyWallet.js'
|
|
@@ -20,12 +24,14 @@ describe('PrivyHostedWalletProvider', () => {
|
|
|
20
24
|
describe('toActionsWallet', () => {
|
|
21
25
|
it('toActionsWallet creates an ActionsWallet with correct address and signer', async () => {
|
|
22
26
|
const privy = createMockPrivyClient('app', 'secret')
|
|
23
|
-
const provider = new PrivyHostedWalletProvider(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
const provider = new PrivyHostedWalletProvider({
|
|
28
|
+
privyClient: privy,
|
|
29
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
30
|
+
chainManager: mockChainManager,
|
|
27
31
|
})
|
|
28
32
|
|
|
33
|
+
const hostedWallet = createMockPrivyWallet()
|
|
34
|
+
|
|
29
35
|
const actionsWallet = await provider.toActionsWallet({
|
|
30
36
|
walletId: hostedWallet.id,
|
|
31
37
|
address: hostedWallet.address as Address,
|
|
@@ -38,17 +44,23 @@ describe('PrivyHostedWalletProvider', () => {
|
|
|
38
44
|
|
|
39
45
|
it('forwards params to PrivyWallet.create', async () => {
|
|
40
46
|
const privy = createMockPrivyClient('app', 'secret')
|
|
41
|
-
const
|
|
47
|
+
const authorizationContext = getMockAuthorizationContext()
|
|
48
|
+
const provider = new PrivyHostedWalletProvider({
|
|
49
|
+
privyClient: privy,
|
|
50
|
+
authorizationContext,
|
|
51
|
+
chainManager: mockChainManager,
|
|
52
|
+
})
|
|
42
53
|
const spy = vi.spyOn(PrivyWallet, 'create')
|
|
43
54
|
|
|
44
55
|
const id = 'mock-wallet-123'
|
|
45
|
-
const addr = getRandomAddress()
|
|
56
|
+
const addr = getRandomAddress()
|
|
46
57
|
|
|
47
|
-
await provider.toActionsWallet({ walletId: id, address: addr
|
|
58
|
+
await provider.toActionsWallet({ walletId: id, address: addr })
|
|
48
59
|
|
|
49
60
|
expect(spy).toHaveBeenCalledWith(
|
|
50
61
|
expect.objectContaining({
|
|
51
62
|
privyClient: privy,
|
|
63
|
+
authorizationContext,
|
|
52
64
|
walletId: id,
|
|
53
65
|
address: getAddress(addr),
|
|
54
66
|
chainManager: mockChainManager,
|
|
@@ -58,7 +70,11 @@ describe('PrivyHostedWalletProvider', () => {
|
|
|
58
70
|
|
|
59
71
|
it('throws on invalid address', async () => {
|
|
60
72
|
const privy = createMockPrivyClient('app', 'secret')
|
|
61
|
-
const provider = new PrivyHostedWalletProvider(
|
|
73
|
+
const provider = new PrivyHostedWalletProvider({
|
|
74
|
+
privyClient: privy,
|
|
75
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
76
|
+
chainManager: mockChainManager,
|
|
77
|
+
})
|
|
62
78
|
|
|
63
79
|
await expect(
|
|
64
80
|
provider.toActionsWallet({ walletId: 'id', address: '0x123' }),
|
|
@@ -67,25 +83,26 @@ describe('PrivyHostedWalletProvider', () => {
|
|
|
67
83
|
|
|
68
84
|
it('forwards lendProvider when provided to constructor', async () => {
|
|
69
85
|
const privy = createMockPrivyClient('app', 'secret')
|
|
70
|
-
const mockLendProvider =
|
|
71
|
-
const provider = new PrivyHostedWalletProvider(
|
|
72
|
-
privy,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
const mockLendProvider = createMockLendProvider()
|
|
87
|
+
const provider = new PrivyHostedWalletProvider({
|
|
88
|
+
privyClient: privy,
|
|
89
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
90
|
+
chainManager: mockChainManager,
|
|
91
|
+
lendProviders: { morpho: mockLendProvider },
|
|
92
|
+
})
|
|
76
93
|
const spy = vi.spyOn(PrivyWallet, 'create')
|
|
77
94
|
|
|
78
95
|
const id = 'mock-wallet-123'
|
|
79
|
-
const addr = getRandomAddress()
|
|
96
|
+
const addr = getRandomAddress()
|
|
80
97
|
|
|
81
98
|
await provider.toActionsWallet({
|
|
82
99
|
walletId: id,
|
|
83
|
-
address: addr
|
|
100
|
+
address: addr,
|
|
84
101
|
})
|
|
85
102
|
|
|
86
103
|
expect(spy).toHaveBeenCalledWith(
|
|
87
104
|
expect.objectContaining({
|
|
88
|
-
|
|
105
|
+
lendProviders: { morpho: mockLendProvider },
|
|
89
106
|
}),
|
|
90
107
|
)
|
|
91
108
|
})
|
|
@@ -94,15 +111,17 @@ describe('PrivyHostedWalletProvider', () => {
|
|
|
94
111
|
describe('createSigner', () => {
|
|
95
112
|
it('should create a LocalAccount with correct address', async () => {
|
|
96
113
|
const privy = createMockPrivyClient('app', 'secret')
|
|
97
|
-
const provider = new PrivyHostedWalletProvider(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
114
|
+
const provider = new PrivyHostedWalletProvider({
|
|
115
|
+
privyClient: privy,
|
|
116
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
117
|
+
chainManager: mockChainManager,
|
|
101
118
|
})
|
|
102
119
|
|
|
120
|
+
const hostedWallet = createMockPrivyWallet()
|
|
121
|
+
|
|
103
122
|
const signer = await provider.createSigner({
|
|
104
123
|
walletId: hostedWallet.id,
|
|
105
|
-
address: hostedWallet.address
|
|
124
|
+
address: hostedWallet.address,
|
|
106
125
|
})
|
|
107
126
|
|
|
108
127
|
expect(signer.address).toBe(hostedWallet.address)
|
|
@@ -28,12 +28,14 @@ export class NodeHostedWalletProviderRegistry extends HostedWalletProviderRegist
|
|
|
28
28
|
validateOptions(options): options is NodeOptionsMap['privy'] {
|
|
29
29
|
return Boolean((options as NodeOptionsMap['privy'])?.privyClient)
|
|
30
30
|
},
|
|
31
|
-
create({ chainManager,
|
|
32
|
-
return new PrivyHostedWalletProvider(
|
|
33
|
-
options.privyClient,
|
|
31
|
+
create({ chainManager, lendProviders, supportedAssets }, options) {
|
|
32
|
+
return new PrivyHostedWalletProvider({
|
|
33
|
+
privyClient: options.privyClient,
|
|
34
34
|
chainManager,
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
lendProviders,
|
|
36
|
+
supportedAssets,
|
|
37
|
+
authorizationContext: options.authorizationContext,
|
|
38
|
+
})
|
|
37
39
|
},
|
|
38
40
|
})
|
|
39
41
|
|
|
@@ -43,11 +45,12 @@ export class NodeHostedWalletProviderRegistry extends HostedWalletProviderRegist
|
|
|
43
45
|
const o = options as NodeOptionsMap['turnkey']
|
|
44
46
|
return Boolean(o?.client)
|
|
45
47
|
},
|
|
46
|
-
create({ chainManager,
|
|
48
|
+
create({ chainManager, lendProviders, supportedAssets }, options) {
|
|
47
49
|
return new TurnkeyHostedWalletProvider(
|
|
48
50
|
options.client,
|
|
49
51
|
chainManager,
|
|
50
|
-
|
|
52
|
+
lendProviders,
|
|
53
|
+
supportedAssets,
|
|
51
54
|
)
|
|
52
55
|
},
|
|
53
56
|
})
|
package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
1
|
+
import type { PrivyClient } from '@privy-io/node'
|
|
2
2
|
import type { TurnkeyClient } from '@turnkey/http'
|
|
3
3
|
import { unichain } from 'viem/chains'
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
|
5
5
|
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
7
|
import { MockChainManager } from '@/test/MockChainManager.js'
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
createMockPrivyClient,
|
|
10
|
+
getMockAuthorizationContext,
|
|
11
|
+
} from '@/test/MockPrivyClient.js'
|
|
9
12
|
import { PrivyHostedWalletProvider } from '@/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js'
|
|
10
13
|
import { NodeHostedWalletProviderRegistry } from '@/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js'
|
|
11
14
|
import { TurnkeyHostedWalletProvider } from '@/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js'
|
|
@@ -31,6 +34,12 @@ describe('NodeHostedWalletProviderRegistry', () => {
|
|
|
31
34
|
const factory = registry.getFactory('privy')
|
|
32
35
|
|
|
33
36
|
expect(factory.type).toBe('privy')
|
|
37
|
+
expect(
|
|
38
|
+
factory.validateOptions?.({
|
|
39
|
+
privyClient: mockPrivyClient,
|
|
40
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
41
|
+
} as NodeOptionsMap['privy']),
|
|
42
|
+
).toBe(true)
|
|
34
43
|
expect(
|
|
35
44
|
factory.validateOptions?.({
|
|
36
45
|
privyClient: mockPrivyClient,
|
|
@@ -38,6 +47,11 @@ describe('NodeHostedWalletProviderRegistry', () => {
|
|
|
38
47
|
).toBe(true)
|
|
39
48
|
// Invalid shape should not pass validation
|
|
40
49
|
expect(factory.validateOptions?.({})).toBe(false)
|
|
50
|
+
expect(
|
|
51
|
+
factory.validateOptions?.({
|
|
52
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
53
|
+
} as NodeOptionsMap['privy']),
|
|
54
|
+
).toBe(false)
|
|
41
55
|
})
|
|
42
56
|
|
|
43
57
|
it('creates a PrivyHostedWalletProvider instance', () => {
|
|
@@ -46,6 +60,7 @@ describe('NodeHostedWalletProviderRegistry', () => {
|
|
|
46
60
|
|
|
47
61
|
const provider = factory.create({ chainManager: mockChainManager }, {
|
|
48
62
|
privyClient: mockPrivyClient,
|
|
63
|
+
authorizationContext: getMockAuthorizationContext(),
|
|
49
64
|
} as NodeOptionsMap['privy'])
|
|
50
65
|
|
|
51
66
|
expect(provider).toBeInstanceOf(PrivyHostedWalletProvider)
|
|
@@ -3,8 +3,10 @@ import type { TurnkeyClient as TurnkeyHttpClient } from '@turnkey/http'
|
|
|
3
3
|
import type { TurnkeyServerClient } from '@turnkey/sdk-server'
|
|
4
4
|
import type { LocalAccount } from 'viem'
|
|
5
5
|
|
|
6
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
6
7
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
|
-
import type {
|
|
8
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
9
|
+
import type { Asset } from '@/types/asset.js'
|
|
8
10
|
import { HostedWalletProvider } from '@/wallet/core/providers/hosted/abstract/HostedWalletProvider.js'
|
|
9
11
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
10
12
|
import type { NodeToActionsOptionsMap } from '@/wallet/node/providers/hosted/types/index.js'
|
|
@@ -26,6 +28,8 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
26
28
|
* Create a new Turnkey wallet provider
|
|
27
29
|
* @param client - Turnkey client instance (HTTP, server, or core SDK base)
|
|
28
30
|
* @param chainManager - Chain manager used to resolve chains and RPC transports
|
|
31
|
+
* @param lendProviders - Optional lend providers for DeFi operations
|
|
32
|
+
* @param supportedAssets - Optional list of supported assets
|
|
29
33
|
*/
|
|
30
34
|
constructor(
|
|
31
35
|
private readonly client:
|
|
@@ -33,9 +37,13 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
33
37
|
| TurnkeyServerClient
|
|
34
38
|
| TurnkeySDKClientBase,
|
|
35
39
|
chainManager: ChainManager,
|
|
36
|
-
|
|
40
|
+
lendProviders?: {
|
|
41
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
42
|
+
aave?: LendProvider<LendProviderConfig>
|
|
43
|
+
},
|
|
44
|
+
supportedAssets?: Asset[],
|
|
37
45
|
) {
|
|
38
|
-
super(chainManager,
|
|
46
|
+
super(chainManager, lendProviders, supportedAssets)
|
|
39
47
|
}
|
|
40
48
|
|
|
41
49
|
/**
|
|
@@ -56,7 +64,8 @@ export class TurnkeyHostedWalletProvider extends HostedWalletProvider<
|
|
|
56
64
|
signWith: params.signWith,
|
|
57
65
|
ethereumAddress: params.ethereumAddress,
|
|
58
66
|
chainManager: this.chainManager,
|
|
59
|
-
|
|
67
|
+
lendProviders: this.lendProviders,
|
|
68
|
+
supportedAssets: this.supportedAssets,
|
|
60
69
|
})
|
|
61
70
|
}
|
|
62
71
|
|
package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { describe, expect, it, vi } from 'vitest'
|
|
|
5
5
|
|
|
6
6
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
7
|
import { MockChainManager } from '@/test/MockChainManager.js'
|
|
8
|
-
import
|
|
8
|
+
import { createMockLendProvider } from '@/test/MockLendProvider.js'
|
|
9
9
|
import { TurnkeyHostedWalletProvider } from '@/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js'
|
|
10
10
|
import { TurnkeyWallet } from '@/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js'
|
|
11
11
|
import * as createSignerUtil from '@/wallet/node/wallets/hosted/turnkey/utils/createSigner.js'
|
|
@@ -94,11 +94,11 @@ describe('TurnkeyHostedWalletProvider', () => {
|
|
|
94
94
|
|
|
95
95
|
it('forwards lendProvider when provided to constructor', async () => {
|
|
96
96
|
const turnkeyClient = {} as unknown as TurnkeyClient
|
|
97
|
-
const mockLendProvider =
|
|
97
|
+
const mockLendProvider = createMockLendProvider()
|
|
98
98
|
const provider = new TurnkeyHostedWalletProvider(
|
|
99
99
|
turnkeyClient,
|
|
100
100
|
mockChainManager,
|
|
101
|
-
mockLendProvider,
|
|
101
|
+
{ morpho: mockLendProvider },
|
|
102
102
|
)
|
|
103
103
|
const spyTurnkeyWalletCreate = vi
|
|
104
104
|
.spyOn(TurnkeyWallet, 'create')
|
|
@@ -113,7 +113,7 @@ describe('TurnkeyHostedWalletProvider', () => {
|
|
|
113
113
|
|
|
114
114
|
expect(spyTurnkeyWalletCreate).toHaveBeenCalledWith(
|
|
115
115
|
expect.objectContaining({
|
|
116
|
-
|
|
116
|
+
lendProviders: { morpho: mockLendProvider },
|
|
117
117
|
}),
|
|
118
118
|
)
|
|
119
119
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
1
|
+
import type { AuthorizationContext, PrivyClient } from '@privy-io/node'
|
|
2
2
|
import type { TurnkeySDKClientBase } from '@turnkey/core'
|
|
3
3
|
import type { TurnkeyClient as TurnkeyHttpClient } from '@turnkey/http'
|
|
4
4
|
import type { TurnkeyServerClient } from '@turnkey/sdk-server'
|
|
@@ -29,8 +29,15 @@ export interface NodeOptionsMap {
|
|
|
29
29
|
/**
|
|
30
30
|
* Privy provider configuration
|
|
31
31
|
* @property privyClient Server-side Privy client instance used to query/create wallets
|
|
32
|
+
* @property authorizationContext Optional authorization context for the Privy client.
|
|
33
|
+
* Used when Privy needs to sign requests.
|
|
34
|
+
* See https://docs.privy.io/controls/authorization-keys/using-owners/sign/automatic#using-the-authorization-context
|
|
35
|
+
* for more information on building and using the authorization context.
|
|
32
36
|
*/
|
|
33
|
-
privy: {
|
|
37
|
+
privy: {
|
|
38
|
+
privyClient: PrivyClient
|
|
39
|
+
authorizationContext?: AuthorizationContext
|
|
40
|
+
}
|
|
34
41
|
/**
|
|
35
42
|
* Turnkey provider configuration
|
|
36
43
|
* @property client Turnkey SDK/HTTP client used to sign and manage keys
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
1
|
+
import type { AuthorizationContext, PrivyClient } from '@privy-io/node'
|
|
2
2
|
import { type Address, type LocalAccount } from 'viem'
|
|
3
3
|
|
|
4
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
4
5
|
import type { ChainManager } from '@/services/ChainManager.js'
|
|
5
|
-
import type {
|
|
6
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
7
|
+
import type { Asset } from '@/types/asset.js'
|
|
6
8
|
import { EOAWallet } from '@/wallet/core/wallets/eoa/EOAWallet.js'
|
|
7
9
|
import { createSigner } from '@/wallet/node/wallets/hosted/privy/utils/createSigner.js'
|
|
8
10
|
|
|
@@ -15,39 +17,56 @@ export class PrivyWallet extends EOAWallet {
|
|
|
15
17
|
public signer!: LocalAccount
|
|
16
18
|
public readonly address: Address
|
|
17
19
|
private privyClient: PrivyClient
|
|
18
|
-
|
|
20
|
+
private authorizationContext?: AuthorizationContext
|
|
19
21
|
/**
|
|
20
|
-
* Create a new Privy wallet
|
|
21
|
-
* @param
|
|
22
|
-
* @param
|
|
23
|
-
* @param
|
|
22
|
+
* Create a new Privy wallet instance
|
|
23
|
+
* @param privyClient - Privy client instance for wallet operations
|
|
24
|
+
* @param authorizationContext - Authorization context for signing requests
|
|
25
|
+
* @param walletId - Privy wallet identifier
|
|
26
|
+
* @param address - Ethereum address of the wallet
|
|
27
|
+
* @param chainManager - Chain manager for multi-chain operations
|
|
28
|
+
* @param lendProviders - Optional lend providers for DeFi operations
|
|
29
|
+
* @param supportedAssets - Optional list of supported assets
|
|
24
30
|
*/
|
|
25
31
|
private constructor(
|
|
26
32
|
privyClient: PrivyClient,
|
|
27
33
|
walletId: string,
|
|
28
34
|
address: Address,
|
|
29
35
|
chainManager: ChainManager,
|
|
30
|
-
|
|
36
|
+
lendProviders?: {
|
|
37
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
38
|
+
aave?: LendProvider<LendProviderConfig>
|
|
39
|
+
},
|
|
40
|
+
supportedAssets?: Asset[],
|
|
41
|
+
authorizationContext?: AuthorizationContext,
|
|
31
42
|
) {
|
|
32
|
-
super(chainManager,
|
|
43
|
+
super(chainManager, lendProviders, supportedAssets)
|
|
33
44
|
this.privyClient = privyClient
|
|
45
|
+
this.authorizationContext = authorizationContext
|
|
34
46
|
this.walletId = walletId
|
|
35
47
|
this.address = address
|
|
36
48
|
}
|
|
37
49
|
|
|
38
50
|
static async create(params: {
|
|
39
51
|
privyClient: PrivyClient
|
|
52
|
+
authorizationContext?: AuthorizationContext
|
|
40
53
|
walletId: string
|
|
41
54
|
address: Address
|
|
42
55
|
chainManager: ChainManager
|
|
43
|
-
|
|
56
|
+
lendProviders?: {
|
|
57
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
58
|
+
aave?: LendProvider<LendProviderConfig>
|
|
59
|
+
}
|
|
60
|
+
supportedAssets?: Asset[]
|
|
44
61
|
}): Promise<PrivyWallet> {
|
|
45
62
|
const wallet = new PrivyWallet(
|
|
46
63
|
params.privyClient,
|
|
47
64
|
params.walletId,
|
|
48
65
|
params.address,
|
|
49
66
|
params.chainManager,
|
|
50
|
-
params.
|
|
67
|
+
params.lendProviders,
|
|
68
|
+
params.supportedAssets,
|
|
69
|
+
params.authorizationContext,
|
|
51
70
|
)
|
|
52
71
|
await wallet.initialize()
|
|
53
72
|
return wallet
|
|
@@ -73,6 +92,7 @@ export class PrivyWallet extends EOAWallet {
|
|
|
73
92
|
walletId: this.walletId,
|
|
74
93
|
address: this.address,
|
|
75
94
|
privyClient: this.privyClient,
|
|
95
|
+
authorizationContext: this.authorizationContext,
|
|
76
96
|
})
|
|
77
97
|
}
|
|
78
98
|
}
|