From 39f81576836ff3f875687fb201f4a22d17693dbc Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Wed, 16 Apr 2025 22:09:49 +0200 Subject: [PATCH] Refactor get metadata call (#771) --- mobile-app/app/_layout.tsx | 7 ++++-- mobile-app/context/DbContext.tsx | 24 ++++++++----------- .../utils/types/messaging/VaultMetadata.ts | 10 ++++---- 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/mobile-app/app/_layout.tsx b/mobile-app/app/_layout.tsx index 72e2154ca..9de4a4ab6 100644 --- a/mobile-app/app/_layout.tsx +++ b/mobile-app/app/_layout.tsx @@ -118,9 +118,12 @@ function RootLayoutNav() { } // If the vault revision is higher, fetch the latest vault + const vaultMetadata = await dbContext.getVaultMetadata(); + const vaultRevisionNumber = vaultMetadata?.vaultRevisionNumber ?? 0; console.log('Vault revision:', statusResponse.vaultRevision); - console.log('Current vault revision:', dbContext.vaultRevision); - if (statusResponse.vaultRevision > dbContext.vaultRevision) { + console.log('Current vault revision:', vaultRevisionNumber); + + if (statusResponse.vaultRevision > vaultRevisionNumber) { const vaultResponseJson = await webApi.get('Vault'); const vaultError = webApi.validateVaultResponse(vaultResponseJson); diff --git a/mobile-app/context/DbContext.tsx b/mobile-app/context/DbContext.tsx index 125f4fba3..9af63efab 100644 --- a/mobile-app/context/DbContext.tsx +++ b/mobile-app/context/DbContext.tsx @@ -10,7 +10,7 @@ type DbContextType = { dbAvailable: boolean; initializeDatabase: (vaultResponse: VaultResponse, derivedKey: string | null) => Promise; clearDatabase: () => void; - vaultMetadata: VaultMetadata | null; + getVaultMetadata: () => Promise; } const DbContext = createContext(undefined); @@ -36,11 +36,6 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children } */ const [dbAvailable, setDbAvailable] = useState(false); - /** - * Vault metadata containing public/private email domains and revision number - */ - const [vaultMetadata, setVaultMetadata] = useState(null); - const initializeDatabase = useCallback(async (vaultResponse: VaultResponse, derivedKey: string | null = null) => { // If the derived key is provided, store it in the keychain. // Otherwise we assume the encryption key is already stored in the keychain. @@ -62,7 +57,6 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children } setDbInitialized(true); setDbAvailable(true); - setVaultMetadata(metadata); }, []); const checkStoredVault = useCallback(async () => { @@ -74,22 +68,18 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children } if (metadata) { setDbInitialized(true); setDbAvailable(true); - setVaultMetadata(metadata); } else { setDbInitialized(true); setDbAvailable(false); - setVaultMetadata(null); } } else { setDbInitialized(true); setDbAvailable(false); - setVaultMetadata(null); } } catch (error) { console.error('Error checking vault initialization:', error); setDbInitialized(true); setDbAvailable(false); - setVaultMetadata(null); } }, []); @@ -107,19 +97,25 @@ export const DbProvider: React.FC<{ children: React.ReactNode }> = ({ children } */ const clearDatabase = useCallback(() : void => { setDbInitialized(false); - setVaultMetadata(null); // TODO: implement actual vault clearing. credentialManager.clearVault(); }, []); + /** + * Get the current vault metadata directly from SQLite client + */ + const getVaultMetadata = useCallback(async () : Promise => { + return await sqliteClient.getVaultMetadata(); + }, []); + const contextValue = useMemo(() => ({ sqliteClient, dbInitialized, dbAvailable, initializeDatabase, clearDatabase, - vaultMetadata - }), [sqliteClient, dbInitialized, dbAvailable, initializeDatabase, clearDatabase, vaultMetadata]); + getVaultMetadata + }), [sqliteClient, dbInitialized, dbAvailable, initializeDatabase, clearDatabase, getVaultMetadata]); return ( diff --git a/mobile-app/utils/types/messaging/VaultMetadata.ts b/mobile-app/utils/types/messaging/VaultMetadata.ts index e57e54265..521306858 100644 --- a/mobile-app/utils/types/messaging/VaultMetadata.ts +++ b/mobile-app/utils/types/messaging/VaultMetadata.ts @@ -1,7 +1,5 @@ -export type VaultResponse = { - success: boolean, error?: string, - vault?: string, - publicEmailDomains?: string[], - privateEmailDomains?: string[], - vaultRevisionNumber?: number +export type VaultMetadata = { + publicEmailDomains: string[], + privateEmailDomains: string[], + vaultRevisionNumber: number };