@dynamic-labs/sdk-react-core 4.30.3 → 4.31.0

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,23 @@
1
1
 
2
+ ## [4.31.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.30.4...v4.31.0) (2025-09-09)
3
+
4
+ ### Features
5
+
6
+ * adds evmNetworks prop for the react native client ([#9429](https://github.com/dynamic-labs/dynamic-auth/pull/9429))
7
+ * allow creating a mfaToken on authenticateRecoveryCode ([#9459](https://github.com/dynamic-labs/dynamic-auth/pull/9459))
8
+
9
+ ### Bug Fixes
10
+
11
+ * fixed the yParity conversion in unFormatTransaction ([#9457](https://github.com/dynamic-labs/dynamic-auth/pull/9457))
12
+
13
+ ### [4.30.4](https://github.com/dynamic-labs/dynamic-auth/compare/v4.30.3...v4.30.4) (2025-09-09)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * remove artifacts section to resolve error preventing the build ([#9456](https://github.com/dynamic-labs/dynamic-auth/issues/9456)) ([691a2e7](https://github.com/dynamic-labs/dynamic-auth/commit/691a2e78c9f395e2e3e27df89cc6520deabb1af7))
19
+ * use unique codebuild id for shard artifacts in batch build ([#9455](https://github.com/dynamic-labs/dynamic-auth/issues/9455)) ([69f0270](https://github.com/dynamic-labs/dynamic-auth/commit/69f0270b0a20be044617367178db2a375d0f359d))
20
+
2
21
  ### [4.30.3](https://github.com/dynamic-labs/dynamic-auth/compare/v4.30.2...v4.30.3) (2025-09-05)
3
22
 
4
23
 
package/package.cjs CHANGED
@@ -3,10 +3,10 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.30.3";
6
+ var version = "4.31.0";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.762",
9
- "@dynamic-labs-sdk/client": "0.0.1-alpha.25",
9
+ "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
10
10
  "@hcaptcha/react-hcaptcha": "1.4.4",
11
11
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
12
12
  "country-list": "2.3.0",
package/package.js CHANGED
@@ -1,8 +1,8 @@
1
1
  'use client'
2
- var version = "4.30.3";
2
+ var version = "4.31.0";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.762",
5
- "@dynamic-labs-sdk/client": "0.0.1-alpha.25",
5
+ "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
6
6
  "@hcaptcha/react-hcaptcha": "1.4.4",
7
7
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
8
8
  "country-list": "2.3.0",
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.30.3",
3
+ "version": "4.31.0",
4
4
  "dependencies": {
5
5
  "@dynamic-labs/sdk-api-core": "0.0.762",
6
- "@dynamic-labs-sdk/client": "0.0.1-alpha.25",
6
+ "@dynamic-labs-sdk/client": "0.1.0-alpha.3",
7
7
  "@hcaptcha/react-hcaptcha": "1.4.4",
8
8
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
9
9
  "country-list": "2.3.0",
@@ -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.30.3",
19
- "@dynamic-labs/iconic": "4.30.3",
20
- "@dynamic-labs/logger": "4.30.3",
21
- "@dynamic-labs/multi-wallet": "4.30.3",
22
- "@dynamic-labs/rpc-providers": "4.30.3",
23
- "@dynamic-labs/store": "4.30.3",
24
- "@dynamic-labs/types": "4.30.3",
25
- "@dynamic-labs/utils": "4.30.3",
26
- "@dynamic-labs/wallet-book": "4.30.3",
27
- "@dynamic-labs/wallet-connector-core": "4.30.3",
18
+ "@dynamic-labs/assert-package-version": "4.31.0",
19
+ "@dynamic-labs/iconic": "4.31.0",
20
+ "@dynamic-labs/logger": "4.31.0",
21
+ "@dynamic-labs/multi-wallet": "4.31.0",
22
+ "@dynamic-labs/rpc-providers": "4.31.0",
23
+ "@dynamic-labs/store": "4.31.0",
24
+ "@dynamic-labs/types": "4.31.0",
25
+ "@dynamic-labs/utils": "4.31.0",
26
+ "@dynamic-labs/wallet-book": "4.31.0",
27
+ "@dynamic-labs/wallet-connector-core": "4.31.0",
28
28
  "eventemitter3": "5.0.1"
29
29
  },
30
30
  "devDependencies": {
@@ -5,12 +5,49 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var React = require('react');
7
7
  var client = require('@dynamic-labs-sdk/client');
8
+ var core = require('@dynamic-labs-sdk/client/core');
8
9
  var setVerifyResponseToStorage = require('../../setVerifyResponseToStorage/setVerifyResponseToStorage.cjs');
10
+ var client$1 = require('../../../client.cjs');
11
+ require('@dynamic-labs/sdk-api-core');
12
+ var logger = require('../../../../shared/logger.cjs');
13
+ require('@dynamic-labs/iconic');
14
+ require('@dynamic-labs/wallet-connector-core');
15
+ require('react/jsx-runtime');
16
+ require('../../../../context/ViewContext/ViewContext.cjs');
17
+ require('@dynamic-labs/wallet-book');
18
+ require('@dynamic-labs/utils');
19
+ require('../../../../utils/constants/colors.cjs');
20
+ require('../../../../utils/constants/values.cjs');
21
+ require('../../../../shared/consts/index.cjs');
9
22
 
10
23
  const useSyncVerifyResponseWithStorage = () => {
11
24
  React.useEffect(() => client.onEvent({
12
- event: 'authenticated',
13
- listener: ({ verifyResponse }) => setVerifyResponseToStorage.setVerifyResponseToStorage(verifyResponse),
25
+ event: 'tokenChanged',
26
+ listener: ({ token }) => {
27
+ var _a;
28
+ if (!token) {
29
+ return;
30
+ }
31
+ const clientState = core.getCore(client$1.getDynamicClient()).state.get();
32
+ const minifiedJwt = token;
33
+ const jwt = (_a = clientState.legacyToken) !== null && _a !== void 0 ? _a : undefined;
34
+ const { sessionExpiresAt } = clientState;
35
+ // default to 0 because a number is required
36
+ const expiresAt = sessionExpiresAt
37
+ ? Math.floor(sessionExpiresAt.getTime() / 1000)
38
+ : 0;
39
+ logger.logger.logVerboseTroubleshootingMessage('[useSyncVerifyResponseWithStorage]', {
40
+ expiresAt,
41
+ jwt,
42
+ minifiedJwt,
43
+ sessionExpiresAt,
44
+ });
45
+ setVerifyResponseToStorage.setVerifyResponseToStorage({
46
+ expiresAt,
47
+ jwt,
48
+ minifiedJwt,
49
+ });
50
+ },
14
51
  }), []);
15
52
  };
16
53
 
@@ -1,12 +1,49 @@
1
1
  'use client'
2
2
  import { useEffect } from 'react';
3
3
  import { onEvent } from '@dynamic-labs-sdk/client';
4
+ import { getCore } from '@dynamic-labs-sdk/client/core';
4
5
  import { setVerifyResponseToStorage } from '../../setVerifyResponseToStorage/setVerifyResponseToStorage.js';
6
+ import { getDynamicClient } from '../../../client.js';
7
+ import '@dynamic-labs/sdk-api-core';
8
+ import { logger } from '../../../../shared/logger.js';
9
+ import '@dynamic-labs/iconic';
10
+ import '@dynamic-labs/wallet-connector-core';
11
+ import 'react/jsx-runtime';
12
+ import '../../../../context/ViewContext/ViewContext.js';
13
+ import '@dynamic-labs/wallet-book';
14
+ import '@dynamic-labs/utils';
15
+ import '../../../../utils/constants/colors.js';
16
+ import '../../../../utils/constants/values.js';
17
+ import '../../../../shared/consts/index.js';
5
18
 
6
19
  const useSyncVerifyResponseWithStorage = () => {
7
20
  useEffect(() => onEvent({
8
- event: 'authenticated',
9
- listener: ({ verifyResponse }) => setVerifyResponseToStorage(verifyResponse),
21
+ event: 'tokenChanged',
22
+ listener: ({ token }) => {
23
+ var _a;
24
+ if (!token) {
25
+ return;
26
+ }
27
+ const clientState = getCore(getDynamicClient()).state.get();
28
+ const minifiedJwt = token;
29
+ const jwt = (_a = clientState.legacyToken) !== null && _a !== void 0 ? _a : undefined;
30
+ const { sessionExpiresAt } = clientState;
31
+ // default to 0 because a number is required
32
+ const expiresAt = sessionExpiresAt
33
+ ? Math.floor(sessionExpiresAt.getTime() / 1000)
34
+ : 0;
35
+ logger.logVerboseTroubleshootingMessage('[useSyncVerifyResponseWithStorage]', {
36
+ expiresAt,
37
+ jwt,
38
+ minifiedJwt,
39
+ sessionExpiresAt,
40
+ });
41
+ setVerifyResponseToStorage({
42
+ expiresAt,
43
+ jwt,
44
+ minifiedJwt,
45
+ });
46
+ },
10
47
  }), []);
11
48
  };
12
49
 
@@ -1,2 +1,2 @@
1
1
  import { VerifyResponse } from '@dynamic-labs/sdk-api-core';
2
- export declare const setVerifyResponseToStorage: ({ expiresAt, jwt, minifiedJwt, }: VerifyResponse) => void;
2
+ export declare const setVerifyResponseToStorage: ({ expiresAt, jwt, minifiedJwt, }: Pick<VerifyResponse, 'expiresAt' | 'jwt' | 'minifiedJwt'>) => void;
@@ -6,6 +6,102 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var React = require('react');
8
8
  var classNames = require('../../utils/functions/classNames/classNames.cjs');
9
+ require('../../events/dynamicEvents.cjs');
10
+ require('../../../../_virtual/_tslib.cjs');
11
+ require('@dynamic-labs/utils');
12
+ require('../../context/DynamicContext/DynamicContext.cjs');
13
+ require('../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs');
14
+ require('@dynamic-labs/sdk-api-core');
15
+ require('../../shared/logger.cjs');
16
+ require('@dynamic-labs/iconic');
17
+ require('@dynamic-labs/wallet-connector-core');
18
+ require('../../context/ViewContext/ViewContext.cjs');
19
+ require('@dynamic-labs/wallet-book');
20
+ require('../../utils/constants/colors.cjs');
21
+ require('../../utils/constants/values.cjs');
22
+ require('../../shared/consts/index.cjs');
23
+ require('../../store/state/authMode/authMode.cjs');
24
+ require('../../context/CaptchaContext/CaptchaContext.cjs');
25
+ require('../../context/ErrorContext/ErrorContext.cjs');
26
+ require('@dynamic-labs/multi-wallet');
27
+ require('react-international-phone');
28
+ require('../../store/state/nonce/nonce.cjs');
29
+ require('@dynamic-labs-sdk/client/core');
30
+ require('../../client/client.cjs');
31
+ require('@dynamic-labs-sdk/client');
32
+ require('../../config/ApiEndpoint.cjs');
33
+ require('../../store/state/projectSettings/projectSettings.cjs');
34
+ require('../../locale/locale.cjs');
35
+ require('../../store/state/dynamicContextProps/dynamicContextProps.cjs');
36
+ require('../../store/state/primaryWalletId/primaryWalletId.cjs');
37
+ require('../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
38
+ require('../../context/AccessDeniedContext/AccessDeniedContext.cjs');
39
+ require('../../context/AccountExistsContext/AccountExistsContext.cjs');
40
+ require('../../context/UserWalletsContext/UserWalletsContext.cjs');
41
+ require('../../context/VerificationContext/VerificationContext.cjs');
42
+ require('react-dom');
43
+ require('../../utils/functions/compareChains/compareChains.cjs');
44
+ require('../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
45
+ require('../../context/ThemeContext/ThemeContext.cjs');
46
+ var useIsomorphicLayoutEffect = require('../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
47
+ require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
48
+ require('bs58');
49
+ require('@dynamic-labs/types');
50
+ require('../../context/SocialRedirectContext/SocialRedirectContext.cjs');
51
+ require('../../context/LoadingContext/LoadingContext.cjs');
52
+ require('../../context/WalletContext/WalletContext.cjs');
53
+ require('../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
54
+ require('yup');
55
+ require('../../context/MockContext/MockContext.cjs');
56
+ require('../../views/CollectUserDataView/useFields.cjs');
57
+ require('../../context/FieldsStateContext/FieldsStateContext.cjs');
58
+ require('../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
59
+ require('@dynamic-labs/rpc-providers');
60
+ require('../../store/state/walletOptions/walletOptions.cjs');
61
+ require('react-i18next');
62
+ require('../Accordion/components/AccordionItem/AccordionItem.cjs');
63
+ require('../Alert/Alert.cjs');
64
+ require('../ShadowDOM/ShadowDOM.cjs');
65
+ require('../IconButton/IconButton.cjs');
66
+ require('../InlineWidget/InlineWidget.cjs');
67
+ require('../Input/Input.cjs');
68
+ require('../IsBrowser/IsBrowser.cjs');
69
+ require('../MenuList/Dropdown/Dropdown.cjs');
70
+ require('../OverlayCard/OverlayCard.cjs');
71
+ require('../Transition/ZoomTransition/ZoomTransition.cjs');
72
+ require('../Transition/SlideInUpTransition/SlideInUpTransition.cjs');
73
+ require('../Transition/OpacityTransition/OpacityTransition.cjs');
74
+ require('../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
75
+ require('../Popper/Popper/Popper.cjs');
76
+ require('../Popper/PopperContext/PopperContext.cjs');
77
+ require('react-focus-lock');
78
+ require('qrcode');
79
+ require('formik');
80
+ require('../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
81
+ require('../../context/WalletGroupContext/WalletGroupContext.cjs');
82
+ require('../../context/IpConfigurationContext/IpConfigurationContext.cjs');
83
+ require('../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
84
+ require('../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
85
+ require('@hcaptcha/react-hcaptcha');
86
+ require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
87
+ require('../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
88
+ require('../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
89
+ require('../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
90
+ require('../../context/FooterAnimationContext/index.cjs');
91
+ require('../../views/MfaChooseDeviceView/useGetMfaOptions/useGetMfaOptions.cjs');
92
+ require('../../context/PasskeyContext/PasskeyContext.cjs');
93
+ require('../../context/OnrampContext/OnrampContext.cjs');
94
+ require('../../store/state/sendBalances.cjs');
95
+ require('../../store/state/connectorsInitializing/connectorsInitializing.cjs');
96
+ require('../OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
97
+ require('../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
98
+ require('../../views/TransactionConfirmationView/TransactionConfirmationView.cjs');
99
+ require('../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
100
+ require('../../../index.cjs');
101
+ require('../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
102
+ require('../../store/state/tokenBalances.cjs');
103
+ require('../../store/state/multichainBalances.cjs');
104
+ require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
9
105
 
10
106
  const OptionsSwitcher = ({ onChange, value, options, rootClassName, activeButtonClassName, buttonClassName, }) => {
11
107
  const isActive = (_value) => _value !== undefined && _value === value;
@@ -13,7 +109,7 @@ const OptionsSwitcher = ({ onChange, value, options, rootClassName, activeButton
13
109
  const [railCSSLeft, setRailCSSLeft] = React.useState(0);
14
110
  const getOptionDisplayValue = (option) => option.label || option.key;
15
111
  // Updates .options-switcher__active-rail position
16
- React.useLayoutEffect(() => {
112
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
17
113
  if (!rootRef.current)
18
114
  return;
19
115
  const activeOption = options === null || options === void 0 ? void 0 : options.find(({ key }) => key === value);
@@ -1,7 +1,103 @@
1
1
  'use client'
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useRef, useState, useLayoutEffect } from 'react';
3
+ import { useRef, useState } from 'react';
4
4
  import { classNames } from '../../utils/functions/classNames/classNames.js';
5
+ import '../../events/dynamicEvents.js';
6
+ import '../../../../_virtual/_tslib.js';
7
+ import '@dynamic-labs/utils';
8
+ import '../../context/DynamicContext/DynamicContext.js';
9
+ import '../../store/state/loadingAndLifecycle/loadingAndLifecycle.js';
10
+ import '@dynamic-labs/sdk-api-core';
11
+ import '../../shared/logger.js';
12
+ import '@dynamic-labs/iconic';
13
+ import '@dynamic-labs/wallet-connector-core';
14
+ import '../../context/ViewContext/ViewContext.js';
15
+ import '@dynamic-labs/wallet-book';
16
+ import '../../utils/constants/colors.js';
17
+ import '../../utils/constants/values.js';
18
+ import '../../shared/consts/index.js';
19
+ import '../../store/state/authMode/authMode.js';
20
+ import '../../context/CaptchaContext/CaptchaContext.js';
21
+ import '../../context/ErrorContext/ErrorContext.js';
22
+ import '@dynamic-labs/multi-wallet';
23
+ import 'react-international-phone';
24
+ import '../../store/state/nonce/nonce.js';
25
+ import '@dynamic-labs-sdk/client/core';
26
+ import '../../client/client.js';
27
+ import '@dynamic-labs-sdk/client';
28
+ import '../../config/ApiEndpoint.js';
29
+ import '../../store/state/projectSettings/projectSettings.js';
30
+ import '../../locale/locale.js';
31
+ import '../../store/state/dynamicContextProps/dynamicContextProps.js';
32
+ import '../../store/state/primaryWalletId/primaryWalletId.js';
33
+ import '../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
34
+ import '../../context/AccessDeniedContext/AccessDeniedContext.js';
35
+ import '../../context/AccountExistsContext/AccountExistsContext.js';
36
+ import '../../context/UserWalletsContext/UserWalletsContext.js';
37
+ import '../../context/VerificationContext/VerificationContext.js';
38
+ import 'react-dom';
39
+ import '../../utils/functions/compareChains/compareChains.js';
40
+ import '../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
41
+ import '../../context/ThemeContext/ThemeContext.js';
42
+ import { useIsomorphicLayoutEffect } from '../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
43
+ import '../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
44
+ import 'bs58';
45
+ import '@dynamic-labs/types';
46
+ import '../../context/SocialRedirectContext/SocialRedirectContext.js';
47
+ import '../../context/LoadingContext/LoadingContext.js';
48
+ import '../../context/WalletContext/WalletContext.js';
49
+ import '../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
50
+ import 'yup';
51
+ import '../../context/MockContext/MockContext.js';
52
+ import '../../views/CollectUserDataView/useFields.js';
53
+ import '../../context/FieldsStateContext/FieldsStateContext.js';
54
+ import '../../context/UserFieldEditorContext/UserFieldEditorContext.js';
55
+ import '@dynamic-labs/rpc-providers';
56
+ import '../../store/state/walletOptions/walletOptions.js';
57
+ import 'react-i18next';
58
+ import '../Accordion/components/AccordionItem/AccordionItem.js';
59
+ import '../Alert/Alert.js';
60
+ import '../ShadowDOM/ShadowDOM.js';
61
+ import '../IconButton/IconButton.js';
62
+ import '../InlineWidget/InlineWidget.js';
63
+ import '../Input/Input.js';
64
+ import '../IsBrowser/IsBrowser.js';
65
+ import '../MenuList/Dropdown/Dropdown.js';
66
+ import '../OverlayCard/OverlayCard.js';
67
+ import '../Transition/ZoomTransition/ZoomTransition.js';
68
+ import '../Transition/SlideInUpTransition/SlideInUpTransition.js';
69
+ import '../Transition/OpacityTransition/OpacityTransition.js';
70
+ import '../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
71
+ import '../Popper/Popper/Popper.js';
72
+ import '../Popper/PopperContext/PopperContext.js';
73
+ import 'react-focus-lock';
74
+ import 'qrcode';
75
+ import 'formik';
76
+ import '../../utils/hooks/useSubdomainCheck/useSubdomainCheck.js';
77
+ import '../../context/WalletGroupContext/WalletGroupContext.js';
78
+ import '../../context/IpConfigurationContext/IpConfigurationContext.js';
79
+ import '../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
80
+ import '../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
81
+ import '@hcaptcha/react-hcaptcha';
82
+ import '../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
83
+ import '../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.js';
84
+ import '../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.js';
85
+ import '../../context/ErrorContext/hooks/useErrorText/useErrorText.js';
86
+ import '../../context/FooterAnimationContext/index.js';
87
+ import '../../views/MfaChooseDeviceView/useGetMfaOptions/useGetMfaOptions.js';
88
+ import '../../context/PasskeyContext/PasskeyContext.js';
89
+ import '../../context/OnrampContext/OnrampContext.js';
90
+ import '../../store/state/sendBalances.js';
91
+ import '../../store/state/connectorsInitializing/connectorsInitializing.js';
92
+ import '../OverlayCardBase/OverlayCardTarget/OverlayCardTarget.js';
93
+ import '../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
94
+ import '../../views/TransactionConfirmationView/TransactionConfirmationView.js';
95
+ import '../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.js';
96
+ import '../../../index.js';
97
+ import '../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
98
+ import '../../store/state/tokenBalances.js';
99
+ import '../../store/state/multichainBalances.js';
100
+ import '../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
5
101
 
6
102
  const OptionsSwitcher = ({ onChange, value, options, rootClassName, activeButtonClassName, buttonClassName, }) => {
7
103
  const isActive = (_value) => _value !== undefined && _value === value;
@@ -9,7 +105,7 @@ const OptionsSwitcher = ({ onChange, value, options, rootClassName, activeButton
9
105
  const [railCSSLeft, setRailCSSLeft] = useState(0);
10
106
  const getOptionDisplayValue = (option) => option.label || option.key;
11
107
  // Updates .options-switcher__active-rail position
12
- useLayoutEffect(() => {
108
+ useIsomorphicLayoutEffect(() => {
13
109
  if (!rootRef.current)
14
110
  return;
15
111
  const activeOption = options === null || options === void 0 ? void 0 : options.find(({ key }) => key === value);
@@ -20,13 +20,98 @@ require('../../shared/consts/index.cjs');
20
20
  var classNames = require('../../utils/functions/classNames/classNames.cjs');
21
21
  var Icon = require('../Icon/Icon.cjs');
22
22
  var Typography = require('../Typography/Typography.cjs');
23
+ require('../../events/dynamicEvents.cjs');
24
+ require('../../context/DynamicContext/DynamicContext.cjs');
25
+ require('../../store/state/loadingAndLifecycle/loadingAndLifecycle.cjs');
26
+ require('../../store/state/authMode/authMode.cjs');
27
+ require('../../context/CaptchaContext/CaptchaContext.cjs');
28
+ require('../../context/ErrorContext/ErrorContext.cjs');
29
+ require('@dynamic-labs/multi-wallet');
30
+ require('react-international-phone');
31
+ require('../../store/state/nonce/nonce.cjs');
32
+ require('@dynamic-labs-sdk/client/core');
33
+ require('../../client/client.cjs');
34
+ require('@dynamic-labs-sdk/client');
35
+ require('../../config/ApiEndpoint.cjs');
36
+ require('../../store/state/projectSettings/projectSettings.cjs');
37
+ require('../../locale/locale.cjs');
38
+ require('../../store/state/dynamicContextProps/dynamicContextProps.cjs');
39
+ require('../../store/state/primaryWalletId/primaryWalletId.cjs');
40
+ require('../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
41
+ require('../../context/AccessDeniedContext/AccessDeniedContext.cjs');
42
+ require('../../context/AccountExistsContext/AccountExistsContext.cjs');
43
+ require('../../context/UserWalletsContext/UserWalletsContext.cjs');
44
+ require('../../context/VerificationContext/VerificationContext.cjs');
45
+ require('react-dom');
46
+ require('../../utils/functions/compareChains/compareChains.cjs');
47
+ require('../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
48
+ require('../../context/ThemeContext/ThemeContext.cjs');
49
+ var useIsomorphicLayoutEffect = require('../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
50
+ require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
51
+ require('bs58');
52
+ require('@dynamic-labs/types');
53
+ require('../../context/SocialRedirectContext/SocialRedirectContext.cjs');
54
+ require('../../context/LoadingContext/LoadingContext.cjs');
55
+ require('../../context/WalletContext/WalletContext.cjs');
56
+ require('../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
57
+ require('yup');
58
+ require('../../context/MockContext/MockContext.cjs');
59
+ require('../../views/CollectUserDataView/useFields.cjs');
60
+ require('../../context/FieldsStateContext/FieldsStateContext.cjs');
61
+ require('../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
62
+ require('@dynamic-labs/rpc-providers');
63
+ require('../../store/state/walletOptions/walletOptions.cjs');
64
+ require('react-i18next');
65
+ require('../Accordion/components/AccordionItem/AccordionItem.cjs');
66
+ require('../Alert/Alert.cjs');
67
+ require('../ShadowDOM/ShadowDOM.cjs');
68
+ require('../IconButton/IconButton.cjs');
69
+ require('../InlineWidget/InlineWidget.cjs');
70
+ require('../Input/Input.cjs');
71
+ require('../IsBrowser/IsBrowser.cjs');
72
+ require('../MenuList/Dropdown/Dropdown.cjs');
73
+ require('../OverlayCard/OverlayCard.cjs');
74
+ require('../Transition/ZoomTransition/ZoomTransition.cjs');
75
+ require('../Transition/SlideInUpTransition/SlideInUpTransition.cjs');
76
+ require('../Transition/OpacityTransition/OpacityTransition.cjs');
77
+ require('../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
78
+ require('../Popper/Popper/Popper.cjs');
79
+ require('../Popper/PopperContext/PopperContext.cjs');
80
+ require('react-focus-lock');
81
+ require('qrcode');
82
+ require('formik');
83
+ require('../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
84
+ require('../../context/WalletGroupContext/WalletGroupContext.cjs');
85
+ require('../../context/IpConfigurationContext/IpConfigurationContext.cjs');
86
+ require('../../context/ConnectWithOtpContext/ConnectWithOtpContext.cjs');
87
+ require('../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
88
+ require('@hcaptcha/react-hcaptcha');
89
+ require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
90
+ require('../../widgets/DynamicWidget/helpers/convertExchangeKeyAndProviderEnum.cjs');
91
+ require('../../views/ExchangeWhitelistWarning/ExchangeWhitelistWarning.cjs');
92
+ require('../../context/ErrorContext/hooks/useErrorText/useErrorText.cjs');
93
+ require('../../context/FooterAnimationContext/index.cjs');
94
+ require('../../views/MfaChooseDeviceView/useGetMfaOptions/useGetMfaOptions.cjs');
95
+ require('../../context/PasskeyContext/PasskeyContext.cjs');
96
+ require('../../context/OnrampContext/OnrampContext.cjs');
23
97
  var getDisplayValue = require('./utils/getDisplayValue/getDisplayValue.cjs');
98
+ require('../../store/state/sendBalances.cjs');
99
+ require('../../store/state/connectorsInitializing/connectorsInitializing.cjs');
100
+ require('../OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
101
+ require('../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
102
+ require('../../views/TransactionConfirmationView/TransactionConfirmationView.cjs');
103
+ require('../../widgets/DynamicWidget/components/PasskeyCard/PasskeyCard.cjs');
104
+ require('../../../index.cjs');
105
+ require('../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
106
+ require('../../store/state/tokenBalances.cjs');
107
+ require('../../store/state/multichainBalances.cjs');
108
+ require('../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
24
109
 
25
110
  const Select = (_a) => {
26
111
  var { children, className = '', id, label, value, error = false, selectDataTestId, message } = _a, selectProps = _tslib.__rest(_a, ["children", "className", "id", "label", "value", "error", "selectDataTestId", "message"]);
27
112
  const selectRef = React.useRef(null);
28
113
  const [displayValue, setDisplayValue] = React.useState();
29
- React.useLayoutEffect(() => {
114
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
30
115
  if (!value)
31
116
  return;
32
117
  const selectElement = selectRef.current;
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { __rest } from '../../../../_virtual/_tslib.js';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
- import { useRef, useState, useLayoutEffect } from 'react';
4
+ import { useRef, useState } from 'react';
5
5
  import '@dynamic-labs/sdk-api-core';
6
6
  import '../../shared/logger.js';
7
7
  import '@dynamic-labs/iconic';
@@ -16,13 +16,98 @@ import '../../shared/consts/index.js';
16
16
  import { classNames } from '../../utils/functions/classNames/classNames.js';
17
17
  import { Icon } from '../Icon/Icon.js';
18
18
  import { Typography } from '../Typography/Typography.js';
19
+ import '../../events/dynamicEvents.js';
20
+ import '../../context/DynamicContext/DynamicContext.js';
21
+ import '../../store/state/loadingAndLifecycle/loadingAndLifecycle.js';
22
+ import '../../store/state/authMode/authMode.js';
23
+ import '../../context/CaptchaContext/CaptchaContext.js';
24
+ import '../../context/ErrorContext/ErrorContext.js';
25
+ import '@dynamic-labs/multi-wallet';
26
+ import 'react-international-phone';
27
+ import '../../store/state/nonce/nonce.js';
28
+ import '@dynamic-labs-sdk/client/core';
29
+ import '../../client/client.js';
30
+ import '@dynamic-labs-sdk/client';
31
+ import '../../config/ApiEndpoint.js';
32
+ import '../../store/state/projectSettings/projectSettings.js';
33
+ import '../../locale/locale.js';
34
+ import '../../store/state/dynamicContextProps/dynamicContextProps.js';
35
+ import '../../store/state/primaryWalletId/primaryWalletId.js';
36
+ import '../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
37
+ import '../../context/AccessDeniedContext/AccessDeniedContext.js';
38
+ import '../../context/AccountExistsContext/AccountExistsContext.js';
39
+ import '../../context/UserWalletsContext/UserWalletsContext.js';
40
+ import '../../context/VerificationContext/VerificationContext.js';
41
+ import 'react-dom';
42
+ import '../../utils/functions/compareChains/compareChains.js';
43
+ import '../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
44
+ import '../../context/ThemeContext/ThemeContext.js';
45
+ import { useIsomorphicLayoutEffect } from '../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
46
+ import '../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
47
+ import 'bs58';
48
+ import '@dynamic-labs/types';
49
+ import '../../context/SocialRedirectContext/SocialRedirectContext.js';
50
+ import '../../context/LoadingContext/LoadingContext.js';
51
+ import '../../context/WalletContext/WalletContext.js';
52
+ import '../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
53
+ import 'yup';
54
+ import '../../context/MockContext/MockContext.js';
55
+ import '../../views/CollectUserDataView/useFields.js';
56
+ import '../../context/FieldsStateContext/FieldsStateContext.js';
57
+ import '../../context/UserFieldEditorContext/UserFieldEditorContext.js';
58
+ import '@dynamic-labs/rpc-providers';
59
+ import '../../store/state/walletOptions/walletOptions.js';
60
+ import 'react-i18next';
61
+ import '../Accordion/components/AccordionItem/AccordionItem.js';
62
+ import '../Alert/Alert.js';
63
+ import '../ShadowDOM/ShadowDOM.js';
64
+ import '../IconButton/IconButton.js';
65
+ import '../InlineWidget/InlineWidget.js';
66
+ import '../Input/Input.js';
67
+ import '../IsBrowser/IsBrowser.js';
68
+ import '../MenuList/Dropdown/Dropdown.js';
69
+ import '../OverlayCard/OverlayCard.js';
70
+ import '../Transition/ZoomTransition/ZoomTransition.js';
71
+ import '../Transition/SlideInUpTransition/SlideInUpTransition.js';
72
+ import '../Transition/OpacityTransition/OpacityTransition.js';
73
+ import '../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
74
+ import '../Popper/Popper/Popper.js';
75
+ import '../Popper/PopperContext/PopperContext.js';
76
+ import 'react-focus-lock';
77
+ import 'qrcode';
78
+ import 'formik';
79
+ import '../../utils/hooks/useSubdomainCheck/useSubdomainCheck.js';
80
+ import '../../context/WalletGroupContext/WalletGroupContext.js';
81
+ import '../../context/IpConfigurationContext/IpConfigurationContext.js';
82
+ import '../../context/ConnectWithOtpContext/ConnectWithOtpContext.js';
83
+ import '../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
84
+ import '@hcaptcha/react-hcaptcha';
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 '../../views/MfaChooseDeviceView/useGetMfaOptions/useGetMfaOptions.js';
91
+ import '../../context/PasskeyContext/PasskeyContext.js';
92
+ import '../../context/OnrampContext/OnrampContext.js';
19
93
  import { getDisplayValue } from './utils/getDisplayValue/getDisplayValue.js';
94
+ import '../../store/state/sendBalances.js';
95
+ import '../../store/state/connectorsInitializing/connectorsInitializing.js';
96
+ import '../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';
20
105
 
21
106
  const Select = (_a) => {
22
107
  var { children, className = '', id, label, value, error = false, selectDataTestId, message } = _a, selectProps = __rest(_a, ["children", "className", "id", "label", "value", "error", "selectDataTestId", "message"]);
23
108
  const selectRef = useRef(null);
24
109
  const [displayValue, setDisplayValue] = useState();
25
- useLayoutEffect(() => {
110
+ useIsomorphicLayoutEffect(() => {
26
111
  if (!value)
27
112
  return;
28
113
  const selectElement = selectRef.current;
@@ -42,6 +42,7 @@ require('../../context/VerificationContext/VerificationContext.cjs');
42
42
  require('../../utils/functions/compareChains/compareChains.cjs');
43
43
  require('../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.cjs');
44
44
  require('../../context/ThemeContext/ThemeContext.cjs');
45
+ var useIsomorphicLayoutEffect = require('../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
45
46
  require('../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
46
47
  require('bs58');
47
48
  require('@dynamic-labs/types');
@@ -127,7 +128,7 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
127
128
  }
128
129
  return null;
129
130
  }, [cssOverrides]);
130
- React.useLayoutEffect(() => {
131
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
131
132
  if (nodeRef && shadowDOMEnabled) {
132
133
  try {
133
134
  const root = nodeRef.attachShadow({
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
- import React__default, { useState, useMemo, useLayoutEffect } from 'react';
3
+ import React__default, { useState, useMemo } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { isLegacySafari } from '@dynamic-labs/utils';
6
6
  import '../../context/DynamicContext/DynamicContext.js';
@@ -38,6 +38,7 @@ import '../../context/VerificationContext/VerificationContext.js';
38
38
  import '../../utils/functions/compareChains/compareChains.js';
39
39
  import '../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
40
40
  import '../../context/ThemeContext/ThemeContext.js';
41
+ import { useIsomorphicLayoutEffect } from '../../utils/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
41
42
  import '../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
42
43
  import 'bs58';
43
44
  import '@dynamic-labs/types';
@@ -119,7 +120,7 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
119
120
  }
120
121
  return null;
121
122
  }, [cssOverrides]);
122
- useLayoutEffect(() => {
123
+ useIsomorphicLayoutEffect(() => {
123
124
  if (nodeRef && shadowDOMEnabled) {
124
125
  try {
125
126
  const root = nodeRef.attachShadow({
@@ -0,0 +1 @@
1
+ export { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
@@ -38,14 +38,11 @@ const useMfa = () => {
38
38
  const handleMfaAuth = React.useCallback((_a) => _tslib.__awaiter(void 0, [_a], void 0, function* ({ code, type, deviceId, createMfaToken, resultHandler, }) {
39
39
  let result;
40
40
  yield completeAuth({
41
- onValidUpdatedJwt: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
42
- // This callback is used by authDevice
43
- }),
44
41
  updateJwtFunction: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
45
42
  if (type !== sdkApiCore.MFADeviceType.Totp) {
46
43
  throw new Error('Only Totp is supported');
47
44
  }
48
- const response = yield client.authTotpMfaDevice({
45
+ const response = yield client.authenticateTotpMfaDevice({
49
46
  code,
50
47
  createMfaTokenOptions: createMfaToken,
51
48
  deviceId,
@@ -122,7 +119,7 @@ const useMfa = () => {
122
119
  isValid = true;
123
120
  }),
124
121
  updateJwtFunction: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
125
- const response = yield client.authMfaRecoveryCode({
122
+ const response = yield client.authenticateMfaRecoveryCode({
126
123
  code,
127
124
  });
128
125
  if (!response) {
@@ -142,6 +139,33 @@ const useMfa = () => {
142
139
  });
143
140
  return isValid;
144
141
  }), [completeAuth]);
142
+ const authenticateRecoveryCode = React.useCallback((_c) => _tslib.__awaiter(void 0, [_c], void 0, function* ({ code, createMfaToken, }) {
143
+ let mfaToken = undefined;
144
+ yield completeAuth({
145
+ updateJwtFunction: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
146
+ const response = yield client.authenticateMfaRecoveryCode({
147
+ code,
148
+ createMfaTokenOptions: createMfaToken,
149
+ });
150
+ if (!response) {
151
+ throw new Error('Failed to authenticate recovery code');
152
+ }
153
+ // eslint-disable-next-line prefer-destructuring
154
+ mfaToken = response.mfaToken;
155
+ dynamicEvents.dynamicEvents.emit('mfaCompletionSuccess', {
156
+ mfaToken: response.mfaToken,
157
+ });
158
+ return {
159
+ isEmailVerificationRequired: false,
160
+ isSmsVerificationRequired: false,
161
+ missingFields: [],
162
+ // in the mfa flow, we only care about the user in the response
163
+ updateUserProfileResponse: response,
164
+ };
165
+ }),
166
+ });
167
+ return mfaToken;
168
+ }), [completeAuth]);
145
169
  const verifyDevice = React.useCallback((code_2, ...args_3) => _tslib.__awaiter(void 0, [code_2, ...args_3], void 0, function* (code, type = sdkApiCore.MFADeviceType.Totp) {
146
170
  if (type === sdkApiCore.MFADeviceType.Totp) {
147
171
  const device = yield verifyTotpMfaDevice.verifyTotpMfaDevice({
@@ -172,6 +196,7 @@ const useMfa = () => {
172
196
  authDevice,
173
197
  authRecoveryCode,
174
198
  authenticateDevice,
199
+ authenticateRecoveryCode,
175
200
  completeAcknowledgement,
176
201
  deleteUserDevice,
177
202
  getRecoveryCodes,
@@ -14,10 +14,21 @@ type UseMfaHookResult = {
14
14
  * indicating if the authentication was successful.
15
15
  */
16
16
  authDevice: (code: string, type?: MFADeviceType, deviceId?: string) => Promise<boolean>;
17
+ /**
18
+ * @deprecated use authenticateRecoveryCode instead
19
+ */
17
20
  authRecoveryCode: (code: string) => Promise<boolean>;
21
+ /**
22
+ * Authenticates a recovery code and returns a single use MFA token
23
+ * if the authentication is successful and createMfaToken param is provided.
24
+ */
25
+ authenticateRecoveryCode: ({ code, createMfaToken, }: {
26
+ code: string;
27
+ createMfaToken?: CreateMfaToken;
28
+ }) => Promise<string | undefined>;
18
29
  /**
19
30
  * Authenticates a device and returns a single use MFA token
20
- * if the authentication is successful.
31
+ * if the authentication is successful and createMfaToken param is provided.
21
32
  */
22
33
  authenticateDevice: ({ code, type, deviceId, createMfaToken, }: {
23
34
  code: string;
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import { __awaiter } from '../../../../../_virtual/_tslib.js';
3
3
  import { useCallback } from 'react';
4
- import { authTotpMfaDevice, getMfaDevices, setDefaultMfaDevice, deleteMfaDevice, registerTotpMfaDevice, authMfaRecoveryCode, createNewMfaRecoveryCodes, getMfaRecoveryCodes, acknowledgeRecoveryCodes } from '@dynamic-labs-sdk/client';
4
+ import { authenticateTotpMfaDevice, getMfaDevices, setDefaultMfaDevice, deleteMfaDevice, registerTotpMfaDevice, authenticateMfaRecoveryCode, createNewMfaRecoveryCodes, getMfaRecoveryCodes, acknowledgeRecoveryCodes } from '@dynamic-labs-sdk/client';
5
5
  import { MFADeviceType } from '@dynamic-labs/sdk-api-core';
6
6
  import { verifyTotpMfaDevice } from '../../../client/extension/deprecated/mfa/verifyTotpMfaDevice/verifyTotpMfaDevice.js';
7
7
  import '../../../client/client.js';
@@ -34,14 +34,11 @@ const useMfa = () => {
34
34
  const handleMfaAuth = useCallback((_a) => __awaiter(void 0, [_a], void 0, function* ({ code, type, deviceId, createMfaToken, resultHandler, }) {
35
35
  let result;
36
36
  yield completeAuth({
37
- onValidUpdatedJwt: () => __awaiter(void 0, void 0, void 0, function* () {
38
- // This callback is used by authDevice
39
- }),
40
37
  updateJwtFunction: () => __awaiter(void 0, void 0, void 0, function* () {
41
38
  if (type !== MFADeviceType.Totp) {
42
39
  throw new Error('Only Totp is supported');
43
40
  }
44
- const response = yield authTotpMfaDevice({
41
+ const response = yield authenticateTotpMfaDevice({
45
42
  code,
46
43
  createMfaTokenOptions: createMfaToken,
47
44
  deviceId,
@@ -118,7 +115,7 @@ const useMfa = () => {
118
115
  isValid = true;
119
116
  }),
120
117
  updateJwtFunction: () => __awaiter(void 0, void 0, void 0, function* () {
121
- const response = yield authMfaRecoveryCode({
118
+ const response = yield authenticateMfaRecoveryCode({
122
119
  code,
123
120
  });
124
121
  if (!response) {
@@ -138,6 +135,33 @@ const useMfa = () => {
138
135
  });
139
136
  return isValid;
140
137
  }), [completeAuth]);
138
+ const authenticateRecoveryCode = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ code, createMfaToken, }) {
139
+ let mfaToken = undefined;
140
+ yield completeAuth({
141
+ updateJwtFunction: () => __awaiter(void 0, void 0, void 0, function* () {
142
+ const response = yield authenticateMfaRecoveryCode({
143
+ code,
144
+ createMfaTokenOptions: createMfaToken,
145
+ });
146
+ if (!response) {
147
+ throw new Error('Failed to authenticate recovery code');
148
+ }
149
+ // eslint-disable-next-line prefer-destructuring
150
+ mfaToken = response.mfaToken;
151
+ dynamicEvents.emit('mfaCompletionSuccess', {
152
+ mfaToken: response.mfaToken,
153
+ });
154
+ return {
155
+ isEmailVerificationRequired: false,
156
+ isSmsVerificationRequired: false,
157
+ missingFields: [],
158
+ // in the mfa flow, we only care about the user in the response
159
+ updateUserProfileResponse: response,
160
+ };
161
+ }),
162
+ });
163
+ return mfaToken;
164
+ }), [completeAuth]);
141
165
  const verifyDevice = useCallback((code_2, ...args_3) => __awaiter(void 0, [code_2, ...args_3], void 0, function* (code, type = MFADeviceType.Totp) {
142
166
  if (type === MFADeviceType.Totp) {
143
167
  const device = yield verifyTotpMfaDevice({
@@ -168,6 +192,7 @@ const useMfa = () => {
168
192
  authDevice,
169
193
  authRecoveryCode,
170
194
  authenticateDevice,
195
+ authenticateRecoveryCode,
171
196
  completeAcknowledgement,
172
197
  deleteUserDevice,
173
198
  getRecoveryCodes,
@@ -4,6 +4,7 @@
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var React = require('react');
7
+ var useIsomorphicLayoutEffect = require('../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs');
7
8
 
8
9
  const useResizeObserver = (ref, callback) => {
9
10
  const [rect, setRect] = React.useState();
@@ -17,7 +18,7 @@ const useResizeObserver = (ref, callback) => {
17
18
  callback(entry.contentRect);
18
19
  }
19
20
  }, [callback, setRect]);
20
- React.useLayoutEffect(() => {
21
+ useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
21
22
  if (!ref.current) {
22
23
  return;
23
24
  }
@@ -1,5 +1,6 @@
1
1
  'use client'
2
- import { useState, useCallback, useLayoutEffect } from 'react';
2
+ import { useState, useCallback } from 'react';
3
+ import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js';
3
4
 
4
5
  const useResizeObserver = (ref, callback) => {
5
6
  const [rect, setRect] = useState();
@@ -13,7 +14,7 @@ const useResizeObserver = (ref, callback) => {
13
14
  callback(entry.contentRect);
14
15
  }
15
16
  }, [callback, setRect]);
16
- useLayoutEffect(() => {
17
+ useIsomorphicLayoutEffect(() => {
17
18
  if (!ref.current) {
18
19
  return;
19
20
  }