@dynamic-labs/sdk-react-core 4.28.0 → 4.29.1

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 (22) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.cjs +6 -4
  6. package/src/lib/context/SocialRedirectContext/hooks/useRedirectSocialHandler/useRedirectSocialHandler.js +6 -4
  7. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectData/getDynamicRedirectData.cjs +22 -0
  8. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectData/getDynamicRedirectData.d.ts +4 -0
  9. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectData/getDynamicRedirectData.js +18 -0
  10. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectData/index.d.ts +1 -0
  11. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectDataFromUrl/getDynamicRedirectDataFromUrl.cjs +31 -0
  12. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectDataFromUrl/getDynamicRedirectDataFromUrl.d.ts +8 -0
  13. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectDataFromUrl/getDynamicRedirectDataFromUrl.js +27 -0
  14. package/src/lib/context/SocialRedirectContext/utils/getDynamicRedirectDataFromUrl/index.d.ts +1 -0
  15. package/src/lib/utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.cjs +3 -0
  16. package/src/lib/utils/hooks/useGetPasskeyErrorMessage/useGetPasskeyErrorMessage.js +3 -0
  17. package/src/lib/views/Passkey/ConfirmPasskeyView/ConfirmPasskeyView.cjs +1 -1
  18. package/src/lib/views/Passkey/ConfirmPasskeyView/ConfirmPasskeyView.js +1 -1
  19. package/src/lib/views/Passkey/SetupPasskeyView/SetupPasskeyView.cjs +1 -1
  20. package/src/lib/views/Passkey/SetupPasskeyView/SetupPasskeyView.js +1 -1
  21. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.cjs +5 -2
  22. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysMfaWidgetView/ManagePasskeysMfaWidgetView.js +5 -2
package/CHANGELOG.md CHANGED
@@ -1,4 +1,21 @@
1
1
 
2
+ ### [4.29.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.29.0...v4.29.1) (2025-08-21)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * clear user op cache on send transaction ([#9382](https://github.com/dynamic-labs/dynamic-auth/issues/9382)) ([ddef1e1](https://github.com/dynamic-labs/dynamic-auth/commit/ddef1e16367e04d217e6d79a138988394605dda6))
8
+ * display error when trying to register a previously registered passkey ([#9381](https://github.com/dynamic-labs/dynamic-auth/issues/9381)) ([51ecdd8](https://github.com/dynamic-labs/dynamic-auth/commit/51ecdd84a3d1a36435cc79063caa2fd7187a25db))
9
+ * do not double disable confirmation ui ([#9385](https://github.com/dynamic-labs/dynamic-auth/issues/9385)) ([2deb3ae](https://github.com/dynamic-labs/dynamic-auth/commit/2deb3aeb3055ceb79ea2e8410cce94448b18f8c5))
10
+ * **react-native:** dont emit network change events for disabled chains ([#9375](https://github.com/dynamic-labs/dynamic-auth/issues/9375)) ([f03151e](https://github.com/dynamic-labs/dynamic-auth/commit/f03151ea6b065f6b297edb053fbf84f1060b35e4))
11
+
12
+ ## [4.29.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.28.0...v4.29.0) (2025-08-19)
13
+
14
+
15
+ ### Features
16
+
17
+ * add support for World Mini App social redirect ([#9371](https://github.com/dynamic-labs/dynamic-auth/issues/9371)) ([12bcee8](https://github.com/dynamic-labs/dynamic-auth/commit/12bcee875007e6a2c6143a222f9af39d8127fcf8))
18
+
2
19
  ## [4.28.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.27.1...v4.28.0) (2025-08-18)
3
20
 
4
21
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.28.0";
6
+ var version = "4.29.1";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.753",
9
9
  "@dynamic-labs-sdk/client": "0.0.1-alpha.24",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "4.28.0";
2
+ var version = "4.29.1";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.753",
5
5
  "@dynamic-labs-sdk/client": "0.0.1-alpha.24",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.28.0",
3
+ "version": "4.29.1",
4
4
  "dependencies": {
5
5
  "@dynamic-labs/sdk-api-core": "0.0.753",
6
6
  "@dynamic-labs-sdk/client": "0.0.1-alpha.24",
@@ -15,16 +15,16 @@
15
15
  "yup": "0.32.11",
16
16
  "react-international-phone": "4.5.0",
17
17
  "bs58": "5.0.0",
18
- "@dynamic-labs/assert-package-version": "4.28.0",
19
- "@dynamic-labs/iconic": "4.28.0",
20
- "@dynamic-labs/logger": "4.28.0",
21
- "@dynamic-labs/multi-wallet": "4.28.0",
22
- "@dynamic-labs/rpc-providers": "4.28.0",
23
- "@dynamic-labs/store": "4.28.0",
24
- "@dynamic-labs/types": "4.28.0",
25
- "@dynamic-labs/utils": "4.28.0",
26
- "@dynamic-labs/wallet-book": "4.28.0",
27
- "@dynamic-labs/wallet-connector-core": "4.28.0",
18
+ "@dynamic-labs/assert-package-version": "4.29.1",
19
+ "@dynamic-labs/iconic": "4.29.1",
20
+ "@dynamic-labs/logger": "4.29.1",
21
+ "@dynamic-labs/multi-wallet": "4.29.1",
22
+ "@dynamic-labs/rpc-providers": "4.29.1",
23
+ "@dynamic-labs/store": "4.29.1",
24
+ "@dynamic-labs/types": "4.29.1",
25
+ "@dynamic-labs/utils": "4.29.1",
26
+ "@dynamic-labs/wallet-book": "4.29.1",
27
+ "@dynamic-labs/wallet-connector-core": "4.29.1",
28
28
  "eventemitter3": "5.0.1"
29
29
  },
30
30
  "devDependencies": {
@@ -108,6 +108,7 @@ require('../../../../store/state/tokenBalances.cjs');
108
108
  require('../../../../store/state/multichainBalances.cjs');
109
109
  require('../../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
110
110
  var usePromptAndFundWithExchange = require('../../../../utils/hooks/usePromptAndFundWithExchange/usePromptAndFundWithExchange.cjs');
111
+ var getDynamicRedirectData = require('../../utils/getDynamicRedirectData/getDynamicRedirectData.cjs');
111
112
 
112
113
  const useRedirectSocialHandler = ({ setSocialProvider, }) => {
113
114
  const { clearStackAndPush } = ViewContext.useViewContext();
@@ -131,13 +132,14 @@ const useRedirectSocialHandler = ({ setSocialProvider, }) => {
131
132
  setShowAuthFlow,
132
133
  ]);
133
134
  useEffectOnce.useEffectOnce(() => {
135
+ var _a;
134
136
  // Do not run on server side
135
137
  if (isSSR.isSSR())
136
138
  return;
137
- // TODO: use PlatformService
138
- const url = new URL(redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : window.location.href);
139
- const dynamicOauthState = url.searchParams.get('dynamicOauthState');
140
- const dynamicOauthCode = url.searchParams.get('dynamicOauthCode');
139
+ /**
140
+ * Find the redirect data from the first available source
141
+ */
142
+ const { dynamicOauthCode, dynamicOauthState } = (_a = getDynamicRedirectData.getDynamicRedirectData(redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : null, window.location.href)) !== null && _a !== void 0 ? _a : {};
141
143
  if (!dynamicOauthState || !dynamicOauthCode) {
142
144
  return;
143
145
  }
@@ -104,6 +104,7 @@ import '../../../../store/state/tokenBalances.js';
104
104
  import '../../../../store/state/multichainBalances.js';
105
105
  import '../../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
106
106
  import { usePromptAmountAndFundWithExchange } from '../../../../utils/hooks/usePromptAndFundWithExchange/usePromptAndFundWithExchange.js';
107
+ import { getDynamicRedirectData } from '../../utils/getDynamicRedirectData/getDynamicRedirectData.js';
107
108
 
108
109
  const useRedirectSocialHandler = ({ setSocialProvider, }) => {
109
110
  const { clearStackAndPush } = useViewContext();
@@ -127,13 +128,14 @@ const useRedirectSocialHandler = ({ setSocialProvider, }) => {
127
128
  setShowAuthFlow,
128
129
  ]);
129
130
  useEffectOnce(() => {
131
+ var _a;
130
132
  // Do not run on server side
131
133
  if (isSSR())
132
134
  return;
133
- // TODO: use PlatformService
134
- const url = new URL(redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : window.location.href);
135
- const dynamicOauthState = url.searchParams.get('dynamicOauthState');
136
- const dynamicOauthCode = url.searchParams.get('dynamicOauthCode');
135
+ /**
136
+ * Find the redirect data from the first available source
137
+ */
138
+ const { dynamicOauthCode, dynamicOauthState } = (_a = getDynamicRedirectData(redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : null, window.location.href)) !== null && _a !== void 0 ? _a : {};
137
139
  if (!dynamicOauthState || !dynamicOauthCode) {
138
140
  return;
139
141
  }
@@ -0,0 +1,22 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var getDynamicRedirectDataFromUrl = require('../getDynamicRedirectDataFromUrl/getDynamicRedirectDataFromUrl.cjs');
7
+
8
+ const getDynamicRedirectData = (redirectUrl, href) => {
9
+ if (redirectUrl) {
10
+ const data = getDynamicRedirectDataFromUrl.getDynamicRedirectDataFromUrl(redirectUrl);
11
+ if (data) {
12
+ return data;
13
+ }
14
+ }
15
+ const data = getDynamicRedirectDataFromUrl.getDynamicRedirectDataFromUrl(href);
16
+ if (data) {
17
+ return data;
18
+ }
19
+ return null;
20
+ };
21
+
22
+ exports.getDynamicRedirectData = getDynamicRedirectData;
@@ -0,0 +1,4 @@
1
+ export declare const getDynamicRedirectData: (redirectUrl: string | null, href: string) => {
2
+ dynamicOauthCode: string;
3
+ dynamicOauthState: string;
4
+ } | null;
@@ -0,0 +1,18 @@
1
+ 'use client'
2
+ import { getDynamicRedirectDataFromUrl } from '../getDynamicRedirectDataFromUrl/getDynamicRedirectDataFromUrl.js';
3
+
4
+ const getDynamicRedirectData = (redirectUrl, href) => {
5
+ if (redirectUrl) {
6
+ const data = getDynamicRedirectDataFromUrl(redirectUrl);
7
+ if (data) {
8
+ return data;
9
+ }
10
+ }
11
+ const data = getDynamicRedirectDataFromUrl(href);
12
+ if (data) {
13
+ return data;
14
+ }
15
+ return null;
16
+ };
17
+
18
+ export { getDynamicRedirectData };
@@ -0,0 +1 @@
1
+ export { getDynamicRedirectData } from './getDynamicRedirectData';
@@ -0,0 +1,31 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var logger = require('../../../../shared/logger.cjs');
7
+
8
+ /**
9
+ * Extracts the dynamicOauthCode and dynamicOauthState from the URL
10
+ * if the URL is not a valid URL, returns null
11
+ */
12
+ const getDynamicRedirectDataFromUrl = (url) => {
13
+ if (!url) {
14
+ return null;
15
+ }
16
+ try {
17
+ const urlObj = new URL(url);
18
+ const dynamicOauthCode = urlObj.searchParams.get('dynamicOauthCode');
19
+ const dynamicOauthState = urlObj.searchParams.get('dynamicOauthState');
20
+ if (!dynamicOauthCode || !dynamicOauthState) {
21
+ return null;
22
+ }
23
+ return { dynamicOauthCode, dynamicOauthState };
24
+ }
25
+ catch (error) {
26
+ logger.logger.error('Error extracting dynamic redirect data from URL', error);
27
+ return null;
28
+ }
29
+ };
30
+
31
+ exports.getDynamicRedirectDataFromUrl = getDynamicRedirectDataFromUrl;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Extracts the dynamicOauthCode and dynamicOauthState from the URL
3
+ * if the URL is not a valid URL, returns null
4
+ */
5
+ export declare const getDynamicRedirectDataFromUrl: (url: string) => {
6
+ dynamicOauthCode: string;
7
+ dynamicOauthState: string;
8
+ } | null;
@@ -0,0 +1,27 @@
1
+ 'use client'
2
+ import { logger } from '../../../../shared/logger.js';
3
+
4
+ /**
5
+ * Extracts the dynamicOauthCode and dynamicOauthState from the URL
6
+ * if the URL is not a valid URL, returns null
7
+ */
8
+ const getDynamicRedirectDataFromUrl = (url) => {
9
+ if (!url) {
10
+ return null;
11
+ }
12
+ try {
13
+ const urlObj = new URL(url);
14
+ const dynamicOauthCode = urlObj.searchParams.get('dynamicOauthCode');
15
+ const dynamicOauthState = urlObj.searchParams.get('dynamicOauthState');
16
+ if (!dynamicOauthCode || !dynamicOauthState) {
17
+ return null;
18
+ }
19
+ return { dynamicOauthCode, dynamicOauthState };
20
+ }
21
+ catch (error) {
22
+ logger.error('Error extracting dynamic redirect data from URL', error);
23
+ return null;
24
+ }
25
+ };
26
+
27
+ export { getDynamicRedirectDataFromUrl };
@@ -0,0 +1 @@
1
+ export { getDynamicRedirectDataFromUrl } from './getDynamicRedirectDataFromUrl';
@@ -15,6 +15,9 @@ const useGetPasskeyErrorMessage = (error) => {
15
15
  if (error.name === 'NotAllowedError') {
16
16
  return t('dyn_mfa.confirm_passkey_view.error.not_allowed');
17
17
  }
18
+ if (error.name === 'InvalidStateError') {
19
+ return error.message;
20
+ }
18
21
  return error.message;
19
22
  }, [error, t]);
20
23
  };
@@ -11,6 +11,9 @@ const useGetPasskeyErrorMessage = (error) => {
11
11
  if (error.name === 'NotAllowedError') {
12
12
  return t('dyn_mfa.confirm_passkey_view.error.not_allowed');
13
13
  }
14
+ if (error.name === 'InvalidStateError') {
15
+ return error.message;
16
+ }
14
17
  return error.message;
15
18
  }, [error, t]);
16
19
  };
@@ -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 };