@dynamic-labs/sdk-react-core 4.64.0 → 4.66.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 (77) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +13 -13
  5. package/src/index.cjs +4 -0
  6. package/src/index.d.ts +2 -1
  7. package/src/index.js +2 -0
  8. package/src/lib/Main.cjs +1 -0
  9. package/src/lib/Main.js +1 -0
  10. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.cjs +1 -1
  11. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.d.ts +5 -1
  12. package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.js +1 -1
  13. package/src/lib/components/ShadowDOM/ShadowDOM.cjs +6 -6
  14. package/src/lib/components/ShadowDOM/ShadowDOM.d.ts +4 -1
  15. package/src/lib/components/ShadowDOM/ShadowDOM.js +6 -6
  16. package/src/lib/context/DynamicContext/DynamicContext.cjs +4 -2
  17. package/src/lib/context/DynamicContext/DynamicContext.js +4 -2
  18. package/src/lib/context/DynamicContext/types/DynamicContextProps.d.ts +6 -0
  19. package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +1 -0
  20. package/src/lib/context/DynamicContext/types/IInternalDynamicContext.d.ts +5 -1
  21. package/src/lib/context/ThemeContext/ThemeContext.cjs +3 -3
  22. package/src/lib/context/ThemeContext/ThemeContext.d.ts +1 -0
  23. package/src/lib/context/ThemeContext/ThemeContext.js +3 -3
  24. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.cjs +8 -2
  25. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.d.ts +2 -2
  26. package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.js +8 -2
  27. package/src/lib/data/api/wallets/wallets.cjs +62 -11
  28. package/src/lib/data/api/wallets/wallets.d.ts +1 -0
  29. package/src/lib/data/api/wallets/wallets.js +62 -12
  30. package/src/lib/shared/types/connectionAndSignature.d.ts +2 -1
  31. package/src/lib/shared/types/wallets.d.ts +2 -1
  32. package/src/lib/utils/functions/compareChains/compareChains.cjs +1 -0
  33. package/src/lib/utils/functions/compareChains/compareChains.js +1 -0
  34. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +6 -5
  35. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.d.ts +3 -1
  36. package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +6 -5
  37. package/src/lib/utils/hooks/index.d.ts +3 -0
  38. package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.cjs +4 -1
  39. package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.js +4 -1
  40. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +5 -2
  41. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.d.ts +2 -0
  42. package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +5 -2
  43. package/src/lib/utils/hooks/useSignEip7702Authorization/index.d.ts +1 -0
  44. package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.cjs +162 -0
  45. package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.d.ts +78 -0
  46. package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.js +158 -0
  47. package/src/lib/utils/hooks/useStepUpAuthentication/index.d.ts +2 -0
  48. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.cjs +197 -0
  49. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.d.ts +51 -0
  50. package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.js +193 -0
  51. package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.cjs +3 -1
  52. package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.js +3 -1
  53. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +8 -3
  54. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.d.ts +1 -1
  55. package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +9 -4
  56. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.cjs +53 -1
  57. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.d.ts +6 -0
  58. package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.js +53 -1
  59. package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.cjs +1 -1
  60. package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.js +1 -1
  61. package/src/lib/views/ResetPasswordForSettingsView/ResetPasswordForSettingsView.cjs +5 -21
  62. package/src/lib/views/ResetPasswordForSettingsView/ResetPasswordForSettingsView.js +5 -21
  63. package/src/lib/views/SetupPasswordForWalletCreationView/SetupPasswordForWalletCreationView.cjs +9 -1
  64. package/src/lib/views/SetupPasswordForWalletCreationView/SetupPasswordForWalletCreationView.js +9 -1
  65. package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.cjs +17 -21
  66. package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.js +17 -21
  67. package/src/lib/widgets/DynamicWidget/views/ResetPasswordView/ResetPasswordView.cjs +26 -5
  68. package/src/lib/widgets/DynamicWidget/views/ResetPasswordView/ResetPasswordView.js +26 -5
  69. package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.cjs +3 -2
  70. package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.d.ts +2 -0
  71. package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.js +3 -2
  72. package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.cjs +2 -2
  73. package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.d.ts +2 -0
  74. package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.js +2 -2
  75. package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.cjs +30 -22
  76. package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.d.ts +2 -1
  77. package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.js +30 -22
package/CHANGELOG.md CHANGED
@@ -1,4 +1,33 @@
1
1
 
2
+ ## [4.66.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.65.0...v4.66.0) (2026-03-02)
3
+
4
+
5
+ ### Features
6
+
7
+ * **stellar:** send serialized XDR for transaction signing ([#10548](https://github.com/dynamic-labs/dynamic-auth/issues/10548)) ([3ff6438](https://github.com/dynamic-labs/dynamic-auth/commit/3ff64384e16d5fdb32cd6a3fd144757bf05f4456))
8
+
9
+
10
+ ### Bug Fixes
11
+
12
+ * prevent MFA backup codes screen from being dismissed before acknowledgement ([#10530](https://github.com/dynamic-labs/dynamic-auth/issues/10530)) ([67086f0](https://github.com/dynamic-labs/dynamic-auth/commit/67086f0b4a1302d39853eb2eedcb6f5b8bfca889))
13
+ * **react-native:** add retry when setting items to secure store ([#10576](https://github.com/dynamic-labs/dynamic-auth/issues/10576)) ([22ea162](https://github.com/dynamic-labs/dynamic-auth/commit/22ea162420806a4a67394c99f3691754982a7f1f))
14
+
15
+ ## [4.65.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.64.0...v4.65.0) (2026-02-27)
16
+
17
+
18
+ ### Features
19
+
20
+ * 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))
21
+ * 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))
22
+ * 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))
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **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))
28
+ * **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))
29
+ * 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))
30
+
2
31
  ## [4.64.0](https://github.com/dynamic-labs/dynamic-auth/compare/v4.63.1...v4.64.0) (2026-02-25)
3
32
 
4
33
 
package/package.cjs CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.64.0";
6
+ var version = "4.66.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.282",
10
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.289",
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.64.0";
2
+ var version = "4.66.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.282",
6
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.289",
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.64.0",
3
+ "version": "4.66.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.282",
7
+ "@dynamic-labs-wallet/browser-wallet-client": "0.0.289",
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.64.0",
20
- "@dynamic-labs/iconic": "4.64.0",
21
- "@dynamic-labs/locale": "4.64.0",
22
- "@dynamic-labs/logger": "4.64.0",
23
- "@dynamic-labs/multi-wallet": "4.64.0",
24
- "@dynamic-labs/rpc-providers": "4.64.0",
25
- "@dynamic-labs/store": "4.64.0",
26
- "@dynamic-labs/types": "4.64.0",
27
- "@dynamic-labs/utils": "4.64.0",
28
- "@dynamic-labs/wallet-book": "4.64.0",
29
- "@dynamic-labs/wallet-connector-core": "4.64.0",
19
+ "@dynamic-labs/assert-package-version": "4.66.0",
20
+ "@dynamic-labs/iconic": "4.66.0",
21
+ "@dynamic-labs/locale": "4.66.0",
22
+ "@dynamic-labs/logger": "4.66.0",
23
+ "@dynamic-labs/multi-wallet": "4.66.0",
24
+ "@dynamic-labs/rpc-providers": "4.66.0",
25
+ "@dynamic-labs/store": "4.66.0",
26
+ "@dynamic-labs/types": "4.66.0",
27
+ "@dynamic-labs/utils": "4.66.0",
28
+ "@dynamic-labs/wallet-book": "4.66.0",
29
+ "@dynamic-labs/wallet-connector-core": "4.66.0",
30
30
  "eventemitter3": "5.0.1"
31
31
  },
32
32
  "devDependencies": {
package/src/index.cjs CHANGED
@@ -169,6 +169,7 @@ var useExternalAuth = require('./lib/utils/hooks/useExternalAuth/useExternalAuth
169
169
  var useRefreshUser = require('./lib/utils/hooks/useRefreshUser/useRefreshUser.cjs');
170
170
  var useWalletOptions = require('./lib/utils/hooks/useWalletOptions/useWalletOptions.cjs');
171
171
  var useSyncMfaFlow = require('./lib/utils/hooks/useSyncMfaFlow/useSyncMfaFlow.cjs');
172
+ var useSignEip7702Authorization = require('./lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.cjs');
172
173
  var useTelegramLogin = require('./lib/utils/hooks/useTelegramLogin/useTelegramLogin.cjs');
173
174
  var useUpgradeEmbeddedWallet = require('./lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.cjs');
174
175
  var useDeleteUserAccount = require('./lib/utils/hooks/useDeleteUserAccount/useDeleteUserAccount.cjs');
@@ -186,6 +187,7 @@ var useIsMfaRequiredForAction = require('./lib/utils/hooks/useIsMfaRequiredForAc
186
187
  var useRefreshAuth = require('./lib/utils/hooks/useRefreshAuth/useRefreshAuth.cjs');
187
188
  var useWalletPassword = require('./lib/utils/hooks/useWalletPassword/useWalletPassword.cjs');
188
189
  var useGetWalletPassword = require('./lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.cjs');
190
+ var useStepUpAuthentication = require('./lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.cjs');
189
191
  var DynamicConnectButton = require('./lib/components/DynamicConnectButton/DynamicConnectButton.cjs');
190
192
  require('./lib/components/InlineWidget/InlineWidget.cjs');
191
193
  var IsBrowser = require('./lib/components/IsBrowser/IsBrowser.cjs');
@@ -332,6 +334,7 @@ exports.useExternalAuth = useExternalAuth.useExternalAuth;
332
334
  exports.useRefreshUser = useRefreshUser.useRefreshUser;
333
335
  exports.useWalletOptions = useWalletOptions.useWalletOptions;
334
336
  exports.useSyncMfaFlow = useSyncMfaFlow.useSyncMfaFlow;
337
+ exports.useSignEip7702Authorization = useSignEip7702Authorization.useSignEip7702Authorization;
335
338
  exports.useTelegramLogin = useTelegramLogin.useTelegramLogin;
336
339
  exports.useUpgradeEmbeddedWallet = useUpgradeEmbeddedWallet.useUpgradeEmbeddedWallet;
337
340
  exports.useDeleteUserAccount = useDeleteUserAccount.useDeleteUserAccount;
@@ -349,6 +352,7 @@ exports.useIsMfaRequiredForAction = useIsMfaRequiredForAction.useIsMfaRequiredFo
349
352
  exports.useRefreshAuth = useRefreshAuth.useRefreshAuth;
350
353
  exports.useWalletPassword = useWalletPassword.useWalletPassword;
351
354
  exports.useGetWalletPassword = useGetWalletPassword.useGetWalletPassword;
355
+ exports.useStepUpAuthentication = useStepUpAuthentication.useStepUpAuthentication;
352
356
  exports.DynamicConnectButton = DynamicConnectButton.DynamicConnectButton;
353
357
  exports.IsBrowser = IsBrowser.IsBrowser;
354
358
  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, useSignEip7702Authorization, 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
@@ -165,6 +165,7 @@ export { useExternalAuth } from './lib/utils/hooks/useExternalAuth/useExternalAu
165
165
  export { useRefreshUser } from './lib/utils/hooks/useRefreshUser/useRefreshUser.js';
166
166
  export { useWalletOptions } from './lib/utils/hooks/useWalletOptions/useWalletOptions.js';
167
167
  export { useSyncMfaFlow } from './lib/utils/hooks/useSyncMfaFlow/useSyncMfaFlow.js';
168
+ export { useSignEip7702Authorization } from './lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.js';
168
169
  export { useTelegramLogin } from './lib/utils/hooks/useTelegramLogin/useTelegramLogin.js';
169
170
  export { useUpgradeEmbeddedWallet } from './lib/utils/hooks/useUpgradeEmbeddedWallet/useUpgradeEmbeddedWallet.js';
170
171
  export { useDeleteUserAccount } from './lib/utils/hooks/useDeleteUserAccount/useDeleteUserAccount.js';
@@ -182,6 +183,7 @@ export { useIsMfaRequiredForAction } from './lib/utils/hooks/useIsMfaRequiredFor
182
183
  export { useRefreshAuth } from './lib/utils/hooks/useRefreshAuth/useRefreshAuth.js';
183
184
  export { useWalletPassword } from './lib/utils/hooks/useWalletPassword/useWalletPassword.js';
184
185
  export { useGetWalletPassword } from './lib/utils/hooks/useGetWalletPassword/useGetWalletPassword.js';
186
+ export { useStepUpAuthentication } from './lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.js';
185
187
  export { DynamicConnectButton } from './lib/components/DynamicConnectButton/DynamicConnectButton.js';
186
188
  import './lib/components/InlineWidget/InlineWidget.js';
187
189
  export { IsBrowser } from './lib/components/IsBrowser/IsBrowser.js';
package/src/lib/Main.cjs CHANGED
@@ -116,6 +116,7 @@ const viewsToDisableCloseOnOverlayClick = [
116
116
  'social-redirect-view',
117
117
  'passkey-intro',
118
118
  'setup-password-for-wallet-creation',
119
+ 'mfa-display-backup-codes',
119
120
  ];
120
121
  const Main = () => {
121
122
  const { selectedWalletConnector, linkedWallets, projectSettings, setShowAuthFlow, showAuthFlow, walletConnectorOptions, clearStatesOnBackClick, user, disconnectWallet, connectedWallets, handleLogOut, } = useInternalDynamicContext.useInternalDynamicContext();
package/src/lib/Main.js CHANGED
@@ -112,6 +112,7 @@ const viewsToDisableCloseOnOverlayClick = [
112
112
  'social-redirect-view',
113
113
  'passkey-intro',
114
114
  'setup-password-for-wallet-creation',
115
+ 'mfa-display-backup-codes',
115
116
  ];
116
117
  const Main = () => {
117
118
  const { selectedWalletConnector, linkedWallets, projectSettings, setShowAuthFlow, showAuthFlow, walletConnectorOptions, clearStatesOnBackClick, user, disconnectWallet, connectedWallets, handleLogOut, } = useInternalDynamicContext();
@@ -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;