// Copyright 2018-2022 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only const LEGACY_DATABASE_ID = 'signal'; export async function doesDatabaseExist(): Promise { window.SignalContext.log.info( 'Checking for the existence of IndexedDB data...' ); return new Promise((resolve, reject) => { const req = window.indexedDB.open(LEGACY_DATABASE_ID); let existed = true; let timer: undefined | ReturnType = setTimeout(() => { window.SignalContext.log.warn( 'doesDatabaseExist: Timed out attempting to check IndexedDB status' ); return resolve(false); }, 1000); const clearTimer = () => { if (timer !== undefined) { clearTimeout(timer); timer = undefined; } }; req.onerror = error => { clearTimer(); reject(error); }; req.onsuccess = () => { clearTimer(); req.result.close(); resolve(existed); }; req.onupgradeneeded = () => { if (req.result.version === 1) { existed = false; window.indexedDB.deleteDatabase(LEGACY_DATABASE_ID); } }; }); } export function removeDatabase(): Promise { return new Promise((resolve, reject) => { window.SignalContext.log.info( `removeDatabase: Deleting IndexedDB database '${LEGACY_DATABASE_ID}'` ); const request = window.indexedDB.deleteDatabase(LEGACY_DATABASE_ID); request.onerror = () => { window.SignalContext.log.error( 'removeDatabase: Error deleting database.' ); reject(new Error('Error deleting database')); }; request.onsuccess = () => { window.SignalContext.log.info( 'removeDatabase: Database deleted successfully' ); resolve(); }; }); }