@dynamic-labs/sdk-react-core 2.1.0-alpha.8 → 2.1.0-alpha.9

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 (90) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.cjs +1 -1
  3. package/package.js +1 -1
  4. package/package.json +12 -12
  5. package/src/lib/components/Portal/Portal.cjs +2 -1
  6. package/src/lib/components/Portal/Portal.js +2 -1
  7. package/src/lib/components/SandboxIndicatorWrapper/SandboxIndicatorWrapper.d.ts +0 -2
  8. package/src/lib/components/Toolkit/components/index.d.ts +0 -6
  9. package/src/lib/components/Tooltip/Tooltip.cjs +2 -1
  10. package/src/lib/components/Tooltip/Tooltip.js +2 -1
  11. package/src/lib/context/DynamicContext/DynamicContext.cjs +0 -1
  12. package/src/lib/context/DynamicContext/DynamicContext.js +0 -1
  13. package/src/lib/context/DynamicContext/types/index.d.ts +0 -1
  14. package/src/lib/shared/utils/classes/storage/localStorage.cjs +2 -2
  15. package/src/lib/shared/utils/classes/storage/localStorage.js +2 -2
  16. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.cjs +14 -0
  17. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.d.ts +3 -0
  18. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.js +10 -0
  19. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/index.d.ts +1 -0
  20. package/src/lib/utils/functions/createUserProfile/createUserProfile.cjs +1 -2
  21. package/src/lib/utils/functions/createUserProfile/createUserProfile.js +1 -2
  22. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.cjs +3 -4
  23. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.d.ts +1 -1
  24. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js +4 -5
  25. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
  26. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.d.ts +3 -1
  27. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
  28. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.cjs +5 -5
  29. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.d.ts +3 -2
  30. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.js +5 -5
  31. package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.cjs +7 -2
  32. package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.js +7 -2
  33. package/src/lib/utils/functions/index.d.ts +1 -1
  34. package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.cjs +2 -1
  35. package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.js +2 -1
  36. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +15 -10
  37. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +7 -2
  38. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +15 -10
  39. package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.cjs +3 -3
  40. package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.js +3 -3
  41. package/src/lib/utils/hooks/useElementById/useElementById.cjs +33 -18
  42. package/src/lib/utils/hooks/useElementById/useElementById.d.ts +3 -1
  43. package/src/lib/utils/hooks/useElementById/useElementById.js +33 -18
  44. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +9 -4
  45. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +6 -3
  46. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +9 -4
  47. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs +2 -2
  48. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.d.ts +1 -1
  49. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +2 -2
  50. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.cjs +7 -7
  51. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.d.ts +2 -2
  52. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.js +7 -7
  53. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +24 -27
  54. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.d.ts +6 -3
  55. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +24 -27
  56. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +16 -11
  57. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.d.ts +4 -1
  58. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +16 -11
  59. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +2 -2
  60. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +2 -2
  61. package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.cjs +2 -1
  62. package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.js +2 -1
  63. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +2 -3
  64. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +2 -3
  65. package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.cjs +2 -1
  66. package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.js +2 -1
  67. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +5 -4
  68. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +6 -1
  69. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +5 -4
  70. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +2 -1
  71. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +2 -1
  72. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.cjs → createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs} +17 -18
  73. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.d.ts → createEmbeddedWalletRequest/createEmbeddedWalletRequest.d.ts} +7 -3
  74. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js → createEmbeddedWalletRequest/createEmbeddedWalletRequest.js} +17 -18
  75. package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/index.d.ts +1 -0
  76. package/src/lib/views/Passkey/utils/index.d.ts +1 -2
  77. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +2 -2
  78. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +2 -2
  79. package/src/lib/views/viewToComponentMap.d.ts +4 -2
  80. package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.cjs +2 -1
  81. package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.js +2 -1
  82. package/src/lib/utils/functions/isEmbeddedWalletPresent/index.d.ts +0 -1
  83. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.cjs +0 -19
  84. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.d.ts +0 -1
  85. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.js +0 -15
  86. package/src/lib/views/Passkey/utils/createEmbeddedWalletWithPasskey/index.d.ts +0 -1
  87. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +0 -65
  88. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +0 -16
  89. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +0 -61
  90. package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +0 -1
@@ -30,9 +30,8 @@ import '../../../context/AccountExistsContext/AccountExistsContext.js';
30
30
  import '../../../context/UserWalletsContext/UserWalletsContext.js';
31
31
  import '../../../context/VerificationContext/VerificationContext.js';
32
32
  import 'react-dom';
33
- import { createEmbeddedWalletWithPasskey } from '../../../views/Passkey/utils/createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js';
33
+ import { createEmbeddedWalletRequest } from '../../../views/Passkey/utils/createEmbeddedWalletRequest/createEmbeddedWalletRequest.js';
34
34
  import { findPasskeyEmailWalletConnector } from '../../../views/Passkey/utils/findPasskeyEmailWalletConnector/findPasskeyEmailWalletConnector.js';
35
- import { createPregeneratedWallet } from '../../../views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js';
36
35
  import { findSmartWallet, initializeSmartWallet } from '../useWalletConnectors/utils/smartWallet/smartWallet.js';
37
36
  import { findPrimaryEmbeddedChain } from '../../../views/Passkey/utils/findPrimaryEmbeddedChain/findPrimaryEmbeddedChain.js';
38
37
  import '../../../context/WalletContext/WalletContext.js';
@@ -80,7 +79,7 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
80
79
  // This hook needs to be async that's why it's not using useMutation
81
80
  const useCreateDynamicEmbeddedWalletMutation = () => {
82
81
  var _a, _b;
83
- const { setPrimaryWalletId, setCallback, setUser, user, setShowAuthFlow, projectSettings, } = useInternalDynamicContext();
82
+ const { setPrimaryWalletId, setUser, user, setShowAuthFlow, projectSettings, } = useInternalDynamicContext();
84
83
  const [isLoading, setIsLoading] = useState(false);
85
84
  const [error, setError] = useState();
86
85
  const embeddedChainConfig = ((_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.embeddedWallets) === null || _b === void 0 ? void 0 : _b.chainConfigurations) || [];
@@ -88,19 +87,18 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
88
87
  const embeddedChains = embeddedChainConfig
89
88
  .filter((chain) => chain.enabled)
90
89
  .map((c) => (c.name === 'SOL' ? ChainEnum.Sol : ChainEnum.Evm));
91
- const createDynamicEmbeddedWalletMutation = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, }) {
90
+ const createDynamicEmbeddedWalletMutation = useCallback((_c) => __awaiter(void 0, [_c], void 0, function* ({ authToken, decodedJwt, environmentId, walletConnectorOptions, withAuthenticator, options, chains, }) {
92
91
  var _d, _e;
93
92
  setIsLoading(true);
94
- const createEmbeddedWalletMethodToUse = withAuthenticator
95
- ? createEmbeddedWalletWithPasskey
96
- : createPregeneratedWallet;
97
93
  try {
98
- const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield createEmbeddedWalletMethodToUse({
94
+ const { embeddedWalletVerifiedCredential, decodedJwt: updatedDecodedJwt, signersResponse, walletConnector, } = yield createEmbeddedWalletRequest({
99
95
  authToken,
100
- chains: embeddedChains,
96
+ chains: chains !== null && chains !== void 0 ? chains : embeddedChains,
101
97
  environmentId,
102
98
  user: user !== null && user !== void 0 ? user : createUserProfile(decodedJwt),
103
99
  walletConnector: findPasskeyEmailWalletConnector(walletConnectorOptions, primaryEmbeddedChain),
100
+ webAuthnAttestation: options === null || options === void 0 ? void 0 : options.webAuthnAttestation,
101
+ withAuthenticator,
104
102
  });
105
103
  const turnkeyVerifiedCredentials = (_d = updatedDecodedJwt === null || updatedDecodedJwt === void 0 ? void 0 : updatedDecodedJwt.verifiedCredentials) === null || _d === void 0 ? void 0 : _d.find(({ walletName }) => walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey'));
106
104
  /** It's not authenticated if it's a turnkey wallet that still hasn't created a passkey */
@@ -137,7 +135,14 @@ const useCreateDynamicEmbeddedWalletMutation = () => {
137
135
  finally {
138
136
  setIsLoading(false);
139
137
  }
140
- }), [setCallback, setPrimaryWalletId, setShowAuthFlow, setUser, user]);
138
+ }), [
139
+ embeddedChains,
140
+ primaryEmbeddedChain,
141
+ setPrimaryWalletId,
142
+ setShowAuthFlow,
143
+ setUser,
144
+ user,
145
+ ]);
141
146
  return {
142
147
  createDynamicEmbeddedWalletMutation,
143
148
  error,
@@ -77,16 +77,16 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
77
77
  // This hook can be used to get all of the user's scopes (nft/token gates)
78
78
  // and check if the user has a specific scopes with some logic AND/OR (nft/token gate)
79
79
  const useDynamicScopes = () => {
80
- const { decodedAuthToken } = useInternalDynamicContext.useInternalDynamicContext();
80
+ const { user } = useInternalDynamicContext.useInternalDynamicContext();
81
81
  const userScopes = React.useMemo(() => {
82
- const { scope } = decodedAuthToken || {};
82
+ const { scope } = user || {};
83
83
  if (!scope)
84
84
  return [];
85
85
  // We need to split the scopes string into an array of scopes
86
86
  // because the scopes string is a space separated string of scopes
87
87
  // e.g. '"scope": "customerservice marketing tech"'
88
88
  return scope.split(' ');
89
- }, [decodedAuthToken]);
89
+ }, [user]);
90
90
  // If customer will set scopes to an empty string it will return false
91
91
  const userHasScopes = (scopes, logicOperator = 'OR') => {
92
92
  if (!scopes.length)
@@ -73,16 +73,16 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
73
73
  // This hook can be used to get all of the user's scopes (nft/token gates)
74
74
  // and check if the user has a specific scopes with some logic AND/OR (nft/token gate)
75
75
  const useDynamicScopes = () => {
76
- const { decodedAuthToken } = useInternalDynamicContext();
76
+ const { user } = useInternalDynamicContext();
77
77
  const userScopes = useMemo(() => {
78
- const { scope } = decodedAuthToken || {};
78
+ const { scope } = user || {};
79
79
  if (!scope)
80
80
  return [];
81
81
  // We need to split the scopes string into an array of scopes
82
82
  // because the scopes string is a space separated string of scopes
83
83
  // e.g. '"scope": "customerservice marketing tech"'
84
84
  return scope.split(' ');
85
- }, [decodedAuthToken]);
85
+ }, [user]);
86
86
  // If customer will set scopes to an empty string it will return false
87
87
  const userHasScopes = (scopes, logicOperator = 'OR') => {
88
88
  if (!scopes.length)
@@ -5,26 +5,41 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
6
  var React = require('react');
7
7
 
8
- const useElementById = (elementId = 'dynamic-modal') => {
9
- const modalRootElement = React.useRef(null);
10
- if (typeof window !== 'undefined') {
11
- modalRootElement.current = window.document.getElementById(elementId);
8
+ const useElementById = () => {
9
+ const targetElement = React.useRef(null);
10
+ const createRootElement = (elementId = 'dynamic-modal', parentElementId) => {
11
+ if (typeof window === 'undefined')
12
+ return targetElement;
13
+ const isElementCreated = window.document.getElementById(elementId);
14
+ if (isElementCreated) {
15
+ targetElement.current = isElementCreated;
16
+ return targetElement;
17
+ }
18
+ const parentElement = parentElementId
19
+ ? window.document.getElementById(parentElementId)
20
+ : undefined;
12
21
  // creates div and attaches it to the body
13
- if (!modalRootElement.current) {
14
- modalRootElement.current = window.document.createElement('div');
15
- modalRootElement.current.setAttribute('id', elementId);
16
- modalRootElement.current.setAttribute('class', elementId);
17
- modalRootElement.current.setAttribute('data-testid', elementId);
18
- /**
19
- * Setting the pointer-events to auto is necessary to allow the user to interact with the modal
20
- * when other packages that use a modal set the pointer-events to none on the body element.
21
- * For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
22
- */
23
- modalRootElement.current.style.pointerEvents = 'auto';
24
- window.document.body.appendChild(modalRootElement.current);
22
+ targetElement.current = window.document.createElement('div');
23
+ targetElement.current.setAttribute('id', elementId);
24
+ targetElement.current.setAttribute('class', elementId);
25
+ targetElement.current.setAttribute('data-testid', elementId);
26
+ /**
27
+ * Setting the pointer-events to auto is necessary to allow the user to interact with the modal
28
+ * when other packages that use a modal set the pointer-events to none on the body element.
29
+ * For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
30
+ */
31
+ targetElement.current.style.pointerEvents = 'auto';
32
+ if (parentElement) {
33
+ parentElement.appendChild(targetElement.current);
34
+ }
35
+ else {
36
+ window.document.body.appendChild(targetElement.current);
25
37
  }
26
- }
27
- return modalRootElement;
38
+ return targetElement;
39
+ };
40
+ return {
41
+ createRootElement,
42
+ };
28
43
  };
29
44
 
30
45
  exports.useElementById = useElementById;
@@ -1,2 +1,4 @@
1
1
  import React from 'react';
2
- export declare const useElementById: (elementId?: string) => React.MutableRefObject<HTMLElement>;
2
+ export declare const useElementById: () => {
3
+ createRootElement: (elementId?: string, parentElementId?: string) => React.MutableRefObject<HTMLElement>;
4
+ };
@@ -1,26 +1,41 @@
1
1
  'use client'
2
2
  import { useRef } from 'react';
3
3
 
4
- const useElementById = (elementId = 'dynamic-modal') => {
5
- const modalRootElement = useRef(null);
6
- if (typeof window !== 'undefined') {
7
- modalRootElement.current = window.document.getElementById(elementId);
4
+ const useElementById = () => {
5
+ const targetElement = useRef(null);
6
+ const createRootElement = (elementId = 'dynamic-modal', parentElementId) => {
7
+ if (typeof window === 'undefined')
8
+ return targetElement;
9
+ const isElementCreated = window.document.getElementById(elementId);
10
+ if (isElementCreated) {
11
+ targetElement.current = isElementCreated;
12
+ return targetElement;
13
+ }
14
+ const parentElement = parentElementId
15
+ ? window.document.getElementById(parentElementId)
16
+ : undefined;
8
17
  // creates div and attaches it to the body
9
- if (!modalRootElement.current) {
10
- modalRootElement.current = window.document.createElement('div');
11
- modalRootElement.current.setAttribute('id', elementId);
12
- modalRootElement.current.setAttribute('class', elementId);
13
- modalRootElement.current.setAttribute('data-testid', elementId);
14
- /**
15
- * Setting the pointer-events to auto is necessary to allow the user to interact with the modal
16
- * when other packages that use a modal set the pointer-events to none on the body element.
17
- * For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
18
- */
19
- modalRootElement.current.style.pointerEvents = 'auto';
20
- window.document.body.appendChild(modalRootElement.current);
18
+ targetElement.current = window.document.createElement('div');
19
+ targetElement.current.setAttribute('id', elementId);
20
+ targetElement.current.setAttribute('class', elementId);
21
+ targetElement.current.setAttribute('data-testid', elementId);
22
+ /**
23
+ * Setting the pointer-events to auto is necessary to allow the user to interact with the modal
24
+ * when other packages that use a modal set the pointer-events to none on the body element.
25
+ * For example: https://reservoir.tools/ use chakra-ui and sets the pointer-events to none on the body element.
26
+ */
27
+ targetElement.current.style.pointerEvents = 'auto';
28
+ if (parentElement) {
29
+ parentElement.appendChild(targetElement.current);
30
+ }
31
+ else {
32
+ window.document.body.appendChild(targetElement.current);
21
33
  }
22
- }
23
- return modalRootElement;
34
+ return targetElement;
35
+ };
36
+ return {
37
+ createRootElement,
38
+ };
24
39
  };
25
40
 
26
41
  export { useElementById };
@@ -93,12 +93,17 @@ const useEmbeddedWallet = () => {
93
93
  const { createEmbeddedWallet: createTurnkeyEmbeddedWallet, createOrRestoreSession, createPasskey, getPasskeys, isSessionActive, sendOneTimeCode, } = useSecureEnclaveEmbeddedWallet.useSecureEnclaveEmbeddedWallet();
94
94
  const { isLoadingEmbeddedWallet } = WalletContext.useWalletContext();
95
95
  const userHasEmbeddedWallet = () => hasEmbeddedWallet.hasEmbeddedWallet(getAuthToken.getAuthToken() || onboardingOnlyJwt);
96
- const createEmbeddedWallet = React.useCallback((chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
97
- if (yield canCreateMPCWallet(chain)) {
98
- const wallet = yield createCoinbaseMPCWallet(chain);
96
+ /**
97
+ * Creates Dynamic embedded wallet according to the settings
98
+ * @param chains - array of chains to create the wallet for
99
+ * @param options - options for the wallet creation
100
+ */
101
+ const createEmbeddedWallet = React.useCallback((chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
102
+ if (yield canCreateMPCWallet(chains)) {
103
+ const wallet = yield createCoinbaseMPCWallet(chains);
99
104
  return wallet;
100
105
  }
101
- const wallet = yield createTurnkeyEmbeddedWallet(chain);
106
+ const wallet = yield createTurnkeyEmbeddedWallet(chains, options);
102
107
  return wallet;
103
108
  }), [canCreateMPCWallet, createCoinbaseMPCWallet, createTurnkeyEmbeddedWallet]);
104
109
  return {
@@ -1,4 +1,5 @@
1
1
  import { ChainEnum } from '@dynamic-labs/sdk-api-core';
2
+ import { WebAuthnAttestation } from '@dynamic-labs/wallet-connector-core';
2
3
  import { Wallet } from '../../../shared';
3
4
  /**
4
5
  * @returns {
@@ -9,13 +10,15 @@ import { Wallet } from '../../../shared';
9
10
  * }
10
11
  */
11
12
  export declare const useEmbeddedWallet: () => {
12
- readonly createEmbeddedWallet: (chain?: ChainEnum) => Promise<Wallet | undefined>;
13
+ readonly createEmbeddedWallet: (chains?: ChainEnum[], options?: {
14
+ webAuthnAttestation: WebAuthnAttestation;
15
+ }) => Promise<Wallet | undefined>;
13
16
  readonly createOrRestoreSession: ({ oneTimeCode }: {
14
17
  oneTimeCode?: string | undefined;
15
18
  }) => Promise<string>;
16
- readonly createPasskey: ({ oneTimeCode }: {
19
+ readonly createPasskey: ({ oneTimeCode, }: {
17
20
  oneTimeCode?: string | undefined;
18
- }) => Promise<import("dist/packages/wallet-connector-core/src").WebAuthnAttestation>;
21
+ }) => Promise<WebAuthnAttestation>;
19
22
  readonly createPassword: (showIntro?: boolean | undefined) => Promise<string>;
20
23
  readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
21
24
  readonly isLoadingEmbeddedWallet: boolean;
@@ -89,12 +89,17 @@ const useEmbeddedWallet = () => {
89
89
  const { createEmbeddedWallet: createTurnkeyEmbeddedWallet, createOrRestoreSession, createPasskey, getPasskeys, isSessionActive, sendOneTimeCode, } = useSecureEnclaveEmbeddedWallet();
90
90
  const { isLoadingEmbeddedWallet } = useWalletContext();
91
91
  const userHasEmbeddedWallet = () => hasEmbeddedWallet(getAuthToken() || onboardingOnlyJwt);
92
- const createEmbeddedWallet = useCallback((chain) => __awaiter(void 0, void 0, void 0, function* () {
93
- if (yield canCreateMPCWallet(chain)) {
94
- const wallet = yield createCoinbaseMPCWallet(chain);
92
+ /**
93
+ * Creates Dynamic embedded wallet according to the settings
94
+ * @param chains - array of chains to create the wallet for
95
+ * @param options - options for the wallet creation
96
+ */
97
+ const createEmbeddedWallet = useCallback((chains, options) => __awaiter(void 0, void 0, void 0, function* () {
98
+ if (yield canCreateMPCWallet(chains)) {
99
+ const wallet = yield createCoinbaseMPCWallet(chains);
95
100
  return wallet;
96
101
  }
97
- const wallet = yield createTurnkeyEmbeddedWallet(chain);
102
+ const wallet = yield createTurnkeyEmbeddedWallet(chains, options);
98
103
  return wallet;
99
104
  }), [canCreateMPCWallet, createCoinbaseMPCWallet, createTurnkeyEmbeddedWallet]);
100
105
  return {
@@ -175,7 +175,7 @@ const useCoinbaseMPC = () => {
175
175
  }
176
176
  return undefined;
177
177
  }), [linkCoinbaseMPCWallet, handleLogOut, setError]);
178
- const createCoinbaseMPCWallet = React.useCallback((jwt_1, decodedJwt_1, ...args_1) => _tslib.__awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chain = sdkApiCore.ChainEnum.Evm, password) {
178
+ const createCoinbaseMPCWallet = React.useCallback((jwt_1, decodedJwt_1, ...args_1) => _tslib.__awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chains = [sdkApiCore.ChainEnum.Evm], password) {
179
179
  var _b;
180
180
  const connector = (_b = findCoinbaseMPCWallet.findCoinbaseMPCWallet(walletConnectorOptions)) === null || _b === void 0 ? void 0 : _b.walletConnector;
181
181
  if (!connector || !walletConnectorCore.isCoinbaseMpcWalletConnector(connector)) {
@@ -193,7 +193,7 @@ const useCoinbaseMPC = () => {
193
193
  if (fetchAuthToken) {
194
194
  connector.setAuthTokenFetcher(fetchAuthToken);
195
195
  }
196
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
196
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
197
197
  // if user already has embedded wallet, set it as primary wallet and return
198
198
  if (embeddedWalletVerifiedCredential) {
199
199
  return returnExistingCoinbaseMPCWallet(connector, decodedJwt, embeddedWalletVerifiedCredential);
@@ -1,5 +1,5 @@
1
1
  import { ChainEnum, DynamicJwt } from '@dynamic-labs/sdk-api-core';
2
2
  import { Wallet } from '../../../../../shared';
3
3
  export declare const useCoinbaseMPC: () => {
4
- createCoinbaseMPCWallet: (jwt: string, decodedJwt: DynamicJwt, chain?: ChainEnum, password?: string) => Promise<Wallet | undefined>;
4
+ createCoinbaseMPCWallet: (jwt: string, decodedJwt: DynamicJwt, chains?: ChainEnum[], password?: string) => Promise<Wallet | undefined>;
5
5
  };
@@ -171,7 +171,7 @@ const useCoinbaseMPC = () => {
171
171
  }
172
172
  return undefined;
173
173
  }), [linkCoinbaseMPCWallet, handleLogOut, setError]);
174
- const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chain = ChainEnum.Evm, password) {
174
+ const createCoinbaseMPCWallet = useCallback((jwt_1, decodedJwt_1, ...args_1) => __awaiter(void 0, [jwt_1, decodedJwt_1, ...args_1], void 0, function* (jwt, decodedJwt, chains = [ChainEnum.Evm], password) {
175
175
  var _b;
176
176
  const connector = (_b = findCoinbaseMPCWallet(walletConnectorOptions)) === null || _b === void 0 ? void 0 : _b.walletConnector;
177
177
  if (!connector || !isCoinbaseMpcWalletConnector(connector)) {
@@ -189,7 +189,7 @@ const useCoinbaseMPC = () => {
189
189
  if (fetchAuthToken) {
190
190
  connector.setAuthTokenFetcher(fetchAuthToken);
191
191
  }
192
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
192
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
193
193
  // if user already has embedded wallet, set it as primary wallet and return
194
194
  if (embeddedWalletVerifiedCredential) {
195
195
  return returnExistingCoinbaseMPCWallet(connector, decodedJwt, embeddedWalletVerifiedCredential);
@@ -101,12 +101,12 @@ const useMPCEmbeddedWallet = () => {
101
101
  const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = WalletContext.useWalletContext();
102
102
  const userHasEmbeddedWallet = () => hasEmbeddedWallet.hasEmbeddedWallet(getAuthToken.getAuthToken() || onboardingOnlyJwt, 'coinbase');
103
103
  const createPassword = React.useCallback((showIntro) => _tslib.__awaiter(void 0, void 0, void 0, function* () { return internalCreatePassword(showIntro); }), [internalCreatePassword]);
104
- const prepareToCreateMPCWallet = React.useCallback((chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
104
+ const prepareToCreateMPCWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
105
105
  var _a, _b, _c, _d;
106
106
  const jwt = (_a = getAuthToken.getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
107
107
  const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
108
108
  const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
109
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
109
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
110
110
  const isManualMode = ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _b === void 0 ? void 0 : _b.automaticEmbeddedWalletCreation) === false;
111
111
  // if user has a wallet and it's not embedded,
112
112
  // throw error to follow another flow and set up the right wallet
@@ -126,24 +126,24 @@ const useMPCEmbeddedWallet = () => {
126
126
  connector.setRequiredPassword((_d = requiresPasswordForEmbeddedWallet.requiresPasswordForEmbeddedWallet(projectSettings)) !== null && _d !== void 0 ? _d : false);
127
127
  return { decodedJwt, embeddedWalletVerifiedCredential, jwt };
128
128
  }), [onboardingOnlyJwt, projectSettings, walletConnectorOptions]);
129
- const canCreateMPCWallet = React.useCallback((chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
129
+ const canCreateMPCWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
130
130
  try {
131
- yield prepareToCreateMPCWallet(chain);
131
+ yield prepareToCreateMPCWallet(chains);
132
132
  return true;
133
133
  }
134
134
  catch (e) {
135
135
  return false;
136
136
  }
137
137
  }), [prepareToCreateMPCWallet]);
138
- const createEmbeddedWallet = React.useCallback((chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
139
- const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chain);
138
+ const createEmbeddedWallet = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
139
+ const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chains);
140
140
  setIsLoadingEmbeddedWallet(true);
141
141
  let password;
142
142
  if (!embeddedWalletVerifiedCredential &&
143
143
  requiresPasswordForEmbeddedWalletOnSignup.requiresPasswordForEmbeddedWalletOnSignup(projectSettings)) {
144
144
  password = yield internalCreatePassword(false, true);
145
145
  }
146
- const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chain, password);
146
+ const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chains, password);
147
147
  setIsLoadingEmbeddedWallet(false);
148
148
  return wallet;
149
149
  }), [
@@ -9,8 +9,8 @@ import { Wallet } from '../../../../shared';
9
9
  * }
10
10
  */
11
11
  export declare const useMPCEmbeddedWallet: () => {
12
- readonly canCreateMPCWallet: (chain?: ChainEnum) => Promise<boolean>;
13
- readonly createEmbeddedWallet: (chain?: ChainEnum) => Promise<Wallet | undefined>;
12
+ readonly canCreateMPCWallet: (chains?: ChainEnum[]) => Promise<boolean>;
13
+ readonly createEmbeddedWallet: (chains?: ChainEnum[]) => Promise<Wallet | undefined>;
14
14
  readonly createPassword: (showIntro?: boolean) => Promise<string>;
15
15
  readonly isLoadingEmbeddedWallet: boolean;
16
16
  readonly userHasEmbeddedWallet: () => boolean;
@@ -97,12 +97,12 @@ const useMPCEmbeddedWallet = () => {
97
97
  const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = useWalletContext();
98
98
  const userHasEmbeddedWallet = () => hasEmbeddedWallet(getAuthToken() || onboardingOnlyJwt, 'coinbase');
99
99
  const createPassword = useCallback((showIntro) => __awaiter(void 0, void 0, void 0, function* () { return internalCreatePassword(showIntro); }), [internalCreatePassword]);
100
- const prepareToCreateMPCWallet = useCallback((chain) => __awaiter(void 0, void 0, void 0, function* () {
100
+ const prepareToCreateMPCWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
101
101
  var _a, _b, _c, _d;
102
102
  const jwt = (_a = getAuthToken()) !== null && _a !== void 0 ? _a : onboardingOnlyJwt;
103
103
  const { decodedJwt } = validateUserIsLoggedIn(jwt);
104
104
  const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
105
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
105
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
106
106
  const isManualMode = ((_b = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _b === void 0 ? void 0 : _b.automaticEmbeddedWalletCreation) === false;
107
107
  // if user has a wallet and it's not embedded,
108
108
  // throw error to follow another flow and set up the right wallet
@@ -122,24 +122,24 @@ const useMPCEmbeddedWallet = () => {
122
122
  connector.setRequiredPassword((_d = requiresPasswordForEmbeddedWallet(projectSettings)) !== null && _d !== void 0 ? _d : false);
123
123
  return { decodedJwt, embeddedWalletVerifiedCredential, jwt };
124
124
  }), [onboardingOnlyJwt, projectSettings, walletConnectorOptions]);
125
- const canCreateMPCWallet = useCallback((chain) => __awaiter(void 0, void 0, void 0, function* () {
125
+ const canCreateMPCWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
126
126
  try {
127
- yield prepareToCreateMPCWallet(chain);
127
+ yield prepareToCreateMPCWallet(chains);
128
128
  return true;
129
129
  }
130
130
  catch (e) {
131
131
  return false;
132
132
  }
133
133
  }), [prepareToCreateMPCWallet]);
134
- const createEmbeddedWallet = useCallback((chain) => __awaiter(void 0, void 0, void 0, function* () {
135
- const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chain);
134
+ const createEmbeddedWallet = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
135
+ const { decodedJwt, embeddedWalletVerifiedCredential, jwt } = yield prepareToCreateMPCWallet(chains);
136
136
  setIsLoadingEmbeddedWallet(true);
137
137
  let password;
138
138
  if (!embeddedWalletVerifiedCredential &&
139
139
  requiresPasswordForEmbeddedWalletOnSignup(projectSettings)) {
140
140
  password = yield internalCreatePassword(false, true);
141
141
  }
142
- const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chain, password);
142
+ const wallet = yield createCoinbaseMPCWallet(jwt, decodedJwt, chains, password);
143
143
  setIsLoadingEmbeddedWallet(false);
144
144
  return wallet;
145
145
  }), [
@@ -28,6 +28,7 @@ require('@dynamic-labs/multi-wallet');
28
28
  var getAuthToken = require('../../../functions/getAuthToken/getAuthToken.cjs');
29
29
  require('react-international-phone');
30
30
  var getUserWalletsFromVerifiedCredentials = require('../../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.cjs');
31
+ var addPasskeyIdentifierToWalletConnector = require('../../../functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.cjs');
31
32
  require('viem');
32
33
  require('viem/chains');
33
34
  var getEOAWallet = require('../../../functions/getEOAWallet/getEOAWallet.cjs');
@@ -113,7 +114,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
113
114
  const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, walletConnectorOptions, setUser, } = useInternalDynamicContext.useInternalDynamicContext();
114
115
  const { createTurnkeyWallet } = useTurnkey.useTurnkey();
115
116
  const { hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
116
- const turnkeyAuthIframeContainerRef = useElementById.useElementById(constants.iframeContainerId);
117
+ const { createRootElement } = useElementById.useElementById();
117
118
  const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = WalletContext.useWalletContext();
118
119
  const wallet = getEOAWallet.getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
119
120
  /**
@@ -124,14 +125,15 @@ const useSecureEnclaveEmbeddedWallet = () => {
124
125
  /**
125
126
  * Creates a new secure enclave embedded wallet according to the settings from the dashboard
126
127
  * @param chain - optional chain parameter to create the wallet for
128
+ * @param options - optional parameter contained more settings for the wallet creation
127
129
  * @returns Promise<Wallet | undefined>
128
130
  */
129
- const createEmbeddedWallet = React.useCallback((chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
131
+ const createEmbeddedWallet = React.useCallback((chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
130
132
  var _e, _f;
131
133
  const jwt = (_e = getAuthToken.getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
132
134
  const { decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(jwt);
133
135
  const userWaletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
134
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
136
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
135
137
  const isManualMode = ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.automaticEmbeddedWalletCreation) === false;
136
138
  // if user has a wallet and it's not embedded,
137
139
  // throw error to follow another flow and set up the right wallet
@@ -144,7 +146,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
144
146
  validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
145
147
  // TEMP: immediately disable loading state
146
148
  setIsLoadingEmbeddedWallet(false);
147
- return createTurnkeyWallet(jwt, decodedJwt, chain);
149
+ return createTurnkeyWallet(jwt, decodedJwt, chains, options);
148
150
  }), [
149
151
  createTurnkeyWallet,
150
152
  onboardingOnlyJwt,
@@ -165,6 +167,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
165
167
  if (turnkeyRecoveryHandler.isSessionActive()) {
166
168
  return errors.ACTIVE_SESSION;
167
169
  }
170
+ const turnkeyAuthIframeContainerRef = createRootElement(constants.iframeContainerId);
168
171
  // try to restore session if possible
169
172
  if (passkeyRecovery.canRestoreEmbeddedWalletSession((_j = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _j === void 0 ? void 0 : _j.sessionKeyDuration)) {
170
173
  try {
@@ -200,11 +203,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
200
203
  localStorage.LocalStorage.setToLS(localStorage$1.EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
201
204
  return errors.SESSION_CREATED;
202
205
  }), [
206
+ createRootElement,
203
207
  hasRecoveryEmail,
204
208
  onboardingOnlyJwt,
205
209
  primaryWallet,
206
210
  (_b = (_a = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk) === null || _a === void 0 ? void 0 : _a.embeddedWallets) === null || _b === void 0 ? void 0 : _b.sessionKeyDuration,
207
- turnkeyAuthIframeContainerRef,
208
211
  userHasEmbeddedWallet,
209
212
  wallet === null || wallet === void 0 ? void 0 : wallet.connector,
210
213
  ]);
@@ -212,14 +215,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
212
215
  * Creates a new passkey both for an existing wallet or a wallet to be created
213
216
  * @param oneTimeCode: string | undefined,
214
217
  *
215
- * @returns {
216
- * attestation: Attestation,
217
- * challenge: string,
218
- * displayName: string,
219
- * }
218
+ * @returns Promise<WebAuthnAttestation>
220
219
  */
221
- const createPasskey = React.useCallback((_q) => _tslib.__awaiter(void 0, [_q], void 0, function* ({ oneTimeCode }) {
222
- var _r, _s, _t;
220
+ const createPasskey = React.useCallback((_q) => _tslib.__awaiter(void 0, [_q], void 0, function* ({ oneTimeCode, }) {
221
+ var _r, _s;
223
222
  const { decodedJwt, jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn(getAuthToken.getAuthToken() || onboardingOnlyJwt);
224
223
  validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
225
224
  const turnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_r = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _r === void 0 ? void 0 : _r.chainConfigurations, decodedJwt.verifiedCredentials);
@@ -228,19 +227,16 @@ const useSecureEnclaveEmbeddedWallet = () => {
228
227
  }
229
228
  const walletConnector = turnkeyWallet.walletConnector;
230
229
  walletConnector.setEmail(user === null || user === void 0 ? void 0 : user.email);
231
- if (!(user === null || user === void 0 ? void 0 : user.email)) {
232
- const passkeyIdentifier = (user === null || user === void 0 ? void 0 : user.phoneNumber) ||
233
- ((_s = user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => vc.oauthDisplayName)) === null || _s === void 0 ? void 0 : _s.oauthDisplayName) ||
234
- '';
235
- walletConnector.setPasskeyIdentifier(passkeyIdentifier);
230
+ if (user && !(user === null || user === void 0 ? void 0 : user.email)) {
231
+ addPasskeyIdentifierToWalletConnector.addPasskeyIdentifierToWalletConnector(walletConnector, user);
236
232
  }
237
233
  const hasEmailVC = getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedJwt, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email);
238
234
  // return a new passkey if the user doesn't have a wallet yet or
239
235
  // none of the requirements to add a passkey to an existing wallet are met
240
- if (!(turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.id) || !hasEmailVC) {
236
+ if (!('id' in turnkeyWallet) || !hasEmailVC) {
241
237
  return walletConnector.getWebAuthnAttestation();
242
238
  }
243
- const organizationId = (_t = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _t === void 0 ? void 0 : _t.turnkeySubOrganizationId;
239
+ const organizationId = (_s = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _s === void 0 ? void 0 : _s.turnkeySubOrganizationId;
244
240
  if (!organizationId) {
245
241
  throw new utils.DynamicError('No sub organization id found for the wallet', errors.INVALID_WALLET_DATA);
246
242
  }
@@ -279,8 +275,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
279
275
  * @returns Promise<Passkey[]>
280
276
  */
281
277
  const getPasskeys = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
282
- var _u;
283
- const { jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_u = getAuthToken.getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
278
+ var _t;
279
+ const { jwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_t = getAuthToken.getAuthToken()) !== null && _t !== void 0 ? _t : onboardingOnlyJwt);
284
280
  const data = yield embeddedWallets.getUserPasskeys({
285
281
  environmentId: environmentId,
286
282
  userJwt: jwt,
@@ -299,11 +295,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
299
295
  * @returns Promise<'code_sent'>
300
296
  */
301
297
  const sendOneTimeCode = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
302
- var _v, _w, _x;
303
- const { jwt, decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_v = getAuthToken.getAuthToken()) !== null && _v !== void 0 ? _v : onboardingOnlyJwt);
298
+ var _u, _v, _w;
299
+ const { jwt, decodedJwt } = validateUserIsLoggedIn.validateUserIsLoggedIn((_u = getAuthToken.getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
304
300
  validateTurnkeyProviderEnabled.validateTurnkeyProviderEnabled(projectSettings);
305
- const targetTurnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.chainConfigurations, decodedJwt.verifiedCredentials);
306
- if (!targetTurnkeyWallet || !targetTurnkeyWallet.id) {
301
+ const targetTurnkeyWallet = findTurnkeyWallet.findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _v === void 0 ? void 0 : _v.chainConfigurations, decodedJwt.verifiedCredentials);
302
+ if (!targetTurnkeyWallet || !('id' in targetTurnkeyWallet)) {
307
303
  throw new utils.DynamicError('User does not have a valid secure enclave wallet', errors.INVALID_WALLET_DATA);
308
304
  }
309
305
  const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler.getEmbeddedWalletAuthHandler(targetTurnkeyWallet === null || targetTurnkeyWallet === void 0 ? void 0 : targetTurnkeyWallet.walletConnector);
@@ -312,7 +308,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
312
308
  if (isSessionActive) {
313
309
  throw new utils.DynamicError('Session is active. No need to create a new one', errors.ACTIVE_SESSION);
314
310
  }
315
- const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, constants.iframeElementId, getEmbeddedWalletSessionExpiration.getEmbeddedWalletSessionExpiration((_x = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _x === void 0 ? void 0 : _x.sessionKeyDuration));
311
+ const turnkeyAuthIframeContainerRef = createRootElement(constants.iframeContainerId);
312
+ const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, constants.iframeElementId, getEmbeddedWalletSessionExpiration.getEmbeddedWalletSessionExpiration((_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.sessionKeyDuration));
316
313
  if (!publicKey) {
317
314
  throw new utils.DynamicError(errors.ERROR_SENDING_CODE);
318
315
  }
@@ -326,10 +323,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
326
323
  turnkeyAuthenticatorHandler.recoveryUserId = response.turnkeyUserId;
327
324
  return errors.CODE_SENT;
328
325
  }), [
326
+ createRootElement,
329
327
  environmentId,
330
328
  onboardingOnlyJwt,
331
329
  projectSettings,
332
- turnkeyAuthIframeContainerRef,
333
330
  walletConnectorOptions,
334
331
  ]);
335
332
  return {