@dynamic-labs/sdk-react-core 4.63.1 → 4.65.0

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 (51) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +13 -13
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.ts +2 -1
  7. package/src/index.js +1 -0
  8. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.cjs +1 -1
  9. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.d.ts +5 -1
  10. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.js +1 -1
  11. package/src/lib/components/ShadowDOM/ShadowDOM.cjs +6 -6
  12. package/src/lib/components/ShadowDOM/ShadowDOM.d.ts +4 -1
  13. package/src/lib/components/ShadowDOM/ShadowDOM.js +6 -6
  14. package/src/lib/context/DynamicContext/DynamicContext.cjs +4 -2
  15. package/src/lib/context/DynamicContext/DynamicContext.js +4 -2
  16. package/src/lib/context/DynamicContext/types/DynamicContextProps.d.ts +6 -0
  17. package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +1 -0
  18. package/src/lib/context/DynamicContext/types/IInternalDynamicContext.d.ts +5 -1
  19. package/src/lib/context/ThemeContext/ThemeContext.cjs +3 -3
  20. package/src/lib/context/ThemeContext/ThemeContext.d.ts +1 -0
  21. package/src/lib/context/ThemeContext/ThemeContext.js +3 -3
  22. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.cjs +8 -2
  23. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.d.ts +2 -2
  24. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.js +8 -2
  25. package/src/lib/data/api/wallets/wallets.cjs +62 -11
  26. package/src/lib/data/api/wallets/wallets.d.ts +1 -0
  27. package/src/lib/data/api/wallets/wallets.js +62 -12
  28. package/src/lib/shared/types/connectionAndSignature.d.ts +2 -1
  29. package/src/lib/shared/types/wallets.d.ts +2 -1
  30. package/src/lib/utils/functions/compareChains/compareChains.cjs +1 -0
  31. package/src/lib/utils/functions/compareChains/compareChains.js +1 -0
  32. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +6 -5
  33. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.d.ts +3 -1
  34. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +6 -5
  35. package/src/lib/utils/hooks/index.d.ts +2 -0
  36. package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.cjs +20 -1
  37. package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.js +20 -1
  38. package/src/lib/utils/hooks/useStepUpAuthentication/index.d.ts +2 -0
  39. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.cjs +197 -0
  40. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.d.ts +51 -0
  41. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.js +193 -0
  42. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +8 -3
  43. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.d.ts +1 -1
  44. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +9 -4
  45. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.cjs +30 -0
  46. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.d.ts +6 -0
  47. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.js +30 -0
  48. package/src/lib/views/SendBalanceView/SendBalanceView.cjs +1 -0
  49. package/src/lib/views/SendBalanceView/SendBalanceView.js +1 -0
  50. package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.cjs +17 -21
  51. package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.js +17 -21
package/CHANGELOG.md CHANGED
@@ -1,4 +1,27 @@
1
1
 
2
+ ## [4.65.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.64.0...v4.65.0) (2026-02-27)
3
+
4
+
5
+ ### Features
6
+
7
+ * add CSP nonce support for style and link tags ([#10514](https://github.com/dynamic-labs/dynamic-auth/issues/10514)) ([62128f5](https://github.com/dynamic-labs/dynamic-auth/commit/62128f5eddfd2a037c2ed6e9320b5009d350c0b5))
8
+ * add setPassword method for initial wallet password setup ([#10534](https://github.com/dynamic-labs/dynamic-auth/issues/10534)) ([87d1e5f](https://github.com/dynamic-labs/dynamic-auth/commit/87d1e5f3c41fe4417320f6971566526e8bf07e99))
9
+ * add step-up authentication and walletsVerify API ([#10482](https://github.com/dynamic-labs/dynamic-auth/issues/10482)) ([e762a63](https://github.com/dynamic-labs/dynamic-auth/commit/e762a634e9782c34926f5947db5446ad95617064))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **react-native:** ensure items are saved to storage successfully ([#10538](https://github.com/dynamic-labs/dynamic-auth/issues/10538)) ([60bfd5e](https://github.com/dynamic-labs/dynamic-auth/commit/60bfd5e4bf1e7265e754c222839662ff615495b2))
15
+ * **sdk-react-core:** add stellar to compareChains to prevent duplicate wallet creation ([#10526](https://github.com/dynamic-labs/dynamic-auth/issues/10526)) ([89f4498](https://github.com/dynamic-labs/dynamic-auth/commit/89f449892a5153dc8032e0e8ea61cf453e0a2b23))
16
+ * show password setup button for all WaaS wallets regardless of passcodeRequired ([#10532](https://github.com/dynamic-labs/dynamic-auth/issues/10532)) ([615cbf2](https://github.com/dynamic-labs/dynamic-auth/commit/615cbf25fcf95cb5b82a118a2d5d37285e8b5b83))
17
+
18
+ ## [4.64.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.63.1...v4.64.0) (2026-02-25)
19
+
20
+
21
+ ### Features
22
+
23
+ * add addTrustline method to the stellar wallet ([#10510](https://github.com/dynamic-labs/dynamic-auth/issues/10510)) ([e8690e8](https://github.com/dynamic-labs/dynamic-auth/commit/e8690e821dfe867355618d970380568487c3dd36))
24
+
2
25
  ### [4.63.1](https://github.com/dynamic-labs/dynamic-auth/compare/v4.63.0...v4.63.1) (2026-02-24)
3
26
 
4
27
 
package/package.cjs CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.63.1";
6
+ var version = "4.65.0";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.875",
9
9
  "@dynamic-labs-sdk/client": "0.12.1",
10
- "@dynamic-labs-wallet/browser-wallet-client": "0.0.276",
10
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.286",
11
11
  "@hcaptcha/react-hcaptcha": "1.4.4",
12
12
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
13
13
  "country-list": "2.3.0",
package/package.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use client'
2
- var version = "4.63.1";
2
+ var version = "4.65.0";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.875",
5
5
  "@dynamic-labs-sdk/client": "0.12.1",
6
- "@dynamic-labs-wallet/browser-wallet-client": "0.0.276",
6
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.286",
7
7
  "@hcaptcha/react-hcaptcha": "1.4.4",
8
8
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
9
9
  "country-list": "2.3.0",
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "4.63.1",
3
+ "version": "4.65.0",
4
4
  "dependencies": {
5
5
  "@dynamic-labs/sdk-api-core": "0.0.875",
6
6
  "@dynamic-labs-sdk/client": "0.12.1",
7
- "@dynamic-labs-wallet/browser-wallet-client": "0.0.276",
7
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.286",
8
8
  "@hcaptcha/react-hcaptcha": "1.4.4",
9
9
  "@thumbmarkjs/thumbmarkjs": "0.16.0",
10
10
  "country-list": "2.3.0",
@@ -16,17 +16,17 @@
16
16
  "yup": "0.32.11",
17
17
  "react-international-phone": "4.5.0",
18
18
  "bs58": "5.0.0",
19
- "@dynamic-labs/assert-package-version": "4.63.1",
20
- "@dynamic-labs/iconic": "4.63.1",
21
- "@dynamic-labs/locale": "4.63.1",
22
- "@dynamic-labs/logger": "4.63.1",
23
- "@dynamic-labs/multi-wallet": "4.63.1",
24
- "@dynamic-labs/rpc-providers": "4.63.1",
25
- "@dynamic-labs/store": "4.63.1",
26
- "@dynamic-labs/types": "4.63.1",
27
- "@dynamic-labs/utils": "4.63.1",
28
- "@dynamic-labs/wallet-book": "4.63.1",
29
- "@dynamic-labs/wallet-connector-core": "4.63.1",
19
+ "@dynamic-labs/assert-package-version": "4.65.0",
20
+ "@dynamic-labs/iconic": "4.65.0",
21
+ "@dynamic-labs/locale": "4.65.0",
22
+ "@dynamic-labs/logger": "4.65.0",
23
+ "@dynamic-labs/multi-wallet": "4.65.0",
24
+ "@dynamic-labs/rpc-providers": "4.65.0",
25
+ "@dynamic-labs/store": "4.65.0",
26
+ "@dynamic-labs/types": "4.65.0",
27
+ "@dynamic-labs/utils": "4.65.0",
28
+ "@dynamic-labs/wallet-book": "4.65.0",
29
+ "@dynamic-labs/wallet-connector-core": "4.65.0",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "devDependencies": {
package/src/index.cjs CHANGED
@@ -186,6 +186,7 @@ var useIsMfaRequiredForAction = require('./lib/utils/hooks/useIsMfaRequiredForAc
186
186
  var useRefreshAuth = require('./lib/utils/hooks/useRefreshAuth/useRefreshAuth.cjs');
187
187
  var useWalletPassword = require('./lib/utils/hooks/useWalletPassword/useWalletPassword.cjs');
188
188
  var useGetWalletPassword = require('./lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.cjs');
189
+ var useStepUpAuthentication = require('./lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.cjs');
189
190
  var DynamicConnectButton = require('./lib/components/DynamicConnectButton/DynamicConnectButton.cjs');
190
191
  require('./lib/components/InlineWidget/InlineWidget.cjs');
191
192
  var IsBrowser = require('./lib/components/IsBrowser/IsBrowser.cjs');
@@ -349,6 +350,7 @@ exports.useIsMfaRequiredForAction = useIsMfaRequiredForAction.useIsMfaRequiredFo
349
350
  exports.useRefreshAuth = useRefreshAuth.useRefreshAuth;
350
351
  exports.useWalletPassword = useWalletPassword.useWalletPassword;
351
352
  exports.useGetWalletPassword = useGetWalletPassword.useGetWalletPassword;
353
+ exports.useStepUpAuthentication = useStepUpAuthentication.useStepUpAuthentication;
352
354
  exports.DynamicConnectButton = DynamicConnectButton.DynamicConnectButton;
353
355
  exports.IsBrowser = IsBrowser.IsBrowser;
354
356
  exports.DynamicBridgeWidget = DynamicBridgeWidget.DynamicBridgeWidget;
package/src/index.d.ts CHANGED
@@ -123,7 +123,8 @@ export { FilterAndSortWallets, FilterBridgeChainsName, FilterChain, FilterWallet
123
123
  export {
124
124
  /** @deprecated */
125
125
  DynamicWidgetContextProvider, } from './lib/widgets/DynamicWidget/context';
126
- export { useWalletItemActions, useAuthenticateConnectedUser, useSocialAccounts, useEmbeddedWallet, useEmbeddedWalletAuthenticator, usePasskeyRecovery, useEmbeddedReveal, useIsLoggedIn, useDynamicModals, useMfa, useTokenBalances, useMultichainTokenBalances, useSwitchWallet, useRpcProviders, useRefreshUser, useRefreshAuth, useWalletOptions, useSmartWallets, EmbeddedWalletVersion, useTelegramLogin, useUpgradeEmbeddedWallet, useEVMTransactionSimulation, useSVMTransactionSimulation, useDeleteUserAccount, useDynamicWaas, useGetPasskeys, useDeletePasskey, useRegisterPasskey, useAuthenticatePasskeyMFA, useGetUserMfaMethods, usePromptMfaAuth, useUpgradeToDynamicWaasFlow, useGetMfaToken, useGetWalletPassword, useWalletPassword, useIsMfaRequiredForAction, useWalletDelegation, useWalletBackup, useBackupWallets, isWalletBackedUp, CloudBackupProvider, useExchangeAccounts, } from './lib/utils/hooks';
126
+ export { useWalletItemActions, useAuthenticateConnectedUser, useSocialAccounts, useEmbeddedWallet, useEmbeddedWalletAuthenticator, usePasskeyRecovery, useEmbeddedReveal, useIsLoggedIn, useDynamicModals, useMfa, useTokenBalances, useMultichainTokenBalances, useSwitchWallet, useRpcProviders, useRefreshUser, useRefreshAuth, useWalletOptions, useSmartWallets, EmbeddedWalletVersion, useTelegramLogin, useUpgradeEmbeddedWallet, useEVMTransactionSimulation, useSVMTransactionSimulation, useDeleteUserAccount, useDynamicWaas, useGetPasskeys, useDeletePasskey, useRegisterPasskey, useAuthenticatePasskeyMFA, useGetUserMfaMethods, usePromptMfaAuth, useUpgradeToDynamicWaasFlow, useGetMfaToken, useGetWalletPassword, useWalletPassword, useIsMfaRequiredForAction, useWalletDelegation, useWalletBackup, useBackupWallets, isWalletBackedUp, CloudBackupProvider, useExchangeAccounts, useStepUpAuthentication, } from './lib/utils/hooks';
127
+ export type { StepUpAuthenticationState, UseStepUpAuthenticationParams, UseStepUpAuthenticationReturn, VerifyOtpParams, VerifyWalletParams, } from './lib/utils/hooks';
127
128
  export {
128
129
  /** @deprecated use useOnramp instead */
129
130
  useFunding, } from './lib/utils/hooks/useFunding';
package/src/index.js CHANGED
@@ -182,6 +182,7 @@ export { useIsMfaRequiredForAction } from './lib/utils/hooks/useIsMfaRequiredFor
182
182
  export { useRefreshAuth } from './lib/utils/hooks/useRefreshAuth/useRefreshAuth.js';
183
183
  export { useWalletPassword } from './lib/utils/hooks/useWalletPassword/useWalletPassword.js';
184
184
  export { useGetWalletPassword } from './lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.js';
185
+ export { useStepUpAuthentication } from './lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.js';
185
186
  export { DynamicConnectButton } from './lib/components/DynamicConnectButton/DynamicConnectButton.js';
186
187
  import './lib/components/InlineWidget/InlineWidget.js';
187
188
  export { IsBrowser } from './lib/components/IsBrowser/IsBrowser.js';
@@ -5,6 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
- const LegacySafariCssOverrides = () => (jsxRuntime.jsx("link", { rel: 'stylesheet', href: 'https://app.dynamic.xyz/assets/legacySafari/styles.css' }));
8
+ const LegacySafariCssOverrides = ({ nonce, }) => (jsxRuntime.jsx("link", { nonce: nonce, rel: 'stylesheet', href: 'https://app.dynamic.xyz/assets/legacySafari/styles.css' }));
9
9
 
10
10
  exports.LegacySafariCssOverrides = LegacySafariCssOverrides;
@@ -1,2 +1,6 @@
1
1
  /// <reference types="react" />
2
- export declare const LegacySafariCssOverrides: () => JSX.Element;
2
+ type LegacySafariCssOverridesProps = {
3
+ nonce?: string;
4
+ };
5
+ export declare const LegacySafariCssOverrides: ({ nonce, }: LegacySafariCssOverridesProps) => JSX.Element;
6
+ export {};
@@ -1,6 +1,6 @@
1
1
  'use client'
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
- const LegacySafariCssOverrides = () => (jsx("link", { rel: 'stylesheet', href: 'https://app.dynamic.xyz/assets/legacySafari/styles.css' }));
4
+ const LegacySafariCssOverrides = ({ nonce, }) => (jsx("link", { nonce: nonce, rel: 'stylesheet', href: 'https://app.dynamic.xyz/assets/legacySafari/styles.css' }));
5
5
 
6
6
  export { LegacySafariCssOverrides };
@@ -115,9 +115,9 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
115
115
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
116
116
 
117
117
  const ShadowDOMContext = React__default["default"].createContext({});
118
- const ShadowDOMStyle = () => jsxRuntime.jsx("style", { children: index_shadow });
118
+ const ShadowDOMStyle = ({ nonce }) => (jsxRuntime.jsx("style", { nonce: nonce, children: index_shadow }));
119
119
  const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex, }) => {
120
- const { shadowDOMEnabled: shadowDOMSetting, cssOverrides } = useInternalDynamicContext.useInternalDynamicContext();
120
+ const { cspNonce, shadowDOMEnabled: shadowDOMSetting, cssOverrides, } = useInternalDynamicContext.useInternalDynamicContext();
121
121
  const shadowDOMFlag = utils.isShadowDOMFlagEnabled();
122
122
  const shadowDOMEnabled = shadowDOMFlag && shadowDOMSetting;
123
123
  const [nodeRef, setNodeRef] = React.useState(null);
@@ -127,11 +127,11 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
127
127
  return () => cssOverrides;
128
128
  }
129
129
  else if (cssOverrides && typeof cssOverrides === 'string') {
130
- const StyleElement = () => jsxRuntime.jsx("style", { children: cssOverrides });
130
+ const StyleElement = () => jsxRuntime.jsx("style", { nonce: cspNonce, children: cssOverrides });
131
131
  return StyleElement;
132
132
  }
133
133
  return null;
134
- }, [cssOverrides]);
134
+ }, [cssOverrides, cspNonce]);
135
135
  useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
136
136
  if (nodeRef && shadowDOMEnabled) {
137
137
  try {
@@ -147,10 +147,10 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
147
147
  }, [shadowDOMEnabled, nodeRef, mode]);
148
148
  const shouldRenderStyles = React.useMemo(() => Boolean(Object.keys(index_shadow).length), []);
149
149
  if (!shadowDOMEnabled) {
150
- return (jsxRuntime.jsx(IsBrowser.IsBrowser, { children: jsxRuntime.jsxs("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames.classNames('dynamic-shadow-dom', className), style: { zIndex }, children: [children, shouldRenderStyles && jsxRuntime.jsx(ShadowDOMStyle, {}), utils$1.isLegacySafari() && jsxRuntime.jsx(LegacySafariCssOverrides.LegacySafariCssOverrides, {}), CssOverridesElement && jsxRuntime.jsx(CssOverridesElement, {})] }) }));
150
+ return (jsxRuntime.jsx(IsBrowser.IsBrowser, { children: jsxRuntime.jsxs("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames.classNames('dynamic-shadow-dom', className), style: { zIndex }, children: [children, shouldRenderStyles && jsxRuntime.jsx(ShadowDOMStyle, { nonce: cspNonce }), utils$1.isLegacySafari() && jsxRuntime.jsx(LegacySafariCssOverrides.LegacySafariCssOverrides, { nonce: cspNonce }), CssOverridesElement && jsxRuntime.jsx(CssOverridesElement, {})] }) }));
151
151
  }
152
152
  return (jsxRuntime.jsx(IsBrowser.IsBrowser, { children: jsxRuntime.jsx(ShadowDOMContext.Provider, { value: { shadowRoot }, children: jsxRuntime.jsx("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames.classNames('dynamic-shadow-dom', className), style: { zIndex }, children: shadowRoot &&
153
- reactDom.createPortal(jsxRuntime.jsxs("div", { className: 'dynamic-shadow-dom-content', children: [children, shouldRenderStyles && jsxRuntime.jsx(ShadowDOMStyle, {}), utils$1.isLegacySafari() && jsxRuntime.jsx(LegacySafariCssOverrides.LegacySafariCssOverrides, {}), CssOverridesElement && jsxRuntime.jsx(CssOverridesElement, {})] }), shadowRoot) }) }) }));
153
+ reactDom.createPortal(jsxRuntime.jsxs("div", { className: 'dynamic-shadow-dom-content', children: [children, shouldRenderStyles && jsxRuntime.jsx(ShadowDOMStyle, { nonce: cspNonce }), utils$1.isLegacySafari() && (jsxRuntime.jsx(LegacySafariCssOverrides.LegacySafariCssOverrides, { nonce: cspNonce })), CssOverridesElement && jsxRuntime.jsx(CssOverridesElement, {})] }), shadowRoot) }) }) }));
154
154
  };
155
155
 
156
156
  exports.ShadowDOM = ShadowDOM;
@@ -12,5 +12,8 @@ export type ShadowDOMProps = {
12
12
  mode?: ShadowRootMode;
13
13
  zIndex?: number;
14
14
  };
15
- export declare const ShadowDOMStyle: () => JSX.Element;
15
+ export type ShadowDOMStyleProps = {
16
+ nonce?: string;
17
+ };
18
+ export declare const ShadowDOMStyle: React.FC<ShadowDOMStyleProps>;
16
19
  export declare const ShadowDOM: React.FC<ShadowDOMProps>;
@@ -107,9 +107,9 @@ import { LegacySafariCssOverrides } from '../LegacySafariCssOverrides/LegacySafa
107
107
  import { isShadowDOMFlagEnabled } from './utils.js';
108
108
 
109
109
  const ShadowDOMContext = React__default.createContext({});
110
- const ShadowDOMStyle = () => jsx("style", { children: css_248z });
110
+ const ShadowDOMStyle = ({ nonce }) => (jsx("style", { nonce: nonce, children: css_248z }));
111
111
  const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex, }) => {
112
- const { shadowDOMEnabled: shadowDOMSetting, cssOverrides } = useInternalDynamicContext();
112
+ const { cspNonce, shadowDOMEnabled: shadowDOMSetting, cssOverrides, } = useInternalDynamicContext();
113
113
  const shadowDOMFlag = isShadowDOMFlagEnabled();
114
114
  const shadowDOMEnabled = shadowDOMFlag && shadowDOMSetting;
115
115
  const [nodeRef, setNodeRef] = useState(null);
@@ -119,11 +119,11 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
119
119
  return () => cssOverrides;
120
120
  }
121
121
  else if (cssOverrides && typeof cssOverrides === 'string') {
122
- const StyleElement = () => jsx("style", { children: cssOverrides });
122
+ const StyleElement = () => jsx("style", { nonce: cspNonce, children: cssOverrides });
123
123
  return StyleElement;
124
124
  }
125
125
  return null;
126
- }, [cssOverrides]);
126
+ }, [cssOverrides, cspNonce]);
127
127
  useIsomorphicLayoutEffect(() => {
128
128
  if (nodeRef && shadowDOMEnabled) {
129
129
  try {
@@ -139,10 +139,10 @@ const ShadowDOM = ({ mode = 'open', id, className, children, dataTestId, zIndex,
139
139
  }, [shadowDOMEnabled, nodeRef, mode]);
140
140
  const shouldRenderStyles = useMemo(() => Boolean(Object.keys(css_248z).length), []);
141
141
  if (!shadowDOMEnabled) {
142
- return (jsx(IsBrowser, { children: jsxs("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames('dynamic-shadow-dom', className), style: { zIndex }, children: [children, shouldRenderStyles && jsx(ShadowDOMStyle, {}), isLegacySafari() && jsx(LegacySafariCssOverrides, {}), CssOverridesElement && jsx(CssOverridesElement, {})] }) }));
142
+ return (jsx(IsBrowser, { children: jsxs("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames('dynamic-shadow-dom', className), style: { zIndex }, children: [children, shouldRenderStyles && jsx(ShadowDOMStyle, { nonce: cspNonce }), isLegacySafari() && jsx(LegacySafariCssOverrides, { nonce: cspNonce }), CssOverridesElement && jsx(CssOverridesElement, {})] }) }));
143
143
  }
144
144
  return (jsx(IsBrowser, { children: jsx(ShadowDOMContext.Provider, { value: { shadowRoot }, children: jsx("div", { "data-testid": dataTestId, ref: setNodeRef, id: id, className: classNames('dynamic-shadow-dom', className), style: { zIndex }, children: shadowRoot &&
145
- createPortal(jsxs("div", { className: 'dynamic-shadow-dom-content', children: [children, shouldRenderStyles && jsx(ShadowDOMStyle, {}), isLegacySafari() && jsx(LegacySafariCssOverrides, {}), CssOverridesElement && jsx(CssOverridesElement, {})] }), shadowRoot) }) }) }));
145
+ createPortal(jsxs("div", { className: 'dynamic-shadow-dom-content', children: [children, shouldRenderStyles && jsx(ShadowDOMStyle, { nonce: cspNonce }), isLegacySafari() && (jsx(LegacySafariCssOverrides, { nonce: cspNonce })), CssOverridesElement && jsx(CssOverridesElement, {})] }), shadowRoot) }) }) }));
146
146
  };
147
147
 
148
148
  export { ShadowDOM, ShadowDOMContext, ShadowDOMStyle };
@@ -182,7 +182,7 @@ const DynamicContext = React.createContext(undefined);
182
182
  const InnerDynamicContextProvider = (props) => {
183
183
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
184
184
  const { children, theme, settings: settings$1, locale: locale$1, enableInstrumentation = false, } = props;
185
- const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, defaultPhoneInputIso2, coinbaseWalletPreference, detectNewWalletsForLinking = defaultDynamicSettings.defaultDynamicSettings.detectNewWalletsForLinking, enableConnectOnlyFallback = defaultDynamicSettings.defaultDynamicSettings.enableConnectOnlyFallback, deepLinkPreference: deepLinkPreferenceProp = defaultDynamicSettings.defaultDynamicSettings.deepLinkPreference, bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = defaultDynamicSettings.defaultDynamicSettings.initialAuthenticationMode, debugError = defaultDynamicSettings.defaultDynamicSettings.debugError, displaySiweStatement = defaultDynamicSettings.defaultDynamicSettings.displaySiweStatement, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = defaultDynamicSettings.defaultDynamicSettings.enableVisitTrackingOnConnectOnly, environmentId, walletsFilter, logLevel = defaultDynamicSettings.defaultDynamicSettings.logLevel, mobileExperience, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, siweStatement, shadowDOMEnabled = defaultDynamicSettings.defaultDynamicSettings.shadowDOMEnabled, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = defaultDynamicSettings.defaultDynamicSettings.showLockedWalletView, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, handlers, suppressEndUserConsoleWarning, transactionConfirmation: transactionConfirmationSettings, useMetamaskSdk = defaultDynamicSettings.defaultDynamicSettings.useMetamaskSdk, } = settings$1;
185
+ const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, defaultPhoneInputIso2, coinbaseWalletPreference, detectNewWalletsForLinking = defaultDynamicSettings.defaultDynamicSettings.detectNewWalletsForLinking, enableConnectOnlyFallback = defaultDynamicSettings.defaultDynamicSettings.enableConnectOnlyFallback, deepLinkPreference: deepLinkPreferenceProp = defaultDynamicSettings.defaultDynamicSettings.deepLinkPreference, bridgeChains, cspNonce, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = defaultDynamicSettings.defaultDynamicSettings.initialAuthenticationMode, debugError = defaultDynamicSettings.defaultDynamicSettings.debugError, displaySiweStatement = defaultDynamicSettings.defaultDynamicSettings.displaySiweStatement, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = defaultDynamicSettings.defaultDynamicSettings.enableVisitTrackingOnConnectOnly, environmentId, walletsFilter, logLevel = defaultDynamicSettings.defaultDynamicSettings.logLevel, mobileExperience, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, siweStatement, shadowDOMEnabled = defaultDynamicSettings.defaultDynamicSettings.shadowDOMEnabled, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = defaultDynamicSettings.defaultDynamicSettings.showLockedWalletView, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, handlers, suppressEndUserConsoleWarning, transactionConfirmation: transactionConfirmationSettings, useMetamaskSdk = defaultDynamicSettings.defaultDynamicSettings.useMetamaskSdk, } = settings$1;
186
186
  let { appLogoUrl = defaultDynamicSettings.defaultDynamicSettings.appLogoUrl, appName = defaultDynamicSettings.defaultDynamicSettings.appName, } = settings$1;
187
187
  /**
188
188
  * initialize Storage
@@ -519,6 +519,7 @@ const InnerDynamicContextProvider = (props) => {
519
519
  clearStatesOnBackClick,
520
520
  connectWallet,
521
521
  connectedWallets,
522
+ cspNonce,
522
523
  cssOverrides,
523
524
  customPrivacyPolicy,
524
525
  customTermsOfServices,
@@ -630,6 +631,7 @@ const InnerDynamicContextProvider = (props) => {
630
631
  clearStatesOnBackClick,
631
632
  connectWallet,
632
633
  connectedWallets,
634
+ cspNonce,
633
635
  cssOverrides,
634
636
  customPrivacyPolicy,
635
637
  customTermsOfServices,
@@ -740,7 +742,7 @@ const InnerDynamicContextProvider = (props) => {
740
742
  isBridgeFlow,
741
743
  isMultiWalletEnabled: multiWallet,
742
744
  });
743
- 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, ((_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _v === void 0 ? void 0 : _v.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsxRuntime.jsx(LoadingContext.LoadingContextProvider, { children: jsxRuntime.jsxs(ViewContext.ViewContextProvider, { initialViewType: initialViewType, children: [networkValidationMode === 'always' && jsxRuntime.jsx(UseNetworkValidation.UseNetworkValidation, {}), jsxRuntime.jsx(CaptchaContext.CaptchaContextProvider, { children: jsxRuntime.jsx(AccountExistsContext.AccountExistsContextProvider, { children: jsxRuntime.jsx(WalletContext.WalletContextProvider, { children: jsxRuntime.jsx(VerificationContext.VerificationProvider, { children: jsxRuntime.jsx(PasskeyContext.PasskeyContextProvider, { children: jsxRuntime.jsx(DynamicWidgetContext.DynamicWidgetContextProvider, { children: jsxRuntime.jsx(DynamicBridgeWidgetContext.DynamicBridgeWidgetContextProvider, { children: jsxRuntime.jsx(OnrampContext.OnrampContextProvider, { children: jsxRuntime.jsx(AccessDeniedContext.AccessDeniedContextProvider, { children: jsxRuntime.jsx(SendBalanceContext.SendBalanceContextProvider, { children: jsxRuntime.jsx(WalletGroupContext.WalletGroupContextProvider, { children: jsxRuntime.jsx(UserFieldEditorContext.UserFieldEditorContextProvider, { children: jsxRuntime.jsx(ConnectWithOtpProvider.ConnectWithOtpProvider, { children: jsxRuntime.jsx(PhantomRedirectContext.PhantomRedirectContextProvider, { children: jsxRuntime.jsxs(SocialRedirectContext.SocialRedirectContextProvider, { children: [jsxRuntime.jsx(app.DynamicAuthFlow, {}), jsxRuntime.jsx(OnrampWidget.OnrampWidget, {}), jsxRuntime.jsx(SyncAuthFlow.SyncAuthFlow, {}), jsxRuntime.jsx(WalletConnectorEvents.WalletConnectorEvents, { connectorProps: connectorProps }), confirmationModal, jsxRuntime.jsx(ErrorBoundaryExclude.ErrorBoundaryExclude, { children: children })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
745
+ 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, { cspNonce: cspNonce, customerTheme: parseTheme.parseTheme(theme, ((_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _v === void 0 ? void 0 : _v.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsxRuntime.jsx(LoadingContext.LoadingContextProvider, { children: jsxRuntime.jsxs(ViewContext.ViewContextProvider, { initialViewType: initialViewType, children: [networkValidationMode === 'always' && jsxRuntime.jsx(UseNetworkValidation.UseNetworkValidation, {}), jsxRuntime.jsx(CaptchaContext.CaptchaContextProvider, { children: jsxRuntime.jsx(AccountExistsContext.AccountExistsContextProvider, { children: jsxRuntime.jsx(WalletContext.WalletContextProvider, { children: jsxRuntime.jsx(VerificationContext.VerificationProvider, { children: jsxRuntime.jsx(PasskeyContext.PasskeyContextProvider, { children: jsxRuntime.jsx(DynamicWidgetContext.DynamicWidgetContextProvider, { children: jsxRuntime.jsx(DynamicBridgeWidgetContext.DynamicBridgeWidgetContextProvider, { children: jsxRuntime.jsx(OnrampContext.OnrampContextProvider, { children: jsxRuntime.jsx(AccessDeniedContext.AccessDeniedContextProvider, { children: jsxRuntime.jsx(SendBalanceContext.SendBalanceContextProvider, { children: jsxRuntime.jsx(WalletGroupContext.WalletGroupContextProvider, { children: jsxRuntime.jsx(UserFieldEditorContext.UserFieldEditorContextProvider, { children: jsxRuntime.jsx(ConnectWithOtpProvider.ConnectWithOtpProvider, { children: jsxRuntime.jsx(PhantomRedirectContext.PhantomRedirectContextProvider, { children: jsxRuntime.jsxs(SocialRedirectContext.SocialRedirectContextProvider, { children: [jsxRuntime.jsx(app.DynamicAuthFlow, {}), jsxRuntime.jsx(OnrampWidget.OnrampWidget, {}), jsxRuntime.jsx(SyncAuthFlow.SyncAuthFlow, {}), jsxRuntime.jsx(WalletConnectorEvents.WalletConnectorEvents, { connectorProps: connectorProps }), confirmationModal, jsxRuntime.jsx(ErrorBoundaryExclude.ErrorBoundaryExclude, { children: children })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
744
746
  };
745
747
  /** The context provider you need to have access too all of Dynamic's hooks */
746
748
  const DynamicContextProvider = (props) => {
@@ -178,7 +178,7 @@ const DynamicContext = createContext(undefined);
178
178
  const InnerDynamicContextProvider = (props) => {
179
179
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
180
180
  const { children, theme, settings, locale, enableInstrumentation = false, } = props;
181
- const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, defaultPhoneInputIso2, coinbaseWalletPreference, detectNewWalletsForLinking = defaultDynamicSettings.detectNewWalletsForLinking, enableConnectOnlyFallback = defaultDynamicSettings.enableConnectOnlyFallback, deepLinkPreference: deepLinkPreferenceProp = defaultDynamicSettings.deepLinkPreference, bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = defaultDynamicSettings.initialAuthenticationMode, debugError = defaultDynamicSettings.debugError, displaySiweStatement = defaultDynamicSettings.displaySiweStatement, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = defaultDynamicSettings.enableVisitTrackingOnConnectOnly, environmentId, walletsFilter, logLevel = defaultDynamicSettings.logLevel, mobileExperience, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, siweStatement, shadowDOMEnabled = defaultDynamicSettings.shadowDOMEnabled, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = defaultDynamicSettings.showLockedWalletView, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, handlers, suppressEndUserConsoleWarning, transactionConfirmation: transactionConfirmationSettings, useMetamaskSdk = defaultDynamicSettings.useMetamaskSdk, } = settings;
181
+ const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, defaultPhoneInputIso2, coinbaseWalletPreference, detectNewWalletsForLinking = defaultDynamicSettings.detectNewWalletsForLinking, enableConnectOnlyFallback = defaultDynamicSettings.enableConnectOnlyFallback, deepLinkPreference: deepLinkPreferenceProp = defaultDynamicSettings.deepLinkPreference, bridgeChains, cspNonce, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = defaultDynamicSettings.initialAuthenticationMode, debugError = defaultDynamicSettings.debugError, displaySiweStatement = defaultDynamicSettings.displaySiweStatement, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = defaultDynamicSettings.enableVisitTrackingOnConnectOnly, environmentId, walletsFilter, logLevel = defaultDynamicSettings.logLevel, mobileExperience, notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, siweStatement, shadowDOMEnabled = defaultDynamicSettings.shadowDOMEnabled, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = defaultDynamicSettings.showLockedWalletView, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, handlers, suppressEndUserConsoleWarning, transactionConfirmation: transactionConfirmationSettings, useMetamaskSdk = defaultDynamicSettings.useMetamaskSdk, } = settings;
182
182
  let { appLogoUrl = defaultDynamicSettings.appLogoUrl, appName = defaultDynamicSettings.appName, } = settings;
183
183
  /**
184
184
  * initialize Storage
@@ -515,6 +515,7 @@ const InnerDynamicContextProvider = (props) => {
515
515
  clearStatesOnBackClick,
516
516
  connectWallet,
517
517
  connectedWallets,
518
+ cspNonce,
518
519
  cssOverrides,
519
520
  customPrivacyPolicy,
520
521
  customTermsOfServices,
@@ -626,6 +627,7 @@ const InnerDynamicContextProvider = (props) => {
626
627
  clearStatesOnBackClick,
627
628
  connectWallet,
628
629
  connectedWallets,
630
+ cspNonce,
629
631
  cssOverrides,
630
632
  customPrivacyPolicy,
631
633
  customTermsOfServices,
@@ -736,7 +738,7 @@ const InnerDynamicContextProvider = (props) => {
736
738
  isBridgeFlow,
737
739
  isMultiWalletEnabled: multiWallet,
738
740
  });
739
- return (jsx(I18nextProvider, { i18n: i18nSDKInstance, children: jsx(DynamicContext.Provider, { value: value, children: jsx(WalletBookContextProvider, { walletBook: walletBook, children: jsx(ThemeContextProvider, { customerTheme: parseTheme(theme, ((_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _v === void 0 ? void 0 : _v.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsx(LoadingContextProvider, { children: jsxs(ViewContextProvider, { initialViewType: initialViewType, children: [networkValidationMode === 'always' && jsx(UseNetworkValidation, {}), jsx(CaptchaContextProvider, { children: jsx(AccountExistsContextProvider, { children: jsx(WalletContextProvider, { children: jsx(VerificationProvider, { children: jsx(PasskeyContextProvider, { children: jsx(DynamicWidgetContextProvider, { children: jsx(DynamicBridgeWidgetContextProvider, { children: jsx(OnrampContextProvider, { children: jsx(AccessDeniedContextProvider, { children: jsx(SendBalanceContextProvider, { children: jsx(WalletGroupContextProvider, { children: jsx(UserFieldEditorContextProvider, { children: jsx(ConnectWithOtpProvider, { children: jsx(PhantomRedirectContextProvider, { children: jsxs(SocialRedirectContextProvider, { children: [jsx(DynamicAuthFlow, {}), jsx(OnrampWidget, {}), jsx(SyncAuthFlow, {}), jsx(WalletConnectorEvents, { connectorProps: connectorProps }), confirmationModal, jsx(ErrorBoundaryExclude, { children: children })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
741
+ return (jsx(I18nextProvider, { i18n: i18nSDKInstance, children: jsx(DynamicContext.Provider, { value: value, children: jsx(WalletBookContextProvider, { walletBook: walletBook, children: jsx(ThemeContextProvider, { cspNonce: cspNonce, customerTheme: parseTheme(theme, ((_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design) === null || _v === void 0 ? void 0 : _v.modal) || undefined), designSettings: projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.design, children: jsx(LoadingContextProvider, { children: jsxs(ViewContextProvider, { initialViewType: initialViewType, children: [networkValidationMode === 'always' && jsx(UseNetworkValidation, {}), jsx(CaptchaContextProvider, { children: jsx(AccountExistsContextProvider, { children: jsx(WalletContextProvider, { children: jsx(VerificationProvider, { children: jsx(PasskeyContextProvider, { children: jsx(DynamicWidgetContextProvider, { children: jsx(DynamicBridgeWidgetContextProvider, { children: jsx(OnrampContextProvider, { children: jsx(AccessDeniedContextProvider, { children: jsx(SendBalanceContextProvider, { children: jsx(WalletGroupContextProvider, { children: jsx(UserFieldEditorContextProvider, { children: jsx(ConnectWithOtpProvider, { children: jsx(PhantomRedirectContextProvider, { children: jsxs(SocialRedirectContextProvider, { children: [jsx(DynamicAuthFlow, {}), jsx(OnrampWidget, {}), jsx(SyncAuthFlow, {}), jsx(WalletConnectorEvents, { connectorProps: connectorProps }), confirmationModal, jsx(ErrorBoundaryExclude, { children: children })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) })] }) }) }) }) }) }));
740
742
  };
741
743
  /** The context provider you need to have access too all of Dynamic's hooks */
742
744
  const DynamicContextProvider = (props) => {
@@ -31,6 +31,12 @@ export interface DynamicContextProps {
31
31
  appName?: string;
32
32
  bridgeChains?: ChainsToConnect[];
33
33
  coinbaseWalletPreference?: CoinbaseWalletPreference;
34
+ /**
35
+ * A nonce value for inline `<style>` and `<link>` tags injected by the SDK.
36
+ * Required when using a strict Content Security Policy that disallows `unsafe-inline`.
37
+ * The nonce must match the one specified in the CSP `style-src` directive.
38
+ */
39
+ cspNonce?: string;
34
40
  cssOverrides?: string | JSX.Element;
35
41
  customPrivacyPolicy?: ReactNode;
36
42
  defaultPhoneInputIso2?: CountryIso2;
@@ -45,6 +45,7 @@ export interface IDynamicContext {
45
45
  */
46
46
  connectedWallets: Wallet[];
47
47
  connectWallet: (walletConnector: WalletConnector, getAddressOpts?: GetAddressOpts, options?: ConnectWalletOptions) => Promise<ConnectWalletResult | undefined>;
48
+ cspNonce?: string;
48
49
  cssOverrides?: string | JSX.Element;
49
50
  customPrivacyPolicy?: ReactNode;
50
51
  customTermsOfServices?: ReactNode;
@@ -3,7 +3,7 @@ import { IDynamicContext } from './IDynamicContext';
3
3
  * Allows deprecating specific methods that we should avoid using internally
4
4
  * without deprecating them publicly as well.
5
5
  */
6
- export type IInternalDynamicContext = Omit<IDynamicContext, 'user' | 'cssOverrides' | 'accessDeniedButton' | 'accessDeniedMessagePrimary' | 'accessDeniedMessageSecondary' | 'appLogoUrl' | 'appName' | 'bridgeChains' | 'customPrivacyPolicy' | 'customTermsOfServices' | 'debugError' | 'defaultNumberOfWalletsToShow' | 'defaultPhoneInputIso2' | 'detectNewWalletsForLinking' | 'displaySiweStatement' | 'enableConnectOnlyFallback' | 'events' | 'handlers' | 'mobileExperience' | 'networkValidationMode' | 'newToWeb3WalletChainMap' | 'notInTheListImageUrl' | 'onboardingImageUrl' | 'overrides' | 'policiesConsentInnerComponent' | 'privacyPolicyUrl' | 'recommendedWallets' | 'redirectUrl' | 'shadowDOMEnabled' | 'showLockedWalletView' | 'siweStatement' | 'socialMediaIconUrl' | 'socialMediaLinkText' | 'socialMediaUrl' | 'socialProvidersFilter' | 'termsOfServiceUrl' | 'theme' | 'walletsFilter'> & {
6
+ export type IInternalDynamicContext = Omit<IDynamicContext, 'user' | 'cspNonce' | 'cssOverrides' | 'accessDeniedButton' | 'accessDeniedMessagePrimary' | 'accessDeniedMessageSecondary' | 'appLogoUrl' | 'appName' | 'bridgeChains' | 'customPrivacyPolicy' | 'customTermsOfServices' | 'debugError' | 'defaultNumberOfWalletsToShow' | 'defaultPhoneInputIso2' | 'detectNewWalletsForLinking' | 'displaySiweStatement' | 'enableConnectOnlyFallback' | 'events' | 'handlers' | 'mobileExperience' | 'networkValidationMode' | 'newToWeb3WalletChainMap' | 'notInTheListImageUrl' | 'onboardingImageUrl' | 'overrides' | 'policiesConsentInnerComponent' | 'privacyPolicyUrl' | 'recommendedWallets' | 'redirectUrl' | 'shadowDOMEnabled' | 'showLockedWalletView' | 'siweStatement' | 'socialMediaIconUrl' | 'socialMediaLinkText' | 'socialMediaUrl' | 'socialProvidersFilter' | 'termsOfServiceUrl' | 'theme' | 'walletsFilter'> & {
7
7
  /**
8
8
  * @deprecated please call useOnboardingCompleteUser() OR useUser() instead.
9
9
  * | `useOnboardingCompleteUser` only returns the user if it's not missing KYC or MFA.
@@ -12,6 +12,10 @@ export type IInternalDynamicContext = Omit<IDynamicContext, 'user' | 'cssOverrid
12
12
  * UserProfile.
13
13
  */
14
14
  user: IDynamicContext['user'];
15
+ /**
16
+ * @deprecated please call useDynamicSettings().cspNonce instead
17
+ */
18
+ cspNonce?: IDynamicContext['cspNonce'];
15
19
  /**
16
20
  * @deprecated please call useDynamicSettings().cssOverrides instead
17
21
  */
@@ -20,10 +20,10 @@ var themesData = require('./themesData.cjs');
20
20
  var stylesheetBuilder = require('./utils/stylesheetBuilder/stylesheetBuilder.cjs');
21
21
 
22
22
  const ThemeContext = React.createContext(undefined);
23
- const ThemeContextProvider = ({ customerTheme, designSettings, children }) => {
23
+ const ThemeContextProvider = ({ cspNonce, customerTheme, designSettings, children }) => {
24
24
  const [theme, _setTheme] = React.useState(customerTheme || themesData.getThemeConfig(designSettings === null || designSettings === void 0 ? void 0 : designSettings.modal));
25
- const linkTag = React.useRef(stylesheetBuilder.findOrCreateLinkTag());
26
- const styleTag = React.useRef(stylesheetBuilder.findOrCreateStyleTag());
25
+ const linkTag = React.useRef(stylesheetBuilder.findOrCreateLinkTag(cspNonce));
26
+ const styleTag = React.useRef(stylesheetBuilder.findOrCreateStyleTag(cspNonce));
27
27
  const setTheme = React.useCallback((newTheme) => {
28
28
  _setTheme(newTheme);
29
29
  // SSR won't have document defined, so we can't run this logic in server side
@@ -3,6 +3,7 @@ import { ProjectSettingsDesign } from '@dynamic-labs/sdk-api-core';
3
3
  import { ThemeContextProps, ThemeData } from './types';
4
4
  export declare const ThemeContext: import("react").Context<ThemeContextProps | undefined>;
5
5
  interface ThemeContextProviderProps {
6
+ cspNonce?: string;
6
7
  customerTheme?: ThemeData;
7
8
  designSettings?: ProjectSettingsDesign;
8
9
  }
@@ -16,10 +16,10 @@ import { getThemeConfig, themesData } from './themesData.js';
16
16
  import { findOrCreateLinkTag, findOrCreateStyleTag, buildStylesheet } from './utils/stylesheetBuilder/stylesheetBuilder.js';
17
17
 
18
18
  const ThemeContext = createContext(undefined);
19
- const ThemeContextProvider = ({ customerTheme, designSettings, children }) => {
19
+ const ThemeContextProvider = ({ cspNonce, customerTheme, designSettings, children }) => {
20
20
  const [theme, _setTheme] = useState(customerTheme || getThemeConfig(designSettings === null || designSettings === void 0 ? void 0 : designSettings.modal));
21
- const linkTag = useRef(findOrCreateLinkTag());
22
- const styleTag = useRef(findOrCreateStyleTag());
21
+ const linkTag = useRef(findOrCreateLinkTag(cspNonce));
22
+ const styleTag = useRef(findOrCreateStyleTag(cspNonce));
23
23
  const setTheme = useCallback((newTheme) => {
24
24
  _setTheme(newTheme);
25
25
  // SSR won't have document defined, so we can't run this logic in server side
@@ -17,7 +17,7 @@ require('../../../../utils/constants/values.cjs');
17
17
  require('@dynamic-labs/sdk-api-core');
18
18
  require('../../../../shared/consts/index.cjs');
19
19
 
20
- const findOrCreateLinkTag = () => {
20
+ const findOrCreateLinkTag = (nonce) => {
21
21
  if (isSSR.isSSR())
22
22
  return;
23
23
  const existingStyleTag = document.querySelector('[data-source="dynamic-theme-cdn"]');
@@ -25,12 +25,15 @@ const findOrCreateLinkTag = () => {
25
25
  return existingStyleTag;
26
26
  }
27
27
  const linkTag = document.createElement('link');
28
+ if (nonce) {
29
+ linkTag.nonce = nonce;
30
+ }
28
31
  document.head.append(linkTag);
29
32
  linkTag.dataset.source = 'dynamic-theme-cdn';
30
33
  linkTag.rel = 'stylesheet';
31
34
  return linkTag;
32
35
  };
33
- const findOrCreateStyleTag = () => {
36
+ const findOrCreateStyleTag = (nonce) => {
34
37
  if (isSSR.isSSR())
35
38
  return;
36
39
  const existingStyleTag = document.querySelector('[data-source="dynamic-theme"]');
@@ -38,6 +41,9 @@ const findOrCreateStyleTag = () => {
38
41
  return existingStyleTag;
39
42
  }
40
43
  const styleTag = document.createElement('style');
44
+ if (nonce) {
45
+ styleTag.nonce = nonce;
46
+ }
41
47
  document.head.append(styleTag);
42
48
  styleTag.dataset.source = 'dynamic-theme';
43
49
  return styleTag;
@@ -1,4 +1,4 @@
1
1
  import { ThemeData } from '../../types';
2
- export declare const findOrCreateLinkTag: () => HTMLLinkElement | undefined;
3
- export declare const findOrCreateStyleTag: () => Element | undefined;
2
+ export declare const findOrCreateLinkTag: (nonce?: string) => HTMLLinkElement | undefined;
3
+ export declare const findOrCreateStyleTag: (nonce?: string) => Element | undefined;
4
4
  export declare const buildStylesheet: (theme: ThemeData) => string;
@@ -13,7 +13,7 @@ import '../../../../utils/constants/values.js';
13
13
  import '@dynamic-labs/sdk-api-core';
14
14
  import '../../../../shared/consts/index.js';
15
15
 
16
- const findOrCreateLinkTag = () => {
16
+ const findOrCreateLinkTag = (nonce) => {
17
17
  if (isSSR())
18
18
  return;
19
19
  const existingStyleTag = document.querySelector('[data-source="dynamic-theme-cdn"]');
@@ -21,12 +21,15 @@ const findOrCreateLinkTag = () => {
21
21
  return existingStyleTag;
22
22
  }
23
23
  const linkTag = document.createElement('link');
24
+ if (nonce) {
25
+ linkTag.nonce = nonce;
26
+ }
24
27
  document.head.append(linkTag);
25
28
  linkTag.dataset.source = 'dynamic-theme-cdn';
26
29
  linkTag.rel = 'stylesheet';
27
30
  return linkTag;
28
31
  };
29
- const findOrCreateStyleTag = () => {
32
+ const findOrCreateStyleTag = (nonce) => {
30
33
  if (isSSR())
31
34
  return;
32
35
  const existingStyleTag = document.querySelector('[data-source="dynamic-theme"]');
@@ -34,6 +37,9 @@ const findOrCreateStyleTag = () => {
34
37
  return existingStyleTag;
35
38
  }
36
39
  const styleTag = document.createElement('style');
40
+ if (nonce) {
41
+ styleTag.nonce = nonce;
42
+ }
37
43
  document.head.append(styleTag);
38
44
  styleTag.dataset.source = 'dynamic-theme';
39
45
  return styleTag;