From 3b1199d2db98a4401599332491e97fc27e4598eb Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Sun, 5 Oct 2025 10:05:53 +0200 Subject: [PATCH] Cleanup passkey create and authenticate flows (#520) --- .../pages/passkeys/PasskeyAuthenticate.tsx | 81 ++----------------- .../popup/pages/passkeys/PasskeyCreate.tsx | 36 ++++++--- .../src/i18n/locales/en.json | 4 +- 3 files changed, 36 insertions(+), 85 deletions(-) diff --git a/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyAuthenticate.tsx b/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyAuthenticate.tsx index e25851d72..8a122bd09 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyAuthenticate.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyAuthenticate.tsx @@ -8,7 +8,6 @@ import LoadingSpinner from '@/entrypoints/popup/components/LoadingSpinner'; import { useDb } from '@/entrypoints/popup/context/DbContext'; import { useLoading } from '@/entrypoints/popup/context/LoadingContext'; import { useVaultLockRedirect } from '@/entrypoints/popup/hooks/useVaultLockRedirect'; -import { useVaultMutate } from '@/entrypoints/popup/hooks/useVaultMutate'; import { PasskeyAuthenticator } from '@/utils/passkey/PasskeyAuthenticator'; import { PasskeyHelper } from '@/utils/passkey/PasskeyHelper'; @@ -22,9 +21,7 @@ const PasskeyAuthenticate: React.FC = () => { const location = useLocation(); const { setIsInitialLoading } = useLoading(); const dbContext = useDb(); - const { executeVaultMutation } = useVaultMutate(); const [request, setRequest] = useState(null); - const [selectedPasskey, setSelectedPasskey] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [availablePasskeys, setAvailablePasskeys] = useState>([]); @@ -165,54 +162,6 @@ const PasskeyAuthenticate: React.FC = () => { } }; - /** - * Handle passkey deletion - */ - const handleDeletePasskey = async (passkeyId: string, event: React.MouseEvent) : Promise => { - event.stopPropagation(); // Prevent triggering authentication - - if (!confirm(t('passkeys.authenticate.deleteConfirm'))) { - return; - } - - if (!dbContext.sqliteClient) { - return; - } - - try { - // Delete via vault mutation to sync changes - await executeVaultMutation( - async () => { - await dbContext.sqliteClient!.deletePasskeyById(passkeyId); - }, - { - /** - * onSuccess - */ - onSuccess: () => { - // Remove from UI - setAvailablePasskeys(prev => prev.filter(pk => pk.id !== passkeyId)); - - // Clear selection if the deleted passkey was selected - if (selectedPasskey === passkeyId) { - setSelectedPasskey(null); - } - }, - /** - * onError - */ - onError: (err) => { - console.error('Failed to delete passkey:', err); - setError(t('common.errors.unknownError')); - } - } - ); - } catch (error) { - console.error('Failed to delete passkey:', error); - setError(t('common.errors.unknownError')); - } - }; - /** * Handle fallback */ @@ -282,31 +231,17 @@ const PasskeyAuthenticate: React.FC = () => { {availablePasskeys.map((pk) => (
!loading && handleUsePasskey(pk.id)} > -
-
-
- {pk.displayName} -
- {pk.username && ( -
- {pk.username} -
- )} -
- +
+ {pk.displayName}
+ {pk.username && ( +
+ {pk.username} +
+ )}
))}
diff --git a/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyCreate.tsx b/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyCreate.tsx index 6bc4a97de..7587cdde9 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyCreate.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/passkeys/PasskeyCreate.tsx @@ -491,15 +491,33 @@ const PasskeyCreate: React.FC = () => { {selectedPasskeyToReplace ? t('passkeys.create.confirmReplace') : t('passkeys.create.createButton')} - + {existingPasskeys.length > 0 ? ( + + ) : ( + <> + + + + + )} )} diff --git a/apps/browser-extension/src/i18n/locales/en.json b/apps/browser-extension/src/i18n/locales/en.json index 8a332232f..3d6e8616f 100644 --- a/apps/browser-extension/src/i18n/locales/en.json +++ b/apps/browser-extension/src/i18n/locales/en.json @@ -365,9 +365,7 @@ "signInFor": "Sign in with passkey for", "selectPasskey": "Select a passkey to sign in:", "noPasskeysFound": "No passkeys found for this site", - "useBrowserPasskey": "Use Browser Passkey", - "deletePasskey": "Delete passkey", - "deleteConfirm": "Are you sure you want to delete this passkey?" + "useBrowserPasskey": "Use Browser Passkey" }, "create": { "title": "Create Passkey",