@dynamic-labs/sdk-react-core 2.2.8 → 2.2.9

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 (20) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +13 -13
  5. package/src/lib/shared/utils/functions/shortenEmail/shortenEmail.d.ts +6 -0
  6. package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.cjs +4 -3
  7. package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.js +4 -3
  8. package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.cjs +2 -7
  9. package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.d.ts +1 -1
  10. package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.js +3 -8
  11. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +45 -45
  12. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +45 -45
  13. package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.cjs +6 -4
  14. package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.js +6 -4
  15. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +5 -1
  16. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +5 -1
  17. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.cjs +3 -2
  18. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.js +3 -2
  19. package/src/lib/utils/functions/isWalletLinked/isWalletLinked.cjs +0 -16
  20. package/src/lib/utils/functions/isWalletLinked/isWalletLinked.js +0 -12
package/CHANGELOG.md CHANGED
@@ -1,4 +1,18 @@
1
1
 
2
+ ### [2.2.9](https://github.com/dynamic-labs/DynamicAuth/compare/v2.2.8...v2.2.9) (2024-07-04)
3
+
4
+
5
+ ### Features
6
+
7
+ * add solana support for multi-asset ([#6239](https://github.com/dynamic-labs/DynamicAuth/issues/6239)) ([4e9a924](https://github.com/dynamic-labs/DynamicAuth/commit/4e9a92464253d60fce1542ca38664330e74cf4d6)), closes [#6222](https://github.com/dynamic-labs/DynamicAuth/issues/6222)
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * relax phone number length validation ([#6226](https://github.com/dynamic-labs/DynamicAuth/issues/6226)) ([#6231](https://github.com/dynamic-labs/DynamicAuth/issues/6231)) ([2419441](https://github.com/dynamic-labs/DynamicAuth/commit/2419441f471a5edc3c0e831e24840d9d85d4a570))
13
+ * set last active account on accountChange request ([#6218](https://github.com/dynamic-labs/DynamicAuth/issues/6218)) ([#6228](https://github.com/dynamic-labs/DynamicAuth/issues/6228)) ([1842445](https://github.com/dynamic-labs/DynamicAuth/commit/184244535faeaea09f55ef0c0a62a4ace41432c7))
14
+ * stop auto-switching to connected secondary wallet if primary wallet is not connected ([#6196](https://github.com/dynamic-labs/DynamicAuth/issues/6196)) ([#6233](https://github.com/dynamic-labs/DynamicAuth/issues/6233)) ([82fd872](https://github.com/dynamic-labs/DynamicAuth/commit/82fd87251758b39c31dd334abc85dc05a7e8affa))
15
+
2
16
  ### [2.2.8](https://github.com/dynamic-labs/DynamicAuth/compare/v2.2.7...v2.2.8) (2024-07-01)
3
17
 
4
18
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "2.2.8";
6
+ var version = "2.2.9";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.460",
9
9
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "2.2.8";
2
+ var version = "2.2.9";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.460",
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": "2.2.8",
3
+ "version": "2.2.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
@@ -17,18 +17,18 @@
17
17
  "react-i18next": "13.5.0",
18
18
  "yup": "0.32.11",
19
19
  "react-international-phone": "4.2.5",
20
- "@dynamic-labs/iconic": "2.2.8",
21
- "@dynamic-labs/logger": "2.2.8",
22
- "@dynamic-labs/multi-wallet": "2.2.8",
23
- "@dynamic-labs/rpc-provider-ethereum": "2.2.8",
24
- "@dynamic-labs/rpc-provider-solana": "2.2.8",
25
- "@dynamic-labs/rpc-providers": "2.2.8",
26
- "@dynamic-labs/store": "2.2.8",
27
- "@dynamic-labs/types": "2.2.8",
28
- "@dynamic-labs/utils": "2.2.8",
29
- "@dynamic-labs/viem-utils": "2.2.8",
30
- "@dynamic-labs/wallet-book": "2.2.8",
31
- "@dynamic-labs/wallet-connector-core": "2.2.8",
20
+ "@dynamic-labs/iconic": "2.2.9",
21
+ "@dynamic-labs/logger": "2.2.9",
22
+ "@dynamic-labs/multi-wallet": "2.2.9",
23
+ "@dynamic-labs/rpc-provider-ethereum": "2.2.9",
24
+ "@dynamic-labs/rpc-provider-solana": "2.2.9",
25
+ "@dynamic-labs/rpc-providers": "2.2.9",
26
+ "@dynamic-labs/store": "2.2.9",
27
+ "@dynamic-labs/types": "2.2.9",
28
+ "@dynamic-labs/utils": "2.2.9",
29
+ "@dynamic-labs/viem-utils": "2.2.9",
30
+ "@dynamic-labs/wallet-book": "2.2.9",
31
+ "@dynamic-labs/wallet-connector-core": "2.2.9",
32
32
  "eventemitter3": "5.0.1"
33
33
  },
34
34
  "devDependencies": {
@@ -0,0 +1,6 @@
1
+ export type ShortenEmailOptions = {
2
+ breakpoint?: number;
3
+ cutEnd?: number;
4
+ cutStart?: number;
5
+ };
6
+ export declare const shortenEmail: (email?: string, options?: ShortenEmailOptions) => string;
@@ -7,9 +7,10 @@ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
7
7
  var constants = require('./constants.cjs');
8
8
 
9
9
  const isMultiAssetSupportedNetwork = (walletConnector, network) => {
10
- const isNetworkMultiAssetSupported = (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === sdkApiCore.ChainEnum.Evm &&
11
- typeof network === 'number' &&
12
- constants.MULTI_ASSET_SUPPORTED_NETWORKS.includes(network);
10
+ const isNetworkMultiAssetSupported = (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === sdkApiCore.ChainEnum.Sol ||
11
+ ((walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === sdkApiCore.ChainEnum.Evm &&
12
+ typeof network === 'number' &&
13
+ constants.MULTI_ASSET_SUPPORTED_NETWORKS.includes(network));
13
14
  return Boolean(isNetworkMultiAssetSupported);
14
15
  };
15
16
 
@@ -3,9 +3,10 @@ import { ChainEnum } from '@dynamic-labs/sdk-api-core';
3
3
  import { MULTI_ASSET_SUPPORTED_NETWORKS } from './constants.js';
4
4
 
5
5
  const isMultiAssetSupportedNetwork = (walletConnector, network) => {
6
- const isNetworkMultiAssetSupported = (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === ChainEnum.Evm &&
7
- typeof network === 'number' &&
8
- MULTI_ASSET_SUPPORTED_NETWORKS.includes(network);
6
+ const isNetworkMultiAssetSupported = (walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === ChainEnum.Sol ||
7
+ ((walletConnector === null || walletConnector === void 0 ? void 0 : walletConnector.connectedChain) === ChainEnum.Evm &&
8
+ typeof network === 'number' &&
9
+ MULTI_ASSET_SUPPORTED_NETWORKS.includes(network));
9
10
  return Boolean(isNetworkMultiAssetSupported);
10
11
  };
11
12
 
@@ -5,12 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var reactInternationalPhone = require('react-international-phone');
7
7
 
8
- /** Whether phone number length matches the expectation for this country */
9
- const validatePhoneLength = (phone, country) => reactInternationalPhone.removeDialCode({ dialCode: country.dialCode, phone }).length ===
10
- reactInternationalPhone.getActiveFormattingMask({
11
- country,
12
- disableFormatting: true,
13
- phone,
14
- }).length;
8
+ /** Whether phone number is not empty */
9
+ const validatePhoneLength = (phone, country) => reactInternationalPhone.removeDialCode({ dialCode: country.dialCode, phone }).length > 0;
15
10
 
16
11
  exports.validatePhoneLength = validatePhoneLength;
@@ -1,3 +1,3 @@
1
1
  import { ParsedCountry } from 'react-international-phone';
2
- /** Whether phone number length matches the expectation for this country */
2
+ /** Whether phone number is not empty */
3
3
  export declare const validatePhoneLength: (phone: string, country: ParsedCountry) => boolean;
@@ -1,12 +1,7 @@
1
1
  'use client'
2
- import { removeDialCode, getActiveFormattingMask } from 'react-international-phone';
2
+ import { removeDialCode } from 'react-international-phone';
3
3
 
4
- /** Whether phone number length matches the expectation for this country */
5
- const validatePhoneLength = (phone, country) => removeDialCode({ dialCode: country.dialCode, phone }).length ===
6
- getActiveFormattingMask({
7
- country,
8
- disableFormatting: true,
9
- phone,
10
- }).length;
4
+ /** Whether phone number is not empty */
5
+ const validatePhoneLength = (phone, country) => removeDialCode({ dialCode: country.dialCode, phone }).length > 0;
11
6
 
12
7
  export { validatePhoneLength };
@@ -29,6 +29,7 @@ require('viem/chains');
29
29
  require('../../../../config/ApiEndpoint.cjs');
30
30
  require('@dynamic-labs/store');
31
31
  require('../../../../locale/locale.cjs');
32
+ var logVerboseTroubleshootingMessage = require('../../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.cjs');
32
33
  require('../../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
33
34
  require('../../../../context/AccountExistsContext/AccountExistsContext.cjs');
34
35
  require('../../../../context/UserWalletsContext/UserWalletsContext.cjs');
@@ -78,63 +79,57 @@ require('../../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
78
79
  require('../../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
79
80
  require('../../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
80
81
  var useInternalDynamicContext = require('../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
81
- var isWalletLinked = require('../../../functions/isWalletLinked/isWalletLinked.cjs');
82
82
 
83
83
  const useSyncPrimaryWallet = (canSync = true) => {
84
- const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, setSelectedWalletWithAction, } = useInternalDynamicContext.useInternalDynamicContext();
84
+ const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, setMultiWalletWidgetState, showLockedWalletView, secondaryWallets, setPrimaryWallet, setSelectedWalletWithAction, multiWallet, } = useInternalDynamicContext.useInternalDynamicContext();
85
85
  const { setView } = ViewContext.useViewContext();
86
86
  const handlePrimaryWalletNotActive = React.useCallback((connectedAddress) => {
87
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive', {
88
+ authMode,
89
+ connectedAddress,
90
+ primaryWallet: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address,
91
+ });
87
92
  if (!primaryWallet)
88
93
  return;
89
94
  if (authMode === 'connect-only') {
90
95
  connectWallet(primaryWallet.connector);
91
96
  return;
92
97
  }
93
- const connectedWalletIsLinked = isWalletLinked.isWalletLinked(connectedAddress, [
94
- primaryWallet,
95
- ...secondaryWallets,
96
- ]);
97
- if (!connectedWalletIsLinked) {
98
- // MM returns all connected wallets now, so we need to check if the active account
99
- // is not in the same wallet as the primary wallet before automatically switching
100
- // to a connected secondary wallet as it was causing an infinite loop
101
- const connectedSecondaryWallet = secondaryWallets.find((wallet) => wallet.connected && primaryWallet.connector !== wallet.connector);
102
- if (!connectedSecondaryWallet) {
103
- setSelectedWalletWithAction({
104
- action: 'select',
105
- wallet: primaryWallet,
106
- });
107
- setMultiWalletWidgetState('awaiting_account_switch', 'primary_not_connected');
108
- return;
109
- }
110
- setPrimaryWallet(connectedSecondaryWallet.id);
111
- return;
112
- }
113
- if (showWidgetStatePopup) {
114
- // user updates wallet address in the widget
115
- setShowWidgetStatePopup(false);
116
- setMultiWalletWidgetState('awaiting_account_switch', 'switching_primary');
117
- return;
118
- }
119
- // !showWidgetStatePopup - user comes back to site with different wallet address
120
- const connectedWallet = secondaryWallets.find((wallet) => wallet.connected &&
121
- walletConnectorCore.isSameAddress(wallet.address, connectedAddress, wallet.chain));
122
- if (connectedWallet) {
123
- setPrimaryWallet(connectedWallet.id);
98
+ const connectedWalletWithSameProvider = connectedAddress &&
99
+ secondaryWallets.find((wallet) => wallet.connected &&
100
+ wallet.connector.key === primaryWallet.connector.key &&
101
+ walletConnectorCore.isSameAddress(wallet.address, connectedAddress, wallet.chain));
102
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive', {
103
+ connectedWalletWithSameProvider,
104
+ multiWallet,
105
+ });
106
+ if (multiWallet && connectedWalletWithSameProvider) {
107
+ setPrimaryWallet(connectedWalletWithSameProvider.id);
124
108
  return;
125
109
  }
126
- setMultiWalletWidgetState('awaiting_account_switch', 'primary_not_connected');
110
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive - setSelectedWalletWithAction(primaryWallet)');
111
+ setSelectedWalletWithAction({
112
+ action: 'select',
113
+ wallet: primaryWallet,
114
+ });
115
+ setMultiWalletWidgetState('awaiting_account_switch', 'switching_primary');
127
116
  }, [
128
- primaryWallet,
129
117
  authMode,
118
+ primaryWallet,
130
119
  secondaryWallets,
131
- showWidgetStatePopup,
120
+ multiWallet,
121
+ setSelectedWalletWithAction,
132
122
  setMultiWalletWidgetState,
133
- setPrimaryWallet,
134
- setShowWidgetStatePopup,
135
123
  connectWallet,
124
+ setPrimaryWallet,
136
125
  ]);
137
126
  React.useEffect(() => {
127
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet]', {
128
+ canSync,
129
+ connectedChain: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.connectedChain,
130
+ multiWalletWidgetState,
131
+ primaryWallet: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address,
132
+ });
138
133
  if (!canSync)
139
134
  return;
140
135
  if (!primaryWallet || multiWalletWidgetState !== 'idle')
@@ -147,6 +142,10 @@ const useSyncPrimaryWallet = (canSync = true) => {
147
142
  .getConnectedAccounts()
148
143
  .then((accounts) => {
149
144
  const [connectedAddress] = accounts;
145
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts', {
146
+ accounts,
147
+ connectedAddress,
148
+ });
150
149
  if (!connectedAddress) {
151
150
  throw new utils.DynamicError('Missing wallet address', errors.MISSING_ADDRESS_ERROR);
152
151
  }
@@ -156,31 +155,32 @@ const useSyncPrimaryWallet = (canSync = true) => {
156
155
  handlePrimaryWalletNotActive(connectedAddress);
157
156
  })
158
157
  .catch((e) => {
159
- const connectedSecondaryWallet = secondaryWallets.find((wallet) => wallet.connected);
160
- if (connectedSecondaryWallet) {
161
- setPrimaryWallet(connectedSecondaryWallet.id);
162
- return;
163
- }
158
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error', {
159
+ error: e,
160
+ isAuthenticated,
161
+ });
164
162
  // user is logged in (has valid jwt), but no wallet is connected
165
163
  if (isAuthenticated && e.code === errors.MISSING_ADDRESS_ERROR) {
166
164
  if (!primaryWallet.connector.isInstalledOnBrowser()) {
165
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error - not installed in browser - will log out');
167
166
  handleLogOut();
168
167
  return;
169
168
  }
170
169
  if (showLockedWalletView) {
170
+ logVerboseTroubleshootingMessage.logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error - will show locked wallet view');
171
171
  setShowAuthFlow(true);
172
172
  setView('wallet-locked-view');
173
+ return;
173
174
  }
175
+ handlePrimaryWalletNotActive();
174
176
  }
175
177
  });
176
178
  }, [
177
179
  primaryWallet,
178
- secondaryWallets,
179
180
  multiWalletWidgetState,
180
181
  setMultiWalletWidgetState,
181
182
  handlePrimaryWalletNotActive,
182
183
  handleLogOut,
183
- setPrimaryWallet,
184
184
  canSync,
185
185
  setView,
186
186
  setShowAuthFlow,
@@ -25,6 +25,7 @@ import 'viem/chains';
25
25
  import '../../../../config/ApiEndpoint.js';
26
26
  import '@dynamic-labs/store';
27
27
  import '../../../../locale/locale.js';
28
+ import { logVerboseTroubleshootingMessage } from '../../../functions/logVerboseTroubleshootingMessage/logVerboseTroubleshootingMessage.js';
28
29
  import '../../../../context/AccessDeniedContext/AccessDeniedContext.js';
29
30
  import '../../../../context/AccountExistsContext/AccountExistsContext.js';
30
31
  import '../../../../context/UserWalletsContext/UserWalletsContext.js';
@@ -74,63 +75,57 @@ import '../../../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
74
75
  import '../../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.js';
75
76
  import '../../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
76
77
  import { useInternalDynamicContext } from '../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
77
- import { isWalletLinked } from '../../../functions/isWalletLinked/isWalletLinked.js';
78
78
 
79
79
  const useSyncPrimaryWallet = (canSync = true) => {
80
- const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, secondaryWallets, setMultiWalletWidgetState, setPrimaryWallet, setShowWidgetStatePopup, showLockedWalletView, showWidgetStatePopup, setSelectedWalletWithAction, } = useInternalDynamicContext();
80
+ const { setShowAuthFlow, isAuthenticated, authMode, connectWallet, handleLogOut, multiWalletWidgetState, primaryWallet, setMultiWalletWidgetState, showLockedWalletView, secondaryWallets, setPrimaryWallet, setSelectedWalletWithAction, multiWallet, } = useInternalDynamicContext();
81
81
  const { setView } = useViewContext();
82
82
  const handlePrimaryWalletNotActive = useCallback((connectedAddress) => {
83
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive', {
84
+ authMode,
85
+ connectedAddress,
86
+ primaryWallet: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address,
87
+ });
83
88
  if (!primaryWallet)
84
89
  return;
85
90
  if (authMode === 'connect-only') {
86
91
  connectWallet(primaryWallet.connector);
87
92
  return;
88
93
  }
89
- const connectedWalletIsLinked = isWalletLinked(connectedAddress, [
90
- primaryWallet,
91
- ...secondaryWallets,
92
- ]);
93
- if (!connectedWalletIsLinked) {
94
- // MM returns all connected wallets now, so we need to check if the active account
95
- // is not in the same wallet as the primary wallet before automatically switching
96
- // to a connected secondary wallet as it was causing an infinite loop
97
- const connectedSecondaryWallet = secondaryWallets.find((wallet) => wallet.connected && primaryWallet.connector !== wallet.connector);
98
- if (!connectedSecondaryWallet) {
99
- setSelectedWalletWithAction({
100
- action: 'select',
101
- wallet: primaryWallet,
102
- });
103
- setMultiWalletWidgetState('awaiting_account_switch', 'primary_not_connected');
104
- return;
105
- }
106
- setPrimaryWallet(connectedSecondaryWallet.id);
107
- return;
108
- }
109
- if (showWidgetStatePopup) {
110
- // user updates wallet address in the widget
111
- setShowWidgetStatePopup(false);
112
- setMultiWalletWidgetState('awaiting_account_switch', 'switching_primary');
113
- return;
114
- }
115
- // !showWidgetStatePopup - user comes back to site with different wallet address
116
- const connectedWallet = secondaryWallets.find((wallet) => wallet.connected &&
117
- isSameAddress(wallet.address, connectedAddress, wallet.chain));
118
- if (connectedWallet) {
119
- setPrimaryWallet(connectedWallet.id);
94
+ const connectedWalletWithSameProvider = connectedAddress &&
95
+ secondaryWallets.find((wallet) => wallet.connected &&
96
+ wallet.connector.key === primaryWallet.connector.key &&
97
+ isSameAddress(wallet.address, connectedAddress, wallet.chain));
98
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive', {
99
+ connectedWalletWithSameProvider,
100
+ multiWallet,
101
+ });
102
+ if (multiWallet && connectedWalletWithSameProvider) {
103
+ setPrimaryWallet(connectedWalletWithSameProvider.id);
120
104
  return;
121
105
  }
122
- setMultiWalletWidgetState('awaiting_account_switch', 'primary_not_connected');
106
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] handlePrimaryWalletNotActive - setSelectedWalletWithAction(primaryWallet)');
107
+ setSelectedWalletWithAction({
108
+ action: 'select',
109
+ wallet: primaryWallet,
110
+ });
111
+ setMultiWalletWidgetState('awaiting_account_switch', 'switching_primary');
123
112
  }, [
124
- primaryWallet,
125
113
  authMode,
114
+ primaryWallet,
126
115
  secondaryWallets,
127
- showWidgetStatePopup,
116
+ multiWallet,
117
+ setSelectedWalletWithAction,
128
118
  setMultiWalletWidgetState,
129
- setPrimaryWallet,
130
- setShowWidgetStatePopup,
131
119
  connectWallet,
120
+ setPrimaryWallet,
132
121
  ]);
133
122
  useEffect(() => {
123
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet]', {
124
+ canSync,
125
+ connectedChain: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.connectedChain,
126
+ multiWalletWidgetState,
127
+ primaryWallet: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address,
128
+ });
134
129
  if (!canSync)
135
130
  return;
136
131
  if (!primaryWallet || multiWalletWidgetState !== 'idle')
@@ -143,6 +138,10 @@ const useSyncPrimaryWallet = (canSync = true) => {
143
138
  .getConnectedAccounts()
144
139
  .then((accounts) => {
145
140
  const [connectedAddress] = accounts;
141
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts', {
142
+ accounts,
143
+ connectedAddress,
144
+ });
146
145
  if (!connectedAddress) {
147
146
  throw new DynamicError('Missing wallet address', MISSING_ADDRESS_ERROR);
148
147
  }
@@ -152,31 +151,32 @@ const useSyncPrimaryWallet = (canSync = true) => {
152
151
  handlePrimaryWalletNotActive(connectedAddress);
153
152
  })
154
153
  .catch((e) => {
155
- const connectedSecondaryWallet = secondaryWallets.find((wallet) => wallet.connected);
156
- if (connectedSecondaryWallet) {
157
- setPrimaryWallet(connectedSecondaryWallet.id);
158
- return;
159
- }
154
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error', {
155
+ error: e,
156
+ isAuthenticated,
157
+ });
160
158
  // user is logged in (has valid jwt), but no wallet is connected
161
159
  if (isAuthenticated && e.code === MISSING_ADDRESS_ERROR) {
162
160
  if (!primaryWallet.connector.isInstalledOnBrowser()) {
161
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error - not installed in browser - will log out');
163
162
  handleLogOut();
164
163
  return;
165
164
  }
166
165
  if (showLockedWalletView) {
166
+ logVerboseTroubleshootingMessage('[useSyncPrimaryWallet] getConnectedAccounts error - will show locked wallet view');
167
167
  setShowAuthFlow(true);
168
168
  setView('wallet-locked-view');
169
+ return;
169
170
  }
171
+ handlePrimaryWalletNotActive();
170
172
  }
171
173
  });
172
174
  }, [
173
175
  primaryWallet,
174
- secondaryWallets,
175
176
  multiWalletWidgetState,
176
177
  setMultiWalletWidgetState,
177
178
  handlePrimaryWalletNotActive,
178
179
  handleLogOut,
179
- setPrimaryWallet,
180
180
  canSync,
181
181
  setView,
182
182
  setShowAuthFlow,
@@ -94,14 +94,16 @@ const useTokenBalances = ({ accountAddress, networkId, chainName = sdkApiCore.Ch
94
94
  setError(errors.USER_NOT_LOGGED_IN);
95
95
  return;
96
96
  }
97
- if (requestChainName !== sdkApiCore.ChainEnum.Evm) {
97
+ if (![sdkApiCore.ChainEnum.Evm, sdkApiCore.ChainEnum.Sol].includes(requestChainName)) {
98
98
  setError(`Chain ${requestChainName} is not supported for token balances`);
99
99
  return;
100
100
  }
101
101
  if (!isLoading &&
102
102
  requestAccount &&
103
- requestNetwork &&
104
- Object.values(sdkApiCore.GetAccountBalancesNetworkIdEnum).includes(requestNetwork)) {
103
+ ((chainName === sdkApiCore.ChainEnum.Evm &&
104
+ requestNetwork &&
105
+ Object.values(sdkApiCore.GetAccountBalancesNetworkIdEnum).includes(requestNetwork)) ||
106
+ chainName === sdkApiCore.ChainEnum.Sol)) {
105
107
  setIsLoading(true);
106
108
  balances.getAccountTokenBalances({
107
109
  accountAddress: requestAccount,
@@ -109,7 +111,7 @@ const useTokenBalances = ({ accountAddress, networkId, chainName = sdkApiCore.Ch
109
111
  environmentId,
110
112
  includeNative: includeNativeBalance,
111
113
  includePrices: includeFiat,
112
- networkId: Number(requestNetwork),
114
+ networkId: chainName === sdkApiCore.ChainEnum.Evm ? Number(requestNetwork) : 0,
113
115
  })
114
116
  .then((response) => {
115
117
  if (response) {
@@ -90,14 +90,16 @@ const useTokenBalances = ({ accountAddress, networkId, chainName = ChainEnum.Evm
90
90
  setError(USER_NOT_LOGGED_IN);
91
91
  return;
92
92
  }
93
- if (requestChainName !== ChainEnum.Evm) {
93
+ if (![ChainEnum.Evm, ChainEnum.Sol].includes(requestChainName)) {
94
94
  setError(`Chain ${requestChainName} is not supported for token balances`);
95
95
  return;
96
96
  }
97
97
  if (!isLoading &&
98
98
  requestAccount &&
99
- requestNetwork &&
100
- Object.values(GetAccountBalancesNetworkIdEnum).includes(requestNetwork)) {
99
+ ((chainName === ChainEnum.Evm &&
100
+ requestNetwork &&
101
+ Object.values(GetAccountBalancesNetworkIdEnum).includes(requestNetwork)) ||
102
+ chainName === ChainEnum.Sol)) {
101
103
  setIsLoading(true);
102
104
  getAccountTokenBalances({
103
105
  accountAddress: requestAccount,
@@ -105,7 +107,7 @@ const useTokenBalances = ({ accountAddress, networkId, chainName = ChainEnum.Evm
105
107
  environmentId,
106
108
  includeNative: includeNativeBalance,
107
109
  includePrices: includeFiat,
108
- networkId: Number(requestNetwork),
110
+ networkId: chainName === ChainEnum.Evm ? Number(requestNetwork) : 0,
109
111
  })
110
112
  .then((response) => {
111
113
  if (response) {
@@ -108,7 +108,11 @@ const ActiveWalletInformation = ({ isLoading = false, }) => {
108
108
  const { primaryWallet, network, projectSettings, handleLogOut, user, walletConnector, } = useInternalDynamicContext.useInternalDynamicContext();
109
109
  const { setDynamicWidgetView } = DynamicWidgetContext.useWidgetContext();
110
110
  const { isTurnkeyWalletWithoutAuthenticator } = useIsTurnkeyWallet.useIsTurnkeyWallet();
111
- const { isLoading: isLoadingTokenBalances, tokenBalances } = useTokenBalances.useTokenBalances({ includeFiat: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.showFiat, includeNativeBalance: true });
111
+ const { isLoading: isLoadingTokenBalances, tokenBalances } = useTokenBalances.useTokenBalances({
112
+ chainName: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.connectedChain,
113
+ includeFiat: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.showFiat,
114
+ includeNativeBalance: true,
115
+ });
112
116
  const filteredTokenBalances = (tokenBalances === null || tokenBalances === void 0 ? void 0 : tokenBalances.filter((token) => token.name)) || [];
113
117
  const address = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address;
114
118
  const nameService = useFetchNameService.useFetchNameService(address);
@@ -104,7 +104,11 @@ const ActiveWalletInformation = ({ isLoading = false, }) => {
104
104
  const { primaryWallet, network, projectSettings, handleLogOut, user, walletConnector, } = useInternalDynamicContext();
105
105
  const { setDynamicWidgetView } = useWidgetContext();
106
106
  const { isTurnkeyWalletWithoutAuthenticator } = useIsTurnkeyWallet();
107
- const { isLoading: isLoadingTokenBalances, tokenBalances } = useTokenBalances({ includeFiat: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.showFiat, includeNativeBalance: true });
107
+ const { isLoading: isLoadingTokenBalances, tokenBalances } = useTokenBalances({
108
+ chainName: primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.connectedChain,
109
+ includeFiat: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.showFiat,
110
+ includeNativeBalance: true,
111
+ });
108
112
  const filteredTokenBalances = (tokenBalances === null || tokenBalances === void 0 ? void 0 : tokenBalances.filter((token) => token.name)) || [];
109
113
  const address = primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.address;
110
114
  const nameService = useFetchNameService(address);
@@ -85,12 +85,13 @@ require('../../views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
85
85
  var useInternalDynamicContext = require('../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
86
86
 
87
87
  const PendingAccountSwitchContent = () => {
88
- var _a, _b;
88
+ var _a, _b, _c, _d;
89
89
  const { selectedWalletWithAction, primaryWallet, secondaryWallets } = useInternalDynamicContext.useInternalDynamicContext();
90
90
  const selectedConnector = (_a = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) === null || _a === void 0 ? void 0 : _a.connector;
91
91
  const isSameWallet = (selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key) === (primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.key);
92
92
  const { data: connectedWallet } = useConnectedAccountWallet.useConnectedAccountWallet((_b = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) === null || _b === void 0 ? void 0 : _b.connector, secondaryWallets);
93
- return (jsxRuntime.jsx(DefaultPromptModal.DefaultPromptLayout, { dataTestId: 'pending-account-switch', icon: jsxRuntime.jsx(walletBook.WalletIcon, { walletKey: selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key }), title: `Switch wallet in ${selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.connector.name}`, children: isSameWallet || !connectedWallet ? (jsxRuntime.jsx(SwitchAccountView.SwitchAccountView, { selectedWalletToSwitchTo: selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet })) : (jsxRuntime.jsx(SwitchOrUseActiveAccountView.SwitchOrUseActiveAccountView, { connectedWallet: connectedWallet, selectedWalletToSwitchTo: selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet })) }));
93
+ const selectedWalletToSwitchTo = (_d = (_c = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) !== null && _c !== void 0 ? _c : primaryWallet) !== null && _d !== void 0 ? _d : undefined;
94
+ return (jsxRuntime.jsx(DefaultPromptModal.DefaultPromptLayout, { dataTestId: 'pending-account-switch', icon: jsxRuntime.jsx(walletBook.WalletIcon, { walletKey: selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key }), title: `Switch wallet in ${selectedWalletToSwitchTo === null || selectedWalletToSwitchTo === void 0 ? void 0 : selectedWalletToSwitchTo.connector.name}`, children: isSameWallet || !connectedWallet ? (jsxRuntime.jsx(SwitchAccountView.SwitchAccountView, { selectedWalletToSwitchTo: selectedWalletToSwitchTo })) : (jsxRuntime.jsx(SwitchOrUseActiveAccountView.SwitchOrUseActiveAccountView, { connectedWallet: connectedWallet, selectedWalletToSwitchTo: selectedWalletToSwitchTo })) }));
94
95
  };
95
96
  const PendingAccountSwitchWidgetPortal = () => (jsxRuntime.jsx(WidgetPortal.WidgetPortal, { children: jsxRuntime.jsx(PendingAccountSwitchContent, {}) }));
96
97
  const PendingAccountSwitchModal = () => (jsxRuntime.jsx(PromptModal.PromptModal, { children: jsxRuntime.jsx(PendingAccountSwitchContent, {}) }));
@@ -81,12 +81,13 @@ import '../../views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
81
81
  import { useInternalDynamicContext } from '../../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
82
82
 
83
83
  const PendingAccountSwitchContent = () => {
84
- var _a, _b;
84
+ var _a, _b, _c, _d;
85
85
  const { selectedWalletWithAction, primaryWallet, secondaryWallets } = useInternalDynamicContext();
86
86
  const selectedConnector = (_a = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) === null || _a === void 0 ? void 0 : _a.connector;
87
87
  const isSameWallet = (selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key) === (primaryWallet === null || primaryWallet === void 0 ? void 0 : primaryWallet.connector.key);
88
88
  const { data: connectedWallet } = useConnectedAccountWallet((_b = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) === null || _b === void 0 ? void 0 : _b.connector, secondaryWallets);
89
- return (jsx(DefaultPromptLayout, { dataTestId: 'pending-account-switch', icon: jsx(WalletIcon, { walletKey: selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key }), title: `Switch wallet in ${selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet.connector.name}`, children: isSameWallet || !connectedWallet ? (jsx(SwitchAccountView, { selectedWalletToSwitchTo: selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet })) : (jsx(SwitchOrUseActiveAccountView, { connectedWallet: connectedWallet, selectedWalletToSwitchTo: selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet })) }));
89
+ const selectedWalletToSwitchTo = (_d = (_c = selectedWalletWithAction === null || selectedWalletWithAction === void 0 ? void 0 : selectedWalletWithAction.wallet) !== null && _c !== void 0 ? _c : primaryWallet) !== null && _d !== void 0 ? _d : undefined;
90
+ return (jsx(DefaultPromptLayout, { dataTestId: 'pending-account-switch', icon: jsx(WalletIcon, { walletKey: selectedConnector === null || selectedConnector === void 0 ? void 0 : selectedConnector.key }), title: `Switch wallet in ${selectedWalletToSwitchTo === null || selectedWalletToSwitchTo === void 0 ? void 0 : selectedWalletToSwitchTo.connector.name}`, children: isSameWallet || !connectedWallet ? (jsx(SwitchAccountView, { selectedWalletToSwitchTo: selectedWalletToSwitchTo })) : (jsx(SwitchOrUseActiveAccountView, { connectedWallet: connectedWallet, selectedWalletToSwitchTo: selectedWalletToSwitchTo })) }));
90
91
  };
91
92
  const PendingAccountSwitchWidgetPortal = () => (jsx(WidgetPortal, { children: jsx(PendingAccountSwitchContent, {}) }));
92
93
  const PendingAccountSwitchModal = () => (jsx(PromptModal, { children: jsx(PendingAccountSwitchContent, {}) }));
@@ -1,16 +0,0 @@
1
- 'use client'
2
- 'use strict';
3
-
4
- Object.defineProperty(exports, '__esModule', { value: true });
5
-
6
- var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
7
-
8
- const isWalletLinked = (address, linkedWallets) => {
9
- if (!address || !(linkedWallets === null || linkedWallets === void 0 ? void 0 : linkedWallets.length)) {
10
- return false;
11
- }
12
- const linkedWallet = linkedWallets.find((wallet) => walletConnectorCore.isSameAddress(wallet.address, address, wallet.chain));
13
- return Boolean(linkedWallet);
14
- };
15
-
16
- exports.isWalletLinked = isWalletLinked;
@@ -1,12 +0,0 @@
1
- 'use client'
2
- import { isSameAddress } from '@dynamic-labs/wallet-connector-core';
3
-
4
- const isWalletLinked = (address, linkedWallets) => {
5
- if (!address || !(linkedWallets === null || linkedWallets === void 0 ? void 0 : linkedWallets.length)) {
6
- return false;
7
- }
8
- const linkedWallet = linkedWallets.find((wallet) => isSameAddress(wallet.address, address, wallet.chain));
9
- return Boolean(linkedWallet);
10
- };
11
-
12
- export { isWalletLinked };