@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.
- package/CHANGELOG.md +29 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +13 -13
- package/src/index.cjs +4 -0
- package/src/index.d.ts +2 -1
- package/src/index.js +2 -0
- package/src/lib/Main.cjs +1 -0
- package/src/lib/Main.js +1 -0
- package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.cjs +1 -1
- package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.d.ts +5 -1
- package/src/lib/components/LegacySafariCssOverrides/LegacySafariCssOverrides.js +1 -1
- package/src/lib/components/ShadowDOM/ShadowDOM.cjs +6 -6
- package/src/lib/components/ShadowDOM/ShadowDOM.d.ts +4 -1
- package/src/lib/components/ShadowDOM/ShadowDOM.js +6 -6
- package/src/lib/context/DynamicContext/DynamicContext.cjs +4 -2
- package/src/lib/context/DynamicContext/DynamicContext.js +4 -2
- package/src/lib/context/DynamicContext/types/DynamicContextProps.d.ts +6 -0
- package/src/lib/context/DynamicContext/types/IDynamicContext.d.ts +1 -0
- package/src/lib/context/DynamicContext/types/IInternalDynamicContext.d.ts +5 -1
- package/src/lib/context/ThemeContext/ThemeContext.cjs +3 -3
- package/src/lib/context/ThemeContext/ThemeContext.d.ts +1 -0
- package/src/lib/context/ThemeContext/ThemeContext.js +3 -3
- package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.cjs +8 -2
- package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.d.ts +2 -2
- package/src/lib/context/ThemeContext/utils/stylesheetBuilder/stylesheetBuilder.js +8 -2
- package/src/lib/data/api/wallets/wallets.cjs +62 -11
- package/src/lib/data/api/wallets/wallets.d.ts +1 -0
- package/src/lib/data/api/wallets/wallets.js +62 -12
- package/src/lib/shared/types/connectionAndSignature.d.ts +2 -1
- package/src/lib/shared/types/wallets.d.ts +2 -1
- package/src/lib/utils/functions/compareChains/compareChains.cjs +1 -0
- package/src/lib/utils/functions/compareChains/compareChains.js +1 -0
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.cjs +6 -5
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.d.ts +3 -1
- package/src/lib/utils/hooks/authenticationHooks/useConnectAndSign/useConnectAndSign.js +6 -5
- package/src/lib/utils/hooks/index.d.ts +3 -0
- package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.cjs +4 -1
- package/src/lib/utils/hooks/useClientSessionKeys/useClientSessionKeys.js +4 -1
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.cjs +5 -2
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.d.ts +2 -0
- package/src/lib/utils/hooks/useDynamicWaas/useDynamicWaas.js +5 -2
- package/src/lib/utils/hooks/useSignEip7702Authorization/index.d.ts +1 -0
- package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.cjs +162 -0
- package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.d.ts +78 -0
- package/src/lib/utils/hooks/useSignEip7702Authorization/useSignEip7702Authorization.js +158 -0
- package/src/lib/utils/hooks/useStepUpAuthentication/index.d.ts +2 -0
- package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.cjs +197 -0
- package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.d.ts +51 -0
- package/src/lib/utils/hooks/useStepUpAuthentication/useStepUpAuthentication.js +193 -0
- package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.cjs +3 -1
- package/src/lib/utils/hooks/useSyncDynamicWaas/useSyncDynamicWaas.js +3 -1
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.cjs +8 -3
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.d.ts +1 -1
- package/src/lib/utils/hooks/useVerifyWallet/useVerifyWallet.js +9 -4
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.cjs +53 -1
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.d.ts +6 -0
- package/src/lib/utils/hooks/useWalletPassword/useWalletPassword.js +53 -1
- package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.cjs +1 -1
- package/src/lib/views/MfaDisplayBackupCodesView/MfaDisplayBackupCodesView.js +1 -1
- package/src/lib/views/ResetPasswordForSettingsView/ResetPasswordForSettingsView.cjs +5 -21
- package/src/lib/views/ResetPasswordForSettingsView/ResetPasswordForSettingsView.js +5 -21
- package/src/lib/views/SetupPasswordForWalletCreationView/SetupPasswordForWalletCreationView.cjs +9 -1
- package/src/lib/views/SetupPasswordForWalletCreationView/SetupPasswordForWalletCreationView.js +9 -1
- package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.cjs +17 -21
- package/src/lib/widgets/DynamicWidget/views/AccountAndSecuritySettingsView/MfaSection/MfaSection.js +17 -21
- package/src/lib/widgets/DynamicWidget/views/ResetPasswordView/ResetPasswordView.cjs +26 -5
- package/src/lib/widgets/DynamicWidget/views/ResetPasswordView/ResetPasswordView.js +26 -5
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.cjs +3 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.d.ts +2 -0
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordConfirmView/SetupPasswordConfirmView.js +3 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.d.ts +2 -0
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordKnowledgeCheckView/SetupPasswordKnowledgeCheckView.js +2 -2
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.cjs +30 -22
- package/src/lib/widgets/DynamicWidget/views/SetupPasswordView/SetupPasswordView.d.ts +2 -1
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
20
|
-
"@dynamic-labs/iconic": "4.
|
|
21
|
-
"@dynamic-labs/locale": "4.
|
|
22
|
-
"@dynamic-labs/logger": "4.
|
|
23
|
-
"@dynamic-labs/multi-wallet": "4.
|
|
24
|
-
"@dynamic-labs/rpc-providers": "4.
|
|
25
|
-
"@dynamic-labs/store": "4.
|
|
26
|
-
"@dynamic-labs/types": "4.
|
|
27
|
-
"@dynamic-labs/utils": "4.
|
|
28
|
-
"@dynamic-labs/wallet-book": "4.
|
|
29
|
-
"@dynamic-labs/wallet-connector-core": "4.
|
|
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
|
-
|
|
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
|
|
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;
|