@dynamic-labs/sdk-react-core 1.0.0-alpha.6 → 1.0.0-alpha.8
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 +32 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +10 -10
- package/src/index.cjs +4 -2
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -1
- package/src/lib/Main.cjs +18 -21
- package/src/lib/Main.js +18 -21
- package/src/lib/components/NeedHelpSection/NeedHelpSection.cjs +84 -5
- package/src/lib/components/NeedHelpSection/NeedHelpSection.js +85 -6
- package/src/lib/components/NetworkPicker/NetworkPicker.cjs +8 -6
- package/src/lib/components/NetworkPicker/NetworkPicker.d.ts +2 -1
- package/src/lib/components/NetworkPicker/NetworkPicker.js +8 -6
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs +68 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.d.ts +6 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js +64 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/index.d.ts +1 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.cjs +24 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.d.ts +6 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.js +20 -0
- package/src/lib/components/SecureTurnkeyWalletCard/index.d.ts +1 -0
- package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +4 -1
- package/src/lib/components/SendBalanceForm/SendBalanceForm.js +4 -1
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +5 -2
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +5 -2
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +6 -2
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +6 -2
- package/src/lib/components/index.d.ts +2 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -5
- package/src/lib/context/DynamicContext/DynamicContext.js +8 -5
- package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.cjs +23 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.d.ts +4 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.js +19 -0
- package/src/lib/context/DynamicContext/types/index.d.ts +2 -1
- package/src/lib/data/api.cjs +14 -10
- package/src/lib/data/api.d.ts +2 -2
- package/src/lib/data/api.js +14 -10
- package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +9 -11
- package/src/lib/layout/DynamicAuthLayout/Header/header.js +10 -12
- package/src/lib/locale/en/translation.cjs +77 -3
- package/src/lib/locale/en/translation.d.ts +76 -2
- package/src/lib/locale/en/translation.js +77 -3
- package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.cjs +6 -2
- package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.js +6 -2
- package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.cjs +1 -1
- package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.js +1 -1
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
- package/src/lib/utils/hooks/index.d.ts +2 -0
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +1 -6
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +1 -6
- package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +3 -0
- package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +3 -0
- package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +7 -8
- package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +7 -8
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/index.d.ts +1 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +83 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +15 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +79 -0
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +11 -3
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +11 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +57 -33
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +57 -33
- package/src/lib/utils/hooks/useEventListener/useEventListener.cjs +2 -1
- package/src/lib/utils/hooks/useEventListener/useEventListener.js +2 -1
- package/src/lib/utils/hooks/useIsTurnkeyWallet/index.d.ts +1 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +37 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.d.ts +6 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +33 -0
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +9 -5
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.d.ts +0 -1
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +10 -6
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +20 -21
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +1 -2
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +20 -21
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +32 -9
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.d.ts +0 -1
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +33 -10
- package/src/lib/views/AccountExistsView/AccountExistsView.cjs +1 -1
- package/src/lib/views/AccountExistsView/AccountExistsView.js +1 -1
- package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +1 -1
- package/src/lib/views/CollectUserDataView/CollectUserDataView.js +1 -1
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.cjs +2 -5
- package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.js +2 -5
- package/src/lib/views/LoginView/useLoginView.cjs +101 -84
- package/src/lib/views/LoginView/useLoginView.js +102 -85
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +6 -3
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +6 -3
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +20 -50
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +1 -6
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +20 -50
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +7 -2
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +7 -2
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +11 -7
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +11 -7
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +8 -10
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +8 -10
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +56 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +13 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +52 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +1 -1
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +1 -1
- package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.cjs +1 -1
- package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.js +1 -1
- package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +12 -2
- package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +12 -2
- package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs +3 -0
- package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.js +4 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +6 -3
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +6 -3
- package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.js +2 -2
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js +2 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +8 -5
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +8 -5
- package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.cjs +2 -3
- package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.js +2 -3
- package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.cjs +11 -2
- package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.js +11 -2
- package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.cjs +1 -2
- package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.js +1 -2
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.cjs +1 -3
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.js +1 -3
- package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.js +1 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.js +2 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs +16 -6
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js +16 -6
- package/src/lib/utils/functions/getEnabledProviders/index.cjs +0 -7
- package/src/lib/utils/functions/getEnabledProviders/index.js +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useMemo, useCallback } from 'react';
|
|
2
2
|
import { useTranslation } from 'react-i18next';
|
|
3
|
-
import {
|
|
3
|
+
import { SdkViewSectionType, SdkViewType } from '@dynamic-labs/sdk-api';
|
|
4
4
|
import { useInternalDynamicContext } from '../../context/DynamicContext/useInternalDynamicContext.js';
|
|
5
5
|
import { useSocialRedirectContext } from '../../context/SocialRedirectContext/SocialRedirectContext.js';
|
|
6
6
|
import { logger } from '../../shared/logger.js';
|
|
@@ -15,15 +15,20 @@ import 'viem';
|
|
|
15
15
|
import '@dynamic-labs/utils';
|
|
16
16
|
import '../../shared/consts/index.js';
|
|
17
17
|
import '@dynamic-labs/multi-wallet';
|
|
18
|
-
import { getEnabledProviders } from '../../utils/functions/getEnabledProviders/index.js';
|
|
19
18
|
import { isEmailProviderEnabled } from '../../utils/functions/isEmailProviderEnabled/isEmailProviderEnabled.js';
|
|
20
19
|
|
|
21
20
|
/* eslint-disable multiline-comment-style */
|
|
22
21
|
const NUMBER_OF_WALLETS = 3;
|
|
23
22
|
const useLoginView = () => {
|
|
24
|
-
var _a, _b, _c, _d;
|
|
23
|
+
var _a, _b, _c, _d, _e, _f;
|
|
25
24
|
const { projectSettings, authorizationViewDisplayOrder, loginWithEmail, wallets, walletsFilter, } = useInternalDynamicContext();
|
|
25
|
+
const { t } = useTranslation();
|
|
26
26
|
const { enabledSocialProviders } = useSocialRedirectContext();
|
|
27
|
+
const hasSocialProvidersEnabled = Boolean(enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length);
|
|
28
|
+
const hasEmailProviderEnabled = ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) === null || _a === void 0 ? void 0 : _a.length) &&
|
|
29
|
+
isEmailProviderEnabled(projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers);
|
|
30
|
+
// is email only is set in the project settings when the "Email (Web2) only" is toggled on in the dashboard
|
|
31
|
+
const isEmailOnly = (_c = (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _b === void 0 ? void 0 : _b.modal) === null || _c === void 0 ? void 0 : _c.emailOnly;
|
|
27
32
|
/** Takes from wallets only those that can be selected in the wallet list by the user.
|
|
28
33
|
* Should filter out embedded wallets
|
|
29
34
|
* WHY: when we decide whether to show wallets or not, we need to know how many wallets
|
|
@@ -31,61 +36,91 @@ const useLoginView = () => {
|
|
|
31
36
|
* wallets and then display an empty wallet list (since turnkey doesn't render)
|
|
32
37
|
*/
|
|
33
38
|
const selectableWallets = (walletsFilter ? walletsFilter(wallets) : wallets).filter(({ key }) => key !== 'turnkey');
|
|
34
|
-
const
|
|
35
|
-
|
|
39
|
+
const separator = useMemo(() => ({
|
|
40
|
+
label: t('dyn_login.separators.default'),
|
|
41
|
+
type: SdkViewSectionType.Separator,
|
|
42
|
+
}), [t]);
|
|
36
43
|
const isWalletOnly = useMemo(() => {
|
|
37
|
-
var _a, _b, _c
|
|
44
|
+
var _a, _b, _c;
|
|
38
45
|
if (!projectSettings) {
|
|
39
46
|
return false;
|
|
40
47
|
}
|
|
41
|
-
//
|
|
42
|
-
if (!loginWithEmail) {
|
|
48
|
+
// if both loginWithEmail AND hasSocialProvidersEnabled are false, it's wallet only
|
|
49
|
+
if (!loginWithEmail && !hasSocialProvidersEnabled) {
|
|
43
50
|
return true;
|
|
44
51
|
}
|
|
45
52
|
const loginView = (_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.views) === null || _b === void 0 ? void 0 : _b.find((view) => view.type === SdkViewType.Login);
|
|
46
|
-
// backwards compatibility for those that didn't set up login view
|
|
53
|
+
// backwards compatibility for those that didn't set up login view sections
|
|
47
54
|
if (!((_c = loginView === null || loginView === void 0 ? void 0 : loginView.sections) === null || _c === void 0 ? void 0 : _c.length)) {
|
|
48
|
-
return
|
|
49
|
-
!isEmailProviderEnabled(projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers));
|
|
55
|
+
return !hasEmailProviderEnabled && !hasSocialProvidersEnabled;
|
|
50
56
|
}
|
|
51
57
|
return (loginView.sections.length === 1 && loginView.sections[0].type === 'wallet');
|
|
52
|
-
}, [
|
|
58
|
+
}, [
|
|
59
|
+
projectSettings,
|
|
60
|
+
loginWithEmail,
|
|
61
|
+
hasSocialProvidersEnabled,
|
|
62
|
+
hasEmailProviderEnabled,
|
|
63
|
+
enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length,
|
|
64
|
+
]);
|
|
53
65
|
/**
|
|
54
|
-
* build email
|
|
66
|
+
* build email from project settings design.modal props
|
|
55
67
|
* @returns SdkViewSection[]
|
|
56
68
|
*/
|
|
57
69
|
const getEmailViewSectionDefinition = useCallback(() => {
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
if (!hasEmailProviderEnabled)
|
|
71
|
+
return [];
|
|
72
|
+
return [
|
|
60
73
|
{
|
|
61
74
|
type: SdkViewSectionType.Email,
|
|
62
75
|
},
|
|
63
76
|
];
|
|
64
|
-
|
|
65
|
-
|
|
77
|
+
}, [hasEmailProviderEnabled]);
|
|
78
|
+
/**
|
|
79
|
+
* build social from project settings design.modal props
|
|
80
|
+
* @returns SdkViewSection[]
|
|
81
|
+
*/
|
|
82
|
+
const getSocialViewSectionDefinition = useCallback(() => {
|
|
83
|
+
if (!(enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length))
|
|
84
|
+
return [];
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
66
87
|
numOfItemsToDisplay: 5,
|
|
67
88
|
type: SdkViewSectionType.Social,
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
}, [enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length]);
|
|
92
|
+
const getWalletViewSectionDefinition = useCallback(() => {
|
|
93
|
+
var _a, _b;
|
|
94
|
+
if (!(selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length))
|
|
95
|
+
return [];
|
|
96
|
+
const numOfItemsToDisplay = ((_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _a === void 0 ? void 0 : _a.modal) === null || _b === void 0 ? void 0 : _b.showWalletsButton)
|
|
97
|
+
? 0
|
|
98
|
+
: NUMBER_OF_WALLETS;
|
|
99
|
+
return [
|
|
100
|
+
{
|
|
101
|
+
numOfItemsToDisplay,
|
|
102
|
+
type: SdkViewSectionType.Wallet,
|
|
103
|
+
},
|
|
104
|
+
];
|
|
83
105
|
}, [
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
(_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.splitEmailAndSocial,
|
|
87
|
-
t,
|
|
106
|
+
(_e = (_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _d === void 0 ? void 0 : _d.modal) === null || _e === void 0 ? void 0 : _e.showWalletsButton,
|
|
107
|
+
selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length,
|
|
88
108
|
]);
|
|
109
|
+
const applyLoginModalSettings = useCallback((emailAndSocialSections) => {
|
|
110
|
+
if (emailAndSocialSections.length < 2) {
|
|
111
|
+
return emailAndSocialSections;
|
|
112
|
+
}
|
|
113
|
+
const { splitEmailAndSocial, socialAboveEmail } = (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) || {};
|
|
114
|
+
if (splitEmailAndSocial) {
|
|
115
|
+
emailAndSocialSections.splice(1, 0, separator);
|
|
116
|
+
// eslint-disable-next-line prefer-destructuring
|
|
117
|
+
emailAndSocialSections[2].defaultItem = enabledSocialProviders[0];
|
|
118
|
+
}
|
|
119
|
+
if (socialAboveEmail) {
|
|
120
|
+
emailAndSocialSections.reverse();
|
|
121
|
+
}
|
|
122
|
+
return emailAndSocialSections;
|
|
123
|
+
}, [enabledSocialProviders, projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal, separator]);
|
|
89
124
|
// TODO: https://linear.app/dynamic-labs/issue/GVTY-212/rethink-or-implement-toolkit-template-for-email-wallet-order
|
|
90
125
|
/**
|
|
91
126
|
* remove wallet view section from projectSettings?.sdk?.views if no wallet defined
|
|
@@ -105,78 +140,60 @@ const useLoginView = () => {
|
|
|
105
140
|
}
|
|
106
141
|
return sections.filter((section) => section.type !== 'wallet');
|
|
107
142
|
}, [selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length, projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.chains]);
|
|
108
|
-
const addSeparator = useCallback((index) => {
|
|
109
|
-
// if not the first index, no separator is needed
|
|
110
|
-
// if the first index but does not have wallets or providers,
|
|
111
|
-
// it'll show only one view section - no separator is needed
|
|
112
|
-
if (index !== 0 || !(selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length) || !hasEnabledProviders) {
|
|
113
|
-
return [];
|
|
114
|
-
}
|
|
115
|
-
return [
|
|
116
|
-
{
|
|
117
|
-
label: t('dyn_login.separators.default'),
|
|
118
|
-
type: SdkViewSectionType.Separator,
|
|
119
|
-
},
|
|
120
|
-
];
|
|
121
|
-
}, [hasEnabledProviders, selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length, t]);
|
|
122
143
|
/**
|
|
123
144
|
* build login view sections array from project settings design.modal props - backwards compatibility
|
|
124
145
|
* @returns SdkViewSection[]
|
|
125
146
|
*/
|
|
126
|
-
const buildLoginSections = useCallback(() => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (
|
|
131
|
-
(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// add
|
|
135
|
-
|
|
147
|
+
const buildLoginSections = useCallback((buildOrder) => {
|
|
148
|
+
const loginViewSections = [];
|
|
149
|
+
buildOrder === null || buildOrder === void 0 ? void 0 : buildOrder.forEach((loginItem) => {
|
|
150
|
+
// Add a separator if there are sections already
|
|
151
|
+
if (loginViewSections.length)
|
|
152
|
+
loginViewSections.push(separator);
|
|
153
|
+
if (loginItem === 'email') {
|
|
154
|
+
// In the past, the email and social sections were combined into one section,
|
|
155
|
+
// so we need to check for that case and add the social section if needed for backwards compatibility
|
|
156
|
+
// if email was just pushed to the loginViewSections array and social is not defined in the buildOrder,
|
|
157
|
+
// then we need to add social (if social is enabled)
|
|
158
|
+
const emailAndSocialSections = [
|
|
159
|
+
...getEmailViewSectionDefinition(),
|
|
160
|
+
...getSocialViewSectionDefinition(),
|
|
161
|
+
];
|
|
162
|
+
loginViewSections.push(...applyLoginModalSettings(emailAndSocialSections));
|
|
136
163
|
}
|
|
137
|
-
if (loginItem === 'wallet'
|
|
138
|
-
|
|
139
|
-
const numOfItemsToDisplay = ((_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _a === void 0 ? void 0 : _a.modal) === null || _b === void 0 ? void 0 : _b.showWalletsButton)
|
|
140
|
-
? 0
|
|
141
|
-
: NUMBER_OF_WALLETS;
|
|
142
|
-
loginViewSections = loginViewSections.concat([
|
|
143
|
-
{
|
|
144
|
-
numOfItemsToDisplay,
|
|
145
|
-
type: SdkViewSectionType.Wallet,
|
|
146
|
-
},
|
|
147
|
-
],
|
|
148
|
-
// add separator if email providers defined
|
|
149
|
-
addSeparator(index));
|
|
164
|
+
if (loginItem === 'wallet') {
|
|
165
|
+
loginViewSections.push(...getWalletViewSectionDefinition());
|
|
150
166
|
}
|
|
151
167
|
});
|
|
152
168
|
return loginViewSections;
|
|
153
169
|
}, [
|
|
154
|
-
|
|
155
|
-
authorizationViewDisplayOrder,
|
|
170
|
+
applyLoginModalSettings,
|
|
156
171
|
getEmailViewSectionDefinition,
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
172
|
+
getSocialViewSectionDefinition,
|
|
173
|
+
getWalletViewSectionDefinition,
|
|
174
|
+
separator,
|
|
160
175
|
]);
|
|
161
176
|
/**
|
|
162
177
|
* returns the login view sections to be displayed in order from projectSettings?.sdk?.views
|
|
163
178
|
* and has backwards compatibility with project settings design.modal props
|
|
164
179
|
*/
|
|
165
180
|
const logingViewSections = useMemo(() => {
|
|
166
|
-
var _a, _b, _c
|
|
181
|
+
var _a, _b, _c;
|
|
167
182
|
const loginView = (_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.views) === null || _b === void 0 ? void 0 : _b.find((view) => view.type === SdkViewType.Login);
|
|
168
183
|
if ((_c = loginView === null || loginView === void 0 ? void 0 : loginView.sections) === null || _c === void 0 ? void 0 : _c.length) {
|
|
169
184
|
return filterLoginViewSections(loginView === null || loginView === void 0 ? void 0 : loginView.sections);
|
|
170
185
|
}
|
|
171
|
-
|
|
172
|
-
|
|
186
|
+
let viewOrder = authorizationViewDisplayOrder;
|
|
187
|
+
if (isEmailOnly) {
|
|
188
|
+
viewOrder = ['email'];
|
|
173
189
|
}
|
|
174
|
-
return buildLoginSections();
|
|
190
|
+
return buildLoginSections(viewOrder);
|
|
175
191
|
}, [
|
|
176
|
-
projectSettings,
|
|
177
|
-
|
|
178
|
-
|
|
192
|
+
(_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _f === void 0 ? void 0 : _f.views,
|
|
193
|
+
authorizationViewDisplayOrder,
|
|
194
|
+
isEmailOnly,
|
|
179
195
|
buildLoginSections,
|
|
196
|
+
filterLoginViewSections,
|
|
180
197
|
]);
|
|
181
198
|
return {
|
|
182
199
|
isWalletOnly,
|
|
@@ -68,7 +68,7 @@ var UserAddress = require('../../components/UserAddress/UserAddress.cjs');
|
|
|
68
68
|
var SelectNetworkButton = require('../../components/SelectNetworkButton/SelectNetworkButton.cjs');
|
|
69
69
|
|
|
70
70
|
const NetworkNotSupported = () => {
|
|
71
|
-
const {
|
|
71
|
+
const { onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, bridgeChainsToConnect, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
72
72
|
const { t } = reactI18next.useTranslation();
|
|
73
73
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
74
74
|
const { data: walletConnectorNetwork } = usePromise.usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), { deps: [primaryWallet, walletConnector, connectedWallets] });
|
|
@@ -108,10 +108,13 @@ const NetworkNotSupported = () => {
|
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
const evmNetworks = walletConnector.evmNetworks || [];
|
|
111
|
-
const _isSupportedNetwork = isSupportedNetwork.isSupportedNetwork({
|
|
111
|
+
const _isSupportedNetwork = isSupportedNetwork.isSupportedNetwork({
|
|
112
|
+
network: walletConnectorNetwork,
|
|
113
|
+
walletConnector,
|
|
114
|
+
});
|
|
112
115
|
return (jsxRuntime.jsxs("div", { className: 'network-not-supported', "data-testid": 'network-not-supported', children: [onboardingImageUrl && (jsxRuntime.jsx("img", { className: 'network-not-supported__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { variant: 'info', withIcon: false, className: 'network-not-supported__error--not-supported', children: t('dyn_network_not_supported.warning_message') })), jsxRuntime.jsxs("div", { className: classNames.classNames('network-not-supported__content-container', {
|
|
113
116
|
'network-not-supported__content-container--error': !_isSupportedNetwork,
|
|
114
|
-
}), children: [jsxRuntime.jsx("div", { className: 'network-not-supported__img-container', children: jsxRuntime.jsx(walletBook.WalletIcon, { style: { height: 64, width: 64 }, walletKey: walletConnector.key }) }), jsxRuntime.jsx(UserAddress.UserAddress, { walletConnector: walletConnector }), jsxRuntime.jsx("div", { className: 'network-not-supported__network-container', children: evmNetworks.length > 1 && (jsxRuntime.jsx(NetworkPicker.NetworkPicker, { evmNetworks: evmNetworks, connector: walletConnector, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, showNetworkName: true, buttonClassName: 'network-not-supported__network-picker-button', mainClassName: 'network-not-supported__network-picker' })) }), jsxRuntime.jsx("div", { className: 'network-not-supported__welcome-container', children: jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_network_not_supported.subtitle') }) }), evmNetworks.length === 1 && (jsxRuntime.jsx(SelectNetworkButton.SelectNetworkButton, { onClick: onSelectNetworkButtonClick, networkId: evmNetworks[0].networkId, networkName: evmNetworks[0].vanityName || evmNetworks[0].name, networkIconUrl: evmNetworks[0].iconUrls[0] }))] })] }));
|
|
117
|
+
}), children: [jsxRuntime.jsx("div", { className: 'network-not-supported__img-container', children: jsxRuntime.jsx(walletBook.WalletIcon, { style: { height: 64, width: 64 }, walletKey: walletConnector.key }) }), jsxRuntime.jsx(UserAddress.UserAddress, { walletConnector: walletConnector }), jsxRuntime.jsx("div", { className: 'network-not-supported__network-container', children: evmNetworks.length > 1 && (jsxRuntime.jsx(NetworkPicker.NetworkPicker, { currentNetwork: walletConnectorNetwork, evmNetworks: evmNetworks, connector: walletConnector, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, showNetworkName: true, buttonClassName: 'network-not-supported__network-picker-button', mainClassName: 'network-not-supported__network-picker' })) }), jsxRuntime.jsx("div", { className: 'network-not-supported__welcome-container', children: jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_network_not_supported.subtitle') }) }), evmNetworks.length === 1 && (jsxRuntime.jsx(SelectNetworkButton.SelectNetworkButton, { onClick: onSelectNetworkButtonClick, networkId: evmNetworks[0].networkId, networkName: evmNetworks[0].vanityName || evmNetworks[0].name, networkIconUrl: evmNetworks[0].iconUrls[0] }))] })] }));
|
|
115
118
|
};
|
|
116
119
|
|
|
117
120
|
exports.NetworkNotSupported = NetworkNotSupported;
|
|
@@ -64,7 +64,7 @@ import { UserAddress } from '../../components/UserAddress/UserAddress.js';
|
|
|
64
64
|
import { SelectNetworkButton } from '../../components/SelectNetworkButton/SelectNetworkButton.js';
|
|
65
65
|
|
|
66
66
|
const NetworkNotSupported = () => {
|
|
67
|
-
const {
|
|
67
|
+
const { onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, bridgeChainsToConnect, } = useInternalDynamicContext();
|
|
68
68
|
const { t } = useTranslation();
|
|
69
69
|
// Refresh selectedWalletConnector network when primaryWallet or connectedWallets updates
|
|
70
70
|
const { data: walletConnectorNetwork } = usePromise(() => walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.getNetwork(), { deps: [primaryWallet, walletConnector, connectedWallets] });
|
|
@@ -104,10 +104,13 @@ const NetworkNotSupported = () => {
|
|
|
104
104
|
}
|
|
105
105
|
});
|
|
106
106
|
const evmNetworks = walletConnector.evmNetworks || [];
|
|
107
|
-
const _isSupportedNetwork = isSupportedNetwork({
|
|
107
|
+
const _isSupportedNetwork = isSupportedNetwork({
|
|
108
|
+
network: walletConnectorNetwork,
|
|
109
|
+
walletConnector,
|
|
110
|
+
});
|
|
108
111
|
return (jsxs("div", { className: 'network-not-supported', "data-testid": 'network-not-supported', children: [onboardingImageUrl && (jsx("img", { className: 'network-not-supported__main-img', src: onboardingImageUrl, alt: 'onboarding' })), !_isSupportedNetwork && (jsx(ErrorContainer, { variant: 'info', withIcon: false, className: 'network-not-supported__error--not-supported', children: t('dyn_network_not_supported.warning_message') })), jsxs("div", { className: classNames('network-not-supported__content-container', {
|
|
109
112
|
'network-not-supported__content-container--error': !_isSupportedNetwork,
|
|
110
|
-
}), children: [jsx("div", { className: 'network-not-supported__img-container', children: jsx(WalletIcon, { style: { height: 64, width: 64 }, walletKey: walletConnector.key }) }), jsx(UserAddress, { walletConnector: walletConnector }), jsx("div", { className: 'network-not-supported__network-container', children: evmNetworks.length > 1 && (jsx(NetworkPicker, { evmNetworks: evmNetworks, connector: walletConnector, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, showNetworkName: true, buttonClassName: 'network-not-supported__network-picker-button', mainClassName: 'network-not-supported__network-picker' })) }), jsx("div", { className: 'network-not-supported__welcome-container', children: jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_network_not_supported.subtitle') }) }), evmNetworks.length === 1 && (jsx(SelectNetworkButton, { onClick: onSelectNetworkButtonClick, networkId: evmNetworks[0].networkId, networkName: evmNetworks[0].vanityName || evmNetworks[0].name, networkIconUrl: evmNetworks[0].iconUrls[0] }))] })] }));
|
|
113
|
+
}), children: [jsx("div", { className: 'network-not-supported__img-container', children: jsx(WalletIcon, { style: { height: 64, width: 64 }, walletKey: walletConnector.key }) }), jsx(UserAddress, { walletConnector: walletConnector }), jsx("div", { className: 'network-not-supported__network-container', children: evmNetworks.length > 1 && (jsx(NetworkPicker, { currentNetwork: walletConnectorNetwork, evmNetworks: evmNetworks, connector: walletConnector, isNetworkPickerOpen: isNetworkPickerOpen, setIsNetworkPickerOpen: setIsNetworkPickerOpen, showNetworkName: true, buttonClassName: 'network-not-supported__network-picker-button', mainClassName: 'network-not-supported__network-picker' })) }), jsx("div", { className: 'network-not-supported__welcome-container', children: jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_network_not_supported.subtitle') }) }), evmNetworks.length === 1 && (jsx(SelectNetworkButton, { onClick: onSelectNetworkButtonClick, networkId: evmNetworks[0].networkId, networkName: evmNetworks[0].vanityName || evmNetworks[0].name, networkIconUrl: evmNetworks[0].iconUrls[0] }))] })] }));
|
|
111
114
|
};
|
|
112
115
|
|
|
113
116
|
export { NetworkNotSupported };
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _tslib = require('../../../../../_virtual/_tslib.cjs');
|
|
6
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
6
|
var React = require('react');
|
|
8
7
|
var reactI18next = require('react-i18next');
|
|
@@ -10,24 +9,23 @@ var utils = require('@dynamic-labs/utils');
|
|
|
10
9
|
var useInternalDynamicContext = require('../../../context/DynamicContext/useInternalDynamicContext.cjs');
|
|
11
10
|
require('@dynamic-labs/sdk-api');
|
|
12
11
|
require('../../../config/ApiEndpoint.cjs');
|
|
13
|
-
var
|
|
12
|
+
var decodeJwt = require('../../../shared/utils/functions/decodeJwt/decodeJwt.cjs');
|
|
14
13
|
require('@dynamic-labs/iconic');
|
|
15
14
|
require('@dynamic-labs/wallet-connector-core');
|
|
16
15
|
require('../../../context/ViewContext/ViewContext.cjs');
|
|
17
16
|
var passkeyIntroIcon = require('../../../shared/assets/passkey-intro-icon.cjs');
|
|
18
17
|
var questionMark = require('../../../shared/assets/question-mark.cjs');
|
|
18
|
+
require('../../../shared/logger.cjs');
|
|
19
19
|
require('@dynamic-labs/wallet-book');
|
|
20
20
|
var localStorage$1 = require('../../../utils/constants/localStorage.cjs');
|
|
21
21
|
require('../../../utils/constants/colors.cjs');
|
|
22
22
|
var localStorage = require('../../../shared/utils/classes/storage/localStorage.cjs');
|
|
23
23
|
require('viem');
|
|
24
24
|
require('../../../shared/consts/index.cjs');
|
|
25
|
+
var getAuthToken = require('../../../utils/functions/getAuthToken/getAuthToken.cjs');
|
|
25
26
|
require('@dynamic-labs/multi-wallet');
|
|
26
27
|
require('@dynamic-labs/rpc-providers');
|
|
27
28
|
require('../../../utils/hooks/useWallets/utils/verifyMagicIsSetup/verifyMagicIsSetup.cjs');
|
|
28
|
-
var createUserProfile = require('../../../utils/functions/createUserProfile/createUserProfile.cjs');
|
|
29
|
-
var index$1 = require('../../../utils/functions/storeAuthToken/index.cjs');
|
|
30
|
-
var smartWallet = require('../../../utils/hooks/useWalletConnectors/utils/smartWallet/smartWallet.cjs');
|
|
31
29
|
require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
|
|
32
30
|
require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
|
|
33
31
|
require('../../../context/ErrorContext/ErrorContext.cjs');
|
|
@@ -56,6 +54,7 @@ require('yup');
|
|
|
56
54
|
var ErrorContainer = require('../../../components/ErrorContainer/ErrorContainer.cjs');
|
|
57
55
|
require('../../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.cjs');
|
|
58
56
|
require('@dynamic-labs/types');
|
|
57
|
+
var useCreateDynamicEmbeddedWalletMutation = require('../../../utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs');
|
|
59
58
|
require('../../../utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs');
|
|
60
59
|
require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
|
|
61
60
|
require('formik');
|
|
@@ -65,7 +64,6 @@ var IconButton = require('../../../components/IconButton/IconButton.cjs');
|
|
|
65
64
|
require('../../../components/Alert/Alert.cjs');
|
|
66
65
|
require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
|
|
67
66
|
var getProperErrorMessage = require('../../../modals/SignMessageConfirmationModal/getProperErrorMessage.cjs');
|
|
68
|
-
var useMutation = require('../../../utils/hooks/useMutation/useMutation.cjs');
|
|
69
67
|
var TextButton = require('../../../components/TextButton/TextButton.cjs');
|
|
70
68
|
require('../../../components/InlineWidget/InlineWidget.cjs');
|
|
71
69
|
require('../../../components/MenuList/Dropdown/Dropdown.cjs');
|
|
@@ -73,60 +71,32 @@ require('../../../components/Popper/Popper/Popper.cjs');
|
|
|
73
71
|
require('../../../components/Popper/PopperContext/PopperContext.cjs');
|
|
74
72
|
require('react-focus-lock');
|
|
75
73
|
var isPasskeyEnabled = require('../../../utils/functions/isPasskeyEnabled/isPasskeyEnabled.cjs');
|
|
76
|
-
var createEmbeddedWalletWithPasskey = require('../utils/createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.cjs');
|
|
77
|
-
var findPasskeyEmailWalletConnector = require('../utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.cjs');
|
|
78
74
|
var PasskeyDeviceIcon = require('../PasskeyDeviceIcon/PasskeyDeviceIcon.cjs');
|
|
79
75
|
|
|
80
|
-
const PasskeyIntroView = (
|
|
81
|
-
const {
|
|
76
|
+
const PasskeyIntroView = () => {
|
|
77
|
+
const { wallets, environmentId, handleLogOut, onboardingOnlyJwt } = useInternalDynamicContext.useInternalDynamicContext();
|
|
82
78
|
const { setIsFooterExpanded } = index.useFooterAnimationContext();
|
|
83
79
|
const { t } = reactI18next.useTranslation();
|
|
84
80
|
const { data: passkeyEnabled } = usePromise.usePromise(isPasskeyEnabled.isPasskeyEnabled);
|
|
85
81
|
// if passkey is not yet setup, but user logged in with email in a passkey env
|
|
86
82
|
// it should be null to force user to setup passkey even after the a refresh
|
|
87
83
|
React.useEffect(() => localStorage.LocalStorage.removeFromLS(localStorage$1.LAST_USED_WALLET), []);
|
|
88
|
-
const {
|
|
84
|
+
const { createDynamicEmbeddedWalletMutation, isLoading, error } = useCreateDynamicEmbeddedWalletMutation.useCreateDynamicEmbeddedWalletMutation();
|
|
85
|
+
const handleCreateEmbeddedWallet = () => {
|
|
89
86
|
var _a;
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
walletConnector: findPasskeyEmailWalletConnector.findPasskeyEmailWalletConnector(wallets),
|
|
95
|
-
});
|
|
96
|
-
const passkeyWallet = {
|
|
97
|
-
address: (yield walletConnector.fetchPublicAddress()) || '',
|
|
98
|
-
chain: walletConnector.connectedChain || '',
|
|
99
|
-
connected: true,
|
|
100
|
-
connector: walletConnector,
|
|
101
|
-
id: embeddedWalletVerifiedCredential.id,
|
|
102
|
-
};
|
|
103
|
-
internalEvents.current.emit('embeddedWalletCreated', passkeyWallet);
|
|
104
|
-
const smartWallet$1 = smartWallet.findSmartWallet(embeddedWalletVerifiedCredential, decodedJwt.verifiedCredentials);
|
|
105
|
-
if (smartWallet$1) {
|
|
106
|
-
yield smartWallet.initializeSmartWallet({
|
|
107
|
-
account: smartWallet$1,
|
|
108
|
-
verifiedCredentials: decodedJwt.verifiedCredentials,
|
|
109
|
-
walletOptions: wallets,
|
|
110
|
-
});
|
|
111
|
-
setPrimaryWalletId(smartWallet$1.id);
|
|
87
|
+
const jwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
|
|
88
|
+
const decodedJwt = decodeJwt.decodeJwt(jwt);
|
|
89
|
+
if (!jwt || !decodedJwt) {
|
|
90
|
+
throw new Error('User is not logged in');
|
|
112
91
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const turnkeyVerifiedCredentials = (_a = decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.find(({ walletName }) => walletName === 'turnkey');
|
|
120
|
-
setCallback('embeddedWalletCreated', {
|
|
121
|
-
email: (turnkeyVerifiedCredentials === null || turnkeyVerifiedCredentials === void 0 ? void 0 : turnkeyVerifiedCredentials.email) || '',
|
|
122
|
-
verifiedCredential: turnkeyVerifiedCredentials,
|
|
92
|
+
createDynamicEmbeddedWalletMutation({
|
|
93
|
+
authToken: jwt,
|
|
94
|
+
decodedJwt,
|
|
95
|
+
environmentId,
|
|
96
|
+
wallets,
|
|
97
|
+
withAuthenticator: true,
|
|
123
98
|
});
|
|
124
|
-
}
|
|
125
|
-
onFailure: (err) => {
|
|
126
|
-
logger.logger.error('Failed to create embedded wallet', err);
|
|
127
|
-
internalEvents.current.emit('embeddedWalletFailed', err);
|
|
128
|
-
},
|
|
129
|
-
});
|
|
99
|
+
};
|
|
130
100
|
const errorText = React.useMemo(() => {
|
|
131
101
|
if (!error) {
|
|
132
102
|
return undefined;
|
|
@@ -137,7 +107,7 @@ const PasskeyIntroView = ({ createEmbeddedWalletMutation = createEmbeddedWalletW
|
|
|
137
107
|
return getProperErrorMessage.getProperErrorMessage(error);
|
|
138
108
|
}, [error]);
|
|
139
109
|
const infoIconButton = (jsxRuntime.jsx(Tooltip.Tooltip, { content: t('dyn_passkey_intro.helper.tooltip'), className: 'header__tooltip', children: jsxRuntime.jsx(IconButton.IconButton, { type: 'button', "data-testid": 'info-button', onClick: () => setIsFooterExpanded((prev) => !prev), className: 'header__icon', children: jsxRuntime.jsx(questionMark.ReactComponent, {}) }) }, 'info-button'));
|
|
140
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { trailing: infoIconButton, children: jsxRuntime.jsx(Typography.Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', children: t('dyn_passkey_intro.title') }) }), jsxRuntime.jsxs("div", { className: 'passkey-intro-view', children: [jsxRuntime.jsx("div", { className: 'passkey-intro-view__header', children: jsxRuntime.jsx(passkeyIntroIcon.ReactComponent, {}) }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'passkey-intro-view__subtitle', children: t('dyn_passkey_intro.subtitle') }), passkeyEnabled === false && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: t('dyn_passkey_intro.disabled') })), errorText && jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: errorText }), jsxRuntime.jsxs("div", { className: 'passkey-intro-view__actions', children: [jsxRuntime.jsx(Button.Button, { buttonVariant: 'brand-primary', buttonPadding: 'large', onClick:
|
|
110
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { trailing: infoIconButton, children: jsxRuntime.jsx(Typography.Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', children: t('dyn_passkey_intro.title') }) }), jsxRuntime.jsxs("div", { className: 'passkey-intro-view', children: [jsxRuntime.jsx("div", { className: 'passkey-intro-view__header', children: jsxRuntime.jsx(passkeyIntroIcon.ReactComponent, {}) }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'passkey-intro-view__subtitle', children: t('dyn_passkey_intro.subtitle') }), passkeyEnabled === false && (jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: t('dyn_passkey_intro.disabled') })), errorText && jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: errorText }), jsxRuntime.jsxs("div", { className: 'passkey-intro-view__actions', children: [jsxRuntime.jsx(Button.Button, { buttonVariant: 'brand-primary', buttonPadding: 'large', onClick: handleCreateEmbeddedWallet, dataTestId: 'setup-passkey-button', loading: isLoading, disabled: isLoading || !passkeyEnabled, typographyProps: {
|
|
141
111
|
color: 'inherit',
|
|
142
112
|
}, children: jsxRuntime.jsxs("div", { className: 'passkey-intro-view__inline-button', children: [jsxRuntime.jsx(PasskeyDeviceIcon.PasskeyDeviceIcon, {}), jsxRuntime.jsx(Typography.Typography, { children: t('dyn_passkey_intro.button') })] }) }), jsxRuntime.jsx(TextButton.TextButton, { "data-testid": 'setup-passkey-logout-button', className: 'passkey-intro-view__log-out', onClick: handleLogOut, children: t('dyn_passkey_intro.button_logout') })] })] })] }));
|
|
143
113
|
};
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
|
-
|
|
3
|
-
type PasskeyIntroViewProps = {
|
|
4
|
-
createEmbeddedWalletMutation?: typeof createEmbeddedWalletWithPasskey;
|
|
5
|
-
};
|
|
6
|
-
export declare const PasskeyIntroView: FC<PasskeyIntroViewProps>;
|
|
7
|
-
export {};
|
|
2
|
+
export declare const PasskeyIntroView: FC;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from '../../../../../_virtual/_tslib.js';
|
|
2
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
2
|
import { useEffect, useMemo } from 'react';
|
|
4
3
|
import { useTranslation } from 'react-i18next';
|
|
@@ -6,24 +5,23 @@ import { DynamicError } from '@dynamic-labs/utils';
|
|
|
6
5
|
import { useInternalDynamicContext } from '../../../context/DynamicContext/useInternalDynamicContext.js';
|
|
7
6
|
import '@dynamic-labs/sdk-api';
|
|
8
7
|
import '../../../config/ApiEndpoint.js';
|
|
9
|
-
import {
|
|
8
|
+
import { decodeJwt } from '../../../shared/utils/functions/decodeJwt/decodeJwt.js';
|
|
10
9
|
import '@dynamic-labs/iconic';
|
|
11
10
|
import '@dynamic-labs/wallet-connector-core';
|
|
12
11
|
import '../../../context/ViewContext/ViewContext.js';
|
|
13
12
|
import { ReactComponent as SvgPasskeyIntroIcon } from '../../../shared/assets/passkey-intro-icon.js';
|
|
14
13
|
import { ReactComponent as SvgQuestionMark } from '../../../shared/assets/question-mark.js';
|
|
14
|
+
import '../../../shared/logger.js';
|
|
15
15
|
import '@dynamic-labs/wallet-book';
|
|
16
16
|
import { LAST_USED_WALLET } from '../../../utils/constants/localStorage.js';
|
|
17
17
|
import '../../../utils/constants/colors.js';
|
|
18
18
|
import { LocalStorage } from '../../../shared/utils/classes/storage/localStorage.js';
|
|
19
19
|
import 'viem';
|
|
20
20
|
import '../../../shared/consts/index.js';
|
|
21
|
+
import { getAuthToken } from '../../../utils/functions/getAuthToken/getAuthToken.js';
|
|
21
22
|
import '@dynamic-labs/multi-wallet';
|
|
22
23
|
import '@dynamic-labs/rpc-providers';
|
|
23
24
|
import '../../../utils/hooks/useWallets/utils/verifyMagicIsSetup/verifyMagicIsSetup.js';
|
|
24
|
-
import { createUserProfile } from '../../../utils/functions/createUserProfile/createUserProfile.js';
|
|
25
|
-
import { storeAuthToken } from '../../../utils/functions/storeAuthToken/index.js';
|
|
26
|
-
import { findSmartWallet, initializeSmartWallet } from '../../../utils/hooks/useWalletConnectors/utils/smartWallet/smartWallet.js';
|
|
27
25
|
import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
|
|
28
26
|
import '../../../context/AccountExistsContext/AccountExistsContext.js';
|
|
29
27
|
import '../../../context/ErrorContext/ErrorContext.js';
|
|
@@ -52,6 +50,7 @@ import 'yup';
|
|
|
52
50
|
import { ErrorContainer } from '../../../components/ErrorContainer/ErrorContainer.js';
|
|
53
51
|
import '../../../components/UserProfile/parts/UserProfileField/components/VerifiedEmailIcon/VerifiedEmailIcon.js';
|
|
54
52
|
import '@dynamic-labs/types';
|
|
53
|
+
import { useCreateDynamicEmbeddedWalletMutation } from '../../../utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js';
|
|
55
54
|
import '../../../utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.js';
|
|
56
55
|
import '../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
|
|
57
56
|
import 'formik';
|
|
@@ -61,7 +60,6 @@ import { IconButton } from '../../../components/IconButton/IconButton.js';
|
|
|
61
60
|
import '../../../components/Alert/Alert.js';
|
|
62
61
|
import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
|
|
63
62
|
import { getProperErrorMessage } from '../../../modals/SignMessageConfirmationModal/getProperErrorMessage.js';
|
|
64
|
-
import { useMutation } from '../../../utils/hooks/useMutation/useMutation.js';
|
|
65
63
|
import { TextButton } from '../../../components/TextButton/TextButton.js';
|
|
66
64
|
import '../../../components/InlineWidget/InlineWidget.js';
|
|
67
65
|
import '../../../components/MenuList/Dropdown/Dropdown.js';
|
|
@@ -69,60 +67,32 @@ import '../../../components/Popper/Popper/Popper.js';
|
|
|
69
67
|
import '../../../components/Popper/PopperContext/PopperContext.js';
|
|
70
68
|
import 'react-focus-lock';
|
|
71
69
|
import { isPasskeyEnabled } from '../../../utils/functions/isPasskeyEnabled/isPasskeyEnabled.js';
|
|
72
|
-
import { createEmbeddedWalletWithPasskey } from '../utils/createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js';
|
|
73
|
-
import { findPasskeyEmailWalletConnector } from '../utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.js';
|
|
74
70
|
import { PasskeyDeviceIcon } from '../PasskeyDeviceIcon/PasskeyDeviceIcon.js';
|
|
75
71
|
|
|
76
|
-
const PasskeyIntroView = (
|
|
77
|
-
const {
|
|
72
|
+
const PasskeyIntroView = () => {
|
|
73
|
+
const { wallets, environmentId, handleLogOut, onboardingOnlyJwt } = useInternalDynamicContext();
|
|
78
74
|
const { setIsFooterExpanded } = useFooterAnimationContext();
|
|
79
75
|
const { t } = useTranslation();
|
|
80
76
|
const { data: passkeyEnabled } = usePromise(isPasskeyEnabled);
|
|
81
77
|
// if passkey is not yet setup, but user logged in with email in a passkey env
|
|
82
78
|
// it should be null to force user to setup passkey even after the a refresh
|
|
83
79
|
useEffect(() => LocalStorage.removeFromLS(LAST_USED_WALLET), []);
|
|
84
|
-
const {
|
|
80
|
+
const { createDynamicEmbeddedWalletMutation, isLoading, error } = useCreateDynamicEmbeddedWalletMutation();
|
|
81
|
+
const handleCreateEmbeddedWallet = () => {
|
|
85
82
|
var _a;
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
walletConnector: findPasskeyEmailWalletConnector(wallets),
|
|
91
|
-
});
|
|
92
|
-
const passkeyWallet = {
|
|
93
|
-
address: (yield walletConnector.fetchPublicAddress()) || '',
|
|
94
|
-
chain: walletConnector.connectedChain || '',
|
|
95
|
-
connected: true,
|
|
96
|
-
connector: walletConnector,
|
|
97
|
-
id: embeddedWalletVerifiedCredential.id,
|
|
98
|
-
};
|
|
99
|
-
internalEvents.current.emit('embeddedWalletCreated', passkeyWallet);
|
|
100
|
-
const smartWallet = findSmartWallet(embeddedWalletVerifiedCredential, decodedJwt.verifiedCredentials);
|
|
101
|
-
if (smartWallet) {
|
|
102
|
-
yield initializeSmartWallet({
|
|
103
|
-
account: smartWallet,
|
|
104
|
-
verifiedCredentials: decodedJwt.verifiedCredentials,
|
|
105
|
-
walletOptions: wallets,
|
|
106
|
-
});
|
|
107
|
-
setPrimaryWalletId(smartWallet.id);
|
|
83
|
+
const jwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
|
|
84
|
+
const decodedJwt = decodeJwt(jwt);
|
|
85
|
+
if (!jwt || !decodedJwt) {
|
|
86
|
+
throw new Error('User is not logged in');
|
|
108
87
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const turnkeyVerifiedCredentials = (_a = decodedJwt === null || decodedJwt === void 0 ? void 0 : decodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.find(({ walletName }) => walletName === 'turnkey');
|
|
116
|
-
setCallback('embeddedWalletCreated', {
|
|
117
|
-
email: (turnkeyVerifiedCredentials === null || turnkeyVerifiedCredentials === void 0 ? void 0 : turnkeyVerifiedCredentials.email) || '',
|
|
118
|
-
verifiedCredential: turnkeyVerifiedCredentials,
|
|
88
|
+
createDynamicEmbeddedWalletMutation({
|
|
89
|
+
authToken: jwt,
|
|
90
|
+
decodedJwt,
|
|
91
|
+
environmentId,
|
|
92
|
+
wallets,
|
|
93
|
+
withAuthenticator: true,
|
|
119
94
|
});
|
|
120
|
-
}
|
|
121
|
-
onFailure: (err) => {
|
|
122
|
-
logger.error('Failed to create embedded wallet', err);
|
|
123
|
-
internalEvents.current.emit('embeddedWalletFailed', err);
|
|
124
|
-
},
|
|
125
|
-
});
|
|
95
|
+
};
|
|
126
96
|
const errorText = useMemo(() => {
|
|
127
97
|
if (!error) {
|
|
128
98
|
return undefined;
|
|
@@ -133,7 +103,7 @@ const PasskeyIntroView = ({ createEmbeddedWalletMutation = createEmbeddedWalletW
|
|
|
133
103
|
return getProperErrorMessage(error);
|
|
134
104
|
}, [error]);
|
|
135
105
|
const infoIconButton = (jsx(Tooltip, { content: t('dyn_passkey_intro.helper.tooltip'), className: 'header__tooltip', children: jsx(IconButton, { type: 'button', "data-testid": 'info-button', onClick: () => setIsFooterExpanded((prev) => !prev), className: 'header__icon', children: jsx(SvgQuestionMark, {}) }) }, 'info-button'));
|
|
136
|
-
return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: infoIconButton, children: jsx(Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', children: t('dyn_passkey_intro.title') }) }), jsxs("div", { className: 'passkey-intro-view', children: [jsx("div", { className: 'passkey-intro-view__header', children: jsx(SvgPasskeyIntroIcon, {}) }), jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'passkey-intro-view__subtitle', children: t('dyn_passkey_intro.subtitle') }), passkeyEnabled === false && (jsx(ErrorContainer, { children: t('dyn_passkey_intro.disabled') })), errorText && jsx(ErrorContainer, { children: errorText }), jsxs("div", { className: 'passkey-intro-view__actions', children: [jsx(Button, { buttonVariant: 'brand-primary', buttonPadding: 'large', onClick:
|
|
106
|
+
return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: infoIconButton, children: jsx(Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', children: t('dyn_passkey_intro.title') }) }), jsxs("div", { className: 'passkey-intro-view', children: [jsx("div", { className: 'passkey-intro-view__header', children: jsx(SvgPasskeyIntroIcon, {}) }), jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'passkey-intro-view__subtitle', children: t('dyn_passkey_intro.subtitle') }), passkeyEnabled === false && (jsx(ErrorContainer, { children: t('dyn_passkey_intro.disabled') })), errorText && jsx(ErrorContainer, { children: errorText }), jsxs("div", { className: 'passkey-intro-view__actions', children: [jsx(Button, { buttonVariant: 'brand-primary', buttonPadding: 'large', onClick: handleCreateEmbeddedWallet, dataTestId: 'setup-passkey-button', loading: isLoading, disabled: isLoading || !passkeyEnabled, typographyProps: {
|
|
137
107
|
color: 'inherit',
|
|
138
108
|
}, children: jsxs("div", { className: 'passkey-intro-view__inline-button', children: [jsx(PasskeyDeviceIcon, {}), jsx(Typography, { children: t('dyn_passkey_intro.button') })] }) }), jsx(TextButton, { "data-testid": 'setup-passkey-logout-button', className: 'passkey-intro-view__log-out', onClick: handleLogOut, children: t('dyn_passkey_intro.button_logout') })] })] })] }));
|
|
139
109
|
};
|