@dynamic-labs/sdk-react-core 4.29.3 → 4.29.5

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 (120) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.cjs +3 -3
  3. package/package.js +3 -3
  4. package/package.json +13 -13
  5. package/src/index.cjs +10 -2
  6. package/src/index.d.ts +2 -2
  7. package/src/index.js +4 -2
  8. package/src/lib/client/extension/deprecated/mfa/verifyTotpMfaDevice/verifyTotpMfaDevice.d.ts +1 -1
  9. package/src/lib/components/EmbeddedWalletExport/EmbeddedWalletExport.cjs +83 -0
  10. package/src/lib/components/EmbeddedWalletExport/EmbeddedWalletExport.d.ts +12 -0
  11. package/src/lib/components/EmbeddedWalletExport/EmbeddedWalletExport.js +79 -0
  12. package/src/lib/components/EmbeddedWalletExport/index.d.ts +2 -0
  13. package/src/lib/components/Input/Input.cjs +1 -1
  14. package/src/lib/components/Input/Input.js +1 -1
  15. package/src/lib/components/Textarea/Textarea.cjs +1 -1
  16. package/src/lib/components/Textarea/Textarea.js +1 -1
  17. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +3 -2
  18. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +3 -2
  19. package/src/lib/components/index.d.ts +1 -0
  20. package/src/lib/context/DynamicContext/hooks/useAutoselectPrimaryWallet/useAutoselectPrimaryWallet.cjs +7 -7
  21. package/src/lib/context/DynamicContext/hooks/useAutoselectPrimaryWallet/useAutoselectPrimaryWallet.js +7 -7
  22. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.cjs +7 -7
  23. package/src/lib/context/SocialRedirectContext/SocialRedirectContext.js +7 -7
  24. package/src/lib/context/ViewContext/types/index.d.ts +1 -1
  25. package/src/lib/locale/en/translation.cjs +76 -0
  26. package/src/lib/locale/en/translation.d.ts +76 -0
  27. package/src/lib/locale/en/translation.js +76 -0
  28. package/src/lib/shared/assets/index.d.ts +1 -0
  29. package/src/lib/shared/assets/sparkles.cjs +54 -0
  30. package/src/lib/shared/assets/sparkles.js +30 -0
  31. package/src/lib/shared/assets/upgrade.cjs +93 -0
  32. package/src/lib/shared/assets/upgrade.js +69 -0
  33. package/src/lib/styles/index.shadow.cjs +1 -1
  34. package/src/lib/styles/index.shadow.js +1 -1
  35. package/src/lib/utils/constants/authViewLayoutChecks.cjs +4 -0
  36. package/src/lib/utils/constants/authViewLayoutChecks.js +4 -0
  37. package/src/lib/utils/functions/exportWalletCredential/exportWalletCredential.cjs +57 -0
  38. package/src/lib/utils/functions/exportWalletCredential/exportWalletCredential.d.ts +13 -0
  39. package/src/lib/utils/functions/exportWalletCredential/exportWalletCredential.js +53 -0
  40. package/src/lib/utils/functions/exportWalletCredential/index.d.ts +2 -0
  41. package/src/lib/utils/functions/findPrimaryWalletVCForUser/findPrimaryWalletVCForUser.cjs +57 -0
  42. package/src/lib/utils/functions/findPrimaryWalletVCForUser/findPrimaryWalletVCForUser.d.ts +11 -0
  43. package/src/lib/utils/functions/findPrimaryWalletVCForUser/findPrimaryWalletVCForUser.js +53 -0
  44. package/src/lib/utils/functions/findPrimaryWalletVCForUser/index.d.ts +1 -0
  45. package/src/lib/utils/functions/index.d.ts +1 -0
  46. package/src/lib/utils/hooks/index.d.ts +2 -0
  47. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +3 -3
  48. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +3 -3
  49. package/src/lib/utils/hooks/useDeletePasskey/index.d.ts +1 -0
  50. package/src/lib/utils/hooks/useDeletePasskey/useDeletePasskey.cjs +33 -0
  51. package/src/lib/utils/hooks/useDeletePasskey/useDeletePasskey.d.ts +22 -0
  52. package/src/lib/utils/hooks/useDeletePasskey/useDeletePasskey.js +29 -0
  53. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +23 -23
  54. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.d.ts +5 -4
  55. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +24 -24
  56. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +25 -36
  57. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +26 -37
  58. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +2 -2
  59. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +2 -2
  60. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +4 -4
  61. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +4 -4
  62. package/src/lib/utils/hooks/useGetMfaToken/useGetMfaToken.cjs +39 -19
  63. package/src/lib/utils/hooks/useGetMfaToken/useGetMfaToken.js +39 -19
  64. package/src/lib/utils/hooks/useRefreshUser/useRefreshUser.cjs +11 -5
  65. package/src/lib/utils/hooks/useRefreshUser/useRefreshUser.js +11 -5
  66. package/src/lib/utils/hooks/useRefreshUserState/useRefreshUserState.cjs +2 -2
  67. package/src/lib/utils/hooks/useRefreshUserState/useRefreshUserState.js +2 -2
  68. package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.cjs +1 -1
  69. package/src/lib/utils/hooks/useSetWalletConnectorFetchers/useSetWalletConnectorFetchers.js +1 -1
  70. package/src/lib/utils/hooks/useSmartWallets/useSmartWallets.cjs +1 -1
  71. package/src/lib/utils/hooks/useSmartWallets/useSmartWallets.js +1 -1
  72. package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.cjs +1 -1
  73. package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.js +1 -1
  74. package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.cjs +5 -4
  75. package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.js +5 -4
  76. package/src/lib/utils/hooks/useTransferWallet/useTransferWallet.cjs +3 -3
  77. package/src/lib/utils/hooks/useTransferWallet/useTransferWallet.js +3 -3
  78. package/src/lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.cjs +3 -3
  79. package/src/lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.js +3 -3
  80. package/src/lib/utils/hooks/useUpgradeToDynamicWaasFlow/index.d.ts +1 -0
  81. package/src/lib/utils/hooks/useUpgradeToDynamicWaasFlow/useUpgradeToDynamicWaasFlow.cjs +124 -0
  82. package/src/lib/utils/hooks/useUpgradeToDynamicWaasFlow/useUpgradeToDynamicWaasFlow.d.ts +7 -0
  83. package/src/lib/utils/hooks/useUpgradeToDynamicWaasFlow/useUpgradeToDynamicWaasFlow.js +120 -0
  84. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +3 -3
  85. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +3 -3
  86. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +6 -0
  87. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +6 -0
  88. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +6 -0
  89. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +6 -0
  90. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.cjs +44 -31
  91. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.d.ts +1 -1
  92. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.js +44 -31
  93. package/src/lib/views/AccountUpgradedView/AccountUpgradedView.cjs +124 -0
  94. package/src/lib/views/AccountUpgradedView/AccountUpgradedView.d.ts +2 -0
  95. package/src/lib/views/AccountUpgradedView/AccountUpgradedView.js +120 -0
  96. package/src/lib/views/AccountUpgradedView/index.d.ts +1 -0
  97. package/src/lib/views/EmailVerification/EmailVerification.cjs +3 -3
  98. package/src/lib/views/EmailVerification/EmailVerification.js +3 -3
  99. package/src/lib/views/EmbeddedReveal/EmbeddedRevealView/EmbeddedRevealView.cjs +17 -139
  100. package/src/lib/views/EmbeddedReveal/EmbeddedRevealView/EmbeddedRevealView.js +20 -142
  101. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs +15 -0
  102. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.d.ts +2 -0
  103. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.js +14 -1
  104. package/src/lib/views/WaasUpgradeView/WaasUpgradeView.cjs +159 -0
  105. package/src/lib/views/WaasUpgradeView/WaasUpgradeView.d.ts +5 -0
  106. package/src/lib/views/WaasUpgradeView/WaasUpgradeView.js +155 -0
  107. package/src/lib/views/WaasUpgradeView/index.d.ts +2 -0
  108. package/src/lib/views/WalletUpgradeFlowView/WalletUpgradeFlowView.cjs +203 -0
  109. package/src/lib/views/WalletUpgradeFlowView/WalletUpgradeFlowView.d.ts +9 -0
  110. package/src/lib/views/WalletUpgradeFlowView/WalletUpgradeFlowView.js +199 -0
  111. package/src/lib/views/WalletUpgradeFlowView/index.d.ts +1 -0
  112. package/src/lib/views/viewToComponentMap.cjs +6 -0
  113. package/src/lib/views/viewToComponentMap.d.ts +3 -0
  114. package/src/lib/views/viewToComponentMap.js +6 -0
  115. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.cjs +3 -3
  116. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.js +3 -3
  117. package/src/lib/widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs +12 -1
  118. package/src/lib/widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.js +12 -1
  119. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.cjs +10 -1
  120. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.js +10 -1
@@ -1,10 +1,8 @@
1
1
  'use client'
2
- import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
- import { useState, useRef, useEffect, useMemo } from 'react';
3
+ import { useState, useEffect, useMemo } from 'react';
5
4
  import { useTranslation } from 'react-i18next';
6
5
  import { DynamicError, AccessBlockedError } from '@dynamic-labs/utils';
7
- import { isSessionKeyCompatibleWalletConnector } from '@dynamic-labs/wallet-connector-core';
8
6
  import '../../../components/Accordion/components/AccordionItem/AccordionItem.js';
9
7
  import { ReactComponent as SvgClose } from '../../../shared/assets/close.js';
10
8
  import { ReactComponent as SvgExportEmbeddedHero } from '../../../shared/assets/export-embedded-hero.js';
@@ -13,8 +11,10 @@ import { ReactComponent as SvgInfo } from '../../../shared/assets/info.js';
13
11
  import { ReactComponent as SvgWalletV2 } from '../../../shared/assets/wallet-v2.js';
14
12
  import '@dynamic-labs/iconic';
15
13
  import { useViewContext } from '../../../context/ViewContext/ViewContext.js';
14
+ import '../../../../../_virtual/_tslib.js';
16
15
  import '@dynamic-labs/sdk-api-core';
17
16
  import { logger } from '../../../shared/logger.js';
17
+ import '@dynamic-labs/wallet-connector-core';
18
18
  import '@dynamic-labs/wallet-book';
19
19
  import '../../../utils/constants/colors.js';
20
20
  import '../../../utils/constants/values.js';
@@ -40,6 +40,7 @@ import '../../../locale/locale.js';
40
40
  import '../../../store/state/dynamicContextProps/dynamicContextProps.js';
41
41
  import '../../../store/state/primaryWalletId/primaryWalletId.js';
42
42
  import '../../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
43
+ import { exportWalletCredential } from '../../../utils/functions/exportWalletCredential/exportWalletCredential.js';
43
44
  import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
44
45
  import '../../../context/AccountExistsContext/AccountExistsContext.js';
45
46
  import '../../../context/UserWalletsContext/UserWalletsContext.js';
@@ -54,12 +55,11 @@ import '../../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema
54
55
  import { useMutation } from '../../../utils/hooks/useMutation/useMutation.js';
55
56
  import { useIsTurnkeyWallet } from '../../../utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js';
56
57
  import 'bs58';
57
- import { usePromise } from '../../../utils/hooks/usePromise/usePromise.js';
58
58
  import '@dynamic-labs/types';
59
59
  import '../../../context/SocialRedirectContext/SocialRedirectContext.js';
60
60
  import '../../../context/LoadingContext/LoadingContext.js';
61
61
  import '../../../context/WalletContext/WalletContext.js';
62
- import { cleanupExport, exportCredential, initExport } from '../utils/turnkeyExport/turnkeyExport.js';
62
+ import { cleanupExport } from '../utils/turnkeyExport/turnkeyExport.js';
63
63
  import '../../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
64
64
  import 'yup';
65
65
  import '../../../context/MockContext/MockContext.js';
@@ -106,8 +106,7 @@ import '../../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
106
106
  import '../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
107
107
  import '@hcaptcha/react-hcaptcha';
108
108
  import { Checkbox } from '../../../components/Checkbox/Checkbox.js';
109
- import { iframeContainerId, iframeElementId } from '../constants.js';
110
- import { cleanupExport as cleanupExport$1, exportWaasCredential } from '../utils/waasExport/waasExport.js';
109
+ import { cleanupExport as cleanupExport$1 } from '../utils/waasExport/waasExport.js';
111
110
  import '../../ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
112
111
  import '../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
113
112
  import '../../MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
@@ -116,6 +115,7 @@ import '../../../store/state/tokenBalances.js';
116
115
  import '../../../store/state/multichainBalances.js';
117
116
  import { useSyncEmbeddedWalletFlow } from '../../../utils/hooks/useSyncEmbeddedWalletFlow/useSyncEmbeddedWalletFlow.js';
118
117
  import '../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
118
+ import { EmbeddedWalletExport } from '../../../components/EmbeddedWalletExport/EmbeddedWalletExport.js';
119
119
  import '../../../components/InlineWidget/InlineWidget.js';
120
120
  import '../../../components/IsBrowser/IsBrowser.js';
121
121
  import '../../../components/Popper/Popper/Popper.js';
@@ -126,14 +126,12 @@ const EmbeddedRevealView = ({ exportPrivateKey, isPromptForExport = false, }) =>
126
126
  const { primaryWallet, user, setShowAuthFlow, environmentId } = useInternalDynamicContext();
127
127
  const { handleAcknowledgeExportPrompt } = useSyncEmbeddedWalletFlow();
128
128
  const { isTurnkeyWallet } = useIsTurnkeyWallet();
129
- const isWaasWallet = user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => { var _a; return (_a = vc.walletName) === null || _a === void 0 ? void 0 : _a.startsWith('dynamicwaas'); });
129
+ const isWaasWallet = Boolean(user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => { var _a; return (_a = vc.walletName) === null || _a === void 0 ? void 0 : _a.startsWith('dynamicwaas'); }));
130
130
  const { setDynamicWidgetView } = useWidgetContext();
131
131
  const { pushView } = useViewContext();
132
132
  const { getEOAWallet, isSmartWallet } = useSmartWallets();
133
133
  const [acknowledgement1, setAcknowledgement1] = useState(false);
134
- const iframeContainerRef = useRef(null);
135
- const [showSkeleton, setShowSkeleton] = useState(false);
136
- const [waasExportComplete, setWaasExportComplete] = useState(false);
134
+ const [iframeContainerRef, setIframeContainerRef] = useState(null);
137
135
  if (!primaryWallet) {
138
136
  throw new DynamicError('No primary wallet found', INVALID_WALLET_DATA);
139
137
  }
@@ -164,89 +162,21 @@ const EmbeddedRevealView = ({ exportPrivateKey, isPromptForExport = false, }) =>
164
162
  // only run once on unmount
165
163
  // eslint-disable-next-line react-hooks/exhaustive-deps
166
164
  }, []);
167
- const { isLoading: exportLoading } = usePromise(() => __awaiter(void 0, void 0, void 0, function* () {
168
- var _d, _e;
169
- const iframeContainerElement = iframeContainerRef.current;
170
- if (!iframeContainerElement ||
171
- ((_d = iframeContainerElement === null || iframeContainerElement === void 0 ? void 0 : iframeContainerElement.children) === null || _d === void 0 ? void 0 : _d.length) > 0) {
172
- return;
173
- }
174
- if (isSessionKeyCompatibleWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector)) {
175
- yield ((_e = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _e === void 0 ? void 0 : _e.createOrRestoreSession());
176
- }
177
- if (isTurnkeyWallet) {
178
- return initExport({
179
- iframeContainer: iframeContainerElement,
180
- iframeElementId,
181
- wallet: wallet,
182
- });
183
- }
184
- return;
185
- }));
186
- const { mutate: handleExportWallet, isLoading, error, data, } = useMutation(() => __awaiter(void 0, void 0, void 0, function* () {
187
- var _f, _g, _h;
188
- handleAcknowledgeExportPrompt();
189
- if (isTurnkeyWallet) {
190
- try {
191
- return yield exportCredential({
192
- address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
193
- environmentId,
194
- user,
195
- wallet: wallet,
196
- });
197
- }
198
- catch (err) {
199
- if (isSessionKeyCompatibleWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector) &&
200
- ((_f = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _f === void 0 ? void 0 : _f.removeSessionKeys)) {
201
- yield ((_g = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _g === void 0 ? void 0 : _g.removeSessionKeys());
202
- yield ((_h = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _h === void 0 ? void 0 : _h.createOrRestoreSession({
203
- ignoreRestore: true,
204
- }));
205
- logger.error('[TK - removeSessionKeys] failed to perform revealEmbeddedWalletKey activity', {
206
- address: wallet === null || wallet === void 0 ? void 0 : wallet.address,
207
- err,
208
- userId: user === null || user === void 0 ? void 0 : user.userId,
209
- });
210
- }
211
- return exportCredential({
212
- address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
213
- environmentId,
214
- user,
215
- wallet: wallet,
216
- });
217
- }
218
- }
219
- if (isWaasWallet) {
220
- // Start the export in the background
221
- exportWaasCredential({
222
- address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
223
- iframeContainer: iframeContainerRef.current,
224
- user,
225
- wallet: wallet,
226
- })
227
- .then(() => {
228
- setWaasExportComplete(true);
229
- })
230
- .catch((error) => {
231
- logger.error(`Failed in exporting waas wallet ${wallet === null || wallet === void 0 ? void 0 : wallet.id}`, error);
232
- dynamicEvents.emit('embeddedWalletRevealFailed', error);
233
- });
234
- // Return true immediately to show skeleton
235
- return true;
236
- }
237
- return undefined;
165
+ const { mutate: handleExportWallet, isLoading, error, data, } = useMutation(() => exportWalletCredential({
166
+ environmentId,
167
+ exportPrivateKey,
168
+ handleAcknowledgeExportPrompt,
169
+ iframeContainerRef: iframeContainerRef,
170
+ isTurnkeyWallet,
171
+ isWaasWallet,
172
+ user,
173
+ wallet,
238
174
  }), {
239
175
  onFailure: (err) => {
240
176
  logger.error('Failed to export', err);
241
177
  dynamicEvents.emit('embeddedWalletRevealFailed', err);
242
178
  },
243
179
  });
244
- // Reset waasExportComplete when data changes to false (new export starting)
245
- useEffect(() => {
246
- if (!data) {
247
- setWaasExportComplete(false);
248
- }
249
- }, [data]);
250
180
  const errorText = useMemo(() => {
251
181
  if (!error) {
252
182
  return undefined;
@@ -273,26 +203,6 @@ const EmbeddedRevealView = ({ exportPrivateKey, isPromptForExport = false, }) =>
273
203
  setShowAuthFlow(false);
274
204
  setDynamicWidgetView('send-balance');
275
205
  }, className: 'embedded-reveal-view__zerodev-warning__link-button', children: jsx(Typography, { variant: 'body_normal', weight: 'regular', color: 'primary', className: 'underline', copykey: 'dyn_embedded_reveal.aa_warning.button', children: t('dyn_embedded_reveal.aa_warning.button') }) })] })] })), jsx("div", { className: 'embedded-reveal-view__body__description', children: !(!isLoading && data && !error) && (jsx("div", { className: 'embedded-reveal-view__header', children: jsx("div", { className: 'embedded-reveal-view__header__hero', children: jsx(SvgExportEmbeddedHero, {}) }) })) })] }));
276
- useEffect(() => {
277
- if (data) {
278
- // Show skeleton first
279
- setShowSkeleton(true);
280
- if (isWaasWallet) {
281
- // For WAAS wallets, hide skeleton when export is actually complete
282
- if (waasExportComplete) {
283
- setShowSkeleton(false);
284
- }
285
- }
286
- else {
287
- // For other wallets, use the fixed 2-second delay
288
- const timer = setTimeout(() => {
289
- setShowSkeleton(false);
290
- }, 2000);
291
- return () => clearTimeout(timer);
292
- }
293
- }
294
- return;
295
- }, [data, isWaasWallet, waasExportComplete]);
296
206
  const closeButton = (jsx(IconButton, { onClick: () => {
297
207
  setShowAuthFlow(false);
298
208
  }, type: 'button', children: jsx(SvgClose, {}) }));
@@ -321,42 +231,10 @@ const EmbeddedRevealView = ({ exportPrivateKey, isPromptForExport = false, }) =>
321
231
  }
322
232
  return baseClass;
323
233
  };
324
- const getCredentialContainerClassName = () => {
325
- const baseClass = 'embedded-reveal-view__body__credential-container';
326
- if (title !== credentialTitle) {
327
- return `${baseClass} ${baseClass}--hidden`;
328
- }
329
- if (isWaasWallet) {
330
- return `${baseClass} ${baseClass}--waas`;
331
- }
332
- return baseClass;
333
- };
334
- const getIframeContainerClassName = () => {
335
- const baseClass = 'embedded-reveal-view__body__iframe-container';
336
- if (!data) {
337
- return `${baseClass} ${baseClass}--hidden`;
338
- }
339
- if (showSkeleton) {
340
- return `${baseClass} ${baseClass}--invisible`;
341
- }
342
- return baseClass;
343
- };
344
- const getSkeletonLines = () => {
345
- const lineCount = 5; // Updated for 110px height
346
- const lines = [];
347
- for (let i = 0; i < lineCount; i++) {
348
- const isLastLine = i === lineCount - 1;
349
- const className = isLastLine
350
- ? 'embedded-reveal-view__body__skeleton-line embedded-reveal-view__body__skeleton-line--short'
351
- : 'embedded-reveal-view__body__skeleton-line';
352
- lines.push(jsx("div", { className: className, "data-testid": i === 0 ? 'private-key-skeleton' : undefined }, i));
353
- }
354
- return lines;
355
- };
356
234
  return (jsxs(Fragment, { children: [jsx(ModalHeader, { trailing: isPromptForExport ? null : closeButton, children: jsx(Typography, { as: 'h1', variant: 'title', color: 'primary', "data-testid": 'dynamic-auth-modal-heading', className: 'header__typography', children: title }) }), jsx("div", { className: 'embedded-reveal-view', children: jsxs("div", { className: getBodyClassName(), children: [(!isWaasWallet ||
357
235
  !hasInjectedCredential ||
358
236
  title !== credentialTitle) &&
359
- contentHeader, isTurnkeyWallet || isWaasWallet ? (jsxs("div", { className: getCredentialContainerClassName(), children: [jsx("div", { id: iframeContainerId, className: getIframeContainerClassName(), ref: iframeContainerRef }), showSkeleton && data && (jsx("div", { className: 'embedded-reveal-view__body__skeleton-container', children: getSkeletonLines() }))] })) : null, hasInjectedCredential ? (jsxs(Fragment, { children: [jsx(TypographyButton, { buttonPadding: 'medium', buttonVariant: 'brand-primary', onClick: () => {
237
+ contentHeader, (isTurnkeyWallet || isWaasWallet) && (jsx(EmbeddedWalletExport, { wallet: wallet, isTurnkeyWallet: isTurnkeyWallet, isWaasWallet: isWaasWallet, data: data, onIframeContainerRef: setIframeContainerRef, isVisible: !title.includes('Agree') })), hasInjectedCredential ? (jsxs(Fragment, { children: [jsx(TypographyButton, { buttonPadding: 'medium', buttonVariant: 'brand-primary', onClick: () => {
360
238
  setShowAuthFlow(false);
361
239
  }, loading: isLoading, copykey: 'dyn_embedded_reveal.done_button_label', typographyProps: {
362
240
  color: 'inherit',
@@ -368,7 +246,7 @@ const EmbeddedRevealView = ({ exportPrivateKey, isPromptForExport = false, }) =>
368
246
  setShowAuthFlow(false);
369
247
  }, dataTestId: 'embedded-reveal-button', copykey: 'dyn_embedded_reveal.skip_button_label', expanded: true, buttonClassName: 'embedded-reveal-view__body__button', children: t('dyn_embedded_reveal.skip_button_label') })), jsx(TypographyButton, { buttonPadding: 'medium', buttonVariant: 'brand-primary', typographyProps: {
370
248
  color: 'inherit',
371
- }, onClick: () => handleExportWallet(), disabled: !acknowledgement1 || exportLoading, loading: isLoading, dataTestId: 'embedded-reveal-button', copykey: 'dyn_embedded_reveal.reveal_button_label', style: { width: '100%' }, className: 'embedded-reveal-view__body__button', expanded: true, children: isPromptForExport
249
+ }, onClick: () => handleExportWallet(), disabled: !acknowledgement1, loading: isLoading, dataTestId: 'embedded-reveal-button', copykey: 'dyn_embedded_reveal.reveal_button_label', style: { width: '100%' }, className: 'embedded-reveal-view__body__button', expanded: true, children: isPromptForExport
372
250
  ? t('dyn_embedded_reveal.backup_button_label')
373
251
  : t('dyn_embedded_reveal.reveal_button_label') })] })] }))] }) })] }));
374
252
  };
@@ -44,12 +44,25 @@ const isTransactionExecutionError = (error) => error !== undefined &&
44
44
  typeof error === 'object' &&
45
45
  'walk' in error &&
46
46
  typeof error['walk'] === 'function';
47
+ const getPolicyViolationErrorMsg = (error) => {
48
+ const message = getMessage(error);
49
+ return ((message === null || message === void 0 ? void 0 : message.replace('Error: ', '')) ||
50
+ 'Policy violation: unknown error, please try again.');
51
+ };
52
+ const isPolicyViolationError = (error) => {
53
+ const message = getMessage(error);
54
+ return ((message === null || message === void 0 ? void 0 : message.toLowerCase().includes('policy violation')) ||
55
+ (message === null || message === void 0 ? void 0 : message.toLowerCase().includes('explicitly denied by policy')));
56
+ };
47
57
  const transactionErrorMessage = (err) => {
48
58
  let error = err;
49
59
  if (isTransactionExecutionError(err)) {
50
60
  error = err.walk();
51
61
  }
52
62
  logger.logger.debug('transaction error:', error);
63
+ if (isPolicyViolationError(error)) {
64
+ return getPolicyViolationErrorMsg(error);
65
+ }
53
66
  if (utils.TransactionGasCannotBeSponsoredError.isInstance(error)) {
54
67
  return;
55
68
  }
@@ -75,5 +88,7 @@ const isMagicInsufficientFundsError = (error) => {
75
88
  Boolean(message === null || message === void 0 ? void 0 : message.includes('insufficient funds for gas * price + value')));
76
89
  };
77
90
 
91
+ exports.getPolicyViolationErrorMsg = getPolicyViolationErrorMsg;
92
+ exports.isPolicyViolationError = isPolicyViolationError;
78
93
  exports.isTransactionExecutionError = isTransactionExecutionError;
79
94
  exports.transactionErrorMessage = transactionErrorMessage;
@@ -2,4 +2,6 @@ import { TransactionError } from '../TransactionConfirmationView.types';
2
2
  export declare const isTransactionExecutionError: <T>(error: unknown) => error is {
3
3
  walk: () => T;
4
4
  };
5
+ export declare const getPolicyViolationErrorMsg: (error: TransactionError) => string;
6
+ export declare const isPolicyViolationError: (error: TransactionError) => boolean | undefined;
5
7
  export declare const transactionErrorMessage: (err: TransactionError) => string | undefined;
@@ -40,12 +40,25 @@ const isTransactionExecutionError = (error) => error !== undefined &&
40
40
  typeof error === 'object' &&
41
41
  'walk' in error &&
42
42
  typeof error['walk'] === 'function';
43
+ const getPolicyViolationErrorMsg = (error) => {
44
+ const message = getMessage(error);
45
+ return ((message === null || message === void 0 ? void 0 : message.replace('Error: ', '')) ||
46
+ 'Policy violation: unknown error, please try again.');
47
+ };
48
+ const isPolicyViolationError = (error) => {
49
+ const message = getMessage(error);
50
+ return ((message === null || message === void 0 ? void 0 : message.toLowerCase().includes('policy violation')) ||
51
+ (message === null || message === void 0 ? void 0 : message.toLowerCase().includes('explicitly denied by policy')));
52
+ };
43
53
  const transactionErrorMessage = (err) => {
44
54
  let error = err;
45
55
  if (isTransactionExecutionError(err)) {
46
56
  error = err.walk();
47
57
  }
48
58
  logger.debug('transaction error:', error);
59
+ if (isPolicyViolationError(error)) {
60
+ return getPolicyViolationErrorMsg(error);
61
+ }
49
62
  if (TransactionGasCannotBeSponsoredError.isInstance(error)) {
50
63
  return;
51
64
  }
@@ -71,4 +84,4 @@ const isMagicInsufficientFundsError = (error) => {
71
84
  Boolean(message === null || message === void 0 ? void 0 : message.includes('insufficient funds for gas * price + value')));
72
85
  };
73
86
 
74
- export { isTransactionExecutionError, transactionErrorMessage };
87
+ export { getPolicyViolationErrorMsg, isPolicyViolationError, isTransactionExecutionError, transactionErrorMessage };
@@ -0,0 +1,159 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../_virtual/_tslib.cjs');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var React = require('react');
9
+ var reactI18next = require('react-i18next');
10
+ require('@dynamic-labs/utils');
11
+ require('../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
12
+ require('@dynamic-labs/iconic');
13
+ var ViewContext = require('../../context/ViewContext/ViewContext.cjs');
14
+ var upgrade = require('../../shared/assets/upgrade.cjs');
15
+ require('@dynamic-labs/sdk-api-core');
16
+ require('../../shared/logger.cjs');
17
+ require('@dynamic-labs/wallet-connector-core');
18
+ require('@dynamic-labs/wallet-book');
19
+ require('../../utils/constants/colors.cjs');
20
+ require('../../utils/constants/values.cjs');
21
+ require('../../shared/consts/index.cjs');
22
+ require('../../components/Alert/Alert.cjs');
23
+ require('../../events/dynamicEvents.cjs');
24
+ var useDynamicContext = require('../../context/DynamicContext/useDynamicContext/useDynamicContext.cjs');
25
+ var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/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('../../store/state/nonce/nonce.cjs');
31
+ require('@dynamic-labs-sdk/client/core');
32
+ require('../../client/client.cjs');
33
+ require('@dynamic-labs-sdk/client');
34
+ require('../../config/ApiEndpoint.cjs');
35
+ require('../../store/state/projectSettings/projectSettings.cjs');
36
+ require('../../locale/locale.cjs');
37
+ require('../../store/state/dynamicContextProps/dynamicContextProps.cjs');
38
+ require('../../store/state/primaryWalletId/primaryWalletId.cjs');
39
+ require('../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
40
+ require('../../context/AccessDeniedContext/AccessDeniedContext.cjs');
41
+ require('../../context/AccountExistsContext/AccountExistsContext.cjs');
42
+ require('../../context/UserWalletsContext/UserWalletsContext.cjs');
43
+ require('../../store/state/authMode/authMode.cjs');
44
+ require('../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs');
45
+ require('../../context/VerificationContext/VerificationContext.cjs');
46
+ require('react-dom');
47
+ require('../../utils/functions/compareChains/compareChains.cjs');
48
+ require('../Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
49
+ require('../../context/ThemeContext/ThemeContext.cjs');
50
+ var useSmartWallets = require('../../utils/hooks/useSmartWallets/useSmartWallets.cjs');
51
+ require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
52
+ require('bs58');
53
+ require('@dynamic-labs/types');
54
+ require('../../context/SocialRedirectContext/SocialRedirectContext.cjs');
55
+ require('../../context/LoadingContext/LoadingContext.cjs');
56
+ require('../../context/WalletContext/WalletContext.cjs');
57
+ require('../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
58
+ require('yup');
59
+ require('../../context/MockContext/MockContext.cjs');
60
+ require('../CollectUserDataView/useFields.cjs');
61
+ require('../../context/FieldsStateContext/FieldsStateContext.cjs');
62
+ require('../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
63
+ require('@dynamic-labs/rpc-providers');
64
+ require('../../store/state/walletOptions/walletOptions.cjs');
65
+ var Typography = require('../../components/Typography/Typography.cjs');
66
+ require('../../context/FooterAnimationContext/index.cjs');
67
+ require('../../components/ShadowDOM/ShadowDOM.cjs');
68
+ require('../../components/Transition/ZoomTransition/ZoomTransition.cjs');
69
+ require('../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
70
+ require('../../components/Transition/OpacityTransition/OpacityTransition.cjs');
71
+ require('../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
72
+ require('../../context/WalletGroupContext/WalletGroupContext.cjs');
73
+ require('../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
74
+ require('react-focus-lock');
75
+ require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
76
+ require('../../components/IconButton/IconButton.cjs');
77
+ require('../../components/MenuList/Dropdown/Dropdown.cjs');
78
+ var TypographyButton = require('../../components/TypographyButton/TypographyButton.cjs');
79
+ require('formik');
80
+ require('../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
81
+ var ModalHeader = require('../../components/ModalHeader/ModalHeader.cjs');
82
+ require('../../store/state/sendBalances.cjs');
83
+ require('../../components/Input/Input.cjs');
84
+ require('../../components/OverlayCard/OverlayCard.cjs');
85
+ require('../TransactionConfirmationView/TransactionConfirmationView.cjs');
86
+ require('../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
87
+ require('../../context/PasskeyContext/PasskeyContext.cjs');
88
+ require('../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
89
+ require('../../context/OnrampContext/OnrampContext.cjs');
90
+ require('../../../index.cjs');
91
+ require('../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
92
+ require('qrcode');
93
+ require('../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
94
+ require('../../context/IpConfigurationContext/IpConfigurationContext.cjs');
95
+ require('../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
96
+ require('../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
97
+ require('@hcaptcha/react-hcaptcha');
98
+ require('../ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
99
+ require('../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
100
+ require('../MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
101
+ require('../../store/state/connectorsInitializing/connectorsInitializing.cjs');
102
+ require('../../store/state/tokenBalances.cjs');
103
+ require('../../store/state/multichainBalances.cjs');
104
+ require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
105
+ require('../../components/InlineWidget/InlineWidget.cjs');
106
+ require('../../components/IsBrowser/IsBrowser.cjs');
107
+ require('../../components/Popper/Popper/Popper.cjs');
108
+ require('../../components/Popper/PopperContext/PopperContext.cjs');
109
+
110
+ // TODO(zfaizal2): Add this back as a param in a future PR
111
+ const enableNewWalletCreation = false;
112
+ const WaasUpgradeView = ({ onUpgrade }) => {
113
+ const { pushView } = ViewContext.useViewContext();
114
+ const { primaryWallet, secondaryWallets } = useInternalDynamicContext.useInternalDynamicContext();
115
+ const { getEOAWallet } = useSmartWallets.useSmartWallets();
116
+ const userWallets = [primaryWallet, ...secondaryWallets].reduce((acc, wallet) => {
117
+ if (!wallet)
118
+ return acc;
119
+ // Check if the wallet itself is a Turnkey wallet
120
+ if (wallet.connector.key.startsWith('turnkey')) {
121
+ acc.push(wallet);
122
+ }
123
+ // Check if it's a smart contract wallet with a Turnkey EOA signer
124
+ const eoaWallet = getEOAWallet(wallet);
125
+ if (eoaWallet && eoaWallet.connector.key.startsWith('turnkey')) {
126
+ // Check if EOA wallet is already in the accumulator to avoid duplicates
127
+ const isAlreadyIncluded = acc.some((existingWallet) => existingWallet.id === eoaWallet.id);
128
+ if (!isAlreadyIncluded) {
129
+ acc.push(eoaWallet);
130
+ }
131
+ }
132
+ return acc;
133
+ }, []);
134
+ const { t } = reactI18next.useTranslation();
135
+ const { setShowAuthFlow } = useDynamicContext.useDynamicContext();
136
+ const [selectedWallets] = React.useState(userWallets.map((w) => { var _a; return (_a = w === null || w === void 0 ? void 0 : w.id) !== null && _a !== void 0 ? _a : ''; }));
137
+ const [upgradeOption, setUpgradeOption] = React.useState('keep');
138
+ const handleUpgrade = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
139
+ if (selectedWallets.length === 0)
140
+ return;
141
+ if (upgradeOption === 'keep') {
142
+ const walletsToUpgrade = selectedWallets
143
+ .map((walletId) => userWallets.find((w) => (w === null || w === void 0 ? void 0 : w.id) === walletId))
144
+ .filter((w) => w !== undefined && w !== null);
145
+ pushView('wallet-upgrade-flow-view', {
146
+ method: 'existing',
147
+ wallets: walletsToUpgrade,
148
+ });
149
+ }
150
+ onUpgrade === null || onUpgrade === void 0 ? void 0 : onUpgrade(selectedWallets, upgradeOption);
151
+ });
152
+ return (jsxRuntime.jsxs("div", { className: 'waas-upgrade-view', children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { children: jsxRuntime.jsx(Typography.Typography, { as: 'h1', variant: 'title', color: 'primary', children: t('dyn_upgrade_wallet.title') }) }), jsxRuntime.jsxs("div", { className: 'waas-upgrade-view__content', children: [jsxRuntime.jsx("div", { className: 'waas-upgrade-view__illustration', children: jsxRuntime.jsx(upgrade.ReactComponent, {}) }), jsxRuntime.jsx(Typography.Typography, { as: 'p', variant: 'body_normal', className: 'waas-upgrade-view__new-version-message', children: t('dyn_upgrade_wallet.description') }), jsxRuntime.jsxs("div", { className: 'waas-upgrade-view__wallets-section', children: [jsxRuntime.jsx("div", { className: 'waas-upgrade-view__section-header', children: jsxRuntime.jsx(Typography.Typography, { color: 'primary', children: t('dyn_upgrade_wallet.eligible_wallets') }) }), jsxRuntime.jsx("div", { className: 'waas-upgrade-view__wallets-list', children: userWallets.map((wallet) => (jsxRuntime.jsx("div", { className: 'waas-upgrade-view__wallet-item', children: jsxRuntime.jsx("div", { className: 'waas-upgrade-view__wallet-info', children: jsxRuntime.jsxs("div", { className: 'waas-upgrade-view__wallet-details', children: [jsxRuntime.jsx(Typography.Typography, { color: 'primary', children: wallet.chain }), jsxRuntime.jsxs(Typography.Typography, { color: 'primary', children: [wallet.address.slice(0, 6), "...", wallet.address.slice(-4)] })] }) }) }, wallet.id))) })] }), enableNewWalletCreation , jsxRuntime.jsxs("div", { className: 'waas-upgrade-view__actions', children: [jsxRuntime.jsx(TypographyButton.TypographyButton, { buttonVariant: 'brand-primary', onClick: handleUpgrade, disabled: selectedWallets.length === 0, copykey: 'dyn_upgrade_wallet.upgrade', typographyProps: {
153
+ color: 'inherit',
154
+ }, children: t('dyn_upgrade_wallet.upgrade') }), jsxRuntime.jsx(TypographyButton.TypographyButton, { buttonVariant: 'tertiary', onClick: () => {
155
+ setShowAuthFlow(false);
156
+ }, children: t('dyn_upgrade_wallet.not_now') })] })] })] }));
157
+ };
158
+
159
+ exports.WaasUpgradeView = WaasUpgradeView;
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export interface WaasUpgradeViewProps {
3
+ onUpgrade?: (selectedWallets: string[], upgradeOption: 'keep' | 'fresh') => void;
4
+ }
5
+ export declare const WaasUpgradeView: FC<WaasUpgradeViewProps>;