diff --git a/web/database/database-module-provider.js b/web/database/database-module-provider.js --- a/web/database/database-module-provider.js +++ b/web/database/database-module-provider.js @@ -121,6 +121,12 @@ } } -const databaseModule: DatabaseModule = new DatabaseModule(); +let databaseModule: ?DatabaseModule = null; +async function getDatabaseModule(): Promise { + if (!databaseModule) { + databaseModule = new DatabaseModule(); + } + return databaseModule; +} -export { databaseModule }; +export { getDatabaseModule }; diff --git a/web/database/sqlite-data-handler.js b/web/database/sqlite-data-handler.js --- a/web/database/sqlite-data-handler.js +++ b/web/database/sqlite-data-handler.js @@ -7,7 +7,7 @@ import { setClientDBStoreActionType } from 'lib/actions/client-db-store-actions.js'; import { reportStoreOpsHandlers } from 'lib/ops/report-store-ops.js'; -import { databaseModule } from './database-module-provider.js'; +import { getDatabaseModule } from './database-module-provider.js'; import { SQLITE_ENCRYPTION_KEY } from './utils/constants.js'; import { isDesktopSafari } from './utils/db-utils.js'; import { @@ -39,6 +39,7 @@ ); const handleSensitiveData = React.useCallback(async () => { + const databaseModule = await getDatabaseModule(); try { const currentUserData = await databaseModule.schedule({ type: workerRequestMessageTypes.GET_CURRENT_USER_ID, @@ -65,6 +66,8 @@ React.useEffect(() => { (async () => { + const databaseModule = await getDatabaseModule(); + if (currentLoggedInUserID) { let databaseEncryptionKeyJWK = null; if (isDesktopSafari) { diff --git a/web/redux/comm-redux-storage-engine.js b/web/redux/comm-redux-storage-engine.js --- a/web/redux/comm-redux-storage-engine.js +++ b/web/redux/comm-redux-storage-engine.js @@ -2,11 +2,12 @@ import storage from 'redux-persist/es/storage/index.js'; -import { databaseModule } from '../database/database-module-provider.js'; +import { getDatabaseModule } from '../database/database-module-provider.js'; import { workerRequestMessageTypes } from '../types/worker-types.js'; const commReduxStorageEngine = { getItem: async (key: string): Promise => { + const databaseModule = await getDatabaseModule(); const isSupported = await databaseModule.isDatabaseSupported(); if (!isSupported) { return await storage.getItem(key); @@ -22,6 +23,7 @@ return result.item; }, setItem: async (key: string, item: string): Promise => { + const databaseModule = await getDatabaseModule(); const isSupported = await databaseModule.isDatabaseSupported(); if (!isSupported) { await storage.setItem(key, item); @@ -35,6 +37,7 @@ }); }, removeItem: async (key: string): Promise => { + const databaseModule = await getDatabaseModule(); const isSupported = await databaseModule.isDatabaseSupported(); if (!isSupported) { await storage.removeItem(key); diff --git a/web/redux/persist.js b/web/redux/persist.js --- a/web/redux/persist.js +++ b/web/redux/persist.js @@ -31,7 +31,7 @@ import commReduxStorageEngine from './comm-redux-storage-engine.js'; import type { AppState } from './redux-setup.js'; -import { databaseModule } from '../database/database-module-provider.js'; +import { getDatabaseModule } from '../database/database-module-provider.js'; import { isSQLiteSupported } from '../database/utils/db-utils.js'; import { workerRequestMessageTypes } from '../types/worker-types.js'; @@ -59,6 +59,7 @@ }; }, [2]: async state => { + const databaseModule = await getDatabaseModule(); if (!isDatabaseSupported) { return state; } @@ -89,6 +90,8 @@ }; } + const databaseModule = await getDatabaseModule(); + if (!isDatabaseSupported) { return newState; } @@ -139,6 +142,7 @@ const rootKey = 'root'; const migrateStorageToSQLite: StorageMigrationFunction = async debug => { + const databaseModule = await getDatabaseModule(); const isSupported = await databaseModule.isDatabaseSupported(); if (!isSupported) { return undefined; diff --git a/web/redux/redux-setup.js b/web/redux/redux-setup.js --- a/web/redux/redux-setup.js +++ b/web/redux/redux-setup.js @@ -53,7 +53,7 @@ import { reduceDeviceID } from './device-id-reducer.js'; import reduceNavInfo from './nav-reducer.js'; import { getVisibility } from './visibility.js'; -import { databaseModule } from '../database/database-module-provider.js'; +import { getDatabaseModule } from '../database/database-module-provider.js'; import { activeThreadSelector } from '../selectors/nav-selectors.js'; import { type NavInfo } from '../types/nav-types.js'; import { workerRequestMessageTypes } from '../types/worker-types.js'; @@ -188,6 +188,7 @@ } = baseReducerResult; if (draftStoreOperations.length > 0 || reportStoreOperations.length > 0) { (async () => { + const databaseModule = await getDatabaseModule(); const isSupported = await databaseModule.isDatabaseSupported(); if (!isSupported) { return;