@dynamic-labs/sdk-react-core 2.1.0-alpha.7 → 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 (102) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/package.cjs +2 -2
  3. package/package.js +2 -2
  4. package/package.json +13 -13
  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 +5 -2
  12. package/src/lib/context/DynamicContext/DynamicContext.js +5 -2
  13. package/src/lib/context/DynamicContext/types/index.d.ts +0 -1
  14. package/src/lib/data/api/wallets/wallets.cjs +21 -5
  15. package/src/lib/data/api/wallets/wallets.d.ts +4 -0
  16. package/src/lib/data/api/wallets/wallets.js +21 -6
  17. package/src/lib/shared/utils/classes/storage/localStorage.cjs +2 -2
  18. package/src/lib/shared/utils/classes/storage/localStorage.js +2 -2
  19. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.cjs +14 -0
  20. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.d.ts +3 -0
  21. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.js +10 -0
  22. package/src/lib/utils/functions/addPasskeyIdentifierToWalletConnector/index.d.ts +1 -0
  23. package/src/lib/utils/functions/createUserProfile/createUserProfile.cjs +1 -2
  24. package/src/lib/utils/functions/createUserProfile/createUserProfile.js +1 -2
  25. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.cjs +3 -4
  26. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.d.ts +1 -1
  27. package/src/lib/utils/functions/findEmbeddedWalletFromVerifiedCredentials/findEmbeddedWalletFromVerifiedCredentials.js +4 -5
  28. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.cjs +1 -1
  29. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.d.ts +3 -1
  30. package/src/lib/utils/functions/findTurnkeyWallet/findTurnkeyWallet.js +1 -1
  31. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.cjs +5 -5
  32. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.d.ts +3 -2
  33. package/src/lib/utils/functions/getUserVerifiedCredentialType/getUserVerifiedCredentialType.js +5 -5
  34. package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.cjs +7 -2
  35. package/src/lib/utils/functions/hasEmbeddedWallet/hasEmbeddedWallet.js +7 -2
  36. package/src/lib/utils/functions/index.d.ts +1 -1
  37. package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.cjs +2 -1
  38. package/src/lib/utils/hooks/useConfirmationModal/useConfirmationModal.js +2 -1
  39. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.cjs +16 -11
  40. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.d.ts +7 -2
  41. package/src/lib/utils/hooks/useCreateDynamicEmbeddedWalletMutation/useCreateDynamicEmbeddedWalletMutation.js +16 -11
  42. package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.cjs +3 -3
  43. package/src/lib/utils/hooks/useDynamicScopes/useDynamicScopes.js +3 -3
  44. package/src/lib/utils/hooks/useElementById/useElementById.cjs +33 -18
  45. package/src/lib/utils/hooks/useElementById/useElementById.d.ts +3 -1
  46. package/src/lib/utils/hooks/useElementById/useElementById.js +33 -18
  47. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.cjs +9 -4
  48. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.d.ts +6 -3
  49. package/src/lib/utils/hooks/useEmbeddedWallet/useEmbeddedWallet.js +9 -4
  50. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.cjs +6 -6
  51. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.d.ts +1 -1
  52. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useCoinbaseMPC/useCoinbaseMPC.js +6 -6
  53. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.cjs +7 -7
  54. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.d.ts +2 -2
  55. package/src/lib/utils/hooks/useEmbeddedWallet/useMPCEmbeddedWallet/useMPCEmbeddedWallet.js +7 -7
  56. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.cjs +24 -27
  57. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.d.ts +6 -3
  58. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useSecureEnclaveEmbeddedWallet.js +24 -27
  59. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.cjs +16 -11
  60. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.d.ts +4 -1
  61. package/src/lib/utils/hooks/useEmbeddedWallet/useSecureEnclaveEmbeddedWallet/useTurnkey/useTurnkey.js +16 -11
  62. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.cjs +2 -2
  63. package/src/lib/utils/hooks/useIsTurnkeyWallet/useIsTurnkeyWallet.js +2 -2
  64. package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.cjs +2 -1
  65. package/src/lib/utils/hooks/usePasskeyRecovery/usePasskeyRecovery.js +2 -1
  66. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.cjs +13 -4
  67. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.d.ts +10 -2
  68. package/src/lib/utils/hooks/usePrimaryWalletId/usePrimaryWalletId.js +13 -4
  69. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.cjs +2 -3
  70. package/src/lib/views/NetworkNotSupportedSwitchManual/NetworkNotSupportedSwitchManual.js +2 -3
  71. package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.cjs +2 -1
  72. package/src/lib/views/Passkey/EmbeddedAuthChoiceCards/EmbeddedAuthChoiceCards.js +2 -1
  73. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.cjs +5 -4
  74. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.d.ts +6 -1
  75. package/src/lib/views/Passkey/PasskeyIntroView/PasskeyIntroView.js +5 -4
  76. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.cjs +2 -1
  77. package/src/lib/views/Passkey/PasskeyRecovery/InitRecovery/PasskeyInitRecovery.js +2 -1
  78. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.cjs → createEmbeddedWalletRequest/createEmbeddedWalletRequest.cjs} +17 -18
  79. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.d.ts → createEmbeddedWalletRequest/createEmbeddedWalletRequest.d.ts} +7 -3
  80. package/src/lib/views/Passkey/utils/{createEmbeddedWalletWithPasskey/createEmbeddedWalletWithPasskey.js → createEmbeddedWalletRequest/createEmbeddedWalletRequest.js} +17 -18
  81. package/src/lib/views/Passkey/utils/createEmbeddedWalletRequest/index.d.ts +1 -0
  82. package/src/lib/views/Passkey/utils/index.d.ts +1 -2
  83. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.cjs +2 -2
  84. package/src/lib/views/Passkey/utils/passkeyRecovery/passkeyRecovery.js +2 -2
  85. package/src/lib/views/WalletList/WalletList.cjs +3 -6
  86. package/src/lib/views/WalletList/WalletList.js +3 -6
  87. package/src/lib/views/WalletLockedView/WalletLockedView.cjs +2 -8
  88. package/src/lib/views/WalletLockedView/WalletLockedView.js +2 -8
  89. package/src/lib/views/viewToComponentMap.d.ts +4 -2
  90. package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.cjs +2 -1
  91. package/src/lib/widgets/DynamicWidget/components/PromptModal/PromptModal.js +2 -1
  92. package/src/lib/widgets/DynamicWidget/hooks/useFetchNameService/useFetchNameService.cjs +1 -1
  93. package/src/lib/widgets/DynamicWidget/hooks/useFetchNameService/useFetchNameService.js +1 -1
  94. package/src/lib/utils/functions/isEmbeddedWalletPresent/index.d.ts +0 -1
  95. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.cjs +0 -19
  96. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.d.ts +0 -1
  97. package/src/lib/utils/functions/isEmbeddedWalletPresent/isEmbeddedWalletPresent.js +0 -15
  98. package/src/lib/views/Passkey/utils/createEmbeddedWalletWithPasskey/index.d.ts +0 -1
  99. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.cjs +0 -65
  100. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.d.ts +0 -16
  101. package/src/lib/views/Passkey/utils/createPregeneratedWallet/createPregeneratedWallet.js +0 -61
  102. package/src/lib/views/Passkey/utils/createPregeneratedWallet/index.d.ts +0 -1
@@ -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 {
@@ -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
  *
@@ -14,13 +15,15 @@ import { Wallet } from '../../../../shared';
14
15
  * }
15
16
  */
16
17
  export declare const useSecureEnclaveEmbeddedWallet: () => {
17
- readonly createEmbeddedWallet: (chain?: ChainEnum) => Promise<Wallet | undefined>;
18
+ readonly createEmbeddedWallet: (chains?: ChainEnum[], options?: {
19
+ webAuthnAttestation: WebAuthnAttestation;
20
+ }) => Promise<Wallet | undefined>;
18
21
  readonly createOrRestoreSession: ({ oneTimeCode }: {
19
22
  oneTimeCode?: string;
20
23
  }) => Promise<string>;
21
- readonly createPasskey: ({ oneTimeCode }: {
24
+ readonly createPasskey: ({ oneTimeCode, }: {
22
25
  oneTimeCode?: string;
23
- }) => Promise<import("@dynamic-labs/wallet-connector-core").WebAuthnAttestation>;
26
+ }) => Promise<WebAuthnAttestation>;
24
27
  readonly getPasskeys: () => Promise<import("@dynamic-labs/sdk-api-core").UserPasskey[]>;
25
28
  readonly isLoadingEmbeddedWallet: boolean;
26
29
  readonly isSessionActive: boolean;
@@ -24,6 +24,7 @@ import '@dynamic-labs/multi-wallet';
24
24
  import { getAuthToken } from '../../../functions/getAuthToken/getAuthToken.js';
25
25
  import 'react-international-phone';
26
26
  import { getUserWalletsFromVerifiedCredentials } from '../../../functions/getUserWalletsFromVerifiedCredentials/getUserWalletsFromVerifiedCredentials.js';
27
+ import { addPasskeyIdentifierToWalletConnector } from '../../../functions/addPasskeyIdentifierToWalletConnector/addPasskeyIdentifierToWalletConnector.js';
27
28
  import 'viem';
28
29
  import 'viem/chains';
29
30
  import { getEOAWallet } from '../../../functions/getEOAWallet/getEOAWallet.js';
@@ -109,7 +110,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
109
110
  const { projectSettings, onboardingOnlyJwt, primaryWallet, user, environmentId, walletConnectorOptions, setUser, } = useInternalDynamicContext();
110
111
  const { createTurnkeyWallet } = useTurnkey();
111
112
  const { hasRecoveryEmail } = useIsTurnkeyWallet();
112
- const turnkeyAuthIframeContainerRef = useElementById(iframeContainerId);
113
+ const { createRootElement } = useElementById();
113
114
  const { isLoadingEmbeddedWallet, setIsLoadingEmbeddedWallet } = useWalletContext();
114
115
  const wallet = getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
115
116
  /**
@@ -120,14 +121,15 @@ const useSecureEnclaveEmbeddedWallet = () => {
120
121
  /**
121
122
  * Creates a new secure enclave embedded wallet according to the settings from the dashboard
122
123
  * @param chain - optional chain parameter to create the wallet for
124
+ * @param options - optional parameter contained more settings for the wallet creation
123
125
  * @returns Promise<Wallet | undefined>
124
126
  */
125
- const createEmbeddedWallet = useCallback((chain) => __awaiter(void 0, void 0, void 0, function* () {
127
+ const createEmbeddedWallet = useCallback((chains, options) => __awaiter(void 0, void 0, void 0, function* () {
126
128
  var _e, _f;
127
129
  const jwt = (_e = getAuthToken()) !== null && _e !== void 0 ? _e : onboardingOnlyJwt;
128
130
  const { decodedJwt } = validateUserIsLoggedIn(jwt);
129
131
  const userWaletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
130
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
132
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
131
133
  const isManualMode = ((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.automaticEmbeddedWalletCreation) === false;
132
134
  // if user has a wallet and it's not embedded,
133
135
  // throw error to follow another flow and set up the right wallet
@@ -140,7 +142,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
140
142
  validateTurnkeyProviderEnabled(projectSettings);
141
143
  // TEMP: immediately disable loading state
142
144
  setIsLoadingEmbeddedWallet(false);
143
- return createTurnkeyWallet(jwt, decodedJwt, chain);
145
+ return createTurnkeyWallet(jwt, decodedJwt, chains, options);
144
146
  }), [
145
147
  createTurnkeyWallet,
146
148
  onboardingOnlyJwt,
@@ -161,6 +163,7 @@ const useSecureEnclaveEmbeddedWallet = () => {
161
163
  if (turnkeyRecoveryHandler.isSessionActive()) {
162
164
  return ACTIVE_SESSION;
163
165
  }
166
+ const turnkeyAuthIframeContainerRef = createRootElement(iframeContainerId);
164
167
  // try to restore session if possible
165
168
  if (canRestoreEmbeddedWalletSession((_j = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _j === void 0 ? void 0 : _j.sessionKeyDuration)) {
166
169
  try {
@@ -196,11 +199,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
196
199
  LocalStorage.setToLS(EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
197
200
  return SESSION_CREATED;
198
201
  }), [
202
+ createRootElement,
199
203
  hasRecoveryEmail,
200
204
  onboardingOnlyJwt,
201
205
  primaryWallet,
202
206
  (_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,
203
- turnkeyAuthIframeContainerRef,
204
207
  userHasEmbeddedWallet,
205
208
  wallet === null || wallet === void 0 ? void 0 : wallet.connector,
206
209
  ]);
@@ -208,14 +211,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
208
211
  * Creates a new passkey both for an existing wallet or a wallet to be created
209
212
  * @param oneTimeCode: string | undefined,
210
213
  *
211
- * @returns {
212
- * attestation: Attestation,
213
- * challenge: string,
214
- * displayName: string,
215
- * }
214
+ * @returns Promise<WebAuthnAttestation>
216
215
  */
217
- const createPasskey = useCallback((_q) => __awaiter(void 0, [_q], void 0, function* ({ oneTimeCode }) {
218
- var _r, _s, _t;
216
+ const createPasskey = useCallback((_q) => __awaiter(void 0, [_q], void 0, function* ({ oneTimeCode, }) {
217
+ var _r, _s;
219
218
  const { decodedJwt, jwt } = validateUserIsLoggedIn(getAuthToken() || onboardingOnlyJwt);
220
219
  validateTurnkeyProviderEnabled(projectSettings);
221
220
  const turnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_r = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _r === void 0 ? void 0 : _r.chainConfigurations, decodedJwt.verifiedCredentials);
@@ -224,19 +223,16 @@ const useSecureEnclaveEmbeddedWallet = () => {
224
223
  }
225
224
  const walletConnector = turnkeyWallet.walletConnector;
226
225
  walletConnector.setEmail(user === null || user === void 0 ? void 0 : user.email);
227
- if (!(user === null || user === void 0 ? void 0 : user.email)) {
228
- const passkeyIdentifier = (user === null || user === void 0 ? void 0 : user.phoneNumber) ||
229
- ((_s = user === null || user === void 0 ? void 0 : user.verifiedCredentials.find((vc) => vc.oauthDisplayName)) === null || _s === void 0 ? void 0 : _s.oauthDisplayName) ||
230
- '';
231
- walletConnector.setPasskeyIdentifier(passkeyIdentifier);
226
+ if (user && !(user === null || user === void 0 ? void 0 : user.email)) {
227
+ addPasskeyIdentifierToWalletConnector(walletConnector, user);
232
228
  }
233
229
  const hasEmailVC = getUserVerifiedCredentialType(decodedJwt, JwtVerifiedCredentialFormatEnum.Email);
234
230
  // return a new passkey if the user doesn't have a wallet yet or
235
231
  // none of the requirements to add a passkey to an existing wallet are met
236
- if (!(turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.id) || !hasEmailVC) {
232
+ if (!('id' in turnkeyWallet) || !hasEmailVC) {
237
233
  return walletConnector.getWebAuthnAttestation();
238
234
  }
239
- const organizationId = (_t = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _t === void 0 ? void 0 : _t.turnkeySubOrganizationId;
235
+ const organizationId = (_s = turnkeyWallet === null || turnkeyWallet === void 0 ? void 0 : turnkeyWallet.walletProperties) === null || _s === void 0 ? void 0 : _s.turnkeySubOrganizationId;
240
236
  if (!organizationId) {
241
237
  throw new DynamicError('No sub organization id found for the wallet', INVALID_WALLET_DATA);
242
238
  }
@@ -275,8 +271,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
275
271
  * @returns Promise<Passkey[]>
276
272
  */
277
273
  const getPasskeys = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
278
- var _u;
279
- const { jwt } = validateUserIsLoggedIn((_u = getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
274
+ var _t;
275
+ const { jwt } = validateUserIsLoggedIn((_t = getAuthToken()) !== null && _t !== void 0 ? _t : onboardingOnlyJwt);
280
276
  const data = yield getUserPasskeys({
281
277
  environmentId: environmentId,
282
278
  userJwt: jwt,
@@ -295,11 +291,11 @@ const useSecureEnclaveEmbeddedWallet = () => {
295
291
  * @returns Promise<'code_sent'>
296
292
  */
297
293
  const sendOneTimeCode = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
298
- var _v, _w, _x;
299
- const { jwt, decodedJwt } = validateUserIsLoggedIn((_v = getAuthToken()) !== null && _v !== void 0 ? _v : onboardingOnlyJwt);
294
+ var _u, _v, _w;
295
+ const { jwt, decodedJwt } = validateUserIsLoggedIn((_u = getAuthToken()) !== null && _u !== void 0 ? _u : onboardingOnlyJwt);
300
296
  validateTurnkeyProviderEnabled(projectSettings);
301
- const targetTurnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.chainConfigurations, decodedJwt.verifiedCredentials);
302
- if (!targetTurnkeyWallet || !targetTurnkeyWallet.id) {
297
+ const targetTurnkeyWallet = findTurnkeyWalletByPrimaryChain(walletConnectorOptions, (_v = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _v === void 0 ? void 0 : _v.chainConfigurations, decodedJwt.verifiedCredentials);
298
+ if (!targetTurnkeyWallet || !('id' in targetTurnkeyWallet)) {
303
299
  throw new DynamicError('User does not have a valid secure enclave wallet', INVALID_WALLET_DATA);
304
300
  }
305
301
  const turnkeyAuthenticatorHandler = getEmbeddedWalletAuthHandler(targetTurnkeyWallet === null || targetTurnkeyWallet === void 0 ? void 0 : targetTurnkeyWallet.walletConnector);
@@ -308,7 +304,8 @@ const useSecureEnclaveEmbeddedWallet = () => {
308
304
  if (isSessionActive) {
309
305
  throw new DynamicError('Session is active. No need to create a new one', ACTIVE_SESSION);
310
306
  }
311
- const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, iframeElementId, getEmbeddedWalletSessionExpiration((_x = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _x === void 0 ? void 0 : _x.sessionKeyDuration));
307
+ const turnkeyAuthIframeContainerRef = createRootElement(iframeContainerId);
308
+ const publicKey = yield turnkeyAuthenticatorHandler.initRecovery('email', turnkeyAuthIframeContainerRef.current, iframeElementId, getEmbeddedWalletSessionExpiration((_w = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _w === void 0 ? void 0 : _w.sessionKeyDuration));
312
309
  if (!publicKey) {
313
310
  throw new DynamicError(ERROR_SENDING_CODE);
314
311
  }
@@ -322,10 +319,10 @@ const useSecureEnclaveEmbeddedWallet = () => {
322
319
  turnkeyAuthenticatorHandler.recoveryUserId = response.turnkeyUserId;
323
320
  return CODE_SENT;
324
321
  }), [
322
+ createRootElement,
325
323
  environmentId,
326
324
  onboardingOnlyJwt,
327
325
  projectSettings,
328
- turnkeyAuthIframeContainerRef,
329
326
  walletConnectorOptions,
330
327
  ]);
331
328
  return {
@@ -88,11 +88,13 @@ const useTurnkey = () => {
88
88
  const { projectSettings, setPrimaryWalletId, walletConnectorOptions, setShowAuthFlow, environmentId, } = useInternalDynamicContext.useInternalDynamicContext();
89
89
  const { setView } = ViewContext.useViewContext();
90
90
  const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation.useCreateDynamicEmbeddedWalletMutation();
91
- const startPregeneratedWalletCreationFlow = React.useCallback((jwt, decodedJwt) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
91
+ const startHeadlessEmbeddedWalletCreationFlow = React.useCallback((jwt, decodedJwt, chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
92
92
  yield createDynamicEmbeddedWalletMutation({
93
93
  authToken: jwt,
94
+ chains,
94
95
  decodedJwt,
95
96
  environmentId,
97
+ options,
96
98
  walletConnectorOptions,
97
99
  withAuthenticator: false,
98
100
  });
@@ -107,12 +109,12 @@ const useTurnkey = () => {
107
109
  walletConnectorOptions,
108
110
  setShowAuthFlow,
109
111
  ]);
110
- const startEmbeddedWalletCreationFlow = React.useCallback(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
112
+ const startPasskeyEmbeddedWalletCreationFlow = React.useCallback((chains) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
111
113
  setShowAuthFlow(true, {
112
114
  ignoreIfIsEmbeddedWidget: false,
113
115
  performMultiWalletChecks: false,
114
116
  });
115
- setView('passkey-intro');
117
+ setView('passkey-intro', { chains });
116
118
  return new Promise((resolve, reject) => {
117
119
  dynamicEvents.dynamicEvents.once('embeddedWalletCreated', (wallet) => resolve(wallet));
118
120
  dynamicEvents.dynamicEvents.once('embeddedWalletFailed', (error) => {
@@ -161,10 +163,10 @@ const useTurnkey = () => {
161
163
  };
162
164
  return Promise.resolve(passkeyWallet);
163
165
  }), [setPrimaryWalletId, walletConnectorOptions]);
164
- const createTurnkeyWallet = React.useCallback((jwt, decodedJwt, chain) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
166
+ const createTurnkeyWallet = React.useCallback((jwt, decodedJwt, chains, options) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
165
167
  var _e, _f, _g, _h;
166
168
  const isManualMode = ((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _e === void 0 ? void 0 : _e.automaticEmbeddedWalletCreation) === false;
167
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
169
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials.findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
168
170
  const userWalletsCredentials = getUserWalletsFromVerifiedCredentials.getUserWalletsFromVerifiedCredentials(jwt);
169
171
  // If the user doesn't have a wallet, or if the customer is in Manual
170
172
  // Mode, we should attempt to create a new wallet. Note that if in manual
@@ -173,13 +175,15 @@ const useTurnkey = () => {
173
175
  if (!(userWalletsCredentials === null || userWalletsCredentials === void 0 ? void 0 : userWalletsCredentials.length) ||
174
176
  (!embeddedWalletVerifiedCredential && isManualMode)) {
175
177
  const hasEmailVC = getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedJwt, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email);
176
- if (!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
177
- hasEmailVC) {
178
- return startPregeneratedWalletCreationFlow(jwt, decodedJwt);
178
+ if ((!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
179
+ hasEmailVC) ||
180
+ (options === null || options === void 0 ? void 0 : options.webAuthnAttestation)) {
181
+ // create embedded wallet fully headless
182
+ return startHeadlessEmbeddedWalletCreationFlow(jwt, decodedJwt, chains, options);
179
183
  }
180
184
  else {
181
185
  // show the passkey view to create an embedded wallet
182
- return startEmbeddedWalletCreationFlow();
186
+ return startPasskeyEmbeddedWalletCreationFlow(chains);
183
187
  }
184
188
  }
185
189
  else {
@@ -214,8 +218,9 @@ const useTurnkey = () => {
214
218
  projectSettings,
215
219
  returnEmbeddedWallet,
216
220
  setShowAuthFlow,
217
- startEmbeddedWalletCreationFlow,
218
- startPregeneratedWalletCreationFlow,
221
+ startHeadlessEmbeddedWalletCreationFlow,
222
+ startPasskeyEmbeddedWalletCreationFlow,
223
+ walletConnectorOptions,
219
224
  ]);
220
225
  return {
221
226
  createTurnkeyWallet,
@@ -1,5 +1,8 @@
1
1
  import { DynamicJwt, ChainEnum } from '@dynamic-labs/sdk-api-core';
2
+ import { WebAuthnAttestation } from '@dynamic-labs/wallet-connector-core';
2
3
  import { Wallet } from '../../../../../shared';
3
4
  export declare const useTurnkey: () => {
4
- readonly createTurnkeyWallet: (jwt: string, decodedJwt: DynamicJwt, chain?: ChainEnum) => Promise<Wallet | undefined>;
5
+ readonly createTurnkeyWallet: (jwt: string, decodedJwt: DynamicJwt, chains?: ChainEnum[], options?: {
6
+ webAuthnAttestation: WebAuthnAttestation;
7
+ }) => Promise<Wallet | undefined>;
5
8
  };
@@ -84,11 +84,13 @@ const useTurnkey = () => {
84
84
  const { projectSettings, setPrimaryWalletId, walletConnectorOptions, setShowAuthFlow, environmentId, } = useInternalDynamicContext();
85
85
  const { setView } = useViewContext();
86
86
  const { createDynamicEmbeddedWalletMutation } = useCreateDynamicEmbeddedWalletMutation();
87
- const startPregeneratedWalletCreationFlow = useCallback((jwt, decodedJwt) => __awaiter(void 0, void 0, void 0, function* () {
87
+ const startHeadlessEmbeddedWalletCreationFlow = useCallback((jwt, decodedJwt, chains, options) => __awaiter(void 0, void 0, void 0, function* () {
88
88
  yield createDynamicEmbeddedWalletMutation({
89
89
  authToken: jwt,
90
+ chains,
90
91
  decodedJwt,
91
92
  environmentId,
93
+ options,
92
94
  walletConnectorOptions,
93
95
  withAuthenticator: false,
94
96
  });
@@ -103,12 +105,12 @@ const useTurnkey = () => {
103
105
  walletConnectorOptions,
104
106
  setShowAuthFlow,
105
107
  ]);
106
- const startEmbeddedWalletCreationFlow = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
108
+ const startPasskeyEmbeddedWalletCreationFlow = useCallback((chains) => __awaiter(void 0, void 0, void 0, function* () {
107
109
  setShowAuthFlow(true, {
108
110
  ignoreIfIsEmbeddedWidget: false,
109
111
  performMultiWalletChecks: false,
110
112
  });
111
- setView('passkey-intro');
113
+ setView('passkey-intro', { chains });
112
114
  return new Promise((resolve, reject) => {
113
115
  dynamicEvents.once('embeddedWalletCreated', (wallet) => resolve(wallet));
114
116
  dynamicEvents.once('embeddedWalletFailed', (error) => {
@@ -157,10 +159,10 @@ const useTurnkey = () => {
157
159
  };
158
160
  return Promise.resolve(passkeyWallet);
159
161
  }), [setPrimaryWalletId, walletConnectorOptions]);
160
- const createTurnkeyWallet = useCallback((jwt, decodedJwt, chain) => __awaiter(void 0, void 0, void 0, function* () {
162
+ const createTurnkeyWallet = useCallback((jwt, decodedJwt, chains, options) => __awaiter(void 0, void 0, void 0, function* () {
161
163
  var _e, _f, _g, _h;
162
164
  const isManualMode = ((_e = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _e === void 0 ? void 0 : _e.automaticEmbeddedWalletCreation) === false;
163
- const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chain);
165
+ const embeddedWalletVerifiedCredential = findEmbeddedWalletFromVerifiedCredentials(jwt, chains);
164
166
  const userWalletsCredentials = getUserWalletsFromVerifiedCredentials(jwt);
165
167
  // If the user doesn't have a wallet, or if the customer is in Manual
166
168
  // Mode, we should attempt to create a new wallet. Note that if in manual
@@ -169,13 +171,15 @@ const useTurnkey = () => {
169
171
  if (!(userWalletsCredentials === null || userWalletsCredentials === void 0 ? void 0 : userWalletsCredentials.length) ||
170
172
  (!embeddedWalletVerifiedCredential && isManualMode)) {
171
173
  const hasEmailVC = getUserVerifiedCredentialType(decodedJwt, JwtVerifiedCredentialFormatEnum.Email);
172
- if (!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
173
- hasEmailVC) {
174
- return startPregeneratedWalletCreationFlow(jwt, decodedJwt);
174
+ if ((!((_f = projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.sdk.embeddedWallets) === null || _f === void 0 ? void 0 : _f.forceAuthenticatorAtSignup) &&
175
+ hasEmailVC) ||
176
+ (options === null || options === void 0 ? void 0 : options.webAuthnAttestation)) {
177
+ // create embedded wallet fully headless
178
+ return startHeadlessEmbeddedWalletCreationFlow(jwt, decodedJwt, chains, options);
175
179
  }
176
180
  else {
177
181
  // show the passkey view to create an embedded wallet
178
- return startEmbeddedWalletCreationFlow();
182
+ return startPasskeyEmbeddedWalletCreationFlow(chains);
179
183
  }
180
184
  }
181
185
  else {
@@ -210,8 +214,9 @@ const useTurnkey = () => {
210
214
  projectSettings,
211
215
  returnEmbeddedWallet,
212
216
  setShowAuthFlow,
213
- startEmbeddedWalletCreationFlow,
214
- startPregeneratedWalletCreationFlow,
217
+ startHeadlessEmbeddedWalletCreationFlow,
218
+ startPasskeyEmbeddedWalletCreationFlow,
219
+ walletConnectorOptions,
215
220
  ]);
216
221
  return {
217
222
  createTurnkeyWallet,
@@ -78,7 +78,7 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
78
78
 
79
79
  const useIsTurnkeyWallet = () => {
80
80
  var _a;
81
- const { primaryWallet, user, decodedAuthToken } = useInternalDynamicContext.useInternalDynamicContext();
81
+ const { primaryWallet, user } = useInternalDynamicContext.useInternalDynamicContext();
82
82
  const wallet = getEOAWallet.getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
83
83
  const getTurnkeyVerifiedCredential = () => {
84
84
  if (!wallet || !user) {
@@ -115,7 +115,7 @@ const useIsTurnkeyWallet = () => {
115
115
  const isTurnkeyWalletWithoutAuthenticator = (isTurnkeyWallet && !hasTurnkeyVerifiedCredentialAuthenticator) ||
116
116
  isUnclaimedTurnkeyTheSignerOfScw;
117
117
  const hasRecoveryEmail = isTurnkeyWallet &&
118
- Boolean(getUserVerifiedCredentialType.getUserVerifiedCredentialType(decodedAuthToken, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email));
118
+ Boolean(getUserVerifiedCredentialType.getUserVerifiedCredentialType(user, sdkApiCore.JwtVerifiedCredentialFormatEnum.Email));
119
119
  return {
120
120
  hasRecoveryEmail,
121
121
  hasTurnkeyVerifiedCredentialAuthenticator,
@@ -74,7 +74,7 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
74
74
 
75
75
  const useIsTurnkeyWallet = () => {
76
76
  var _a;
77
- const { primaryWallet, user, decodedAuthToken } = useInternalDynamicContext();
77
+ const { primaryWallet, user } = useInternalDynamicContext();
78
78
  const wallet = getEOAWallet(primaryWallet, (user === null || user === void 0 ? void 0 : user.verifiedCredentials) || []);
79
79
  const getTurnkeyVerifiedCredential = () => {
80
80
  if (!wallet || !user) {
@@ -111,7 +111,7 @@ const useIsTurnkeyWallet = () => {
111
111
  const isTurnkeyWalletWithoutAuthenticator = (isTurnkeyWallet && !hasTurnkeyVerifiedCredentialAuthenticator) ||
112
112
  isUnclaimedTurnkeyTheSignerOfScw;
113
113
  const hasRecoveryEmail = isTurnkeyWallet &&
114
- Boolean(getUserVerifiedCredentialType(decodedAuthToken, JwtVerifiedCredentialFormatEnum.Email));
114
+ Boolean(getUserVerifiedCredentialType(user, JwtVerifiedCredentialFormatEnum.Email));
115
115
  return {
116
116
  hasRecoveryEmail,
117
117
  hasTurnkeyVerifiedCredentialAuthenticator,
@@ -91,7 +91,8 @@ var useInternalDynamicContext = require('../../../context/DynamicContext/useDyna
91
91
  const usePasskeyRecovery = () => {
92
92
  var _a, _b;
93
93
  const { authToken, environmentId, primaryWallet, projectSettings, setShowAuthFlow, user: user$1, setUser, } = useInternalDynamicContext.useInternalDynamicContext();
94
- const iframeContainerRef = useElementById.useElementById(constants.iframeContainerId);
94
+ const { createRootElement } = useElementById.useElementById();
95
+ const iframeContainerRef = createRootElement(constants.iframeContainerId);
95
96
  const { userHasEmbeddedWallet } = useEmbeddedWallet.useEmbeddedWallet();
96
97
  const { isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail } = useIsTurnkeyWallet.useIsTurnkeyWallet();
97
98
  const { initAuthMethod } = useInitEmbeddedWalletAuthMethod.useInitEmbeddedWalletAuthMethod();
@@ -87,7 +87,8 @@ import { useInternalDynamicContext } from '../../../context/DynamicContext/useDy
87
87
  const usePasskeyRecovery = () => {
88
88
  var _a, _b;
89
89
  const { authToken, environmentId, primaryWallet, projectSettings, setShowAuthFlow, user, setUser, } = useInternalDynamicContext();
90
- const iframeContainerRef = useElementById(iframeContainerId);
90
+ const { createRootElement } = useElementById();
91
+ const iframeContainerRef = createRootElement(iframeContainerId);
91
92
  const { userHasEmbeddedWallet } = useEmbeddedWallet();
92
93
  const { isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail } = useIsTurnkeyWallet();
93
94
  const { initAuthMethod } = useInitEmbeddedWalletAuthMethod();