@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
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.88.5";
6
+ var version = "4.88.6";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.1015",
9
9
  "@dynamic-labs-sdk/client": "1.8.2",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "4.88.5";
2
+ var version = "4.88.6";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.1015",
5
5
  "@dynamic-labs-sdk/client": "1.8.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.88.5",
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.5",
21
- "@dynamic-labs/iconic": "4.88.5",
22
- "@dynamic-labs/locale": "4.88.5",
23
- "@dynamic-labs/logger": "4.88.5",
24
- "@dynamic-labs/multi-wallet": "4.88.5",
25
- "@dynamic-labs/rpc-providers": "4.88.5",
26
- "@dynamic-labs/store": "4.88.5",
27
- "@dynamic-labs/types": "4.88.5",
28
- "@dynamic-labs/utils": "4.88.5",
29
- "@dynamic-labs/wallet-book": "4.88.5",
30
- "@dynamic-labs/wallet-connector-core": "4.88.5",
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 (!primaryWallet ||
150
+ if (!currentPrimaryWallet ||
139
151
  !bridgeChains ||
140
- connectedWallets.length <= 1 ||
141
- primaryWallet.chain === bridgeChains[0].chain) {
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 = connectedWallets.find((wallet) => wallet.chain === bridgeChains[0].chain);
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: connectedWallets.map((wallet) => ({
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: primaryWallet.address,
162
- chain: primaryWallet.chain,
163
- id: primaryWallet.id,
173
+ address: currentPrimaryWallet.address,
174
+ chain: currentPrimaryWallet.chain,
175
+ id: currentPrimaryWallet.id,
164
176
  },
165
177
  });
166
- setPrimaryWallet(newPrimaryWallet.id);
178
+ setPrimaryWalletRef.current(newPrimaryWallet.id);
167
179
  }
168
- }, [bridgeChains, primaryWallet, connectedWallets, setPrimaryWallet]);
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 (!primaryWallet ||
146
+ if (!currentPrimaryWallet ||
135
147
  !bridgeChains ||
136
- connectedWallets.length <= 1 ||
137
- primaryWallet.chain === bridgeChains[0].chain) {
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 = connectedWallets.find((wallet) => wallet.chain === bridgeChains[0].chain);
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: connectedWallets.map((wallet) => ({
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: primaryWallet.address,
158
- chain: primaryWallet.chain,
159
- id: primaryWallet.id,
169
+ address: currentPrimaryWallet.address,
170
+ chain: currentPrimaryWallet.chain,
171
+ id: currentPrimaryWallet.id,
160
172
  },
161
173
  });
162
- setPrimaryWallet(newPrimaryWallet.id);
174
+ setPrimaryWalletRef.current(newPrimaryWallet.id);
163
175
  }
164
- }, [bridgeChains, primaryWallet, connectedWallets, setPrimaryWallet]);
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) {