@dynamic-labs/sdk-react-core 2.1.0-alpha.2 → 2.1.0-alpha.3

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 (78) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +14 -14
  5. package/src/lib/Main.cjs +5 -0
  6. package/src/lib/Main.js +5 -0
  7. package/src/lib/components/Alert/Alert.cjs +2 -2
  8. package/src/lib/components/Alert/Alert.js +2 -2
  9. package/src/lib/components/Alert/Alert.types.d.ts +1 -0
  10. package/src/lib/components/EmailForm/EmailForm.cjs +1 -1
  11. package/src/lib/components/EmailForm/EmailForm.js +1 -1
  12. package/src/lib/components/PhoneNumberField/PhoneNumberField.cjs +1 -1
  13. package/src/lib/components/PhoneNumberField/PhoneNumberField.js +1 -1
  14. package/src/lib/components/RadioButton/RadioButton.cjs +14 -0
  15. package/src/lib/components/RadioButton/RadioButton.d.ts +5 -0
  16. package/src/lib/components/RadioButton/RadioButton.js +10 -0
  17. package/src/lib/components/RadioButton/index.d.ts +1 -0
  18. package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.cjs +1 -1
  19. package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.d.ts +2 -1
  20. package/src/lib/components/UserProfile/parts/UserProfileField/UserProfileField.js +1 -1
  21. package/src/lib/components/index.d.ts +1 -0
  22. package/src/lib/context/DynamicContext/DynamicContext.cjs +1 -0
  23. package/src/lib/context/DynamicContext/DynamicContext.js +1 -0
  24. package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs +2 -2
  25. package/src/lib/context/DynamicContext/hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.js +2 -2
  26. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.cjs +5 -2
  27. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.js +5 -2
  28. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.cjs +2 -1
  29. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.d.ts +1 -1
  30. package/src/lib/context/DynamicContext/useDynamicContext/useDynamicContext.js +2 -1
  31. package/src/lib/context/ViewContext/ViewContext.cjs +2 -2
  32. package/src/lib/context/ViewContext/ViewContext.js +2 -2
  33. package/src/lib/context/ViewContext/types/index.d.ts +7 -2
  34. package/src/lib/data/api/user/user.cjs +16 -0
  35. package/src/lib/data/api/user/user.js +16 -1
  36. package/src/lib/events/dynamicEvents.d.ts +1 -1
  37. package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +6 -0
  38. package/src/lib/layout/DynamicAuthLayout/Header/header.js +6 -0
  39. package/src/lib/locale/en/translation.cjs +42 -1
  40. package/src/lib/locale/en/translation.d.ts +42 -1
  41. package/src/lib/locale/en/translation.js +42 -1
  42. package/src/lib/shared/types/dynamicEventsCallbacks.d.ts +2 -1
  43. package/src/lib/styles/index.shadow.cjs +1 -1
  44. package/src/lib/styles/index.shadow.js +1 -1
  45. package/src/lib/utils/hooks/index.d.ts +1 -0
  46. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +4 -1
  47. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +4 -1
  48. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +1 -1
  49. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +1 -1
  50. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +8 -0
  51. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +8 -0
  52. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs +1 -1
  53. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +1 -1
  54. package/src/lib/utils/hooks/useMergeUserAccounts/index.d.ts +1 -0
  55. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +99 -0
  56. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.d.ts +4 -0
  57. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +95 -0
  58. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +5 -0
  59. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +6 -1
  60. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +2 -4
  61. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +2 -1
  62. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +2 -4
  63. package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.cjs +3 -3
  64. package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.js +3 -3
  65. package/src/lib/views/CollectUserDataView/useFields.cjs +1 -0
  66. package/src/lib/views/CollectUserDataView/useFields.d.ts +2 -0
  67. package/src/lib/views/CollectUserDataView/useFields.js +1 -0
  68. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.cjs +126 -0
  69. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.d.ts +6 -0
  70. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.js +122 -0
  71. package/src/lib/views/MergeUserAccountsConflictsView/index.d.ts +1 -0
  72. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +123 -0
  73. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.d.ts +4 -0
  74. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +119 -0
  75. package/src/lib/views/MergeUserAccountsView/index.d.ts +1 -0
  76. package/src/lib/views/viewToComponentMap.cjs +4 -0
  77. package/src/lib/views/viewToComponentMap.d.ts +2 -0
  78. package/src/lib/views/viewToComponentMap.js +4 -0
@@ -165,7 +165,9 @@ const useAuthLayoutChecks = () => {
165
165
  view.type === 'qr-code' ||
166
166
  view.type === 'wallet-used' ||
167
167
  view.type === 'email-wallet-otp-verification-view' ||
168
- view.type === 'farcaster-connect-view');
168
+ view.type === 'farcaster-connect-view' ||
169
+ view.type === 'merge-user-accounts' ||
170
+ view.type === 'merge-user-accounts-conflicts');
169
171
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
170
172
  view.type !== 'login-with-email-verification' &&
171
173
  view.type !== 'login-with-sms-verification' &&
@@ -189,6 +191,7 @@ const useAuthLayoutChecks = () => {
189
191
  view.type === 'passkey-intro' ||
190
192
  view.type === 'qr-code' ||
191
193
  view.type === 'farcaster-connect-view' ||
194
+ view.type === 'merge-user-accounts-conflicts' ||
192
195
  (view.type === 'merge-user-accounts-with-same-email' && !user);
193
196
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
194
197
  const shouldHideDynamicFooterSeparator = showDynamicFooter && showToSFooter;
@@ -161,7 +161,9 @@ const useAuthLayoutChecks = () => {
161
161
  view.type === 'qr-code' ||
162
162
  view.type === 'wallet-used' ||
163
163
  view.type === 'email-wallet-otp-verification-view' ||
164
- view.type === 'farcaster-connect-view');
164
+ view.type === 'farcaster-connect-view' ||
165
+ view.type === 'merge-user-accounts' ||
166
+ view.type === 'merge-user-accounts-conflicts');
165
167
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
166
168
  view.type !== 'login-with-email-verification' &&
167
169
  view.type !== 'login-with-sms-verification' &&
@@ -185,6 +187,7 @@ const useAuthLayoutChecks = () => {
185
187
  view.type === 'passkey-intro' ||
186
188
  view.type === 'qr-code' ||
187
189
  view.type === 'farcaster-connect-view' ||
190
+ view.type === 'merge-user-accounts-conflicts' ||
188
191
  (view.type === 'merge-user-accounts-with-same-email' && !user);
189
192
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
190
193
  const shouldHideDynamicFooterSeparator = showDynamicFooter && showToSFooter;
@@ -132,7 +132,7 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
132
132
  }
133
133
  setUser(updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(signersResponse.jwt, signersResponse.minifiedJwt));
134
134
  setShowAuthFlow(false, { performMultiWalletChecks: false });
135
- dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials);
135
+ dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials, authToken);
136
136
  }
137
137
  catch (err) {
138
138
  setError(err);
@@ -128,7 +128,7 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
128
128
  }
129
129
  setUser(updateJWTAndCreateUserProfile(signersResponse.jwt, signersResponse.minifiedJwt));
130
130
  setShowAuthFlow(false, { performMultiWalletChecks: false });
131
- dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials);
131
+ dynamicEvents.emit('embeddedWalletCreated', passkeyWallet, turnkeyVerifiedCredentials, authToken);
132
132
  }
133
133
  catch (err) {
134
134
  setError(err);
@@ -97,6 +97,14 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
97
97
  copykey: 'dyn_login.title.wallet_only',
98
98
  heading: t('dyn_login.title.wallet_only'),
99
99
  },
100
+ 'merge-user-accounts': {
101
+ copykey: 'dyn_merge_user_accounts.same_wallet.title',
102
+ heading: t('dyn_merge_user_accounts.same_wallet.title'),
103
+ },
104
+ 'merge-user-accounts-conflicts': {
105
+ copykey: 'dyn_merge_user_accounts_conflicts.title',
106
+ heading: t('dyn_merge_user_accounts_conflicts.title'),
107
+ },
100
108
  'mfa-choose-device': {
101
109
  copykey: 'dyn_mfa.choose_device_view.title',
102
110
  heading: t('dyn_mfa.choose_device_view.title'),
@@ -93,6 +93,14 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
93
93
  copykey: 'dyn_login.title.wallet_only',
94
94
  heading: t('dyn_login.title.wallet_only'),
95
95
  },
96
+ 'merge-user-accounts': {
97
+ copykey: 'dyn_merge_user_accounts.same_wallet.title',
98
+ heading: t('dyn_merge_user_accounts.same_wallet.title'),
99
+ },
100
+ 'merge-user-accounts-conflicts': {
101
+ copykey: 'dyn_merge_user_accounts_conflicts.title',
102
+ heading: t('dyn_merge_user_accounts_conflicts.title'),
103
+ },
96
104
  'mfa-choose-device': {
97
105
  copykey: 'dyn_mfa.choose_device_view.title',
98
106
  heading: t('dyn_mfa.choose_device_view.title'),
@@ -162,7 +162,7 @@ const useCoinbaseMPC = () => {
162
162
  connector,
163
163
  id: jwtVerifiedCredential.id,
164
164
  };
165
- dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, jwtVerifiedCredential);
165
+ dynamicEvents.dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, jwtVerifiedCredential, jwt);
166
166
  return coinbaseMPCWallet;
167
167
  }
168
168
  catch (error) {
@@ -158,7 +158,7 @@ const useCoinbaseMPC = () => {
158
158
  connector,
159
159
  id: jwtVerifiedCredential.id,
160
160
  };
161
- dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, jwtVerifiedCredential);
161
+ dynamicEvents.emit('embeddedWalletCreated', coinbaseMPCWallet, jwtVerifiedCredential, jwt);
162
162
  return coinbaseMPCWallet;
163
163
  }
164
164
  catch (error) {
@@ -0,0 +1 @@
1
+ export { useMergeUserAccounts } from './useMergeUserAccounts';
@@ -0,0 +1,99 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
7
+ require('@dynamic-labs/wallet-connector-core');
8
+ require('@dynamic-labs/sdk-api-core');
9
+ require('../../../shared/logger.cjs');
10
+ require('@dynamic-labs/iconic');
11
+ require('react/jsx-runtime');
12
+ require('../../../context/ViewContext/ViewContext.cjs');
13
+ require('react');
14
+ require('@dynamic-labs/wallet-book');
15
+ require('../../constants/colors.cjs');
16
+ require('../../constants/values.cjs');
17
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
18
+ require('@dynamic-labs/utils');
19
+ require('../../../shared/consts/index.cjs');
20
+ require('@dynamic-labs/multi-wallet');
21
+ var getAuthToken = require('../../functions/getAuthToken/getAuthToken.cjs');
22
+ require('react-international-phone');
23
+ require('viem');
24
+ require('viem/chains');
25
+ require('../../../config/ApiEndpoint.cjs');
26
+ require('../../../locale/locale.cjs');
27
+ var user = require('../../../data/api/user/user.cjs');
28
+ var updateJWTAndCreateUserProfile = require('../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.cjs');
29
+ require('../../../context/DynamicContext/DynamicContext.cjs');
30
+ require('../../../events/dynamicEvents.cjs');
31
+ require('../../../context/CaptchaContext/CaptchaContext.cjs');
32
+ require('../../../context/ErrorContext/ErrorContext.cjs');
33
+ require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
34
+ require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
35
+ var UserWalletsContext = require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
36
+ require('../../../context/VerificationContext/VerificationContext.cjs');
37
+ require('react-dom');
38
+ require('../../../context/WalletContext/WalletContext.cjs');
39
+ require('../../../context/ThemeContext/ThemeContext.cjs');
40
+ require('@dynamic-labs/types');
41
+ require('yup');
42
+ require('../../../context/MockContext/MockContext.cjs');
43
+ require('react-i18next');
44
+ require('../../../context/FieldsStateContext/FieldsStateContext.cjs');
45
+ require('../useUserUpdateRequest/useUpdateUser/useUpdateUser.cjs');
46
+ require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
47
+ require('@dynamic-labs/rpc-providers');
48
+ require('../../../components/Alert/Alert.cjs');
49
+ require('../../../components/ShadowDOM/ShadowDOM.cjs');
50
+ require('../../../components/IconButton/IconButton.cjs');
51
+ require('../../../components/InlineWidget/InlineWidget.cjs');
52
+ require('../../../components/Input/Input.cjs');
53
+ require('../../../components/IsBrowser/IsBrowser.cjs');
54
+ require('../../../components/MenuList/Dropdown/Dropdown.cjs');
55
+ require('../../../components/Transition/ZoomTransition/ZoomTransition.cjs');
56
+ require('../../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
57
+ require('../../../components/Transition/OpacityTransition/OpacityTransition.cjs');
58
+ require('../../../components/OverlayCard/OverlayCardTarget/OverlayCardTarget.cjs');
59
+ require('../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
60
+ require('../../../components/Popper/Popper/Popper.cjs');
61
+ require('../../../components/Popper/PopperContext/PopperContext.cjs');
62
+ require('react-focus-lock');
63
+ require('qrcode');
64
+ require('formik');
65
+ require('../../../views/WalletList/WalletList.cjs');
66
+ require('../../../context/SocialRedirectContext/SocialRedirectContext.cjs');
67
+ require('../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
68
+ require('@hcaptcha/react-hcaptcha');
69
+ require('../../../context/LoadingContext/LoadingContext.cjs');
70
+ require('../../../context/FooterAnimationContext/index.cjs');
71
+ require('../../../views/LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.cjs');
72
+ require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
73
+ require('../../../context/PasskeyContext/PasskeyContext.cjs');
74
+ require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
75
+ require('../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
76
+ require('../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
77
+ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
78
+ var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
79
+
80
+ const useMergeUserAccounts = () => {
81
+ const { environmentId, setShowAuthFlow, setUser } = useInternalDynamicContext.useInternalDynamicContext();
82
+ const { addedWalletsIds } = UserWalletsContext.useInternalUserWallets();
83
+ const mergeUserAccounts = (mergeConflictResolutions) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
84
+ const authToken = getAuthToken.getAuthToken();
85
+ const response = yield user.verifyMergeUsers(authToken, environmentId, mergeConflictResolutions);
86
+ const userProfile = updateJWTAndCreateUserProfile.updateJWTAndCreateUserProfile(response === null || response === void 0 ? void 0 : response.jwt, response === null || response === void 0 ? void 0 : response.minifiedJwt);
87
+ setUser(userProfile);
88
+ const walletId = userProfile.lastVerifiedCredentialId;
89
+ if (walletId) {
90
+ addedWalletsIds.current.push(walletId);
91
+ }
92
+ setShowAuthFlow(false);
93
+ });
94
+ return {
95
+ mergeUserAccounts,
96
+ };
97
+ };
98
+
99
+ exports.useMergeUserAccounts = useMergeUserAccounts;
@@ -0,0 +1,4 @@
1
+ import { MergeUserConflictResolution } from '@dynamic-labs/sdk-api-core';
2
+ export declare const useMergeUserAccounts: () => {
3
+ mergeUserAccounts: (mergeConflictResolutions: MergeUserConflictResolution[]) => Promise<void>;
4
+ };
@@ -0,0 +1,95 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
+ import '@dynamic-labs/wallet-connector-core';
4
+ import '@dynamic-labs/sdk-api-core';
5
+ import '../../../shared/logger.js';
6
+ import '@dynamic-labs/iconic';
7
+ import 'react/jsx-runtime';
8
+ import '../../../context/ViewContext/ViewContext.js';
9
+ import 'react';
10
+ import '@dynamic-labs/wallet-book';
11
+ import '../../constants/colors.js';
12
+ import '../../constants/values.js';
13
+ import '../../../shared/utils/classes/storage/localStorage.js';
14
+ import '@dynamic-labs/utils';
15
+ import '../../../shared/consts/index.js';
16
+ import '@dynamic-labs/multi-wallet';
17
+ import { getAuthToken } from '../../functions/getAuthToken/getAuthToken.js';
18
+ import 'react-international-phone';
19
+ import 'viem';
20
+ import 'viem/chains';
21
+ import '../../../config/ApiEndpoint.js';
22
+ import '../../../locale/locale.js';
23
+ import { verifyMergeUsers } from '../../../data/api/user/user.js';
24
+ import { updateJWTAndCreateUserProfile } from '../../functions/updateJWTAndCreateUserProfile/updateJWTAndCreateUserProfile.js';
25
+ import '../../../context/DynamicContext/DynamicContext.js';
26
+ import '../../../events/dynamicEvents.js';
27
+ import '../../../context/CaptchaContext/CaptchaContext.js';
28
+ import '../../../context/ErrorContext/ErrorContext.js';
29
+ import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
30
+ import '../../../context/AccountExistsContext/AccountExistsContext.js';
31
+ import { useInternalUserWallets } from '../../../context/UserWalletsContext/UserWalletsContext.js';
32
+ import '../../../context/VerificationContext/VerificationContext.js';
33
+ import 'react-dom';
34
+ import '../../../context/WalletContext/WalletContext.js';
35
+ import '../../../context/ThemeContext/ThemeContext.js';
36
+ import '@dynamic-labs/types';
37
+ import 'yup';
38
+ import '../../../context/MockContext/MockContext.js';
39
+ import 'react-i18next';
40
+ import '../../../context/FieldsStateContext/FieldsStateContext.js';
41
+ import '../useUserUpdateRequest/useUpdateUser/useUpdateUser.js';
42
+ import '../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
43
+ import '@dynamic-labs/rpc-providers';
44
+ import '../../../components/Alert/Alert.js';
45
+ import '../../../components/ShadowDOM/ShadowDOM.js';
46
+ import '../../../components/IconButton/IconButton.js';
47
+ import '../../../components/InlineWidget/InlineWidget.js';
48
+ import '../../../components/Input/Input.js';
49
+ import '../../../components/IsBrowser/IsBrowser.js';
50
+ import '../../../components/MenuList/Dropdown/Dropdown.js';
51
+ import '../../../components/Transition/ZoomTransition/ZoomTransition.js';
52
+ import '../../../components/Transition/SlideInUpTransition/SlideInUpTransition.js';
53
+ import '../../../components/Transition/OpacityTransition/OpacityTransition.js';
54
+ import '../../../components/OverlayCard/OverlayCardTarget/OverlayCardTarget.js';
55
+ import '../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
56
+ import '../../../components/Popper/Popper/Popper.js';
57
+ import '../../../components/Popper/PopperContext/PopperContext.js';
58
+ import 'react-focus-lock';
59
+ import 'qrcode';
60
+ import 'formik';
61
+ import '../../../views/WalletList/WalletList.js';
62
+ import '../../../context/SocialRedirectContext/SocialRedirectContext.js';
63
+ import '../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
64
+ import '@hcaptcha/react-hcaptcha';
65
+ import '../../../context/LoadingContext/LoadingContext.js';
66
+ import '../../../context/FooterAnimationContext/index.js';
67
+ import '../../../views/LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.js';
68
+ import '../../../context/WalletGroupContext/WalletGroupContext.js';
69
+ import '../../../context/PasskeyContext/PasskeyContext.js';
70
+ import '../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
71
+ import '../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
72
+ import '../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.js';
73
+ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
74
+ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
75
+
76
+ const useMergeUserAccounts = () => {
77
+ const { environmentId, setShowAuthFlow, setUser } = useInternalDynamicContext();
78
+ const { addedWalletsIds } = useInternalUserWallets();
79
+ const mergeUserAccounts = (mergeConflictResolutions) => __awaiter(void 0, void 0, void 0, function* () {
80
+ const authToken = getAuthToken();
81
+ const response = yield verifyMergeUsers(authToken, environmentId, mergeConflictResolutions);
82
+ const userProfile = updateJWTAndCreateUserProfile(response === null || response === void 0 ? void 0 : response.jwt, response === null || response === void 0 ? void 0 : response.minifiedJwt);
83
+ setUser(userProfile);
84
+ const walletId = userProfile.lastVerifiedCredentialId;
85
+ if (walletId) {
86
+ addedWalletsIds.current.push(walletId);
87
+ }
88
+ setShowAuthFlow(false);
89
+ });
90
+ return {
91
+ mergeUserAccounts,
92
+ };
93
+ };
94
+
95
+ export { useMergeUserAccounts };
@@ -177,6 +177,11 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
177
177
  handleDisconnectWallet({ endSession: false, walletConnector });
178
178
  return handleWalletUsedError(e);
179
179
  }
180
+ if (e instanceof utils.MergeAccountsConfirmationError) {
181
+ setView('merge-user-accounts', Object.assign({}, e));
182
+ setShowAuthFlow(true);
183
+ return;
184
+ }
180
185
  if (e instanceof utils.ChainalysisError) {
181
186
  handleDisconnectWallet({ walletConnector });
182
187
  setDeniedAddress(address);
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
- import { DynamicError, WalletUsedError, ChainalysisError, GateBlockedError, NoAccessError, AccountExistsError } from '@dynamic-labs/utils';
3
+ import { DynamicError, WalletUsedError, MergeAccountsConfirmationError, ChainalysisError, GateBlockedError, NoAccessError, AccountExistsError } from '@dynamic-labs/utils';
4
4
  import { isSocialWalletConnector } from '@dynamic-labs/wallet-connector-core';
5
5
  import 'react';
6
6
  import '../../../events/dynamicEvents.js';
@@ -173,6 +173,11 @@ const useVerifyWallet = ({ consumeNonce, displaySiweStatement, environmentId, pr
173
173
  handleDisconnectWallet({ endSession: false, walletConnector });
174
174
  return handleWalletUsedError(e);
175
175
  }
176
+ if (e instanceof MergeAccountsConfirmationError) {
177
+ setView('merge-user-accounts', Object.assign({}, e));
178
+ setShowAuthFlow(true);
179
+ return;
180
+ }
176
181
  if (e instanceof ChainalysisError) {
177
182
  handleDisconnectWallet({ walletConnector });
178
183
  setDeniedAddress(address);
@@ -20,7 +20,7 @@ require('../../../shared/consts/index.cjs');
20
20
  require('../../../events/dynamicEvents.cjs');
21
21
  var useWalletConnectorEvent = require('../events/useWalletConnectorEvent/useWalletConnectorEvent.cjs');
22
22
 
23
- const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
23
+ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
24
24
  useWalletConnectorEvent.useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
25
25
  logger.logger.debug('primary wallet disconnect');
26
26
  handleLogOut();
@@ -109,13 +109,11 @@ const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetS
109
109
  }));
110
110
  useWalletConnectorEvent.useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', (affectedConnector) => {
111
111
  logger.logger.debug('secondary wallet disconnect');
112
- // argent sends a disconnect event when the user adds a new account
113
112
  if (authMode === 'connect-only') {
114
113
  // Get all wallets with this connector
115
114
  const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === affectedConnector.key);
116
115
  for (const wallet of affectedWallets) {
117
- if (wallet.connector.key === 'argentx')
118
- refreshConnectedWallet(wallet.id, wallet.connector);
116
+ disconnectWallet(wallet.id);
119
117
  }
120
118
  }
121
119
  });
@@ -4,6 +4,7 @@ import { IDynamicContext } from '../../../context/DynamicContext/types';
4
4
  import { AuthModeType, MultiWalletWidgetState, Wallet, WalletWithAction } from '../../../shared';
5
5
  import { MultiWalletWidgetStateSetter } from '../multiWallet';
6
6
  export type UseWalletEventListenersArgs = {
7
+ disconnectWallet: (walletId: string) => Promise<void>;
7
8
  handleLogOut(): Promise<void>;
8
9
  multiWallet: boolean;
9
10
  multiWalletWidgetState: MultiWalletWidgetState;
@@ -19,4 +20,4 @@ export type UseWalletEventListenersArgs = {
19
20
  authMode: AuthModeType;
20
21
  refreshConnectedWallet: (walletId: string, walletConnector: WalletConnector, shouldCallCallback?: boolean) => Promise<void>;
21
22
  };
22
- export declare const useWalletEventListeners: ({ handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }: UseWalletEventListenersArgs) => void;
23
+ export declare const useWalletEventListeners: ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }: UseWalletEventListenersArgs) => void;
@@ -16,7 +16,7 @@ import '../../../shared/consts/index.js';
16
16
  import '../../../events/dynamicEvents.js';
17
17
  import { useWalletConnectorEvent } from '../events/useWalletConnectorEvent/useWalletConnectorEvent.js';
18
18
 
19
- const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
19
+ const useWalletEventListeners = ({ disconnectWallet, handleLogOut, multiWallet, multiWalletWidgetState, primaryWallet, secondaryWallets, selectedWalletConnector, selectedWalletWithAction, setSelectedWalletConnectorKey, setSelectedWalletWithAction, setMultiWalletWidgetState, user, setPrimaryWalletId, authMode, refreshConnectedWallet, }) => {
20
20
  useWalletConnectorEvent(primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector, 'disconnect', () => {
21
21
  logger.debug('primary wallet disconnect');
22
22
  handleLogOut();
@@ -105,13 +105,11 @@ const useWalletEventListeners = ({ handleLogOut, multiWallet, multiWalletWidgetS
105
105
  }));
106
106
  useWalletConnectorEvent(uniqueNonPrimaryWallets, 'disconnect', (affectedConnector) => {
107
107
  logger.debug('secondary wallet disconnect');
108
- // argent sends a disconnect event when the user adds a new account
109
108
  if (authMode === 'connect-only') {
110
109
  // Get all wallets with this connector
111
110
  const affectedWallets = secondaryWallets.filter(({ connector }) => connector.key === affectedConnector.key);
112
111
  for (const wallet of affectedWallets) {
113
- if (wallet.connector.key === 'argentx')
114
- refreshConnectedWallet(wallet.id, wallet.connector);
112
+ disconnectWallet(wallet.id);
115
113
  }
116
114
  }
117
115
  });
@@ -78,7 +78,7 @@ require('@hcaptcha/react-hcaptcha');
78
78
  require('../../../LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.cjs');
79
79
  var Select = require('../../../../components/Select/Select.cjs');
80
80
 
81
- const UserField = ({ fieldData: { key, label, type }, fieldSettings: { enabled, name, required, verify }, errors, touched, disabled, policiesConsentInnerComponentArray, }) => {
81
+ const UserField = ({ fieldData: { key, label, type, autoComplete }, fieldSettings: { enabled, name, required, verify }, errors, touched, disabled, policiesConsentInnerComponentArray, }) => {
82
82
  if (name === 'tShirtSize') {
83
83
  return (jsxRuntime.jsx(formik.Field, { copykey: key, as: Select.Select, type: type, id: name, name: name, label: label, error: errors[name] && touched[name], selectDataTestId: 'tShirtSizeSelect', message: touched[name] && getDisplayErrorMessage.getDisplayErrorMessage(label, errors[name]), disabled: disabled, children: index.tShirtSizes.map((size) => (jsxRuntime.jsx("option", { value: size, children: size }, size))) }, name));
84
84
  }
@@ -94,10 +94,10 @@ const UserField = ({ fieldData: { key, label, type }, fieldSettings: { enabled,
94
94
  else if (name === 'phoneNumber') {
95
95
  return (jsxRuntime.jsx(formik.Field, { name: name, as: UserPhoneField.UserPhoneField, disabled: disabled, label: label, required: required, error: touched[name] && errors[name]
96
96
  ? getDisplayErrorMessage.getDisplayErrorMessage(label, errors[name])
97
- : undefined, verify: verify }, name));
97
+ : undefined, verify: verify, autoComplete: autoComplete }, name));
98
98
  }
99
99
  else {
100
- return (jsxRuntime.jsx(formik.Field, { copykey: key, disabled: disabled, as: Input.Input, type: type, id: name, name: name, label: label, optional: enabled && !required, error: errors[name] && touched[name], message: touched[name] && getDisplayErrorMessage.getDisplayErrorMessage(label, errors[name]) }, name));
100
+ return (jsxRuntime.jsx(formik.Field, { copykey: key, disabled: disabled, as: Input.Input, type: type, id: name, name: name, label: label, optional: enabled && !required, error: errors[name] && touched[name], message: touched[name] && getDisplayErrorMessage.getDisplayErrorMessage(label, errors[name]), autoComplete: autoComplete }, name));
101
101
  }
102
102
  };
103
103
 
@@ -74,7 +74,7 @@ import '@hcaptcha/react-hcaptcha';
74
74
  import '../../../LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.js';
75
75
  import { Select } from '../../../../components/Select/Select.js';
76
76
 
77
- const UserField = ({ fieldData: { key, label, type }, fieldSettings: { enabled, name, required, verify }, errors, touched, disabled, policiesConsentInnerComponentArray, }) => {
77
+ const UserField = ({ fieldData: { key, label, type, autoComplete }, fieldSettings: { enabled, name, required, verify }, errors, touched, disabled, policiesConsentInnerComponentArray, }) => {
78
78
  if (name === 'tShirtSize') {
79
79
  return (jsx(Field, { copykey: key, as: Select, type: type, id: name, name: name, label: label, error: errors[name] && touched[name], selectDataTestId: 'tShirtSizeSelect', message: touched[name] && getDisplayErrorMessage(label, errors[name]), disabled: disabled, children: tShirtSizes.map((size) => (jsx("option", { value: size, children: size }, size))) }, name));
80
80
  }
@@ -90,10 +90,10 @@ const UserField = ({ fieldData: { key, label, type }, fieldSettings: { enabled,
90
90
  else if (name === 'phoneNumber') {
91
91
  return (jsx(Field, { name: name, as: UserPhoneField, disabled: disabled, label: label, required: required, error: touched[name] && errors[name]
92
92
  ? getDisplayErrorMessage(label, errors[name])
93
- : undefined, verify: verify }, name));
93
+ : undefined, verify: verify, autoComplete: autoComplete }, name));
94
94
  }
95
95
  else {
96
- return (jsx(Field, { copykey: key, disabled: disabled, as: Input, type: type, id: name, name: name, label: label, optional: enabled && !required, error: errors[name] && touched[name], message: touched[name] && getDisplayErrorMessage(label, errors[name]) }, name));
96
+ return (jsx(Field, { copykey: key, disabled: disabled, as: Input, type: type, id: name, name: name, label: label, optional: enabled && !required, error: errors[name] && touched[name], message: touched[name] && getDisplayErrorMessage(label, errors[name]), autoComplete: autoComplete }, name));
97
97
  }
98
98
  };
99
99
 
@@ -46,6 +46,7 @@ const useFields = () => {
46
46
  validation: yup.string().oneOf(index.countryCodes.map((c) => c.code)),
47
47
  },
48
48
  email: {
49
+ autoComplete: 'email',
49
50
  key: 'dyn_collect_user_data.fields.email.label',
50
51
  label: t('dyn_collect_user_data.fields.email.label'),
51
52
  type: 'email',
@@ -4,6 +4,7 @@ export type FieldConfig = {
4
4
  key: string;
5
5
  type: string;
6
6
  validation: StringSchema | BooleanSchema;
7
+ autoComplete?: string;
7
8
  };
8
9
  export declare const useFields: () => {
9
10
  fieldsConfig: {
@@ -20,6 +21,7 @@ export declare const useFields: () => {
20
21
  validation: StringSchema<string | undefined, import("yup/lib/types").AnyObject, string | undefined>;
21
22
  };
22
23
  email: {
24
+ autoComplete: string;
23
25
  key: string;
24
26
  label: string;
25
27
  type: string;
@@ -42,6 +42,7 @@ const useFields = () => {
42
42
  validation: string().oneOf(countryCodes.map((c) => c.code)),
43
43
  },
44
44
  email: {
45
+ autoComplete: 'email',
45
46
  key: 'dyn_collect_user_data.fields.email.label',
46
47
  label: t('dyn_collect_user_data.fields.email.label'),
47
48
  type: 'email',