@dynamic-labs/sdk-react-core 4.29.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.
package/CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
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
+
2
12
  ## [4.29.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.28.0...v4.29.0) (2025-08-19)
3
13
 
4
14
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.29.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.29.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.29.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.29.0",
19
- "@dynamic-labs/iconic": "4.29.0",
20
- "@dynamic-labs/logger": "4.29.0",
21
- "@dynamic-labs/multi-wallet": "4.29.0",
22
- "@dynamic-labs/rpc-providers": "4.29.0",
23
- "@dynamic-labs/store": "4.29.0",
24
- "@dynamic-labs/types": "4.29.0",
25
- "@dynamic-labs/utils": "4.29.0",
26
- "@dynamic-labs/wallet-book": "4.29.0",
27
- "@dynamic-labs/wallet-connector-core": "4.29.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": {
@@ -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 };