@dynamic-labs/sdk-react-core 2.1.0-alpha.15 → 2.1.0-alpha.16

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 (97) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/package.cjs +3 -2
  3. package/package.js +3 -2
  4. package/package.json +13 -12
  5. package/src/index.cjs +0 -2
  6. package/src/index.d.ts +1 -3
  7. package/src/index.js +0 -1
  8. package/src/lib/components/Portal/Portal.cjs +3 -1
  9. package/src/lib/components/Portal/Portal.js +3 -1
  10. package/src/lib/context/DynamicContext/DynamicContext.cjs +19 -14
  11. package/src/lib/context/DynamicContext/DynamicContext.js +19 -14
  12. package/src/lib/context/DynamicContext/hooks/useHandleLogout/types.d.ts +0 -1
  13. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.cjs +5 -1
  14. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.js +5 -1
  15. package/src/lib/context/DynamicContext/types/index.d.ts +4 -1
  16. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.cjs +2 -1
  17. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.d.ts +1 -1
  18. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.js +2 -1
  19. package/src/lib/context/DynamicContext/validators/validators.cjs +0 -29
  20. package/src/lib/context/DynamicContext/validators/validators.d.ts +0 -2
  21. package/src/lib/context/DynamicContext/validators/validators.js +1 -29
  22. package/src/lib/context/ViewContext/types/index.d.ts +1 -1
  23. package/src/lib/locale/en/translation.cjs +18 -0
  24. package/src/lib/locale/en/translation.d.ts +18 -0
  25. package/src/lib/locale/en/translation.js +18 -0
  26. package/src/lib/shared/utils/classes/storage/localStorage.cjs +1 -8
  27. package/src/lib/shared/utils/classes/storage/localStorage.js +2 -9
  28. package/src/lib/shared/utils/functions/index.d.ts +0 -1
  29. package/src/lib/store/actions/storeActions/index.d.ts +1 -0
  30. package/src/lib/store/actions/storeActions/storeActions.cjs +10 -0
  31. package/src/lib/store/actions/storeActions/storeActions.d.ts +1 -0
  32. package/src/lib/store/actions/storeActions/storeActions.js +6 -0
  33. package/src/lib/store/actions/userActions/index.d.ts +1 -0
  34. package/src/lib/store/actions/userActions/userActions.cjs +10 -0
  35. package/src/lib/store/actions/userActions/userActions.d.ts +7 -0
  36. package/src/lib/store/actions/userActions/userActions.js +6 -0
  37. package/src/lib/store/hooks/useUser/index.d.ts +1 -0
  38. package/src/lib/store/hooks/useUser/useUser.cjs +12 -0
  39. package/src/lib/store/hooks/useUser/useUser.d.ts +1 -0
  40. package/src/lib/store/hooks/useUser/useUser.js +8 -0
  41. package/src/lib/store/index.d.ts +4 -0
  42. package/src/lib/store/store.cjs +24 -0
  43. package/src/lib/store/store.d.ts +13 -0
  44. package/src/lib/store/store.js +19 -0
  45. package/src/lib/store/types.d.ts +4 -0
  46. package/src/lib/store/utils/createStore/createStore.cjs +21 -0
  47. package/src/lib/store/utils/createStore/createStore.d.ts +16 -0
  48. package/src/lib/store/utils/createStore/createStore.js +17 -0
  49. package/src/lib/store/utils/createStore/index.d.ts +1 -0
  50. package/src/lib/store/utils/syncLegacyStorage/index.d.ts +1 -0
  51. package/src/lib/store/utils/syncLegacyStorage/syncLegacyStorage.cjs +30 -0
  52. package/src/lib/store/utils/syncLegacyStorage/syncLegacyStorage.d.ts +2 -0
  53. package/src/lib/store/utils/syncLegacyStorage/syncLegacyStorage.js +26 -0
  54. package/src/lib/styles/index.shadow.cjs +1 -1
  55. package/src/lib/styles/index.shadow.js +1 -1
  56. package/src/lib/utils/constants/index.d.ts +1 -1
  57. package/src/lib/utils/constants/localStorage.cjs +2 -2
  58. package/src/lib/utils/constants/localStorage.d.ts +1 -1
  59. package/src/lib/utils/constants/localStorage.js +2 -2
  60. package/src/lib/utils/functions/downloadFile/downloadFile.cjs +15 -0
  61. package/src/lib/utils/functions/downloadFile/downloadFile.d.ts +1 -0
  62. package/src/lib/utils/functions/downloadFile/downloadFile.js +11 -0
  63. package/src/lib/utils/functions/downloadFile/index.d.ts +1 -0
  64. package/src/lib/utils/functions/index.d.ts +1 -0
  65. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +4 -2
  66. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +4 -2
  67. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +4 -0
  68. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +4 -0
  69. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.cjs +6 -3
  70. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.d.ts +1 -4
  71. package/src/lib/utils/hooks/useHandleUnlinkWallet/useHandleUnlinkWallet.js +5 -2
  72. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.cjs +6 -2
  73. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.d.ts +1 -4
  74. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.js +5 -1
  75. package/src/lib/views/CreatePasswordView/SavePasswordStep/SavePasswordStep.cjs +5 -10
  76. package/src/lib/views/CreatePasswordView/SavePasswordStep/SavePasswordStep.js +5 -10
  77. package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.cjs +111 -0
  78. package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.d.ts +2 -0
  79. package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.js +107 -0
  80. package/src/lib/views/MfaDisplayBackupCodesView/index.d.ts +1 -0
  81. package/src/lib/views/MfaVerificationView/MfaVerificationView.cjs +3 -3
  82. package/src/lib/views/MfaVerificationView/MfaVerificationView.js +3 -3
  83. package/src/lib/views/WalletList/WalletListGridTabs/WalletListGridTabs.cjs +1 -1
  84. package/src/lib/views/WalletList/WalletListGridTabs/WalletListGridTabs.js +1 -1
  85. package/src/lib/views/WalletList/hooks/useTabState.cjs +4 -1
  86. package/src/lib/views/WalletList/hooks/useTabState.js +4 -1
  87. package/src/lib/views/WalletList/utils/getInitialTabIndex/getInitialTabIndex.cjs +22 -0
  88. package/src/lib/views/WalletList/utils/getInitialTabIndex/getInitialTabIndex.d.ts +2 -0
  89. package/src/lib/views/WalletList/utils/getInitialTabIndex/getInitialTabIndex.js +18 -0
  90. package/src/lib/views/WalletList/utils/getInitialTabIndex/index.d.ts +1 -0
  91. package/src/lib/views/viewToComponentMap.cjs +2 -0
  92. package/src/lib/views/viewToComponentMap.d.ts +1 -0
  93. package/src/lib/views/viewToComponentMap.js +2 -0
  94. package/src/lib/shared/utils/functions/validateType/index.d.ts +0 -1
  95. package/src/lib/shared/utils/functions/validateType/validateType.cjs +0 -30
  96. package/src/lib/shared/utils/functions/validateType/validateType.d.ts +0 -1
  97. package/src/lib/shared/utils/functions/validateType/validateType.js +0 -26
@@ -1,4 +1,4 @@
1
- export { AUTH_TOKEN, AUTH_MIN_TOKEN, AUTH_ONBOARDING_TOKEN, AUTH_USER, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NONCE_STORAGE_KEY, PRIMARY_WALLET_ID, THEME, WALLET_PICKER_SEARCH_KEY, AUTH_MODE, PHANTOM_SIGNATURE_STATE, } from './localStorage';
1
+ export { AUTH_TOKEN, AUTH_MIN_TOKEN, AUTH_ONBOARDING_TOKEN, STORE_STORAGE_KEY, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NONCE_STORAGE_KEY, PRIMARY_WALLET_ID, THEME, WALLET_PICKER_SEARCH_KEY, AUTH_MODE, PHANTOM_SIGNATURE_STATE, } from './localStorage';
2
2
  export { BASE_LIGHT_1, BASE_LIGHT_2, BASE_LIGHT_3, BASE_LIGHT_4, BASE_LIGHT_5, BASE_DARK_5, TEXT_LIGHT_PRIMARY, TEXT_LIGHT_SECONDARY, TEXT_LIGHT_TERTIARY, TEXT_LIGHT_LINK, CONNECTION_LIGHT_GREEN, CONNECTION_LIGHT_ORANGE, ERROR_LIGHT_1, ERROR_LIGHT_2, OVERLAY_LIGHT, HOVER_LIGHT, LOADING_ANIMATION_GRADIENT_LIGHT, BASE_DARK_1, BASE_DARK_2, BASE_DARK_3, BASE_DARK_4, DYNAMIC_CONNECT_BUTTON_BACKGROUND, DYNAMIC_CONNECT_BUTTON_BORDER, DYNAMIC_CONNECT_BUTTON_COLOR, TEXT_DARK_PRIMARY, TEXT_DARK_SECONDARY, TEXT_DARK_TERTIARY, TEXT_DARK_LINK, BRAND_HOVER, BRAND_PRIMARY, BRAND_SECONDARY, CONNECTION_DARK_GREEN, CONNECTION_DARK_ORANGE, ERROR_DARK_1, ERROR_DARK_2, OVERLAY_DARK, HOVER_DARK, LOADING_ANIMATION_GRADIENT_DARK, SHADOW_DOWN_1, SHADOW_DOWN_2, SHADOW_DOWN_3, SHADOW_UP_1, BRAND_HOVER_COLOR, BRAND_PRIMARY_COLOR, BRAND_SECONDARY_COLOR, } from './colors';
3
3
  export { BORDER_SQUARE, BORDER_ROUNDED, BORDER_RADIUS } from './theme';
4
4
  export { TITLE, BODY_NORMAL, BODY_SMALL, BODY_MINI, BUTTON_PRIMARY, BUTTON_SECONDARY, NUMBERS_BIG, NUMBERS_MEDIUM, } from './typography';
@@ -6,7 +6,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  const AUTH_TOKEN = 'dynamic_authentication_token';
7
7
  const AUTH_MIN_TOKEN = 'dynamic_min_authentication_token';
8
8
  const AUTH_ONBOARDING_TOKEN = 'dynamic_onboarding_authentication_token';
9
- const AUTH_USER = 'dynamic_authenticated_user';
10
9
  const LAST_USED_WALLET = 'dynamic_last_used_wallet';
11
10
  const NETWORKS_STORAGE_KEY = 'dynamic_networks';
12
11
  const NONCE_STORAGE_KEY = 'dynamic_nonce';
@@ -27,12 +26,12 @@ const PHONE_INPUT_DEFAULT_COUNTRY = 'dynamic_phone_input_default_country';
27
26
  * Used to identify the purpose of a signature after phantom redirects back to the app in mobile
28
27
  */
29
28
  const PHANTOM_SIGNATURE_STATE = 'phantom_verification_type';
29
+ const STORE_STORAGE_KEY = 'dynamic_store';
30
30
 
31
31
  exports.AUTH_MIN_TOKEN = AUTH_MIN_TOKEN;
32
32
  exports.AUTH_MODE = AUTH_MODE;
33
33
  exports.AUTH_ONBOARDING_TOKEN = AUTH_ONBOARDING_TOKEN;
34
34
  exports.AUTH_TOKEN = AUTH_TOKEN;
35
- exports.AUTH_USER = AUTH_USER;
36
35
  exports.BRIDGE_ONBOARDING_COMPLETED = BRIDGE_ONBOARDING_COMPLETED;
37
36
  exports.CONNECTED_WALLETS_INFO = CONNECTED_WALLETS_INFO;
38
37
  exports.CONNECTED_WALLET_NAME_SERVICE = CONNECTED_WALLET_NAME_SERVICE;
@@ -47,5 +46,6 @@ exports.PHANTOM_SIGNATURE_STATE = PHANTOM_SIGNATURE_STATE;
47
46
  exports.PHONE_INPUT_DEFAULT_COUNTRY = PHONE_INPUT_DEFAULT_COUNTRY;
48
47
  exports.PRIMARY_WALLET_ID = PRIMARY_WALLET_ID;
49
48
  exports.PROJECT_SETTINGS_STORAGE_KEY = PROJECT_SETTINGS_STORAGE_KEY;
49
+ exports.STORE_STORAGE_KEY = STORE_STORAGE_KEY;
50
50
  exports.WAGMI_LAST_SESSION_SETTINGS = WAGMI_LAST_SESSION_SETTINGS;
51
51
  exports.WALLET_PICKER_SEARCH_KEY = WALLET_PICKER_SEARCH_KEY;
@@ -1,7 +1,6 @@
1
1
  export declare const AUTH_TOKEN = "dynamic_authentication_token";
2
2
  export declare const AUTH_MIN_TOKEN = "dynamic_min_authentication_token";
3
3
  export declare const AUTH_ONBOARDING_TOKEN = "dynamic_onboarding_authentication_token";
4
- export declare const AUTH_USER = "dynamic_authenticated_user";
5
4
  export declare const LAST_USED_WALLET = "dynamic_last_used_wallet";
6
5
  export declare const NETWORKS_STORAGE_KEY = "dynamic_networks";
7
6
  export declare const NONCE_STORAGE_KEY = "dynamic_nonce";
@@ -32,3 +31,4 @@ export type PhantomSignatureState = {
32
31
  * Used to identify the purpose of a signature after phantom redirects back to the app in mobile
33
32
  */
34
33
  export declare const PHANTOM_SIGNATURE_STATE = "phantom_verification_type";
34
+ export declare const STORE_STORAGE_KEY = "dynamic_store";
@@ -2,7 +2,6 @@
2
2
  const AUTH_TOKEN = 'dynamic_authentication_token';
3
3
  const AUTH_MIN_TOKEN = 'dynamic_min_authentication_token';
4
4
  const AUTH_ONBOARDING_TOKEN = 'dynamic_onboarding_authentication_token';
5
- const AUTH_USER = 'dynamic_authenticated_user';
6
5
  const LAST_USED_WALLET = 'dynamic_last_used_wallet';
7
6
  const NETWORKS_STORAGE_KEY = 'dynamic_networks';
8
7
  const NONCE_STORAGE_KEY = 'dynamic_nonce';
@@ -23,5 +22,6 @@ const PHONE_INPUT_DEFAULT_COUNTRY = 'dynamic_phone_input_default_country';
23
22
  * Used to identify the purpose of a signature after phantom redirects back to the app in mobile
24
23
  */
25
24
  const PHANTOM_SIGNATURE_STATE = 'phantom_verification_type';
25
+ const STORE_STORAGE_KEY = 'dynamic_store';
26
26
 
27
- export { AUTH_MIN_TOKEN, AUTH_MODE, AUTH_ONBOARDING_TOKEN, AUTH_TOKEN, AUTH_USER, BRIDGE_ONBOARDING_COMPLETED, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, DYNAMIC_CONTEXT_LAST_SESSION_SETTINGS, EMBEDDED_WALLET_SECURE_BANNER, EMBEDDED_WALLET_SESSION_SETTINGS, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PHANTOM_SIGNATURE_STATE, PHONE_INPUT_DEFAULT_COUNTRY, PRIMARY_WALLET_ID, PROJECT_SETTINGS_STORAGE_KEY, WAGMI_LAST_SESSION_SETTINGS, WALLET_PICKER_SEARCH_KEY };
27
+ export { AUTH_MIN_TOKEN, AUTH_MODE, AUTH_ONBOARDING_TOKEN, AUTH_TOKEN, BRIDGE_ONBOARDING_COMPLETED, CONNECTED_WALLETS_INFO, CONNECTED_WALLET_NAME_SERVICE, DYNAMIC_CONTEXT_LAST_SESSION_SETTINGS, EMBEDDED_WALLET_SECURE_BANNER, EMBEDDED_WALLET_SESSION_SETTINGS, LAST_USED_WALLET, NETWORKS_STORAGE_KEY, NEWTOWEB3_WALLET_EXTENSION_FLAG_KEY, NONCE_STORAGE_KEY, PHANTOM_SIGNATURE_STATE, PHONE_INPUT_DEFAULT_COUNTRY, PRIMARY_WALLET_ID, PROJECT_SETTINGS_STORAGE_KEY, STORE_STORAGE_KEY, WAGMI_LAST_SESSION_SETTINGS, WALLET_PICKER_SEARCH_KEY };
@@ -0,0 +1,15 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ const downloadFile = (fileName, content) => {
7
+ const element = document.createElement('a');
8
+ const file = new Blob([content], { type: 'text/plain' });
9
+ element.href = URL.createObjectURL(file);
10
+ element.download = fileName;
11
+ document.body.appendChild(element);
12
+ element.click();
13
+ };
14
+
15
+ exports.downloadFile = downloadFile;
@@ -0,0 +1 @@
1
+ export declare const downloadFile: (fileName: string, content: string) => void;
@@ -0,0 +1,11 @@
1
+ 'use client'
2
+ const downloadFile = (fileName, content) => {
3
+ const element = document.createElement('a');
4
+ const file = new Blob([content], { type: 'text/plain' });
5
+ element.href = URL.createObjectURL(file);
6
+ element.download = fileName;
7
+ document.body.appendChild(element);
8
+ element.click();
9
+ };
10
+
11
+ export { downloadFile };
@@ -0,0 +1 @@
1
+ export { downloadFile } from './downloadFile';
@@ -74,3 +74,4 @@ export * from './hasEmbeddedWallet';
74
74
  export * from './getEmbeddedWalletAuthHandler';
75
75
  export * from './getEmbeddedWalletSessionExpiration';
76
76
  export * from './serializeWalletConnectors';
77
+ export * from './downloadFile';
@@ -168,7 +168,8 @@ const useAuthLayoutChecks = () => {
168
168
  view.type === 'farcaster-connect-view' ||
169
169
  view.type === 'merge-user-accounts' ||
170
170
  view.type === 'merge-user-accounts-conflicts' ||
171
- view.type === 'mfa-verification');
171
+ view.type === 'mfa-verification' ||
172
+ view.type === 'mfa-display-backup-codes');
172
173
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
173
174
  view.type !== 'login-with-email-verification' &&
174
175
  view.type !== 'login-with-sms-verification' &&
@@ -178,7 +179,8 @@ const useAuthLayoutChecks = () => {
178
179
  view.type !== 'passkey-recovery-bundle' &&
179
180
  view.type !== 'rename-passkey' &&
180
181
  view.type !== 'qr-code' &&
181
- view.type !== 'mfa-verification';
182
+ view.type !== 'mfa-verification' &&
183
+ view.type !== 'mfa-display-backup-codes';
182
184
  const showBackButton = view.type === 'pending-signature' ||
183
185
  view.type === 'no-qr-not-installed' ||
184
186
  view.type === 'wallet-connect-mobile-wallets-list' ||
@@ -164,7 +164,8 @@ const useAuthLayoutChecks = () => {
164
164
  view.type === 'farcaster-connect-view' ||
165
165
  view.type === 'merge-user-accounts' ||
166
166
  view.type === 'merge-user-accounts-conflicts' ||
167
- view.type === 'mfa-verification');
167
+ view.type === 'mfa-verification' ||
168
+ view.type === 'mfa-display-backup-codes');
168
169
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
169
170
  view.type !== 'login-with-email-verification' &&
170
171
  view.type !== 'login-with-sms-verification' &&
@@ -174,7 +175,8 @@ const useAuthLayoutChecks = () => {
174
175
  view.type !== 'passkey-recovery-bundle' &&
175
176
  view.type !== 'rename-passkey' &&
176
177
  view.type !== 'qr-code' &&
177
- view.type !== 'mfa-verification';
178
+ view.type !== 'mfa-verification' &&
179
+ view.type !== 'mfa-display-backup-codes';
178
180
  const showBackButton = view.type === 'pending-signature' ||
179
181
  view.type === 'no-qr-not-installed' ||
180
182
  view.type === 'wallet-connect-mobile-wallets-list' ||
@@ -113,6 +113,10 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
113
113
  copykey: 'dyn_mfa.choose_device_view.title',
114
114
  heading: t('dyn_mfa.choose_device_view.title'),
115
115
  },
116
+ 'mfa-display-backup-codes': {
117
+ copykey: 'dyn_mfa.display_backup_codes_view.title',
118
+ heading: t('dyn_mfa.display_backup_codes_view.title'),
119
+ },
116
120
  'mfa-secure-device': {
117
121
  copykey: 'dyn_mfa.secure_device_view.title',
118
122
  heading: t('dyn_mfa.secure_device_view.title'),
@@ -109,6 +109,10 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
109
109
  copykey: 'dyn_mfa.choose_device_view.title',
110
110
  heading: t('dyn_mfa.choose_device_view.title'),
111
111
  },
112
+ 'mfa-display-backup-codes': {
113
+ copykey: 'dyn_mfa.display_backup_codes_view.title',
114
+ heading: t('dyn_mfa.display_backup_codes_view.title'),
115
+ },
112
116
  'mfa-secure-device': {
113
117
  copykey: 'dyn_mfa.secure_device_view.title',
114
118
  heading: t('dyn_mfa.secure_device_view.title'),
@@ -20,8 +20,12 @@ var localStorage = require('../../../shared/utils/classes/storage/localStorage.c
20
20
  require('@dynamic-labs/utils');
21
21
  require('../../../shared/consts/index.cjs');
22
22
  var handleUnlinkHelper = require('../../functions/handleUnlinkHelper/handleUnlinkHelper.cjs');
23
+ var userActions = require('../../../store/actions/userActions/userActions.cjs');
24
+ require('zustand');
25
+ require('zustand/middleware');
26
+ require('zustand/react/shallow');
23
27
 
24
- const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, setUser, }) => {
28
+ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, }) => {
25
29
  const { removedWalletsIds } = UserWalletsContext.useInternalUserWallets();
26
30
  const callback = React.useCallback((walletId) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
27
31
  var _a;
@@ -43,7 +47,7 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
43
47
  walletId,
44
48
  });
45
49
  if (newUser) {
46
- setUser(newUser);
50
+ userActions.setUser(newUser);
47
51
  }
48
52
  const wallet = secondaryWallets.find((w) => w.id === walletId);
49
53
  const numberOfLinkedWallets = verifiedCredentials.filter((account) => account.walletName === ((wallet === null || wallet === void 0 ? void 0 : wallet.connector.key) || '')).length;
@@ -56,7 +60,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
56
60
  primaryWalletId,
57
61
  environmentId,
58
62
  secondaryWallets,
59
- setUser,
60
63
  verifiedCredentials,
61
64
  removedWalletsIds,
62
65
  ]);
@@ -1,13 +1,10 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
1
  import { JwtVerifiedCredential } from '@dynamic-labs/sdk-api-core';
3
- import { UserProfile } from '@dynamic-labs/types';
4
2
  import { Wallet } from '../../../shared';
5
3
  type UseHandleUnlinkProps = {
6
4
  environmentId: string;
7
5
  primaryWalletId: string | undefined;
8
6
  secondaryWallets: Wallet[];
9
- setUser: Dispatch<SetStateAction<UserProfile | undefined>>;
10
7
  verifiedCredentials: JwtVerifiedCredential[];
11
8
  };
12
- export declare const useHandleUnlinkWallet: ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, setUser, }: UseHandleUnlinkProps) => (walletId: string) => Promise<void>;
9
+ export declare const useHandleUnlinkWallet: ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, }: UseHandleUnlinkProps) => (walletId: string) => Promise<void>;
13
10
  export {};
@@ -16,8 +16,12 @@ import { LocalStorage } from '../../../shared/utils/classes/storage/localStorage
16
16
  import '@dynamic-labs/utils';
17
17
  import '../../../shared/consts/index.js';
18
18
  import { handleUnlinkHelper } from '../../functions/handleUnlinkHelper/handleUnlinkHelper.js';
19
+ import { setUser } from '../../../store/actions/userActions/userActions.js';
20
+ import 'zustand';
21
+ import 'zustand/middleware';
22
+ import 'zustand/react/shallow';
19
23
 
20
- const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, setUser, }) => {
24
+ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWalletId, secondaryWallets, }) => {
21
25
  const { removedWalletsIds } = useInternalUserWallets();
22
26
  const callback = useCallback((walletId) => __awaiter(void 0, void 0, void 0, function* () {
23
27
  var _a;
@@ -52,7 +56,6 @@ const useHandleUnlinkWallet = ({ verifiedCredentials, environmentId, primaryWall
52
56
  primaryWalletId,
53
57
  environmentId,
54
58
  secondaryWallets,
55
- setUser,
56
59
  verifiedCredentials,
57
60
  removedWalletsIds,
58
61
  ]);
@@ -28,8 +28,12 @@ require('../../../config/ApiEndpoint.cjs');
28
28
  require('../../../locale/locale.cjs');
29
29
  var wallets = require('../../../data/api/wallets/wallets.cjs');
30
30
  var updateJWTAndCreateUserProfile = require('../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.cjs');
31
+ var userActions = require('../../../store/actions/userActions/userActions.cjs');
32
+ require('zustand');
33
+ require('zustand/middleware');
34
+ require('zustand/react/shallow');
31
35
 
32
- const usePrimaryWalletId = ({ minAuthToken, environmentId, setUser, }) => {
36
+ const usePrimaryWalletId = ({ minAuthToken, environmentId }) => {
33
37
  const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletId] = useLocalStorage.useLocalStorage(localStorage.PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator.primaryWalletIdValidator);
34
38
  const setPrimaryWalletId = React.useCallback((walletId) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
35
39
  setPrimaryWalletIdState(walletId);
@@ -37,7 +41,7 @@ const usePrimaryWalletId = ({ minAuthToken, environmentId, setUser, }) => {
37
41
  const response = yield wallets.storeSelectedWallet({ environmentId, walletId });
38
42
  // only update userProfile, authToken, and minAuthToken when response is valid from storeSelectedWallet
39
43
  if (response) {
40
- setUser(updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(response.jwt, response.minifiedJwt));
44
+ userActions.setUser(updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(response.jwt, response.minifiedJwt));
41
45
  }
42
46
  }
43
47
  }), [setPrimaryWalletIdState]);
@@ -1,11 +1,8 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
- import { UserProfile } from '@dynamic-labs/types';
3
1
  type Props = {
4
- setUser: Dispatch<SetStateAction<UserProfile | undefined>>;
5
2
  environmentId: string;
6
3
  minAuthToken: string | undefined;
7
4
  };
8
- export declare const usePrimaryWalletId: ({ minAuthToken, environmentId, setUser, }: Props) => {
5
+ export declare const usePrimaryWalletId: ({ minAuthToken, environmentId }: Props) => {
9
6
  clearPrimaryWalletId: () => void;
10
7
  primaryWalletId: string | undefined;
11
8
  setPrimaryWalletId: (walletId: string) => Promise<void>;
@@ -24,8 +24,12 @@ import '../../../config/ApiEndpoint.js';
24
24
  import '../../../locale/locale.js';
25
25
  import { storeSelectedWallet } from '../../../data/api/wallets/wallets.js';
26
26
  import { updateJWTAndCreateUserProfile } from '../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.js';
27
+ import { setUser } from '../../../store/actions/userActions/userActions.js';
28
+ import 'zustand';
29
+ import 'zustand/middleware';
30
+ import 'zustand/react/shallow';
27
31
 
28
- const usePrimaryWalletId = ({ minAuthToken, environmentId, setUser, }) => {
32
+ const usePrimaryWalletId = ({ minAuthToken, environmentId }) => {
29
33
  const [primaryWalletId, setPrimaryWalletIdState, clearPrimaryWalletId] = useLocalStorage(PRIMARY_WALLET_ID, undefined, primaryWalletIdValidator);
30
34
  const setPrimaryWalletId = useCallback((walletId) => __awaiter(void 0, void 0, void 0, function* () {
31
35
  setPrimaryWalletIdState(walletId);
@@ -33,6 +33,7 @@ require('viem');
33
33
  require('viem/chains');
34
34
  require('../../../config/ApiEndpoint.cjs');
35
35
  require('../../../locale/locale.cjs');
36
+ var downloadFile = require('../../../utils/functions/downloadFile/downloadFile.cjs');
36
37
  require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
37
38
  require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
38
39
  require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
@@ -99,22 +100,16 @@ const SavePasswordStep = ({ password, error, isLoading, onSave, onBack, onClose,
99
100
  e.preventDefault();
100
101
  onSave();
101
102
  });
102
- const handleDownloadFile = (e) => {
103
- e.preventDefault();
104
- const element = document.createElement('a');
105
- const file = new Blob([password], { type: 'text/plain' });
106
- element.href = URL.createObjectURL(file);
107
- element.download = 'dynamic-wallet-recovery.txt';
108
- document.body.appendChild(element);
109
- element.click();
110
- };
111
103
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { leading: backButton, trailing: closeButton, children: jsxRuntime.jsx(Typography.Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', copykey: 'dyn_save_password.title', children: t('dyn_save_password.title') }) }), jsxRuntime.jsx("div", { className: 'save-password-view', children: jsxRuntime.jsxs("form", { className: 'save-password-view__body', "data-testid": 'save-password-form', onSubmit: handleSavePassword, children: [jsxRuntime.jsx("div", { className: 'save-password-view__body__icon', children: jsxRuntime.jsx(savePasswordHero.ReactComponent, {}) }), jsxRuntime.jsx("div", { className: 'save-password-view__body__icon', children: jsxRuntime.jsx(Badge.Badge, { text: t('dyn_save_password.badge_text'), className: 'save-password-view__body__badge', copykey: 'dyn_save_password.badge_text' }) }), jsxRuntime.jsxs("div", { className: 'save-password-view__body__description', children: [jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', copykey: 'dyn_save_password.description', children: t('dyn_save_password.description') }), jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'bold', color: 'secondary', copykey: 'dyn_save_password.description', children: t('dyn_save_password.warning') })] }), error && jsxRuntime.jsx(ErrorContainer.ErrorContainer, { children: error }), jsxRuntime.jsx("div", { children: jsxRuntime.jsx(Input.Input, { id: 'password', placeholder: t('dyn_save_password.password_input.placeholder'), type: inputType, suffix: inputSuffix, disabled: true, label: t('dyn_save_password.password_input.label'), value: password, autoFocus: true, copykey: 'dyn_save_password.password_input' }) }), jsxRuntime.jsxs("div", { className: 'save-password-view__actions', children: [jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'save-password-copy', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
112
104
  e.preventDefault();
113
105
  helpers.copyToClipboard(password);
114
106
  setIsCopied(true);
115
107
  }, startSlot: jsxRuntime.jsx(copy.ReactComponent, {}), expanded: true, copykey: 'dyn_save_password.copy_button', children: isCopied
116
108
  ? t('dyn_save_password.copy_button.copied')
117
- : t('dyn_save_password.copy_button.copy') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'save-password-download', buttonPadding: 'small', buttonVariant: 'primary', onClick: handleDownloadFile, startSlot: jsxRuntime.jsx(download.ReactComponent, {}), expanded: true, copykey: 'dyn_save_password.download_button', children: t('dyn_save_password.download_button') })] }), jsxRuntime.jsx("div", { className: 'save-password-view__body__confirm-card', children: jsxRuntime.jsxs("button", { className: 'save-password-view__body__card__acknowledgement', onClick: (e) => {
109
+ : t('dyn_save_password.copy_button.copy') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'save-password-download', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
110
+ e.preventDefault();
111
+ downloadFile.downloadFile('wallet-recovery.txt', password);
112
+ }, startSlot: jsxRuntime.jsx(download.ReactComponent, {}), expanded: true, copykey: 'dyn_save_password.download_button', children: t('dyn_save_password.download_button') })] }), jsxRuntime.jsx("div", { className: 'save-password-view__body__confirm-card', children: jsxRuntime.jsxs("button", { className: 'save-password-view__body__card__acknowledgement', onClick: (e) => {
118
113
  e.stopPropagation();
119
114
  setAcknowledgement(!acknowledgement);
120
115
  }, type: 'button', children: [jsxRuntime.jsx("div", { children: jsxRuntime.jsx(Checkbox.Checkbox, { checked: acknowledgement, onChange: (e) => {
@@ -29,6 +29,7 @@ import 'viem';
29
29
  import 'viem/chains';
30
30
  import '../../../config/ApiEndpoint.js';
31
31
  import '../../../locale/locale.js';
32
+ import { downloadFile } from '../../../utils/functions/downloadFile/downloadFile.js';
32
33
  import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
33
34
  import '../../../context/AccountExistsContext/AccountExistsContext.js';
34
35
  import '../../../context/UserWalletsContext/UserWalletsContext.js';
@@ -95,22 +96,16 @@ const SavePasswordStep = ({ password, error, isLoading, onSave, onBack, onClose,
95
96
  e.preventDefault();
96
97
  onSave();
97
98
  });
98
- const handleDownloadFile = (e) => {
99
- e.preventDefault();
100
- const element = document.createElement('a');
101
- const file = new Blob([password], { type: 'text/plain' });
102
- element.href = URL.createObjectURL(file);
103
- element.download = 'dynamic-wallet-recovery.txt';
104
- document.body.appendChild(element);
105
- element.click();
106
- };
107
99
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { leading: backButton, trailing: closeButton, children: jsx(Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', copykey: 'dyn_save_password.title', children: t('dyn_save_password.title') }) }), jsx("div", { className: 'save-password-view', children: jsxs("form", { className: 'save-password-view__body', "data-testid": 'save-password-form', onSubmit: handleSavePassword, children: [jsx("div", { className: 'save-password-view__body__icon', children: jsx(SvgSavePasswordHero, {}) }), jsx("div", { className: 'save-password-view__body__icon', children: jsx(Badge, { text: t('dyn_save_password.badge_text'), className: 'save-password-view__body__badge', copykey: 'dyn_save_password.badge_text' }) }), jsxs("div", { className: 'save-password-view__body__description', children: [jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', copykey: 'dyn_save_password.description', children: t('dyn_save_password.description') }), jsx(Typography, { variant: 'body_normal', weight: 'bold', color: 'secondary', copykey: 'dyn_save_password.description', children: t('dyn_save_password.warning') })] }), error && jsx(ErrorContainer, { children: error }), jsx("div", { children: jsx(Input, { id: 'password', placeholder: t('dyn_save_password.password_input.placeholder'), type: inputType, suffix: inputSuffix, disabled: true, label: t('dyn_save_password.password_input.label'), value: password, autoFocus: true, copykey: 'dyn_save_password.password_input' }) }), jsxs("div", { className: 'save-password-view__actions', children: [jsx(TypographyButton, { dataTestId: 'save-password-copy', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
108
100
  e.preventDefault();
109
101
  copyToClipboard(password);
110
102
  setIsCopied(true);
111
103
  }, startSlot: jsx(SvgCopy, {}), expanded: true, copykey: 'dyn_save_password.copy_button', children: isCopied
112
104
  ? t('dyn_save_password.copy_button.copied')
113
- : t('dyn_save_password.copy_button.copy') }), jsx(TypographyButton, { dataTestId: 'save-password-download', buttonPadding: 'small', buttonVariant: 'primary', onClick: handleDownloadFile, startSlot: jsx(SvgDownload, {}), expanded: true, copykey: 'dyn_save_password.download_button', children: t('dyn_save_password.download_button') })] }), jsx("div", { className: 'save-password-view__body__confirm-card', children: jsxs("button", { className: 'save-password-view__body__card__acknowledgement', onClick: (e) => {
105
+ : t('dyn_save_password.copy_button.copy') }), jsx(TypographyButton, { dataTestId: 'save-password-download', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
106
+ e.preventDefault();
107
+ downloadFile('wallet-recovery.txt', password);
108
+ }, startSlot: jsx(SvgDownload, {}), expanded: true, copykey: 'dyn_save_password.download_button', children: t('dyn_save_password.download_button') })] }), jsx("div", { className: 'save-password-view__body__confirm-card', children: jsxs("button", { className: 'save-password-view__body__card__acknowledgement', onClick: (e) => {
114
109
  e.stopPropagation();
115
110
  setAcknowledgement(!acknowledgement);
116
111
  }, type: 'button', children: [jsx("div", { children: jsx(Checkbox, { checked: acknowledgement, onChange: (e) => {
@@ -0,0 +1,111 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+ var React = require('react');
8
+ var reactI18next = require('react-i18next');
9
+ require('../../events/dynamicEvents.cjs');
10
+ require('../../../../_virtual/_tslib.cjs');
11
+ require('@dynamic-labs/utils');
12
+ require('../../context/DynamicContext/DynamicContext.cjs');
13
+ require('@dynamic-labs/sdk-api-core');
14
+ require('../../shared/logger.cjs');
15
+ require('@dynamic-labs/iconic');
16
+ require('@dynamic-labs/wallet-connector-core');
17
+ require('../../context/ViewContext/ViewContext.cjs');
18
+ var copy = require('../../shared/assets/copy.cjs');
19
+ var download = require('../../shared/assets/download.cjs');
20
+ require('@dynamic-labs/wallet-book');
21
+ require('../../utils/constants/colors.cjs');
22
+ require('../../utils/constants/values.cjs');
23
+ require('../../shared/utils/classes/storage/localStorage.cjs');
24
+ require('../../shared/consts/index.cjs');
25
+ var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
26
+ require('../../context/CaptchaContext/CaptchaContext.cjs');
27
+ require('../../context/ErrorContext/ErrorContext.cjs');
28
+ require('@dynamic-labs/multi-wallet');
29
+ require('react-international-phone');
30
+ require('viem');
31
+ require('viem/chains');
32
+ require('../../config/ApiEndpoint.cjs');
33
+ require('../../locale/locale.cjs');
34
+ var downloadFile = require('../../utils/functions/downloadFile/downloadFile.cjs');
35
+ require('../../context/AccessDeniedContext/AccessDeniedContext.cjs');
36
+ require('../../context/AccountExistsContext/AccountExistsContext.cjs');
37
+ require('../../context/UserWalletsContext/UserWalletsContext.cjs');
38
+ require('../../context/VerificationContext/VerificationContext.cjs');
39
+ require('react-dom');
40
+ require('../../context/WalletContext/WalletContext.cjs');
41
+ var usePromise = require('../../utils/hooks/usePromise/usePromise.cjs');
42
+ require('../../context/ThemeContext/ThemeContext.cjs');
43
+ require('@dynamic-labs/types');
44
+ require('../../context/LoadingContext/LoadingContext.cjs');
45
+ require('yup');
46
+ require('../../context/MockContext/MockContext.cjs');
47
+ require('../../context/FieldsStateContext/FieldsStateContext.cjs');
48
+ require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs');
49
+ require('../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
50
+ require('@dynamic-labs/rpc-providers');
51
+ var Typography = require('../../components/Typography/Typography.cjs');
52
+ require('../../context/FooterAnimationContext/index.cjs');
53
+ require('../../components/ShadowDOM/ShadowDOM.cjs');
54
+ require('../../components/Transition/ZoomTransition/ZoomTransition.cjs');
55
+ require('../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
56
+ require('../../components/Transition/OpacityTransition/OpacityTransition.cjs');
57
+ require('../../components/OverlayCard/OverlayCardTarget/OverlayCardTarget.cjs');
58
+ require('../../context/SocialRedirectContext/SocialRedirectContext.cjs');
59
+ require('../../context/WalletGroupContext/WalletGroupContext.cjs');
60
+ require('../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
61
+ require('react-focus-lock');
62
+ var Icon = require('../../components/Icon/Icon.cjs');
63
+ require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
64
+ require('../../components/IconButton/IconButton.cjs');
65
+ require('../../components/MenuList/Dropdown/Dropdown.cjs');
66
+ require('formik');
67
+ var TypographyButton = require('../../components/TypographyButton/TypographyButton.cjs');
68
+ require('../TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
69
+ var spinner = require('../../components/Spinner/spinner.cjs');
70
+ var Alert = require('../../components/Alert/Alert.cjs');
71
+ require('../../components/Input/Input.cjs');
72
+ require('../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
73
+ require('../../context/PasskeyContext/PasskeyContext.cjs');
74
+ require('../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
75
+ var useMfa = require('../../utils/hooks/useMfa/useMfa.cjs');
76
+ var Checkbox = require('../../components/Checkbox/Checkbox.cjs');
77
+ var CopyButton = require('../../components/CopyButton/CopyButton.cjs');
78
+ require('../../components/InlineWidget/InlineWidget.cjs');
79
+ require('../../components/IsBrowser/IsBrowser.cjs');
80
+ require('../../components/Popper/Popper/Popper.cjs');
81
+ require('../../components/Popper/PopperContext/PopperContext.cjs');
82
+ require('qrcode');
83
+ require('../WalletList/WalletList.cjs');
84
+ require('../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
85
+ require('@hcaptcha/react-hcaptcha');
86
+ require('../LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.cjs');
87
+
88
+ const MfaDisplayBackupCodesView = () => {
89
+ const { setShowAuthFlow } = useInternalDynamicContext.useInternalDynamicContext();
90
+ const [acknowledgement, setAcknowledgement] = React.useState(false);
91
+ const { t } = reactI18next.useTranslation();
92
+ const { getRecoveryCodes } = useMfa.useMfa();
93
+ const { data: codes, isLoading } = usePromise.usePromise(() => getRecoveryCodes());
94
+ const codesAsString = (codes || []).join('\n');
95
+ return (jsxRuntime.jsxs("div", { className: 'mfa-display-backup-codes-view__body', "data-testid": 'mfa-display-backup-codes-view', children: [jsxRuntime.jsx(Typography.Typography, { className: 'mfa-display-backup-codes-view__copy', variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_mfa.display_backup_codes_view.body') }), jsxRuntime.jsx(Alert.Alert, { variant: 'warning', copykey: 'dyn_mfa.display_backup_codes_view.warning', className: 'mfa-display-backup-codes-view__warning', children: t('dyn_mfa.display_backup_codes_view.warning') }), isLoading ? (jsxRuntime.jsx(spinner.Spinner, { className: 'mfa-display-backup-codes-view__loading-spinner' })) : (jsxRuntime.jsxs("div", { className: 'mfa-display-backup-codes-view__codes', children: [codes === null || codes === void 0 ? void 0 : codes.map((code, index) => (jsxRuntime.jsx(Typography.Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'mfa-display-backup-codes-view__code', children: code }, index))), jsxRuntime.jsxs("div", { className: 'mfa-display-backup-codes-view__actions', children: [jsxRuntime.jsx(CopyButton.CopyButton, { variant: 'button', textToCopy: codesAsString, copykey: 'dyn_mfa.display_backup_codes_view.copy_all', startSlot:
96
+ // eslint-disable-next-line react/jsx-wrap-multilines
97
+ jsxRuntime.jsx(Icon.Icon, { size: 'mini', color: 'text-tertiary', children: jsxRuntime.jsx(copy.ReactComponent, {}) }), children: t('dyn_mfa.display_backup_codes_view.copy_all') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'download-button', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
98
+ e.preventDefault();
99
+ downloadFile.downloadFile('mfa-backup-codes.txt', codesAsString);
100
+ }, startSlot: jsxRuntime.jsx(download.ReactComponent, {}), expanded: true, copykey: 'dyn_mfa.display_backup_codes_view.download', children: t('dyn_mfa.display_backup_codes_view.download') })] })] })), jsxRuntime.jsxs("div", { className: 'mfa-display-backup-codes-view__complete', children: [jsxRuntime.jsx(TypographyButton.TypographyButton, { buttonClassName: 'mfa-display-backup-codes-view__acknowledgement', dataTestId: 'ack-button', buttonPadding: 'small', buttonVariant: 'primary', onClick: () => setAcknowledgement(!acknowledgement), startSlot:
101
+ // eslint-disable-next-line react/jsx-wrap-multilines
102
+ jsxRuntime.jsx(Checkbox.Checkbox, { checked: acknowledgement, onChange: () => {
103
+ setAcknowledgement(!acknowledgement);
104
+ }, className: 'mfa-display-backup-codes-view__acknowledgement__checkbox' }), expanded: true, typographyProps: {
105
+ color: 'secondary',
106
+ }, copykey: 'dyn_mfa.display_backup_codes_view.checkbox', children: t('dyn_mfa.display_backup_codes_view.checkbox') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { dataTestId: 'complete-button', buttonPadding: 'large', buttonVariant: 'brand-primary', typographyProps: {
107
+ color: 'inherit',
108
+ }, disabled: !acknowledgement, expanded: true, copykey: 'dyn_mfa.display_backup_codes_view.complete', onClick: () => setShowAuthFlow(false), children: t('dyn_mfa.display_backup_codes_view.complete') })] })] }));
109
+ };
110
+
111
+ exports.MfaDisplayBackupCodesView = MfaDisplayBackupCodesView;
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const MfaDisplayBackupCodesView: () => JSX.Element;
@@ -0,0 +1,107 @@
1
+ 'use client'
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { useState } from 'react';
4
+ import { useTranslation } from 'react-i18next';
5
+ import '../../events/dynamicEvents.js';
6
+ import '../../../../_virtual/_tslib.js';
7
+ import '@dynamic-labs/utils';
8
+ import '../../context/DynamicContext/DynamicContext.js';
9
+ import '@dynamic-labs/sdk-api-core';
10
+ import '../../shared/logger.js';
11
+ import '@dynamic-labs/iconic';
12
+ import '@dynamic-labs/wallet-connector-core';
13
+ import '../../context/ViewContext/ViewContext.js';
14
+ import { ReactComponent as SvgCopy } from '../../shared/assets/copy.js';
15
+ import { ReactComponent as SvgDownload } from '../../shared/assets/download.js';
16
+ import '@dynamic-labs/wallet-book';
17
+ import '../../utils/constants/colors.js';
18
+ import '../../utils/constants/values.js';
19
+ import '../../shared/utils/classes/storage/localStorage.js';
20
+ import '../../shared/consts/index.js';
21
+ import { useInternalDynamicContext } from '../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
22
+ import '../../context/CaptchaContext/CaptchaContext.js';
23
+ import '../../context/ErrorContext/ErrorContext.js';
24
+ import '@dynamic-labs/multi-wallet';
25
+ import 'react-international-phone';
26
+ import 'viem';
27
+ import 'viem/chains';
28
+ import '../../config/ApiEndpoint.js';
29
+ import '../../locale/locale.js';
30
+ import { downloadFile } from '../../utils/functions/downloadFile/downloadFile.js';
31
+ import '../../context/AccessDeniedContext/AccessDeniedContext.js';
32
+ import '../../context/AccountExistsContext/AccountExistsContext.js';
33
+ import '../../context/UserWalletsContext/UserWalletsContext.js';
34
+ import '../../context/VerificationContext/VerificationContext.js';
35
+ import 'react-dom';
36
+ import '../../context/WalletContext/WalletContext.js';
37
+ import { usePromise } from '../../utils/hooks/usePromise/usePromise.js';
38
+ import '../../context/ThemeContext/ThemeContext.js';
39
+ import '@dynamic-labs/types';
40
+ import '../../context/LoadingContext/LoadingContext.js';
41
+ import 'yup';
42
+ import '../../context/MockContext/MockContext.js';
43
+ import '../../context/FieldsStateContext/FieldsStateContext.js';
44
+ import '../../utils/hooks/useUserUpdateRequest/useUpdateUser/useUpdateUser.js';
45
+ import '../../context/UserFieldEditorContext/UserFieldEditorContext.js';
46
+ import '@dynamic-labs/rpc-providers';
47
+ import { Typography } from '../../components/Typography/Typography.js';
48
+ import '../../context/FooterAnimationContext/index.js';
49
+ import '../../components/ShadowDOM/ShadowDOM.js';
50
+ import '../../components/Transition/ZoomTransition/ZoomTransition.js';
51
+ import '../../components/Transition/SlideInUpTransition/SlideInUpTransition.js';
52
+ import '../../components/Transition/OpacityTransition/OpacityTransition.js';
53
+ import '../../components/OverlayCard/OverlayCardTarget/OverlayCardTarget.js';
54
+ import '../../context/SocialRedirectContext/SocialRedirectContext.js';
55
+ import '../../context/WalletGroupContext/WalletGroupContext.js';
56
+ import '../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
57
+ import 'react-focus-lock';
58
+ import { Icon } from '../../components/Icon/Icon.js';
59
+ import '../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
60
+ import '../../components/IconButton/IconButton.js';
61
+ import '../../components/MenuList/Dropdown/Dropdown.js';
62
+ import 'formik';
63
+ import { TypographyButton } from '../../components/TypographyButton/TypographyButton.js';
64
+ import '../TransactionConfirmationView/helpers/transactionErrorMessage.js';
65
+ import { Spinner } from '../../components/Spinner/spinner.js';
66
+ import { Alert } from '../../components/Alert/Alert.js';
67
+ import '../../components/Input/Input.js';
68
+ import '../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
69
+ import '../../context/PasskeyContext/PasskeyContext.js';
70
+ import '../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
71
+ import { useMfa } from '../../utils/hooks/useMfa/useMfa.js';
72
+ import { Checkbox } from '../../components/Checkbox/Checkbox.js';
73
+ import { CopyButton } from '../../components/CopyButton/CopyButton.js';
74
+ import '../../components/InlineWidget/InlineWidget.js';
75
+ import '../../components/IsBrowser/IsBrowser.js';
76
+ import '../../components/Popper/Popper/Popper.js';
77
+ import '../../components/Popper/PopperContext/PopperContext.js';
78
+ import 'qrcode';
79
+ import '../WalletList/WalletList.js';
80
+ import '../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
81
+ import '@hcaptcha/react-hcaptcha';
82
+ import '../LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.js';
83
+
84
+ const MfaDisplayBackupCodesView = () => {
85
+ const { setShowAuthFlow } = useInternalDynamicContext();
86
+ const [acknowledgement, setAcknowledgement] = useState(false);
87
+ const { t } = useTranslation();
88
+ const { getRecoveryCodes } = useMfa();
89
+ const { data: codes, isLoading } = usePromise(() => getRecoveryCodes());
90
+ const codesAsString = (codes || []).join('\n');
91
+ return (jsxs("div", { className: 'mfa-display-backup-codes-view__body', "data-testid": 'mfa-display-backup-codes-view', children: [jsx(Typography, { className: 'mfa-display-backup-codes-view__copy', variant: 'body_normal', weight: 'regular', color: 'secondary', children: t('dyn_mfa.display_backup_codes_view.body') }), jsx(Alert, { variant: 'warning', copykey: 'dyn_mfa.display_backup_codes_view.warning', className: 'mfa-display-backup-codes-view__warning', children: t('dyn_mfa.display_backup_codes_view.warning') }), isLoading ? (jsx(Spinner, { className: 'mfa-display-backup-codes-view__loading-spinner' })) : (jsxs("div", { className: 'mfa-display-backup-codes-view__codes', children: [codes === null || codes === void 0 ? void 0 : codes.map((code, index) => (jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'secondary', className: 'mfa-display-backup-codes-view__code', children: code }, index))), jsxs("div", { className: 'mfa-display-backup-codes-view__actions', children: [jsx(CopyButton, { variant: 'button', textToCopy: codesAsString, copykey: 'dyn_mfa.display_backup_codes_view.copy_all', startSlot:
92
+ // eslint-disable-next-line react/jsx-wrap-multilines
93
+ jsx(Icon, { size: 'mini', color: 'text-tertiary', children: jsx(SvgCopy, {}) }), children: t('dyn_mfa.display_backup_codes_view.copy_all') }), jsx(TypographyButton, { dataTestId: 'download-button', buttonPadding: 'small', buttonVariant: 'primary', onClick: (e) => {
94
+ e.preventDefault();
95
+ downloadFile('mfa-backup-codes.txt', codesAsString);
96
+ }, startSlot: jsx(SvgDownload, {}), expanded: true, copykey: 'dyn_mfa.display_backup_codes_view.download', children: t('dyn_mfa.display_backup_codes_view.download') })] })] })), jsxs("div", { className: 'mfa-display-backup-codes-view__complete', children: [jsx(TypographyButton, { buttonClassName: 'mfa-display-backup-codes-view__acknowledgement', dataTestId: 'ack-button', buttonPadding: 'small', buttonVariant: 'primary', onClick: () => setAcknowledgement(!acknowledgement), startSlot:
97
+ // eslint-disable-next-line react/jsx-wrap-multilines
98
+ jsx(Checkbox, { checked: acknowledgement, onChange: () => {
99
+ setAcknowledgement(!acknowledgement);
100
+ }, className: 'mfa-display-backup-codes-view__acknowledgement__checkbox' }), expanded: true, typographyProps: {
101
+ color: 'secondary',
102
+ }, copykey: 'dyn_mfa.display_backup_codes_view.checkbox', children: t('dyn_mfa.display_backup_codes_view.checkbox') }), jsx(TypographyButton, { dataTestId: 'complete-button', buttonPadding: 'large', buttonVariant: 'brand-primary', typographyProps: {
103
+ color: 'inherit',
104
+ }, disabled: !acknowledgement, expanded: true, copykey: 'dyn_mfa.display_backup_codes_view.complete', onClick: () => setShowAuthFlow(false), children: t('dyn_mfa.display_backup_codes_view.complete') })] })] }));
105
+ };
106
+
107
+ export { MfaDisplayBackupCodesView };