@dynamic-labs/sdk-react-core 1.0.0-alpha.6 → 1.0.0-alpha.8

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 (144) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +10 -10
  5. package/src/index.cjs +4 -2
  6. package/src/index.d.ts +1 -1
  7. package/src/index.js +2 -1
  8. package/src/lib/Main.cjs +18 -21
  9. package/src/lib/Main.js +18 -21
  10. package/src/lib/components/NeedHelpSection/NeedHelpSection.cjs +84 -5
  11. package/src/lib/components/NeedHelpSection/NeedHelpSection.js +85 -6
  12. package/src/lib/components/NetworkPicker/NetworkPicker.cjs +8 -6
  13. package/src/lib/components/NetworkPicker/NetworkPicker.d.ts +2 -1
  14. package/src/lib/components/NetworkPicker/NetworkPicker.js +8 -6
  15. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs +68 -0
  16. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.d.ts +6 -0
  17. package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js +64 -0
  18. package/src/lib/components/PasskeyCreatedSuccessBanner/index.d.ts +1 -0
  19. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.cjs +24 -0
  20. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.d.ts +6 -0
  21. package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.js +20 -0
  22. package/src/lib/components/SecureTurnkeyWalletCard/index.d.ts +1 -0
  23. package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +4 -1
  24. package/src/lib/components/SendBalanceForm/SendBalanceForm.js +4 -1
  25. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +5 -2
  26. package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +5 -2
  27. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +6 -2
  28. package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +6 -2
  29. package/src/lib/components/index.d.ts +2 -0
  30. package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -5
  31. package/src/lib/context/DynamicContext/DynamicContext.js +8 -5
  32. package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
  33. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/index.d.ts +1 -0
  34. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.cjs +23 -0
  35. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.d.ts +4 -0
  36. package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.js +19 -0
  37. package/src/lib/context/DynamicContext/types/index.d.ts +2 -1
  38. package/src/lib/data/api.cjs +14 -10
  39. package/src/lib/data/api.d.ts +2 -2
  40. package/src/lib/data/api.js +14 -10
  41. package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +9 -11
  42. package/src/lib/layout/DynamicAuthLayout/Header/header.js +10 -12
  43. package/src/lib/locale/en/translation.cjs +77 -3
  44. package/src/lib/locale/en/translation.d.ts +76 -2
  45. package/src/lib/locale/en/translation.js +77 -3
  46. package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.cjs +6 -2
  47. package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.js +6 -2
  48. package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.cjs +1 -1
  49. package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.js +1 -1
  50. package/src/lib/styles/index.shadow.cjs +1 -1
  51. package/src/lib/styles/index.shadow.js +1 -1
  52. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
  53. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
  54. package/src/lib/utils/hooks/index.d.ts +2 -0
  55. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +1 -6
  56. package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +1 -6
  57. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +3 -0
  58. package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +3 -0
  59. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +7 -8
  60. package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +7 -8
  61. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/index.d.ts +1 -0
  62. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +83 -0
  63. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +15 -0
  64. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +79 -0
  65. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +11 -3
  66. package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +11 -3
  67. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +57 -33
  68. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +1 -1
  69. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +57 -33
  70. package/src/lib/utils/hooks/useEventListener/useEventListener.cjs +2 -1
  71. package/src/lib/utils/hooks/useEventListener/useEventListener.js +2 -1
  72. package/src/lib/utils/hooks/useIsTurnkeyWallet/index.d.ts +1 -0
  73. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +37 -0
  74. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.d.ts +6 -0
  75. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +33 -0
  76. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +9 -5
  77. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.d.ts +0 -1
  78. package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +10 -6
  79. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +20 -21
  80. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +1 -2
  81. package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +20 -21
  82. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +32 -9
  83. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.d.ts +0 -1
  84. package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +33 -10
  85. package/src/lib/views/AccountExistsView/AccountExistsView.cjs +1 -1
  86. package/src/lib/views/AccountExistsView/AccountExistsView.js +1 -1
  87. package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +1 -1
  88. package/src/lib/views/CollectUserDataView/CollectUserDataView.js +1 -1
  89. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
  90. package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
  91. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +1 -1
  92. package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +1 -1
  93. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.cjs +2 -5
  94. package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.js +2 -5
  95. package/src/lib/views/LoginView/useLoginView.cjs +101 -84
  96. package/src/lib/views/LoginView/useLoginView.js +102 -85
  97. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +6 -3
  98. package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +6 -3
  99. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +20 -50
  100. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +1 -6
  101. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +20 -50
  102. package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +7 -2
  103. package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +7 -2
  104. package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +11 -7
  105. package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +11 -7
  106. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +8 -10
  107. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +8 -10
  108. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +56 -0
  109. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +13 -0
  110. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +52 -0
  111. package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +1 -0
  112. package/src/lib/views/Passkey/utils/index.d.ts +1 -0
  113. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +1 -1
  114. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +1 -1
  115. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.cjs +1 -1
  116. package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.js +1 -1
  117. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +12 -2
  118. package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +12 -2
  119. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs +3 -0
  120. package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.js +4 -1
  121. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +6 -3
  122. package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +6 -3
  123. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.cjs +2 -2
  124. package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.js +2 -2
  125. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs +2 -1
  126. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js +2 -1
  127. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +8 -5
  128. package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +8 -5
  129. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.cjs +2 -3
  130. package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.js +2 -3
  131. package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.cjs +11 -2
  132. package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.js +11 -2
  133. package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.cjs +1 -2
  134. package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.js +1 -2
  135. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.cjs +1 -3
  136. package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.js +1 -3
  137. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.cjs +1 -1
  138. package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.js +1 -1
  139. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.cjs +2 -1
  140. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.js +2 -1
  141. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs +16 -6
  142. package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js +16 -6
  143. package/src/lib/utils/functions/getEnabledProviders/index.cjs +0 -7
  144. package/src/lib/utils/functions/getEnabledProviders/index.js +0 -3
@@ -19,10 +19,12 @@ require('../../../shared/consts/index.cjs');
19
19
  require('@dynamic-labs/multi-wallet');
20
20
  var isProgrammableNetworkSwitchSupported = require('../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.cjs');
21
21
  var isSupportedNetwork = require('../../functions/isSupportedNetwork/isSupportedNetwork.cjs');
22
+ var useIsLoggedIn = require('../useIsLoggedIn/useIsLoggedIn.cjs');
22
23
 
23
24
  const useConnectedWalletsNetworkValidation = () => {
24
- const { connectedWallets, selectedWalletConnector, setSelectedWalletConnectorKey, setShowAuthFlow, showAuthFlow, bridgeChainsToConnect, sdkHasLoaded, } = useInternalDynamicContext.useInternalDynamicContext();
25
+ const { connectedWallets, selectedWalletConnector, setSelectedWalletConnectorKey, setShowAuthFlow, bridgeChainsToConnect, sdkHasLoaded, } = useInternalDynamicContext.useInternalDynamicContext();
25
26
  const { setView } = ViewContext.useViewContext();
27
+ const isLoggedIn = useIsLoggedIn.useIsLoggedIn();
26
28
  React.useEffect(() => {
27
29
  /**
28
30
  * This check was added to prevent the "wrong network" modal from appearing
@@ -33,7 +35,7 @@ const useConnectedWalletsNetworkValidation = () => {
33
35
  * extra popup because handleLogOut flips sdkHasLoaded to false, so on the
34
36
  * next render it will already be false.
35
37
  */
36
- if (!sdkHasLoaded) {
38
+ if (!sdkHasLoaded || !isLoggedIn) {
37
39
  return;
38
40
  }
39
41
  const connectedWalletsWithInvalidNetwork = connectedWallets.filter((connectedWallet) => {
@@ -57,14 +59,10 @@ const useConnectedWalletsNetworkValidation = () => {
57
59
  const networkNotSupportedView = isProgrammableNetworkSwitchSupported.isProgrammableNetworkSwitchSupported(connectedWalletWithInvalidNetwork.connector)
58
60
  ? 'network-not-supported'
59
61
  : 'network-not-supported-manual';
60
- if (!showAuthFlow) {
61
- setShowAuthFlow(true);
62
- }
62
+ // Doesn't rerender if it's already true
63
+ setShowAuthFlow(true);
63
64
  setView(networkNotSupportedView);
64
65
  }
65
- // we need it to remove 'showAuthFlow' property. we don't want to react to it,
66
- // because closing modal on network switch causes it to re-open
67
- // eslint-disable-next-line react-hooks/exhaustive-deps
68
66
  }, [
69
67
  sdkHasLoaded,
70
68
  connectedWallets,
@@ -73,6 +71,7 @@ const useConnectedWalletsNetworkValidation = () => {
73
71
  setShowAuthFlow,
74
72
  setView,
75
73
  bridgeChainsToConnect,
74
+ isLoggedIn,
76
75
  ]);
77
76
  };
78
77
 
@@ -15,10 +15,12 @@ import '../../../shared/consts/index.js';
15
15
  import '@dynamic-labs/multi-wallet';
16
16
  import { isProgrammableNetworkSwitchSupported } from '../../functions/isProgrammableNetworkSwitchSupported/isProgrammableNetworkSwitchSupported.js';
17
17
  import { isSupportedNetwork } from '../../functions/isSupportedNetwork/isSupportedNetwork.js';
18
+ import { useIsLoggedIn } from '../useIsLoggedIn/useIsLoggedIn.js';
18
19
 
19
20
  const useConnectedWalletsNetworkValidation = () => {
20
- const { connectedWallets, selectedWalletConnector, setSelectedWalletConnectorKey, setShowAuthFlow, showAuthFlow, bridgeChainsToConnect, sdkHasLoaded, } = useInternalDynamicContext();
21
+ const { connectedWallets, selectedWalletConnector, setSelectedWalletConnectorKey, setShowAuthFlow, bridgeChainsToConnect, sdkHasLoaded, } = useInternalDynamicContext();
21
22
  const { setView } = useViewContext();
23
+ const isLoggedIn = useIsLoggedIn();
22
24
  useEffect(() => {
23
25
  /**
24
26
  * This check was added to prevent the "wrong network" modal from appearing
@@ -29,7 +31,7 @@ const useConnectedWalletsNetworkValidation = () => {
29
31
  * extra popup because handleLogOut flips sdkHasLoaded to false, so on the
30
32
  * next render it will already be false.
31
33
  */
32
- if (!sdkHasLoaded) {
34
+ if (!sdkHasLoaded || !isLoggedIn) {
33
35
  return;
34
36
  }
35
37
  const connectedWalletsWithInvalidNetwork = connectedWallets.filter((connectedWallet) => {
@@ -53,14 +55,10 @@ const useConnectedWalletsNetworkValidation = () => {
53
55
  const networkNotSupportedView = isProgrammableNetworkSwitchSupported(connectedWalletWithInvalidNetwork.connector)
54
56
  ? 'network-not-supported'
55
57
  : 'network-not-supported-manual';
56
- if (!showAuthFlow) {
57
- setShowAuthFlow(true);
58
- }
58
+ // Doesn't rerender if it's already true
59
+ setShowAuthFlow(true);
59
60
  setView(networkNotSupportedView);
60
61
  }
61
- // we need it to remove 'showAuthFlow' property. we don't want to react to it,
62
- // because closing modal on network switch causes it to re-open
63
- // eslint-disable-next-line react-hooks/exhaustive-deps
64
62
  }, [
65
63
  sdkHasLoaded,
66
64
  connectedWallets,
@@ -69,6 +67,7 @@ const useConnectedWalletsNetworkValidation = () => {
69
67
  setShowAuthFlow,
70
68
  setView,
71
69
  bridgeChainsToConnect,
70
+ isLoggedIn,
72
71
  ]);
73
72
  };
74
73
 
@@ -0,0 +1 @@
1
+ export { useCreateDynamicEmbeddedWalletMutation } from './useCreateDynamicEmbeddedWalletMutation';
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../../../../_virtual/_tslib.cjs');
6
+ var createEmbeddedWalletWithPasskey = require('../../../views/Passkey/utils/createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.cjs');
7
+ var findPasskeyEmailWalletConnector = require('../../../views/Passkey/utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.cjs');
8
+ var createPregeneratedWallet = require('../../../views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs');
9
+ var createUserProfile = require('../../functions/createUserProfile/createUserProfile.cjs');
10
+ require('@dynamic-labs/sdk-api');
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
+ require('../../../context/ViewContext/ViewContext.cjs');
16
+ require('react');
17
+ require('@dynamic-labs/wallet-book');
18
+ require('../../constants/colors.cjs');
19
+ require('../../../shared/utils/classes/storage/localStorage.cjs');
20
+ require('viem');
21
+ require('@dynamic-labs/utils');
22
+ require('../../../shared/consts/index.cjs');
23
+ require('@dynamic-labs/multi-wallet');
24
+ var index = require('../../functions/storeAuthToken/index.cjs');
25
+ var smartWallet = require('../useWalletConnectors/utils/smartWallet/smartWallet.cjs');
26
+ var useInternalDynamicContext = require('../../../context/DynamicContext/useInternalDynamicContext.cjs');
27
+ var useMutation = require('../useMutation/useMutation.cjs');
28
+
29
+ const useCreateDynamicEmbeddedWalletMutation = () => {
30
+ const { setPrimaryWalletId, internalEvents, setCallback, setUser, user, setShowAuthFlow, } = useInternalDynamicContext.useInternalDynamicContext();
31
+ const { mutate: createDynamicEmbeddedWalletMutation, isLoading, error, } = useMutation.useMutation(({ authToken, decodedJwt, environmentId, wallets, withAuthenticator, }) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
32
+ var _a;
33
+ const createEmbeddedWalletMethodToUse = withAuthenticator
34
+ ? createEmbeddedWalletWithPasskey.createEmbeddedWalletWithPasskey
35
+ : createPregeneratedWallet.createPregeneratedWallet;
36
+ const { embeddedWalletVerifiedCredential, jwt, decodedJwt: updatedDecodedJwt, walletConnector, } = yield createEmbeddedWalletMethodToUse({
37
+ authToken,
38
+ environmentId,
39
+ user: user !== null && user !== void 0 ? user : createUserProfile.createUserProfile(decodedJwt),
40
+ walletConnector: findPasskeyEmailWalletConnector.findPasskeyEmailWalletConnector(wallets),
41
+ });
42
+ const passkeyWallet = {
43
+ address: (yield walletConnector.fetchPublicAddress()) || '',
44
+ chain: walletConnector.connectedChain || '',
45
+ connected: true,
46
+ connector: walletConnector,
47
+ id: embeddedWalletVerifiedCredential.id,
48
+ };
49
+ internalEvents.current.emit('embeddedWalletCreated', passkeyWallet);
50
+ const smartWallet$1 = smartWallet.findSmartWallet(embeddedWalletVerifiedCredential, updatedDecodedJwt.verifiedCredentials);
51
+ if (smartWallet$1) {
52
+ yield smartWallet.initializeSmartWallet({
53
+ account: smartWallet$1,
54
+ verifiedCredentials: updatedDecodedJwt.verifiedCredentials,
55
+ walletOptions: wallets,
56
+ });
57
+ setPrimaryWalletId(smartWallet$1.id);
58
+ }
59
+ else {
60
+ setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
61
+ }
62
+ index.storeAuthToken(jwt);
63
+ setUser(createUserProfile.createUserProfile(updatedDecodedJwt));
64
+ setShowAuthFlow(false);
65
+ const turnkeyVerifiedCredentials = (_a = updatedDecodedJwt === null || updatedDecodedJwt === void 0 ? void 0 : updatedDecodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'));
66
+ setCallback('embeddedWalletCreated', {
67
+ email: (turnkeyVerifiedCredentials === null || turnkeyVerifiedCredentials === void 0 ? void 0 : turnkeyVerifiedCredentials.email) || '',
68
+ verifiedCredential: turnkeyVerifiedCredentials,
69
+ });
70
+ }), {
71
+ onFailure: (err) => {
72
+ logger.logger.error('Failed to create embedded wallet', err);
73
+ internalEvents.current.emit('embeddedWalletFailed', err);
74
+ },
75
+ });
76
+ return {
77
+ createDynamicEmbeddedWalletMutation,
78
+ error,
79
+ isLoading,
80
+ };
81
+ };
82
+
83
+ exports.useCreateDynamicEmbeddedWalletMutation = useCreateDynamicEmbeddedWalletMutation;
@@ -0,0 +1,15 @@
1
+ import { DynamicJwt } from '@dynamic-labs/sdk-api';
2
+ import { WalletOption } from '../../../shared';
3
+ type MutationProps = {
4
+ authToken: string | undefined;
5
+ environmentId: string;
6
+ wallets: WalletOption[];
7
+ decodedJwt: DynamicJwt;
8
+ withAuthenticator: boolean;
9
+ };
10
+ export declare const useCreateDynamicEmbeddedWalletMutation: () => {
11
+ createDynamicEmbeddedWalletMutation: (variables: MutationProps) => void;
12
+ error: unknown;
13
+ isLoading: boolean;
14
+ };
15
+ export {};
@@ -0,0 +1,79 @@
1
+ import { __awaiter } from '../../../../../_virtual/_tslib.js';
2
+ import { createEmbeddedWalletWithPasskey } from '../../../views/Passkey/utils/createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js';
3
+ import { findPasskeyEmailWalletConnector } from '../../../views/Passkey/utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.js';
4
+ import { createPregeneratedWallet } from '../../../views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js';
5
+ import { createUserProfile } from '../../functions/createUserProfile/createUserProfile.js';
6
+ import '@dynamic-labs/sdk-api';
7
+ import { logger } from '../../../shared/logger.js';
8
+ import '@dynamic-labs/iconic';
9
+ import '@dynamic-labs/wallet-connector-core';
10
+ import 'react/jsx-runtime';
11
+ import '../../../context/ViewContext/ViewContext.js';
12
+ import 'react';
13
+ import '@dynamic-labs/wallet-book';
14
+ import '../../constants/colors.js';
15
+ import '../../../shared/utils/classes/storage/localStorage.js';
16
+ import 'viem';
17
+ import '@dynamic-labs/utils';
18
+ import '../../../shared/consts/index.js';
19
+ import '@dynamic-labs/multi-wallet';
20
+ import { storeAuthToken } from '../../functions/storeAuthToken/index.js';
21
+ import { findSmartWallet, initializeSmartWallet } from '../useWalletConnectors/utils/smartWallet/smartWallet.js';
22
+ import { useInternalDynamicContext } from '../../../context/DynamicContext/useInternalDynamicContext.js';
23
+ import { useMutation } from '../useMutation/useMutation.js';
24
+
25
+ const useCreateDynamicEmbeddedWalletMutation = () => {
26
+ const { setPrimaryWalletId, internalEvents, setCallback, setUser, user, setShowAuthFlow, } = useInternalDynamicContext();
27
+ const { mutate: createDynamicEmbeddedWalletMutation, isLoading, error, } = useMutation(({ authToken, decodedJwt, environmentId, wallets, withAuthenticator, }) => __awaiter(void 0, void 0, void 0, function* () {
28
+ var _a;
29
+ const createEmbeddedWalletMethodToUse = withAuthenticator
30
+ ? createEmbeddedWalletWithPasskey
31
+ : createPregeneratedWallet;
32
+ const { embeddedWalletVerifiedCredential, jwt, decodedJwt: updatedDecodedJwt, walletConnector, } = yield createEmbeddedWalletMethodToUse({
33
+ authToken,
34
+ environmentId,
35
+ user: user !== null && user !== void 0 ? user : createUserProfile(decodedJwt),
36
+ walletConnector: findPasskeyEmailWalletConnector(wallets),
37
+ });
38
+ const passkeyWallet = {
39
+ address: (yield walletConnector.fetchPublicAddress()) || '',
40
+ chain: walletConnector.connectedChain || '',
41
+ connected: true,
42
+ connector: walletConnector,
43
+ id: embeddedWalletVerifiedCredential.id,
44
+ };
45
+ internalEvents.current.emit('embeddedWalletCreated', passkeyWallet);
46
+ const smartWallet = findSmartWallet(embeddedWalletVerifiedCredential, updatedDecodedJwt.verifiedCredentials);
47
+ if (smartWallet) {
48
+ yield initializeSmartWallet({
49
+ account: smartWallet,
50
+ verifiedCredentials: updatedDecodedJwt.verifiedCredentials,
51
+ walletOptions: wallets,
52
+ });
53
+ setPrimaryWalletId(smartWallet.id);
54
+ }
55
+ else {
56
+ setPrimaryWalletId(embeddedWalletVerifiedCredential.id);
57
+ }
58
+ storeAuthToken(jwt);
59
+ setUser(createUserProfile(updatedDecodedJwt));
60
+ setShowAuthFlow(false);
61
+ const turnkeyVerifiedCredentials = (_a = updatedDecodedJwt === null || updatedDecodedJwt === void 0 ? void 0 : updatedDecodedJwt.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'));
62
+ setCallback('embeddedWalletCreated', {
63
+ email: (turnkeyVerifiedCredentials === null || turnkeyVerifiedCredentials === void 0 ? void 0 : turnkeyVerifiedCredentials.email) || '',
64
+ verifiedCredential: turnkeyVerifiedCredentials,
65
+ });
66
+ }), {
67
+ onFailure: (err) => {
68
+ logger.error('Failed to create embedded wallet', err);
69
+ internalEvents.current.emit('embeddedWalletFailed', err);
70
+ },
71
+ });
72
+ return {
73
+ createDynamicEmbeddedWalletMutation,
74
+ error,
75
+ isLoading,
76
+ };
77
+ };
78
+
79
+ export { useCreateDynamicEmbeddedWalletMutation };
@@ -5,9 +5,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
6
  var reactI18next = require('react-i18next');
7
7
  var iconic = require('@dynamic-labs/iconic');
8
+ var useIsTurnkeyWallet = require('../useIsTurnkeyWallet/useIsTurnkeyWallet.cjs');
8
9
 
9
10
  const useDynamicLayoutData = ({ view, authMode, }) => {
10
11
  const { t } = reactI18next.useTranslation();
12
+ const { isTurnkeyWalletWithoutAuthenticator } = useIsTurnkeyWallet.useIsTurnkeyWallet();
11
13
  if (view === 'no-access') {
12
14
  const headerData = {
13
15
  heading: t('dyn_no_access.title'),
@@ -67,13 +69,19 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
67
69
  heading: 'Update Network',
68
70
  },
69
71
  'passkey-recovery-bundle': {
70
- heading: t('dyn_passkey_recovery.code.title'),
72
+ heading: isTurnkeyWalletWithoutAuthenticator
73
+ ? t('dyn_passkey_secure_modal.code.title')
74
+ : t('dyn_passkey_recovery.code.title'),
71
75
  },
72
76
  'passkey-recovery-complete': {
73
- heading: t('dyn_passkey_recovery.complete.title'),
77
+ heading: isTurnkeyWalletWithoutAuthenticator
78
+ ? t('dyn_passkey_secure_modal.complete.title')
79
+ : t('dyn_passkey_recovery.complete.title'),
74
80
  },
75
81
  'passkey-recovery-start': {
76
- heading: t('dyn_passkey_recovery.start.title'),
82
+ heading: isTurnkeyWalletWithoutAuthenticator
83
+ ? t('dyn_passkey_secure_modal.start.title')
84
+ : t('dyn_passkey_recovery.start.title'),
77
85
  },
78
86
  'pending-connect': {
79
87
  heading: t('dyn_login.connect_wallet.title'),
@@ -1,9 +1,11 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useTranslation } from 'react-i18next';
3
3
  import { WalletConnectIcon } from '@dynamic-labs/iconic';
4
+ import { useIsTurnkeyWallet } from '../useIsTurnkeyWallet/useIsTurnkeyWallet.js';
4
5
 
5
6
  const useDynamicLayoutData = ({ view, authMode, }) => {
6
7
  const { t } = useTranslation();
8
+ const { isTurnkeyWalletWithoutAuthenticator } = useIsTurnkeyWallet();
7
9
  if (view === 'no-access') {
8
10
  const headerData = {
9
11
  heading: t('dyn_no_access.title'),
@@ -63,13 +65,19 @@ const useDynamicLayoutData = ({ view, authMode, }) => {
63
65
  heading: 'Update Network',
64
66
  },
65
67
  'passkey-recovery-bundle': {
66
- heading: t('dyn_passkey_recovery.code.title'),
68
+ heading: isTurnkeyWalletWithoutAuthenticator
69
+ ? t('dyn_passkey_secure_modal.code.title')
70
+ : t('dyn_passkey_recovery.code.title'),
67
71
  },
68
72
  'passkey-recovery-complete': {
69
- heading: t('dyn_passkey_recovery.complete.title'),
73
+ heading: isTurnkeyWalletWithoutAuthenticator
74
+ ? t('dyn_passkey_secure_modal.complete.title')
75
+ : t('dyn_passkey_recovery.complete.title'),
70
76
  },
71
77
  'passkey-recovery-start': {
72
- heading: t('dyn_passkey_recovery.start.title'),
78
+ heading: isTurnkeyWalletWithoutAuthenticator
79
+ ? t('dyn_passkey_secure_modal.start.title')
80
+ : t('dyn_passkey_recovery.start.title'),
73
81
  },
74
82
  'pending-connect': {
75
83
  heading: t('dyn_login.connect_wallet.title'),
@@ -26,11 +26,13 @@ var getUserWalletsFromVerifiedCredentials = require('../../functions/getUserWall
26
26
  var isEmbeddedWalletPresent = require('../../functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.cjs');
27
27
  var isTurnkeyEnabled = require('../../functions/isTurnkeyEnabled/isTurnkeyEnabled.cjs');
28
28
  var smartWallet = require('../useWalletConnectors/utils/smartWallet/smartWallet.cjs');
29
+ var useCreateDynamicEmbeddedWalletMutation = require('../useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs');
29
30
 
30
31
  // Hook exposed to customers and used internally to trigger embedded wallet creation
31
32
  const useEmbeddedWallet = () => {
32
- const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, } = useInternalDynamicContext.useInternalDynamicContext();
33
+ const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, environmentId, } = useInternalDynamicContext.useInternalDynamicContext();
33
34
  const { setView } = ViewContext.useViewContext();
35
+ const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation.useCreateDynamicEmbeddedWalletMutation();
34
36
  const userHasEmbeddedWallet = () => {
35
37
  var _a;
36
38
  const jwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
@@ -39,36 +41,25 @@ const useEmbeddedWallet = () => {
39
41
  }
40
42
  return isEmbeddedWalletPresent.isEmbeddedWalletPresent(jwt);
41
43
  };
42
- const createEmbeddedWallet = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
43
- var _a;
44
- const jwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
45
- if (!jwt) {
46
- throw new Error('User is not logged in');
47
- }
48
- if (!isTurnkeyEnabled.isTurnkeyEnabled(projectSettings)) {
49
- throw new Error('Passkey embedded wallet is not enabled. Go to the dashboard and make sure to have both Turnkey/Passkey Embedded wallets and at least one EVM network enabled. Also, check if EthereumWalletConnectors is in the DynamicContextProvider > settings > walletConnectors.');
50
- }
51
- const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
52
- // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
53
- if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
54
- return startEmbeddedWalletCreationFlow();
55
- }
56
- internalSetShowAuthFlow(false);
57
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt);
58
- // if user logged in with MM for example, just continue the flow
59
- if (!embeddedWalletVerifiedCredential) {
60
- return Promise.resolve(primaryWallet);
61
- }
62
- // if user already has embedded wallet, returns it
63
- return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
44
+ const startPregeneratedWalletCreationFlow = React.useCallback((jwt, decodedJwt) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
45
+ createDynamicEmbeddedWalletMutation({
46
+ authToken: jwt,
47
+ decodedJwt,
48
+ environmentId,
49
+ wallets,
50
+ withAuthenticator: false,
51
+ });
52
+ internalSetShowAuthFlow(false); // close email otp pin modal
53
+ return new Promise((resolve, reject) => {
54
+ internalEvents.current.once('embeddedWalletCreated', (wallet) => resolve(wallet));
55
+ internalEvents.current.once('embeddedWalletFailed', (error) => reject(error));
56
+ });
64
57
  }), [
65
- internalEvents,
66
- internalSetShowAuthFlow,
67
- onboardingOnlyJwt,
68
- projectSettings,
69
- setPrimaryWalletId,
70
- setView,
58
+ createDynamicEmbeddedWalletMutation,
59
+ environmentId,
71
60
  wallets,
61
+ internalSetShowAuthFlow,
62
+ internalEvents,
72
63
  ]);
73
64
  const startEmbeddedWalletCreationFlow = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
74
65
  internalSetShowAuthFlow(true);
@@ -88,12 +79,12 @@ const useEmbeddedWallet = () => {
88
79
  });
89
80
  });
90
81
  const returnEmbeddedWallet = (jwt, embeddedWalletVerifiedCredential) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
91
- var _b, _c, _d;
82
+ var _a, _b, _c;
92
83
  const decodedJwt = decodeJwt.decodeJwt(jwt);
93
84
  const turnkeyWallet = findTurnkeyWallet.findTurnkeyWallet(wallets);
94
85
  // if user already has embedded wallet, set it as primary wallet
95
86
  if (decodedJwt) {
96
- (_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.setVerifiedCredentials(decodedJwt.verifiedCredentials);
87
+ (_a = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _a === void 0 ? void 0 : _a.setVerifiedCredentials(decodedJwt.verifiedCredentials);
97
88
  const smartWallet$1 = smartWallet.findSmartWallet(embeddedWalletVerifiedCredential, decodedJwt.verifiedCredentials);
98
89
  if (smartWallet$1) {
99
90
  yield smartWallet.initializeSmartWallet({
@@ -108,14 +99,47 @@ const useEmbeddedWallet = () => {
108
99
  }
109
100
  }
110
101
  const passkeyWallet = {
111
- address: (yield ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.fetchPublicAddress())) || '',
112
- chain: ((_d = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _d === void 0 ? void 0 : _d.connectedChain) || '',
102
+ address: (yield ((_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.fetchPublicAddress())) || '',
103
+ chain: ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.connectedChain) || '',
113
104
  connected: true,
114
105
  connector: (turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) || {},
115
106
  id: embeddedWalletVerifiedCredential.id,
116
107
  };
117
108
  return Promise.resolve(passkeyWallet);
118
109
  });
110
+ const createEmbeddedWallet = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
111
+ var _d, _e, _f;
112
+ const jwt = (_d = getAuthToken.getAuthToken()) !== null && _d !== void 0 ? _d : onboardingOnlyJwt;
113
+ const decodedJwt = decodeJwt.decodeJwt(jwt);
114
+ if (!jwt || !decodedJwt) {
115
+ throw new Error('User is not logged in');
116
+ }
117
+ if (!isTurnkeyEnabled.isTurnkeyEnabled(projectSettings)) {
118
+ throw new Error('Passkey embedded wallet is not enabled. Go to the dashboard and make sure to have both Turnkey/Passkey Embedded wallets and at least one EVM network enabled. Also, check if EthereumWalletConnectors is in the DynamicContextProvider > settings > walletConnectors.');
119
+ }
120
+ const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
121
+ // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
122
+ if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
123
+ if (((_f = (_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWalletSecurityMethods) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) === 0) {
124
+ return startPregeneratedWalletCreationFlow(jwt, decodedJwt);
125
+ }
126
+ return startEmbeddedWalletCreationFlow();
127
+ }
128
+ internalSetShowAuthFlow(false);
129
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt);
130
+ // if user logged in with MM for example, just continue the flow
131
+ if (!embeddedWalletVerifiedCredential) {
132
+ return Promise.resolve(primaryWallet);
133
+ }
134
+ // if user already has embedded wallet, returns it
135
+ return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
136
+ }), [
137
+ internalSetShowAuthFlow,
138
+ onboardingOnlyJwt,
139
+ projectSettings,
140
+ startPregeneratedWalletCreationFlow,
141
+ primaryWallet,
142
+ ]);
119
143
  return {
120
144
  createEmbeddedWallet,
121
145
  userHasEmbeddedWallet,
@@ -1,5 +1,5 @@
1
1
  import { Wallet } from '../../../shared';
2
2
  export declare const useEmbeddedWallet: () => {
3
- readonly createEmbeddedWallet: () => Promise<Wallet>;
3
+ readonly createEmbeddedWallet: () => Promise<Wallet | undefined>;
4
4
  readonly userHasEmbeddedWallet: () => boolean;
5
5
  };
@@ -22,11 +22,13 @@ import { getUserWalletsFromVerifiedCredentials } from '../../functions/getUserWa
22
22
  import { isEmbeddedWalletPresent } from '../../functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.js';
23
23
  import { isTurnkeyEnabled } from '../../functions/isTurnkeyEnabled/isTurnkeyEnabled.js';
24
24
  import { findSmartWallet, initializeSmartWallet } from '../useWalletConnectors/utils/smartWallet/smartWallet.js';
25
+ import { useCreateDynamicEmbeddedWalletMutation } from '../useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js';
25
26
 
26
27
  // Hook exposed to customers and used internally to trigger embedded wallet creation
27
28
  const useEmbeddedWallet = () => {
28
- const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, } = useInternalDynamicContext();
29
+ const { projectSettings, onboardingOnlyJwt, setPrimaryWalletId, wallets, internalSetShowAuthFlow, internalEvents, primaryWallet, environmentId, } = useInternalDynamicContext();
29
30
  const { setView } = useViewContext();
31
+ const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation();
30
32
  const userHasEmbeddedWallet = () => {
31
33
  var _a;
32
34
  const jwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
@@ -35,36 +37,25 @@ const useEmbeddedWallet = () => {
35
37
  }
36
38
  return isEmbeddedWalletPresent(jwt);
37
39
  };
38
- const createEmbeddedWallet = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
39
- var _a;
40
- const jwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
41
- if (!jwt) {
42
- throw new Error('User is not logged in');
43
- }
44
- if (!isTurnkeyEnabled(projectSettings)) {
45
- throw new Error('Passkey embedded wallet is not enabled. Go to the dashboard and make sure to have both Turnkey/Passkey Embedded wallets and at least one EVM network enabled. Also, check if EthereumWalletConnectors is in the DynamicContextProvider > settings > walletConnectors.');
46
- }
47
- const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
48
- // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
49
- if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
50
- return startEmbeddedWalletCreationFlow();
51
- }
52
- internalSetShowAuthFlow(false);
53
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt);
54
- // if user logged in with MM for example, just continue the flow
55
- if (!embeddedWalletVerifiedCredential) {
56
- return Promise.resolve(primaryWallet);
57
- }
58
- // if user already has embedded wallet, returns it
59
- return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
40
+ const startPregeneratedWalletCreationFlow = useCallback((jwt, decodedJwt) => __awaiter(void 0, void 0, void 0, function* () {
41
+ createDynamicEmbeddedWalletMutation({
42
+ authToken: jwt,
43
+ decodedJwt,
44
+ environmentId,
45
+ wallets,
46
+ withAuthenticator: false,
47
+ });
48
+ internalSetShowAuthFlow(false); // close email otp pin modal
49
+ return new Promise((resolve, reject) => {
50
+ internalEvents.current.once('embeddedWalletCreated', (wallet) => resolve(wallet));
51
+ internalEvents.current.once('embeddedWalletFailed', (error) => reject(error));
52
+ });
60
53
  }), [
61
- internalEvents,
62
- internalSetShowAuthFlow,
63
- onboardingOnlyJwt,
64
- projectSettings,
65
- setPrimaryWalletId,
66
- setView,
54
+ createDynamicEmbeddedWalletMutation,
55
+ environmentId,
67
56
  wallets,
57
+ internalSetShowAuthFlow,
58
+ internalEvents,
68
59
  ]);
69
60
  const startEmbeddedWalletCreationFlow = () => __awaiter(void 0, void 0, void 0, function* () {
70
61
  internalSetShowAuthFlow(true);
@@ -84,12 +75,12 @@ const useEmbeddedWallet = () => {
84
75
  });
85
76
  });
86
77
  const returnEmbeddedWallet = (jwt, embeddedWalletVerifiedCredential) => __awaiter(void 0, void 0, void 0, function* () {
87
- var _b, _c, _d;
78
+ var _a, _b, _c;
88
79
  const decodedJwt = decodeJwt(jwt);
89
80
  const turnkeyWallet = findTurnkeyWallet(wallets);
90
81
  // if user already has embedded wallet, set it as primary wallet
91
82
  if (decodedJwt) {
92
- (_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.setVerifiedCredentials(decodedJwt.verifiedCredentials);
83
+ (_a = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _a === void 0 ? void 0 : _a.setVerifiedCredentials(decodedJwt.verifiedCredentials);
93
84
  const smartWallet = findSmartWallet(embeddedWalletVerifiedCredential, decodedJwt.verifiedCredentials);
94
85
  if (smartWallet) {
95
86
  yield initializeSmartWallet({
@@ -104,14 +95,47 @@ const useEmbeddedWallet = () => {
104
95
  }
105
96
  }
106
97
  const passkeyWallet = {
107
- address: (yield ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.fetchPublicAddress())) || '',
108
- chain: ((_d = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _d === void 0 ? void 0 : _d.connectedChain) || '',
98
+ address: (yield ((_b = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _b === void 0 ? void 0 : _b.fetchPublicAddress())) || '',
99
+ chain: ((_c = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) === null || _c === void 0 ? void 0 : _c.connectedChain) || '',
109
100
  connected: true,
110
101
  connector: (turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletConnector) || {},
111
102
  id: embeddedWalletVerifiedCredential.id,
112
103
  };
113
104
  return Promise.resolve(passkeyWallet);
114
105
  });
106
+ const createEmbeddedWallet = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
107
+ var _d, _e, _f;
108
+ const jwt = (_d = getAuthToken()) !== null && _d !== void 0 ? _d : onboardingOnlyJwt;
109
+ const decodedJwt = decodeJwt(jwt);
110
+ if (!jwt || !decodedJwt) {
111
+ throw new Error('User is not logged in');
112
+ }
113
+ if (!isTurnkeyEnabled(projectSettings)) {
114
+ throw new Error('Passkey embedded wallet is not enabled. Go to the dashboard and make sure to have both Turnkey/Passkey Embedded wallets and at least one EVM network enabled. Also, check if EthereumWalletConnectors is in the DynamicContextProvider > settings > walletConnectors.');
115
+ }
116
+ const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
117
+ // if user doesn't have a wallet yet, show the passkey view to create an embedded wallet
118
+ if (!(userWaletsCredentials === null || userWaletsCredentials === void 0 ? void 0 : userWaletsCredentials.length)) {
119
+ if (((_f = (_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWalletSecurityMethods) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) === 0) {
120
+ return startPregeneratedWalletCreationFlow(jwt, decodedJwt);
121
+ }
122
+ return startEmbeddedWalletCreationFlow();
123
+ }
124
+ internalSetShowAuthFlow(false);
125
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt);
126
+ // if user logged in with MM for example, just continue the flow
127
+ if (!embeddedWalletVerifiedCredential) {
128
+ return Promise.resolve(primaryWallet);
129
+ }
130
+ // if user already has embedded wallet, returns it
131
+ return returnEmbeddedWallet(jwt, embeddedWalletVerifiedCredential);
132
+ }), [
133
+ internalSetShowAuthFlow,
134
+ onboardingOnlyJwt,
135
+ projectSettings,
136
+ startPregeneratedWalletCreationFlow,
137
+ primaryWallet,
138
+ ]);
115
139
  return {
116
140
  createEmbeddedWallet,
117
141
  userHasEmbeddedWallet,
@@ -7,6 +7,7 @@ var React = require('react');
7
7
  const useEventListener = (eventName, handler) => {
8
8
  // Create a ref that stores handler
9
9
  const savedHandler = React.useRef(handler);
10
+ savedHandler.current = handler;
10
11
  React.useEffect(() => {
11
12
  // Define the listening target
12
13
  const targetElement = window;
@@ -19,7 +20,7 @@ const useEventListener = (eventName, handler) => {
19
20
  return () => {
20
21
  targetElement.removeEventListener(eventName, listener);
21
22
  };
22
- }, [eventName]);
23
+ }, [eventName, handler]);
23
24
  };
24
25
 
25
26
  exports.useEventListener = useEventListener;