@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.
Files changed (144) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +10 -10
  5. package/src/index.cjs +4 -2
  6. package/src/index.d.ts +1 -1
  7. package/src/index.js +2 -1
  8. package/src/lib/Main.cjs +18 -21
  9. package/src/lib/Main.js +18 -21
  10. package/src/lib/components/NeedHelpSection/NeedHelpSection.cjs +84 -5
  11. package/src/lib/components/NeedHelpSection/NeedHelpSection.js +85 -6
  12. package/src/lib/components/NetworkPicker/NetworkPicker.cjs +8 -6
  13. package/src/lib/components/NetworkPicker/NetworkPicker.d.ts +2 -1
  14. package/src/lib/components/NetworkPicker/NetworkPicker.js +8 -6
  15. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs +68 -0
  16. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.d.ts +6 -0
  17. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js +64 -0
  18. package/src/lib/components/PasskeyCreatedSuccessBanner/index.d.ts +1 -0
  19. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.cjs +24 -0
  20. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.d.ts +6 -0
  21. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.js +20 -0
  22. package/src/lib/components/SecureTurnkeyWalletCard/index.d.ts +1 -0
  23. package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +4 -1
  24. package/src/lib/components/SendBalanceForm/SendBalanceForm.js +4 -1
  25. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +5 -2
  26. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +5 -2
  27. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +6 -2
  28. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +6 -2
  29. package/src/lib/components/index.d.ts +2 -0
  30. package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -5
  31. package/src/lib/context/DynamicContext/DynamicContext.js +8 -5
  32. package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
  33. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/index.d.ts +1 -0
  34. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.cjs +23 -0
  35. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.d.ts +4 -0
  36. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.js +19 -0
  37. package/src/lib/context/DynamicContext/types/index.d.ts +2 -1
  38. package/src/lib/data/api.cjs +14 -10
  39. package/src/lib/data/api.d.ts +2 -2
  40. package/src/lib/data/api.js +14 -10
  41. package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +9 -11
  42. package/src/lib/layout/DynamicAuthLayout/Header/header.js +10 -12
  43. package/src/lib/locale/en/translation.cjs +77 -3
  44. package/src/lib/locale/en/translation.d.ts +76 -2
  45. package/src/lib/locale/en/translation.js +77 -3
  46. package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.cjs +6 -2
  47. package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.js +6 -2
  48. package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.cjs +1 -1
  49. package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.js +1 -1
  50. package/src/lib/styles/index.shadow.cjs +1 -1
  51. package/src/lib/styles/index.shadow.js +1 -1
  52. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
  53. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
  54. package/src/lib/utils/hooks/index.d.ts +2 -0
  55. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +1 -6
  56. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +1 -6
  57. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +3 -0
  58. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +3 -0
  59. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +7 -8
  60. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +7 -8
  61. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/index.d.ts +1 -0
  62. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +83 -0
  63. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +15 -0
  64. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +79 -0
  65. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +11 -3
  66. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +11 -3
  67. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +57 -33
  68. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +1 -1
  69. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +57 -33
  70. package/src/lib/utils/hooks/useEventListener/useEventListener.cjs +2 -1
  71. package/src/lib/utils/hooks/useEventListener/useEventListener.js +2 -1
  72. package/src/lib/utils/hooks/useIsTurnkeyWallet/index.d.ts +1 -0
  73. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +37 -0
  74. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.d.ts +6 -0
  75. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +33 -0
  76. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +9 -5
  77. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.d.ts +0 -1
  78. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +10 -6
  79. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +20 -21
  80. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +1 -2
  81. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +20 -21
  82. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +32 -9
  83. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.d.ts +0 -1
  84. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +33 -10
  85. package/src/lib/views/AccountExistsView/AccountExistsView.cjs +1 -1
  86. package/src/lib/views/AccountExistsView/AccountExistsView.js +1 -1
  87. package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +1 -1
  88. package/src/lib/views/CollectUserDataView/CollectUserDataView.js +1 -1
  89. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
  90. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
  91. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +1 -1
  92. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +1 -1
  93. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.cjs +2 -5
  94. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.js +2 -5
  95. package/src/lib/views/LoginView/useLoginView.cjs +101 -84
  96. package/src/lib/views/LoginView/useLoginView.js +102 -85
  97. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +6 -3
  98. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +6 -3
  99. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +20 -50
  100. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +1 -6
  101. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +20 -50
  102. package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +7 -2
  103. package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +7 -2
  104. package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +11 -7
  105. package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +11 -7
  106. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +8 -10
  107. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +8 -10
  108. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +56 -0
  109. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +13 -0
  110. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +52 -0
  111. package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +1 -0
  112. package/src/lib/views/Passkey/utils/index.d.ts +1 -0
  113. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +1 -1
  114. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +1 -1
  115. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.cjs +1 -1
  116. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.js +1 -1
  117. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +12 -2
  118. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +12 -2
  119. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs +3 -0
  120. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.js +4 -1
  121. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +6 -3
  122. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +6 -3
  123. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.cjs +2 -2
  124. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.js +2 -2
  125. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs +2 -1
  126. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js +2 -1
  127. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +8 -5
  128. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +8 -5
  129. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.cjs +2 -3
  130. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.js +2 -3
  131. package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.cjs +11 -2
  132. package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.js +11 -2
  133. package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.cjs +1 -2
  134. package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.js +1 -2
  135. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.cjs +1 -3
  136. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.js +1 -3
  137. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.cjs +1 -1
  138. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.js +1 -1
  139. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.cjs +2 -1
  140. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.js +2 -1
  141. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs +16 -6
  142. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js +16 -6
  143. package/src/lib/utils/functions/getEnabledProviders/index.cjs +0 -7
  144. 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 { SdkViewType, SdkViewSectionType } from '@dynamic-labs/sdk-api';
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 { t } = useTranslation();
35
- const hasEnabledProviders = Boolean(getEnabledProviders(projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers).length);
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, _d;
44
+ var _a, _b, _c;
38
45
  if (!projectSettings) {
39
46
  return false;
40
47
  }
41
- // toolkit functionality overrides whatever is defined
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 sessions
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 (!((_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) === null || _d === void 0 ? void 0 : _d.length) ||
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
- }, [projectSettings, loginWithEmail]);
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 and social view sections from project settings design.modal props - backwards compatibility
66
+ * build email from project settings design.modal props
55
67
  * @returns SdkViewSection[]
56
68
  */
57
69
  const getEmailViewSectionDefinition = useCallback(() => {
58
- var _a, _b;
59
- const loginViewSections = [
70
+ if (!hasEmailProviderEnabled)
71
+ return [];
72
+ return [
60
73
  {
61
74
  type: SdkViewSectionType.Email,
62
75
  },
63
76
  ];
64
- if (enabledSocialProviders === null || enabledSocialProviders === void 0 ? void 0 : enabledSocialProviders.length) {
65
- const socialSection = {
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
- loginViewSections.push(socialSection);
70
- if ((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.splitEmailAndSocial) {
71
- loginViewSections.splice(1, 0, {
72
- label: t('dyn_login.separators.default'),
73
- type: SdkViewSectionType.Separator,
74
- });
75
- // eslint-disable-next-line prefer-destructuring
76
- socialSection.defaultItem = enabledSocialProviders[0];
77
- }
78
- }
79
- if ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _b === void 0 ? void 0 : _b.socialAboveEmail) {
80
- loginViewSections.reverse();
81
- }
82
- return loginViewSections;
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
- enabledSocialProviders,
85
- (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design.modal) === null || _a === void 0 ? void 0 : _a.socialAboveEmail,
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
- let loginViewSections = [];
128
- authorizationViewDisplayOrder === null || authorizationViewDisplayOrder === void 0 ? void 0 : authorizationViewDisplayOrder.forEach((loginItem, index) => {
129
- var _a, _b;
130
- if (loginItem === 'email' &&
131
- (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) &&
132
- isEmailProviderEnabled(projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers)) {
133
- loginViewSections = loginViewSections.concat(getEmailViewSectionDefinition(),
134
- // add separator if wallets defined
135
- addSeparator(index));
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' && (selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length)) {
138
- // if showWalletsButton is true, it should show "Connec with Wallet" button
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
- addSeparator,
155
- authorizationViewDisplayOrder,
170
+ applyLoginModalSettings,
156
171
  getEmailViewSectionDefinition,
157
- (_d = (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _c === void 0 ? void 0 : _c.modal) === null || _d === void 0 ? void 0 : _d.showWalletsButton,
158
- projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers,
159
- selectableWallets === null || selectableWallets === void 0 ? void 0 : selectableWallets.length,
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, _d, _e;
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
- if ((_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.emailOnly) {
172
- return getEmailViewSectionDefinition();
186
+ let viewOrder = authorizationViewDisplayOrder;
187
+ if (isEmailOnly) {
188
+ viewOrder = ['email'];
173
189
  }
174
- return buildLoginSections();
190
+ return buildLoginSections(viewOrder);
175
191
  }, [
176
- projectSettings,
177
- getEmailViewSectionDefinition,
178
- filterLoginViewSections,
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 { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, bridgeChainsToConnect, } = useInternalDynamicContext.useInternalDynamicContext();
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({ network, walletConnector });
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 { network, onboardingImageUrl, selectedWalletConnector: walletConnector, connectedWallets, primaryWallet, isFullyConnected, setShowAuthFlow, bridgeChainsToConnect, } = useInternalDynamicContext();
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({ network, walletConnector });
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 logger = require('../../../shared/logger.cjs');
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 = ({ createEmbeddedWalletMutation = createEmbeddedWalletWithPasskey.createEmbeddedWalletWithPasskey, }) => {
81
- const { user, wallets, setPrimaryWalletId, setUser, authToken, environmentId, handleLogOut, internalEvents, setShowAuthFlow, setCallback, } = useInternalDynamicContext.useInternalDynamicContext();
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 { mutate: createEmbeddedWalletWithPasskeyMutation, isLoading, error, } = useMutation.useMutation(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
84
+ const { createDynamicEmbeddedWalletMutation, isLoading, error } = useCreateDynamicEmbeddedWalletMutation.useCreateDynamicEmbeddedWalletMutation();
85
+ const handleCreateEmbeddedWallet = () => {
89
86
  var _a;
90
- const { embeddedWalletVerifiedCredential, jwt, decodedJwt, walletConnector, } = yield createEmbeddedWalletMutation({
91
- authToken,
92
- environmentId,
93
- user,
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
- else {
114
- setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
115
- }
116
- index$1.storeAuthToken(jwt);
117
- setUser(createUserProfile.createUserProfile(decodedJwt));
118
- setShowAuthFlow(false);
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: () => createEmbeddedWalletWithPasskeyMutation(), dataTestId: 'setup-passkey-button', loading: isLoading, disabled: isLoading || !passkeyEnabled, typographyProps: {
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
- import { createEmbeddedWalletWithPasskey } from '../utils';
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 { logger } from '../../../shared/logger.js';
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 = ({ createEmbeddedWalletMutation = createEmbeddedWalletWithPasskey, }) => {
77
- const { user, wallets, setPrimaryWalletId, setUser, authToken, environmentId, handleLogOut, internalEvents, setShowAuthFlow, setCallback, } = useInternalDynamicContext();
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 { mutate: createEmbeddedWalletWithPasskeyMutation, isLoading, error, } = useMutation(() => __awaiter(void 0, void 0, void 0, function* () {
80
+ const { createDynamicEmbeddedWalletMutation, isLoading, error } = useCreateDynamicEmbeddedWalletMutation();
81
+ const handleCreateEmbeddedWallet = () => {
85
82
  var _a;
86
- const { embeddedWalletVerifiedCredential, jwt, decodedJwt, walletConnector, } = yield createEmbeddedWalletMutation({
87
- authToken,
88
- environmentId,
89
- user,
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
- else {
110
- setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
111
- }
112
- storeAuthToken(jwt);
113
- setUser(createUserProfile(decodedJwt));
114
- setShowAuthFlow(false);
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: () => createEmbeddedWalletWithPasskeyMutation(), dataTestId: 'setup-passkey-button', loading: isLoading, disabled: isLoading || !passkeyEnabled, typographyProps: {
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
  };