@dynamic-labs/sdk-react-core 4.9.9 → 4.9.10

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,11 @@
1
1
 
2
+ ### [4.9.10](https://github.com/dynamic-labs/dynamic-auth/compare/v4.9.9...v4.9.10) (2025-03-26)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * auto select primary wallet when embedded wallets are disabled ([#8374](https://github.com/dynamic-labs/dynamic-auth/issues/8374)) ([780f3f1](https://github.com/dynamic-labs/dynamic-auth/commit/780f3f16ebd06dd8bc41fa85e8b4393c906989e2))
8
+
2
9
  ### [4.9.9](https://github.com/dynamic-labs/dynamic-auth/compare/v4.9.8...v4.9.9) (2025-03-26)
3
10
 
4
11
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.9.9";
6
+ var version = "4.9.10";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.644",
9
9
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "4.9.9";
2
+ var version = "4.9.10";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.644",
5
5
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.9.9",
3
+ "version": "4.9.10",
4
4
  "dependencies": {
5
5
  "@dynamic-labs/sdk-api-core": "0.0.644",
6
6
  "@hcaptcha/react-hcaptcha": "1.4.4",
@@ -14,16 +14,16 @@
14
14
  "yup": "0.32.11",
15
15
  "react-international-phone": "4.2.5",
16
16
  "bs58": "5.0.0",
17
- "@dynamic-labs/assert-package-version": "4.9.9",
18
- "@dynamic-labs/iconic": "4.9.9",
19
- "@dynamic-labs/logger": "4.9.9",
20
- "@dynamic-labs/multi-wallet": "4.9.9",
21
- "@dynamic-labs/rpc-providers": "4.9.9",
22
- "@dynamic-labs/store": "4.9.9",
23
- "@dynamic-labs/types": "4.9.9",
24
- "@dynamic-labs/utils": "4.9.9",
25
- "@dynamic-labs/wallet-book": "4.9.9",
26
- "@dynamic-labs/wallet-connector-core": "4.9.9",
17
+ "@dynamic-labs/assert-package-version": "4.9.10",
18
+ "@dynamic-labs/iconic": "4.9.10",
19
+ "@dynamic-labs/logger": "4.9.10",
20
+ "@dynamic-labs/multi-wallet": "4.9.10",
21
+ "@dynamic-labs/rpc-providers": "4.9.10",
22
+ "@dynamic-labs/store": "4.9.10",
23
+ "@dynamic-labs/types": "4.9.10",
24
+ "@dynamic-labs/utils": "4.9.10",
25
+ "@dynamic-labs/wallet-book": "4.9.10",
26
+ "@dynamic-labs/wallet-connector-core": "4.9.10",
27
27
  "eventemitter3": "5.0.1"
28
28
  },
29
29
  "devDependencies": {
@@ -147,6 +147,7 @@ var useShowAuthFlow = require('./hooks/useShowAuthFlow/useShowAuthFlow.cjs');
147
147
  var usePasskeySuccessPopup = require('./hooks/usePasskeySuccessPopup/usePasskeySuccessPopup.cjs');
148
148
  var useTieCallbacksToEvents = require('./hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs');
149
149
  var useMultiWallet = require('./hooks/useMultiWallet/useMultiWallet.cjs');
150
+ var useAutoselectPrimaryWallet = require('./hooks/useAutoselectPrimaryWallet/useAutoselectPrimaryWallet.cjs');
150
151
  var useInitialViewType = require('./hooks/useInitialViewType/useInitialViewType.cjs');
151
152
  var useMultiAsset = require('./hooks/useMultiAsset/useMultiAsset.cjs');
152
153
  var useParentDynamicContextGuard = require('./hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.cjs');
@@ -325,6 +326,7 @@ const InnerDynamicContextProvider = (props) => {
325
326
  user: user$1 || userWithMissingInfo,
326
327
  walletConnectorOptions,
327
328
  });
329
+ useAutoselectPrimaryWallet.useAutoselectPrimaryWallet(isBridgeFlow);
328
330
  React.useEffect(() => {
329
331
  setRequiredWalletsConnected(!(bridgeChainsToConnect === null || bridgeChainsToConnect === void 0 ? void 0 : bridgeChainsToConnect.length) && Boolean(primaryWallet));
330
332
  }, [bridgeChainsToConnect, primaryWallet]);
@@ -143,6 +143,7 @@ import { useShowAuthFlow } from './hooks/useShowAuthFlow/useShowAuthFlow.js';
143
143
  import { usePasskeySuccessPopup } from './hooks/usePasskeySuccessPopup/usePasskeySuccessPopup.js';
144
144
  import { useTieCallbacksToEvents } from './hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.js';
145
145
  import { useMultiWallet } from './hooks/useMultiWallet/useMultiWallet.js';
146
+ import { useAutoselectPrimaryWallet } from './hooks/useAutoselectPrimaryWallet/useAutoselectPrimaryWallet.js';
146
147
  import { useInitialViewType } from './hooks/useInitialViewType/useInitialViewType.js';
147
148
  import { useMultiAsset } from './hooks/useMultiAsset/useMultiAsset.js';
148
149
  import { useParentDynamicContextGuard } from './hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.js';
@@ -321,6 +322,7 @@ const InnerDynamicContextProvider = (props) => {
321
322
  user: user || userWithMissingInfo,
322
323
  walletConnectorOptions,
323
324
  });
325
+ useAutoselectPrimaryWallet(isBridgeFlow);
324
326
  useEffect(() => {
325
327
  setRequiredWalletsConnected(!(bridgeChainsToConnect === null || bridgeChainsToConnect === void 0 ? void 0 : bridgeChainsToConnect.length) && Boolean(primaryWallet));
326
328
  }, [bridgeChainsToConnect, primaryWallet]);
@@ -0,0 +1 @@
1
+ export * from './useAutoselectPrimaryWallet';
@@ -0,0 +1,120 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var primaryWalletId = require('../../../../store/state/primaryWalletId/primaryWalletId.cjs');
7
+ require('@dynamic-labs/sdk-api-core');
8
+ require('../../../../utils/constants/values.cjs');
9
+ require('@dynamic-labs/utils');
10
+ require('../../../../../../_virtual/_tslib.cjs');
11
+ require('@dynamic-labs/multi-wallet');
12
+ require('../../../../shared/logger.cjs');
13
+ require('../../../../utils/constants/colors.cjs');
14
+ require('react-international-phone');
15
+ require('@dynamic-labs/iconic');
16
+ require('@dynamic-labs/wallet-connector-core');
17
+ require('react');
18
+ require('react/jsx-runtime');
19
+ require('../../../ViewContext/ViewContext.cjs');
20
+ require('@dynamic-labs/wallet-book');
21
+ require('../../../../shared/consts/index.cjs');
22
+ require('../../../../store/state/nonce/nonce.cjs');
23
+ require('../../../../store/state/projectSettings/projectSettings.cjs');
24
+ var updatePrimaryWalletId = require('../../../../utils/functions/updatePrimaryWalletId/updatePrimaryWalletId.cjs');
25
+ var useDynamicEvents = require('../../../../utils/hooks/events/useDynamicEvents/useDynamicEvents.cjs');
26
+ require('../../DynamicContext.cjs');
27
+ require('../../../CaptchaContext/CaptchaContext.cjs');
28
+ require('../../../ErrorContext/ErrorContext.cjs');
29
+ require('../../../AccessDeniedContext/AccessDeniedContext.cjs');
30
+ require('../../../AccountExistsContext/AccountExistsContext.cjs');
31
+ require('../../../UserWalletsContext/UserWalletsContext.cjs');
32
+ require('../../../../config/ApiEndpoint.cjs');
33
+ require('../../../../store/state/user/user.cjs');
34
+ require('../../../../locale/locale.cjs');
35
+ require('../../../../events/dynamicEvents.cjs');
36
+ require('../../../../store/state/connectedWalletsInfo/connectedWalletsInfo.cjs');
37
+ require('../../../VerificationContext/VerificationContext.cjs');
38
+ require('react-dom');
39
+ require('../../../../utils/functions/compareChains/compareChains.cjs');
40
+ require('../../../ThemeContext/ThemeContext.cjs');
41
+ require('../../../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
42
+ require('bs58');
43
+ require('@dynamic-labs/types');
44
+ require('../../../SocialRedirectContext/SocialRedirectContext.cjs');
45
+ require('../../../LoadingContext/LoadingContext.cjs');
46
+ require('../../../WalletContext/WalletContext.cjs');
47
+ require('../../../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.cjs');
48
+ require('yup');
49
+ require('../../../MockContext/MockContext.cjs');
50
+ require('../../../../views/CollectUserDataView/useFields.cjs');
51
+ require('../../../FieldsStateContext/FieldsStateContext.cjs');
52
+ require('../../../UserFieldEditorContext/UserFieldEditorContext.cjs');
53
+ require('@dynamic-labs/rpc-providers');
54
+ require('../../../../store/state/loadingAndLifecycle.cjs');
55
+ require('../../../../store/state/dynamicContextProps/dynamicContextProps.cjs');
56
+ require('../../../../store/state/walletOptions/walletOptions.cjs');
57
+ require('react-i18next');
58
+ require('../../../../components/Accordion/components/AccordionItem/AccordionItem.cjs');
59
+ require('../../../../components/Alert/Alert.cjs');
60
+ require('../../../../components/ShadowDOM/ShadowDOM.cjs');
61
+ require('../../../../components/IconButton/IconButton.cjs');
62
+ require('../../../../components/InlineWidget/InlineWidget.cjs');
63
+ require('../../../../components/Input/Input.cjs');
64
+ require('../../../../components/IsBrowser/IsBrowser.cjs');
65
+ require('../../../../components/MenuList/Dropdown/Dropdown.cjs');
66
+ require('../../../../components/OverlayCard/OverlayCard.cjs');
67
+ require('../../../../components/Transition/ZoomTransition/ZoomTransition.cjs');
68
+ require('../../../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
69
+ require('../../../../components/Transition/OpacityTransition/OpacityTransition.cjs');
70
+ require('../../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
71
+ require('../../../../components/Popper/Popper/Popper.cjs');
72
+ require('../../../../components/Popper/PopperContext/PopperContext.cjs');
73
+ require('react-focus-lock');
74
+ require('qrcode');
75
+ require('formik');
76
+ require('../../../../utils/hooks/useSubdomainCheck/useSubdomainCheck.cjs');
77
+ require('../../../WalletGroupContext/WalletGroupContext.cjs');
78
+ require('../../../IpConfigurationContext/IpConfigurationContext.cjs');
79
+ require('../../../ConnectWithOtpContext/ConnectWithOtpContext.cjs');
80
+ require('../../../ConnectWithOtpContext/constants.cjs');
81
+ require('../../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
82
+ require('@hcaptcha/react-hcaptcha');
83
+ require('../../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
84
+ require('../../../FooterAnimationContext/index.cjs');
85
+ require('../../../ErrorContext/hooks/useErrorText/useErrorText.cjs');
86
+ require('../../../PasskeyContext/PasskeyContext.cjs');
87
+ require('../../../../store/state/sendBalances.cjs');
88
+ require('../../../../store/state/connectorsInitializing/connectorsInitializing.cjs');
89
+ require('../../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.cjs');
90
+ require('../../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
91
+ require('../../../../views/TransactionConfirmationView/TransactionConfirmationView.cjs');
92
+ require('../../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
93
+ require('../../../OnrampContext/OnrampContext.cjs');
94
+ require('../../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.cjs');
95
+ require('../../../../../index.cjs');
96
+ require('../../../../store/state/tokenBalances.cjs');
97
+ require('../../../../shared/utils/functions/getInitialUrl/getInitialUrl.cjs');
98
+
99
+ /* eslint-disable prefer-destructuring */
100
+ /**
101
+ * Whenever user wallets are populated, this hook will automatically select a wallet as the primary wallet.
102
+ *
103
+ * This logic doesn't apply when embedded wallets are enabled though, as the primary wallet will be selected
104
+ * as the embedded wallet.
105
+ */
106
+ const useAutoselectPrimaryWallet = (isBridgeFlow) => {
107
+ useDynamicEvents.useInternalDynamicEvents('userWalletsPopulated', (userWallets) => {
108
+ if (isBridgeFlow ||
109
+ userWallets.some((wallet) => wallet.connector.isEmbeddedWallet))
110
+ return;
111
+ if (primaryWalletId.getPrimaryWalletId())
112
+ return;
113
+ const firstWallet = userWallets[0];
114
+ if (!firstWallet)
115
+ return;
116
+ updatePrimaryWalletId.updatePrimaryWalletId(firstWallet.id);
117
+ });
118
+ };
119
+
120
+ exports.useAutoselectPrimaryWallet = useAutoselectPrimaryWallet;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Whenever user wallets are populated, this hook will automatically select a wallet as the primary wallet.
3
+ *
4
+ * This logic doesn't apply when embedded wallets are enabled though, as the primary wallet will be selected
5
+ * as the embedded wallet.
6
+ */
7
+ export declare const useAutoselectPrimaryWallet: (isBridgeFlow: boolean) => void;
@@ -0,0 +1,116 @@
1
+ 'use client'
2
+ import { getPrimaryWalletId } from '../../../../store/state/primaryWalletId/primaryWalletId.js';
3
+ import '@dynamic-labs/sdk-api-core';
4
+ import '../../../../utils/constants/values.js';
5
+ import '@dynamic-labs/utils';
6
+ import '../../../../../../_virtual/_tslib.js';
7
+ import '@dynamic-labs/multi-wallet';
8
+ import '../../../../shared/logger.js';
9
+ import '../../../../utils/constants/colors.js';
10
+ import 'react-international-phone';
11
+ import '@dynamic-labs/iconic';
12
+ import '@dynamic-labs/wallet-connector-core';
13
+ import 'react';
14
+ import 'react/jsx-runtime';
15
+ import '../../../ViewContext/ViewContext.js';
16
+ import '@dynamic-labs/wallet-book';
17
+ import '../../../../shared/consts/index.js';
18
+ import '../../../../store/state/nonce/nonce.js';
19
+ import '../../../../store/state/projectSettings/projectSettings.js';
20
+ import { updatePrimaryWalletId } from '../../../../utils/functions/updatePrimaryWalletId/updatePrimaryWalletId.js';
21
+ import { useInternalDynamicEvents } from '../../../../utils/hooks/events/useDynamicEvents/useDynamicEvents.js';
22
+ import '../../DynamicContext.js';
23
+ import '../../../CaptchaContext/CaptchaContext.js';
24
+ import '../../../ErrorContext/ErrorContext.js';
25
+ import '../../../AccessDeniedContext/AccessDeniedContext.js';
26
+ import '../../../AccountExistsContext/AccountExistsContext.js';
27
+ import '../../../UserWalletsContext/UserWalletsContext.js';
28
+ import '../../../../config/ApiEndpoint.js';
29
+ import '../../../../store/state/user/user.js';
30
+ import '../../../../locale/locale.js';
31
+ import '../../../../events/dynamicEvents.js';
32
+ import '../../../../store/state/connectedWalletsInfo/connectedWalletsInfo.js';
33
+ import '../../../VerificationContext/VerificationContext.js';
34
+ import 'react-dom';
35
+ import '../../../../utils/functions/compareChains/compareChains.js';
36
+ import '../../../ThemeContext/ThemeContext.js';
37
+ import '../../../../utils/hooks/useUserUpdateRequest/useUpdateUser/userFieldsSchema.js';
38
+ import 'bs58';
39
+ import '@dynamic-labs/types';
40
+ import '../../../SocialRedirectContext/SocialRedirectContext.js';
41
+ import '../../../LoadingContext/LoadingContext.js';
42
+ import '../../../WalletContext/WalletContext.js';
43
+ import '../../../../utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/constants.js';
44
+ import 'yup';
45
+ import '../../../MockContext/MockContext.js';
46
+ import '../../../../views/CollectUserDataView/useFields.js';
47
+ import '../../../FieldsStateContext/FieldsStateContext.js';
48
+ import '../../../UserFieldEditorContext/UserFieldEditorContext.js';
49
+ import '@dynamic-labs/rpc-providers';
50
+ import '../../../../store/state/loadingAndLifecycle.js';
51
+ import '../../../../store/state/dynamicContextProps/dynamicContextProps.js';
52
+ import '../../../../store/state/walletOptions/walletOptions.js';
53
+ import 'react-i18next';
54
+ import '../../../../components/Accordion/components/AccordionItem/AccordionItem.js';
55
+ import '../../../../components/Alert/Alert.js';
56
+ import '../../../../components/ShadowDOM/ShadowDOM.js';
57
+ import '../../../../components/IconButton/IconButton.js';
58
+ import '../../../../components/InlineWidget/InlineWidget.js';
59
+ import '../../../../components/Input/Input.js';
60
+ import '../../../../components/IsBrowser/IsBrowser.js';
61
+ import '../../../../components/MenuList/Dropdown/Dropdown.js';
62
+ import '../../../../components/OverlayCard/OverlayCard.js';
63
+ import '../../../../components/Transition/ZoomTransition/ZoomTransition.js';
64
+ import '../../../../components/Transition/SlideInUpTransition/SlideInUpTransition.js';
65
+ import '../../../../components/Transition/OpacityTransition/OpacityTransition.js';
66
+ import '../../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
67
+ import '../../../../components/Popper/Popper/Popper.js';
68
+ import '../../../../components/Popper/PopperContext/PopperContext.js';
69
+ import 'react-focus-lock';
70
+ import 'qrcode';
71
+ import 'formik';
72
+ import '../../../../utils/hooks/useSubdomainCheck/useSubdomainCheck.js';
73
+ import '../../../WalletGroupContext/WalletGroupContext.js';
74
+ import '../../../IpConfigurationContext/IpConfigurationContext.js';
75
+ import '../../../ConnectWithOtpContext/ConnectWithOtpContext.js';
76
+ import '../../../ConnectWithOtpContext/constants.js';
77
+ import '../../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.js';
78
+ import '@hcaptcha/react-hcaptcha';
79
+ import '../../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
80
+ import '../../../FooterAnimationContext/index.js';
81
+ import '../../../ErrorContext/hooks/useErrorText/useErrorText.js';
82
+ import '../../../PasskeyContext/PasskeyContext.js';
83
+ import '../../../../store/state/sendBalances.js';
84
+ import '../../../../store/state/connectorsInitializing/connectorsInitializing.js';
85
+ import '../../../../components/OverlayCardBase/OverlayCardTarget/OverlayCardTarget.js';
86
+ import '../../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js';
87
+ import '../../../../views/TransactionConfirmationView/TransactionConfirmationView.js';
88
+ import '../../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
89
+ import '../../../OnrampContext/OnrampContext.js';
90
+ import '../../../../widgets/DynamicWidget/views/ReceiveWalletFunds/ReceiveWalletFunds.js';
91
+ import '../../../../../index.js';
92
+ import '../../../../store/state/tokenBalances.js';
93
+ import '../../../../shared/utils/functions/getInitialUrl/getInitialUrl.js';
94
+
95
+ /* eslint-disable prefer-destructuring */
96
+ /**
97
+ * Whenever user wallets are populated, this hook will automatically select a wallet as the primary wallet.
98
+ *
99
+ * This logic doesn't apply when embedded wallets are enabled though, as the primary wallet will be selected
100
+ * as the embedded wallet.
101
+ */
102
+ const useAutoselectPrimaryWallet = (isBridgeFlow) => {
103
+ useInternalDynamicEvents('userWalletsPopulated', (userWallets) => {
104
+ if (isBridgeFlow ||
105
+ userWallets.some((wallet) => wallet.connector.isEmbeddedWallet))
106
+ return;
107
+ if (getPrimaryWalletId())
108
+ return;
109
+ const firstWallet = userWallets[0];
110
+ if (!firstWallet)
111
+ return;
112
+ updatePrimaryWalletId(firstWallet.id);
113
+ });
114
+ };
115
+
116
+ export { useAutoselectPrimaryWallet };
@@ -20,6 +20,9 @@ const UserWalletsProvider = ({ children }) => {
20
20
  // Use old state value if nothing changed to prevent unnecessary re-renders
21
21
  if (updatedWallets.length === 0 && prevWallets.length === 0)
22
22
  return prevWallets;
23
+ if (prevWallets.length === 0 && updatedWallets.length > 0) {
24
+ dynamicEvents.dynamicEvents.emit('userWalletsPopulated', updatedWallets);
25
+ }
23
26
  prevUserWallets.current = prevWallets;
24
27
  return updatedWallets;
25
28
  });
@@ -16,6 +16,9 @@ const UserWalletsProvider = ({ children }) => {
16
16
  // Use old state value if nothing changed to prevent unnecessary re-renders
17
17
  if (updatedWallets.length === 0 && prevWallets.length === 0)
18
18
  return prevWallets;
19
+ if (prevWallets.length === 0 && updatedWallets.length > 0) {
20
+ dynamicEvents.emit('userWalletsPopulated', updatedWallets);
21
+ }
19
22
  prevUserWallets.current = prevWallets;
20
23
  return updatedWallets;
21
24
  });
@@ -33,4 +33,6 @@ export type WalletEvents = {
33
33
  nonPrimaryWalletNetworkChanged: (newNetwork: string | number, connector: WalletConnector) => void;
34
34
  /** Triggered when there is a change in user wallets */
35
35
  userWalletsChanged: (params: UserWalletsChangedParams) => void;
36
+ /** Triggered when user wallets changes from an empty array to a non-empty array */
37
+ userWalletsPopulated: (userWallets: Wallet[]) => void;
36
38
  };