@dynamic-labs/sdk-react-core 4.88.5 → 4.88.6
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,12 @@
|
|
|
1
1
|
|
|
2
|
+
### [4.88.6](https://github.com/dynamic-labs/dynamic-auth/compare/v4.88.5...v4.88.6) (2026-06-13)
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* **DynamicBridgeWidget:** prevent bridge chain sync from reverting manual wallet switches ([#11560](https://github.com/dynamic-labs/dynamic-auth/issues/11560)) ([40c4973](https://github.com/dynamic-labs/dynamic-auth/commit/40c4973761b3e887577664f72f89d1d6ba285ea3))
|
|
8
|
+
* resolve EOA wallet client on the correct chain for EIP-7702 smart wallets ([#11564](https://github.com/dynamic-labs/dynamic-auth/issues/11564)) ([893b083](https://github.com/dynamic-labs/dynamic-auth/commit/893b0837a450ec683ccd09f2bb54204b77b6bd50))
|
|
9
|
+
|
|
2
10
|
### [4.88.5](https://github.com/dynamic-labs/dynamic-auth/compare/v4.88.4...v4.88.5) (2026-06-11)
|
|
3
11
|
|
|
4
12
|
|
|
@@ -6502,4 +6510,4 @@ Enjoy!
|
|
|
6502
6510
|
### Bug Fixes
|
|
6503
6511
|
|
|
6504
6512
|
* **view-context:** refactor view context to have initial view ([#2268](https://github.com/dynamic-labs/DynamicAuth/issues/2268)) ([0afe6ae](https://github.com/dynamic-labs/DynamicAuth/commit/0afe6ae469f62fd16fd8471322f9295957f607f6))
|
|
6505
|
-
* **wcv2:** upgrade universal p
|
|
6513
|
+
* **wcv2:** upgrade universal p
|
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": "4.88.
|
|
3
|
+
"version": "4.88.6",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@dynamic-labs/sdk-api-core": "0.0.1015",
|
|
6
6
|
"@dynamic-labs-sdk/client": "1.8.2",
|
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
"yup": "0.32.11",
|
|
18
18
|
"react-international-phone": "4.5.0",
|
|
19
19
|
"bs58": "5.0.0",
|
|
20
|
-
"@dynamic-labs/assert-package-version": "4.88.
|
|
21
|
-
"@dynamic-labs/iconic": "4.88.
|
|
22
|
-
"@dynamic-labs/locale": "4.88.
|
|
23
|
-
"@dynamic-labs/logger": "4.88.
|
|
24
|
-
"@dynamic-labs/multi-wallet": "4.88.
|
|
25
|
-
"@dynamic-labs/rpc-providers": "4.88.
|
|
26
|
-
"@dynamic-labs/store": "4.88.
|
|
27
|
-
"@dynamic-labs/types": "4.88.
|
|
28
|
-
"@dynamic-labs/utils": "4.88.
|
|
29
|
-
"@dynamic-labs/wallet-book": "4.88.
|
|
30
|
-
"@dynamic-labs/wallet-connector-core": "4.88.
|
|
20
|
+
"@dynamic-labs/assert-package-version": "4.88.6",
|
|
21
|
+
"@dynamic-labs/iconic": "4.88.6",
|
|
22
|
+
"@dynamic-labs/locale": "4.88.6",
|
|
23
|
+
"@dynamic-labs/logger": "4.88.6",
|
|
24
|
+
"@dynamic-labs/multi-wallet": "4.88.6",
|
|
25
|
+
"@dynamic-labs/rpc-providers": "4.88.6",
|
|
26
|
+
"@dynamic-labs/store": "4.88.6",
|
|
27
|
+
"@dynamic-labs/types": "4.88.6",
|
|
28
|
+
"@dynamic-labs/utils": "4.88.6",
|
|
29
|
+
"@dynamic-labs/wallet-book": "4.88.6",
|
|
30
|
+
"@dynamic-labs/wallet-connector-core": "4.88.6",
|
|
31
31
|
"eventemitter3": "5.0.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
@@ -123,6 +123,16 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
123
123
|
const { showAuthFlow, setShowBridgeWidget, bridgeChains, setShowAuthFlow, connectedWallets, sdkHasLoaded, primaryWallet, setPrimaryWallet, } = useInternalDynamicContext.useInternalDynamicContext();
|
|
124
124
|
const { widgetRef, inlineControlsRef } = DynamicBridgeWidgetContext.useDynamicBridgeWidgetContext();
|
|
125
125
|
const { t } = reactI18next.useTranslation();
|
|
126
|
+
// Use refs so the bridgeChains effect only fires when bridgeChains changes,
|
|
127
|
+
// not when the user manually switches the primary wallet.
|
|
128
|
+
// setPrimaryWallet is a useCallback that recreates on every primaryWalletId
|
|
129
|
+
// change, so it must also be a ref to avoid retriggering the effect.
|
|
130
|
+
const primaryWalletRef = React.useRef(primaryWallet);
|
|
131
|
+
primaryWalletRef.current = primaryWallet;
|
|
132
|
+
const connectedWalletsRef = React.useRef(connectedWallets);
|
|
133
|
+
connectedWalletsRef.current = connectedWallets;
|
|
134
|
+
const setPrimaryWalletRef = React.useRef(setPrimaryWallet);
|
|
135
|
+
setPrimaryWalletRef.current = setPrimaryWallet;
|
|
126
136
|
const closeOnOutsideClick = React.useCallback((e) => {
|
|
127
137
|
var _a;
|
|
128
138
|
const target = e.composedPath().shift();
|
|
@@ -134,20 +144,22 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
134
144
|
}, [inlineControlsRef, variant, showAuthFlow, setShowBridgeWidget]);
|
|
135
145
|
index.useOnClickOutside(widgetRef, closeOnOutsideClick);
|
|
136
146
|
React.useEffect(() => {
|
|
147
|
+
const currentPrimaryWallet = primaryWalletRef.current;
|
|
148
|
+
const currentConnectedWallets = connectedWalletsRef.current;
|
|
137
149
|
// no need to update primary wallet if it's already set to the correct chain
|
|
138
|
-
if (!
|
|
150
|
+
if (!currentPrimaryWallet ||
|
|
139
151
|
!bridgeChains ||
|
|
140
|
-
|
|
141
|
-
|
|
152
|
+
currentConnectedWallets.length <= 1 ||
|
|
153
|
+
currentPrimaryWallet.chain === bridgeChains[0].chain) {
|
|
142
154
|
return;
|
|
143
155
|
}
|
|
144
156
|
// find a connected wallet that matches the primary bridge chain
|
|
145
|
-
const newPrimaryWallet =
|
|
157
|
+
const newPrimaryWallet = currentConnectedWallets.find((wallet) => wallet.chain === bridgeChains[0].chain);
|
|
146
158
|
// if a new primary wallet is found, update the primary wallet
|
|
147
159
|
if (newPrimaryWallet) {
|
|
148
160
|
logger.logger.debug('[DynamicBridgeWidget] bridgeChains changed - updating primary wallet', {
|
|
149
161
|
bridgeChains,
|
|
150
|
-
connectedWallets:
|
|
162
|
+
connectedWallets: currentConnectedWallets.map((wallet) => ({
|
|
151
163
|
address: wallet.address,
|
|
152
164
|
chain: wallet.chain,
|
|
153
165
|
id: wallet.id,
|
|
@@ -158,14 +170,14 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
158
170
|
id: newPrimaryWallet.id,
|
|
159
171
|
},
|
|
160
172
|
oldPrimaryWallet: {
|
|
161
|
-
address:
|
|
162
|
-
chain:
|
|
163
|
-
id:
|
|
173
|
+
address: currentPrimaryWallet.address,
|
|
174
|
+
chain: currentPrimaryWallet.chain,
|
|
175
|
+
id: currentPrimaryWallet.id,
|
|
164
176
|
},
|
|
165
177
|
});
|
|
166
|
-
|
|
178
|
+
setPrimaryWalletRef.current(newPrimaryWallet.id);
|
|
167
179
|
}
|
|
168
|
-
}, [bridgeChains
|
|
180
|
+
}, [bridgeChains]);
|
|
169
181
|
return (jsxRuntime.jsxs(ShadowDOM.ShadowDOM, { id: 'dynamic-bridge-widget', className: 'dynamic-widget__container', children: [jsxRuntime.jsx(InlineWidget.InlineWidget, { ref: inlineControlsRef, className: className, dataTestId: 'BridgeWidgetNav', children: bridgeChains === null || bridgeChains === void 0 ? void 0 : bridgeChains.map(({ chain }) => {
|
|
170
182
|
const ChainIcon = getChainIcon.getChainIcon(chain);
|
|
171
183
|
if (!sdkHasLoaded) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useCallback, useEffect } from 'react';
|
|
3
|
+
import { useRef, useCallback, useEffect } from 'react';
|
|
4
4
|
import { useTranslation } from 'react-i18next';
|
|
5
5
|
import { WalletIcon } from '@dynamic-labs/wallet-book';
|
|
6
6
|
import '../../components/Accordion/components/AccordionItem/AccordionItem.js';
|
|
@@ -119,6 +119,16 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
119
119
|
const { showAuthFlow, setShowBridgeWidget, bridgeChains, setShowAuthFlow, connectedWallets, sdkHasLoaded, primaryWallet, setPrimaryWallet, } = useInternalDynamicContext();
|
|
120
120
|
const { widgetRef, inlineControlsRef } = useDynamicBridgeWidgetContext();
|
|
121
121
|
const { t } = useTranslation();
|
|
122
|
+
// Use refs so the bridgeChains effect only fires when bridgeChains changes,
|
|
123
|
+
// not when the user manually switches the primary wallet.
|
|
124
|
+
// setPrimaryWallet is a useCallback that recreates on every primaryWalletId
|
|
125
|
+
// change, so it must also be a ref to avoid retriggering the effect.
|
|
126
|
+
const primaryWalletRef = useRef(primaryWallet);
|
|
127
|
+
primaryWalletRef.current = primaryWallet;
|
|
128
|
+
const connectedWalletsRef = useRef(connectedWallets);
|
|
129
|
+
connectedWalletsRef.current = connectedWallets;
|
|
130
|
+
const setPrimaryWalletRef = useRef(setPrimaryWallet);
|
|
131
|
+
setPrimaryWalletRef.current = setPrimaryWallet;
|
|
122
132
|
const closeOnOutsideClick = useCallback((e) => {
|
|
123
133
|
var _a;
|
|
124
134
|
const target = e.composedPath().shift();
|
|
@@ -130,20 +140,22 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
130
140
|
}, [inlineControlsRef, variant, showAuthFlow, setShowBridgeWidget]);
|
|
131
141
|
useOnClickOutside(widgetRef, closeOnOutsideClick);
|
|
132
142
|
useEffect(() => {
|
|
143
|
+
const currentPrimaryWallet = primaryWalletRef.current;
|
|
144
|
+
const currentConnectedWallets = connectedWalletsRef.current;
|
|
133
145
|
// no need to update primary wallet if it's already set to the correct chain
|
|
134
|
-
if (!
|
|
146
|
+
if (!currentPrimaryWallet ||
|
|
135
147
|
!bridgeChains ||
|
|
136
|
-
|
|
137
|
-
|
|
148
|
+
currentConnectedWallets.length <= 1 ||
|
|
149
|
+
currentPrimaryWallet.chain === bridgeChains[0].chain) {
|
|
138
150
|
return;
|
|
139
151
|
}
|
|
140
152
|
// find a connected wallet that matches the primary bridge chain
|
|
141
|
-
const newPrimaryWallet =
|
|
153
|
+
const newPrimaryWallet = currentConnectedWallets.find((wallet) => wallet.chain === bridgeChains[0].chain);
|
|
142
154
|
// if a new primary wallet is found, update the primary wallet
|
|
143
155
|
if (newPrimaryWallet) {
|
|
144
156
|
logger.debug('[DynamicBridgeWidget] bridgeChains changed - updating primary wallet', {
|
|
145
157
|
bridgeChains,
|
|
146
|
-
connectedWallets:
|
|
158
|
+
connectedWallets: currentConnectedWallets.map((wallet) => ({
|
|
147
159
|
address: wallet.address,
|
|
148
160
|
chain: wallet.chain,
|
|
149
161
|
id: wallet.id,
|
|
@@ -154,14 +166,14 @@ const DynamicBridgeWidget = ({ className, variant = 'modal', iconVariant = 'chai
|
|
|
154
166
|
id: newPrimaryWallet.id,
|
|
155
167
|
},
|
|
156
168
|
oldPrimaryWallet: {
|
|
157
|
-
address:
|
|
158
|
-
chain:
|
|
159
|
-
id:
|
|
169
|
+
address: currentPrimaryWallet.address,
|
|
170
|
+
chain: currentPrimaryWallet.chain,
|
|
171
|
+
id: currentPrimaryWallet.id,
|
|
160
172
|
},
|
|
161
173
|
});
|
|
162
|
-
|
|
174
|
+
setPrimaryWalletRef.current(newPrimaryWallet.id);
|
|
163
175
|
}
|
|
164
|
-
}, [bridgeChains
|
|
176
|
+
}, [bridgeChains]);
|
|
165
177
|
return (jsxs(ShadowDOM, { id: 'dynamic-bridge-widget', className: 'dynamic-widget__container', children: [jsx(InlineWidget, { ref: inlineControlsRef, className: className, dataTestId: 'BridgeWidgetNav', children: bridgeChains === null || bridgeChains === void 0 ? void 0 : bridgeChains.map(({ chain }) => {
|
|
166
178
|
const ChainIcon = getChainIcon(chain);
|
|
167
179
|
if (!sdkHasLoaded) {
|