@dynamic-labs/sdk-react-core 2.1.0-alpha.7 → 2.1.0-alpha.9
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/CHANGELOG.md +18 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +13 -13
- package/src/lib/components/Portal/Portal.cjs +2 -1
- package/src/lib/components/Portal/Portal.js +2 -1
- package/src/lib/components/SandboxIndicatorWrapper/SandboxIndicatorWrapper.d.ts +0 -2
- package/src/lib/components/Toolkit/components/index.d.ts +0 -6
- package/src/lib/components/Tooltip/Tooltip.cjs +2 -1
- package/src/lib/components/Tooltip/Tooltip.js +2 -1
- package/src/lib/context/DynamicContext/DynamicContext.cjs +5 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +5 -2
- package/src/lib/context/DynamicContext/types/index.d.ts +0 -1
- package/src/lib/data/api/wallets/wallets.cjs +21 -5
- package/src/lib/data/api/wallets/wallets.d.ts +4 -0
- package/src/lib/data/api/wallets/wallets.js +21 -6
- package/src/lib/shared/utils/classes/storage/localStorage.cjs +2 -2
- package/src/lib/shared/utils/classes/storage/localStorage.js +2 -2
- package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.cjs +14 -0
- package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.d.ts +3 -0
- package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.js +10 -0
- package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/index.d.ts +1 -0
- package/src/lib/utils/functions/createUserProfile/createUserProfile.cjs +1 -2
- package/src/lib/utils/functions/createUserProfile/createUserProfile.js +1 -2
- package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.cjs +3 -4
- package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.d.ts +1 -1
- package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js +4 -5
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.d.ts +3 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
- package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.cjs +5 -5
- package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.d.ts +3 -2
- package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.js +5 -5
- package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.cjs +7 -2
- package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.js +7 -2
- package/src/lib/utils/functions/index.d.ts +1 -1
- package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.cjs +2 -1
- package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.js +2 -1
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +16 -11
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +7 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +16 -11
- package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.cjs +3 -3
- package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.js +3 -3
- package/src/lib/utils/hooks/useElementById/useElementById.cjs +33 -18
- package/src/lib/utils/hooks/useElementById/useElementById.d.ts +3 -1
- package/src/lib/utils/hooks/useElementById/useElementById.js +33 -18
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +9 -4
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +6 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +9 -4
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs +6 -6
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.d.ts +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +6 -6
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.cjs +7 -7
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.d.ts +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.js +7 -7
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +24 -27
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.d.ts +6 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +24 -27
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +16 -11
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.d.ts +4 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +16 -11
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +2 -2
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +2 -2
- package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.cjs +2 -1
- package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.js +2 -1
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.cjs +13 -4
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.d.ts +10 -2
- package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.js +13 -4
- package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +2 -3
- package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +2 -3
- package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.cjs +2 -1
- package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.js +2 -1
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +5 -4
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +6 -1
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +5 -4
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +2 -1
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +2 -1
- package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.cjs → createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs} +17 -18
- package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.d.ts → createEmbeddedWalletRequest/createEmbeddedWalletRequest.d.ts} +7 -3
- package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js → createEmbeddedWalletRequest/createEmbeddedWalletRequest.js} +17 -18
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/index.d.ts +1 -2
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +2 -2
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +2 -2
- package/src/lib/views/WalletList/WalletList.cjs +3 -6
- package/src/lib/views/WalletList/WalletList.js +3 -6
- package/src/lib/views/WalletLockedView/WalletLockedView.cjs +2 -8
- package/src/lib/views/WalletLockedView/WalletLockedView.js +2 -8
- package/src/lib/views/viewToComponentMap.d.ts +4 -2
- package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.js +2 -1
- package/src/lib/widgets/DynamicWidget/hooks/useFetchNameService/useFetchNameService.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/hooks/useFetchNameService/useFetchNameService.js +1 -1
- package/src/lib/utils/functions/isEmbeddedWalletPresent/index.d.ts +0 -1
- package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.cjs +0 -19
- package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.d.ts +0 -1
- package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.js +0 -15
- package/src/lib/views/Passkey/utils/createEmbeddedWalletWithPasskey/index.d.ts +0 -1
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +0 -65
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +0 -16
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +0 -61
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +0 -1
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
import {
|
|
2
|
+
import { findEmbeddedWalletFromVerifiedCredentials } from '../findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js';
|
|
3
3
|
|
|
4
4
|
const hasEmbeddedWallet = (jwt, walletName) => {
|
|
5
|
+
var _a;
|
|
5
6
|
if (!jwt) {
|
|
6
7
|
return false;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
+
const embeddedWallet = findEmbeddedWalletFromVerifiedCredentials(jwt);
|
|
10
|
+
if (!walletName) {
|
|
11
|
+
return Boolean(embeddedWallet);
|
|
12
|
+
}
|
|
13
|
+
return Boolean((_a = embeddedWallet === null || embeddedWallet === void 0 ? void 0 : embeddedWallet.walletName) === null || _a === void 0 ? void 0 : _a.startsWith(walletName));
|
|
9
14
|
};
|
|
10
15
|
|
|
11
16
|
export { hasEmbeddedWallet };
|
|
@@ -36,7 +36,7 @@ export * from './groupBy';
|
|
|
36
36
|
export * from './isAccountAbstractionWallet';
|
|
37
37
|
export * from './isEmailProviderEnabled';
|
|
38
38
|
export * from './isEmailValid';
|
|
39
|
-
export * from './
|
|
39
|
+
export * from './addPasskeyIdentifierToWalletConnector';
|
|
40
40
|
export * from './isMagicConnector';
|
|
41
41
|
export * from './isNetworkUnsupported';
|
|
42
42
|
export * from './isOnrampProvider';
|
|
@@ -17,7 +17,8 @@ var useElementById = require('../useElementById/useElementById.cjs');
|
|
|
17
17
|
* confirms or cancels the operation, and must return the ReactNode for the modal to be displayed.
|
|
18
18
|
*/
|
|
19
19
|
const useConfirmationModal = ({ elementId, }) => {
|
|
20
|
-
const
|
|
20
|
+
const { createRootElement } = useElementById.useElementById();
|
|
21
|
+
const modalRootElementRef = createRootElement(elementId);
|
|
21
22
|
const [node, setNode] = React.useState(null);
|
|
22
23
|
const open = React.useCallback((builder) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
23
24
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -13,7 +13,8 @@ import { useElementById } from '../useElementById/useElementById.js';
|
|
|
13
13
|
* confirms or cancels the operation, and must return the ReactNode for the modal to be displayed.
|
|
14
14
|
*/
|
|
15
15
|
const useConfirmationModal = ({ elementId, }) => {
|
|
16
|
-
const
|
|
16
|
+
const { createRootElement } = useElementById();
|
|
17
|
+
const modalRootElementRef = createRootElement(elementId);
|
|
17
18
|
const [node, setNode] = useState(null);
|
|
18
19
|
const open = useCallback((builder) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
20
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -34,9 +34,8 @@ require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
|
34
34
|
require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
|
|
35
35
|
require('../../../context/VerificationContext/VerificationContext.cjs');
|
|
36
36
|
require('react-dom');
|
|
37
|
-
var
|
|
37
|
+
var createEmbeddedWalletRequest = require('../../../views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs');
|
|
38
38
|
var findPasskeyEmailWalletConnector = require('../../../views/Passkey/utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.cjs');
|
|
39
|
-
var createPregeneratedWallet = require('../../../views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs');
|
|
40
39
|
var smartWallet = require('../useWalletConnectors/utils/smartWallet/smartWallet.cjs');
|
|
41
40
|
var findPrimaryEmbeddedChain = require('../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
|
|
42
41
|
require('../../../context/WalletContext/WalletContext.cjs');
|
|
@@ -84,7 +83,7 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
|
|
|
84
83
|
// This hook needs to be async that's why it's not using useMutation
|
|
85
84
|
const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
86
85
|
var _a, _b;
|
|
87
|
-
const { setPrimaryWalletId,
|
|
86
|
+
const { setPrimaryWalletId, setUser, user, setShowAuthFlow, projectSettings, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
88
87
|
const [isLoading, setIsLoading] = React.useState(false);
|
|
89
88
|
const [error, setError] = React.useState();
|
|
90
89
|
const embeddedChainConfig = ((_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.embeddedWallets) === null || _b === void 0 ? void 0 : _b.chainConfigurations) || [];
|
|
@@ -92,19 +91,18 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
92
91
|
const embeddedChains = embeddedChainConfig
|
|
93
92
|
.filter((chain) => chain.enabled)
|
|
94
93
|
.map((c) => (c.name === 'SOL' ? sdkApiCore.ChainEnum.Sol : sdkApiCore.ChainEnum.Evm));
|
|
95
|
-
const createDynamicEmbeddedWalletMutation = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, }) {
|
|
94
|
+
const createDynamicEmbeddedWalletMutation = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, options, chains, }) {
|
|
96
95
|
var _d, _e;
|
|
97
96
|
setIsLoading(true);
|
|
98
|
-
const createEmbeddedWalletMethodToUse = withAuthenticator
|
|
99
|
-
? createEmbeddedWalletWithPasskey.createEmbeddedWalletWithPasskey
|
|
100
|
-
: createPregeneratedWallet.createPregeneratedWallet;
|
|
101
97
|
try {
|
|
102
|
-
const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield
|
|
98
|
+
const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield createEmbeddedWalletRequest.createEmbeddedWalletRequest({
|
|
103
99
|
authToken,
|
|
104
|
-
chains: embeddedChains,
|
|
100
|
+
chains: chains !== null && chains !== void 0 ? chains : embeddedChains,
|
|
105
101
|
environmentId,
|
|
106
102
|
user: user !== null && user !== void 0 ? user : createUserProfile.createUserProfile(decodedJwt),
|
|
107
103
|
walletConnector: findPasskeyEmailWalletConnector.findPasskeyEmailWalletConnector(walletConnectorOptions, primaryEmbeddedChain),
|
|
104
|
+
webAuthnAttestation: options === null || options === void 0 ? void 0 : options.webAuthnAttestation,
|
|
105
|
+
withAuthenticator,
|
|
108
106
|
});
|
|
109
107
|
const turnkeyVerifiedCredentials = (_d = updatedDecodedJwt === null || updatedDecodedJwt === void 0 ? void 0 : updatedDecodedJwt.verifiedCredentials) === null || _d === void 0 ? void 0 : _d.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'));
|
|
110
108
|
/** It's not authenticated if it's a turnkey wallet that still hasn't created a passkey */
|
|
@@ -131,7 +129,7 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
131
129
|
}
|
|
132
130
|
setUser(updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(signersResponse.jwt, signersResponse.minifiedJwt));
|
|
133
131
|
setShowAuthFlow(false, { performMultiWalletChecks: false });
|
|
134
|
-
dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials,
|
|
132
|
+
dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials, signersResponse.jwt);
|
|
135
133
|
}
|
|
136
134
|
catch (err) {
|
|
137
135
|
setError(err);
|
|
@@ -141,7 +139,14 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
141
139
|
finally {
|
|
142
140
|
setIsLoading(false);
|
|
143
141
|
}
|
|
144
|
-
}), [
|
|
142
|
+
}), [
|
|
143
|
+
embeddedChains,
|
|
144
|
+
primaryEmbeddedChain,
|
|
145
|
+
setPrimaryWalletId,
|
|
146
|
+
setShowAuthFlow,
|
|
147
|
+
setUser,
|
|
148
|
+
user,
|
|
149
|
+
]);
|
|
145
150
|
return {
|
|
146
151
|
createDynamicEmbeddedWalletMutation,
|
|
147
152
|
error,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { DynamicJwt } from '@dynamic-labs/sdk-api-core';
|
|
1
|
+
import { DynamicJwt, ChainEnum } from '@dynamic-labs/sdk-api-core';
|
|
2
|
+
import { WebAuthnAttestation } from '@dynamic-labs/wallet-connector-core';
|
|
2
3
|
import { WalletOption } from '../../../shared';
|
|
3
4
|
type MutationProps = {
|
|
4
5
|
authToken: string | undefined;
|
|
@@ -6,9 +7,13 @@ type MutationProps = {
|
|
|
6
7
|
walletConnectorOptions: WalletOption[];
|
|
7
8
|
decodedJwt: DynamicJwt;
|
|
8
9
|
withAuthenticator: boolean;
|
|
10
|
+
options?: {
|
|
11
|
+
webAuthnAttestation: WebAuthnAttestation;
|
|
12
|
+
};
|
|
13
|
+
chains?: ChainEnum[];
|
|
9
14
|
};
|
|
10
15
|
export declare const useCreateDynamicEmbeddedWalletMutation: () => {
|
|
11
|
-
createDynamicEmbeddedWalletMutation: ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, }: MutationProps) => Promise<void>;
|
|
16
|
+
createDynamicEmbeddedWalletMutation: ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, options, chains, }: MutationProps) => Promise<void>;
|
|
12
17
|
error: unknown;
|
|
13
18
|
isLoading: boolean;
|
|
14
19
|
};
|
|
@@ -30,9 +30,8 @@ import '../../../context/AccountExistsContext/AccountExistsContext.js';
|
|
|
30
30
|
import '../../../context/UserWalletsContext/UserWalletsContext.js';
|
|
31
31
|
import '../../../context/VerificationContext/VerificationContext.js';
|
|
32
32
|
import 'react-dom';
|
|
33
|
-
import {
|
|
33
|
+
import { createEmbeddedWalletRequest } from '../../../views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.js';
|
|
34
34
|
import { findPasskeyEmailWalletConnector } from '../../../views/Passkey/utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.js';
|
|
35
|
-
import { createPregeneratedWallet } from '../../../views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js';
|
|
36
35
|
import { findSmartWallet, initializeSmartWallet } from '../useWalletConnectors/utils/smartWallet/smartWallet.js';
|
|
37
36
|
import { findPrimaryEmbeddedChain } from '../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
|
|
38
37
|
import '../../../context/WalletContext/WalletContext.js';
|
|
@@ -80,7 +79,7 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
|
|
|
80
79
|
// This hook needs to be async that's why it's not using useMutation
|
|
81
80
|
const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
82
81
|
var _a, _b;
|
|
83
|
-
const { setPrimaryWalletId,
|
|
82
|
+
const { setPrimaryWalletId, setUser, user, setShowAuthFlow, projectSettings, } = useInternalDynamicContext();
|
|
84
83
|
const [isLoading, setIsLoading] = useState(false);
|
|
85
84
|
const [error, setError] = useState();
|
|
86
85
|
const embeddedChainConfig = ((_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.embeddedWallets) === null || _b === void 0 ? void 0 : _b.chainConfigurations) || [];
|
|
@@ -88,19 +87,18 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
88
87
|
const embeddedChains = embeddedChainConfig
|
|
89
88
|
.filter((chain) => chain.enabled)
|
|
90
89
|
.map((c) => (c.name === 'SOL' ? ChainEnum.Sol : ChainEnum.Evm));
|
|
91
|
-
const createDynamicEmbeddedWalletMutation = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, }) {
|
|
90
|
+
const createDynamicEmbeddedWalletMutation = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, options, chains, }) {
|
|
92
91
|
var _d, _e;
|
|
93
92
|
setIsLoading(true);
|
|
94
|
-
const createEmbeddedWalletMethodToUse = withAuthenticator
|
|
95
|
-
? createEmbeddedWalletWithPasskey
|
|
96
|
-
: createPregeneratedWallet;
|
|
97
93
|
try {
|
|
98
|
-
const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield
|
|
94
|
+
const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield createEmbeddedWalletRequest({
|
|
99
95
|
authToken,
|
|
100
|
-
chains: embeddedChains,
|
|
96
|
+
chains: chains !== null && chains !== void 0 ? chains : embeddedChains,
|
|
101
97
|
environmentId,
|
|
102
98
|
user: user !== null && user !== void 0 ? user : createUserProfile(decodedJwt),
|
|
103
99
|
walletConnector: findPasskeyEmailWalletConnector(walletConnectorOptions, primaryEmbeddedChain),
|
|
100
|
+
webAuthnAttestation: options === null || options === void 0 ? void 0 : options.webAuthnAttestation,
|
|
101
|
+
withAuthenticator,
|
|
104
102
|
});
|
|
105
103
|
const turnkeyVerifiedCredentials = (_d = updatedDecodedJwt === null || updatedDecodedJwt === void 0 ? void 0 : updatedDecodedJwt.verifiedCredentials) === null || _d === void 0 ? void 0 : _d.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'));
|
|
106
104
|
/** It's not authenticated if it's a turnkey wallet that still hasn't created a passkey */
|
|
@@ -127,7 +125,7 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
127
125
|
}
|
|
128
126
|
setUser(updateJWTAndCreateUserProfile(signersResponse.jwt, signersResponse.minifiedJwt));
|
|
129
127
|
setShowAuthFlow(false, { performMultiWalletChecks: false });
|
|
130
|
-
dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials,
|
|
128
|
+
dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials, signersResponse.jwt);
|
|
131
129
|
}
|
|
132
130
|
catch (err) {
|
|
133
131
|
setError(err);
|
|
@@ -137,7 +135,14 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
|
|
|
137
135
|
finally {
|
|
138
136
|
setIsLoading(false);
|
|
139
137
|
}
|
|
140
|
-
}), [
|
|
138
|
+
}), [
|
|
139
|
+
embeddedChains,
|
|
140
|
+
primaryEmbeddedChain,
|
|
141
|
+
setPrimaryWalletId,
|
|
142
|
+
setShowAuthFlow,
|
|
143
|
+
setUser,
|
|
144
|
+
user,
|
|
145
|
+
]);
|
|
141
146
|
return {
|
|
142
147
|
createDynamicEmbeddedWalletMutation,
|
|
143
148
|
error,
|
|
@@ -77,16 +77,16 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
|
|
|
77
77
|
// This hook can be used to get all of the user's scopes (nft/token gates)
|
|
78
78
|
// and check if the user has a specific scopes with some logic AND/OR (nft/token gate)
|
|
79
79
|
const useDynamicScopes = () => {
|
|
80
|
-
const {
|
|
80
|
+
const { user } = useInternalDynamicContext.useInternalDynamicContext();
|
|
81
81
|
const userScopes = React.useMemo(() => {
|
|
82
|
-
const { scope } =
|
|
82
|
+
const { scope } = user || {};
|
|
83
83
|
if (!scope)
|
|
84
84
|
return [];
|
|
85
85
|
// We need to split the scopes string into an array of scopes
|
|
86
86
|
// because the scopes string is a space separated string of scopes
|
|
87
87
|
// e.g. '"scope": "customerservice marketing tech"'
|
|
88
88
|
return scope.split(' ');
|
|
89
|
-
}, [
|
|
89
|
+
}, [user]);
|
|
90
90
|
// If customer will set scopes to an empty string it will return false
|
|
91
91
|
const userHasScopes = (scopes, logicOperator = 'OR') => {
|
|
92
92
|
if (!scopes.length)
|
|
@@ -73,16 +73,16 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
|
|
|
73
73
|
// This hook can be used to get all of the user's scopes (nft/token gates)
|
|
74
74
|
// and check if the user has a specific scopes with some logic AND/OR (nft/token gate)
|
|
75
75
|
const useDynamicScopes = () => {
|
|
76
|
-
const {
|
|
76
|
+
const { user } = useInternalDynamicContext();
|
|
77
77
|
const userScopes = useMemo(() => {
|
|
78
|
-
const { scope } =
|
|
78
|
+
const { scope } = user || {};
|
|
79
79
|
if (!scope)
|
|
80
80
|
return [];
|
|
81
81
|
// We need to split the scopes string into an array of scopes
|
|
82
82
|
// because the scopes string is a space separated string of scopes
|
|
83
83
|
// e.g. '"scope": "customerservice marketing tech"'
|
|
84
84
|
return scope.split(' ');
|
|
85
|
-
}, [
|
|
85
|
+
}, [user]);
|
|
86
86
|
// If customer will set scopes to an empty string it will return false
|
|
87
87
|
const userHasScopes = (scopes, logicOperator = 'OR') => {
|
|
88
88
|
if (!scopes.length)
|
|
@@ -5,26 +5,41 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
|
|
8
|
-
const useElementById = (
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const useElementById = () => {
|
|
9
|
+
const targetElement = React.useRef(null);
|
|
10
|
+
const createRootElement = (elementId = 'dynamic-modal', parentElementId) => {
|
|
11
|
+
if (typeof window === 'undefined')
|
|
12
|
+
return targetElement;
|
|
13
|
+
const isElementCreated = window.document.getElementById(elementId);
|
|
14
|
+
if (isElementCreated) {
|
|
15
|
+
targetElement.current = isElementCreated;
|
|
16
|
+
return targetElement;
|
|
17
|
+
}
|
|
18
|
+
const parentElement = parentElementId
|
|
19
|
+
? window.document.getElementById(parentElementId)
|
|
20
|
+
: undefined;
|
|
12
21
|
// creates div and attaches it to the body
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
targetElement.current = window.document.createElement('div');
|
|
23
|
+
targetElement.current.setAttribute('id', elementId);
|
|
24
|
+
targetElement.current.setAttribute('class', elementId);
|
|
25
|
+
targetElement.current.setAttribute('data-testid', elementId);
|
|
26
|
+
/**
|
|
27
|
+
* Setting the pointer-events to auto is necessary to allow the user to interact with the modal
|
|
28
|
+
* when other packages that use a modal set the pointer-events to none on the body element.
|
|
29
|
+
* For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
|
|
30
|
+
*/
|
|
31
|
+
targetElement.current.style.pointerEvents = 'auto';
|
|
32
|
+
if (parentElement) {
|
|
33
|
+
parentElement.appendChild(targetElement.current);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
window.document.body.appendChild(targetElement.current);
|
|
25
37
|
}
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
return targetElement;
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
createRootElement,
|
|
42
|
+
};
|
|
28
43
|
};
|
|
29
44
|
|
|
30
45
|
exports.useElementById = useElementById;
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export declare const useElementById: (
|
|
2
|
+
export declare const useElementById: () => {
|
|
3
|
+
createRootElement: (elementId?: string, parentElementId?: string) => React.MutableRefObject<HTMLElement>;
|
|
4
|
+
};
|
|
@@ -1,26 +1,41 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { useRef } from 'react';
|
|
3
3
|
|
|
4
|
-
const useElementById = (
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const useElementById = () => {
|
|
5
|
+
const targetElement = useRef(null);
|
|
6
|
+
const createRootElement = (elementId = 'dynamic-modal', parentElementId) => {
|
|
7
|
+
if (typeof window === 'undefined')
|
|
8
|
+
return targetElement;
|
|
9
|
+
const isElementCreated = window.document.getElementById(elementId);
|
|
10
|
+
if (isElementCreated) {
|
|
11
|
+
targetElement.current = isElementCreated;
|
|
12
|
+
return targetElement;
|
|
13
|
+
}
|
|
14
|
+
const parentElement = parentElementId
|
|
15
|
+
? window.document.getElementById(parentElementId)
|
|
16
|
+
: undefined;
|
|
8
17
|
// creates div and attaches it to the body
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
targetElement.current = window.document.createElement('div');
|
|
19
|
+
targetElement.current.setAttribute('id', elementId);
|
|
20
|
+
targetElement.current.setAttribute('class', elementId);
|
|
21
|
+
targetElement.current.setAttribute('data-testid', elementId);
|
|
22
|
+
/**
|
|
23
|
+
* Setting the pointer-events to auto is necessary to allow the user to interact with the modal
|
|
24
|
+
* when other packages that use a modal set the pointer-events to none on the body element.
|
|
25
|
+
* For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
|
|
26
|
+
*/
|
|
27
|
+
targetElement.current.style.pointerEvents = 'auto';
|
|
28
|
+
if (parentElement) {
|
|
29
|
+
parentElement.appendChild(targetElement.current);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
window.document.body.appendChild(targetElement.current);
|
|
21
33
|
}
|
|
22
|
-
|
|
23
|
-
|
|
34
|
+
return targetElement;
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
createRootElement,
|
|
38
|
+
};
|
|
24
39
|
};
|
|
25
40
|
|
|
26
41
|
export { useElementById };
|
|
@@ -93,12 +93,17 @@ const useEmbeddedWallet = () => {
|
|
|
93
93
|
const { createEmbeddedWallet: createTurnkeyEmbeddedWallet, createOrRestoreSession, createPasskey, getPasskeys, isSessionActive, sendOneTimeCode, } = useSecureEnclaveEmbeddedWallet.useSecureEnclaveEmbeddedWallet();
|
|
94
94
|
const { isLoadingEmbeddedWallet } = WalletContext.useWalletContext();
|
|
95
95
|
const userHasEmbeddedWallet = () => hasEmbeddedWallet.hasEmbeddedWallet(getAuthToken.getAuthToken() || onboardingOnlyJwt);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Creates Dynamic embedded wallet according to the settings
|
|
98
|
+
* @param chains - array of chains to create the wallet for
|
|
99
|
+
* @param options - options for the wallet creation
|
|
100
|
+
*/
|
|
101
|
+
const createEmbeddedWallet = React.useCallback((chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
102
|
+
if (yield canCreateMPCWallet(chains)) {
|
|
103
|
+
const wallet = yield createCoinbaseMPCWallet(chains);
|
|
99
104
|
return wallet;
|
|
100
105
|
}
|
|
101
|
-
const wallet = yield createTurnkeyEmbeddedWallet(
|
|
106
|
+
const wallet = yield createTurnkeyEmbeddedWallet(chains, options);
|
|
102
107
|
return wallet;
|
|
103
108
|
}), [canCreateMPCWallet, createCoinbaseMPCWallet, createTurnkeyEmbeddedWallet]);
|
|
104
109
|
return {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChainEnum } from '@dynamic-labs/sdk-api-core';
|
|
2
|
+
import { WebAuthnAttestation } from '@dynamic-labs/wallet-connector-core';
|
|
2
3
|
import { Wallet } from '../../../shared';
|
|
3
4
|
/**
|
|
4
5
|
* @returns {
|
|
@@ -9,13 +10,15 @@ import { Wallet } from '../../../shared';
|
|
|
9
10
|
* }
|
|
10
11
|
*/
|
|
11
12
|
export declare const useEmbeddedWallet: () => {
|
|
12
|
-
readonly createEmbeddedWallet: (
|
|
13
|
+
readonly createEmbeddedWallet: (chains?: ChainEnum[], options?: {
|
|
14
|
+
webAuthnAttestation: WebAuthnAttestation;
|
|
15
|
+
}) => Promise<Wallet | undefined>;
|
|
13
16
|
readonly createOrRestoreSession: ({ oneTimeCode }: {
|
|
14
17
|
oneTimeCode?: string | undefined;
|
|
15
18
|
}) => Promise<string>;
|
|
16
|
-
readonly createPasskey: ({ oneTimeCode }: {
|
|
19
|
+
readonly createPasskey: ({ oneTimeCode, }: {
|
|
17
20
|
oneTimeCode?: string | undefined;
|
|
18
|
-
}) => Promise<
|
|
21
|
+
}) => Promise<WebAuthnAttestation>;
|
|
19
22
|
readonly createPassword: (showIntro?: boolean | undefined) => Promise<string>;
|
|
20
23
|
readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
|
|
21
24
|
readonly isLoadingEmbeddedWallet: boolean;
|
|
@@ -89,12 +89,17 @@ const useEmbeddedWallet = () => {
|
|
|
89
89
|
const { createEmbeddedWallet: createTurnkeyEmbeddedWallet, createOrRestoreSession, createPasskey, getPasskeys, isSessionActive, sendOneTimeCode, } = useSecureEnclaveEmbeddedWallet();
|
|
90
90
|
const { isLoadingEmbeddedWallet } = useWalletContext();
|
|
91
91
|
const userHasEmbeddedWallet = () => hasEmbeddedWallet(getAuthToken() || onboardingOnlyJwt);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Creates Dynamic embedded wallet according to the settings
|
|
94
|
+
* @param chains - array of chains to create the wallet for
|
|
95
|
+
* @param options - options for the wallet creation
|
|
96
|
+
*/
|
|
97
|
+
const createEmbeddedWallet = useCallback((chains, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
98
|
+
if (yield canCreateMPCWallet(chains)) {
|
|
99
|
+
const wallet = yield createCoinbaseMPCWallet(chains);
|
|
95
100
|
return wallet;
|
|
96
101
|
}
|
|
97
|
-
const wallet = yield createTurnkeyEmbeddedWallet(
|
|
102
|
+
const wallet = yield createTurnkeyEmbeddedWallet(chains, options);
|
|
98
103
|
return wallet;
|
|
99
104
|
}), [canCreateMPCWallet, createCoinbaseMPCWallet, createTurnkeyEmbeddedWallet]);
|
|
100
105
|
return {
|
package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs
CHANGED
|
@@ -128,7 +128,7 @@ const useCoinbaseMPC = () => {
|
|
|
128
128
|
setPrimaryWalletId(newSelectedCredentialWallet.id);
|
|
129
129
|
setUser(user);
|
|
130
130
|
connector.setVerifiedCredentials(user.verifiedCredentials);
|
|
131
|
-
return newSelectedCredentialWallet;
|
|
131
|
+
return { authToken: response === null || response === void 0 ? void 0 : response.jwt, newSelectedCredentialWallet };
|
|
132
132
|
}), [
|
|
133
133
|
appName,
|
|
134
134
|
consumeNonce,
|
|
@@ -147,7 +147,7 @@ const useCoinbaseMPC = () => {
|
|
|
147
147
|
: sdkApiCore.PasswordSourceTypeEnum.Dynamic;
|
|
148
148
|
try {
|
|
149
149
|
const backupCode = yield connector.generateWallet(source, initialWalletPassword);
|
|
150
|
-
const
|
|
150
|
+
const { authToken, newSelectedCredentialWallet } = yield linkCoinbaseMPCWallet({
|
|
151
151
|
backupCode,
|
|
152
152
|
connector,
|
|
153
153
|
jwt,
|
|
@@ -160,9 +160,9 @@ const useCoinbaseMPC = () => {
|
|
|
160
160
|
chain: (connector === null || connector === void 0 ? void 0 : connector.connectedChain) || '',
|
|
161
161
|
connected: true,
|
|
162
162
|
connector,
|
|
163
|
-
id:
|
|
163
|
+
id: newSelectedCredentialWallet.id,
|
|
164
164
|
};
|
|
165
|
-
dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet,
|
|
165
|
+
dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, newSelectedCredentialWallet, authToken);
|
|
166
166
|
return coinbaseMPCWallet;
|
|
167
167
|
}
|
|
168
168
|
catch (error) {
|
|
@@ -175,7 +175,7 @@ const useCoinbaseMPC = () => {
|
|
|
175
175
|
}
|
|
176
176
|
return undefined;
|
|
177
177
|
}), [linkCoinbaseMPCWallet, handleLogOut, setError]);
|
|
178
|
-
const createCoinbaseMPCWallet = React.useCallback((jwt_1, decodedJwt_1, ...args_1) => _tslib.__awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt,
|
|
178
|
+
const createCoinbaseMPCWallet = React.useCallback((jwt_1, decodedJwt_1, ...args_1) => _tslib.__awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chains = [sdkApiCore.ChainEnum.Evm], password) {
|
|
179
179
|
var _b;
|
|
180
180
|
const connector = (_b = findCoinbaseMPCWallet.findCoinbaseMPCWallet(walletConnectorOptions)) === null || _b === void 0 ? void 0 : _b.walletConnector;
|
|
181
181
|
if (!connector || !walletConnectorCore.isCoinbaseMpcWalletConnector(connector)) {
|
|
@@ -193,7 +193,7 @@ const useCoinbaseMPC = () => {
|
|
|
193
193
|
if (fetchAuthToken) {
|
|
194
194
|
connector.setAuthTokenFetcher(fetchAuthToken);
|
|
195
195
|
}
|
|
196
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
196
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
197
197
|
// if user already has embedded wallet, set it as primary wallet and return
|
|
198
198
|
if (embeddedWalletVerifiedCredential) {
|
|
199
199
|
return returnExistingCoinbaseMPCWallet(connector, decodedJwt, embeddedWalletVerifiedCredential);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChainEnum, DynamicJwt } from '@dynamic-labs/sdk-api-core';
|
|
2
2
|
import { Wallet } from '../../../../../shared';
|
|
3
3
|
export declare const useCoinbaseMPC: () => {
|
|
4
|
-
createCoinbaseMPCWallet: (jwt: string, decodedJwt: DynamicJwt,
|
|
4
|
+
createCoinbaseMPCWallet: (jwt: string, decodedJwt: DynamicJwt, chains?: ChainEnum[], password?: string) => Promise<Wallet | undefined>;
|
|
5
5
|
};
|
package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js
CHANGED
|
@@ -124,7 +124,7 @@ const useCoinbaseMPC = () => {
|
|
|
124
124
|
setPrimaryWalletId(newSelectedCredentialWallet.id);
|
|
125
125
|
setUser(user);
|
|
126
126
|
connector.setVerifiedCredentials(user.verifiedCredentials);
|
|
127
|
-
return newSelectedCredentialWallet;
|
|
127
|
+
return { authToken: response === null || response === void 0 ? void 0 : response.jwt, newSelectedCredentialWallet };
|
|
128
128
|
}), [
|
|
129
129
|
appName,
|
|
130
130
|
consumeNonce,
|
|
@@ -143,7 +143,7 @@ const useCoinbaseMPC = () => {
|
|
|
143
143
|
: PasswordSourceTypeEnum.Dynamic;
|
|
144
144
|
try {
|
|
145
145
|
const backupCode = yield connector.generateWallet(source, initialWalletPassword);
|
|
146
|
-
const
|
|
146
|
+
const { authToken, newSelectedCredentialWallet } = yield linkCoinbaseMPCWallet({
|
|
147
147
|
backupCode,
|
|
148
148
|
connector,
|
|
149
149
|
jwt,
|
|
@@ -156,9 +156,9 @@ const useCoinbaseMPC = () => {
|
|
|
156
156
|
chain: (connector === null || connector === void 0 ? void 0 : connector.connectedChain) || '',
|
|
157
157
|
connected: true,
|
|
158
158
|
connector,
|
|
159
|
-
id:
|
|
159
|
+
id: newSelectedCredentialWallet.id,
|
|
160
160
|
};
|
|
161
|
-
dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet,
|
|
161
|
+
dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, newSelectedCredentialWallet, authToken);
|
|
162
162
|
return coinbaseMPCWallet;
|
|
163
163
|
}
|
|
164
164
|
catch (error) {
|
|
@@ -171,7 +171,7 @@ const useCoinbaseMPC = () => {
|
|
|
171
171
|
}
|
|
172
172
|
return undefined;
|
|
173
173
|
}), [linkCoinbaseMPCWallet, handleLogOut, setError]);
|
|
174
|
-
const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt,
|
|
174
|
+
const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chains = [ChainEnum.Evm], password) {
|
|
175
175
|
var _b;
|
|
176
176
|
const connector = (_b = findCoinbaseMPCWallet(walletConnectorOptions)) === null || _b === void 0 ? void 0 : _b.walletConnector;
|
|
177
177
|
if (!connector || !isCoinbaseMpcWalletConnector(connector)) {
|
|
@@ -189,7 +189,7 @@ const useCoinbaseMPC = () => {
|
|
|
189
189
|
if (fetchAuthToken) {
|
|
190
190
|
connector.setAuthTokenFetcher(fetchAuthToken);
|
|
191
191
|
}
|
|
192
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
192
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
193
193
|
// if user already has embedded wallet, set it as primary wallet and return
|
|
194
194
|
if (embeddedWalletVerifiedCredential) {
|
|
195
195
|
return returnExistingCoinbaseMPCWallet(connector, decodedJwt, embeddedWalletVerifiedCredential);
|
|
@@ -101,12 +101,12 @@ const useMPCEmbeddedWallet = () => {
|
|
|
101
101
|
const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = WalletContext.useWalletContext();
|
|
102
102
|
const userHasEmbeddedWallet = () => hasEmbeddedWallet.hasEmbeddedWallet(getAuthToken.getAuthToken() || onboardingOnlyJwt, 'coinbase');
|
|
103
103
|
const createPassword = React.useCallback((showIntro) => _tslib.__awaiter(void 0, void 0, void 0, function* () { return internalCreatePassword(showIntro); }), [internalCreatePassword]);
|
|
104
|
-
const prepareToCreateMPCWallet = React.useCallback((
|
|
104
|
+
const prepareToCreateMPCWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
105
105
|
var _a, _b, _c, _d;
|
|
106
106
|
const jwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
|
|
107
107
|
const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
|
|
108
108
|
const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
|
|
109
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
109
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
110
110
|
const isManualMode = ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _b === void 0 ? void 0 : _b.automaticEmbeddedWalletCreation) === false;
|
|
111
111
|
// if user has a wallet and it's not embedded,
|
|
112
112
|
// throw error to follow another flow and set up the right wallet
|
|
@@ -126,24 +126,24 @@ const useMPCEmbeddedWallet = () => {
|
|
|
126
126
|
connector.setRequiredPassword((_d = requiresPasswordForEmbeddedWallet.requiresPasswordForEmbeddedWallet(projectSettings)) !== null && _d !== void 0 ? _d : false);
|
|
127
127
|
return { decodedJwt, embeddedWalletVerifiedCredential, jwt };
|
|
128
128
|
}), [onboardingOnlyJwt, projectSettings, walletConnectorOptions]);
|
|
129
|
-
const canCreateMPCWallet = React.useCallback((
|
|
129
|
+
const canCreateMPCWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
130
130
|
try {
|
|
131
|
-
yield prepareToCreateMPCWallet(
|
|
131
|
+
yield prepareToCreateMPCWallet(chains);
|
|
132
132
|
return true;
|
|
133
133
|
}
|
|
134
134
|
catch (e) {
|
|
135
135
|
return false;
|
|
136
136
|
}
|
|
137
137
|
}), [prepareToCreateMPCWallet]);
|
|
138
|
-
const createEmbeddedWallet = React.useCallback((
|
|
139
|
-
const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(
|
|
138
|
+
const createEmbeddedWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
+
const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chains);
|
|
140
140
|
setIsLoadingEmbeddedWallet(true);
|
|
141
141
|
let password;
|
|
142
142
|
if (!embeddedWalletVerifiedCredential &&
|
|
143
143
|
requiresPasswordForEmbeddedWalletOnSignup.requiresPasswordForEmbeddedWalletOnSignup(projectSettings)) {
|
|
144
144
|
password = yield internalCreatePassword(false, true);
|
|
145
145
|
}
|
|
146
|
-
const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt,
|
|
146
|
+
const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chains, password);
|
|
147
147
|
setIsLoadingEmbeddedWallet(false);
|
|
148
148
|
return wallet;
|
|
149
149
|
}), [
|
package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import { Wallet } from '../../../../shared';
|
|
|
9
9
|
* }
|
|
10
10
|
*/
|
|
11
11
|
export declare const useMPCEmbeddedWallet: () => {
|
|
12
|
-
readonly canCreateMPCWallet: (
|
|
13
|
-
readonly createEmbeddedWallet: (
|
|
12
|
+
readonly canCreateMPCWallet: (chains?: ChainEnum[]) => Promise<boolean>;
|
|
13
|
+
readonly createEmbeddedWallet: (chains?: ChainEnum[]) => Promise<Wallet | undefined>;
|
|
14
14
|
readonly createPassword: (showIntro?: boolean) => Promise<string>;
|
|
15
15
|
readonly isLoadingEmbeddedWallet: boolean;
|
|
16
16
|
readonly userHasEmbeddedWallet: () => boolean;
|