diff --git a/web/redux/handle-redux-migration-failure.js b/web/redux/handle-redux-migration-failure.js new file mode 100644 --- /dev/null +++ b/web/redux/handle-redux-migration-failure.js @@ -0,0 +1,34 @@ +// @flow + +import { wipeKeyserverStore } from 'lib/utils/keyserver-store-utils.js'; +import { resetUserSpecificState } from 'lib/utils/reducers-utils.js'; + +import { defaultWebState } from './default-state.js'; +import { nonUserSpecificFieldsWeb, type AppState } from './redux-setup.js'; + +const persistWhitelist = [ + 'enabledApps', + 'alertStore', + 'commServicesAccessToken', + 'keyserverStore', + 'globalThemeInfo', + 'customServer', + 'messageStore', +]; + +function handleReduxMigrationFailure(oldState: AppState): AppState { + const persistedNonUserSpecificFields = nonUserSpecificFieldsWeb.filter( + field => persistWhitelist.includes(field) || field === '_persist', + ); + const stateAfterReset = resetUserSpecificState( + oldState, + defaultWebState, + persistedNonUserSpecificFields, + ); + return { + ...stateAfterReset, + keyserverStore: wipeKeyserverStore(stateAfterReset.keyserverStore), + }; +} + +export { persistWhitelist, handleReduxMigrationFailure }; diff --git a/web/redux/persist.js b/web/redux/persist.js --- a/web/redux/persist.js +++ b/web/redux/persist.js @@ -31,23 +31,23 @@ import { getConfig } from 'lib/utils/config.js'; import { parseCookies } from 'lib/utils/cookie-utils.js'; import { isDev } from 'lib/utils/dev-utils.js'; -import { wipeKeyserverStore } from 'lib/utils/keyserver-store-utils.js'; import { generateIDSchemaMigrationOpsForDrafts, convertDraftStoreToNewIDSchema, } from 'lib/utils/migration-utils.js'; import { entries } from 'lib/utils/objects.js'; -import { resetUserSpecificState } from 'lib/utils/reducers-utils.js'; import { convertClientDBThreadInfoToRawThreadInfo, convertRawThreadInfoToClientDBThreadInfo, } from 'lib/utils/thread-ops-utils.js'; import commReduxStorageEngine from './comm-redux-storage-engine.js'; -import { defaultWebState } from './default-state.js'; +import { + handleReduxMigrationFailure, + persistWhitelist, +} from './handle-redux-migration-failure.js'; import { rootKey, rootKeyPrefix } from './persist-constants.js'; import type { AppState } from './redux-setup.js'; -import { nonUserSpecificFieldsWeb } from './redux-setup.js'; import { authoritativeKeyserverID } from '../authoritative-keyserver.js'; import { getCommSharedWorker } from '../shared-worker/shared-worker-provider.js'; import { getOlmWasmPath } from '../shared-worker/utils/constants.js'; @@ -56,31 +56,6 @@ declare var keyserverURL: string; -const persistWhitelist = [ - 'enabledApps', - 'alertStore', - 'commServicesAccessToken', - 'keyserverStore', - 'globalThemeInfo', - 'customServer', - 'messageStore', -]; - -function handleReduxMigrationFailure(oldState: AppState): AppState { - const persistedNonUserSpecificFields = nonUserSpecificFieldsWeb.filter( - field => persistWhitelist.includes(field) || field === '_persist', - ); - const stateAfterReset = resetUserSpecificState( - oldState, - defaultWebState, - persistedNonUserSpecificFields, - ); - return { - ...stateAfterReset, - keyserverStore: wipeKeyserverStore(stateAfterReset.keyserverStore), - }; -} - const migrations = { [1]: async (state: any) => { const {