@dynamic-labs/legacy-embedded-wallet-migration 0.0.0 → 5.0.0-rc.2

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 (172) hide show
  1. package/CHANGELOG.md +6718 -0
  2. package/LICENSE +21 -0
  3. package/README.md +5 -0
  4. package/_virtual/_tslib.js +32 -0
  5. package/package.js +4 -0
  6. package/package.json +31 -1
  7. package/src/index.d.ts +11 -0
  8. package/src/index.js +16 -0
  9. package/src/lib/constants.d.ts +8 -0
  10. package/src/lib/constants.js +12 -0
  11. package/src/lib/export/cleanupExport/cleanupExport.d.ts +4 -0
  12. package/src/lib/export/cleanupExport/cleanupExport.js +11 -0
  13. package/src/lib/export/cleanupExport/index.d.ts +1 -0
  14. package/src/lib/export/exportCredential/exportCredential.d.ts +7 -0
  15. package/src/lib/export/exportCredential/exportCredential.js +63 -0
  16. package/src/lib/export/exportCredential/index.d.ts +1 -0
  17. package/src/lib/export/exportEmbeddedWallet/exportEmbeddedWallet.d.ts +7 -0
  18. package/src/lib/export/exportEmbeddedWallet/exportEmbeddedWallet.js +21 -0
  19. package/src/lib/export/exportEmbeddedWallet/index.d.ts +1 -0
  20. package/src/lib/export/exportTurnkeyWalletCredential/exportTurnkeyWalletCredential.d.ts +9 -0
  21. package/src/lib/export/exportTurnkeyWalletCredential/exportTurnkeyWalletCredential.js +30 -0
  22. package/src/lib/export/exportTurnkeyWalletCredential/index.d.ts +1 -0
  23. package/src/lib/export/extractExportBundle/extractExportBundle.d.ts +5 -0
  24. package/src/lib/export/extractExportBundle/extractExportBundle.js +13 -0
  25. package/src/lib/export/extractExportBundle/index.d.ts +1 -0
  26. package/src/lib/export/handleExportInitCheck/handleExportInitCheck.d.ts +12 -0
  27. package/src/lib/export/handleExportInitCheck/handleExportInitCheck.js +34 -0
  28. package/src/lib/export/handleExportInitCheck/index.d.ts +1 -0
  29. package/src/lib/export/initExport/index.d.ts +1 -0
  30. package/src/lib/export/initExport/initExport.d.ts +6 -0
  31. package/src/lib/export/initExport/initExport.js +22 -0
  32. package/src/lib/getTurnkeyWalletId/getTurnkeyWalletId.d.ts +8 -0
  33. package/src/lib/getTurnkeyWalletId/getTurnkeyWalletId.js +27 -0
  34. package/src/lib/getTurnkeyWalletId/index.d.ts +1 -0
  35. package/src/lib/recovery/addEmailRecovery/addEmailRecovery.d.ts +7 -0
  36. package/src/lib/recovery/addEmailRecovery/addEmailRecovery.js +50 -0
  37. package/src/lib/recovery/addEmailRecovery/index.d.ts +1 -0
  38. package/src/lib/recovery/addNewPasskeyAuthenticator/addNewPasskeyAuthenticator.d.ts +7 -0
  39. package/src/lib/recovery/addNewPasskeyAuthenticator/addNewPasskeyAuthenticator.js +14 -0
  40. package/src/lib/recovery/addNewPasskeyAuthenticator/index.d.ts +1 -0
  41. package/src/lib/recovery/canRestoreEmbeddedWalletSession/canRestoreEmbeddedWalletSession.d.ts +2 -0
  42. package/src/lib/recovery/canRestoreEmbeddedWalletSession/canRestoreEmbeddedWalletSession.js +24 -0
  43. package/src/lib/recovery/canRestoreEmbeddedWalletSession/index.d.ts +1 -0
  44. package/src/lib/recovery/completePasskeyRecovery/completePasskeyRecovery.d.ts +7 -0
  45. package/src/lib/recovery/completePasskeyRecovery/completePasskeyRecovery.js +26 -0
  46. package/src/lib/recovery/completePasskeyRecovery/index.d.ts +1 -0
  47. package/src/lib/recovery/constants.d.ts +3 -0
  48. package/src/lib/recovery/constants.js +14 -0
  49. package/src/lib/recovery/index.d.ts +13 -0
  50. package/src/lib/recovery/initEmbeddedWalletSession/index.d.ts +1 -0
  51. package/src/lib/recovery/initEmbeddedWalletSession/initEmbeddedWalletSession.d.ts +11 -0
  52. package/src/lib/recovery/initEmbeddedWalletSession/initEmbeddedWalletSession.js +56 -0
  53. package/src/lib/recovery/passkeyRecoveryBundleValidation/index.d.ts +1 -0
  54. package/src/lib/recovery/passkeyRecoveryBundleValidation/passkeyRecoveryBundleValidation.d.ts +7 -0
  55. package/src/lib/recovery/passkeyRecoveryBundleValidation/passkeyRecoveryBundleValidation.js +32 -0
  56. package/src/lib/recovery/recoverTurnkeyWallet/index.d.ts +1 -0
  57. package/src/lib/recovery/recoverTurnkeyWallet/recoverTurnkeyWallet.d.ts +11 -0
  58. package/src/lib/recovery/recoverTurnkeyWallet/recoverTurnkeyWallet.js +72 -0
  59. package/src/lib/recovery/resentRecoveryEmail/index.d.ts +1 -0
  60. package/src/lib/recovery/resentRecoveryEmail/resentRecoveryEmail.d.ts +7 -0
  61. package/src/lib/recovery/resentRecoveryEmail/resentRecoveryEmail.js +43 -0
  62. package/src/lib/recovery/restoreEmbeddedWalletSession/index.d.ts +1 -0
  63. package/src/lib/recovery/restoreEmbeddedWalletSession/restoreEmbeddedWalletSession.d.ts +9 -0
  64. package/src/lib/recovery/restoreEmbeddedWalletSession/restoreEmbeddedWalletSession.js +33 -0
  65. package/src/lib/recovery/types.d.ts +5 -0
  66. package/src/lib/recovery/useEmbeddedWalletAuthenticator/index.d.ts +1 -0
  67. package/src/lib/recovery/useEmbeddedWalletAuthenticator/useEmbeddedWalletAuthenticator.d.ts +11 -0
  68. package/src/lib/recovery/useInitEmbeddedWalletAuthMethod/index.d.ts +1 -0
  69. package/src/lib/recovery/useInitEmbeddedWalletAuthMethod/useInitEmbeddedWalletAuthMethod.d.ts +29 -0
  70. package/src/lib/recovery/useInitEmbeddedWalletAuthMethod/useInitEmbeddedWalletAuthMethod.js +50 -0
  71. package/src/lib/recovery/usePasskeyRecovery/index.d.ts +1 -0
  72. package/src/lib/recovery/usePasskeyRecovery/usePasskeyRecovery.d.ts +32 -0
  73. package/src/lib/recovery/usePasskeyRecovery/usePasskeyRecovery.js +197 -0
  74. package/src/lib/restoreEmbeddedWallet/index.d.ts +1 -0
  75. package/src/lib/restoreEmbeddedWallet/restoreEmbeddedWallet.d.ts +5 -0
  76. package/src/lib/restoreEmbeddedWallet/restoreEmbeddedWallet.js +21 -0
  77. package/src/lib/sessionKeys/base64urlDecode/base64urlDecode.d.ts +1 -0
  78. package/src/lib/sessionKeys/base64urlDecode/base64urlDecode.js +12 -0
  79. package/src/lib/sessionKeys/base64urlDecode/index.d.ts +1 -0
  80. package/src/lib/sessionKeys/buf2hex/buf2hex.d.ts +1 -0
  81. package/src/lib/sessionKeys/buf2hex/buf2hex.js +7 -0
  82. package/src/lib/sessionKeys/buf2hex/index.d.ts +1 -0
  83. package/src/lib/sessionKeys/compressRawPublicKey/compressRawPublicKey.d.ts +1 -0
  84. package/src/lib/sessionKeys/compressRawPublicKey/compressRawPublicKey.js +15 -0
  85. package/src/lib/sessionKeys/compressRawPublicKey/index.d.ts +1 -0
  86. package/src/lib/sessionKeys/generateAndSaveSessionKey/generateAndSaveSessionKey.d.ts +7 -0
  87. package/src/lib/sessionKeys/generateAndSaveSessionKey/generateAndSaveSessionKey.js +19 -0
  88. package/src/lib/sessionKeys/generateAndSaveSessionKey/index.d.ts +1 -0
  89. package/src/lib/sessionKeys/generateSessionKey/generateSessionKey.d.ts +13 -0
  90. package/src/lib/sessionKeys/generateSessionKey/generateSessionKey.js +20 -0
  91. package/src/lib/sessionKeys/generateSessionKey/index.d.ts +1 -0
  92. package/src/lib/sessionKeys/getDecodedSessionKeys/getDecodedSessionKeys.d.ts +2 -0
  93. package/src/lib/sessionKeys/getDecodedSessionKeys/getDecodedSessionKeys.js +28 -0
  94. package/src/lib/sessionKeys/getDecodedSessionKeys/index.d.ts +1 -0
  95. package/src/lib/sessionKeys/getSessionNonceHeaders/getSessionNonceHeaders.d.ts +6 -0
  96. package/src/lib/sessionKeys/getSessionNonceHeaders/getSessionNonceHeaders.js +19 -0
  97. package/src/lib/sessionKeys/getSessionNonceHeaders/index.d.ts +1 -0
  98. package/src/lib/sessionKeys/p256Keygen/index.d.ts +1 -0
  99. package/src/lib/sessionKeys/p256Keygen/p256Keygen.d.ts +11 -0
  100. package/src/lib/sessionKeys/p256Keygen/p256Keygen.js +26 -0
  101. package/src/lib/sessionKeys/p256Sign/index.d.ts +1 -0
  102. package/src/lib/sessionKeys/p256Sign/p256Sign.d.ts +1 -0
  103. package/src/lib/sessionKeys/p256Sign/p256Sign.js +17 -0
  104. package/src/lib/sessionKeys/registerSessionKey/index.d.ts +1 -0
  105. package/src/lib/sessionKeys/registerSessionKey/registerSessionKey.d.ts +8 -0
  106. package/src/lib/sessionKeys/registerSessionKey/registerSessionKey.js +42 -0
  107. package/src/lib/sessionKeys/removeSessionKey/index.d.ts +1 -0
  108. package/src/lib/sessionKeys/removeSessionKey/removeSessionKey.d.ts +1 -0
  109. package/src/lib/sessionKeys/removeSessionKey/removeSessionKey.js +9 -0
  110. package/src/lib/sessionKeys/toEncodedFormat/index.d.ts +1 -0
  111. package/src/lib/sessionKeys/toEncodedFormat/toEncodedFormat.d.ts +1 -0
  112. package/src/lib/sessionKeys/toEncodedFormat/toEncodedFormat.js +15 -0
  113. package/src/lib/sessionKeys/useRegisterEmbeddedWalletSessionKey/index.d.ts +1 -0
  114. package/src/lib/sessionKeys/useRegisterEmbeddedWalletSessionKey/useRegisterEmbeddedWalletSessionKey.d.ts +11 -0
  115. package/src/lib/sessionKeys/useRegisterEmbeddedWalletSessionKey/useRegisterEmbeddedWalletSessionKey.js +101 -0
  116. package/src/lib/sessionKeys/useSetTurnkeyConnectorFetchers/index.d.ts +1 -0
  117. package/src/lib/sessionKeys/useSetTurnkeyConnectorFetchers/useSetTurnkeyConnectorFetchers.d.ts +4 -0
  118. package/src/lib/sessionKeys/useSetTurnkeyConnectorFetchers/useSetTurnkeyConnectorFetchers.js +18 -0
  119. package/src/lib/softDeleteEmbeddedWallet/index.d.ts +1 -0
  120. package/src/lib/softDeleteEmbeddedWallet/softDeleteEmbeddedWallet.d.ts +5 -0
  121. package/src/lib/softDeleteEmbeddedWallet/softDeleteEmbeddedWallet.js +21 -0
  122. package/src/lib/ui/AccountUpgradedView/AccountUpgradedView.d.ts +5 -0
  123. package/src/lib/ui/AccountUpgradedView/AccountUpgradedView.js +44 -0
  124. package/src/lib/ui/AccountUpgradedView/index.d.ts +1 -0
  125. package/src/lib/ui/LegacyEmbeddedWalletExport/LegacyEmbeddedWalletExport.d.ts +6 -0
  126. package/src/lib/ui/LegacyEmbeddedWalletExport/LegacyEmbeddedWalletExport.js +122 -0
  127. package/src/lib/ui/LegacyEmbeddedWalletExport/index.d.ts +1 -0
  128. package/src/lib/ui/LegacyWalletExportSheet/LegacyWalletExportSheet.d.ts +17 -0
  129. package/src/lib/ui/LegacyWalletExportSheet/LegacyWalletExportSheet.js +60 -0
  130. package/src/lib/ui/LegacyWalletExportSheet/index.d.ts +1 -0
  131. package/src/lib/ui/LegacyWalletMigrationContext/LegacyWalletMigrationContext.d.ts +42 -0
  132. package/src/lib/ui/LegacyWalletMigrationContext/LegacyWalletMigrationContext.js +109 -0
  133. package/src/lib/ui/LegacyWalletMigrationContext/index.d.ts +1 -0
  134. package/src/lib/ui/LegacyWalletMigrationModal/LegacyWalletMigrationModal.d.ts +15 -0
  135. package/src/lib/ui/LegacyWalletMigrationModal/LegacyWalletMigrationModal.js +51 -0
  136. package/src/lib/ui/LegacyWalletMigrationModal/index.d.ts +1 -0
  137. package/src/lib/ui/LegacyWalletMigrationRecoveryContext/LegacyWalletMigrationRecoveryContext.d.ts +25 -0
  138. package/src/lib/ui/LegacyWalletMigrationRecoveryContext/LegacyWalletMigrationRecoveryContext.js +213 -0
  139. package/src/lib/ui/LegacyWalletMigrationRecoveryContext/index.d.ts +1 -0
  140. package/src/lib/ui/WaasUpgradeView/WaasUpgradeView.d.ts +9 -0
  141. package/src/lib/ui/WaasUpgradeView/WaasUpgradeView.js +62 -0
  142. package/src/lib/ui/WaasUpgradeView/index.d.ts +1 -0
  143. package/src/lib/ui/WalletUpgradeFlowView/WalletUpgradeFlowView.d.ts +12 -0
  144. package/src/lib/ui/WalletUpgradeFlowView/WalletUpgradeFlowView.js +124 -0
  145. package/src/lib/ui/WalletUpgradeFlowView/index.d.ts +1 -0
  146. package/src/lib/ui/recovery/LegacyAddRecoveryEmailView/LegacyAddRecoveryEmailView.d.ts +9 -0
  147. package/src/lib/ui/recovery/LegacyAddRecoveryEmailView/LegacyAddRecoveryEmailView.js +21 -0
  148. package/src/lib/ui/recovery/LegacyAddRecoveryEmailView/index.d.ts +1 -0
  149. package/src/lib/ui/recovery/LegacyEmbeddedAuthChoiceView/LegacyEmbeddedAuthChoiceView.d.ts +9 -0
  150. package/src/lib/ui/recovery/LegacyEmbeddedAuthChoiceView/LegacyEmbeddedAuthChoiceView.js +29 -0
  151. package/src/lib/ui/recovery/LegacyEmbeddedAuthChoiceView/index.d.ts +1 -0
  152. package/src/lib/ui/recovery/LegacyPasskeyBundleRecoveryView/LegacyPasskeyBundleRecoveryView.d.ts +10 -0
  153. package/src/lib/ui/recovery/LegacyPasskeyBundleRecoveryView/LegacyPasskeyBundleRecoveryView.js +36 -0
  154. package/src/lib/ui/recovery/LegacyPasskeyBundleRecoveryView/index.d.ts +1 -0
  155. package/src/lib/ui/recovery/LegacyPasskeyCompleteRecoveryView/LegacyPasskeyCompleteRecoveryView.d.ts +8 -0
  156. package/src/lib/ui/recovery/LegacyPasskeyCompleteRecoveryView/LegacyPasskeyCompleteRecoveryView.js +22 -0
  157. package/src/lib/ui/recovery/LegacyPasskeyCompleteRecoveryView/index.d.ts +1 -0
  158. package/src/lib/ui/recovery/index.d.ts +4 -0
  159. package/src/lib/ui/useLegacyWalletExport/index.d.ts +1 -0
  160. package/src/lib/ui/useLegacyWalletExport/useLegacyWalletExport.d.ts +9 -0
  161. package/src/lib/ui/useLegacyWalletExport/useLegacyWalletExport.js +75 -0
  162. package/src/lib/upgradeToDynamicWaas/index.d.ts +1 -0
  163. package/src/lib/upgradeToDynamicWaas/upgradeToDynamicWaas.d.ts +13 -0
  164. package/src/lib/upgradeToDynamicWaas/upgradeToDynamicWaas.js +72 -0
  165. package/src/lib/useLegacyWalletsToMigrate/index.d.ts +2 -0
  166. package/src/lib/useLegacyWalletsToMigrate/useHasLegacyWalletsToMigrate.d.ts +6 -0
  167. package/src/lib/useLegacyWalletsToMigrate/useHasLegacyWalletsToMigrate.js +14 -0
  168. package/src/lib/useLegacyWalletsToMigrate/useLegacyWalletsToMigrate.d.ts +10 -0
  169. package/src/lib/useLegacyWalletsToMigrate/useLegacyWalletsToMigrate.js +32 -0
  170. package/src/lib/useUpgradeToDynamicWaas/index.d.ts +1 -0
  171. package/src/lib/useUpgradeToDynamicWaas/useUpgradeToDynamicWaas.d.ts +20 -0
  172. package/src/lib/useUpgradeToDynamicWaas/useUpgradeToDynamicWaas.js +44 -0
@@ -0,0 +1,26 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { iframeElementId } from '../constants.js';
4
+ import { recoverTurnkeyWallet } from '../recoverTurnkeyWallet/recoverTurnkeyWallet.js';
5
+
6
+ const removeIframeElement = () => {
7
+ var _a;
8
+ /* istanbul ignore next -- @preserve: SSR guard, unreachable in jsdom */
9
+ if (typeof window === 'undefined')
10
+ return;
11
+ const elementToRemove = window.document.getElementById(iframeElementId);
12
+ (_a = elementToRemove === null || elementToRemove === void 0 ? void 0 : elementToRemove.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(elementToRemove);
13
+ };
14
+ const completePasskeyRecovery = (_a) => __awaiter(void 0, [_a], void 0, function* ({ user, wallet, }) {
15
+ const { connector, user: updatedUser } = yield recoverTurnkeyWallet({
16
+ addPasskeyAuthenticator: false,
17
+ user,
18
+ wallet,
19
+ });
20
+ // clear iframeStamper and its reference
21
+ connector.getAuthenticatorHandler().clear();
22
+ removeIframeElement();
23
+ return updatedUser;
24
+ });
25
+
26
+ export { completePasskeyRecovery };
@@ -0,0 +1 @@
1
+ export { completePasskeyRecovery } from './completePasskeyRecovery';
@@ -0,0 +1,3 @@
1
+ export declare const iframeContainerId = "dyn-passkey-recovery-id";
2
+ export declare const iframeElementId = "dyn-passkey-recovery-element-id";
3
+ export declare const EMBEDDED_WALLET_SESSION_SETTINGS = "dynamic_embedded_wallet_session_settings";
@@ -0,0 +1,14 @@
1
+ 'use client'
2
+ // These three literals are intentionally duplicated from sdk-react-core for
3
+ // the duration of the recovery-flow migration. They must agree byte-for-byte:
4
+ // - iframeElementId is selected by `iframe[id*='dyn-passkey-recovery-element-id']`
5
+ // in sdk-react-core's `lib/styles/overrides.scss`, which hides the iframe.
6
+ // - EMBEDDED_WALLET_SESSION_SETTINGS is the localStorage key that
7
+ // sdk-react-core's useClearWalletConnectSessions clears on disconnect.
8
+ // Once sdk-react-core's recovery surface is stripped (PR D), the migration
9
+ // copy becomes canonical and the sdk-react-core duplicates go away.
10
+ const iframeContainerId = 'dyn-passkey-recovery-id';
11
+ const iframeElementId = 'dyn-passkey-recovery-element-id';
12
+ const EMBEDDED_WALLET_SESSION_SETTINGS = 'dynamic_embedded_wallet_session_settings';
13
+
14
+ export { EMBEDDED_WALLET_SESSION_SETTINGS, iframeContainerId, iframeElementId };
@@ -0,0 +1,13 @@
1
+ export { addEmailRecovery } from './addEmailRecovery';
2
+ export { addNewPasskeyAuthenticator } from './addNewPasskeyAuthenticator';
3
+ export { canRestoreEmbeddedWalletSession } from './canRestoreEmbeddedWalletSession';
4
+ export { completePasskeyRecovery } from './completePasskeyRecovery';
5
+ export { initEmbeddedWalletSession } from './initEmbeddedWalletSession';
6
+ export { passkeyRecoveryBundleValidation } from './passkeyRecoveryBundleValidation';
7
+ export { resentRecoveryEmail } from './resentRecoveryEmail';
8
+ export { restoreEmbeddedWalletSession } from './restoreEmbeddedWalletSession';
9
+ export { useEmbeddedWalletAuthenticator } from './useEmbeddedWalletAuthenticator';
10
+ export { useInitEmbeddedWalletAuthMethod, type EmbeddedWalletCurrentAction, } from './useInitEmbeddedWalletAuthMethod';
11
+ export { usePasskeyRecovery, type UsePasskeyRecoveryProps, } from './usePasskeyRecovery';
12
+ export { EMBEDDED_WALLET_SESSION_SETTINGS, iframeContainerId, iframeElementId, } from './constants';
13
+ export type { EmbeddedWalletSessionSettings } from './types';
@@ -0,0 +1 @@
1
+ export { initEmbeddedWalletSession } from './initEmbeddedWalletSession';
@@ -0,0 +1,11 @@
1
+ import { SdkUser } from '@dynamic-labs/sdk-api-core';
2
+ import { UserProfile } from '@dynamic-labs/types';
3
+ import { AuthenticatorType, Wallet } from '@dynamic-labs/wallet-connector-core';
4
+ export declare const initEmbeddedWalletSession: ({ authenticatorType, iframeContainer, iframeElementId, user, wallet, sessionExpiration, }: {
5
+ authenticatorType: AuthenticatorType;
6
+ iframeContainer: HTMLElement;
7
+ iframeElementId: string;
8
+ user: UserProfile | undefined;
9
+ wallet: Wallet | null;
10
+ sessionExpiration?: number;
11
+ }) => Promise<SdkUser | undefined>;
@@ -0,0 +1,56 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { getDefaultClient, getCore, createApiClient } from '@dynamic-labs-sdk/client/core';
4
+ import { DynamicError, InvalidPrimaryWalletOrConnectorError } from '@dynamic-labs/utils';
5
+ import { isPasskeyWalletConnector } from '@dynamic-labs/wallet-connector-core';
6
+ import { USER_NOT_LOGGED_IN } from '../../constants.js';
7
+ import { addNewPasskeyAuthenticator } from '../addNewPasskeyAuthenticator/addNewPasskeyAuthenticator.js';
8
+
9
+ const initEmbeddedWalletSession = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authenticatorType, iframeContainer, iframeElementId, user, wallet, sessionExpiration, }) {
10
+ var _b;
11
+ if (!user) {
12
+ throw new DynamicError(USER_NOT_LOGGED_IN, USER_NOT_LOGGED_IN);
13
+ }
14
+ if (!(wallet === null || wallet === void 0 ? void 0 : wallet.connector) ||
15
+ !(wallet === null || wallet === void 0 ? void 0 : wallet.id) ||
16
+ !isPasskeyWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector)) {
17
+ throw new InvalidPrimaryWalletOrConnectorError();
18
+ }
19
+ const turnkeyRecoveryHandler = (_b = wallet.connector) === null || _b === void 0 ? void 0 : _b.getAuthenticatorHandler();
20
+ if (authenticatorType === 'passkey' &&
21
+ turnkeyRecoveryHandler.isSessionActive()) {
22
+ return addNewPasskeyAuthenticator({
23
+ user,
24
+ wallet,
25
+ });
26
+ }
27
+ const publicKey = yield turnkeyRecoveryHandler.initRecovery(authenticatorType, iframeContainer, iframeElementId, sessionExpiration);
28
+ if (!publicKey) {
29
+ throw new DynamicError('Something went wrong', 'init_embedded_wallet_session_failed');
30
+ }
31
+ const client = getDefaultClient();
32
+ const core = getCore(client);
33
+ const apiClient = createApiClient({}, client);
34
+ const response = authenticatorType === 'passkey'
35
+ ? yield apiClient.initPasskeyRecovery({
36
+ environmentId: core.environmentId,
37
+ initPasskeyRecoveryRequest: {
38
+ turnkeyRecoveryTargetPublicKey: publicKey,
39
+ walletId: wallet.id,
40
+ },
41
+ })
42
+ : yield apiClient.initEmailAuth({
43
+ environmentId: core.environmentId,
44
+ initEmailAuthRequest: {
45
+ turnkeyEmailAuthTargetPublicKey: publicKey,
46
+ walletId: wallet.id,
47
+ },
48
+ });
49
+ turnkeyRecoveryHandler.recoveryUserId =
50
+ authenticatorType === 'passkey'
51
+ ? response.turnkeyRecoveryUserId
52
+ : response.turnkeyUserId;
53
+ return;
54
+ });
55
+
56
+ export { initEmbeddedWalletSession };
@@ -0,0 +1 @@
1
+ export { passkeyRecoveryBundleValidation } from './passkeyRecoveryBundleValidation';
@@ -0,0 +1,7 @@
1
+ import { UserProfile } from '@dynamic-labs/types';
2
+ import { Wallet } from '@dynamic-labs/wallet-connector-core';
3
+ export declare const passkeyRecoveryBundleValidation: ({ user, bundleInput, wallet, }: {
4
+ user: UserProfile | undefined;
5
+ bundleInput: string | undefined;
6
+ wallet: Wallet | null;
7
+ }) => Promise<void>;
@@ -0,0 +1,32 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { DynamicError, InvalidPrimaryWalletOrConnectorError, StorageService } from '@dynamic-labs/utils';
4
+ import { isPasskeyWalletConnector } from '@dynamic-labs/wallet-connector-core';
5
+ import { USER_NOT_LOGGED_IN } from '../../constants.js';
6
+ import { EMBEDDED_WALLET_SESSION_SETTINGS } from '../constants.js';
7
+
8
+ const passkeyRecoveryBundleValidation = (_a) => __awaiter(void 0, [_a], void 0, function* ({ user, bundleInput, wallet, }) {
9
+ var _b, _c, _d, _e, _f;
10
+ if (!bundleInput) {
11
+ throw new DynamicError('Code must be informed', 'missing_code');
12
+ }
13
+ if (!(wallet === null || wallet === void 0 ? void 0 : wallet.connector) ||
14
+ !(wallet === null || wallet === void 0 ? void 0 : wallet.id) ||
15
+ !isPasskeyWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector)) {
16
+ throw new InvalidPrimaryWalletOrConnectorError();
17
+ }
18
+ if (!user) {
19
+ throw new DynamicError(USER_NOT_LOGGED_IN, USER_NOT_LOGGED_IN);
20
+ }
21
+ const organizationId = (_e = (_d = (_c = (_b = user.verifiedCredentials) === null || _b === void 0 ? void 0 : _b.find(({ walletName, id }) => (walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey')) && id === wallet.id)) === null || _c === void 0 ? void 0 : _c.walletProperties) === null || _d === void 0 ? void 0 : _d.turnkeySubOrganizationId) !== null && _e !== void 0 ? _e : undefined;
22
+ const turnkeyRecoveryHandler = (_f = wallet.connector) === null || _f === void 0 ? void 0 : _f.getAuthenticatorHandler();
23
+ yield turnkeyRecoveryHandler.verifyRecoveryCode(bundleInput, organizationId !== null && organizationId !== void 0 ? organizationId : undefined);
24
+ const sessionSettings = {
25
+ createdAt: new Date().getTime(),
26
+ emailCode: bundleInput,
27
+ userId: turnkeyRecoveryHandler.recoveryUserId,
28
+ };
29
+ StorageService.setItem(EMBEDDED_WALLET_SESSION_SETTINGS, sessionSettings);
30
+ });
31
+
32
+ export { passkeyRecoveryBundleValidation };
@@ -0,0 +1 @@
1
+ export { recoverTurnkeyWallet } from './recoverTurnkeyWallet';
@@ -0,0 +1,11 @@
1
+ import { SdkUser } from '@dynamic-labs/sdk-api-core';
2
+ import { UserProfile } from '@dynamic-labs/types';
3
+ import { IEmailWalletConnector, IPasskeyWalletConnector, Wallet } from '@dynamic-labs/wallet-connector-core';
4
+ export declare const recoverTurnkeyWallet: ({ wallet, user, addPasskeyAuthenticator, }: {
5
+ wallet: Wallet | null;
6
+ user: UserProfile | undefined;
7
+ addPasskeyAuthenticator: boolean;
8
+ }) => Promise<{
9
+ connector: IEmailWalletConnector & IPasskeyWalletConnector;
10
+ user: SdkUser;
11
+ }>;
@@ -0,0 +1,72 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { getDefaultClient, getCore, createApiClient, updateAuthFromVerifyResponse } from '@dynamic-labs-sdk/client/core';
4
+ import { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';
5
+ import { DynamicError, InvalidPrimaryWalletOrConnectorError } from '@dynamic-labs/utils';
6
+ import { isPasskeyWalletConnector } from '@dynamic-labs/wallet-connector-core';
7
+ import { USER_NOT_LOGGED_IN } from '../../constants.js';
8
+
9
+ const hasEmbeddedWalletCredential = (user) => {
10
+ var _a;
11
+ return Boolean((_a = user.verifiedCredentials) === null || _a === void 0 ? void 0 : _a.some(({ walletProvider }) => walletProvider === WalletProviderEnum.EmbeddedWallet));
12
+ };
13
+ const recoverTurnkeyWallet = (_a) => __awaiter(void 0, [_a], void 0, function* ({ wallet, user, addPasskeyAuthenticator, }) {
14
+ var _b, _c, _d;
15
+ if (!user) {
16
+ throw new DynamicError(USER_NOT_LOGGED_IN, USER_NOT_LOGGED_IN);
17
+ }
18
+ if (!wallet ||
19
+ !wallet.connector ||
20
+ !wallet.id ||
21
+ !isPasskeyWalletConnector(wallet.connector)) {
22
+ throw new InvalidPrimaryWalletOrConnectorError();
23
+ }
24
+ const connector = wallet.connector;
25
+ connector.setEmail(user.email);
26
+ const turnkeySubOrganizationId = (_d = (_c = (_b = user.verifiedCredentials) === null || _b === void 0 ? void 0 : _b.find(({ walletName, id }) => (walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey')) && id === wallet.id)) === null || _c === void 0 ? void 0 : _c.walletProperties) === null || _d === void 0 ? void 0 : _d.turnkeySubOrganizationId;
27
+ if (!turnkeySubOrganizationId) {
28
+ throw new DynamicError('The authentication token is invalid - turnkeySubOrganizationId is missing', 'invalid_authentication_token');
29
+ }
30
+ const turnkeyRecoveryHandler = wallet.connector.getAuthenticatorHandler();
31
+ const { attestation, challenge } = yield connector.getWebAuthnAttestation();
32
+ if (addPasskeyAuthenticator) {
33
+ yield turnkeyRecoveryHandler.addPasskeyAuthenticator({
34
+ attestation,
35
+ challenge,
36
+ turnkeySubOrganizationId,
37
+ });
38
+ }
39
+ else {
40
+ yield turnkeyRecoveryHandler.completeRecovery({
41
+ attestation,
42
+ challenge,
43
+ turnkeySubOrganizationId,
44
+ });
45
+ }
46
+ const client = getDefaultClient();
47
+ const core = getCore(client);
48
+ const apiClient = createApiClient({}, client);
49
+ const response = yield apiClient.completePasskeyRecovery({
50
+ completePasskeyRecoveryRequest: {
51
+ attestation: attestation,
52
+ challenge,
53
+ walletId: wallet.id,
54
+ },
55
+ environmentId: core.environmentId,
56
+ });
57
+ updateAuthFromVerifyResponse({ response }, client);
58
+ const updatedUser = response.user;
59
+ if (!updatedUser) {
60
+ throw new DynamicError('No user returned from passkey recovery', 'passkey_recovery_failed');
61
+ }
62
+ if (!hasEmbeddedWalletCredential(updatedUser)) {
63
+ throw new DynamicError('EmbeddedWalletVerifiedCredential not found', 'embedded_wallet_credential_not_found');
64
+ }
65
+ connector.setVerifiedCredentials(updatedUser.verifiedCredentials);
66
+ return {
67
+ connector,
68
+ user: updatedUser,
69
+ };
70
+ });
71
+
72
+ export { recoverTurnkeyWallet };
@@ -0,0 +1 @@
1
+ export { resentRecoveryEmail } from './resentRecoveryEmail';
@@ -0,0 +1,7 @@
1
+ import { UserProfile } from '@dynamic-labs/types';
2
+ import { AuthenticatorType, Wallet } from '@dynamic-labs/wallet-connector-core';
3
+ export declare const resentRecoveryEmail: ({ authenticatorType, user, wallet, }: {
4
+ authenticatorType: AuthenticatorType;
5
+ user: UserProfile | undefined;
6
+ wallet: Wallet | null;
7
+ }) => Promise<import("@dynamic-labs/sdk-api-core").InitPasskeyRecoveryResponse | import("@dynamic-labs/sdk-api-core").InitEmailAuthResponse>;
@@ -0,0 +1,43 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { getDefaultClient, getCore, createApiClient } from '@dynamic-labs-sdk/client/core';
4
+ import { DynamicError, InvalidPrimaryWalletOrConnectorError } from '@dynamic-labs/utils';
5
+ import { isPasskeyWalletConnector } from '@dynamic-labs/wallet-connector-core';
6
+ import { USER_NOT_LOGGED_IN } from '../../constants.js';
7
+
8
+ const resentRecoveryEmail = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authenticatorType, user, wallet, }) {
9
+ var _b;
10
+ if (!user) {
11
+ throw new DynamicError(USER_NOT_LOGGED_IN, USER_NOT_LOGGED_IN);
12
+ }
13
+ if (!(wallet === null || wallet === void 0 ? void 0 : wallet.connector) ||
14
+ !(wallet === null || wallet === void 0 ? void 0 : wallet.id) ||
15
+ !isPasskeyWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector)) {
16
+ throw new InvalidPrimaryWalletOrConnectorError();
17
+ }
18
+ const publicKey = (_b = wallet.connector) === null || _b === void 0 ? void 0 : _b.getAuthenticatorHandler().publicKey;
19
+ if (!publicKey) {
20
+ throw new DynamicError('Could not proceed with your request. Please restart the process.', 'resend_recovery_email_failed');
21
+ }
22
+ const client = getDefaultClient();
23
+ const core = getCore(client);
24
+ const apiClient = createApiClient({}, client);
25
+ if (authenticatorType === 'passkey') {
26
+ return apiClient.initPasskeyRecovery({
27
+ environmentId: core.environmentId,
28
+ initPasskeyRecoveryRequest: {
29
+ turnkeyRecoveryTargetPublicKey: publicKey,
30
+ walletId: wallet.id,
31
+ },
32
+ });
33
+ }
34
+ return apiClient.initEmailAuth({
35
+ environmentId: core.environmentId,
36
+ initEmailAuthRequest: {
37
+ turnkeyEmailAuthTargetPublicKey: publicKey,
38
+ walletId: wallet.id,
39
+ },
40
+ });
41
+ });
42
+
43
+ export { resentRecoveryEmail };
@@ -0,0 +1 @@
1
+ export { restoreEmbeddedWalletSession } from './restoreEmbeddedWalletSession';
@@ -0,0 +1,9 @@
1
+ import { UserProfile } from '@dynamic-labs/types';
2
+ import { Wallet } from '@dynamic-labs/wallet-connector-core';
3
+ export declare const restoreEmbeddedWalletSession: ({ user, iframeContainer, iframeElementId, wallet, sessionExpiration, }: {
4
+ user: UserProfile | undefined;
5
+ iframeContainer: HTMLElement;
6
+ iframeElementId: string;
7
+ wallet: Wallet | null;
8
+ sessionExpiration?: number;
9
+ }) => Promise<boolean>;
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { DynamicError, InvalidPrimaryWalletOrConnectorError, StorageService } from '@dynamic-labs/utils';
4
+ import { isPasskeyWalletConnector } from '@dynamic-labs/wallet-connector-core';
5
+ import { USER_NOT_LOGGED_IN } from '../../constants.js';
6
+ import { EMBEDDED_WALLET_SESSION_SETTINGS } from '../constants.js';
7
+
8
+ const restoreEmbeddedWalletSession = (_a) => __awaiter(void 0, [_a], void 0, function* ({ user, iframeContainer, iframeElementId, wallet, sessionExpiration, }) {
9
+ var _b, _c, _d, _e, _f;
10
+ if (!user) {
11
+ throw new DynamicError(USER_NOT_LOGGED_IN, USER_NOT_LOGGED_IN);
12
+ }
13
+ if (!(wallet === null || wallet === void 0 ? void 0 : wallet.connector) ||
14
+ !(wallet === null || wallet === void 0 ? void 0 : wallet.id) ||
15
+ !isPasskeyWalletConnector(wallet === null || wallet === void 0 ? void 0 : wallet.connector)) {
16
+ throw new InvalidPrimaryWalletOrConnectorError();
17
+ }
18
+ const sessionSettings = StorageService.getItem(EMBEDDED_WALLET_SESSION_SETTINGS);
19
+ const turnkeyRecoveryHandler = (_b = wallet.connector) === null || _b === void 0 ? void 0 : _b.getAuthenticatorHandler();
20
+ if (!sessionSettings || Boolean(turnkeyRecoveryHandler.recoveryUserId)) {
21
+ return false;
22
+ }
23
+ const publicKey = yield turnkeyRecoveryHandler.initRecovery('email', iframeContainer, iframeElementId, sessionExpiration);
24
+ if (!publicKey) {
25
+ throw new DynamicError('Could not open embedded wallet connection communication', 'restore_embedded_wallet_session_failed');
26
+ }
27
+ turnkeyRecoveryHandler.recoveryUserId = sessionSettings.userId;
28
+ const organizationId = (_f = (_e = (_d = (_c = user.verifiedCredentials) === null || _c === void 0 ? void 0 : _c.find(({ walletName, id }) => (walletName === null || walletName === void 0 ? void 0 : walletName.startsWith('turnkey')) && id === wallet.id)) === null || _d === void 0 ? void 0 : _d.walletProperties) === null || _e === void 0 ? void 0 : _e.turnkeySubOrganizationId) !== null && _f !== void 0 ? _f : undefined;
29
+ yield turnkeyRecoveryHandler.verifyRecoveryCode(sessionSettings.emailCode, organizationId !== null && organizationId !== void 0 ? organizationId : undefined);
30
+ return true;
31
+ });
32
+
33
+ export { restoreEmbeddedWalletSession };
@@ -0,0 +1,5 @@
1
+ export type EmbeddedWalletSessionSettings = {
2
+ emailCode: string;
3
+ userId: string;
4
+ createdAt: number;
5
+ };
@@ -0,0 +1 @@
1
+ export { useEmbeddedWalletAuthenticator } from './useEmbeddedWalletAuthenticator';
@@ -0,0 +1,11 @@
1
+ import { AuthenticatorType, Wallet } from '@dynamic-labs/wallet-connector-core';
2
+ type UseEmbeddedWalletAuthenticatorProps = {
3
+ initPasskeyRecoveryProcess: (authenticatorType?: AuthenticatorType) => Promise<Wallet>;
4
+ shouldInitRecovery: () => Promise<boolean>;
5
+ onAddRecoveryEmail: () => void;
6
+ };
7
+ export declare const useEmbeddedWalletAuthenticator: ({ initPasskeyRecoveryProcess, shouldInitRecovery, onAddRecoveryEmail, }: UseEmbeddedWalletAuthenticatorProps) => {
8
+ addEmbeddedWalletRecoveryEmail: () => Promise<void>;
9
+ createOrRefreshAuthenticatorSession: (authenticatorType?: AuthenticatorType) => Promise<Wallet<import("@dynamic-labs/wallet-connector-core").WalletConnectorCore.WalletConnector> | undefined>;
10
+ };
11
+ export {};
@@ -0,0 +1 @@
1
+ export { useInitEmbeddedWalletAuthMethod, type EmbeddedWalletCurrentAction, } from './useInitEmbeddedWalletAuthMethod';
@@ -0,0 +1,29 @@
1
+ import { UserProfile } from '@dynamic-labs/types';
2
+ import { AuthenticatorType, Wallet } from '@dynamic-labs/wallet-connector-core';
3
+ export type EmbeddedWalletCurrentAction = {
4
+ type: 'signMessage' | 'sendTransaction' | 'helpSession' | 'signTransaction' | 'reveal';
5
+ settings?: {
6
+ goBack?: () => void;
7
+ };
8
+ };
9
+ type InitAuthenticatorMethodProps = {
10
+ authenticatorType: AuthenticatorType;
11
+ iframeContainer: HTMLElement;
12
+ currentAction?: EmbeddedWalletCurrentAction;
13
+ };
14
+ type UseInitEmbeddedWalletAuthMethodProps = {
15
+ user: UserProfile | undefined;
16
+ wallet: Wallet | null;
17
+ sessionExpiration?: number;
18
+ onShowEmailBundle: (args: {
19
+ authenticatorType: AuthenticatorType;
20
+ currentAction?: EmbeddedWalletCurrentAction;
21
+ }) => void;
22
+ onComplete: () => void;
23
+ };
24
+ export declare const useInitEmbeddedWalletAuthMethod: ({ user, wallet, sessionExpiration, onShowEmailBundle, onComplete, }: UseInitEmbeddedWalletAuthMethodProps) => {
25
+ error: unknown;
26
+ initAuthMethod: ({ authenticatorType, iframeContainer, currentAction, }: InitAuthenticatorMethodProps) => Promise<void>;
27
+ isLoading: boolean;
28
+ };
29
+ export {};
@@ -0,0 +1,50 @@
1
+ 'use client'
2
+ import { __awaiter } from '../../../../_virtual/_tslib.js';
3
+ import { useState } from 'react';
4
+ import { logger } from '@dynamic-labs/wallet-connector-core';
5
+ import { iframeElementId } from '../constants.js';
6
+ import { initEmbeddedWalletSession } from '../initEmbeddedWalletSession/initEmbeddedWalletSession.js';
7
+
8
+ // This hook needs to be async that's why it's not using useMutation
9
+ const useInitEmbeddedWalletAuthMethod = ({ user, wallet, sessionExpiration, onShowEmailBundle, onComplete, }) => {
10
+ const [isLoading, setIsLoading] = useState(false);
11
+ const [error, setError] = useState();
12
+ const initAuthMethod = (_a) => __awaiter(void 0, [_a], void 0, function* ({ authenticatorType, iframeContainer, currentAction, }) {
13
+ setIsLoading(true);
14
+ const showEmailBundle = authenticatorType === 'email' ||
15
+ !wallet ||
16
+ !wallet.connector
17
+ .getAuthenticatorHandler()
18
+ .isSessionActive();
19
+ try {
20
+ yield initEmbeddedWalletSession({
21
+ authenticatorType,
22
+ iframeContainer,
23
+ iframeElementId,
24
+ sessionExpiration,
25
+ user,
26
+ wallet,
27
+ });
28
+ if (showEmailBundle) {
29
+ onShowEmailBundle({ authenticatorType, currentAction });
30
+ }
31
+ else {
32
+ onComplete();
33
+ }
34
+ }
35
+ catch (err) {
36
+ setError(err);
37
+ logger.error('Failed to create embedded wallet session', err);
38
+ }
39
+ finally {
40
+ setIsLoading(false);
41
+ }
42
+ });
43
+ return {
44
+ error,
45
+ initAuthMethod,
46
+ isLoading,
47
+ };
48
+ };
49
+
50
+ export { useInitEmbeddedWalletAuthMethod };
@@ -0,0 +1 @@
1
+ export { usePasskeyRecovery, type UsePasskeyRecoveryProps, } from './usePasskeyRecovery';
@@ -0,0 +1,32 @@
1
+ import { Duration, SupportedSecurityMethods } from '@dynamic-labs/sdk-api-core';
2
+ import { UserProfile } from '@dynamic-labs/types';
3
+ import { AuthenticatorType, Wallet } from '@dynamic-labs/wallet-connector-core';
4
+ import { EmbeddedWalletCurrentAction } from '../useInitEmbeddedWalletAuthMethod';
5
+ export type UsePasskeyRecoveryProps = {
6
+ user: UserProfile | undefined;
7
+ wallet: Wallet | null;
8
+ primaryWallet: Wallet | null;
9
+ sessionKeyDuration: Duration | undefined;
10
+ supportedSecurityMethods: SupportedSecurityMethods | undefined;
11
+ isTurnkeyWalletWithoutAuthenticator: boolean;
12
+ hasRecoveryEmail: boolean;
13
+ iframeContainer: HTMLElement | null;
14
+ onShowAddRecoveryEmail: () => void;
15
+ onShowAuthChoice: (currentAction?: EmbeddedWalletCurrentAction) => void;
16
+ awaitEmailVerification: (args: {
17
+ email: string;
18
+ verificationUUID: string | undefined;
19
+ }) => Promise<boolean>;
20
+ onShowEmailBundle: (args: {
21
+ authenticatorType: AuthenticatorType;
22
+ currentAction?: EmbeddedWalletCurrentAction;
23
+ }) => void;
24
+ onAuthMethodComplete: () => void;
25
+ onEmailRecoveryComplete?: () => void;
26
+ onEmailRecoveryFailed?: (error: unknown) => void;
27
+ };
28
+ export declare const usePasskeyRecovery: ({ user, wallet, primaryWallet, sessionKeyDuration, supportedSecurityMethods, isTurnkeyWalletWithoutAuthenticator, hasRecoveryEmail, iframeContainer, onShowAddRecoveryEmail, onShowAuthChoice, awaitEmailVerification, onShowEmailBundle, onAuthMethodComplete, onEmailRecoveryComplete, onEmailRecoveryFailed, }: UsePasskeyRecoveryProps) => {
29
+ readonly addRecoveryEmail: (emailInput: string) => Promise<void>;
30
+ readonly initPasskeyRecoveryProcess: (authenticatorType?: AuthenticatorType, currentAction?: EmbeddedWalletCurrentAction) => Promise<void>;
31
+ readonly shouldInitRecovery: () => Promise<boolean>;
32
+ };