@dynamic-labs/sdk-react-core 2.1.0-alpha.30 → 2.1.0-alpha.32

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 (29) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +13 -13
  5. package/src/lib/components/SyncAuthFlow/SyncAuthFlow.cjs +2 -1
  6. package/src/lib/components/SyncAuthFlow/SyncAuthFlow.js +2 -1
  7. package/src/lib/context/DynamicContext/DynamicContext.cjs +6 -9
  8. package/src/lib/context/DynamicContext/DynamicContext.d.ts +1 -0
  9. package/src/lib/context/DynamicContext/DynamicContext.js +6 -9
  10. package/src/lib/context/DynamicContext/types/index.d.ts +2 -3
  11. package/src/lib/context/PasskeyContext/PasskeyContext.cjs +3 -5
  12. package/src/lib/context/PasskeyContext/PasskeyContext.js +3 -5
  13. package/src/lib/shared/types/dynamicHandlers.d.ts +13 -0
  14. package/src/lib/utils/hooks/index.d.ts +1 -0
  15. package/src/lib/utils/hooks/useSyncOnboardingFlow/index.d.ts +1 -0
  16. package/src/lib/utils/hooks/useSyncOnboardingFlow/useSyncOnboardingFlow.cjs +190 -0
  17. package/src/lib/utils/hooks/useSyncOnboardingFlow/useSyncOnboardingFlow.d.ts +1 -0
  18. package/src/lib/utils/hooks/useSyncOnboardingFlow/useSyncOnboardingFlow.js +186 -0
  19. package/src/lib/utils/hooks/useUserAuth/useUserAuth.cjs +10 -31
  20. package/src/lib/utils/hooks/useUserAuth/useUserAuth.d.ts +5 -1
  21. package/src/lib/utils/hooks/useUserAuth/useUserAuth.js +10 -31
  22. package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.cjs +9 -2
  23. package/src/lib/views/EmbeddedReveal/utils/turnkeyExport/turnkeyExport.js +9 -2
  24. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.cjs +4 -6
  25. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedAuthFlow/DynamicEmbeddedAuthFlow.js +4 -6
  26. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedWidget.cjs +3 -85
  27. package/src/lib/widgets/DynamicEmbeddedWidget/DynamicEmbeddedWidget.js +3 -85
  28. package/src/lib/widgets/DynamicWidget/DynamicWidget.cjs +1 -7
  29. package/src/lib/widgets/DynamicWidget/DynamicWidget.js +2 -8
package/CHANGELOG.md CHANGED
@@ -1,4 +1,30 @@
1
1
 
2
+ ## [2.1.0-alpha.32](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.31...v2.1.0-alpha.32) (2024-06-04)
3
+
4
+
5
+ ### Features
6
+
7
+ * favor base mainnet when using coinbase sdk ([#5834](https://github.com/dynamic-labs/DynamicAuth/issues/5834)) ([fee5294](https://github.com/dynamic-labs/DynamicAuth/commit/fee529461e6b033938d3ec044c139f5efcb24f6d))
8
+ * open OKX deep link for Bitcoin ([#5818](https://github.com/dynamic-labs/DynamicAuth/issues/5818)) ([c33e93c](https://github.com/dynamic-labs/DynamicAuth/commit/c33e93c81b384d8cd91b3bd0414dd9ea669405c4))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * change Bitget Wallet to Bitget ([#5824](https://github.com/dynamic-labs/DynamicAuth/issues/5824)) ([23b8813](https://github.com/dynamic-labs/DynamicAuth/commit/23b8813e233be07392f5a3e283226b238b9fd99b))
14
+ * coinbase isInstalled ([#5821](https://github.com/dynamic-labs/DynamicAuth/issues/5821)) ([d0e5a37](https://github.com/dynamic-labs/DynamicAuth/commit/d0e5a37c6dd0cb6b85a5704767c93d495aa22854))
15
+ * filter window.solana in solProviderHelper if no extensionLocators are set ([#5819](https://github.com/dynamic-labs/DynamicAuth/issues/5819)) ([ca098ad](https://github.com/dynamic-labs/DynamicAuth/commit/ca098adb787365f9969c1a1f853d3c65ddd40d54))
16
+ * only send ordinal address if only one address retrieved from btc wallet ([#5817](https://github.com/dynamic-labs/DynamicAuth/issues/5817)) ([d54cef4](https://github.com/dynamic-labs/DynamicAuth/commit/d54cef424368b804fde0a4e607fefce22877a304))
17
+
18
+ ## [2.1.0-alpha.31](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.30...v2.1.0-alpha.31) (2024-05-31)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * export solana private keys in the correct format ([#5809](https://github.com/dynamic-labs/DynamicAuth/issues/5809)) ([08ac1f8](https://github.com/dynamic-labs/DynamicAuth/commit/08ac1f87bb02ad07fd1fc1f544fdcc64ebe635b8))
24
+ * magiceden evm network switching ([#5800](https://github.com/dynamic-labs/DynamicAuth/issues/5800)) ([9b86797](https://github.com/dynamic-labs/DynamicAuth/commit/9b8679735f3db4b33bb57409c3a69adf2beb82aa))
25
+ * pass all signing inputs to createPsbtOptions ([#5798](https://github.com/dynamic-labs/DynamicAuth/issues/5798)) ([628ad4f](https://github.com/dynamic-labs/DynamicAuth/commit/628ad4f8c161496a0610ecbc3052735f8ceae98d))
26
+ * trigger onboarding async ([#5805](https://github.com/dynamic-labs/DynamicAuth/issues/5805)) ([2c1f98c](https://github.com/dynamic-labs/DynamicAuth/commit/2c1f98c0d91422f75e2d6d32ea4a27c2bc8d8376))
27
+
2
28
  ## [2.1.0-alpha.30](https://github.com/dynamic-labs/DynamicAuth/compare/v2.1.0-alpha.29...v2.1.0-alpha.30) (2024-05-31)
3
29
 
4
30
 
package/package.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "2.1.0-alpha.30";
6
+ var version = "2.1.0-alpha.32";
7
7
  var dependencies = {
8
8
  "@dynamic-labs/sdk-api-core": "0.0.453",
9
9
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- var version = "2.1.0-alpha.30";
2
+ var version = "2.1.0-alpha.32";
3
3
  var dependencies = {
4
4
  "@dynamic-labs/sdk-api-core": "0.0.453",
5
5
  "@hcaptcha/react-hcaptcha": "1.4.4",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/sdk-react-core",
3
- "version": "2.1.0-alpha.30",
3
+ "version": "2.1.0-alpha.32",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/dynamic-labs/dynamic-auth.git",
@@ -17,18 +17,18 @@
17
17
  "react-i18next": "13.5.0",
18
18
  "yup": "0.32.11",
19
19
  "react-international-phone": "4.2.5",
20
- "@dynamic-labs/iconic": "2.1.0-alpha.30",
21
- "@dynamic-labs/logger": "2.1.0-alpha.30",
22
- "@dynamic-labs/multi-wallet": "2.1.0-alpha.30",
23
- "@dynamic-labs/rpc-provider-ethereum": "2.1.0-alpha.30",
24
- "@dynamic-labs/rpc-provider-solana": "2.1.0-alpha.30",
25
- "@dynamic-labs/rpc-providers": "2.1.0-alpha.30",
26
- "@dynamic-labs/store": "2.1.0-alpha.30",
27
- "@dynamic-labs/types": "2.1.0-alpha.30",
28
- "@dynamic-labs/utils": "2.1.0-alpha.30",
29
- "@dynamic-labs/viem-utils": "2.1.0-alpha.30",
30
- "@dynamic-labs/wallet-book": "2.1.0-alpha.30",
31
- "@dynamic-labs/wallet-connector-core": "2.1.0-alpha.30",
20
+ "@dynamic-labs/iconic": "2.1.0-alpha.32",
21
+ "@dynamic-labs/logger": "2.1.0-alpha.32",
22
+ "@dynamic-labs/multi-wallet": "2.1.0-alpha.32",
23
+ "@dynamic-labs/rpc-provider-ethereum": "2.1.0-alpha.32",
24
+ "@dynamic-labs/rpc-provider-solana": "2.1.0-alpha.32",
25
+ "@dynamic-labs/rpc-providers": "2.1.0-alpha.32",
26
+ "@dynamic-labs/store": "2.1.0-alpha.32",
27
+ "@dynamic-labs/types": "2.1.0-alpha.32",
28
+ "@dynamic-labs/utils": "2.1.0-alpha.32",
29
+ "@dynamic-labs/viem-utils": "2.1.0-alpha.32",
30
+ "@dynamic-labs/wallet-book": "2.1.0-alpha.32",
31
+ "@dynamic-labs/wallet-connector-core": "2.1.0-alpha.32",
32
32
  "eventemitter3": "5.0.1"
33
33
  },
34
34
  "devDependencies": {
@@ -77,10 +77,11 @@ require('../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
77
77
  require('../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
78
78
  require('../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
79
79
  var useSyncEmbeddedWalletFlow = require('../../utils/hooks/useSyncEmbeddedWalletFlow/useSyncEmbeddedWalletFlow.cjs');
80
+ var useSyncOnboardingFlow = require('../../utils/hooks/useSyncOnboardingFlow/useSyncOnboardingFlow.cjs');
80
81
 
81
82
  const SyncAuthFlow = () => {
83
+ useSyncOnboardingFlow.useSyncOnboardingFlow();
82
84
  useSyncEmbeddedWalletFlow.useSyncEmbeddedWalletFlow();
83
- // TODO: add useSyncOnboardingFlow here
84
85
  return null;
85
86
  };
86
87
 
@@ -73,10 +73,11 @@ import '../../widgets/DynamicWidget/context/DynamicWidgetContext.js';
73
73
  import '../../views/TransactionConfirmationView/helpers/transactionErrorMessage.js';
74
74
  import '../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js';
75
75
  import { useSyncEmbeddedWalletFlow } from '../../utils/hooks/useSyncEmbeddedWalletFlow/useSyncEmbeddedWalletFlow.js';
76
+ import { useSyncOnboardingFlow } from '../../utils/hooks/useSyncOnboardingFlow/useSyncOnboardingFlow.js';
76
77
 
77
78
  const SyncAuthFlow = () => {
79
+ useSyncOnboardingFlow();
78
80
  useSyncEmbeddedWalletFlow();
79
- // TODO: add useSyncOnboardingFlow here
80
81
  return null;
81
82
  };
82
83
 
@@ -138,7 +138,7 @@ const DynamicContext = React.createContext(undefined);
138
138
  /** The context provider itself we only use internally */
139
139
  const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, locale: locale$1, }) => {
140
140
  var _a, _b, _c, _d, _e, _f;
141
- const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, coinbaseWalletPreference, enableConnectOnlyFallback = false, deepLinkPreference: deepLinkPreferenceProp = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, hideEmbeddedWalletTransactionUIs, handlers, } = settings$1;
141
+ const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, coinbaseWalletPreference, enableConnectOnlyFallback = false, deepLinkPreference: deepLinkPreferenceProp = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = values.DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, hideEmbeddedWalletTransactionUIs, handlers, headless = false, } = settings$1;
142
142
  localStorage.LocalStorage.setSuffix(settings$1.localStorageSuffix);
143
143
  /**
144
144
  * initialize global store
@@ -247,9 +247,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
247
247
  const [requiredWalletsConnected, setRequiredWalletsConnected] = React.useState(false);
248
248
  const isUserAuthenticated = Boolean(authMode === 'connect-and-sign' ? user : requiredWalletsConnected);
249
249
  const isRenderingEmbeddedAuthFlow = React.useRef(false);
250
- // we need to know when the widget has finished loadingbefore calling the auth flow
251
- // or it may cause issues with the embedded widget version showing a modal twice
252
- const [dynamicWidgetHasLoaded, setDynamicWidgetHasLoaded] = React.useState(false);
253
250
  const [showAuthFlow, setShowAuthFlow] = useShowAuthFlow.useShowAuthFlow({
254
251
  isAuthenticated: isUserAuthenticated,
255
252
  isMultiWalletEnabled: multiWallet,
@@ -449,7 +446,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
449
446
  desktopUri,
450
447
  disconnectWallet,
451
448
  displaySiweStatement,
452
- dynamicWidgetHasLoaded,
453
449
  enableConnectOnlyFallback,
454
450
  environmentId,
455
451
  events,
@@ -458,6 +454,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
458
454
  handleLogOut,
459
455
  handleUnlinkWallet: authMode === 'connect-only' ? disconnectWallet : handleUnlinkWallet,
460
456
  handlers,
457
+ headless,
461
458
  i18nSDKInstance,
462
459
  isAuthenticated,
463
460
  isBridgeFlow,
@@ -504,7 +501,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
504
501
  setCallback,
505
502
  setDefaultTabIndex,
506
503
  setDesktopUri,
507
- setDynamicWidgetHasLoaded,
508
504
  setIsSingleWalletAccount,
509
505
  setLegacyIsVerifying,
510
506
  setLogInWithEmail,
@@ -549,8 +545,10 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
549
545
  accessDeniedMessagePrimary,
550
546
  accessDeniedMessageSecondary,
551
547
  accountSwitchState,
548
+ handlers,
552
549
  appLogoUrl,
553
550
  appName,
551
+ defaultTabIndex,
554
552
  authMode,
555
553
  authorizationViewDisplayOrder,
556
554
  awaitingSignatureState,
@@ -566,11 +564,9 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
566
564
  customTermsOfServices,
567
565
  debugError,
568
566
  defaultNumberOfWalletsToShow,
569
- defaultTabIndex,
570
567
  desktopUri,
571
568
  disconnectWallet,
572
569
  displaySiweStatement,
573
- dynamicWidgetHasLoaded,
574
570
  enableConnectOnlyFallback,
575
571
  environmentId,
576
572
  events,
@@ -579,6 +575,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
579
575
  handleLogOut,
580
576
  handleUnlinkWallet,
581
577
  handlers,
578
+ headless,
582
579
  i18nSDKInstance,
583
580
  isAuthenticated,
584
581
  isBridgeFlow,
@@ -586,6 +583,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
586
583
  isSingleWalletAccount,
587
584
  legacyIsVerifying,
588
585
  user,
586
+ unauthenticatedUser,
589
587
  linkedOrConnectedWallets,
590
588
  loadingNetwork,
591
589
  loginWithEmail,
@@ -645,7 +643,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings: settings$1, lo
645
643
  termsOfServiceUrl,
646
644
  theme,
647
645
  toolkitEnabled,
648
- unauthenticatedUser,
649
646
  walletConnectorOptions,
650
647
  walletUiUtils,
651
648
  walletsFilter,
@@ -49,6 +49,7 @@ export interface DynamicContextProps {
49
49
  */
50
50
  flowNetwork?: 'testnet' | 'mainnet';
51
51
  handlers?: DynamicHandlers;
52
+ headless?: boolean;
52
53
  hideEmbeddedWalletTransactionUIs?: boolean;
53
54
  initialAuthenticationMode?: AuthModeType;
54
55
  localStorageSuffix?: string;
@@ -134,7 +134,7 @@ const DynamicContext = createContext(undefined);
134
134
  /** The context provider itself we only use internally */
135
135
  const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) => {
136
136
  var _a, _b, _c, _d, _e, _f;
137
- const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, coinbaseWalletPreference, enableConnectOnlyFallback = false, deepLinkPreference: deepLinkPreferenceProp = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, hideEmbeddedWalletTransactionUIs, handlers, } = settings;
137
+ const { accessDeniedMessagePrimary, accessDeniedMessageSecondary, accessDeniedButton, apiBaseUrl, coinbaseWalletPreference, enableConnectOnlyFallback = false, deepLinkPreference: deepLinkPreferenceProp = 'native', bridgeChains, cssOverrides, defaultNumberOfWalletsToShow = DEFAULT_NUMBER_OF_WALLETS_TO_SHOW, flowNetwork, initialAuthenticationMode = 'connect-and-sign', debugError = false, displaySiweStatement = true, newToWeb3WalletChainMap, enableVisitTrackingOnConnectOnly = true, environmentId, walletsFilter, logLevel = 'WARN', mobileExperience = 'in-app-browser', notInTheListImageUrl, onboardingImageUrl, policiesConsentInnerComponent, customPrivacyPolicy, privacyPolicyUrl, signWithEmailWalletName, socialMediaLinkText, socialMediaIconUrl, socialMediaUrl, customTermsOfServices, termsOfServiceUrl, toolkitEnabled, siweStatement, shadowDOMEnabled = true, walletConnectors: walletConnectorsProp, socialProvidersFilter, showLockedWalletView = false, walletConnectPreferredChains, walletConnectorExtensions, recommendedWallets, hideEmbeddedWalletTransactionUIs, handlers, headless = false, } = settings;
138
138
  LocalStorage.setSuffix(settings.localStorageSuffix);
139
139
  /**
140
140
  * initialize global store
@@ -243,9 +243,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
243
243
  const [requiredWalletsConnected, setRequiredWalletsConnected] = useState(false);
244
244
  const isUserAuthenticated = Boolean(authMode === 'connect-and-sign' ? user : requiredWalletsConnected);
245
245
  const isRenderingEmbeddedAuthFlow = useRef(false);
246
- // we need to know when the widget has finished loadingbefore calling the auth flow
247
- // or it may cause issues with the embedded widget version showing a modal twice
248
- const [dynamicWidgetHasLoaded, setDynamicWidgetHasLoaded] = useState(false);
249
246
  const [showAuthFlow, setShowAuthFlow] = useShowAuthFlow({
250
247
  isAuthenticated: isUserAuthenticated,
251
248
  isMultiWalletEnabled: multiWallet,
@@ -445,7 +442,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
445
442
  desktopUri,
446
443
  disconnectWallet,
447
444
  displaySiweStatement,
448
- dynamicWidgetHasLoaded,
449
445
  enableConnectOnlyFallback,
450
446
  environmentId,
451
447
  events,
@@ -454,6 +450,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
454
450
  handleLogOut,
455
451
  handleUnlinkWallet: authMode === 'connect-only' ? disconnectWallet : handleUnlinkWallet,
456
452
  handlers,
453
+ headless,
457
454
  i18nSDKInstance,
458
455
  isAuthenticated,
459
456
  isBridgeFlow,
@@ -500,7 +497,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
500
497
  setCallback,
501
498
  setDefaultTabIndex,
502
499
  setDesktopUri,
503
- setDynamicWidgetHasLoaded,
504
500
  setIsSingleWalletAccount,
505
501
  setLegacyIsVerifying,
506
502
  setLogInWithEmail,
@@ -545,8 +541,10 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
545
541
  accessDeniedMessagePrimary,
546
542
  accessDeniedMessageSecondary,
547
543
  accountSwitchState,
544
+ handlers,
548
545
  appLogoUrl,
549
546
  appName,
547
+ defaultTabIndex,
550
548
  authMode,
551
549
  authorizationViewDisplayOrder,
552
550
  awaitingSignatureState,
@@ -562,11 +560,9 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
562
560
  customTermsOfServices,
563
561
  debugError,
564
562
  defaultNumberOfWalletsToShow,
565
- defaultTabIndex,
566
563
  desktopUri,
567
564
  disconnectWallet,
568
565
  displaySiweStatement,
569
- dynamicWidgetHasLoaded,
570
566
  enableConnectOnlyFallback,
571
567
  environmentId,
572
568
  events,
@@ -575,6 +571,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
575
571
  handleLogOut,
576
572
  handleUnlinkWallet,
577
573
  handlers,
574
+ headless,
578
575
  i18nSDKInstance,
579
576
  isAuthenticated,
580
577
  isBridgeFlow,
@@ -582,6 +579,7 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
582
579
  isSingleWalletAccount,
583
580
  legacyIsVerifying,
584
581
  user,
582
+ unauthenticatedUser,
585
583
  linkedOrConnectedWallets,
586
584
  loadingNetwork,
587
585
  loginWithEmail,
@@ -641,7 +639,6 @@ const InnerDynamicContextProvider = ({ children, theme, settings, locale, }) =>
641
639
  termsOfServiceUrl,
642
640
  theme,
643
641
  toolkitEnabled,
644
- unauthenticatedUser,
645
642
  walletConnectorOptions,
646
643
  walletUiUtils,
647
644
  walletsFilter,
@@ -83,8 +83,6 @@ export interface IDynamicContext {
83
83
  desktopUri: string;
84
84
  disconnectWallet: (walletId: string) => void;
85
85
  displaySiweStatement: boolean;
86
- /** Tracks wether the dynamic widget or embedded widget has rendered */
87
- dynamicWidgetHasLoaded: boolean;
88
86
  enableConnectOnlyFallback?: boolean;
89
87
  environmentId: string;
90
88
  events?: DynamicEventsCallbacks;
@@ -93,6 +91,8 @@ export interface IDynamicContext {
93
91
  handleLogOut: () => Promise<void>;
94
92
  handleUnlinkWallet: (walletId: string) => Promise<void> | void;
95
93
  handlers?: DynamicHandlers;
94
+ /** Flag for customer to set when using dynamic fully headless */
95
+ headless?: boolean;
96
96
  isAuthenticated: boolean;
97
97
  isBridgeFlow: boolean;
98
98
  isProjectSettingsLoading: boolean;
@@ -145,7 +145,6 @@ export interface IDynamicContext {
145
145
  setBridgeOnboardingCompleted: (value: boolean | ((val: boolean) => boolean)) => void;
146
146
  setCallback: SetCallbackType;
147
147
  setDesktopUri: Dispatch<SetStateAction<string>>;
148
- setDynamicWidgetHasLoaded: Dispatch<SetStateAction<boolean>>;
149
148
  setIsSingleWalletAccount: Dispatch<SetStateAction<boolean>>;
150
149
  /** Legacy setter for legacyIsVerifying
151
150
  * @deprecated Should be removed asap.
@@ -25,7 +25,6 @@ var useInternalDynamicContext = require('../DynamicContext/useDynamicContext/use
25
25
  require('../CaptchaContext/CaptchaContext.cjs');
26
26
  require('../ErrorContext/ErrorContext.cjs');
27
27
  require('@dynamic-labs/multi-wallet');
28
- var getMinAuthToken = require('../../utils/functions/getMinAuthToken/getMinAuthToken.cjs');
29
28
  require('react-international-phone');
30
29
  require('viem');
31
30
  require('viem/chains');
@@ -89,7 +88,7 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
89
88
  var _a, _b, _c, _d, _e, _f, _g, _h;
90
89
  const { userHasEmbeddedWallet } = useEmbeddedWallet.useEmbeddedWallet();
91
90
  const { isTurnkeyWallet, isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail, } = useIsTurnkeyWallet.useIsTurnkeyWallet();
92
- const { environmentId, projectSettings } = useInternalDynamicContext.useInternalDynamicContext();
91
+ const { environmentId, projectSettings, user } = useInternalDynamicContext.useInternalDynamicContext();
93
92
  // state for when passkey list needs to re-render
94
93
  const [passkeyEdited, setPasskeyEdited] = React.useState(false);
95
94
  // states to pass into rename passkey popup
@@ -121,7 +120,6 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
121
120
  isTurnkeyWalletWithoutAuthenticator,
122
121
  hasRecoveryEmail,
123
122
  ]);
124
- const userJwt = getMinAuthToken.getMinAuthToken();
125
123
  // It fetches user passkeys if user has embedded wallet
126
124
  const getUserPasskeysResult = usePromise.usePromise(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
127
125
  const data = yield embeddedWallets.getUserPasskeys({
@@ -129,8 +127,8 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
129
127
  });
130
128
  return data.passkeys;
131
129
  }), {
132
- deps: [environmentId, userJwt, userHasEmbeddedWallet(), passkeyEdited],
133
- enabled: Boolean(environmentId && userJwt && userHasEmbeddedWallet()),
130
+ deps: [environmentId, user, userHasEmbeddedWallet(), passkeyEdited],
131
+ enabled: Boolean(environmentId && user && userHasEmbeddedWallet()),
134
132
  });
135
133
  // Returns true if user has passkeys for current origin
136
134
  const userHasPasskeysForCurrentOrigin = React.useMemo(() => {
@@ -21,7 +21,6 @@ import { useInternalDynamicContext } from '../DynamicContext/useDynamicContext/u
21
21
  import '../CaptchaContext/CaptchaContext.js';
22
22
  import '../ErrorContext/ErrorContext.js';
23
23
  import '@dynamic-labs/multi-wallet';
24
- import { getMinAuthToken } from '../../utils/functions/getMinAuthToken/getMinAuthToken.js';
25
24
  import 'react-international-phone';
26
25
  import 'viem';
27
26
  import 'viem/chains';
@@ -85,7 +84,7 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
85
84
  var _a, _b, _c, _d, _e, _f, _g, _h;
86
85
  const { userHasEmbeddedWallet } = useEmbeddedWallet();
87
86
  const { isTurnkeyWallet, isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail, } = useIsTurnkeyWallet();
88
- const { environmentId, projectSettings } = useInternalDynamicContext();
87
+ const { environmentId, projectSettings, user } = useInternalDynamicContext();
89
88
  // state for when passkey list needs to re-render
90
89
  const [passkeyEdited, setPasskeyEdited] = useState(false);
91
90
  // states to pass into rename passkey popup
@@ -117,7 +116,6 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
117
116
  isTurnkeyWalletWithoutAuthenticator,
118
117
  hasRecoveryEmail,
119
118
  ]);
120
- const userJwt = getMinAuthToken();
121
119
  // It fetches user passkeys if user has embedded wallet
122
120
  const getUserPasskeysResult = usePromise(() => __awaiter(void 0, void 0, void 0, function* () {
123
121
  const data = yield getUserPasskeys({
@@ -125,8 +123,8 @@ const PasskeyContextProviderWithBrowser = ({ children, }) => {
125
123
  });
126
124
  return data.passkeys;
127
125
  }), {
128
- deps: [environmentId, userJwt, userHasEmbeddedWallet(), passkeyEdited],
129
- enabled: Boolean(environmentId && userJwt && userHasEmbeddedWallet()),
126
+ deps: [environmentId, user, userHasEmbeddedWallet(), passkeyEdited],
127
+ enabled: Boolean(environmentId && user && userHasEmbeddedWallet()),
130
128
  });
131
129
  // Returns true if user has passkeys for current origin
132
130
  const userHasPasskeysForCurrentOrigin = useMemo(() => {
@@ -1,9 +1,22 @@
1
1
  import { UserProfile } from '@dynamic-labs/types';
2
2
  import { Wallet } from './wallets';
3
3
  export type HandleConnectedWallet = (wallet: Partial<Wallet>) => Promise<boolean>;
4
+ export type UserOnboardingFieldRequest = {
5
+ key: string;
6
+ required: boolean;
7
+ isCustom: boolean;
8
+ label?: string;
9
+ };
10
+ export type UserOnboardingFieldResponse = {
11
+ key: string;
12
+ value: string;
13
+ isCustom: boolean;
14
+ };
15
+ export type HandleUserOnboarding = (missingFields: UserOnboardingFieldRequest[]) => Promise<UserOnboardingFieldResponse[]>;
4
16
  export type DynamicHandlers = {
5
17
  handleVerifiedUser?: (params: {
6
18
  user: UserProfile;
7
19
  }) => Promise<void>;
8
20
  handleConnectedWallet?: HandleConnectedWallet;
21
+ handleUserOnboarding?: HandleUserOnboarding;
9
22
  };
@@ -56,3 +56,4 @@ export { useTokenBalances } from './useTokenBalances';
56
56
  export { useUserAuth } from './useUserAuth';
57
57
  export { useSwitchWallet } from './useSwitchWallet';
58
58
  export { useSyncEmbeddedWalletFlow } from './useSyncEmbeddedWalletFlow';
59
+ export { useSyncOnboardingFlow } from './useSyncOnboardingFlow';
@@ -0,0 +1 @@
1
+ export { useSyncOnboardingFlow } from './useSyncOnboardingFlow';
@@ -0,0 +1,190 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+
6
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
7
+ var React = require('react');
8
+ var sdkApiCore = require('@dynamic-labs/sdk-api-core');
9
+ var useDynamicEvents = require('../events/useDynamicEvents/useDynamicEvents.cjs');
10
+ require('../../../context/DynamicContext/DynamicContext.cjs');
11
+ var logger = require('../../../shared/logger.cjs');
12
+ require('@dynamic-labs/iconic');
13
+ require('@dynamic-labs/wallet-connector-core');
14
+ require('react/jsx-runtime');
15
+ var ViewContext = require('../../../context/ViewContext/ViewContext.cjs');
16
+ require('@dynamic-labs/wallet-book');
17
+ require('../../constants/colors.cjs');
18
+ require('../../constants/values.cjs');
19
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
20
+ require('@dynamic-labs/utils');
21
+ require('../../../shared/consts/index.cjs');
22
+ require('../../../context/CaptchaContext/CaptchaContext.cjs');
23
+ require('../../../context/ErrorContext/ErrorContext.cjs');
24
+ require('@dynamic-labs/multi-wallet');
25
+ require('react-international-phone');
26
+ require('viem');
27
+ require('viem/chains');
28
+ require('../../../config/ApiEndpoint.cjs');
29
+ require('@dynamic-labs/store');
30
+ require('../../../locale/locale.cjs');
31
+ require('../../../context/AccessDeniedContext/AccessDeniedContext.cjs');
32
+ require('../../../context/AccountExistsContext/AccountExistsContext.cjs');
33
+ require('../../../context/UserWalletsContext/UserWalletsContext.cjs');
34
+ require('../../../events/dynamicEvents.cjs');
35
+ var VerificationContext = require('../../../context/VerificationContext/VerificationContext.cjs');
36
+ require('react-dom');
37
+ require('../../../context/WalletContext/WalletContext.cjs');
38
+ require('../../../context/ThemeContext/ThemeContext.cjs');
39
+ require('../useUserUpdateRequest/useUpdateUser/userFieldsSchema.cjs');
40
+ require('@dynamic-labs/types');
41
+ var useUserAuth = require('../useUserAuth/useUserAuth.cjs');
42
+ require('yup');
43
+ require('../../../context/MockContext/MockContext.cjs');
44
+ require('../../../views/CollectUserDataView/useFields.cjs');
45
+ var useUserUpdateRequest = require('../useUserUpdateRequest/useUserUpdateRequest.cjs');
46
+ require('../../../context/UserFieldEditorContext/UserFieldEditorContext.cjs');
47
+ require('../../../context/FieldsStateContext/FieldsStateContext.cjs');
48
+ require('@dynamic-labs/rpc-providers');
49
+ require('react-i18next');
50
+ require('../../../components/Alert/Alert.cjs');
51
+ require('../../../components/ShadowDOM/ShadowDOM.cjs');
52
+ require('../../../components/IconButton/IconButton.cjs');
53
+ require('../../../components/InlineWidget/InlineWidget.cjs');
54
+ require('../../../components/Input/Input.cjs');
55
+ require('../../../components/IsBrowser/IsBrowser.cjs');
56
+ require('../../../components/MenuList/Dropdown/Dropdown.cjs');
57
+ require('../../../components/Transition/ZoomTransition/ZoomTransition.cjs');
58
+ require('../../../components/Transition/SlideInUpTransition/SlideInUpTransition.cjs');
59
+ require('../../../components/Transition/OpacityTransition/OpacityTransition.cjs');
60
+ require('../../../components/OverlayCard/OverlayCardTarget/OverlayCardTarget.cjs');
61
+ require('../../../components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs');
62
+ require('../../../components/Popper/Popper/Popper.cjs');
63
+ require('../../../components/Popper/PopperContext/PopperContext.cjs');
64
+ require('react-focus-lock');
65
+ require('qrcode');
66
+ require('formik');
67
+ require('../../../views/WalletList/WalletList.cjs');
68
+ require('../../../context/SocialRedirectContext/SocialRedirectContext.cjs');
69
+ require('../../../widgets/DynamicBridgeWidget/views/WalletsView/components/SecondaryWallets/SecondaryWallets.cjs');
70
+ require('@hcaptcha/react-hcaptcha');
71
+ require('../../../context/LoadingContext/LoadingContext.cjs');
72
+ require('../../../context/FooterAnimationContext/index.cjs');
73
+ require('../../../views/LoginView/sections/PhoneNumberSignInSection/PhoneNumberSignInSection.cjs');
74
+ require('../../../context/WalletGroupContext/WalletGroupContext.cjs');
75
+ require('../../../context/MfaSettingsContext/MfaSettingsContext.cjs');
76
+ require('../../../context/IpConfigurationContext/IpConfigurationContext.cjs');
77
+ require('../../../context/PasskeyContext/PasskeyContext.cjs');
78
+ require('../../../widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs');
79
+ require('../../../widgets/DynamicWidget/context/DynamicWidgetContext.cjs');
80
+ require('../../../views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs');
81
+ require('../../../widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs');
82
+ var useInternalDynamicContext = require('../../../context/DynamicContext/useDynamicContext/useInternalDynamicContext.cjs');
83
+
84
+ const useSyncOnboardingFlow = () => {
85
+ const { setShowAuthFlow, unauthenticatedUser, handlers, headless, sdkHasLoaded, setSelectedWalletConnectorKey, } = useInternalDynamicContext.useInternalDynamicContext();
86
+ const { setView } = ViewContext.useViewContext();
87
+ const { updateUser } = useUserUpdateRequest.useUserUpdateRequestInternal({
88
+ validationSchemaStripUnknown: false,
89
+ });
90
+ const { completeAuth, handleAuthError } = useUserAuth.useUserAuth({});
91
+ const { displayedDestination: formattedPhone } = VerificationContext.useVerification();
92
+ const triggeredOnboarding = React.useRef(false);
93
+ useDynamicEvents.useInternalDynamicEvents('logout', () => {
94
+ triggeredOnboarding.current = false;
95
+ });
96
+ // this is used to trigger onboarding flow
97
+ // either by headless or dynamic widget
98
+ // it will be triggered when user has missing fields
99
+ // either on login or refreshing the page
100
+ React.useEffect(() => {
101
+ var _a;
102
+ const handleHeadlessOnboarding = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
103
+ var _b;
104
+ if (!(handlers === null || handlers === void 0 ? void 0 : handlers.handleUserOnboarding) ||
105
+ !((_b = unauthenticatedUser === null || unauthenticatedUser === void 0 ? void 0 : unauthenticatedUser.missingFields) === null || _b === void 0 ? void 0 : _b.length)) {
106
+ return;
107
+ }
108
+ triggeredOnboarding.current = true;
109
+ try {
110
+ const missingFieldsRequestInput = unauthenticatedUser.missingFields.map((field) => ({
111
+ isCustom: field.type === 'custom',
112
+ key: field.name,
113
+ label: field.label,
114
+ required: field.required,
115
+ }));
116
+ const onboardingResponse = yield handlers.handleUserOnboarding(missingFieldsRequestInput);
117
+ const userFields = {};
118
+ const customFields = Object.assign({}, unauthenticatedUser === null || unauthenticatedUser === void 0 ? void 0 : unauthenticatedUser.metadata);
119
+ onboardingResponse.forEach((field) => {
120
+ if (field.isCustom) {
121
+ customFields[field.key] = field.value;
122
+ }
123
+ else {
124
+ userFields[field.key] = field.value;
125
+ }
126
+ });
127
+ yield completeAuth({
128
+ updateJwtFunction: () => _tslib.__awaiter(void 0, void 0, void 0, function* () { return updateUser(Object.assign(Object.assign({}, userFields), { metadata: customFields })); }),
129
+ });
130
+ }
131
+ catch (error) {
132
+ logger.logger.error('Error handling user onboarding', error);
133
+ handleAuthError(error, {});
134
+ }
135
+ });
136
+ const handleOnboarding = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
137
+ triggeredOnboarding.current = true;
138
+ setShowAuthFlow(true);
139
+ const lastVerifiedCredential = unauthenticatedUser === null || unauthenticatedUser === void 0 ? void 0 : unauthenticatedUser.verifiedCredentials.find((vc) => vc.id === (unauthenticatedUser === null || unauthenticatedUser === void 0 ? void 0 : unauthenticatedUser.lastVerifiedCredentialId));
140
+ if (lastVerifiedCredential === null || lastVerifiedCredential === void 0 ? void 0 : lastVerifiedCredential.walletName) {
141
+ setSelectedWalletConnectorKey(lastVerifiedCredential === null || lastVerifiedCredential === void 0 ? void 0 : lastVerifiedCredential.walletName);
142
+ }
143
+ switch (lastVerifiedCredential === null || lastVerifiedCredential === void 0 ? void 0 : lastVerifiedCredential.format) {
144
+ case sdkApiCore.JwtVerifiedCredentialFormatEnum.Email:
145
+ case sdkApiCore.JwtVerifiedCredentialFormatEnum.Oauth:
146
+ setView('collect-user-data-login-no-wallet', {
147
+ userIdentification: 'email',
148
+ });
149
+ break;
150
+ case sdkApiCore.JwtVerifiedCredentialFormatEnum.PhoneNumber:
151
+ setView('collect-user-data-login-no-wallet', {
152
+ userIdentification: 'phoneNumber',
153
+ userIdentificationOverride: formattedPhone,
154
+ });
155
+ break;
156
+ default:
157
+ setView('collect-user-data');
158
+ }
159
+ });
160
+ if (!sdkHasLoaded ||
161
+ triggeredOnboarding.current ||
162
+ !((_a = unauthenticatedUser === null || unauthenticatedUser === void 0 ? void 0 : unauthenticatedUser.missingFields) === null || _a === void 0 ? void 0 : _a.length)) {
163
+ return;
164
+ }
165
+ if (handlers === null || handlers === void 0 ? void 0 : handlers.handleUserOnboarding) {
166
+ handleHeadlessOnboarding();
167
+ return;
168
+ }
169
+ if (headless) {
170
+ logger.logger.error('No onboarding handler found. Please add a handleUserOnboarding handler to your dynamic provider settings.');
171
+ return;
172
+ }
173
+ handleOnboarding();
174
+ return;
175
+ }, [
176
+ sdkHasLoaded,
177
+ unauthenticatedUser,
178
+ handlers,
179
+ completeAuth,
180
+ updateUser,
181
+ headless,
182
+ setShowAuthFlow,
183
+ setView,
184
+ formattedPhone,
185
+ handleAuthError,
186
+ setSelectedWalletConnectorKey,
187
+ ]);
188
+ };
189
+
190
+ exports.useSyncOnboardingFlow = useSyncOnboardingFlow;
@@ -0,0 +1 @@
1
+ export declare const useSyncOnboardingFlow: () => void;