@dynamic-labs/sdk-react-core 4.29.0 → 4.29.2

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 (36) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +12 -12
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.ts +1 -0
  7. package/src/index.js +1 -0
  8. package/src/lib/Main.cjs +1 -1
  9. package/src/lib/Main.js +1 -1
  10. package/src/lib/client/extension/user/useOnboardingCompleteUser/useOnboardingCompleteUser.js +1 -1
  11. package/src/lib/context/DynamicContext/DynamicContext.cjs +2 -2
  12. package/src/lib/context/DynamicContext/DynamicContext.js +2 -2
  13. package/src/lib/modals/SyncWalletPromptModal/SyncWalletPromptModal.cjs +2 -2
  14. package/src/lib/modals/SyncWalletPromptModal/SyncWalletPromptModal.js +2 -2
  15. package/src/lib/utils/hooks/index.d.ts +1 -0
  16. package/src/lib/utils/hooks/useConnectUnifiedForFunding/useConnectUnifiedForFunding.cjs +201 -0
  17. package/src/lib/utils/hooks/useConnectUnifiedForFunding/useConnectUnifiedForFunding.js +197 -0
  18. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +5 -2
  19. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.d.ts +1 -1
  20. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +5 -2
  21. package/src/lib/utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs +3 -0
  22. package/src/lib/utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js +3 -0
  23. package/src/lib/utils/hooks/usePayWithDynamic/index.d.ts +1 -1
  24. package/src/lib/utils/hooks/usePayWithDynamic/usePayWithDynamic.cjs +284 -0
  25. package/src/lib/utils/hooks/usePayWithDynamic/usePayWithDynamic.js +280 -0
  26. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.cjs +1 -0
  27. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.d.ts +2 -0
  28. package/src/lib/utils/hooks/useWalletOptions/useWalletOptions.js +1 -0
  29. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.cjs +2 -2
  30. package/src/lib/utils/hooks/useWalletUiUtils/useWalletUiUtils.js +2 -2
  31. package/src/lib/views/Passkey/ConfirmPasskeyView/ConfirmPasskeyView.cjs +1 -1
  32. package/src/lib/views/Passkey/ConfirmPasskeyView/ConfirmPasskeyView.js +1 -1
  33. package/src/lib/views/Passkey/SetupPasskeyView/SetupPasskeyView.cjs +1 -1
  34. package/src/lib/views/Passkey/SetupPasskeyView/SetupPasskeyView.js +1 -1
  35. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.cjs +5 -2
  36. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.js +5 -2
@@ -0,0 +1,280 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
+ import { useCallback } from 'react';
4
+ import '@dynamic-labs-sdk/client/core';
5
+ import '@dynamic-labs/sdk-api-core';
6
+ import '../../../client/client.js';
7
+ import '@dynamic-labs-sdk/client';
8
+ import '../../../config/ApiEndpoint.js';
9
+ import '@dynamic-labs/utils';
10
+ import '../../constants/values.js';
11
+ import '@dynamic-labs/multi-wallet';
12
+ import { logger } from '../../../shared/logger.js';
13
+ import '../../constants/colors.js';
14
+ import 'react-international-phone';
15
+ import '@dynamic-labs/iconic';
16
+ import '@dynamic-labs/wallet-connector-core';
17
+ import 'react/jsx-runtime';
18
+ import '../../../context/ViewContext/ViewContext.js';
19
+ import '@dynamic-labs/wallet-book';
20
+ import '../../../shared/consts/index.js';
21
+ import '../../../store/state/nonce/nonce.js';
22
+ import { useProjectSettings } from '../../../store/state/projectSettings/projectSettings.js';
23
+ import '../../../locale/locale.js';
24
+ import '../../../store/state/dynamicContextProps/dynamicContextProps.js';
25
+ import '../../../store/state/primaryWalletId/primaryWalletId.js';
26
+ import '../../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
27
+ import '../../../events/dynamicEvents.js';
28
+ import { useOnboardingCompleteUser } from '../../../client/extension/user/useOnboardingCompleteUser/useOnboardingCompleteUser.js';
29
+ import { useOnrampContext } from '../../../context/OnrampContext/OnrampContext.js';
30
+ import { useConnectUnifiedForFunding } from '../useConnectUnifiedForFunding/useConnectUnifiedForFunding.js';
31
+ import { useSocialAccounts } from '../useSocialAccounts/useSocialAccounts.js';
32
+ import { usePromptAmountAndFundWithWallet } from '../useFundWithWallet/usePromptAmountAndFundWithWallet/usePromptAmountAndFundWithWallet.js';
33
+ import { usePromptAmountAndFundWithExchange } from '../usePromptAndFundWithExchange/usePromptAndFundWithExchange.js';
34
+ import { useWalletItemActions } from '../useWalletItemActions/useWalletItemActions.js';
35
+ import { getWalletOptions } from '../../../store/state/walletOptions/walletOptions.js';
36
+ import '../../../context/DynamicContext/DynamicContext.js';
37
+ import '../../../store/state/loadingAndLifecycle/loadingAndLifecycle.js';
38
+ import '../../../context/CaptchaContext/CaptchaContext.js';
39
+ import '../../../context/ErrorContext/ErrorContext.js';
40
+ import '../../../context/AccessDeniedContext/AccessDeniedContext.js';
41
+ import '../../../context/AccountExistsContext/AccountExistsContext.js';
42
+ import '../../../context/UserWalletsContext/UserWalletsContext.js';
43
+ import '../../../store/state/authMode/authMode.js';
44
+ import '../../../context/VerificationContext/VerificationContext.js';
45
+ import 'react-dom';
46
+ import '../../functions/compareChains/compareChains.js';
47
+ import '../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
48
+ import '../../../context/ThemeContext/ThemeContext.js';
49
+ import '../useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
50
+ import 'bs58';
51
+ import 'yup';
52
+ import '../../../context/MockContext/MockContext.js';
53
+ import '../../../views/CollectUserDataView/useFields.js';
54
+ import '../../../context/FieldsStateContext/FieldsStateContext.js';
55
+ import '../../../context/UserFieldEditorContext/UserFieldEditorContext.js';
56
+ import '@dynamic-labs/rpc-providers';
57
+ import 'react-i18next';
58
+ import '../../../components/Accordion/components/AccordionItem/AccordionItem.js';
59
+ import '../../../components/Alert/Alert.js';
60
+ import '../../../context/WalletContext/WalletContext.js';
61
+ import '../../../components/ShadowDOM/ShadowDOM.js';
62
+ import '../../../components/IconButton/IconButton.js';
63
+ import '../../../components/InlineWidget/InlineWidget.js';
64
+ import '../../../components/Input/Input.js';
65
+ import '../../../components/IsBrowser/IsBrowser.js';
66
+ import '../../../components/MenuList/Dropdown/Dropdown.js';
67
+ import '../../../components/OverlayCard/OverlayCard.js';
68
+ import '../../../components/Transition/ZoomTransition/ZoomTransition.js';
69
+ import '../../../components/Transition/SlideInUpTransition/SlideInUpTransition.js';
70
+ import '../../../components/Transition/OpacityTransition/OpacityTransition.js';
71
+ import '../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
72
+ import '../../../components/Popper/Popper/Popper.js';
73
+ import '../../../components/Popper/PopperContext/PopperContext.js';
74
+ import 'react-focus-lock';
75
+ import 'qrcode';
76
+ import 'formik';
77
+ import '../useSubdomainCheck/useSubdomainCheck.js';
78
+ import '../../../context/WalletGroupContext/WalletGroupContext.js';
79
+ import '../../../context/IpConfigurationContext/IpConfigurationContext.js';
80
+ import '../../../context/SocialRedirectContext/SocialRedirectContext.js';
81
+ import '../../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
82
+ import '../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
83
+ import '@hcaptcha/react-hcaptcha';
84
+ import '../../../context/LoadingContext/LoadingContext.js';
85
+ import '../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
86
+ import '../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.js';
87
+ import '../../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
88
+ import '../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
89
+ import '../../../context/FooterAnimationContext/index.js';
90
+ import '@dynamic-labs/types';
91
+ import '../useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
92
+ import '../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
93
+ import '../../../context/PasskeyContext/PasskeyContext.js';
94
+ import '../../../store/state/sendBalances.js';
95
+ import '../../../store/state/connectorsInitializing/connectorsInitializing.js';
96
+ import '../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.js';
97
+ import '../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
98
+ import '../../../views/TransactionConfirmationView/TransactionConfirmationView.js';
99
+ import '../../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.js';
100
+ import '../../../../index.js';
101
+ import '../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
102
+ import '../../../store/state/tokenBalances.js';
103
+ import '../../../store/state/multichainBalances.js';
104
+ import '../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
105
+ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext/useInternalDynamicContext.js';
106
+
107
+ const usePayWithDynamic = () => {
108
+ const connectUnifiedForFunding = useConnectUnifiedForFunding();
109
+ const projectSettings = useProjectSettings();
110
+ const { linkSocialAccount, signInWithSocialAccount } = useSocialAccounts();
111
+ const user = useOnboardingCompleteUser();
112
+ const { openOnramp, setEnabledOnrampProvidersTargetValue } = useOnrampContext();
113
+ const promptWallet = usePromptAmountAndFundWithWallet();
114
+ const promptExchange = usePromptAmountAndFundWithExchange();
115
+ const { handleWalletItemClick } = useWalletItemActions();
116
+ const { walletConnectorOptions } = getWalletOptions();
117
+ const { setShowAuthFlow, setShowDynamicUserProfile } = useInternalDynamicContext();
118
+ // Flow for funding via wallet
119
+ const handleWalletFlow = useCallback(({ wallet, props, onBack }) => {
120
+ // If user is not onboarded, trigger wallet connector UI
121
+ if (!user) {
122
+ const option = walletConnectorOptions.find(({ key }) => key === wallet.connector.key);
123
+ if (option)
124
+ handleWalletItemClick(option);
125
+ }
126
+ // Prompt for amount and execute wallet funding (shows deposit screen)
127
+ promptWallet({
128
+ amount: { rule: 'exact', value: props.tokenAmount },
129
+ destinationAddress: props.destinationAddress,
130
+ network: props.network,
131
+ onBack,
132
+ token: { rule: 'exact-with-amount', value: props.tokenSymbol },
133
+ wallet: wallet,
134
+ });
135
+ setShowAuthFlow(false);
136
+ }, [
137
+ handleWalletItemClick,
138
+ promptWallet,
139
+ setShowAuthFlow,
140
+ user,
141
+ walletConnectorOptions,
142
+ ]);
143
+ // Flow for linking or signing in with social account before exchange
144
+ const handleSocialConnect = useCallback((_a) => __awaiter(void 0, [_a], void 0, function* ({ provider, exchange, props, isSocialProviderAlreadyVerified, }) {
145
+ // if connected social return since already signed in
146
+ if (isSocialProviderAlreadyVerified) {
147
+ return false;
148
+ }
149
+ const payload = {
150
+ payingWithDynamic: {
151
+ chainName: props.chainName,
152
+ destinationAddress: props.destinationAddress,
153
+ network: props.network,
154
+ tokenAmount: props.tokenAmount,
155
+ tokenSymbol: props.tokenSymbol,
156
+ },
157
+ triggerFundFromExchangeOnSuccess: exchange,
158
+ };
159
+ if (user) {
160
+ // link if user exists
161
+ yield linkSocialAccount(provider, payload);
162
+ }
163
+ else {
164
+ // sign in if no user
165
+ yield signInWithSocialAccount(provider, payload);
166
+ }
167
+ return true;
168
+ }), [linkSocialAccount, signInWithSocialAccount, user]);
169
+ // exchange flow
170
+ const handleExchangeFlow = useCallback((_b) => __awaiter(void 0, [_b], void 0, function* ({ exchange, props, onBack }) {
171
+ var _c, _d, _e, _f, _g;
172
+ const fullExchange = (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.exchanges) === null || _c === void 0 ? void 0 : _c.find((e) => e.exchange === exchange);
173
+ // Social provider for this exchange, if any
174
+ const provider = fullExchange === null || fullExchange === void 0 ? void 0 : fullExchange.socialProvider;
175
+ const isProviderSocialConnectEnabled = provider &&
176
+ Boolean((_e = (_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) === null || _d === void 0 ? void 0 : _d.find((p) => p.provider === provider)) === null || _e === void 0 ? void 0 : _e.enabledAt);
177
+ // Check if user already verified this social provider
178
+ const isSocialProviderAlreadyVerified = (_g = (_f = user === null || user === void 0 ? void 0 : user.verifiedCredentials) === null || _f === void 0 ? void 0 : _f.some((c) => c.oauthProvider === provider)) !== null && _g !== void 0 ? _g : false;
179
+ // If exchange requires social connect, handle that first
180
+ if (isProviderSocialConnectEnabled && provider) {
181
+ const handled = yield handleSocialConnect({
182
+ exchange,
183
+ isSocialProviderAlreadyVerified,
184
+ props,
185
+ provider,
186
+ });
187
+ // Social connect flow opened, stop here
188
+ if (handled)
189
+ return;
190
+ // If already connected, prompt amount and fund with exchange
191
+ promptExchange({
192
+ exchange,
193
+ onBack,
194
+ payingWithDynamic: props,
195
+ });
196
+ return;
197
+ }
198
+ // No social provider = use on-ramp provider if configured
199
+ if (fullExchange === null || fullExchange === void 0 ? void 0 : fullExchange.onRampProvider) {
200
+ yield openOnramp({
201
+ address: props.destinationAddress,
202
+ chainName: props.chainName,
203
+ network: String(props.network),
204
+ onrampProvider: fullExchange.onRampProvider,
205
+ overrideOnRamp: true,
206
+ payingWithDynamic: true,
207
+ token: props.tokenSymbol,
208
+ tokenAmount: props.tokenAmount,
209
+ });
210
+ }
211
+ }), [
212
+ projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.exchanges,
213
+ projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers,
214
+ user === null || user === void 0 ? void 0 : user.verifiedCredentials,
215
+ handleSocialConnect,
216
+ promptExchange,
217
+ openOnramp,
218
+ ]);
219
+ const payWithDynamic = useCallback((props) => __awaiter(void 0, void 0, void 0, function* () {
220
+ try {
221
+ setEnabledOnrampProvidersTargetValue({
222
+ address: props.destinationAddress,
223
+ chainName: props.chainName,
224
+ network: String(props.network),
225
+ token: props.tokenSymbol,
226
+ tokenAmount: props.tokenAmount,
227
+ });
228
+ const result = yield connectUnifiedForFunding({
229
+ initiatedByWidget: false,
230
+ });
231
+ if (result.kind === 'wallet') {
232
+ handleWalletFlow({
233
+ onBack: () => {
234
+ setShowAuthFlow(true);
235
+ setShowDynamicUserProfile(false);
236
+ payWithDynamic(props);
237
+ },
238
+ props,
239
+ wallet: result.wallet,
240
+ });
241
+ }
242
+ else if (result.kind === 'exchange') {
243
+ yield handleExchangeFlow({
244
+ exchange: result.exchange,
245
+ onBack: () => {
246
+ setShowAuthFlow(true);
247
+ setShowDynamicUserProfile(false);
248
+ payWithDynamic(props);
249
+ },
250
+ props,
251
+ });
252
+ }
253
+ else {
254
+ yield openOnramp({
255
+ address: props.destinationAddress,
256
+ chainName: props.chainName,
257
+ network: String(props.network),
258
+ onrampProvider: result.onramp.id,
259
+ payingWithDynamic: true,
260
+ token: props.tokenSymbol,
261
+ tokenAmount: props.tokenAmount,
262
+ });
263
+ }
264
+ }
265
+ catch (error) {
266
+ logger.error('usePayWithDynamic failed', error);
267
+ }
268
+ }), [
269
+ setEnabledOnrampProvidersTargetValue,
270
+ connectUnifiedForFunding,
271
+ handleWalletFlow,
272
+ setShowAuthFlow,
273
+ setShowDynamicUserProfile,
274
+ handleExchangeFlow,
275
+ openOnramp,
276
+ ]);
277
+ return payWithDynamic;
278
+ };
279
+
280
+ export { usePayWithDynamic };
@@ -131,6 +131,7 @@ const useWalletOptions = () => {
131
131
  isInstalledOnBrowser: option.isInstalledOnBrowser,
132
132
  isWalletConnect: option.walletConnector.isWalletConnect,
133
133
  key: option.walletConnector.key,
134
+ metadata: option.walletConnector.metadata,
134
135
  name: option.name,
135
136
  };
136
137
  });
@@ -8,6 +8,7 @@ export declare const useWalletOptions: () => {
8
8
  isInstalledOnBrowser: boolean;
9
9
  isWalletConnect: boolean;
10
10
  key: string;
11
+ metadata: import("@dynamic-labs/wallet-connector-core").WalletMetadata;
11
12
  name: string;
12
13
  }[];
13
14
  selectWalletOption: (walletKey: string, selectGroupIfAvailable?: boolean) => Promise<Wallet<import("@dynamic-labs/wallet-connector-core").WalletConnectorCore.WalletConnector>>;
@@ -18,6 +19,7 @@ export declare const useWalletOptions: () => {
18
19
  isInstalledOnBrowser: boolean;
19
20
  isWalletConnect: boolean;
20
21
  key: string;
22
+ metadata: import("@dynamic-labs/wallet-connector-core").WalletMetadata;
21
23
  name: string;
22
24
  }[];
23
25
  };
@@ -127,6 +127,7 @@ const useWalletOptions = () => {
127
127
  isInstalledOnBrowser: option.isInstalledOnBrowser,
128
128
  isWalletConnect: option.walletConnector.isWalletConnect,
129
129
  key: option.walletConnector.key,
130
+ metadata: option.walletConnector.metadata,
130
131
  name: option.name,
131
132
  };
132
133
  });
@@ -65,6 +65,8 @@ require('../../../store/state/tokenBalances.cjs');
65
65
  require('../../../store/state/multichainBalances.cjs');
66
66
  require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
67
67
  require('../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
68
+ require('../../../context/OnrampContext/OnrampContext.cjs');
69
+ require('../../../../index.cjs');
68
70
  require('react-dom');
69
71
  require('../../../components/ShadowDOM/ShadowDOM.cjs');
70
72
  require('../../../components/IconButton/IconButton.cjs');
@@ -93,13 +95,11 @@ require('../../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
93
95
  require('../../../context/FooterAnimationContext/index.cjs');
94
96
  require('../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
95
97
  require('../../../context/PasskeyContext/PasskeyContext.cjs');
96
- require('../../../context/OnrampContext/OnrampContext.cjs');
97
98
  require('../../../store/state/sendBalances.cjs');
98
99
  require('../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
99
100
  require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
100
101
  require('../../../views/TransactionConfirmationView/TransactionConfirmationView.cjs');
101
102
  require('../../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
102
- require('../../../../index.cjs');
103
103
  require('../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
104
104
  var SignMessageConfirmationModal = require('../../../modals/SignMessageConfirmationModal/SignMessageConfirmationModal.cjs');
105
105
  var SyncWalletPromptModal = require('../../../modals/SyncWalletPromptModal/SyncWalletPromptModal.cjs');
@@ -61,6 +61,8 @@ import '../../../store/state/tokenBalances.js';
61
61
  import '../../../store/state/multichainBalances.js';
62
62
  import '../../../context/WalletGroupContext/WalletGroupContext.js';
63
63
  import '../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
64
+ import '../../../context/OnrampContext/OnrampContext.js';
65
+ import '../../../../index.js';
64
66
  import 'react-dom';
65
67
  import '../../../components/ShadowDOM/ShadowDOM.js';
66
68
  import '../../../components/IconButton/IconButton.js';
@@ -89,13 +91,11 @@ import '../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
89
91
  import '../../../context/FooterAnimationContext/index.js';
90
92
  import '../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
91
93
  import '../../../context/PasskeyContext/PasskeyContext.js';
92
- import '../../../context/OnrampContext/OnrampContext.js';
93
94
  import '../../../store/state/sendBalances.js';
94
95
  import '../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.js';
95
96
  import '../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
96
97
  import '../../../views/TransactionConfirmationView/TransactionConfirmationView.js';
97
98
  import '../../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.js';
98
- import '../../../../index.js';
99
99
  import '../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
100
100
  import { SignMessageConfirmationModal } from '../../../modals/SignMessageConfirmationModal/SignMessageConfirmationModal.js';
101
101
  import { SyncWalletPromptModal } from '../../../modals/SyncWalletPromptModal/SyncWalletPromptModal.js';
@@ -92,6 +92,7 @@ require('../../../../index.cjs');
92
92
  require('../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
93
93
  var TextButton = require('../../../components/TextButton/TextButton.cjs');
94
94
  require('qrcode');
95
+ var useGetPasskeyErrorMessage = require('../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs');
95
96
  require('../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
96
97
  require('../../../context/IpConfigurationContext/IpConfigurationContext.cjs');
97
98
  require('../../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
@@ -101,7 +102,6 @@ require('../../ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
101
102
  require('../../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
102
103
  require('../../MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
103
104
  var ModalHeaderBanner = require('../../../components/ModalHeaderBanner/ModalHeaderBanner.cjs');
104
- var useGetPasskeyErrorMessage = require('../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs');
105
105
  require('../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
106
106
  require('../../../store/state/tokenBalances.cjs');
107
107
  require('../../../store/state/multichainBalances.cjs');
@@ -88,6 +88,7 @@ import '../../../../index.js';
88
88
  import '../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.js';
89
89
  import { TextButton } from '../../../components/TextButton/TextButton.js';
90
90
  import 'qrcode';
91
+ import { useGetPasskeyErrorMessage } from '../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js';
91
92
  import '../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
92
93
  import '../../../context/IpConfigurationContext/IpConfigurationContext.js';
93
94
  import '../../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
@@ -97,7 +98,6 @@ import '../../ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
97
98
  import '../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
98
99
  import '../../MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
99
100
  import { ModalHeaderBanner } from '../../../components/ModalHeaderBanner/ModalHeaderBanner.js';
100
- import { useGetPasskeyErrorMessage } from '../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js';
101
101
  import '../../../store/state/connectorsInitializing/connectorsInitializing.js';
102
102
  import '../../../store/state/tokenBalances.js';
103
103
  import '../../../store/state/multichainBalances.js';
@@ -93,6 +93,7 @@ require('../../../../index.cjs');
93
93
  require('../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
94
94
  var TextButton = require('../../../components/TextButton/TextButton.cjs');
95
95
  require('qrcode');
96
+ var useGetPasskeyErrorMessage = require('../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs');
96
97
  require('../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
97
98
  require('../../../context/IpConfigurationContext/IpConfigurationContext.cjs');
98
99
  require('../../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
@@ -102,7 +103,6 @@ require('../../ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
102
103
  require('../../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
103
104
  require('../../MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
104
105
  var ModalHeaderBanner = require('../../../components/ModalHeaderBanner/ModalHeaderBanner.cjs');
105
- var useGetPasskeyErrorMessage = require('../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs');
106
106
  require('../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
107
107
  require('../../../store/state/tokenBalances.cjs');
108
108
  require('../../../store/state/multichainBalances.cjs');
@@ -89,6 +89,7 @@ import '../../../../index.js';
89
89
  import '../../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.js';
90
90
  import { TextButton } from '../../../components/TextButton/TextButton.js';
91
91
  import 'qrcode';
92
+ import { useGetPasskeyErrorMessage } from '../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js';
92
93
  import '../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
93
94
  import '../../../context/IpConfigurationContext/IpConfigurationContext.js';
94
95
  import '../../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
@@ -98,7 +99,6 @@ import '../../ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
98
99
  import '../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
99
100
  import '../../MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
100
101
  import { ModalHeaderBanner } from '../../../components/ModalHeaderBanner/ModalHeaderBanner.js';
101
- import { useGetPasskeyErrorMessage } from '../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js';
102
102
  import '../../../store/state/connectorsInitializing/connectorsInitializing.js';
103
103
  import '../../../store/state/tokenBalances.js';
104
104
  import '../../../store/state/multichainBalances.js';
@@ -92,6 +92,7 @@ require('../../../../../index.cjs');
92
92
  require('../../helpers/convertExchangeKeyAndProviderEnum.cjs');
93
93
  require('qrcode');
94
94
  var MfaDeviceTileSkeleton = require('../../../../components/MfaDeviceTileSkeleton/MfaDeviceTileSkeleton.cjs');
95
+ var useGetPasskeyErrorMessage = require('../../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs');
95
96
  require('../ReceiveWalletFunds/ReceiveWalletFunds.cjs');
96
97
  require('../../../../context/IpConfigurationContext/IpConfigurationContext.cjs');
97
98
  require('../../../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
@@ -100,6 +101,7 @@ require('@hcaptcha/react-hcaptcha');
100
101
  require('../../../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
101
102
  require('../../../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
102
103
  require('../../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.cjs');
104
+ var ModalHeaderBanner = require('../../../../components/ModalHeaderBanner/ModalHeaderBanner.cjs');
103
105
  require('../../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
104
106
  require('../../../../store/state/tokenBalances.cjs');
105
107
  require('../../../../store/state/multichainBalances.cjs');
@@ -120,15 +122,16 @@ const ManagePasskeysMfaWidgetView = () => {
120
122
  enabled: true,
121
123
  initialData: [],
122
124
  });
123
- const { mutate: registerPasskey, isLoading: isRegisteringPasskey } = useMutation.useMutation(registerPasskeyFn, {
125
+ const { mutate: registerPasskey, isLoading: isRegisteringPasskey, error: registerPasskeyError, } = useMutation.useMutation(registerPasskeyFn, {
124
126
  onSuccess: () => {
125
127
  retrigger();
126
128
  },
127
129
  });
130
+ const errorMessage = useGetPasskeyErrorMessage.useGetPasskeyErrorMessage(registerPasskeyError);
128
131
  const shouldDisableActions = isLoadingPasskeys || isRegisteringPasskey;
129
132
  const { setDynamicWidgetView } = DynamicWidgetContext.useWidgetContext();
130
133
  const backButton = (jsxRuntime.jsx(IconButton.IconButton, { type: 'button', onClick: () => setDynamicWidgetView('account-and-security-settings'), "data-testid": 'back-button', children: jsxRuntime.jsx(chevronLeft.ReactComponent, {}) }));
131
- return (jsxRuntime.jsxs("div", { className: 'manage-totp-mfa-widget-view', children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { leading: backButton, children: jsxRuntime.jsx("div", { className: 'send-balance-page-layout__header-content', children: jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_manage_passkeys_mfa.title', children: t('dyn_manage_passkeys_mfa.title') }) }) }), jsxRuntime.jsxs("div", { className: 'manage-totp-mfa-widget-view__scroll-container', children: [isLoadingPasskeys && jsxRuntime.jsx(MfaDeviceTileSkeleton.MfaDeviceTileSkeleton, {}), !isLoadingPasskeys && passkeys.length === 0 && (jsxRuntime.jsx(Typography.Typography, { className: 'manage-totp-mfa-widget-view__no-devices', variant: 'body_normal', color: 'secondary', copykey: 'dyn_manage_passkeys_mfa.no_passkeys', children: t('dyn_manage_passkeys_mfa.no_passkeys') })), passkeys.map((passkey) => (jsxRuntime.jsx(PasskeyCard.PasskeyCard, { passkey: passkey, onUpdate: retrigger }, passkey.id)))] }), jsxRuntime.jsx("div", { className: 'manage-totp-mfa-widget-view__add-mfa-button-container', children: jsxRuntime.jsx(TypographyButton.TypographyButton, { buttonClassName: 'manage-totp-mfa-widget-view__add-mfa-button-container__button', onClick: () => registerPasskey(), copykey: 'dyn_manage_passkeys_mfa.add_passkey_button', startSlot: jsxRuntime.jsx(add.ReactComponent, {}), disabled: shouldDisableActions, children: t('dyn_manage_passkeys_mfa.add_passkey_button') }) })] }));
134
+ return (jsxRuntime.jsxs("div", { className: 'manage-totp-mfa-widget-view', children: [jsxRuntime.jsx(ModalHeader.ModalHeader, { leading: backButton, children: jsxRuntime.jsx("div", { className: 'send-balance-page-layout__header-content', children: jsxRuntime.jsx(Typography.Typography, { variant: 'title', color: 'primary', copykey: 'dyn_manage_passkeys_mfa.title', children: t('dyn_manage_passkeys_mfa.title') }) }) }), jsxRuntime.jsx(ModalHeaderBanner.ModalHeaderBanner, { type: 'error', messageKey: registerPasskeyError ? errorMessage : undefined, className: 'manage-totp-mfa-widget-view__header-banner' }), jsxRuntime.jsxs("div", { className: 'manage-totp-mfa-widget-view__scroll-container', children: [isLoadingPasskeys && jsxRuntime.jsx(MfaDeviceTileSkeleton.MfaDeviceTileSkeleton, {}), !isLoadingPasskeys && passkeys.length === 0 && (jsxRuntime.jsx(Typography.Typography, { className: 'manage-totp-mfa-widget-view__no-devices', variant: 'body_normal', color: 'secondary', copykey: 'dyn_manage_passkeys_mfa.no_passkeys', children: t('dyn_manage_passkeys_mfa.no_passkeys') })), passkeys.map((passkey) => (jsxRuntime.jsx(PasskeyCard.PasskeyCard, { passkey: passkey, onUpdate: retrigger }, passkey.id)))] }), jsxRuntime.jsx("div", { className: 'manage-totp-mfa-widget-view__add-mfa-button-container', children: jsxRuntime.jsx(TypographyButton.TypographyButton, { buttonClassName: 'manage-totp-mfa-widget-view__add-mfa-button-container__button', onClick: () => registerPasskey(), copykey: 'dyn_manage_passkeys_mfa.add_passkey_button', startSlot: jsxRuntime.jsx(add.ReactComponent, {}), disabled: shouldDisableActions, children: t('dyn_manage_passkeys_mfa.add_passkey_button') }) })] }));
132
135
  };
133
136
 
134
137
  exports.ManagePasskeysMfaWidgetView = ManagePasskeysMfaWidgetView;
@@ -88,6 +88,7 @@ import '../../../../../index.js';
88
88
  import '../../helpers/convertExchangeKeyAndProviderEnum.js';
89
89
  import 'qrcode';
90
90
  import { MfaDeviceTileSkeleton } from '../../../../components/MfaDeviceTileSkeleton/MfaDeviceTileSkeleton.js';
91
+ import { useGetPasskeyErrorMessage } from '../../../../utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js';
91
92
  import '../ReceiveWalletFunds/ReceiveWalletFunds.js';
92
93
  import '../../../../context/IpConfigurationContext/IpConfigurationContext.js';
93
94
  import '../../../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
@@ -96,6 +97,7 @@ import '@hcaptcha/react-hcaptcha';
96
97
  import '../../../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
97
98
  import '../../../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
98
99
  import '../../../../views/MfaChooseDeviceView/getMfaOptions/getMfaOptions.js';
100
+ import { ModalHeaderBanner } from '../../../../components/ModalHeaderBanner/ModalHeaderBanner.js';
99
101
  import '../../../../store/state/connectorsInitializing/connectorsInitializing.js';
100
102
  import '../../../../store/state/tokenBalances.js';
101
103
  import '../../../../store/state/multichainBalances.js';
@@ -116,15 +118,16 @@ const ManagePasskeysMfaWidgetView = () => {
116
118
  enabled: true,
117
119
  initialData: [],
118
120
  });
119
- const { mutate: registerPasskey, isLoading: isRegisteringPasskey } = useMutation(registerPasskeyFn, {
121
+ const { mutate: registerPasskey, isLoading: isRegisteringPasskey, error: registerPasskeyError, } = useMutation(registerPasskeyFn, {
120
122
  onSuccess: () => {
121
123
  retrigger();
122
124
  },
123
125
  });
126
+ const errorMessage = useGetPasskeyErrorMessage(registerPasskeyError);
124
127
  const shouldDisableActions = isLoadingPasskeys || isRegisteringPasskey;
125
128
  const { setDynamicWidgetView } = useWidgetContext();
126
129
  const backButton = (jsx(IconButton, { type: 'button', onClick: () => setDynamicWidgetView('account-and-security-settings'), "data-testid": 'back-button', children: jsx(SvgChevronLeft, {}) }));
127
- return (jsxs("div", { className: 'manage-totp-mfa-widget-view', children: [jsx(ModalHeader, { leading: backButton, children: jsx("div", { className: 'send-balance-page-layout__header-content', children: jsx(Typography, { variant: 'title', color: 'primary', copykey: 'dyn_manage_passkeys_mfa.title', children: t('dyn_manage_passkeys_mfa.title') }) }) }), jsxs("div", { className: 'manage-totp-mfa-widget-view__scroll-container', children: [isLoadingPasskeys && jsx(MfaDeviceTileSkeleton, {}), !isLoadingPasskeys && passkeys.length === 0 && (jsx(Typography, { className: 'manage-totp-mfa-widget-view__no-devices', variant: 'body_normal', color: 'secondary', copykey: 'dyn_manage_passkeys_mfa.no_passkeys', children: t('dyn_manage_passkeys_mfa.no_passkeys') })), passkeys.map((passkey) => (jsx(PasskeyCard, { passkey: passkey, onUpdate: retrigger }, passkey.id)))] }), jsx("div", { className: 'manage-totp-mfa-widget-view__add-mfa-button-container', children: jsx(TypographyButton, { buttonClassName: 'manage-totp-mfa-widget-view__add-mfa-button-container__button', onClick: () => registerPasskey(), copykey: 'dyn_manage_passkeys_mfa.add_passkey_button', startSlot: jsx(SvgAdd, {}), disabled: shouldDisableActions, children: t('dyn_manage_passkeys_mfa.add_passkey_button') }) })] }));
130
+ return (jsxs("div", { className: 'manage-totp-mfa-widget-view', children: [jsx(ModalHeader, { leading: backButton, children: jsx("div", { className: 'send-balance-page-layout__header-content', children: jsx(Typography, { variant: 'title', color: 'primary', copykey: 'dyn_manage_passkeys_mfa.title', children: t('dyn_manage_passkeys_mfa.title') }) }) }), jsx(ModalHeaderBanner, { type: 'error', messageKey: registerPasskeyError ? errorMessage : undefined, className: 'manage-totp-mfa-widget-view__header-banner' }), jsxs("div", { className: 'manage-totp-mfa-widget-view__scroll-container', children: [isLoadingPasskeys && jsx(MfaDeviceTileSkeleton, {}), !isLoadingPasskeys && passkeys.length === 0 && (jsx(Typography, { className: 'manage-totp-mfa-widget-view__no-devices', variant: 'body_normal', color: 'secondary', copykey: 'dyn_manage_passkeys_mfa.no_passkeys', children: t('dyn_manage_passkeys_mfa.no_passkeys') })), passkeys.map((passkey) => (jsx(PasskeyCard, { passkey: passkey, onUpdate: retrigger }, passkey.id)))] }), jsx("div", { className: 'manage-totp-mfa-widget-view__add-mfa-button-container', children: jsx(TypographyButton, { buttonClassName: 'manage-totp-mfa-widget-view__add-mfa-button-container__button', onClick: () => registerPasskey(), copykey: 'dyn_manage_passkeys_mfa.add_passkey_button', startSlot: jsx(SvgAdd, {}), disabled: shouldDisableActions, children: t('dyn_manage_passkeys_mfa.add_passkey_button') }) })] }));
128
131
  };
129
132
 
130
133
  export { ManagePasskeysMfaWidgetView };