@dynamic-labs/sdk-react-core 2.1.0-alpha.1 → 2.1.0-alpha.10
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 +79 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +13 -14
- package/src/index.cjs +6 -2
- package/src/index.d.ts +2 -1
- package/src/index.js +3 -1
- package/src/lib/Main.cjs +7 -0
- package/src/lib/Main.js +7 -0
- package/src/lib/components/Alert/Alert.cjs +2 -2
- package/src/lib/components/Alert/Alert.js +2 -2
- package/src/lib/components/Alert/Alert.types.d.ts +1 -0
- package/src/lib/components/EmailForm/EmailForm.cjs +1 -1
- package/src/lib/components/EmailForm/EmailForm.js +1 -1
- package/src/lib/components/PhoneNumberField/PhoneNumberField.cjs +1 -1
- package/src/lib/components/PhoneNumberField/PhoneNumberField.js +1 -1
- package/src/lib/components/Portal/Portal.cjs +2 -1
- package/src/lib/components/Portal/Portal.js +2 -1
- package/src/lib/components/RadioButton/RadioButton.cjs +14 -0
- package/src/lib/components/RadioButton/RadioButton.d.ts +5 -0
- package/src/lib/components/RadioButton/RadioButton.js +10 -0
- package/src/lib/components/RadioButton/index.d.ts +1 -0
- package/src/lib/components/Tooltip/Tooltip.cjs +2 -1
- package/src/lib/components/Tooltip/Tooltip.js +2 -1
- package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.cjs +1 -1
- package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.d.ts +2 -1
- package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.js +1 -1
- package/src/lib/components/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +23 -7
- package/src/lib/context/DynamicContext/DynamicContext.d.ts +5 -0
- package/src/lib/context/DynamicContext/DynamicContext.js +20 -4
- package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs +2 -2
- package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.js +2 -2
- package/src/lib/context/DynamicContext/types/index.d.ts +0 -1
- package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.cjs +5 -2
- package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.js +5 -2
- package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.cjs +2 -1
- package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.d.ts +1 -1
- package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.js +2 -1
- package/src/lib/context/ErrorBoundary/ErrorBoundary.cjs +64 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundary.d.ts +3 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundary.js +60 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryBase.cjs +40 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryBase.d.ts +14 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryBase.js +36 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryContext.cjs +24 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryContext.d.ts +5 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryContext.js +18 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryExclude.cjs +17 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryExclude.d.ts +4 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryExclude.js +13 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryInclude.cjs +17 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryInclude.d.ts +4 -0
- package/src/lib/context/ErrorBoundary/ErrorBoundaryInclude.js +13 -0
- package/src/lib/context/ErrorBoundary/index.d.ts +3 -0
- package/src/lib/context/ErrorBoundary/types.d.ts +13 -0
- package/src/lib/context/ViewContext/ViewContext.cjs +2 -2
- package/src/lib/context/ViewContext/ViewContext.js +2 -2
- package/src/lib/context/ViewContext/types/index.d.ts +7 -2
- package/src/lib/data/api/user/user.cjs +16 -0
- package/src/lib/data/api/user/user.js +16 -1
- package/src/lib/data/api/wallets/wallets.cjs +26 -6
- package/src/lib/data/api/wallets/wallets.d.ts +4 -0
- package/src/lib/data/api/wallets/wallets.js +26 -7
- package/src/lib/events/dynamicEvents.d.ts +1 -1
- package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +6 -0
- package/src/lib/layout/DynamicAuthLayout/Header/header.js +6 -0
- package/src/lib/locale/en/translation.cjs +45 -4
- package/src/lib/locale/en/translation.d.ts +44 -3
- package/src/lib/locale/en/translation.js +45 -4
- package/src/lib/shared/types/dynamicEventsCallbacks.d.ts +2 -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/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/constants/errors.cjs +0 -2
- package/src/lib/utils/constants/errors.js +1 -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 +12 -9
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.d.ts +8 -2
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +13 -10
- package/src/lib/utils/functions/findTurnkeyWallet/index.d.ts +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 +2 -1
- package/src/lib/utils/functions/serializeWalletConnectors/index.d.ts +1 -0
- package/src/lib/utils/functions/serializeWalletConnectors/serializeWalletConnectors.cjs +32 -0
- package/src/lib/utils/functions/serializeWalletConnectors/serializeWalletConnectors.d.ts +2 -0
- package/src/lib/utils/functions/serializeWalletConnectors/serializeWalletConnectors.js +28 -0
- package/src/lib/utils/hooks/index.d.ts +1 -0
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +22 -17
- package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +22 -17
- 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 +22 -18
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +7 -2
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +22 -18
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +8 -0
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +8 -0
- 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 +14 -10
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +14 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +14 -10
- 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 +8 -8
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.d.ts +2 -2
- package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.js +8 -8
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +148 -46
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.d.ts +21 -8
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +152 -50
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +45 -18
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.d.ts +4 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +45 -18
- 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/useMergeUserAccounts/index.d.ts +1 -0
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +99 -0
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.d.ts +4 -0
- package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +95 -0
- 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/utils/hooks/useSendDynamicProps/useSendDynamicProps.cjs +6 -13
- package/src/lib/utils/hooks/useSendDynamicProps/useSendDynamicProps.d.ts +1 -3
- package/src/lib/utils/hooks/useSendDynamicProps/useSendDynamicProps.js +6 -12
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +5 -0
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +6 -1
- package/src/lib/utils/hooks/useWalletConnectorOptions/useWalletConnectorOptions.cjs +25 -2
- package/src/lib/utils/hooks/useWalletConnectorOptions/useWalletConnectorOptions.js +25 -2
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +2 -4
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +2 -1
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +2 -4
- package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.cjs +3 -3
- package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.js +3 -3
- package/src/lib/views/CollectUserDataView/useFields.cjs +1 -0
- package/src/lib/views/CollectUserDataView/useFields.d.ts +2 -0
- package/src/lib/views/CollectUserDataView/useFields.js +1 -0
- package/src/lib/views/EmailVerification/EmailVerification.cjs +38 -11
- package/src/lib/views/EmailVerification/EmailVerification.js +38 -11
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.cjs +2 -2
- package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.js +2 -2
- package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.cjs +126 -0
- package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.d.ts +6 -0
- package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.js +122 -0
- package/src/lib/views/MergeUserAccountsConflictsView/index.d.ts +1 -0
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +123 -0
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.d.ts +4 -0
- package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +119 -0
- package/src/lib/views/MergeUserAccountsView/index.d.ts +1 -0
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.cjs +3 -3
- package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.js +3 -3
- 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 +9 -9
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +6 -1
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +9 -9
- 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} +18 -19
- 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} +18 -19
- package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs +16 -0
- package/src/lib/views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.d.ts +2 -0
- package/src/lib/views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js +12 -0
- package/src/lib/views/Passkey/utils/findPrimaryEmbeddedChain/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 +9 -9
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +9 -9
- 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.cjs +4 -0
- package/src/lib/views/viewToComponentMap.d.ts +6 -2
- package/src/lib/views/viewToComponentMap.js +4 -0
- 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
package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js
CHANGED
|
@@ -124,7 +124,7 @@ const useCoinbaseMPC = () => {
|
|
|
124
124
|
setPrimaryWalletId(newSelectedCredentialWallet.id);
|
|
125
125
|
setUser(user);
|
|
126
126
|
connector.setVerifiedCredentials(user.verifiedCredentials);
|
|
127
|
-
return newSelectedCredentialWallet;
|
|
127
|
+
return { authToken: response === null || response === void 0 ? void 0 : response.jwt, newSelectedCredentialWallet };
|
|
128
128
|
}), [
|
|
129
129
|
appName,
|
|
130
130
|
consumeNonce,
|
|
@@ -143,7 +143,7 @@ const useCoinbaseMPC = () => {
|
|
|
143
143
|
: PasswordSourceTypeEnum.Dynamic;
|
|
144
144
|
try {
|
|
145
145
|
const backupCode = yield connector.generateWallet(source, initialWalletPassword);
|
|
146
|
-
const
|
|
146
|
+
const { authToken, newSelectedCredentialWallet } = yield linkCoinbaseMPCWallet({
|
|
147
147
|
backupCode,
|
|
148
148
|
connector,
|
|
149
149
|
jwt,
|
|
@@ -156,9 +156,9 @@ const useCoinbaseMPC = () => {
|
|
|
156
156
|
chain: (connector === null || connector === void 0 ? void 0 : connector.connectedChain) || '',
|
|
157
157
|
connected: true,
|
|
158
158
|
connector,
|
|
159
|
-
id:
|
|
159
|
+
id: newSelectedCredentialWallet.id,
|
|
160
160
|
};
|
|
161
|
-
dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet,
|
|
161
|
+
dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, newSelectedCredentialWallet, authToken);
|
|
162
162
|
return coinbaseMPCWallet;
|
|
163
163
|
}
|
|
164
164
|
catch (error) {
|
|
@@ -171,7 +171,7 @@ const useCoinbaseMPC = () => {
|
|
|
171
171
|
}
|
|
172
172
|
return undefined;
|
|
173
173
|
}), [linkCoinbaseMPCWallet, handleLogOut, setError]);
|
|
174
|
-
const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt,
|
|
174
|
+
const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chains = [ChainEnum.Evm], password) {
|
|
175
175
|
var _b;
|
|
176
176
|
const connector = (_b = findCoinbaseMPCWallet(walletConnectorOptions)) === null || _b === void 0 ? void 0 : _b.walletConnector;
|
|
177
177
|
if (!connector || !isCoinbaseMpcWalletConnector(connector)) {
|
|
@@ -189,7 +189,7 @@ const useCoinbaseMPC = () => {
|
|
|
189
189
|
if (fetchAuthToken) {
|
|
190
190
|
connector.setAuthTokenFetcher(fetchAuthToken);
|
|
191
191
|
}
|
|
192
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
192
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
193
193
|
// if user already has embedded wallet, set it as primary wallet and return
|
|
194
194
|
if (embeddedWalletVerifiedCredential) {
|
|
195
195
|
return returnExistingCoinbaseMPCWallet(connector, decodedJwt, embeddedWalletVerifiedCredential);
|
|
@@ -40,9 +40,9 @@ require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
|
|
|
40
40
|
require('../../../../context/VerificationContext/VerificationContext.cjs');
|
|
41
41
|
require('react-dom');
|
|
42
42
|
var WalletContext = require('../../../../context/WalletContext/WalletContext.cjs');
|
|
43
|
-
var useEmbeddedWalletPassword = require('../../useEmbeddedWalletPassword/useEmbeddedWalletPassword.cjs');
|
|
44
43
|
var validateUserIsLoggedIn = require('../../../validations/validateUserIsLoggedIn/validateUserIsLoggedIn.cjs');
|
|
45
44
|
var validateMPCProviderEnabled = require('../../../validations/validateMPCProviderEnabled/validateMPCProviderEnabled.cjs');
|
|
45
|
+
var useEmbeddedWalletPassword = require('../../useEmbeddedWalletPassword/useEmbeddedWalletPassword.cjs');
|
|
46
46
|
var useCoinbaseMPC = require('./useCoinbaseMPC/useCoinbaseMPC.cjs');
|
|
47
47
|
require('../../../../context/ThemeContext/ThemeContext.cjs');
|
|
48
48
|
require('@dynamic-labs/types');
|
|
@@ -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;
|
|
@@ -36,9 +36,9 @@ import '../../../../context/UserWalletsContext/UserWalletsContext.js';
|
|
|
36
36
|
import '../../../../context/VerificationContext/VerificationContext.js';
|
|
37
37
|
import 'react-dom';
|
|
38
38
|
import { useWalletContext } from '../../../../context/WalletContext/WalletContext.js';
|
|
39
|
-
import { useEmbeddedWalletPassword } from '../../useEmbeddedWalletPassword/useEmbeddedWalletPassword.js';
|
|
40
39
|
import { validateUserIsLoggedIn } from '../../../validations/validateUserIsLoggedIn/validateUserIsLoggedIn.js';
|
|
41
40
|
import { validateMPCProviderEnabled } from '../../../validations/validateMPCProviderEnabled/validateMPCProviderEnabled.js';
|
|
41
|
+
import { useEmbeddedWalletPassword } from '../../useEmbeddedWalletPassword/useEmbeddedWalletPassword.js';
|
|
42
42
|
import { useCoinbaseMPC } from './useCoinbaseMPC/useCoinbaseMPC.js';
|
|
43
43
|
import '../../../../context/ThemeContext/ThemeContext.js';
|
|
44
44
|
import '@dynamic-labs/types';
|
|
@@ -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
|
}), [
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
|
|
6
6
|
var _tslib = require('../../../../../../_virtual/_tslib.cjs');
|
|
7
7
|
var React = require('react');
|
|
8
|
+
var sdkApiCore = require('@dynamic-labs/sdk-api-core');
|
|
8
9
|
var utils = require('@dynamic-labs/utils');
|
|
9
10
|
require('../../../../context/DynamicContext/DynamicContext.cjs');
|
|
10
|
-
require('@dynamic-labs/sdk-api-core');
|
|
11
11
|
var logger = require('../../../../shared/logger.cjs');
|
|
12
12
|
require('@dynamic-labs/iconic');
|
|
13
13
|
require('@dynamic-labs/wallet-connector-core');
|
|
@@ -28,12 +28,15 @@ 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');
|
|
34
35
|
require('../../../../config/ApiEndpoint.cjs');
|
|
35
36
|
var embeddedWallets = require('../../../../data/api/embeddedWallets/embeddedWallets.cjs');
|
|
36
37
|
require('../../../../locale/locale.cjs');
|
|
38
|
+
var updateJWTAndCreateUserProfile = require('../../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.cjs');
|
|
39
|
+
var getUserVerifiedCredentialType = require('../../../functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.cjs');
|
|
37
40
|
var hasEmbeddedWallet = require('../../../functions/hasEmbeddedWallet/hasEmbeddedWallet.cjs');
|
|
38
41
|
var getEmbeddedWalletAuthHandler = require('../../../functions/getEmbeddedWalletAuthHandler/getEmbeddedWalletAuthHandler.cjs');
|
|
39
42
|
var getEmbeddedWalletSessionExpiration = require('../../../functions/getEmbeddedWalletSessionExpiration/getEmbeddedWalletSessionExpiration.cjs');
|
|
@@ -92,30 +95,46 @@ require('../../../../views/TransactionConfirmationView/helpers/transactionErrorM
|
|
|
92
95
|
require('../../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
|
|
93
96
|
var useInternalDynamicContext = require('../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
|
|
94
97
|
|
|
95
|
-
// Hook exposed to customers
|
|
98
|
+
// Hook exposed to customers
|
|
96
99
|
/**
|
|
100
|
+
*
|
|
97
101
|
* @returns {
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
102
|
+
* createEmbeddedWallet, - creates Secure enclave embedded wallet according to the settings
|
|
103
|
+
* createOrRestoreSession, - creates or restores a embedded wallet session
|
|
104
|
+
* createPasskey, - creates a new passkey both for an existing wallet or a wallet to be created
|
|
105
|
+
* getPasskeys, - gets all passkeys for the user
|
|
106
|
+
* isLoadingEmbeddedWallet, - loading state of the embedded wallet
|
|
107
|
+
* isSessionActive, - checks if the embedded wallet session is active
|
|
108
|
+
* sendOneTimeCode, - sends a one-time code to the user so they can create a session or add a new passkey
|
|
109
|
+
* userHasEmbeddedWallet, - checks if the user has an embedded wallet
|
|
101
110
|
* }
|
|
102
111
|
*/
|
|
103
112
|
const useSecureEnclaveEmbeddedWallet = () => {
|
|
104
|
-
var _a, _b;
|
|
105
|
-
const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
113
|
+
var _a, _b, _c, _d;
|
|
114
|
+
const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, walletConnectorOptions, setUser, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
106
115
|
const { createTurnkeyWallet } = useTurnkey.useTurnkey();
|
|
107
116
|
const { hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
|
|
108
|
-
const
|
|
117
|
+
const { createRootElement } = useElementById.useElementById();
|
|
109
118
|
const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = WalletContext.useWalletContext();
|
|
110
119
|
const wallet = getEOAWallet.getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
|
|
120
|
+
/**
|
|
121
|
+
* Checks if the user has an embedded wallet or not
|
|
122
|
+
* @returns boolean
|
|
123
|
+
*/
|
|
111
124
|
const userHasEmbeddedWallet = React.useCallback(() => hasEmbeddedWallet.hasEmbeddedWallet(getAuthToken.getAuthToken() || onboardingOnlyJwt, 'turnkey'), [onboardingOnlyJwt]);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Creates a new secure enclave embedded wallet according to the settings from the dashboard
|
|
127
|
+
* @param chain - optional chain parameter to create the wallet for
|
|
128
|
+
* @param options - optional parameter contained more settings for the wallet creation
|
|
129
|
+
* @returns Promise<Wallet | undefined>
|
|
130
|
+
*/
|
|
131
|
+
const createEmbeddedWallet = React.useCallback((chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
+
var _e, _f;
|
|
133
|
+
const jwt = (_e = getAuthToken.getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
|
|
115
134
|
const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
|
|
116
135
|
const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
|
|
117
|
-
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt,
|
|
118
|
-
const isManualMode = ((
|
|
136
|
+
const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
|
|
137
|
+
const isManualMode = ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.automaticEmbeddedWalletCreation) === false;
|
|
119
138
|
// if user has a wallet and it's not embedded,
|
|
120
139
|
// throw error to follow another flow and set up the right wallet
|
|
121
140
|
// However, if the user is in manual mode continue.
|
|
@@ -125,48 +144,56 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
125
144
|
throw new utils.DynamicError('Manual mode must be enabled to create an embedded wallet for this user');
|
|
126
145
|
}
|
|
127
146
|
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
128
|
-
setIsLoadingEmbeddedWallet(true);
|
|
129
147
|
// TEMP: immediately disable loading state
|
|
130
148
|
setIsLoadingEmbeddedWallet(false);
|
|
131
|
-
|
|
132
|
-
return wallet;
|
|
149
|
+
return createTurnkeyWallet(jwt, decodedJwt, chains, options);
|
|
133
150
|
}), [
|
|
134
151
|
createTurnkeyWallet,
|
|
135
152
|
onboardingOnlyJwt,
|
|
136
153
|
projectSettings,
|
|
137
154
|
setIsLoadingEmbeddedWallet,
|
|
138
155
|
]);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Creates or restores a secure enclave embedded wallet session
|
|
158
|
+
* If it detects that the session is possible to be restored, it will restore it
|
|
159
|
+
* @param oneTimeCode - optional one-time code parameter. If not informed it tries to restore a session
|
|
160
|
+
* @returns Promise<'session_created' | 'session_restored'> - returns a string indicating the status of the session
|
|
161
|
+
*/
|
|
162
|
+
const createOrRestoreSession = React.useCallback((_g) => _tslib.__awaiter(void 0, [_g], void 0, function* ({ oneTimeCode }) {
|
|
163
|
+
var _h, _j, _k, _l, _m, _o, _p;
|
|
164
|
+
const jwt = (_h = getAuthToken.getAuthToken()) !== null && _h !== void 0 ? _h : onboardingOnlyJwt;
|
|
142
165
|
const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
|
|
143
166
|
const turnkeyRecoveryHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(wallet === null || wallet === void 0 ? void 0 : wallet.connector);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
167
|
+
if (turnkeyRecoveryHandler.isSessionActive()) {
|
|
168
|
+
return errors.ACTIVE_SESSION;
|
|
169
|
+
}
|
|
170
|
+
const turnkeyAuthIframeContainerRef = createRootElement(constants.iframeContainerId);
|
|
171
|
+
// try to restore session if possible
|
|
172
|
+
if (passkeyRecovery.canRestoreEmbeddedWalletSession((_j = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _j === void 0 ? void 0 : _j.sessionKeyDuration)) {
|
|
147
173
|
try {
|
|
148
|
-
yield passkeyRecovery.restoreEmbeddedWalletSession({
|
|
174
|
+
const sessionRestored = yield passkeyRecovery.restoreEmbeddedWalletSession({
|
|
149
175
|
authToken: jwt,
|
|
150
176
|
iframeContainer: turnkeyAuthIframeContainerRef.current,
|
|
151
177
|
iframeElementId: constants.iframeElementId,
|
|
152
|
-
sessionExpiration: getEmbeddedWalletSessionExpiration.getEmbeddedWalletSessionExpiration((
|
|
178
|
+
sessionExpiration: getEmbeddedWalletSessionExpiration.getEmbeddedWalletSessionExpiration((_l = (_k = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _k === void 0 ? void 0 : _k.embeddedWallets) === null || _l === void 0 ? void 0 : _l.sessionKeyDuration),
|
|
153
179
|
wallet: primaryWallet,
|
|
154
180
|
});
|
|
155
|
-
|
|
181
|
+
if (sessionRestored)
|
|
182
|
+
return errors.SESSION_RESTORED;
|
|
156
183
|
}
|
|
157
184
|
catch (err) {
|
|
158
185
|
logger.logger.error('Failed to restore embedded wallet', err);
|
|
159
186
|
}
|
|
160
187
|
}
|
|
161
|
-
// creates a new session
|
|
162
188
|
if (!oneTimeCode) {
|
|
163
189
|
throw new utils.DynamicError('One-time code is required to create a session.', errors.INVALID_REQUEST);
|
|
164
190
|
}
|
|
191
|
+
// tries to create a new session with the informed one-time code
|
|
165
192
|
// verify user has a turnkey wallet and email VC
|
|
166
193
|
if (!userHasEmbeddedWallet() || !hasRecoveryEmail) {
|
|
167
194
|
throw new utils.DynamicError('User does not have a secure enclave wallet or a verified email', errors.INVALID_WALLET_DATA);
|
|
168
195
|
}
|
|
169
|
-
const organizationId = (
|
|
196
|
+
const organizationId = (_p = (_o = (_m = decodedJwt.verifiedCredentials) === null || _m === void 0 ? void 0 : _m.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'))) === null || _o === void 0 ? void 0 : _o.walletProperties) === null || _p === void 0 ? void 0 : _p.turnkeySubOrganizationId;
|
|
170
197
|
yield turnkeyRecoveryHandler.verifyRecoveryCode(oneTimeCode, organizationId);
|
|
171
198
|
const sessionSettings = {
|
|
172
199
|
createdAt: new Date().getTime(),
|
|
@@ -176,40 +203,113 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
176
203
|
localStorage.LocalStorage.setToLS(localStorage$1.EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
|
|
177
204
|
return errors.SESSION_CREATED;
|
|
178
205
|
}), [
|
|
206
|
+
createRootElement,
|
|
179
207
|
hasRecoveryEmail,
|
|
180
208
|
onboardingOnlyJwt,
|
|
181
209
|
primaryWallet,
|
|
182
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,
|
|
183
|
-
turnkeyAuthIframeContainerRef,
|
|
184
211
|
userHasEmbeddedWallet,
|
|
185
212
|
wallet === null || wallet === void 0 ? void 0 : wallet.connector,
|
|
186
213
|
]);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
/**
|
|
215
|
+
* Creates a new passkey both for an existing wallet or a wallet to be created
|
|
216
|
+
* @param oneTimeCode: string | undefined,
|
|
217
|
+
*
|
|
218
|
+
* @returns Promise<WebAuthnAttestation>
|
|
219
|
+
*/
|
|
220
|
+
const createPasskey = React.useCallback((_q) => _tslib.__awaiter(void 0, [_q], void 0, function* ({ oneTimeCode, }) {
|
|
221
|
+
var _r, _s;
|
|
222
|
+
const { decodedJwt, jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(getAuthToken.getAuthToken() || onboardingOnlyJwt);
|
|
223
|
+
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
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);
|
|
225
|
+
if (!(turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector)) {
|
|
226
|
+
throw new utils.DynamicError('Wallet connector not found', errors.INVALID_WALLET_DATA);
|
|
227
|
+
}
|
|
228
|
+
const walletConnector = turnkeyWallet.walletConnector;
|
|
229
|
+
walletConnector.setEmail(user === null || user === void 0 ? void 0 : user.email);
|
|
230
|
+
if (user && !(user === null || user === void 0 ? void 0 : user.email)) {
|
|
231
|
+
addPasskeyIdentifierToWalletConnector.addPasskeyIdentifierToWalletConnector(walletConnector, user);
|
|
193
232
|
}
|
|
194
|
-
|
|
195
|
-
|
|
233
|
+
const hasEmailVC = getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedJwt, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email);
|
|
234
|
+
// return a new passkey if the user doesn't have a wallet yet or
|
|
235
|
+
// none of the requirements to add a passkey to an existing wallet are met
|
|
236
|
+
if (!('id' in turnkeyWallet) || !hasEmailVC) {
|
|
237
|
+
return walletConnector.getWebAuthnAttestation();
|
|
196
238
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
239
|
+
const organizationId = (_s = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _s === void 0 ? void 0 : _s.turnkeySubOrganizationId;
|
|
240
|
+
if (!organizationId) {
|
|
241
|
+
throw new utils.DynamicError('No sub organization id found for the wallet', errors.INVALID_WALLET_DATA);
|
|
242
|
+
}
|
|
243
|
+
const turnkAuthenticatorHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(walletConnector);
|
|
244
|
+
// add new passkey to the wallet through an active session
|
|
245
|
+
yield createOrRestoreSession({ oneTimeCode });
|
|
246
|
+
const { attestation, challenge, displayName } = yield walletConnector.getWebAuthnAttestation();
|
|
247
|
+
yield turnkAuthenticatorHandler.addPasskeyAuthenticator({
|
|
248
|
+
attestation,
|
|
249
|
+
challenge,
|
|
250
|
+
organizationId,
|
|
251
|
+
});
|
|
252
|
+
const passkeyResponse = yield embeddedWallets.completePasskeyRecovery({
|
|
253
|
+
attestation: attestation,
|
|
254
|
+
challenge,
|
|
255
|
+
environmentId,
|
|
256
|
+
userJwt: jwt,
|
|
257
|
+
walletId: turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.id,
|
|
258
|
+
});
|
|
259
|
+
const { jwt: updatedJwt, minifiedJwt } = passkeyResponse;
|
|
260
|
+
setUser(updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(updatedJwt, minifiedJwt));
|
|
261
|
+
return { attestation, challenge, displayName };
|
|
262
|
+
}), [
|
|
263
|
+
createOrRestoreSession,
|
|
264
|
+
environmentId,
|
|
265
|
+
onboardingOnlyJwt,
|
|
266
|
+
projectSettings,
|
|
267
|
+
setUser,
|
|
268
|
+
user === null || user === void 0 ? void 0 : user.email,
|
|
269
|
+
user === null || user === void 0 ? void 0 : user.phoneNumber,
|
|
270
|
+
user === null || user === void 0 ? void 0 : user.verifiedCredentials,
|
|
271
|
+
walletConnectorOptions,
|
|
272
|
+
]);
|
|
273
|
+
/**
|
|
274
|
+
* Gets all passkeys for the user
|
|
275
|
+
* @returns Promise<Passkey[]>
|
|
276
|
+
*/
|
|
277
|
+
const getPasskeys = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
278
|
+
var _t;
|
|
279
|
+
const { jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_t = getAuthToken.getAuthToken()) !== null && _t !== void 0 ? _t : onboardingOnlyJwt);
|
|
280
|
+
const data = yield embeddedWallets.getUserPasskeys({
|
|
281
|
+
environmentId: environmentId,
|
|
282
|
+
userJwt: jwt,
|
|
283
|
+
});
|
|
284
|
+
return data.passkeys;
|
|
285
|
+
}), [environmentId, onboardingOnlyJwt]);
|
|
286
|
+
/**
|
|
287
|
+
* Checks if the embedded wallet session is active
|
|
288
|
+
* @returns boolean
|
|
289
|
+
*/
|
|
290
|
+
const isSessionActive = (_d = ((wallet === null || wallet === void 0 ? void 0 : wallet.connector) &&
|
|
291
|
+
'getAuthenticatorHandler' in wallet.connector &&
|
|
292
|
+
((_c = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(wallet.connector)) === null || _c === void 0 ? void 0 : _c.isSessionActive()))) !== null && _d !== void 0 ? _d : false;
|
|
293
|
+
/**
|
|
294
|
+
* Sends a one-time code to the user so they can create a session or add a new passkey
|
|
295
|
+
* @returns Promise<'code_sent'>
|
|
296
|
+
*/
|
|
297
|
+
const sendOneTimeCode = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
|
|
298
|
+
var _u, _v, _w;
|
|
299
|
+
const { jwt, decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_u = getAuthToken.getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
|
|
201
300
|
validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
|
|
202
|
-
const targetTurnkeyWallet = findTurnkeyWallet.
|
|
203
|
-
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)) {
|
|
204
303
|
throw new utils.DynamicError('User does not have a valid secure enclave wallet', errors.INVALID_WALLET_DATA);
|
|
205
304
|
}
|
|
206
|
-
const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(
|
|
305
|
+
const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(targetTurnkeyWallet === null || targetTurnkeyWallet === void 0 ? void 0 : targetTurnkeyWallet.walletConnector);
|
|
207
306
|
const targetTurnkeyWalletId = targetTurnkeyWallet.id;
|
|
208
307
|
const isSessionActive = turnkeyAuthenticatorHandler.isSessionActive();
|
|
209
308
|
if (isSessionActive) {
|
|
210
309
|
throw new utils.DynamicError('Session is active. No need to create a new one', errors.ACTIVE_SESSION);
|
|
211
310
|
}
|
|
212
|
-
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));
|
|
213
313
|
if (!publicKey) {
|
|
214
314
|
throw new utils.DynamicError(errors.ERROR_SENDING_CODE);
|
|
215
315
|
}
|
|
@@ -223,15 +323,17 @@ const useSecureEnclaveEmbeddedWallet = () => {
|
|
|
223
323
|
turnkeyAuthenticatorHandler.recoveryUserId = response.turnkeyUserId;
|
|
224
324
|
return errors.CODE_SENT;
|
|
225
325
|
}), [
|
|
326
|
+
createRootElement,
|
|
226
327
|
environmentId,
|
|
227
328
|
onboardingOnlyJwt,
|
|
228
329
|
projectSettings,
|
|
229
|
-
|
|
230
|
-
wallet === null || wallet === void 0 ? void 0 : wallet.connector,
|
|
330
|
+
walletConnectorOptions,
|
|
231
331
|
]);
|
|
232
332
|
return {
|
|
233
333
|
createEmbeddedWallet,
|
|
234
334
|
createOrRestoreSession,
|
|
335
|
+
createPasskey,
|
|
336
|
+
getPasskeys,
|
|
235
337
|
isLoadingEmbeddedWallet,
|
|
236
338
|
isSessionActive,
|
|
237
339
|
sendOneTimeCode,
|
|
@@ -1,19 +1,32 @@
|
|
|
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
|
/**
|
|
5
|
+
*
|
|
4
6
|
* @returns {
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
7
|
+
* createEmbeddedWallet, - creates Secure enclave embedded wallet according to the settings
|
|
8
|
+
* createOrRestoreSession, - creates or restores a embedded wallet session
|
|
9
|
+
* createPasskey, - creates a new passkey both for an existing wallet or a wallet to be created
|
|
10
|
+
* getPasskeys, - gets all passkeys for the user
|
|
11
|
+
* isLoadingEmbeddedWallet, - loading state of the embedded wallet
|
|
12
|
+
* isSessionActive, - checks if the embedded wallet session is active
|
|
13
|
+
* sendOneTimeCode, - sends a one-time code to the user so they can create a session or add a new passkey
|
|
14
|
+
* userHasEmbeddedWallet, - checks if the user has an embedded wallet
|
|
8
15
|
* }
|
|
9
16
|
*/
|
|
10
17
|
export declare const useSecureEnclaveEmbeddedWallet: () => {
|
|
11
|
-
readonly createEmbeddedWallet: (
|
|
12
|
-
|
|
18
|
+
readonly createEmbeddedWallet: (chains?: ChainEnum[], options?: {
|
|
19
|
+
webAuthnAttestation: WebAuthnAttestation;
|
|
20
|
+
}) => Promise<Wallet | undefined>;
|
|
21
|
+
readonly createOrRestoreSession: ({ oneTimeCode }: {
|
|
22
|
+
oneTimeCode?: string;
|
|
23
|
+
}) => Promise<string>;
|
|
24
|
+
readonly createPasskey: ({ oneTimeCode, }: {
|
|
25
|
+
oneTimeCode?: string;
|
|
26
|
+
}) => Promise<WebAuthnAttestation>;
|
|
27
|
+
readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
|
|
13
28
|
readonly isLoadingEmbeddedWallet: boolean;
|
|
14
29
|
readonly isSessionActive: boolean;
|
|
15
|
-
readonly sendOneTimeCode: (
|
|
16
|
-
address: string;
|
|
17
|
-
}) => Promise<string>;
|
|
30
|
+
readonly sendOneTimeCode: () => Promise<string>;
|
|
18
31
|
readonly userHasEmbeddedWallet: () => boolean;
|
|
19
32
|
};
|