@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.
- package/CHANGELOG.md +32 -0
- package/package.cjs +2 -2
- package/package.js +2 -2
- package/package.json +10 -10
- package/src/index.cjs +4 -2
- package/src/index.d.ts +1 -1
- package/src/index.js +2 -1
- package/src/lib/Main.cjs +18 -21
- package/src/lib/Main.js +18 -21
- package/src/lib/components/NeedHelpSection/NeedHelpSection.cjs +84 -5
- package/src/lib/components/NeedHelpSection/NeedHelpSection.js +85 -6
- package/src/lib/components/NetworkPicker/NetworkPicker.cjs +8 -6
- package/src/lib/components/NetworkPicker/NetworkPicker.d.ts +2 -1
- package/src/lib/components/NetworkPicker/NetworkPicker.js +8 -6
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.cjs +68 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.d.ts +6 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/PasskeyCreatedSuccessBanner.js +64 -0
- package/src/lib/components/PasskeyCreatedSuccessBanner/index.d.ts +1 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.cjs +24 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.d.ts +6 -0
- package/src/lib/components/SecureTurnkeyWalletCard/SecureTurnkeyWalletCard.js +20 -0
- package/src/lib/components/SecureTurnkeyWalletCard/index.d.ts +1 -0
- package/src/lib/components/SendBalanceForm/SendBalanceForm.cjs +4 -1
- package/src/lib/components/SendBalanceForm/SendBalanceForm.js +4 -1
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.cjs +5 -2
- package/src/lib/components/SyncPasskeyFlow/SyncPasskeyFlow.js +5 -2
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.cjs +6 -2
- package/src/lib/components/TransactionConfirmationPageLayout/TransactionConfirmationPageLayout.js +6 -2
- package/src/lib/components/index.d.ts +2 -0
- package/src/lib/context/DynamicContext/DynamicContext.cjs +8 -5
- package/src/lib/context/DynamicContext/DynamicContext.js +8 -5
- package/src/lib/context/DynamicContext/hooks/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/index.d.ts +1 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.cjs +23 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.d.ts +4 -0
- package/src/lib/context/DynamicContext/hooks/useShowPasskeyCreateSuccess/useShowPasskeyCreateSuccess.js +19 -0
- package/src/lib/context/DynamicContext/types/index.d.ts +2 -1
- package/src/lib/data/api.cjs +14 -10
- package/src/lib/data/api.d.ts +2 -2
- package/src/lib/data/api.js +14 -10
- package/src/lib/layout/DynamicAuthLayout/Header/header.cjs +9 -11
- package/src/lib/layout/DynamicAuthLayout/Header/header.js +10 -12
- package/src/lib/locale/en/translation.cjs +77 -3
- package/src/lib/locale/en/translation.d.ts +76 -2
- package/src/lib/locale/en/translation.js +77 -3
- package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.cjs +6 -2
- package/src/lib/modals/SignMessageConfirmationModal/SignMessageConfirmationModal.js +6 -2
- package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.cjs +1 -1
- package/src/lib/modals/SignMessageConfirmationModal/getProperErrorMessage.js +1 -1
- package/src/lib/styles/index.shadow.cjs +1 -1
- package/src/lib/styles/index.shadow.js +1 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
- package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
- package/src/lib/utils/hooks/index.d.ts +2 -0
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.cjs +1 -6
- package/src/lib/utils/hooks/multiWallet/useSyncPrimaryWallet/useSyncPrimaryWallet.js +1 -6
- package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.cjs +3 -0
- package/src/lib/utils/hooks/useConnectWallet/useConnectWallet.js +3 -0
- package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.cjs +7 -8
- package/src/lib/utils/hooks/useConnectedWalletsNetworkValidation/useConnectedWalletsNetworkValidation.js +7 -8
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/index.d.ts +1 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +83 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +15 -0
- package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +79 -0
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.cjs +11 -3
- package/src/lib/utils/hooks/useDynamicLayoutData/useDynamicLayoutData.js +11 -3
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +57 -33
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +1 -1
- package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +57 -33
- package/src/lib/utils/hooks/useEventListener/useEventListener.cjs +2 -1
- package/src/lib/utils/hooks/useEventListener/useEventListener.js +2 -1
- package/src/lib/utils/hooks/useIsTurnkeyWallet/index.d.ts +1 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +37 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.d.ts +6 -0
- package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +33 -0
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.cjs +9 -5
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.d.ts +0 -1
- package/src/lib/utils/hooks/useWalletConnectors/useWalletConnectors.js +10 -6
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.cjs +20 -21
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.d.ts +1 -2
- package/src/lib/utils/hooks/useWalletEventListeners/useWalletEventListeners.js +20 -21
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.cjs +32 -9
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.d.ts +0 -1
- package/src/lib/utils/hooks/useWalletsConnectionState/useWalletsConnectionState.js +33 -10
- package/src/lib/views/AccountExistsView/AccountExistsView.cjs +1 -1
- package/src/lib/views/AccountExistsView/AccountExistsView.js +1 -1
- package/src/lib/views/CollectUserDataView/CollectUserDataView.cjs +1 -1
- package/src/lib/views/CollectUserDataView/CollectUserDataView.js +1 -1
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.cjs +1 -1
- package/src/lib/views/EmailWalletOTPVerificationView/EmailWalletOTPVerificationView.js +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.cjs +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/MagicSocialSignIn/MagicSocialSignIn.js +1 -1
- package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.cjs +2 -5
- package/src/lib/views/LoginView/sections/SocialSignInSection/SocialSignInSection.js +2 -5
- package/src/lib/views/LoginView/useLoginView.cjs +101 -84
- package/src/lib/views/LoginView/useLoginView.js +102 -85
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.cjs +6 -3
- package/src/lib/views/NetworkNotSupported/NetworkNotSupported.js +6 -3
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +20 -50
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +1 -6
- package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +20 -50
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.cjs +7 -2
- package/src/lib/views/Passkey/PasskeyRecovery/BundleValidation/PasskeyBundleRecovery.js +7 -2
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.cjs +11 -7
- package/src/lib/views/Passkey/PasskeyRecovery/CompleteRecovery/PasskeyCompleteRecovery.js +11 -7
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +8 -10
- package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +8 -10
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +56 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +13 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +52 -0
- package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/index.d.ts +1 -0
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +1 -1
- package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +1 -1
- package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.cjs +1 -1
- package/src/lib/views/QrCodeView/QrCodeContainer/QrCodeContainer.js +1 -1
- package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.cjs +12 -2
- package/src/lib/views/TransactionConfirmationView/TransactionConfirmationView.js +12 -2
- package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.cjs +3 -0
- package/src/lib/views/TransactionConfirmationView/helpers/transactionErrorMessage.js +4 -1
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.cjs +6 -3
- package/src/lib/widgets/DynamicWidget/components/ActiveWalletInformation/ActiveWalletInformation.js +6 -3
- package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.cjs +2 -2
- package/src/lib/widgets/DynamicWidget/components/DynamicNav/DynamicNav.js +2 -2
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetHeader.js +2 -1
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.cjs +8 -5
- package/src/lib/widgets/DynamicWidget/components/DynamicWidgetHeader/DynamicWidgetWalletHeader/DynamicWidgetWalletHeader.js +8 -5
- package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.cjs +2 -3
- package/src/lib/widgets/DynamicWidget/components/EmailOTPConnectorPendingSignModalContent/EmailOTPConnectorPendingSignModalContent.js +2 -3
- package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.cjs +11 -2
- package/src/lib/widgets/DynamicWidget/components/EmptyWallets/EmptyWallets.js +11 -2
- package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.cjs +1 -2
- package/src/lib/widgets/DynamicWidget/components/Wallet/Wallet.js +1 -2
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.cjs +1 -3
- package/src/lib/widgets/DynamicWidget/prompts/PendingAccountSwitchModal/SwitchOrUseActiveAccountView/SwitchOrUseActiveAccountView.js +1 -3
- package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.cjs +1 -1
- package/src/lib/widgets/DynamicWidget/prompts/QrCodeModalView/QrCodeModalView.js +1 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.cjs +2 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/ManagePasskeysWidgetView.js +2 -1
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.cjs +16 -6
- package/src/lib/widgets/DynamicWidget/views/ManagePasskeysWidgetView/PasskeyCard/PasskeyCard.js +16 -6
- package/src/lib/utils/functions/getEnabledProviders/index.cjs +0 -7
- 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,
|
|
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
|
|
61
|
-
|
|
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,
|
|
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
|
|
57
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
66
|
-
|
|
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
|
|
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
|
-
(
|
|
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 ((
|
|
112
|
-
chain: ((
|
|
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,
|
|
@@ -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
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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
|
|
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
|
-
(
|
|
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 ((
|
|
108
|
-
chain: ((
|
|
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;
|