@dynamic-labs/sdk-react-core 2.1.0-alpha.1 → 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 (82) hide show
  1. package/CHANGELOG.md +20 -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/data/api/wallets/wallets.cjs +5 -1
  37. package/src/lib/data/api/wallets/wallets.js +5 -1
  38. package/src/lib/events/dynamicEvents.d.ts +1 -1
  39. package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +6 -0
  40. package/src/lib/layout/DynamicAuthLayout/Header/header.js +6 -0
  41. package/src/lib/locale/en/translation.cjs +43 -2
  42. package/src/lib/locale/en/translation.d.ts +43 -2
  43. package/src/lib/locale/en/translation.js +43 -2
  44. package/src/lib/shared/types/dynamicEventsCallbacks.d.ts +2 -1
  45. package/src/lib/styles/index.shadow.cjs +1 -1
  46. package/src/lib/styles/index.shadow.js +1 -1
  47. package/src/lib/utils/hooks/index.d.ts +1 -0
  48. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +22 -17
  49. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +22 -17
  50. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +1 -1
  51. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +1 -1
  52. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +8 -0
  53. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +8 -0
  54. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs +1 -1
  55. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +1 -1
  56. package/src/lib/utils/hooks/useMergeUserAccounts/index.d.ts +1 -0
  57. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.cjs +99 -0
  58. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.d.ts +4 -0
  59. package/src/lib/utils/hooks/useMergeUserAccounts/useMergeUserAccounts.js +95 -0
  60. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +5 -0
  61. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +6 -1
  62. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +2 -4
  63. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +2 -1
  64. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +2 -4
  65. package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.cjs +3 -3
  66. package/src/lib/views/CollectUserDataView/UserDataFields/UserField/UserField.js +3 -3
  67. package/src/lib/views/CollectUserDataView/useFields.cjs +1 -0
  68. package/src/lib/views/CollectUserDataView/useFields.d.ts +2 -0
  69. package/src/lib/views/CollectUserDataView/useFields.js +1 -0
  70. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.cjs +126 -0
  71. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.d.ts +6 -0
  72. package/src/lib/views/MergeUserAccountsConflictsView/MergeUserAccountsConflictsView.js +122 -0
  73. package/src/lib/views/MergeUserAccountsConflictsView/index.d.ts +1 -0
  74. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.cjs +123 -0
  75. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.d.ts +4 -0
  76. package/src/lib/views/MergeUserAccountsView/MergeUserAccountsView.js +119 -0
  77. package/src/lib/views/MergeUserAccountsView/index.d.ts +1 -0
  78. package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.cjs +3 -3
  79. package/src/lib/views/MergeUserAccountsWithSameEmailView/MergeUserAccountsWithSameEmailView.js +3 -3
  80. package/src/lib/views/viewToComponentMap.cjs +4 -0
  81. package/src/lib/views/viewToComponentMap.d.ts +2 -0
  82. package/src/lib/views/viewToComponentMap.js +4 -0
@@ -77,8 +77,9 @@ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCa
77
77
  var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
78
78
 
79
79
  const useAuthLayoutChecks = () => {
80
+ var _a;
80
81
  const { view } = ViewContext.useViewContext();
81
- const { user, customPrivacyPolicy, customTermsOfServices, privacyPolicyUrl, termsOfServiceUrl, isBridgeFlow, authMode, } = useInternalDynamicContext.useInternalDynamicContext();
82
+ const { user, customPrivacyPolicy, customTermsOfServices, privacyPolicyUrl, termsOfServiceUrl, isBridgeFlow, authMode, projectSettings, } = useInternalDynamicContext.useInternalDynamicContext();
82
83
  const { isFooterExpanded } = index.useFooterAnimationContext();
83
84
  const { mockedSDK } = MockContext.useMockContext();
84
85
  const { helpHeaderData } = useDynamicLayoutData.useDynamicLayoutData({
@@ -148,22 +149,25 @@ const useAuthLayoutChecks = () => {
148
149
  privacyPolicyUrl ||
149
150
  customPrivacyPolicy ||
150
151
  customTermsOfServices))));
151
- const showDynamicFooter = view.type === 'login-with-email-or-wallet' ||
152
- view.type === 'login-with-email-or-wallet-full-wallet-list' ||
153
- view.type === 'login-with-wallet-only' ||
154
- view.type === 'login-with-email-verification' ||
155
- view.type === 'login-with-sms-verification' ||
156
- view.type === 'verify-email' ||
157
- view.type === 'verify-sms' ||
158
- view.type === 'pending-connect' ||
159
- view.type === 'wallet-group' ||
160
- view.type === 'select-wallet-in-wallet-group' ||
161
- view.type === 'select-hardware-wallet' ||
162
- view.type === 'pending-signature' ||
163
- view.type === 'qr-code' ||
164
- view.type === 'wallet-used' ||
165
- view.type === 'email-wallet-otp-verification-view' ||
166
- view.type === 'farcaster-connect-view';
152
+ const showDynamicFooter = Boolean((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.displayDynamicMessaging) &&
153
+ (view.type === 'login-with-email-or-wallet' ||
154
+ view.type === 'login-with-email-or-wallet-full-wallet-list' ||
155
+ view.type === 'login-with-wallet-only' ||
156
+ view.type === 'login-with-email-verification' ||
157
+ view.type === 'login-with-sms-verification' ||
158
+ view.type === 'verify-email' ||
159
+ view.type === 'verify-sms' ||
160
+ view.type === 'pending-connect' ||
161
+ view.type === 'wallet-group' ||
162
+ view.type === 'select-wallet-in-wallet-group' ||
163
+ view.type === 'select-hardware-wallet' ||
164
+ view.type === 'pending-signature' ||
165
+ view.type === 'qr-code' ||
166
+ view.type === 'wallet-used' ||
167
+ view.type === 'email-wallet-otp-verification-view' ||
168
+ view.type === 'farcaster-connect-view' ||
169
+ view.type === 'merge-user-accounts' ||
170
+ view.type === 'merge-user-accounts-conflicts');
167
171
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
168
172
  view.type !== 'login-with-email-verification' &&
169
173
  view.type !== 'login-with-sms-verification' &&
@@ -187,6 +191,7 @@ const useAuthLayoutChecks = () => {
187
191
  view.type === 'passkey-intro' ||
188
192
  view.type === 'qr-code' ||
189
193
  view.type === 'farcaster-connect-view' ||
194
+ view.type === 'merge-user-accounts-conflicts' ||
190
195
  (view.type === 'merge-user-accounts-with-same-email' && !user);
191
196
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
192
197
  const shouldHideDynamicFooterSeparator = showDynamicFooter && showToSFooter;
@@ -73,8 +73,9 @@ import '../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCar
73
73
  import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
74
74
 
75
75
  const useAuthLayoutChecks = () => {
76
+ var _a;
76
77
  const { view } = useViewContext();
77
- const { user, customPrivacyPolicy, customTermsOfServices, privacyPolicyUrl, termsOfServiceUrl, isBridgeFlow, authMode, } = useInternalDynamicContext();
78
+ const { user, customPrivacyPolicy, customTermsOfServices, privacyPolicyUrl, termsOfServiceUrl, isBridgeFlow, authMode, projectSettings, } = useInternalDynamicContext();
78
79
  const { isFooterExpanded } = useFooterAnimationContext();
79
80
  const { mockedSDK } = useMockContext();
80
81
  const { helpHeaderData } = useDynamicLayoutData({
@@ -144,22 +145,25 @@ const useAuthLayoutChecks = () => {
144
145
  privacyPolicyUrl ||
145
146
  customPrivacyPolicy ||
146
147
  customTermsOfServices))));
147
- const showDynamicFooter = view.type === 'login-with-email-or-wallet' ||
148
- view.type === 'login-with-email-or-wallet-full-wallet-list' ||
149
- view.type === 'login-with-wallet-only' ||
150
- view.type === 'login-with-email-verification' ||
151
- view.type === 'login-with-sms-verification' ||
152
- view.type === 'verify-email' ||
153
- view.type === 'verify-sms' ||
154
- view.type === 'pending-connect' ||
155
- view.type === 'wallet-group' ||
156
- view.type === 'select-wallet-in-wallet-group' ||
157
- view.type === 'select-hardware-wallet' ||
158
- view.type === 'pending-signature' ||
159
- view.type === 'qr-code' ||
160
- view.type === 'wallet-used' ||
161
- view.type === 'email-wallet-otp-verification-view' ||
162
- view.type === 'farcaster-connect-view';
148
+ const showDynamicFooter = Boolean((_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.displayDynamicMessaging) &&
149
+ (view.type === 'login-with-email-or-wallet' ||
150
+ view.type === 'login-with-email-or-wallet-full-wallet-list' ||
151
+ view.type === 'login-with-wallet-only' ||
152
+ view.type === 'login-with-email-verification' ||
153
+ view.type === 'login-with-sms-verification' ||
154
+ view.type === 'verify-email' ||
155
+ view.type === 'verify-sms' ||
156
+ view.type === 'pending-connect' ||
157
+ view.type === 'wallet-group' ||
158
+ view.type === 'select-wallet-in-wallet-group' ||
159
+ view.type === 'select-hardware-wallet' ||
160
+ view.type === 'pending-signature' ||
161
+ view.type === 'qr-code' ||
162
+ view.type === 'wallet-used' ||
163
+ view.type === 'email-wallet-otp-verification-view' ||
164
+ view.type === 'farcaster-connect-view' ||
165
+ view.type === 'merge-user-accounts' ||
166
+ view.type === 'merge-user-accounts-conflicts');
163
167
  const showCloseButton = view.type !== 'login-with-email-or-wallet-full-wallet-list' &&
164
168
  view.type !== 'login-with-email-verification' &&
165
169
  view.type !== 'login-with-sms-verification' &&
@@ -183,6 +187,7 @@ const useAuthLayoutChecks = () => {
183
187
  view.type === 'passkey-intro' ||
184
188
  view.type === 'qr-code' ||
185
189
  view.type === 'farcaster-connect-view' ||
190
+ view.type === 'merge-user-accounts-conflicts' ||
186
191
  (view.type === 'merge-user-accounts-with-same-email' && !user);
187
192
  const showDefaultFooter = !showConnectedWalletProgress && !showDynamicFooter && !showToSFooter;
188
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',