@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.
- package/CHANGELOG.md +14 -0
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +13 -13
- package/src/lib/shared/utils/functions/shortenEmail/shortenEmail.d.ts +6 -0
- package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.cjs +4 -3
- package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.js +4 -3
- package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.cjs +2 -7
- package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.d.ts +1 -1
- package/src/lib/utils/functions/validatePhoneLength/validatePhoneLength.js +3 -8
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +45 -45
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +45 -45
- package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.cjs +6 -4
- package/src/lib/utils/hooks/useTokenBalances/useTokenBalances.js +6 -4
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +5 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +5 -1
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.cjs +3 -2
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.js +3 -2
- package/src/lib/utils/functions/isWalletLinked/isWalletLinked.cjs +0 -16
- 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
package/package.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs/sdk-react-core",
|
|
3
|
-
"version": "2.2.
|
|
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.
|
|
21
|
-
"@dynamic-labs/logger": "2.2.
|
|
22
|
-
"@dynamic-labs/multi-wallet": "2.2.
|
|
23
|
-
"@dynamic-labs/rpc-provider-ethereum": "2.2.
|
|
24
|
-
"@dynamic-labs/rpc-provider-solana": "2.2.
|
|
25
|
-
"@dynamic-labs/rpc-providers": "2.2.
|
|
26
|
-
"@dynamic-labs/store": "2.2.
|
|
27
|
-
"@dynamic-labs/types": "2.2.
|
|
28
|
-
"@dynamic-labs/utils": "2.2.
|
|
29
|
-
"@dynamic-labs/viem-utils": "2.2.
|
|
30
|
-
"@dynamic-labs/wallet-book": "2.2.
|
|
31
|
-
"@dynamic-labs/wallet-connector-core": "2.2.
|
|
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": {
|
package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.cjs
CHANGED
|
@@ -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.
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
package/src/lib/utils/functions/isMultiAssetSupportedNetwork/isMultiAssetSupportedNetwork.js
CHANGED
|
@@ -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.
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
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
|
|
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
|
|
2
|
+
import { removeDialCode } from 'react-international-phone';
|
|
3
3
|
|
|
4
|
-
/** Whether phone number
|
|
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,
|
|
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
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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,
|
|
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
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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 (
|
|
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
|
-
|
|
104
|
-
|
|
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 (
|
|
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
|
-
|
|
100
|
-
|
|
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) {
|
package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs
CHANGED
|
@@ -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({
|
|
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);
|
package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js
CHANGED
|
@@ -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({
|
|
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
|
-
|
|
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, {}) }));
|
package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/PendingAccountSwitchModal.js
CHANGED
|
@@ -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
|
-
|
|
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 };
|