@dynamic-labs/sdk-react-core 2.1.0-alpha.8 → 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 +7 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +12 -12
- 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 +0 -1
- package/src/lib/context/DynamicContext/DynamicContext.js +0 -1
- package/src/lib/context/DynamicContext/types/index.d.ts +0 -1
- 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 +15 -10
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +7 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +15 -10
- 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 +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.d.ts +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +2 -2
- 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/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/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/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
|
@@ -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 */
|
|
@@ -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
|
@@ -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
|
@@ -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;
|
|
@@ -97,12 +97,12 @@ const useMPCEmbeddedWallet = () => {
|
|
|
97
97
|
const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = useWalletContext();
|
|
98
98
|
const userHasEmbeddedWallet = () => hasEmbeddedWallet(getAuthToken() || onboardingOnlyJwt, 'coinbase');
|
|
99
99
|
const createPassword = useCallback((showIntro) => __awaiter(void 0, void 0, void 0, function* () { return internalCreatePassword(showIntro); }), [internalCreatePassword]);
|
|
100
|
-
const prepareToCreateMPCWallet = useCallback((
|
|
100
|
+
const prepareToCreateMPCWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
101
|
var _a, _b, _c, _d;
|
|
102
102
|
const jwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
|
|
103
103
|
const { decodedJwt } = validateUserIsLoggedIn(jwt);
|
|
104
104
|
const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
|
|
105
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
105
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
106
106
|
const isManualMode = ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _b === void 0 ? void 0 : _b.automaticEmbeddedWalletCreation) === false;
|
|
107
107
|
// if user has a wallet and it's not embedded,
|
|
108
108
|
// throw error to follow another flow and set up the right wallet
|
|
@@ -122,24 +122,24 @@ const useMPCEmbeddedWallet = () => {
|
|
|
122
122
|
connector.setRequiredPassword((_d = requiresPasswordForEmbeddedWallet(projectSettings)) !== null && _d !== void 0 ? _d : false);
|
|
123
123
|
return { decodedJwt, embeddedWalletVerifiedCredential, jwt };
|
|
124
124
|
}), [onboardingOnlyJwt, projectSettings, walletConnectorOptions]);
|
|
125
|
-
const canCreateMPCWallet = useCallback((
|
|
125
|
+
const canCreateMPCWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
126
|
try {
|
|
127
|
-
yield prepareToCreateMPCWallet(
|
|
127
|
+
yield prepareToCreateMPCWallet(chains);
|
|
128
128
|
return true;
|
|
129
129
|
}
|
|
130
130
|
catch (e) {
|
|
131
131
|
return false;
|
|
132
132
|
}
|
|
133
133
|
}), [prepareToCreateMPCWallet]);
|
|
134
|
-
const createEmbeddedWallet = useCallback((
|
|
135
|
-
const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(
|
|
134
|
+
const createEmbeddedWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chains);
|
|
136
136
|
setIsLoadingEmbeddedWallet(true);
|
|
137
137
|
let password;
|
|
138
138
|
if (!embeddedWalletVerifiedCredential &&
|
|
139
139
|
requiresPasswordForEmbeddedWalletOnSignup(projectSettings)) {
|
|
140
140
|
password = yield internalCreatePassword(false, true);
|
|
141
141
|
}
|
|
142
|
-
const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt,
|
|
142
|
+
const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chains, password);
|
|
143
143
|
setIsLoadingEmbeddedWallet(false);
|
|
144
144
|
return wallet;
|
|
145
145
|
}), [
|
|
@@ -28,6 +28,7 @@ require('@dynamic-labs/multi-wallet');
|
|
|
28
28
|
var getAuthToken = require('../../../functions/getAuthToken/getAuthToken.cjs');
|
|
29
29
|
require('react-international-phone');
|
|
30
30
|
var getUserWalletsFromVerifiedCredentials = require('../../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.cjs');
|
|
31
|
+
var addPasskeyIdentifierToWalletConnector = require('../../../functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.cjs');
|
|
31
32
|
require('viem');
|
|
32
33
|
require('viem/chains');
|
|
33
34
|
var getEOAWallet = require('../../../functions/getEOAWallet/getEOAWallet.cjs');
|
|
@@ -113,7 +114,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
113
114
|
const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, walletConnectorOptions, setUser, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
114
115
|
const { createTurnkeyWallet } = useTurnkey.useTurnkey();
|
|
115
116
|
const { hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
|
|
116
|
-
const
|
|
117
|
+
const { createRootElement } = useElementById.useElementById();
|
|
117
118
|
const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = WalletContext.useWalletContext();
|
|
118
119
|
const wallet = getEOAWallet.getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
|
|
119
120
|
/**
|
|
@@ -124,14 +125,15 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
124
125
|
/**
|
|
125
126
|
* Creates a new secure enclave embedded wallet according to the settings from the dashboard
|
|
126
127
|
* @param chain - optional chain parameter to create the wallet for
|
|
128
|
+
* @param options - optional parameter contained more settings for the wallet creation
|
|
127
129
|
* @returns Promise<Wallet | undefined>
|
|
128
130
|
*/
|
|
129
|
-
const createEmbeddedWallet = React.useCallback((
|
|
131
|
+
const createEmbeddedWallet = React.useCallback((chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
130
132
|
var _e, _f;
|
|
131
133
|
const jwt = (_e = getAuthToken.getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
|
|
132
134
|
const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
|
|
133
135
|
const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
|
|
134
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
136
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
135
137
|
const isManualMode = ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.automaticEmbeddedWalletCreation) === false;
|
|
136
138
|
// if user has a wallet and it's not embedded,
|
|
137
139
|
// throw error to follow another flow and set up the right wallet
|
|
@@ -144,7 +146,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
144
146
|
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
145
147
|
// TEMP: immediately disable loading state
|
|
146
148
|
setIsLoadingEmbeddedWallet(false);
|
|
147
|
-
return createTurnkeyWallet(jwt, decodedJwt,
|
|
149
|
+
return createTurnkeyWallet(jwt, decodedJwt, chains, options);
|
|
148
150
|
}), [
|
|
149
151
|
createTurnkeyWallet,
|
|
150
152
|
onboardingOnlyJwt,
|
|
@@ -165,6 +167,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
165
167
|
if (turnkeyRecoveryHandler.isSessionActive()) {
|
|
166
168
|
return errors.ACTIVE_SESSION;
|
|
167
169
|
}
|
|
170
|
+
const turnkeyAuthIframeContainerRef = createRootElement(constants.iframeContainerId);
|
|
168
171
|
// try to restore session if possible
|
|
169
172
|
if (passkeyRecovery.canRestoreEmbeddedWalletSession((_j = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _j === void 0 ? void 0 : _j.sessionKeyDuration)) {
|
|
170
173
|
try {
|
|
@@ -200,11 +203,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
200
203
|
localStorage.LocalStorage.setToLS(localStorage$1.EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
|
|
201
204
|
return errors.SESSION_CREATED;
|
|
202
205
|
}), [
|
|
206
|
+
createRootElement,
|
|
203
207
|
hasRecoveryEmail,
|
|
204
208
|
onboardingOnlyJwt,
|
|
205
209
|
primaryWallet,
|
|
206
210
|
(_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.sessionKeyDuration,
|
|
207
|
-
turnkeyAuthIframeContainerRef,
|
|
208
211
|
userHasEmbeddedWallet,
|
|
209
212
|
wallet === null || wallet === void 0 ? void 0 : wallet.connector,
|
|
210
213
|
]);
|
|
@@ -212,14 +215,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
212
215
|
* Creates a new passkey both for an existing wallet or a wallet to be created
|
|
213
216
|
* @param oneTimeCode: string | undefined,
|
|
214
217
|
*
|
|
215
|
-
* @returns
|
|
216
|
-
* attestation: Attestation,
|
|
217
|
-
* challenge: string,
|
|
218
|
-
* displayName: string,
|
|
219
|
-
* }
|
|
218
|
+
* @returns Promise<WebAuthnAttestation>
|
|
220
219
|
*/
|
|
221
|
-
const createPasskey = React.useCallback((_q) => _tslib.__awaiter(void 0, [_q], void 0, function* ({ oneTimeCode }) {
|
|
222
|
-
var _r, _s
|
|
220
|
+
const createPasskey = React.useCallback((_q) => _tslib.__awaiter(void 0, [_q], void 0, function* ({ oneTimeCode, }) {
|
|
221
|
+
var _r, _s;
|
|
223
222
|
const { decodedJwt, jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(getAuthToken.getAuthToken() || onboardingOnlyJwt);
|
|
224
223
|
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
225
224
|
const turnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_r = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _r === void 0 ? void 0 : _r.chainConfigurations, decodedJwt.verifiedCredentials);
|
|
@@ -228,19 +227,16 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
228
227
|
}
|
|
229
228
|
const walletConnector = turnkeyWallet.walletConnector;
|
|
230
229
|
walletConnector.setEmail(user === null || user === void 0 ? void 0 : user.email);
|
|
231
|
-
if (!(user === null || user === void 0 ? void 0 : user.email)) {
|
|
232
|
-
|
|
233
|
-
((_s = user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => vc.oauthDisplayName)) === null || _s === void 0 ? void 0 : _s.oauthDisplayName) ||
|
|
234
|
-
'';
|
|
235
|
-
walletConnector.setPasskeyIdentifier(passkeyIdentifier);
|
|
230
|
+
if (user && !(user === null || user === void 0 ? void 0 : user.email)) {
|
|
231
|
+
addPasskeyIdentifierToWalletConnector.addPasskeyIdentifierToWalletConnector(walletConnector, user);
|
|
236
232
|
}
|
|
237
233
|
const hasEmailVC = getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedJwt, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email);
|
|
238
234
|
// return a new passkey if the user doesn't have a wallet yet or
|
|
239
235
|
// none of the requirements to add a passkey to an existing wallet are met
|
|
240
|
-
if (!(
|
|
236
|
+
if (!('id' in turnkeyWallet) || !hasEmailVC) {
|
|
241
237
|
return walletConnector.getWebAuthnAttestation();
|
|
242
238
|
}
|
|
243
|
-
const organizationId = (
|
|
239
|
+
const organizationId = (_s = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _s === void 0 ? void 0 : _s.turnkeySubOrganizationId;
|
|
244
240
|
if (!organizationId) {
|
|
245
241
|
throw new utils.DynamicError('No sub organization id found for the wallet', errors.INVALID_WALLET_DATA);
|
|
246
242
|
}
|
|
@@ -279,8 +275,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
279
275
|
* @returns Promise<Passkey[]>
|
|
280
276
|
*/
|
|
281
277
|
const getPasskeys = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
282
|
-
var
|
|
283
|
-
const { jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((
|
|
278
|
+
var _t;
|
|
279
|
+
const { jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_t = getAuthToken.getAuthToken()) !== null && _t !== void 0 ? _t : onboardingOnlyJwt);
|
|
284
280
|
const data = yield embeddedWallets.getUserPasskeys({
|
|
285
281
|
environmentId: environmentId,
|
|
286
282
|
userJwt: jwt,
|
|
@@ -299,11 +295,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
299
295
|
* @returns Promise<'code_sent'>
|
|
300
296
|
*/
|
|
301
297
|
const sendOneTimeCode = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
302
|
-
var _v, _w
|
|
303
|
-
const { jwt, decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((
|
|
298
|
+
var _u, _v, _w;
|
|
299
|
+
const { jwt, decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_u = getAuthToken.getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
|
|
304
300
|
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
305
|
-
const targetTurnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (
|
|
306
|
-
if (!targetTurnkeyWallet || !targetTurnkeyWallet
|
|
301
|
+
const targetTurnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _v === void 0 ? void 0 : _v.chainConfigurations, decodedJwt.verifiedCredentials);
|
|
302
|
+
if (!targetTurnkeyWallet || !('id' in targetTurnkeyWallet)) {
|
|
307
303
|
throw new utils.DynamicError('User does not have a valid secure enclave wallet', errors.INVALID_WALLET_DATA);
|
|
308
304
|
}
|
|
309
305
|
const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(targetTurnkeyWallet === null || targetTurnkeyWallet === void 0 ? void 0 : targetTurnkeyWallet.walletConnector);
|
|
@@ -312,7 +308,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
312
308
|
if (isSessionActive) {
|
|
313
309
|
throw new utils.DynamicError('Session is active. No need to create a new one', errors.ACTIVE_SESSION);
|
|
314
310
|
}
|
|
315
|
-
const
|
|
311
|
+
const turnkeyAuthIframeContainerRef = createRootElement(constants.iframeContainerId);
|
|
312
|
+
const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, constants.iframeElementId, getEmbeddedWalletSessionExpiration.getEmbeddedWalletSessionExpiration((_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.sessionKeyDuration));
|
|
316
313
|
if (!publicKey) {
|
|
317
314
|
throw new utils.DynamicError(errors.ERROR_SENDING_CODE);
|
|
318
315
|
}
|
|
@@ -326,10 +323,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
326
323
|
turnkeyAuthenticatorHandler.recoveryUserId = response.turnkeyUserId;
|
|
327
324
|
return errors.CODE_SENT;
|
|
328
325
|
}), [
|
|
326
|
+
createRootElement,
|
|
329
327
|
environmentId,
|
|
330
328
|
onboardingOnlyJwt,
|
|
331
329
|
projectSettings,
|
|
332
|
-
turnkeyAuthIframeContainerRef,
|
|
333
330
|
walletConnectorOptions,
|
|
334
331
|
]);
|
|
335
332
|
return {
|