@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
@@ -54,6 +54,9 @@ const viewsThatHideHeader = [
54
54
  'global-wallet-info',
55
55
  'mfa-choose-device',
56
56
  'mfa-verification',
57
+ 'waas-upgrade-view',
58
+ 'wallet-upgrade-flow-view',
59
+ 'account-upgraded',
57
60
  ];
58
61
  const viewsThatShowConnectedWalletProgress = [
59
62
  'wallet-list',
@@ -98,6 +101,7 @@ const viewsThatPreventModalClose = [
98
101
  'login-with-email-verification',
99
102
  'login-with-sms-verification',
100
103
  'backup-unsuccessful',
104
+ 'wallet-upgrade-flow-view',
101
105
  ];
102
106
  /**
103
107
  * When hasPendingMfaAction returns true, user is not able to close the modal in these views at all
@@ -50,6 +50,9 @@ const viewsThatHideHeader = [
50
50
  'global-wallet-info',
51
51
  'mfa-choose-device',
52
52
  'mfa-verification',
53
+ 'waas-upgrade-view',
54
+ 'wallet-upgrade-flow-view',
55
+ 'account-upgraded',
53
56
  ];
54
57
  const viewsThatShowConnectedWalletProgress = [
55
58
  'wallet-list',
@@ -94,6 +97,7 @@ const viewsThatPreventModalClose = [
94
97
  'login-with-email-verification',
95
98
  'login-with-sms-verification',
96
99
  'backup-unsuccessful',
100
+ 'wallet-upgrade-flow-view',
97
101
  ];
98
102
  /**
99
103
  * When hasPendingMfaAction returns true, user is not able to close the modal in these views at all
@@ -0,0 +1,57 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
7
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
8
+ var logger = require('../../../shared/logger.cjs');
9
+ var turnkeyExport = require('../../../views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.cjs');
10
+ var waasExport = require('../../../views/EmbeddedReveal/utils/waasExport/waasExport.cjs');
11
+
12
+ const exportWalletCredential = (_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ isTurnkeyWallet, isWaasWallet, wallet, user, environmentId, exportPrivateKey, iframeContainerRef, handleAcknowledgeExportPrompt, }) {
13
+ var _b, _c, _d;
14
+ handleAcknowledgeExportPrompt();
15
+ if (isTurnkeyWallet) {
16
+ try {
17
+ return yield turnkeyExport.exportCredential({
18
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
19
+ environmentId,
20
+ user,
21
+ wallet: wallet,
22
+ });
23
+ }
24
+ catch (err) {
25
+ if (walletConnectorCore.isSessionKeyCompatibleWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector) &&
26
+ ((_b = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _b === void 0 ? void 0 : _b.removeSessionKeys)) {
27
+ yield ((_c = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _c === void 0 ? void 0 : _c.removeSessionKeys());
28
+ yield ((_d = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _d === void 0 ? void 0 : _d.createOrRestoreSession({
29
+ ignoreRestore: true,
30
+ }));
31
+ logger.logger.error('[TK - removeSessionKeys] failed to perform revealEmbeddedWalletKey activity', {
32
+ address: wallet === null || wallet === void 0 ? void 0 : wallet.address,
33
+ err,
34
+ userId: user === null || user === void 0 ? void 0 : user.userId,
35
+ });
36
+ }
37
+ return turnkeyExport.exportCredential({
38
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
39
+ environmentId,
40
+ user,
41
+ wallet: wallet,
42
+ });
43
+ }
44
+ }
45
+ if (isWaasWallet) {
46
+ // Start the export in the background
47
+ return waasExport.exportWaasCredential({
48
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
49
+ iframeContainer: iframeContainerRef,
50
+ user,
51
+ wallet: wallet,
52
+ });
53
+ }
54
+ return undefined;
55
+ });
56
+
57
+ exports.exportWalletCredential = exportWalletCredential;
@@ -0,0 +1,13 @@
1
+ import { Wallet, WalletConnectorCore } from '@dynamic-labs/wallet-connector-core';
2
+ import { UserProfile } from '@dynamic-labs/types';
3
+ export interface ExportWalletCredentialParams {
4
+ isTurnkeyWallet: boolean;
5
+ isWaasWallet: boolean;
6
+ wallet: Wallet<WalletConnectorCore.WalletConnector>;
7
+ user: UserProfile | undefined;
8
+ environmentId: string;
9
+ exportPrivateKey?: boolean;
10
+ iframeContainerRef?: HTMLIFrameElement | null;
11
+ handleAcknowledgeExportPrompt: () => void;
12
+ }
13
+ export declare const exportWalletCredential: ({ isTurnkeyWallet, isWaasWallet, wallet, user, environmentId, exportPrivateKey, iframeContainerRef, handleAcknowledgeExportPrompt, }: ExportWalletCredentialParams) => Promise<boolean | undefined>;
@@ -0,0 +1,53 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
+ import { isSessionKeyCompatibleWalletConnector } from '@dynamic-labs/wallet-connector-core';
4
+ import { logger } from '../../../shared/logger.js';
5
+ import { exportCredential } from '../../../views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.js';
6
+ import { exportWaasCredential } from '../../../views/EmbeddedReveal/utils/waasExport/waasExport.js';
7
+
8
+ const exportWalletCredential = (_a) => __awaiter(void 0, [_a], void 0, function* ({ isTurnkeyWallet, isWaasWallet, wallet, user, environmentId, exportPrivateKey, iframeContainerRef, handleAcknowledgeExportPrompt, }) {
9
+ var _b, _c, _d;
10
+ handleAcknowledgeExportPrompt();
11
+ if (isTurnkeyWallet) {
12
+ try {
13
+ return yield exportCredential({
14
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
15
+ environmentId,
16
+ user,
17
+ wallet: wallet,
18
+ });
19
+ }
20
+ catch (err) {
21
+ if (isSessionKeyCompatibleWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector) &&
22
+ ((_b = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _b === void 0 ? void 0 : _b.removeSessionKeys)) {
23
+ yield ((_c = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _c === void 0 ? void 0 : _c.removeSessionKeys());
24
+ yield ((_d = wallet === null || wallet === void 0 ? void 0 : wallet.connector) === null || _d === void 0 ? void 0 : _d.createOrRestoreSession({
25
+ ignoreRestore: true,
26
+ }));
27
+ logger.error('[TK - removeSessionKeys] failed to perform revealEmbeddedWalletKey activity', {
28
+ address: wallet === null || wallet === void 0 ? void 0 : wallet.address,
29
+ err,
30
+ userId: user === null || user === void 0 ? void 0 : user.userId,
31
+ });
32
+ }
33
+ return exportCredential({
34
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
35
+ environmentId,
36
+ user,
37
+ wallet: wallet,
38
+ });
39
+ }
40
+ }
41
+ if (isWaasWallet) {
42
+ // Start the export in the background
43
+ return exportWaasCredential({
44
+ address: exportPrivateKey ? wallet === null || wallet === void 0 ? void 0 : wallet.address : undefined,
45
+ iframeContainer: iframeContainerRef,
46
+ user,
47
+ wallet: wallet,
48
+ });
49
+ }
50
+ return undefined;
51
+ });
52
+
53
+ export { exportWalletCredential };
@@ -0,0 +1,2 @@
1
+ export { exportWalletCredential } from './exportWalletCredential';
2
+ export type { ExportWalletCredentialParams } from './exportWalletCredential';
@@ -0,0 +1,57 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
7
+ var findPrimaryEmbeddedChain = require('../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
8
+ var findEmbeddedWalletFromVerifiedCredentials = require('../findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.cjs');
9
+
10
+ /**
11
+ * Finds the primary wallet VC for the user based on wallet type priority and most recent lastSelectedAt
12
+ * @param user - The SDK user object or UserProfile
13
+ * @param projectSettings - Project settings containing embedded wallet configuration
14
+ * @param onlyEmbeddedWallets - Whether to only return embedded wallets
15
+ * @returns JwtVerifiedCredential | undefined - The primary wallet VC for the user
16
+ */
17
+ const findPrimaryWalletVCForUser = (user, projectSettings, onlyEmbeddedWallets = false) => {
18
+ if (!(user === null || user === void 0 ? void 0 : user.verifiedCredentials))
19
+ return undefined;
20
+ // Sort all verified credentials by lastSelectedAt (most recent first)
21
+ const sortedCredentials = [...user.verifiedCredentials].sort((a, b) => {
22
+ // Handle credentials without lastSelectedAt
23
+ if (!a.lastSelectedAt && !b.lastSelectedAt)
24
+ return 0;
25
+ if (!a.lastSelectedAt)
26
+ return 1; // a goes to end
27
+ if (!b.lastSelectedAt)
28
+ return -1; // b goes to end
29
+ // Both have lastSelectedAt, sort by most recent first
30
+ return b.lastSelectedAt.getTime() - a.lastSelectedAt.getTime();
31
+ });
32
+ // Find AA wallet credential (highest priority)
33
+ const aaWalletCredential = sortedCredentials.find((vc) => vc.walletProvider === sdkApiCore.WalletProviderEnum.SmartContractWallet);
34
+ if (aaWalletCredential) {
35
+ return aaWalletCredential;
36
+ }
37
+ // Find embedded wallet credential (second priority)
38
+ let embeddedWalletCredential;
39
+ if (projectSettings) {
40
+ const primaryEmbeddedChain = findPrimaryEmbeddedChain.findPrimaryEmbeddedChain(projectSettings);
41
+ embeddedWalletCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(Object.assign(Object.assign({}, user), { verifiedCredentials: sortedCredentials }), [primaryEmbeddedChain]);
42
+ }
43
+ if (embeddedWalletCredential) {
44
+ return embeddedWalletCredential;
45
+ }
46
+ if (onlyEmbeddedWallets) {
47
+ return undefined;
48
+ }
49
+ // Find external wallet credential (lowest priority)
50
+ const externalWalletCredential = sortedCredentials.find((vc) => vc.format === 'blockchain');
51
+ if (externalWalletCredential) {
52
+ return externalWalletCredential;
53
+ }
54
+ return undefined;
55
+ };
56
+
57
+ exports.findPrimaryWalletVCForUser = findPrimaryWalletVCForUser;
@@ -0,0 +1,11 @@
1
+ import { SdkUser } from '@dynamic-labs/sdk-api-core';
2
+ import type { JwtVerifiedCredential, ProjectSettings } from '@dynamic-labs/sdk-api-core';
3
+ import { UserProfile } from '@dynamic-labs/types';
4
+ /**
5
+ * Finds the primary wallet VC for the user based on wallet type priority and most recent lastSelectedAt
6
+ * @param user - The SDK user object or UserProfile
7
+ * @param projectSettings - Project settings containing embedded wallet configuration
8
+ * @param onlyEmbeddedWallets - Whether to only return embedded wallets
9
+ * @returns JwtVerifiedCredential | undefined - The primary wallet VC for the user
10
+ */
11
+ export declare const findPrimaryWalletVCForUser: (user: SdkUser | UserProfile | null, projectSettings?: ProjectSettings, onlyEmbeddedWallets?: boolean) => JwtVerifiedCredential | undefined;
@@ -0,0 +1,53 @@
1
+ 'use client'
2
+ import { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';
3
+ import { findPrimaryEmbeddedChain } from '../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
4
+ import { findEmbeddedWalletFromVerifiedCredentials } from '../findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js';
5
+
6
+ /**
7
+ * Finds the primary wallet VC for the user based on wallet type priority and most recent lastSelectedAt
8
+ * @param user - The SDK user object or UserProfile
9
+ * @param projectSettings - Project settings containing embedded wallet configuration
10
+ * @param onlyEmbeddedWallets - Whether to only return embedded wallets
11
+ * @returns JwtVerifiedCredential | undefined - The primary wallet VC for the user
12
+ */
13
+ const findPrimaryWalletVCForUser = (user, projectSettings, onlyEmbeddedWallets = false) => {
14
+ if (!(user === null || user === void 0 ? void 0 : user.verifiedCredentials))
15
+ return undefined;
16
+ // Sort all verified credentials by lastSelectedAt (most recent first)
17
+ const sortedCredentials = [...user.verifiedCredentials].sort((a, b) => {
18
+ // Handle credentials without lastSelectedAt
19
+ if (!a.lastSelectedAt && !b.lastSelectedAt)
20
+ return 0;
21
+ if (!a.lastSelectedAt)
22
+ return 1; // a goes to end
23
+ if (!b.lastSelectedAt)
24
+ return -1; // b goes to end
25
+ // Both have lastSelectedAt, sort by most recent first
26
+ return b.lastSelectedAt.getTime() - a.lastSelectedAt.getTime();
27
+ });
28
+ // Find AA wallet credential (highest priority)
29
+ const aaWalletCredential = sortedCredentials.find((vc) => vc.walletProvider === WalletProviderEnum.SmartContractWallet);
30
+ if (aaWalletCredential) {
31
+ return aaWalletCredential;
32
+ }
33
+ // Find embedded wallet credential (second priority)
34
+ let embeddedWalletCredential;
35
+ if (projectSettings) {
36
+ const primaryEmbeddedChain = findPrimaryEmbeddedChain(projectSettings);
37
+ embeddedWalletCredential = findEmbeddedWalletFromVerifiedCredentials(Object.assign(Object.assign({}, user), { verifiedCredentials: sortedCredentials }), [primaryEmbeddedChain]);
38
+ }
39
+ if (embeddedWalletCredential) {
40
+ return embeddedWalletCredential;
41
+ }
42
+ if (onlyEmbeddedWallets) {
43
+ return undefined;
44
+ }
45
+ // Find external wallet credential (lowest priority)
46
+ const externalWalletCredential = sortedCredentials.find((vc) => vc.format === 'blockchain');
47
+ if (externalWalletCredential) {
48
+ return externalWalletCredential;
49
+ }
50
+ return undefined;
51
+ };
52
+
53
+ export { findPrimaryWalletVCForUser };
@@ -0,0 +1 @@
1
+ export { findPrimaryWalletVCForUser } from './findPrimaryWalletVCForUser';
@@ -82,3 +82,4 @@ export * from './isZKSyncEnabled';
82
82
  export * from './clientSessionKeys';
83
83
  export * from './usingV3Wallets';
84
84
  export * from './isPasskeyProviderEnabled';
85
+ export * from './exportWalletCredential';
@@ -84,6 +84,7 @@ export { usePromptAmountAndFundWithExchange } from './usePromptAndFundWithExchan
84
84
  export { usePayWithDynamic, type PayWithDynamicProps, } from './usePayWithDynamic';
85
85
  export { useSubmitExchangeFunding } from './useSubmitExchangeFunding';
86
86
  export { useGetPasskeys } from './useGetPasskeys';
87
+ export { useDeletePasskey } from './useDeletePasskey';
87
88
  export { useRegisterPasskey } from './useRegisterPasskey';
88
89
  export { useAuthenticatePasskeyMFA } from './useAuthenticatePasskeyMFA';
89
90
  export { useIsMfaEnabled } from './useIsMfaEnabled';
@@ -92,3 +93,4 @@ export { useIsTotpMfaEnabled } from './useIsTotpMfaEnabled';
92
93
  export { useSignInWithPasskey } from './useSignInWithPasskey';
93
94
  export { useGetUserMfaMethods } from './useGetUserMfaMethods';
94
95
  export { usePromptMfaAuth } from './usePromptMfaAuth';
96
+ export { useUpgradeToDynamicWaasFlow } from './useUpgradeToDynamicWaasFlow';
@@ -29,15 +29,15 @@ var updatePrimaryWalletId = require('../../functions/updatePrimaryWalletId/updat
29
29
  require('../../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
30
30
  require('../../../store/state/dynamicContextProps/dynamicContextProps.cjs');
31
31
  require('../../../store/state/primaryWalletId/primaryWalletId.cjs');
32
- require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
33
- require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
34
- require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
35
32
  require('@dynamic-labs-sdk/client/core');
36
33
  require('../../../client/client.cjs');
37
34
  require('@dynamic-labs-sdk/client');
38
35
  require('../../../config/ApiEndpoint.cjs');
39
36
  require('../../../store/state/projectSettings/projectSettings.cjs');
40
37
  require('../../../locale/locale.cjs');
38
+ require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
39
+ require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
40
+ require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
41
41
  require('../../../store/state/authMode/authMode.cjs');
42
42
  require('../../../context/VerificationContext/VerificationContext.cjs');
43
43
  require('react-dom');
@@ -25,15 +25,15 @@ import { updatePrimaryWalletId } from '../../functions/updatePrimaryWalletId/upd
25
25
  import '../../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
26
26
  import '../../../store/state/dynamicContextProps/dynamicContextProps.js';
27
27
  import '../../../store/state/primaryWalletId/primaryWalletId.js';
28
- import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
29
- import '../../../context/AccountExistsContext/AccountExistsContext.js';
30
- import '../../../context/UserWalletsContext/UserWalletsContext.js';
31
28
  import '@dynamic-labs-sdk/client/core';
32
29
  import '../../../client/client.js';
33
30
  import '@dynamic-labs-sdk/client';
34
31
  import '../../../config/ApiEndpoint.js';
35
32
  import '../../../store/state/projectSettings/projectSettings.js';
36
33
  import '../../../locale/locale.js';
34
+ import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
35
+ import '../../../context/AccountExistsContext/AccountExistsContext.js';
36
+ import '../../../context/UserWalletsContext/UserWalletsContext.js';
37
37
  import '../../../store/state/authMode/authMode.js';
38
38
  import '../../../context/VerificationContext/VerificationContext.js';
39
39
  import 'react-dom';
@@ -0,0 +1 @@
1
+ export { useDeletePasskey } from './useDeletePasskey';
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
7
+ var React = require('react');
8
+ var client = require('@dynamic-labs-sdk/client');
9
+
10
+ /**
11
+ * Delete passkey
12
+ *
13
+ * @returns Function to delete passkey for the current user
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * const App = () => {
18
+ * const deletePasskey = useDeletePasskey();
19
+ *
20
+ * return (
21
+ * <button
22
+ * onClick={async () => {
23
+ * await deletePasskey(passkeyId);
24
+ * }}
25
+ * >
26
+ * Delete passkey
27
+ * </button>
28
+ * );
29
+ * }
30
+ */
31
+ const useDeletePasskey = () => React.useCallback((passkeyId) => _tslib.__awaiter(void 0, void 0, void 0, function* () { return client.deletePasskey({ passkeyId }); }), []);
32
+
33
+ exports.useDeletePasskey = useDeletePasskey;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Delete passkey
3
+ *
4
+ * @returns Function to delete passkey for the current user
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const App = () => {
9
+ * const deletePasskey = useDeletePasskey();
10
+ *
11
+ * return (
12
+ * <button
13
+ * onClick={async () => {
14
+ * await deletePasskey(passkeyId);
15
+ * }}
16
+ * >
17
+ * Delete passkey
18
+ * </button>
19
+ * );
20
+ * }
21
+ */
22
+ export declare const useDeletePasskey: () => ((passkeyId: string) => Promise<void>);
@@ -0,0 +1,29 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
+ import { useCallback } from 'react';
4
+ import { deletePasskey } from '@dynamic-labs-sdk/client';
5
+
6
+ /**
7
+ * Delete passkey
8
+ *
9
+ * @returns Function to delete passkey for the current user
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const App = () => {
14
+ * const deletePasskey = useDeletePasskey();
15
+ *
16
+ * return (
17
+ * <button
18
+ * onClick={async () => {
19
+ * await deletePasskey(passkeyId);
20
+ * }}
21
+ * >
22
+ * Delete passkey
23
+ * </button>
24
+ * );
25
+ * }
26
+ */
27
+ const useDeletePasskey = () => useCallback((passkeyId) => __awaiter(void 0, void 0, void 0, function* () { return deletePasskey({ passkeyId }); }), []);
28
+
29
+ export { useDeletePasskey };
@@ -31,6 +31,8 @@ require('../../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
31
31
  var dynamicContextProps = require('../../../store/state/dynamicContextProps/dynamicContextProps.cjs');
32
32
  require('../../../store/state/primaryWalletId/primaryWalletId.cjs');
33
33
  var projectSettings = require('../../../store/state/projectSettings/projectSettings.cjs');
34
+ require('../../../locale/locale.cjs');
35
+ var wallets = require('../../../data/api/wallets/wallets.cjs');
34
36
  var useOnboardingCompleteUser = require('../../../client/extension/user/useOnboardingCompleteUser/useOnboardingCompleteUser.cjs');
35
37
  require('../../../context/DynamicContext/DynamicContext.cjs');
36
38
  require('../../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs');
@@ -39,8 +41,6 @@ require('../../../context/ErrorContext/ErrorContext.cjs');
39
41
  require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
40
42
  require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
41
43
  var UserWalletsContext = require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
42
- require('../../../locale/locale.cjs');
43
- var wallets = require('../../../data/api/wallets/wallets.cjs');
44
44
  require('../../../store/state/authMode/authMode.cjs');
45
45
  require('../../../context/VerificationContext/VerificationContext.cjs');
46
46
  require('react-dom');
@@ -96,6 +96,11 @@ require('../../../context/FooterAnimationContext/index.cjs');
96
96
  require('../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
97
97
  require('../../../context/PasskeyContext/PasskeyContext.cjs');
98
98
  require('../../../context/OnrampContext/OnrampContext.cjs');
99
+ var apiUrl = require('../../constants/waas/apiUrl.cjs');
100
+ var useClientSessionKeys = require('../useClientSessionKeys/useClientSessionKeys.cjs');
101
+ var useRefreshUser = require('../useRefreshUser/useRefreshUser.cjs');
102
+ var useGetMfaToken = require('../useGetMfaToken/useGetMfaToken.cjs');
103
+ var constants = require('./constants.cjs');
99
104
  require('../../../store/state/sendBalances.cjs');
100
105
  require('../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
101
106
  require('../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
@@ -104,11 +109,6 @@ require('../../../views/TransactionConfirmationView/TransactionConfirmationView.
104
109
  require('../../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
105
110
  require('../../../../index.cjs');
106
111
  require('../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
107
- var apiUrl = require('../../constants/waas/apiUrl.cjs');
108
- var useClientSessionKeys = require('../useClientSessionKeys/useClientSessionKeys.cjs');
109
- var useRefreshUser = require('../useRefreshUser/useRefreshUser.cjs');
110
- var useGetMfaToken = require('../useGetMfaToken/useGetMfaToken.cjs');
111
- var constants = require('./constants.cjs');
112
112
  require('../../../store/state/tokenBalances.cjs');
113
113
  require('../../../store/state/multichainBalances.cjs');
114
114
  require('../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
@@ -155,6 +155,7 @@ const useDynamicWaas = () => {
155
155
  const { getSignedSessionId } = useClientSessionKeys.useClientSessionKeys();
156
156
  const getMfaToken = useGetMfaToken.useGetMfaToken();
157
157
  const isCookieAuthEnabled = projectSettings$1 && isCookieEnabled.isCookieEnabled(projectSettings$1);
158
+ const isUpgrading = React.useRef(false);
158
159
  const getWalletConnector = React.useCallback((chainName) => {
159
160
  var _a;
160
161
  if (!isCookieAuthEnabled && !authToken) {
@@ -190,6 +191,9 @@ const useDynamicWaas = () => {
190
191
  // If no chain names are provided, filter out chains that already have a wallet
191
192
  // and make a wallet for each enabled chain
192
193
  const createWalletAccount = React.useCallback((chainNames, password) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
194
+ if (isUpgrading.current) {
195
+ return;
196
+ }
193
197
  if (!(enabledChainNames === null || enabledChainNames === void 0 ? void 0 : enabledChainNames.length)) {
194
198
  throw new utils.DynamicError(constants.NO_ENABLED_CHAINS_ERROR);
195
199
  }
@@ -272,15 +276,7 @@ const useDynamicWaas = () => {
272
276
  }
273
277
  setShowAuthFlow(false, { performMultiWalletChecks: false }); // close email otp pin modal
274
278
  return createdWalletAccounts;
275
- }), [
276
- getWalletConnector,
277
- primaryChain,
278
- enabledChainNames,
279
- refresh,
280
- setShowAuthFlow,
281
- user === null || user === void 0 ? void 0 : user.verifiedCredentials,
282
- addedWalletsIds,
283
- ]);
279
+ }), [getWalletConnector, primaryChain, enabledChainNames, setShowAuthFlow]);
284
280
  const needsAutoCreateWalletChains = React.useMemo(() => {
285
281
  if (!user ||
286
282
  !dynamicWaasIsEnabled ||
@@ -320,41 +316,45 @@ const useDynamicWaas = () => {
320
316
  });
321
317
  yield refresh();
322
318
  });
323
- const upgradeToDynamicWaas = React.useCallback((_e) => _tslib.__awaiter(void 0, [_e], void 0, function* ({ privateKey }) {
319
+ const upgradeToDynamicWaas = React.useCallback((_e) => _tslib.__awaiter(void 0, [_e], void 0, function* ({ privateKey, wallet, }) {
320
+ isUpgrading.current = true;
324
321
  if (!primaryWallet) {
325
322
  throw new utils.DynamicError('Primary wallet not found');
326
323
  }
327
- const chainName = primaryWallet.chain;
328
- const walletId = primaryWallet.id;
324
+ const chainName = wallet.chain;
325
+ const walletId = wallet.id;
329
326
  const walletConnector = getWalletConnector(chainName);
330
327
  if (!walletConnector) {
331
328
  throw new utils.DynamicError('Wallet connector not found');
332
329
  }
333
330
  let softDeleteSucceeded = false;
331
+ // 7702 wallets have a -zerodev suffix because it's a credential created on the fly
332
+ const normalizedWalletId = (walletId === null || walletId === void 0 ? void 0 : walletId.replace('-zerodev', '')) || walletId;
334
333
  try {
335
334
  yield wallets.softDeleteEmbeddedWallet({
336
335
  environmentId,
337
- walletId,
336
+ walletId: normalizedWalletId,
338
337
  });
339
338
  softDeleteSucceeded = true;
340
339
  yield walletConnector.importPrivateKey({
341
340
  chainName,
342
341
  privateKey,
343
342
  });
344
- yield refresh();
343
+ isUpgrading.current = false;
345
344
  }
346
345
  catch (error) {
347
346
  // If soft delete succeeded but import failed, try to restore the wallet
348
347
  if (softDeleteSucceeded) {
349
348
  yield wallets.restoreEmbeddedWallet({
350
349
  environmentId,
351
- walletId,
350
+ walletId: normalizedWalletId,
352
351
  });
353
352
  yield refresh();
354
353
  }
354
+ isUpgrading.current = false;
355
355
  throw error instanceof utils.DynamicError
356
356
  ? error
357
- : new utils.DynamicError('Upgrade failed');
357
+ : new utils.DynamicError('Upgrade failed, please try again.');
358
358
  }
359
359
  }), [environmentId, getWalletConnector, primaryWallet, refresh]);
360
360
  const delegateKeyShares = React.useCallback((_f) => _tslib.__awaiter(void 0, [_f], void 0, function* ({ chainName, accountAddress, }) {
@@ -1,5 +1,5 @@
1
1
  import { ChainEnum, MFAAction } from '@dynamic-labs/sdk-api-core';
2
- import { IDynamicWaasConnector } from '@dynamic-labs/wallet-connector-core';
2
+ import { IDynamicWaasConnector, Wallet, WalletConnectorCore } from '@dynamic-labs/wallet-connector-core';
3
3
  export declare const configWaasWalletConnector: ({ walletConnector, environmentId, apiBaseUrl, authToken, relayUrl, authMode, getSignedSessionId, getMfaToken, }: {
4
4
  walletConnector: IDynamicWaasConnector;
5
5
  environmentId: string;
@@ -18,20 +18,21 @@ export declare const useDynamicWaas: () => {
18
18
  accountAddress: string;
19
19
  publicKeyHex: string;
20
20
  rawPublicKey: string | Uint8Array | undefined;
21
- } | undefined)[]>;
21
+ } | undefined)[] | undefined>;
22
22
  delegateKeyShares: ({ chainName, accountAddress, }: {
23
23
  chainName: ChainEnum;
24
24
  accountAddress: string;
25
25
  }) => Promise<void>;
26
26
  dynamicWaasIsEnabled: boolean;
27
- getWaasWallets: () => import("@dynamic-labs/wallet-connector-core").Wallet<import("@dynamic-labs/wallet-connector-core").WalletConnectorCore.WalletConnector>[];
27
+ getWaasWallets: () => Wallet<WalletConnectorCore.WalletConnector>[];
28
28
  getWalletConnector: (chainName: string) => IDynamicWaasConnector | undefined;
29
29
  importPrivateKey: ({ chainName, privateKey, }: {
30
30
  chainName: ChainEnum;
31
31
  privateKey: string;
32
32
  }) => Promise<void>;
33
33
  needsAutoCreateWalletChains: ChainEnum[];
34
- upgradeToDynamicWaas: ({ privateKey }: {
34
+ upgradeToDynamicWaas: ({ privateKey, wallet, }: {
35
35
  privateKey: string;
36
+ wallet: Wallet<WalletConnectorCore.WalletConnector>;
36
37
  }) => Promise<void>;
37
38
  };