@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
|
@@ -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 {
|
|
@@ -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
|
*
|
|
@@ -14,13 +15,15 @@ import { Wallet } from '../../../../shared';
|
|
|
14
15
|
* }
|
|
15
16
|
*/
|
|
16
17
|
export declare const useSecureEnclaveEmbeddedWallet: () => {
|
|
17
|
-
readonly createEmbeddedWallet: (
|
|
18
|
+
readonly createEmbeddedWallet: (chains?: ChainEnum[], options?: {
|
|
19
|
+
webAuthnAttestation: WebAuthnAttestation;
|
|
20
|
+
}) => Promise<Wallet | undefined>;
|
|
18
21
|
readonly createOrRestoreSession: ({ oneTimeCode }: {
|
|
19
22
|
oneTimeCode?: string;
|
|
20
23
|
}) => Promise<string>;
|
|
21
|
-
readonly createPasskey: ({ oneTimeCode }: {
|
|
24
|
+
readonly createPasskey: ({ oneTimeCode, }: {
|
|
22
25
|
oneTimeCode?: string;
|
|
23
|
-
}) => Promise<
|
|
26
|
+
}) => Promise<WebAuthnAttestation>;
|
|
24
27
|
readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
|
|
25
28
|
readonly isLoadingEmbeddedWallet: boolean;
|
|
26
29
|
readonly isSessionActive: boolean;
|
|
@@ -24,6 +24,7 @@ import '@dynamic-labs/multi-wallet';
|
|
|
24
24
|
import { getAuthToken } from '../../../functions/getAuthToken/getAuthToken.js';
|
|
25
25
|
import 'react-international-phone';
|
|
26
26
|
import { getUserWalletsFromVerifiedCredentials } from '../../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.js';
|
|
27
|
+
import { addPasskeyIdentifierToWalletConnector } from '../../../functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.js';
|
|
27
28
|
import 'viem';
|
|
28
29
|
import 'viem/chains';
|
|
29
30
|
import { getEOAWallet } from '../../../functions/getEOAWallet/getEOAWallet.js';
|
|
@@ -109,7 +110,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
109
110
|
const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, walletConnectorOptions, setUser, } = useInternalDynamicContext();
|
|
110
111
|
const { createTurnkeyWallet } = useTurnkey();
|
|
111
112
|
const { hasRecoveryEmail } = useIsTurnkeyWallet();
|
|
112
|
-
const
|
|
113
|
+
const { createRootElement } = useElementById();
|
|
113
114
|
const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = useWalletContext();
|
|
114
115
|
const wallet = getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
|
|
115
116
|
/**
|
|
@@ -120,14 +121,15 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
120
121
|
/**
|
|
121
122
|
* Creates a new secure enclave embedded wallet according to the settings from the dashboard
|
|
122
123
|
* @param chain - optional chain parameter to create the wallet for
|
|
124
|
+
* @param options - optional parameter contained more settings for the wallet creation
|
|
123
125
|
* @returns Promise<Wallet | undefined>
|
|
124
126
|
*/
|
|
125
|
-
const createEmbeddedWallet = useCallback((
|
|
127
|
+
const createEmbeddedWallet = useCallback((chains, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
128
|
var _e, _f;
|
|
127
129
|
const jwt = (_e = getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
|
|
128
130
|
const { decodedJwt } = validateUserIsLoggedIn(jwt);
|
|
129
131
|
const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
|
|
130
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
132
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
131
133
|
const isManualMode = ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.automaticEmbeddedWalletCreation) === false;
|
|
132
134
|
// if user has a wallet and it's not embedded,
|
|
133
135
|
// throw error to follow another flow and set up the right wallet
|
|
@@ -140,7 +142,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
140
142
|
validateTurnkeyProviderEnabled(projectSettings);
|
|
141
143
|
// TEMP: immediately disable loading state
|
|
142
144
|
setIsLoadingEmbeddedWallet(false);
|
|
143
|
-
return createTurnkeyWallet(jwt, decodedJwt,
|
|
145
|
+
return createTurnkeyWallet(jwt, decodedJwt, chains, options);
|
|
144
146
|
}), [
|
|
145
147
|
createTurnkeyWallet,
|
|
146
148
|
onboardingOnlyJwt,
|
|
@@ -161,6 +163,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
161
163
|
if (turnkeyRecoveryHandler.isSessionActive()) {
|
|
162
164
|
return ACTIVE_SESSION;
|
|
163
165
|
}
|
|
166
|
+
const turnkeyAuthIframeContainerRef = createRootElement(iframeContainerId);
|
|
164
167
|
// try to restore session if possible
|
|
165
168
|
if (canRestoreEmbeddedWalletSession((_j = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _j === void 0 ? void 0 : _j.sessionKeyDuration)) {
|
|
166
169
|
try {
|
|
@@ -196,11 +199,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
196
199
|
LocalStorage.setToLS(EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
|
|
197
200
|
return SESSION_CREATED;
|
|
198
201
|
}), [
|
|
202
|
+
createRootElement,
|
|
199
203
|
hasRecoveryEmail,
|
|
200
204
|
onboardingOnlyJwt,
|
|
201
205
|
primaryWallet,
|
|
202
206
|
(_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,
|
|
203
|
-
turnkeyAuthIframeContainerRef,
|
|
204
207
|
userHasEmbeddedWallet,
|
|
205
208
|
wallet === null || wallet === void 0 ? void 0 : wallet.connector,
|
|
206
209
|
]);
|
|
@@ -208,14 +211,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
208
211
|
* Creates a new passkey both for an existing wallet or a wallet to be created
|
|
209
212
|
* @param oneTimeCode: string | undefined,
|
|
210
213
|
*
|
|
211
|
-
* @returns
|
|
212
|
-
* attestation: Attestation,
|
|
213
|
-
* challenge: string,
|
|
214
|
-
* displayName: string,
|
|
215
|
-
* }
|
|
214
|
+
* @returns Promise<WebAuthnAttestation>
|
|
216
215
|
*/
|
|
217
|
-
const createPasskey = useCallback((_q) => __awaiter(void 0, [_q], void 0, function* ({ oneTimeCode }) {
|
|
218
|
-
var _r, _s
|
|
216
|
+
const createPasskey = useCallback((_q) => __awaiter(void 0, [_q], void 0, function* ({ oneTimeCode, }) {
|
|
217
|
+
var _r, _s;
|
|
219
218
|
const { decodedJwt, jwt } = validateUserIsLoggedIn(getAuthToken() || onboardingOnlyJwt);
|
|
220
219
|
validateTurnkeyProviderEnabled(projectSettings);
|
|
221
220
|
const turnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_r = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _r === void 0 ? void 0 : _r.chainConfigurations, decodedJwt.verifiedCredentials);
|
|
@@ -224,19 +223,16 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
224
223
|
}
|
|
225
224
|
const walletConnector = turnkeyWallet.walletConnector;
|
|
226
225
|
walletConnector.setEmail(user === null || user === void 0 ? void 0 : user.email);
|
|
227
|
-
if (!(user === null || user === void 0 ? void 0 : user.email)) {
|
|
228
|
-
|
|
229
|
-
((_s = user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => vc.oauthDisplayName)) === null || _s === void 0 ? void 0 : _s.oauthDisplayName) ||
|
|
230
|
-
'';
|
|
231
|
-
walletConnector.setPasskeyIdentifier(passkeyIdentifier);
|
|
226
|
+
if (user && !(user === null || user === void 0 ? void 0 : user.email)) {
|
|
227
|
+
addPasskeyIdentifierToWalletConnector(walletConnector, user);
|
|
232
228
|
}
|
|
233
229
|
const hasEmailVC = getUserVerifiedCredentialType(decodedJwt, JwtVerifiedCredentialFormatEnum.Email);
|
|
234
230
|
// return a new passkey if the user doesn't have a wallet yet or
|
|
235
231
|
// none of the requirements to add a passkey to an existing wallet are met
|
|
236
|
-
if (!(
|
|
232
|
+
if (!('id' in turnkeyWallet) || !hasEmailVC) {
|
|
237
233
|
return walletConnector.getWebAuthnAttestation();
|
|
238
234
|
}
|
|
239
|
-
const organizationId = (
|
|
235
|
+
const organizationId = (_s = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _s === void 0 ? void 0 : _s.turnkeySubOrganizationId;
|
|
240
236
|
if (!organizationId) {
|
|
241
237
|
throw new DynamicError('No sub organization id found for the wallet', INVALID_WALLET_DATA);
|
|
242
238
|
}
|
|
@@ -275,8 +271,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
275
271
|
* @returns Promise<Passkey[]>
|
|
276
272
|
*/
|
|
277
273
|
const getPasskeys = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
278
|
-
var
|
|
279
|
-
const { jwt } = validateUserIsLoggedIn((
|
|
274
|
+
var _t;
|
|
275
|
+
const { jwt } = validateUserIsLoggedIn((_t = getAuthToken()) !== null && _t !== void 0 ? _t : onboardingOnlyJwt);
|
|
280
276
|
const data = yield getUserPasskeys({
|
|
281
277
|
environmentId: environmentId,
|
|
282
278
|
userJwt: jwt,
|
|
@@ -295,11 +291,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
295
291
|
* @returns Promise<'code_sent'>
|
|
296
292
|
*/
|
|
297
293
|
const sendOneTimeCode = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
298
|
-
var _v, _w
|
|
299
|
-
const { jwt, decodedJwt } = validateUserIsLoggedIn((
|
|
294
|
+
var _u, _v, _w;
|
|
295
|
+
const { jwt, decodedJwt } = validateUserIsLoggedIn((_u = getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
|
|
300
296
|
validateTurnkeyProviderEnabled(projectSettings);
|
|
301
|
-
const targetTurnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (
|
|
302
|
-
if (!targetTurnkeyWallet || !targetTurnkeyWallet
|
|
297
|
+
const targetTurnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _v === void 0 ? void 0 : _v.chainConfigurations, decodedJwt.verifiedCredentials);
|
|
298
|
+
if (!targetTurnkeyWallet || !('id' in targetTurnkeyWallet)) {
|
|
303
299
|
throw new DynamicError('User does not have a valid secure enclave wallet', INVALID_WALLET_DATA);
|
|
304
300
|
}
|
|
305
301
|
const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler(targetTurnkeyWallet === null || targetTurnkeyWallet === void 0 ? void 0 : targetTurnkeyWallet.walletConnector);
|
|
@@ -308,7 +304,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
308
304
|
if (isSessionActive) {
|
|
309
305
|
throw new DynamicError('Session is active. No need to create a new one', ACTIVE_SESSION);
|
|
310
306
|
}
|
|
311
|
-
const
|
|
307
|
+
const turnkeyAuthIframeContainerRef = createRootElement(iframeContainerId);
|
|
308
|
+
const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, iframeElementId, getEmbeddedWalletSessionExpiration((_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.sessionKeyDuration));
|
|
312
309
|
if (!publicKey) {
|
|
313
310
|
throw new DynamicError(ERROR_SENDING_CODE);
|
|
314
311
|
}
|
|
@@ -322,10 +319,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
322
319
|
turnkeyAuthenticatorHandler.recoveryUserId = response.turnkeyUserId;
|
|
323
320
|
return CODE_SENT;
|
|
324
321
|
}), [
|
|
322
|
+
createRootElement,
|
|
325
323
|
environmentId,
|
|
326
324
|
onboardingOnlyJwt,
|
|
327
325
|
projectSettings,
|
|
328
|
-
turnkeyAuthIframeContainerRef,
|
|
329
326
|
walletConnectorOptions,
|
|
330
327
|
]);
|
|
331
328
|
return {
|
|
@@ -88,11 +88,13 @@ const useTurnkey = () => {
|
|
|
88
88
|
const { projectSettings, setPrimaryWalletId, walletConnectorOptions, setShowAuthFlow, environmentId, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
89
89
|
const { setView } = ViewContext.useViewContext();
|
|
90
90
|
const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation.useCreateDynamicEmbeddedWalletMutation();
|
|
91
|
-
const
|
|
91
|
+
const startHeadlessEmbeddedWalletCreationFlow = React.useCallback((jwt, decodedJwt, chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
92
92
|
yield createDynamicEmbeddedWalletMutation({
|
|
93
93
|
authToken: jwt,
|
|
94
|
+
chains,
|
|
94
95
|
decodedJwt,
|
|
95
96
|
environmentId,
|
|
97
|
+
options,
|
|
96
98
|
walletConnectorOptions,
|
|
97
99
|
withAuthenticator: false,
|
|
98
100
|
});
|
|
@@ -107,12 +109,12 @@ const useTurnkey = () => {
|
|
|
107
109
|
walletConnectorOptions,
|
|
108
110
|
setShowAuthFlow,
|
|
109
111
|
]);
|
|
110
|
-
const
|
|
112
|
+
const startPasskeyEmbeddedWalletCreationFlow = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
111
113
|
setShowAuthFlow(true, {
|
|
112
114
|
ignoreIfIsEmbeddedWidget: false,
|
|
113
115
|
performMultiWalletChecks: false,
|
|
114
116
|
});
|
|
115
|
-
setView('passkey-intro');
|
|
117
|
+
setView('passkey-intro', { chains });
|
|
116
118
|
return new Promise((resolve, reject) => {
|
|
117
119
|
dynamicEvents.dynamicEvents.once('embeddedWalletCreated', (wallet) => resolve(wallet));
|
|
118
120
|
dynamicEvents.dynamicEvents.once('embeddedWalletFailed', (error) => {
|
|
@@ -161,10 +163,10 @@ const useTurnkey = () => {
|
|
|
161
163
|
};
|
|
162
164
|
return Promise.resolve(passkeyWallet);
|
|
163
165
|
}), [setPrimaryWalletId, walletConnectorOptions]);
|
|
164
|
-
const createTurnkeyWallet = React.useCallback((jwt, decodedJwt,
|
|
166
|
+
const createTurnkeyWallet = React.useCallback((jwt, decodedJwt, chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
165
167
|
var _e, _f, _g, _h;
|
|
166
168
|
const isManualMode = ((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _e === void 0 ? void 0 : _e.automaticEmbeddedWalletCreation) === false;
|
|
167
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
169
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
168
170
|
const userWalletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
|
|
169
171
|
// If the user doesn't have a wallet, or if the customer is in Manual
|
|
170
172
|
// Mode, we should attempt to create a new wallet. Note that if in manual
|
|
@@ -173,13 +175,15 @@ const useTurnkey = () => {
|
|
|
173
175
|
if (!(userWalletsCredentials === null || userWalletsCredentials === void 0 ? void 0 : userWalletsCredentials.length) ||
|
|
174
176
|
(!embeddedWalletVerifiedCredential && isManualMode)) {
|
|
175
177
|
const hasEmailVC = getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedJwt, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email);
|
|
176
|
-
if (!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
|
|
177
|
-
hasEmailVC)
|
|
178
|
-
|
|
178
|
+
if ((!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
|
|
179
|
+
hasEmailVC) ||
|
|
180
|
+
(options === null || options === void 0 ? void 0 : options.webAuthnAttestation)) {
|
|
181
|
+
// create embedded wallet fully headless
|
|
182
|
+
return startHeadlessEmbeddedWalletCreationFlow(jwt, decodedJwt, chains, options);
|
|
179
183
|
}
|
|
180
184
|
else {
|
|
181
185
|
// show the passkey view to create an embedded wallet
|
|
182
|
-
return
|
|
186
|
+
return startPasskeyEmbeddedWalletCreationFlow(chains);
|
|
183
187
|
}
|
|
184
188
|
}
|
|
185
189
|
else {
|
|
@@ -214,8 +218,9 @@ const useTurnkey = () => {
|
|
|
214
218
|
projectSettings,
|
|
215
219
|
returnEmbeddedWallet,
|
|
216
220
|
setShowAuthFlow,
|
|
217
|
-
|
|
218
|
-
|
|
221
|
+
startHeadlessEmbeddedWalletCreationFlow,
|
|
222
|
+
startPasskeyEmbeddedWalletCreationFlow,
|
|
223
|
+
walletConnectorOptions,
|
|
219
224
|
]);
|
|
220
225
|
return {
|
|
221
226
|
createTurnkeyWallet,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { DynamicJwt, ChainEnum } from '@dynamic-labs/sdk-api-core';
|
|
2
|
+
import { WebAuthnAttestation } from '@dynamic-labs/wallet-connector-core';
|
|
2
3
|
import { Wallet } from '../../../../../shared';
|
|
3
4
|
export declare const useTurnkey: () => {
|
|
4
|
-
readonly createTurnkeyWallet: (jwt: string, decodedJwt: DynamicJwt,
|
|
5
|
+
readonly createTurnkeyWallet: (jwt: string, decodedJwt: DynamicJwt, chains?: ChainEnum[], options?: {
|
|
6
|
+
webAuthnAttestation: WebAuthnAttestation;
|
|
7
|
+
}) => Promise<Wallet | undefined>;
|
|
5
8
|
};
|
|
@@ -84,11 +84,13 @@ const useTurnkey = () => {
|
|
|
84
84
|
const { projectSettings, setPrimaryWalletId, walletConnectorOptions, setShowAuthFlow, environmentId, } = useInternalDynamicContext();
|
|
85
85
|
const { setView } = useViewContext();
|
|
86
86
|
const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation();
|
|
87
|
-
const
|
|
87
|
+
const startHeadlessEmbeddedWalletCreationFlow = useCallback((jwt, decodedJwt, chains, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
88
|
yield createDynamicEmbeddedWalletMutation({
|
|
89
89
|
authToken: jwt,
|
|
90
|
+
chains,
|
|
90
91
|
decodedJwt,
|
|
91
92
|
environmentId,
|
|
93
|
+
options,
|
|
92
94
|
walletConnectorOptions,
|
|
93
95
|
withAuthenticator: false,
|
|
94
96
|
});
|
|
@@ -103,12 +105,12 @@ const useTurnkey = () => {
|
|
|
103
105
|
walletConnectorOptions,
|
|
104
106
|
setShowAuthFlow,
|
|
105
107
|
]);
|
|
106
|
-
const
|
|
108
|
+
const startPasskeyEmbeddedWalletCreationFlow = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
|
|
107
109
|
setShowAuthFlow(true, {
|
|
108
110
|
ignoreIfIsEmbeddedWidget: false,
|
|
109
111
|
performMultiWalletChecks: false,
|
|
110
112
|
});
|
|
111
|
-
setView('passkey-intro');
|
|
113
|
+
setView('passkey-intro', { chains });
|
|
112
114
|
return new Promise((resolve, reject) => {
|
|
113
115
|
dynamicEvents.once('embeddedWalletCreated', (wallet) => resolve(wallet));
|
|
114
116
|
dynamicEvents.once('embeddedWalletFailed', (error) => {
|
|
@@ -157,10 +159,10 @@ const useTurnkey = () => {
|
|
|
157
159
|
};
|
|
158
160
|
return Promise.resolve(passkeyWallet);
|
|
159
161
|
}), [setPrimaryWalletId, walletConnectorOptions]);
|
|
160
|
-
const createTurnkeyWallet = useCallback((jwt, decodedJwt,
|
|
162
|
+
const createTurnkeyWallet = useCallback((jwt, decodedJwt, chains, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
161
163
|
var _e, _f, _g, _h;
|
|
162
164
|
const isManualMode = ((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _e === void 0 ? void 0 : _e.automaticEmbeddedWalletCreation) === false;
|
|
163
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
165
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
164
166
|
const userWalletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
|
|
165
167
|
// If the user doesn't have a wallet, or if the customer is in Manual
|
|
166
168
|
// Mode, we should attempt to create a new wallet. Note that if in manual
|
|
@@ -169,13 +171,15 @@ const useTurnkey = () => {
|
|
|
169
171
|
if (!(userWalletsCredentials === null || userWalletsCredentials === void 0 ? void 0 : userWalletsCredentials.length) ||
|
|
170
172
|
(!embeddedWalletVerifiedCredential && isManualMode)) {
|
|
171
173
|
const hasEmailVC = getUserVerifiedCredentialType(decodedJwt, JwtVerifiedCredentialFormatEnum.Email);
|
|
172
|
-
if (!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
|
|
173
|
-
hasEmailVC)
|
|
174
|
-
|
|
174
|
+
if ((!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
|
|
175
|
+
hasEmailVC) ||
|
|
176
|
+
(options === null || options === void 0 ? void 0 : options.webAuthnAttestation)) {
|
|
177
|
+
// create embedded wallet fully headless
|
|
178
|
+
return startHeadlessEmbeddedWalletCreationFlow(jwt, decodedJwt, chains, options);
|
|
175
179
|
}
|
|
176
180
|
else {
|
|
177
181
|
// show the passkey view to create an embedded wallet
|
|
178
|
-
return
|
|
182
|
+
return startPasskeyEmbeddedWalletCreationFlow(chains);
|
|
179
183
|
}
|
|
180
184
|
}
|
|
181
185
|
else {
|
|
@@ -210,8 +214,9 @@ const useTurnkey = () => {
|
|
|
210
214
|
projectSettings,
|
|
211
215
|
returnEmbeddedWallet,
|
|
212
216
|
setShowAuthFlow,
|
|
213
|
-
|
|
214
|
-
|
|
217
|
+
startHeadlessEmbeddedWalletCreationFlow,
|
|
218
|
+
startPasskeyEmbeddedWalletCreationFlow,
|
|
219
|
+
walletConnectorOptions,
|
|
215
220
|
]);
|
|
216
221
|
return {
|
|
217
222
|
createTurnkeyWallet,
|
|
@@ -78,7 +78,7 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
|
|
|
78
78
|
|
|
79
79
|
const useIsTurnkeyWallet = () => {
|
|
80
80
|
var _a;
|
|
81
|
-
const { primaryWallet, user
|
|
81
|
+
const { primaryWallet, user } = useInternalDynamicContext.useInternalDynamicContext();
|
|
82
82
|
const wallet = getEOAWallet.getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
|
|
83
83
|
const getTurnkeyVerifiedCredential = () => {
|
|
84
84
|
if (!wallet || !user) {
|
|
@@ -115,7 +115,7 @@ const useIsTurnkeyWallet = () => {
|
|
|
115
115
|
const isTurnkeyWalletWithoutAuthenticator = (isTurnkeyWallet && !hasTurnkeyVerifiedCredentialAuthenticator) ||
|
|
116
116
|
isUnclaimedTurnkeyTheSignerOfScw;
|
|
117
117
|
const hasRecoveryEmail = isTurnkeyWallet &&
|
|
118
|
-
Boolean(getUserVerifiedCredentialType.getUserVerifiedCredentialType(
|
|
118
|
+
Boolean(getUserVerifiedCredentialType.getUserVerifiedCredentialType(user, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email));
|
|
119
119
|
return {
|
|
120
120
|
hasRecoveryEmail,
|
|
121
121
|
hasTurnkeyVerifiedCredentialAuthenticator,
|
|
@@ -74,7 +74,7 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
|
|
|
74
74
|
|
|
75
75
|
const useIsTurnkeyWallet = () => {
|
|
76
76
|
var _a;
|
|
77
|
-
const { primaryWallet, user
|
|
77
|
+
const { primaryWallet, user } = useInternalDynamicContext();
|
|
78
78
|
const wallet = getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
|
|
79
79
|
const getTurnkeyVerifiedCredential = () => {
|
|
80
80
|
if (!wallet || !user) {
|
|
@@ -111,7 +111,7 @@ const useIsTurnkeyWallet = () => {
|
|
|
111
111
|
const isTurnkeyWalletWithoutAuthenticator = (isTurnkeyWallet && !hasTurnkeyVerifiedCredentialAuthenticator) ||
|
|
112
112
|
isUnclaimedTurnkeyTheSignerOfScw;
|
|
113
113
|
const hasRecoveryEmail = isTurnkeyWallet &&
|
|
114
|
-
Boolean(getUserVerifiedCredentialType(
|
|
114
|
+
Boolean(getUserVerifiedCredentialType(user, JwtVerifiedCredentialFormatEnum.Email));
|
|
115
115
|
return {
|
|
116
116
|
hasRecoveryEmail,
|
|
117
117
|
hasTurnkeyVerifiedCredentialAuthenticator,
|
|
@@ -91,7 +91,8 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
|
|
|
91
91
|
const usePasskeyRecovery = () => {
|
|
92
92
|
var _a, _b;
|
|
93
93
|
const { authToken, environmentId, primaryWallet, projectSettings, setShowAuthFlow, user: user$1, setUser, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
94
|
-
const
|
|
94
|
+
const { createRootElement } = useElementById.useElementById();
|
|
95
|
+
const iframeContainerRef = createRootElement(constants.iframeContainerId);
|
|
95
96
|
const { userHasEmbeddedWallet } = useEmbeddedWallet.useEmbeddedWallet();
|
|
96
97
|
const { isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
|
|
97
98
|
const { initAuthMethod } = useInitEmbeddedWalletAuthMethod.useInitEmbeddedWalletAuthMethod();
|
|
@@ -87,7 +87,8 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
|
|
|
87
87
|
const usePasskeyRecovery = () => {
|
|
88
88
|
var _a, _b;
|
|
89
89
|
const { authToken, environmentId, primaryWallet, projectSettings, setShowAuthFlow, user, setUser, } = useInternalDynamicContext();
|
|
90
|
-
const
|
|
90
|
+
const { createRootElement } = useElementById();
|
|
91
|
+
const iframeContainerRef = createRootElement(iframeContainerId);
|
|
91
92
|
const { userHasEmbeddedWallet } = useEmbeddedWallet();
|
|
92
93
|
const { isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail } = useIsTurnkeyWallet();
|
|
93
94
|
const { initAuthMethod } = useInitEmbeddedWalletAuthMethod();
|