@dynamic-labs/sdk-react-core 1.4.3 → 1.4.5

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 (56) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +11 -11
  5. package/src/lib/components/DynamicFooter/DynamicFooter.cjs +8 -1
  6. package/src/lib/components/DynamicFooter/DynamicFooter.js +8 -1
  7. package/src/lib/components/Toolkit/Toolkit.cjs +2 -3
  8. package/src/lib/components/Toolkit/Toolkit.js +2 -3
  9. package/src/lib/components/Toolkit/components/index.d.ts +0 -1
  10. package/src/lib/context/DynamicContext/DynamicContext.cjs +13 -12
  11. package/src/lib/context/DynamicContext/DynamicContext.js +13 -12
  12. package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
  13. package/src/lib/context/DynamicContext/hooks/useHandleLogout/types.d.ts +0 -1
  14. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.cjs +0 -3
  15. package/src/lib/context/DynamicContext/hooks/useHandleLogout/useHandleLogout.js +1 -4
  16. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.cjs +15 -0
  17. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.d.ts +6 -0
  18. package/src/lib/context/DynamicContext/hooks/useMultiWallet/useMultiWallet.js +11 -0
  19. package/src/lib/context/DynamicContext/hooks/useParentDynamicContextGuard/index.d.ts +1 -0
  20. package/src/lib/context/DynamicContext/hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.cjs +15 -0
  21. package/src/lib/context/DynamicContext/hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.d.ts +1 -0
  22. package/src/lib/context/DynamicContext/hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.js +11 -0
  23. package/src/lib/context/DynamicContext/types/index.d.ts +4 -1
  24. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.cjs +4 -2
  25. package/src/lib/context/DynamicContext/useCustomerCallbacks/useCustomerCallbacks.js +4 -2
  26. package/src/lib/main.global.cjs +1 -1
  27. package/src/lib/main.global.js +1 -1
  28. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.cjs +0 -10
  29. package/src/lib/shared/utils/hooks/usePreventPageScroll/usePreventPageScroll.js +0 -10
  30. package/src/lib/styles/index.shadow.cjs +1 -1
  31. package/src/lib/styles/index.shadow.js +1 -1
  32. package/src/lib/utils/constants/index.d.ts +1 -1
  33. package/src/lib/utils/constants/localStorage.cjs +0 -2
  34. package/src/lib/utils/constants/localStorage.d.ts +0 -1
  35. package/src/lib/utils/constants/localStorage.js +1 -2
  36. package/src/lib/utils/functions/walletListBuilder/utils/getCalculatedOffset/getCalculatedOffset.cjs +9 -4
  37. package/src/lib/utils/functions/walletListBuilder/utils/getCalculatedOffset/getCalculatedOffset.js +9 -4
  38. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.cjs +24 -15
  39. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.d.ts +13 -0
  40. package/src/lib/utils/functions/walletListBuilder/walletListBuilder.js +24 -16
  41. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.cjs +16 -1
  42. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSignSplitSteps/useConnectAndSignSplitSteps.js +16 -1
  43. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs +2 -0
  44. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.d.ts +1 -0
  45. package/src/lib/utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js +2 -0
  46. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +4 -1
  47. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +4 -1
  48. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs +11 -1
  49. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js +11 -1
  50. package/src/lib/components/Toolkit/components/MultiWalletSwitch.cjs +0 -18
  51. package/src/lib/components/Toolkit/components/MultiWalletSwitch.d.ts +0 -6
  52. package/src/lib/components/Toolkit/components/MultiWalletSwitch.js +0 -14
  53. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.cjs +0 -39
  54. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.d.ts +0 -9
  55. package/src/lib/utils/hooks/multiWallet/useMultiWallet/useMultiWallet.js +0 -35
  56. /package/src/lib/{utils/hooks/multiWallet → context/DynamicContext/hooks}/useMultiWallet/index.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -1,4 +1,24 @@
1
1
 
2
+ ### [1.4.5](https://github.com/dynamic-labs/DynamicAuth/compare/v1.4.4...v1.4.5) (2024-04-05)
3
+
4
+
5
+ ### Bug Fixes
6
+
7
+ * use in-app browser deeplink for metamask ([#5176](https://github.com/dynamic-labs/DynamicAuth/issues/5176)) ([#5203](https://github.com/dynamic-labs/DynamicAuth/issues/5203)) ([63951d8](https://github.com/dynamic-labs/DynamicAuth/commit/63951d8896ea073e595e4a1e92bfe22731b012f4))
8
+ * clear user wallets immediately on logout ([#5238](https://github.com/dynamic-labs/DynamicAuth/issues/5238)) ([13b55a7](https://github.com/dynamic-labs/DynamicAuth/commit/13b55a7070f6f159504bf05b503848cc2c5ed445)), closes [#5211](https://github.com/dynamic-labs/DynamicAuth/issues/5211)
9
+
10
+ ### [1.4.4](https://github.com/dynamic-labs/DynamicAuth/compare/v1.4.3...v1.4.4) (2024-04-01)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * Multiple WC bug fixes ([#5132](https://github.com/dynamic-labs/DynamicAuth/issues/5132)) ([#5133](https://github.com/dynamic-labs/DynamicAuth/issues/5133)) ([88affaf](https://github.com/dynamic-labs/DynamicAuth/commit/88affaff291391f5f633f7f3bb1ecd5219705117))
16
+ * apply network validation in mobile auth flow ([#5142](https://github.com/dynamic-labs/DynamicAuth/issues/5142)) ([#5159](https://github.com/dynamic-labs/DynamicAuth/issues/5159)) ([f8a6202](https://github.com/dynamic-labs/DynamicAuth/commit/f8a6202f9af8f234c723cfd05f4438536eb30fd0))
17
+ * Better handling of empty callback queue ([#5147](https://github.com/dynamic-labs/DynamicAuth/issues/5147)) ([#5149](https://github.com/dynamic-labs/DynamicAuth/issues/5149)) ([f520f25](https://github.com/dynamic-labs/DynamicAuth/commit/f520f25f2a0faf12567db29f6712cc2f8e421cff))
18
+ * multiple improvements to the wallet list ([#5155](https://github.com/dynamic-labs/DynamicAuth/issues/5155)) ([582ac0e](https://github.com/dynamic-labs/DynamicAuth/commit/582ac0e8baf0fd0eec1246219a5eda730c99f290)), closes [#5112](https://github.com/dynamic-labs/DynamicAuth/issues/5112)
19
+ * Improved scroll experience on ios [48873da](https://github.com/dynamic-labs/DynamicAuth/commit/48873da25bafd07104cebf3bcbb8e2a787c8092c))
20
+ * better handling of multiwallet state ([#5146](https://github.com/dynamic-labs/DynamicAuth/issues/5146)) ([#5148](https://github.com/dynamic-labs/DynamicAuth/issues/5148)) ([dabb780](https://github.com/dynamic-labs/DynamicAuth/commit/dabb7808c94cfa4da7d0c7a058f04d69ffdb301a))
21
+
2
22
  ### [1.4.3](https://github.com/dynamic-labs/DynamicAuth/compare/v1.4.2...v1.4.3) (2024-03-28)
3
23
 
4
24
 
package/package.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var version = "1.4.3";
5
+ var version = "1.4.5";
6
6
  var dependencies = {
7
7
  "@dynamic-labs/sdk-api": "0.0.387",
8
8
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
- var version = "1.4.3";
1
+ var version = "1.4.5";
2
2
  var dependencies = {
3
3
  "@dynamic-labs/sdk-api": "0.0.387",
4
4
  "@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": "1.4.3",
3
+ "version": "1.4.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -16,16 +16,16 @@
16
16
  "react-focus-lock": "2.9.2",
17
17
  "react-i18next": "^13.2.0",
18
18
  "yup": "0.32.11",
19
- "@dynamic-labs/ethereum": "1.4.3",
20
- "@dynamic-labs/iconic": "1.4.3",
21
- "@dynamic-labs/logger": "1.4.3",
22
- "@dynamic-labs/multi-wallet": "1.4.3",
23
- "@dynamic-labs/rpc-providers": "1.4.3",
24
- "@dynamic-labs/types": "1.4.3",
25
- "@dynamic-labs/utils": "1.4.3",
26
- "@dynamic-labs/viem-utils": "1.4.3",
27
- "@dynamic-labs/wallet-book": "1.4.3",
28
- "@dynamic-labs/wallet-connector-core": "1.4.3",
19
+ "@dynamic-labs/ethereum": "1.4.5",
20
+ "@dynamic-labs/iconic": "1.4.5",
21
+ "@dynamic-labs/logger": "1.4.5",
22
+ "@dynamic-labs/multi-wallet": "1.4.5",
23
+ "@dynamic-labs/rpc-providers": "1.4.5",
24
+ "@dynamic-labs/types": "1.4.5",
25
+ "@dynamic-labs/utils": "1.4.5",
26
+ "@dynamic-labs/viem-utils": "1.4.5",
27
+ "@dynamic-labs/wallet-book": "1.4.5",
28
+ "@dynamic-labs/wallet-connector-core": "1.4.5",
29
29
  "eventemitter3": "5.0.1"
30
30
  },
31
31
  "devDependencies": {
@@ -4,7 +4,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var PoweredByDynamic = require('../PoweredByDynamic/PoweredByDynamic.cjs');
7
+ var classNames = require('../../utils/functions/classNames/classNames.cjs');
8
+ var useAuthLayoutChecks = require('../../utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.cjs');
7
9
 
8
- const DynamicFooter = () => (jsxRuntime.jsx("div", { className: 'dynamic-footer', children: jsxRuntime.jsx(PoweredByDynamic.PoweredByDynamic, {}) }));
10
+ const DynamicFooter = () => {
11
+ const { shouldHideDynamicFooterSeparator } = useAuthLayoutChecks.useAuthLayoutChecks();
12
+ return (jsxRuntime.jsx("div", { "data-testid": 'dynamic-footer', className: classNames.classNames('dynamic-footer', {
13
+ 'dynamic-footer__top-border': !shouldHideDynamicFooterSeparator,
14
+ }), children: jsxRuntime.jsx(PoweredByDynamic.PoweredByDynamic, {}) }));
15
+ };
9
16
 
10
17
  exports.DynamicFooter = DynamicFooter;
@@ -1,6 +1,13 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { PoweredByDynamic } from '../PoweredByDynamic/PoweredByDynamic.js';
3
+ import { classNames } from '../../utils/functions/classNames/classNames.js';
4
+ import { useAuthLayoutChecks } from '../../utils/hooks/useAuthLayoutChecks/useAuthLayoutChecks.js';
3
5
 
4
- const DynamicFooter = () => (jsx("div", { className: 'dynamic-footer', children: jsx(PoweredByDynamic, {}) }));
6
+ const DynamicFooter = () => {
7
+ const { shouldHideDynamicFooterSeparator } = useAuthLayoutChecks();
8
+ return (jsx("div", { "data-testid": 'dynamic-footer', className: classNames('dynamic-footer', {
9
+ 'dynamic-footer__top-border': !shouldHideDynamicFooterSeparator,
10
+ }), children: jsx(PoweredByDynamic, {}) }));
11
+ };
5
12
 
6
13
  export { DynamicFooter };
@@ -61,7 +61,6 @@ var AuthModeSwitch = require('./components/AuthModeSwitch.cjs');
61
61
  var LoginWithEmailSwitch = require('./components/LoginWithEmailSwitch.cjs');
62
62
  var LoginWithEmailViewDisplayPriorityOrderSwitch = require('./components/LoginWithEmailViewDisplayPriorityOrderSwitch.cjs');
63
63
  var TemplateSelect = require('./components/TemplateSelect.cjs');
64
- var MultiWalletSwitch = require('./components/MultiWalletSwitch.cjs');
65
64
  require('../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
66
65
  require('../../context/PasskeyContext/PasskeyContext.cjs');
67
66
  require('../../views/WalletList/WalletList.cjs');
@@ -81,7 +80,7 @@ require('../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/
81
80
  var useInternalDynamicContext = require('../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
82
81
 
83
82
  const Toolkit = () => {
84
- const { projectSettings, user, showAuthFlow, showDynamicUserProfile, toolkitEnabled, authMode, setAuthMode, multiWallet, setMultiWallet, } = useInternalDynamicContext.useInternalDynamicContext();
83
+ const { projectSettings, user, showAuthFlow, showDynamicUserProfile, toolkitEnabled, authMode, setAuthMode, } = useInternalDynamicContext.useInternalDynamicContext();
85
84
  const isToolkitVisible = React.useMemo(() => {
86
85
  if (!toolkitEnabled)
87
86
  return false;
@@ -89,7 +88,7 @@ const Toolkit = () => {
89
88
  }, [showAuthFlow, showDynamicUserProfile, toolkitEnabled]);
90
89
  if (!isToolkitVisible)
91
90
  return null;
92
- return (jsxRuntime.jsx(ShadowDOM.ShadowDOM, { dataTestId: 'toolkit-shadowdom', className: 'toolkit-shadowdom', zIndex: index.toolkitZIndex, children: jsxRuntime.jsxs("div", { className: 'toolkit__container', children: [jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Theme" }), jsxRuntime.jsx(ThemeSwitch.ThemeSwitch, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Template" }), jsxRuntime.jsx(TemplateSelect.TemplateSelect, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Primary Color" }), jsxRuntime.jsx(PrimaryColorInput.PrimaryColorInput, {})] }), !user && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Auth mode" }), jsxRuntime.jsx(AuthModeSwitch.AuthModeSwitch, { authMode: authMode, setAuthMode: setAuthMode })] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Multi Wallet" }), jsxRuntime.jsx(MultiWalletSwitch.MultiWalletSwitch, { multiWallet: multiWallet, setMultiWallet: setMultiWallet })] })] })), isEmailProviderEnabled.isEmailProviderEnabled((projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || []) && !user && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Log in with Email" }), jsxRuntime.jsx(LoginWithEmailSwitch.LoginWithEmailSwitch, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Email vs Wallet priority" }), jsxRuntime.jsx(LoginWithEmailViewDisplayPriorityOrderSwitch.LoginWithEmailViewDisplayPriorityOrderSwitch, {})] })] }))] }) }));
91
+ return (jsxRuntime.jsx(ShadowDOM.ShadowDOM, { dataTestId: 'toolkit-shadowdom', className: 'toolkit-shadowdom', zIndex: index.toolkitZIndex, children: jsxRuntime.jsxs("div", { className: 'toolkit__container', children: [jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Theme" }), jsxRuntime.jsx(ThemeSwitch.ThemeSwitch, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Template" }), jsxRuntime.jsx(TemplateSelect.TemplateSelect, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Primary Color" }), jsxRuntime.jsx(PrimaryColorInput.PrimaryColorInput, {})] }), !user && (jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Auth mode" }), jsxRuntime.jsx(AuthModeSwitch.AuthModeSwitch, { authMode: authMode, setAuthMode: setAuthMode })] })), isEmailProviderEnabled.isEmailProviderEnabled((projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || []) && !user && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Log in with Email" }), jsxRuntime.jsx(LoginWithEmailSwitch.LoginWithEmailSwitch, {})] }), jsxRuntime.jsxs("div", { className: 'toolkit__switcher', children: [jsxRuntime.jsx(Typography.Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Email vs Wallet priority" }), jsxRuntime.jsx(LoginWithEmailViewDisplayPriorityOrderSwitch.LoginWithEmailViewDisplayPriorityOrderSwitch, {})] })] }))] }) }));
93
92
  };
94
93
 
95
94
  exports.Toolkit = Toolkit;
@@ -57,7 +57,6 @@ import { AuthModeSwitch } from './components/AuthModeSwitch.js';
57
57
  import { LoginWithEmailSwitch } from './components/LoginWithEmailSwitch.js';
58
58
  import { LoginWithEmailViewDisplayPriorityOrderSwitch } from './components/LoginWithEmailViewDisplayPriorityOrderSwitch.js';
59
59
  import { TemplateSelect } from './components/TemplateSelect.js';
60
- import { MultiWalletSwitch } from './components/MultiWalletSwitch.js';
61
60
  import '../PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js';
62
61
  import '../../context/PasskeyContext/PasskeyContext.js';
63
62
  import '../../views/WalletList/WalletList.js';
@@ -77,7 +76,7 @@ import '../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/P
77
76
  import { useInternalDynamicContext } from '../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.js';
78
77
 
79
78
  const Toolkit = () => {
80
- const { projectSettings, user, showAuthFlow, showDynamicUserProfile, toolkitEnabled, authMode, setAuthMode, multiWallet, setMultiWallet, } = useInternalDynamicContext();
79
+ const { projectSettings, user, showAuthFlow, showDynamicUserProfile, toolkitEnabled, authMode, setAuthMode, } = useInternalDynamicContext();
81
80
  const isToolkitVisible = useMemo(() => {
82
81
  if (!toolkitEnabled)
83
82
  return false;
@@ -85,7 +84,7 @@ const Toolkit = () => {
85
84
  }, [showAuthFlow, showDynamicUserProfile, toolkitEnabled]);
86
85
  if (!isToolkitVisible)
87
86
  return null;
88
- return (jsx(ShadowDOM, { dataTestId: 'toolkit-shadowdom', className: 'toolkit-shadowdom', zIndex: toolkitZIndex, children: jsxs("div", { className: 'toolkit__container', children: [jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Theme" }), jsx(ThemeSwitch, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Template" }), jsx(TemplateSelect, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Primary Color" }), jsx(PrimaryColorInput, {})] }), !user && (jsxs(Fragment, { children: [jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Auth mode" }), jsx(AuthModeSwitch, { authMode: authMode, setAuthMode: setAuthMode })] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Multi Wallet" }), jsx(MultiWalletSwitch, { multiWallet: multiWallet, setMultiWallet: setMultiWallet })] })] })), isEmailProviderEnabled((projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || []) && !user && (jsxs(Fragment, { children: [jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Log in with Email" }), jsx(LoginWithEmailSwitch, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Email vs Wallet priority" }), jsx(LoginWithEmailViewDisplayPriorityOrderSwitch, {})] })] }))] }) }));
87
+ return (jsx(ShadowDOM, { dataTestId: 'toolkit-shadowdom', className: 'toolkit-shadowdom', zIndex: toolkitZIndex, children: jsxs("div", { className: 'toolkit__container', children: [jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Theme" }), jsx(ThemeSwitch, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Template" }), jsx(TemplateSelect, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Primary Color" }), jsx(PrimaryColorInput, {})] }), !user && (jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Auth mode" }), jsx(AuthModeSwitch, { authMode: authMode, setAuthMode: setAuthMode })] })), isEmailProviderEnabled((projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.providers) || []) && !user && (jsxs(Fragment, { children: [jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Log in with Email" }), jsx(LoginWithEmailSwitch, {})] }), jsxs("div", { className: 'toolkit__switcher', children: [jsx(Typography, { className: 'switcher__copy', as: 'h2', variant: 'body_normal', children: "Email vs Wallet priority" }), jsx(LoginWithEmailViewDisplayPriorityOrderSwitch, {})] })] }))] }) }));
89
88
  };
90
89
 
91
90
  export { Toolkit };
@@ -4,4 +4,3 @@ export { AuthModeSwitch } from './AuthModeSwitch';
4
4
  export { LoginWithEmailSwitch } from './LoginWithEmailSwitch';
5
5
  export { LoginWithEmailViewDisplayPriorityOrderSwitch } from './LoginWithEmailViewDisplayPriorityOrderSwitch';
6
6
  export { TemplateSelect } from './TemplateSelect';
7
- export { MultiWalletSwitch } from './MultiWalletSwitch';
@@ -79,7 +79,6 @@ var locale = require('../../locale/locale.cjs');
79
79
  var getMissingChains = require('../../utils/functions/getMissingChains/getMissingChains.cjs');
80
80
  var parseTheme = require('../../utils/functions/parseTheme/parseTheme.cjs');
81
81
  var useMultiWalletWidgetState = require('../../utils/hooks/multiWallet/useMultiWalletWidgetState/useMultiWalletWidgetState.cjs');
82
- var useMultiWallet = require('../../utils/hooks/multiWallet/useMultiWallet/useMultiWallet.cjs');
83
82
  var useClearWalletConnectSessions = require('../../utils/hooks/useClearWalletConnectSessions/useClearWalletConnectSessions.cjs');
84
83
  var useConnectWallet = require('../../utils/hooks/useConnectWallet/useConnectWallet.cjs');
85
84
  var useFetchWalletsForChainsMap = require('../../utils/hooks/useFetchWalletsForChainsMap/useFetchWalletsForChainsMap.cjs');
@@ -117,16 +116,18 @@ var useShowAuthFlow = require('./hooks/useShowAuthFlow/useShowAuthFlow.cjs');
117
116
  var usePasskeySuccessPopup = require('./hooks/usePasskeySuccessPopup/usePasskeySuccessPopup.cjs');
118
117
  var useTieCallbacksToEvents = require('./hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.cjs');
119
118
  var useVerificationInProgress = require('./hooks/useVerificationInProgress/useVerificationInProgress.cjs');
119
+ var useMultiWallet = require('./hooks/useMultiWallet/useMultiWallet.cjs');
120
120
  var useSetShowLinkNewWalletModal = require('./hooks/useSetShowLinkNewWalletModal/useSetShowLinkNewWalletModal.cjs');
121
121
  var useCustomerCallbacks = require('./useCustomerCallbacks/useCustomerCallbacks.cjs');
122
122
  var validators = require('./validators/validators.cjs');
123
+ var useParentDynamicContextGuard = require('./hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.cjs');
123
124
 
124
125
  const PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID = '2762a57b-faa4-41ce-9f16-abff9300e2c9';
125
126
  const EMPTY_INITIAL_USER = undefined;
126
127
  const DynamicContext = React.createContext(undefined);
127
128
  /** The context provider itself we only use internally */
128
129
  const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale$1, }) => {
129
- var _a, _b, _c, _d, _e, _f;
130
+ var _a, _b, _c, _d, _e, _f, _g;
130
131
  const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, enableConnectOnlyFallback = false, deepLinkPreference = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, hideEmbeddedWalletTransactionUIs, } = settings;
131
132
  const networkValidationMode = helpers.resolveNetworkValidationMode({
132
133
  bridgeChains: settings.bridgeChains,
@@ -168,10 +169,10 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
168
169
  dynamicContextProps: { settings },
169
170
  environmentId,
170
171
  });
171
- const { multiWallet, setMultiWallet } = useMultiWallet.useMultiWallet({
172
+ const multiWallet = useMultiWallet.useMultiWallet({
172
173
  isBridgeFlow,
173
- multiWalletSettings: (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet,
174
- toolkitEnabled: toolkitEnabled || false,
174
+ multiWalletOverride: (_b = settings.overrides) === null || _b === void 0 ? void 0 : _b.multiWallet,
175
+ multiWalletSettings: (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _c === void 0 ? void 0 : _c.multiWallet,
175
176
  });
176
177
  // ensures that when user comes back to site and primary wallet is out of sync, we don't show widget popup
177
178
  const [showWidgetStatePopup, setShowWidgetStatePopup] = React.useState(!multiWallet);
@@ -245,7 +246,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
245
246
  //selected wallet to perform an action (become primary, unlink, etc)
246
247
  const [selectedWalletWithAction, setSelectedWalletWithAction] = React.useState(null);
247
248
  // until user completes onboarding, jwt is only stored in onboardingOnlyJwt
248
- const authToken = (_c = getAuthToken.getAuthToken()) !== null && _c !== void 0 ? _c : onboardingOnlyJwt;
249
+ const authToken = (_d = getAuthToken.getAuthToken()) !== null && _d !== void 0 ? _d : onboardingOnlyJwt;
249
250
  useSetWalletConnectorVerifiedCredentials.useSetWalletConnectorVerifiedCredentials(authToken, walletConnectorOptions);
250
251
  const { didConnectedStateLoad, primaryWallet, showQrcodeModal, secondaryWallets, setPrimaryWallet, setShowQrcodeModal, wallets: linkedOrConnectedWallets, } = useWalletConnectors.useWalletConnectors({
251
252
  authMode,
@@ -312,14 +313,13 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
312
313
  setShowAuthFlow,
313
314
  setShowBridgeWidget,
314
315
  setShowDynamicUserProfile,
315
- toolkitEnabled,
316
316
  user,
317
317
  walletConnectors,
318
318
  });
319
319
  let wcVersion;
320
320
  if (projectSettings) {
321
321
  wcVersion =
322
- ((_e = (_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _d === void 0 ? void 0 : _d.walletConnect) === null || _e === void 0 ? void 0 : _e.v2Enabled) && !walletConnectV1Bridge
322
+ ((_f = (_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _e === void 0 ? void 0 : _e.walletConnect) === null || _f === void 0 ? void 0 : _f.v2Enabled) && !walletConnectV1Bridge
323
323
  ? 2
324
324
  : 1;
325
325
  }
@@ -516,7 +516,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
516
516
  setIsVerificationInProgress,
517
517
  setLegacyIsVerifying,
518
518
  setLogInWithEmail,
519
- setMultiWallet,
520
519
  setMultiWalletWidgetState,
521
520
  setNetwork,
522
521
  setOnboardingOnlyJwt,
@@ -633,7 +632,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
633
632
  setCallback,
634
633
  setIsVerificationInProgress,
635
634
  setLogInWithEmail,
636
- setMultiWallet,
637
635
  setMultiWalletWidgetState,
638
636
  setNetwork,
639
637
  setPrimaryWallet,
@@ -701,7 +699,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
701
699
  setShowDynamicUserProfile(true);
702
700
  }
703
701
  }, [multiWallet, multiWalletWidgetState, showDynamicUserProfile, user]);
704
- return (jsxRuntime.jsx(reactI18next.I18nextProvider, { i18n: i18nSDKInstance, children: jsxRuntime.jsx(DynamicContext.Provider, { value: value, children: jsxRuntime.jsx(walletBook.WalletBookContextProvider, { walletBook: walletBook$1, children: jsxRuntime.jsx(ThemeContext.ThemeContextProvider, { customerTheme: parseTheme.parseTheme(theme, ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _f === void 0 ? void 0 : _f.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsxRuntime.jsx(LoadingContext.LoadingContextProvider, { children: jsxRuntime.jsxs(ViewContext.ViewContextProvider, { initialView: helpers.getInitialView({
702
+ return (jsxRuntime.jsx(reactI18next.I18nextProvider, { i18n: i18nSDKInstance, children: jsxRuntime.jsx(DynamicContext.Provider, { value: value, children: jsxRuntime.jsx(walletBook.WalletBookContextProvider, { walletBook: walletBook$1, children: jsxRuntime.jsx(ThemeContext.ThemeContextProvider, { customerTheme: parseTheme.parseTheme(theme, ((_g = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _g === void 0 ? void 0 : _g.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsxRuntime.jsx(LoadingContext.LoadingContextProvider, { children: jsxRuntime.jsxs(ViewContext.ViewContextProvider, { initialView: helpers.getInitialView({
705
703
  bridgeOnboardingCompleted,
706
704
  connectedWallets,
707
705
  isAuthenticated: isAuthenticated || Boolean(primaryWallet),
@@ -710,7 +708,10 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale: locale
710
708
  }), children: [networkValidationMode === 'always' && jsxRuntime.jsx(UseNetworkValidation.UseNetworkValidation, {}), jsxRuntime.jsx(CaptchaContext.CaptchaContextProvider, { children: jsxRuntime.jsx(AccountExistsContext.AccountExistsContextProvider, { children: jsxRuntime.jsx(WalletContext.WalletContextProvider, { canSync: didConnectedStateLoad, children: jsxRuntime.jsx(PasskeyContext.PasskeyContextProvider, { children: jsxRuntime.jsx(EmailVerificationContext.EmailVerificationContextProvider, { children: jsxRuntime.jsx(DynamicWidgetContext.DynamicWidgetContextProvider, { children: jsxRuntime.jsx(DynamicBridgeWidgetContext.DynamicBridgeWidgetContextProvider, { children: jsxRuntime.jsx(FundingContext.FundingContextProvider, { children: jsxRuntime.jsx(AccessDeniedContext.AccessDeniedContextProvider, { children: jsxRuntime.jsx(SendBalanceContext.SendBalanceContextProvider, { children: jsxRuntime.jsx(WalletGroupContext.WalletGroupContextProvider, { children: jsxRuntime.jsx(UserFieldEditorContext.UserFieldEditorContextProvider, { children: jsxRuntime.jsx(ConnectWithEmailOtpProvider.ConnectWithEmailOtpProvider, { children: jsxRuntime.jsx(PhantomRedirectContext.PhantomRedirectContextProvider, { children: jsxRuntime.jsxs(SocialRedirectContext.SocialRedirectContextProvider, { children: [jsxRuntime.jsx(app.DynamicAuthFlow, {}), jsxRuntime.jsx(Toolkit.Toolkit, {}), jsxRuntime.jsx(FundingWidget.FundingWidget, {}), jsxRuntime.jsx(SyncPasskeyFlow.SyncPasskeyFlow, {}), confirmationModal, children] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
711
709
  };
712
710
  /** The context provider you need to have access too all of Dynamic's hooks */
713
- const DynamicContextProvider = (props) => (jsxRuntime.jsx(ErrorContext.ErrorContextProvider, { children: jsxRuntime.jsx(UserWalletsContext.UserWalletsProvider, { children: jsxRuntime.jsx(InnerDynamicContextProvider, Object.assign({}, props)) }) }));
711
+ const DynamicContextProvider = (props) => {
712
+ useParentDynamicContextGuard.useParentDynamicContextGuard();
713
+ return (jsxRuntime.jsx(ErrorContext.ErrorContextProvider, { children: jsxRuntime.jsx(UserWalletsContext.UserWalletsProvider, { children: jsxRuntime.jsx(InnerDynamicContextProvider, Object.assign({}, props)) }) }));
714
+ };
714
715
 
715
716
  exports.DynamicContext = DynamicContext;
716
717
  exports.DynamicContextProvider = DynamicContextProvider;
@@ -75,7 +75,6 @@ import { Locale } from '../../locale/locale.js';
75
75
  import { getMissingChains } from '../../utils/functions/getMissingChains/getMissingChains.js';
76
76
  import { parseTheme } from '../../utils/functions/parseTheme/parseTheme.js';
77
77
  import { useMultiWalletWidgetState } from '../../utils/hooks/multiWallet/useMultiWalletWidgetState/useMultiWalletWidgetState.js';
78
- import { useMultiWallet } from '../../utils/hooks/multiWallet/useMultiWallet/useMultiWallet.js';
79
78
  import { useClearWalletConnectSessions } from '../../utils/hooks/useClearWalletConnectSessions/useClearWalletConnectSessions.js';
80
79
  import { useConnectWallet } from '../../utils/hooks/useConnectWallet/useConnectWallet.js';
81
80
  import { useFetchWalletsForChainsMap } from '../../utils/hooks/useFetchWalletsForChainsMap/useFetchWalletsForChainsMap.js';
@@ -113,16 +112,18 @@ import { useShowAuthFlow } from './hooks/useShowAuthFlow/useShowAuthFlow.js';
113
112
  import { usePasskeySuccessPopup } from './hooks/usePasskeySuccessPopup/usePasskeySuccessPopup.js';
114
113
  import { useTieCallbacksToEvents } from './hooks/useTieCallbacksToEvents/useTieCallbacksToEvents.js';
115
114
  import { useVerificationInProgress } from './hooks/useVerificationInProgress/useVerificationInProgress.js';
115
+ import { useMultiWallet } from './hooks/useMultiWallet/useMultiWallet.js';
116
116
  import { useSetShowLinkNewWalletModal } from './hooks/useSetShowLinkNewWalletModal/useSetShowLinkNewWalletModal.js';
117
117
  import { useCustomerCallbacks } from './useCustomerCallbacks/useCustomerCallbacks.js';
118
118
  import { validateAuthUser } from './validators/validators.js';
119
+ import { useParentDynamicContextGuard } from './hooks/useParentDynamicContextGuard/useParentDynamicContextGuard.js';
119
120
 
120
121
  const PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID = '2762a57b-faa4-41ce-9f16-abff9300e2c9';
121
122
  const EMPTY_INITIAL_USER = undefined;
122
123
  const DynamicContext = createContext(undefined);
123
124
  /** The context provider itself we only use internally */
124
125
  const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) => {
125
- var _a, _b, _c, _d, _e, _f;
126
+ var _a, _b, _c, _d, _e, _f, _g;
126
127
  const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, enableConnectOnlyFallback = false, deepLinkPreference = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, localStorageSuffix, eventsCallbacks, evmNetworks, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, hideEmbeddedWalletTransactionUIs, } = settings;
127
128
  const networkValidationMode = resolveNetworkValidationMode({
128
129
  bridgeChains: settings.bridgeChains,
@@ -164,10 +165,10 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
164
165
  dynamicContextProps: { settings },
165
166
  environmentId,
166
167
  });
167
- const { multiWallet, setMultiWallet } = useMultiWallet({
168
+ const multiWallet = useMultiWallet({
168
169
  isBridgeFlow,
169
- multiWalletSettings: (_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _b === void 0 ? void 0 : _b.multiWallet,
170
- toolkitEnabled: toolkitEnabled || false,
170
+ multiWalletOverride: (_b = settings.overrides) === null || _b === void 0 ? void 0 : _b.multiWallet,
171
+ multiWalletSettings: (_c = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _c === void 0 ? void 0 : _c.multiWallet,
171
172
  });
172
173
  // ensures that when user comes back to site and primary wallet is out of sync, we don't show widget popup
173
174
  const [showWidgetStatePopup, setShowWidgetStatePopup] = useState(!multiWallet);
@@ -241,7 +242,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
241
242
  //selected wallet to perform an action (become primary, unlink, etc)
242
243
  const [selectedWalletWithAction, setSelectedWalletWithAction] = useState(null);
243
244
  // until user completes onboarding, jwt is only stored in onboardingOnlyJwt
244
- const authToken = (_c = getAuthToken()) !== null && _c !== void 0 ? _c : onboardingOnlyJwt;
245
+ const authToken = (_d = getAuthToken()) !== null && _d !== void 0 ? _d : onboardingOnlyJwt;
245
246
  useSetWalletConnectorVerifiedCredentials(authToken, walletConnectorOptions);
246
247
  const { didConnectedStateLoad, primaryWallet, showQrcodeModal, secondaryWallets, setPrimaryWallet, setShowQrcodeModal, wallets: linkedOrConnectedWallets, } = useWalletConnectors({
247
248
  authMode,
@@ -308,14 +309,13 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
308
309
  setShowAuthFlow,
309
310
  setShowBridgeWidget,
310
311
  setShowDynamicUserProfile,
311
- toolkitEnabled,
312
312
  user,
313
313
  walletConnectors,
314
314
  });
315
315
  let wcVersion;
316
316
  if (projectSettings) {
317
317
  wcVersion =
318
- ((_e = (_d = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _d === void 0 ? void 0 : _d.walletConnect) === null || _e === void 0 ? void 0 : _e.v2Enabled) && !walletConnectV1Bridge
318
+ ((_f = (_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _e === void 0 ? void 0 : _e.walletConnect) === null || _f === void 0 ? void 0 : _f.v2Enabled) && !walletConnectV1Bridge
319
319
  ? 2
320
320
  : 1;
321
321
  }
@@ -512,7 +512,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
512
512
  setIsVerificationInProgress,
513
513
  setLegacyIsVerifying,
514
514
  setLogInWithEmail,
515
- setMultiWallet,
516
515
  setMultiWalletWidgetState,
517
516
  setNetwork,
518
517
  setOnboardingOnlyJwt,
@@ -629,7 +628,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
629
628
  setCallback,
630
629
  setIsVerificationInProgress,
631
630
  setLogInWithEmail,
632
- setMultiWallet,
633
631
  setMultiWalletWidgetState,
634
632
  setNetwork,
635
633
  setPrimaryWallet,
@@ -697,7 +695,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
697
695
  setShowDynamicUserProfile(true);
698
696
  }
699
697
  }, [multiWallet, multiWalletWidgetState, showDynamicUserProfile, user]);
700
- return (jsx(I18nextProvider, { i18n: i18nSDKInstance, children: jsx(DynamicContext.Provider, { value: value, children: jsx(WalletBookContextProvider, { walletBook: walletBook, children: jsx(ThemeContextProvider, { customerTheme: parseTheme(theme, ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _f === void 0 ? void 0 : _f.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsx(LoadingContextProvider, { children: jsxs(ViewContextProvider, { initialView: getInitialView({
698
+ return (jsx(I18nextProvider, { i18n: i18nSDKInstance, children: jsx(DynamicContext.Provider, { value: value, children: jsx(WalletBookContextProvider, { walletBook: walletBook, children: jsx(ThemeContextProvider, { customerTheme: parseTheme(theme, ((_g = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _g === void 0 ? void 0 : _g.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsx(LoadingContextProvider, { children: jsxs(ViewContextProvider, { initialView: getInitialView({
701
699
  bridgeOnboardingCompleted,
702
700
  connectedWallets,
703
701
  isAuthenticated: isAuthenticated || Boolean(primaryWallet),
@@ -706,6 +704,9 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
706
704
  }), children: [networkValidationMode === 'always' && jsx(UseNetworkValidation, {}), jsx(CaptchaContextProvider, { children: jsx(AccountExistsContextProvider, { children: jsx(WalletContextProvider, { canSync: didConnectedStateLoad, children: jsx(PasskeyContextProvider, { children: jsx(EmailVerificationContextProvider, { children: jsx(DynamicWidgetContextProvider, { children: jsx(DynamicBridgeWidgetContextProvider, { children: jsx(FundingContextProvider, { children: jsx(AccessDeniedContextProvider, { children: jsx(SendBalanceContextProvider, { children: jsx(WalletGroupContextProvider, { children: jsx(UserFieldEditorContextProvider, { children: jsx(ConnectWithEmailOtpProvider, { children: jsx(PhantomRedirectContextProvider, { children: jsxs(SocialRedirectContextProvider, { children: [jsx(DynamicAuthFlow, {}), jsx(Toolkit, {}), jsx(FundingWidget, {}), jsx(SyncPasskeyFlow, {}), confirmationModal, children] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
707
705
  };
708
706
  /** The context provider you need to have access too all of Dynamic's hooks */
709
- const DynamicContextProvider = (props) => (jsx(ErrorContextProvider, { children: jsx(UserWalletsProvider, { children: jsx(InnerDynamicContextProvider, Object.assign({}, props)) }) }));
707
+ const DynamicContextProvider = (props) => {
708
+ useParentDynamicContextGuard();
709
+ return (jsx(ErrorContextProvider, { children: jsx(UserWalletsProvider, { children: jsx(InnerDynamicContextProvider, Object.assign({}, props)) }) }));
710
+ };
710
711
 
711
712
  export { DynamicContext, DynamicContextProvider, InnerDynamicContextProvider, PUBLIC_PROJECT_LIVE_ENVIRONMENT_ID };
@@ -7,3 +7,4 @@ export * from './useShowAuthFlow';
7
7
  export * from './usePasskeySuccessPopup';
8
8
  export * from './useTieCallbacksToEvents';
9
9
  export * from './useVerificationInProgress';
10
+ export * from './useMultiWallet';
@@ -11,7 +11,6 @@ export type UseHandleLogoutParams = {
11
11
  bridgeChains: ChainsToConnect[] | undefined;
12
12
  setShowDynamicUserProfile: Dispatch<SetStateAction<boolean>>;
13
13
  setShowBridgeWidget: Dispatch<SetStateAction<boolean>>;
14
- toolkitEnabled: boolean | undefined;
15
14
  user: UserProfile | undefined;
16
15
  environmentId: string;
17
16
  walletConnectors: WalletConnectorCore.WalletConnector[];
@@ -84,9 +84,6 @@ const useHandleLogout = (params) => {
84
84
  p.setShowBridgeWidget(false);
85
85
  p.resetLoginWithEmail();
86
86
  localStorage.LocalStorage.removeFromLS(localStorage$1.WALLET_PICKER_SEARCH_KEY);
87
- if (!p.toolkitEnabled) {
88
- localStorage.LocalStorage.removeFromLS(localStorage$1.IS_MULTI_WALLET_ENABLED);
89
- }
90
87
  const jwt = getAuthToken.getAuthToken();
91
88
  if (jwt && p.user) {
92
89
  // do not await this async call - just fire and forget
@@ -9,7 +9,7 @@ import '@dynamic-labs/wallet-connector-core';
9
9
  import 'react/jsx-runtime';
10
10
  import '../../../ViewContext/ViewContext.js';
11
11
  import '@dynamic-labs/wallet-book';
12
- import { WALLET_PICKER_SEARCH_KEY, IS_MULTI_WALLET_ENABLED, AUTH_TOKEN } from '../../../../utils/constants/localStorage.js';
12
+ import { WALLET_PICKER_SEARCH_KEY, AUTH_TOKEN } from '../../../../utils/constants/localStorage.js';
13
13
  import '../../../../utils/constants/colors.js';
14
14
  import '../../../../utils/constants/values.js';
15
15
  import { LocalStorage } from '../../../../shared/utils/classes/storage/localStorage.js';
@@ -80,9 +80,6 @@ const useHandleLogout = (params) => {
80
80
  p.setShowBridgeWidget(false);
81
81
  p.resetLoginWithEmail();
82
82
  LocalStorage.removeFromLS(WALLET_PICKER_SEARCH_KEY);
83
- if (!p.toolkitEnabled) {
84
- LocalStorage.removeFromLS(IS_MULTI_WALLET_ENABLED);
85
- }
86
83
  const jwt = getAuthToken();
87
84
  if (jwt && p.user) {
88
85
  // do not await this async call - just fire and forget
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const useMultiWallet = ({ isBridgeFlow, multiWalletOverride, multiWalletSettings, }) => {
6
+ var _a;
7
+ // Use settings override
8
+ if (multiWalletOverride !== undefined) {
9
+ return multiWalletOverride;
10
+ }
11
+ // Use settings value
12
+ return (_a = (multiWalletSettings || isBridgeFlow)) !== null && _a !== void 0 ? _a : false;
13
+ };
14
+
15
+ exports.useMultiWallet = useMultiWallet;
@@ -0,0 +1,6 @@
1
+ export type UseMultiWalletProps = {
2
+ isBridgeFlow?: boolean;
3
+ multiWalletOverride?: boolean;
4
+ multiWalletSettings?: boolean;
5
+ };
6
+ export declare const useMultiWallet: ({ isBridgeFlow, multiWalletOverride, multiWalletSettings, }: UseMultiWalletProps) => boolean;
@@ -0,0 +1,11 @@
1
+ const useMultiWallet = ({ isBridgeFlow, multiWalletOverride, multiWalletSettings, }) => {
2
+ var _a;
3
+ // Use settings override
4
+ if (multiWalletOverride !== undefined) {
5
+ return multiWalletOverride;
6
+ }
7
+ // Use settings value
8
+ return (_a = (multiWalletSettings || isBridgeFlow)) !== null && _a !== void 0 ? _a : false;
9
+ };
10
+
11
+ export { useMultiWallet };
@@ -0,0 +1 @@
1
+ export { useParentDynamicContextGuard } from './useParentDynamicContextGuard';
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var DynamicContext = require('../../DynamicContext.cjs');
7
+
8
+ const useParentDynamicContextGuard = () => {
9
+ const context = React.useContext(DynamicContext.DynamicContext);
10
+ if (context) {
11
+ throw new Error('DynamicContextProvider should not be nested. Please wrap your application in a single DynamicContextProvider.');
12
+ }
13
+ };
14
+
15
+ exports.useParentDynamicContextGuard = useParentDynamicContextGuard;
@@ -0,0 +1 @@
1
+ export declare const useParentDynamicContextGuard: () => void;
@@ -0,0 +1,11 @@
1
+ import { useContext } from 'react';
2
+ import { DynamicContext } from '../../DynamicContext.js';
3
+
4
+ const useParentDynamicContextGuard = () => {
5
+ const context = useContext(DynamicContext);
6
+ if (context) {
7
+ throw new Error('DynamicContextProvider should not be nested. Please wrap your application in a single DynamicContextProvider.');
8
+ }
9
+ };
10
+
11
+ export { useParentDynamicContextGuard };
@@ -32,6 +32,10 @@ export type WalletListViewSettings = {
32
32
  export type ViewsOverrides = SdkView | WalletListViewSettings;
33
33
  export type SettingsOverrides = {
34
34
  views?: Array<ViewsOverrides>;
35
+ /**
36
+ * Allows overriding the multi-wallet feature from the dashboard.
37
+ */
38
+ multiWallet?: boolean;
35
39
  };
36
40
  export type ConnectWalletResult = {
37
41
  address: string;
@@ -117,7 +121,6 @@ export interface IDynamicContext {
117
121
  setDesktopUri: Dispatch<SetStateAction<string>>;
118
122
  setIsSingleWalletAccount: Dispatch<SetStateAction<boolean>>;
119
123
  setLogInWithEmail: Dispatch<SetStateAction<boolean>>;
120
- setMultiWallet: (value: boolean) => void;
121
124
  setMultiWalletWidgetState: MultiWalletWidgetStateSetter;
122
125
  setNetwork: Dispatch<SetStateAction<number | string | undefined>>;
123
126
  setOnboardingOnlyJwt: Dispatch<SetStateAction<string | undefined>>;
@@ -110,8 +110,10 @@ const useCustomerCallbacks = ({ callbacks: { onAuthSuccess, onLinkSuccess, onUse
110
110
  handleNextCallback(callbackQueue[0], authToken, user);
111
111
  setCallbackQueue((prev) => {
112
112
  const [resolvedCallback, ...updatedQueue] = prev;
113
- logger.logger.debug('Resolved callback: ', resolvedCallback.callback);
114
- logger.logger.debug('Callbacks in queue: ', updatedQueue.map((c) => c.callback));
113
+ if (resolvedCallback) {
114
+ logger.logger.debug('Resolved callback: ', resolvedCallback.callback);
115
+ logger.logger.debug('Callbacks in queue: ', updatedQueue.map((c) => c.callback));
116
+ }
115
117
  return updatedQueue;
116
118
  });
117
119
  }, [callbackQueue, handleNextCallback, primaryWallet, user]);
@@ -106,8 +106,10 @@ const useCustomerCallbacks = ({ callbacks: { onAuthSuccess, onLinkSuccess, onUse
106
106
  handleNextCallback(callbackQueue[0], authToken, user);
107
107
  setCallbackQueue((prev) => {
108
108
  const [resolvedCallback, ...updatedQueue] = prev;
109
- logger.debug('Resolved callback: ', resolvedCallback.callback);
110
- logger.debug('Callbacks in queue: ', updatedQueue.map((c) => c.callback));
109
+ if (resolvedCallback) {
110
+ logger.debug('Resolved callback: ', resolvedCallback.callback);
111
+ logger.debug('Callbacks in queue: ', updatedQueue.map((c) => c.callback));
112
+ }
111
113
  return updatedQueue;
112
114
  });
113
115
  }, [callbackQueue, handleNextCallback, primaryWallet, user]);