diff --git a/packages/backend/src/repositories/passkey.repository.ts b/packages/backend/src/repositories/passkey.repository.ts index 883a255..5d9d059 100644 --- a/packages/backend/src/repositories/passkey.repository.ts +++ b/packages/backend/src/repositories/passkey.repository.ts @@ -133,7 +133,14 @@ export class PasskeyRepository { const db = await getDbInstance(); const sql = 'DELETE FROM passkeys WHERE user_id = ?'; const { changes } = await runDb(db, sql, [userId]); - return changes > 0; + return changes > 0; + } + + async updatePasskeyName(credentialId: string, name: string): Promise { + const db = await getDbInstance(); + const sql = "UPDATE passkeys SET name = ?, updated_at = strftime('%s', 'now') WHERE credential_id = ?"; + const { changes } = await runDb(db, sql, [name, credentialId]); + return changes > 0; } } diff --git a/packages/frontend/src/stores/auth.store.ts b/packages/frontend/src/stores/auth.store.ts index 60ea4cb..5df85a9 100644 --- a/packages/frontend/src/stores/auth.store.ts +++ b/packages/frontend/src/stores/auth.store.ts @@ -483,6 +483,28 @@ export const useAuthStore = defineStore('auth', { this.isLoading = false; } }, + + // Action to update a passkey's name + async updatePasskeyName(credentialID: string, newName: string) { + if (!this.isAuthenticated) { + throw new Error('User not authenticated. Cannot update passkey name.'); + } + // Consider using a specific loading state for this if needed, e.g., this.passkeyNameUpdateLoading = true; + this.error = null; + try { + await apiClient.put(`/auth/user/passkeys/${credentialID}/name`, { name: newName }); + console.log(`Passkey ${credentialID} name updated to "${newName}".`); + // Refresh the passkey list to show the new name + await this.fetchPasskeys(); + return { success: true }; + } catch (err: any) { + console.error(`Failed to update passkey ${credentialID} name:`, err); + this.error = err.response?.data?.message || err.message || 'Failed to update passkey name.'; + throw new Error(this.error ?? 'Failed to update passkey name.'); + } finally { + // if using specific loading state: this.passkeyNameUpdateLoading = false; + } + }, }, persist: true, // Revert to simple persistence to fix TS error for now }); diff --git a/packages/frontend/src/views/SettingsView.vue b/packages/frontend/src/views/SettingsView.vue index d9ae578..982cf89 100644 --- a/packages/frontend/src/views/SettingsView.vue +++ b/packages/frontend/src/views/SettingsView.vue @@ -70,10 +70,27 @@