diff --git a/lib/types/crypto-types.js b/lib/types/crypto-types.js --- a/lib/types/crypto-types.js +++ b/lib/types/crypto-types.js @@ -56,17 +56,6 @@ +pickledAccount: string, }; -export type CryptoStore = { - +primaryAccount: PickledOLMAccount, - +primaryIdentityKeys: OLMIdentityKeys, - +notificationAccount: PickledOLMAccount, - +notificationIdentityKeys: OLMIdentityKeys, -}; - -export type CryptoStoreContextType = { - +getInitializedCryptoStore: () => Promise, -}; - export type NotificationsOlmDataType = { +mainSession: string, +picklingKey: string, diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -20,7 +20,6 @@ UpdateUserAvatarResponse, } from './avatar-types.js'; import type { CommunityStore, AddCommunityPayload } from './community-types.js'; -import type { CryptoStore } from './crypto-types.js'; import type { GetVersionActionPayload, LastCommunicatedPlatformDetails, @@ -162,7 +161,6 @@ export type NativeAppState = BaseAppState<>; export type WebAppState = BaseAppState<> & { - +cryptoStore: ?CryptoStore, +pushApiPublicKey: ?string, ... }; diff --git a/lib/utils/reducers-utils.test.js b/lib/utils/reducers-utils.test.js --- a/lib/utils/reducers-utils.test.js +++ b/lib/utils/reducers-utils.test.js @@ -42,7 +42,7 @@ }, windowActive: true, pushApiPublicKey: null, - cryptoStore: null, + loadingStatuses: {}, calendarFilters: defaultCalendarFilters, dataLoaded: false, diff --git a/web/redux/crypto-store-reducer.js b/web/redux/crypto-store-reducer.js deleted file mode 100644 --- a/web/redux/crypto-store-reducer.js +++ /dev/null @@ -1,26 +0,0 @@ -// @flow - -import { setNewSessionActionType } from 'lib/keyserver-conn/keyserver-conn-types.js'; -import type { CryptoStore } from 'lib/types/crypto-types.js'; -import { relyingOnAuthoritativeKeyserver } from 'lib/utils/services-utils.js'; - -import type { Action } from './redux-setup.js'; -import { authoritativeKeyserverID } from '../authoritative-keyserver.js'; - -const setCryptoStore = 'SET_CRYPTO_STORE'; - -function reduceCryptoStore(state: ?CryptoStore, action: Action): ?CryptoStore { - if (action.type === setCryptoStore) { - return action.payload; - } else if ( - action.type === setNewSessionActionType && - action.payload.sessionChange.cookieInvalidated && - action.payload.keyserverID === authoritativeKeyserverID && - relyingOnAuthoritativeKeyserver - ) { - return null; - } - return state; -} - -export { setCryptoStore, reduceCryptoStore }; diff --git a/web/redux/default-state.js b/web/redux/default-state.js --- a/web/redux/default-state.js +++ b/web/redux/default-state.js @@ -40,7 +40,6 @@ }, windowActive: true, pushApiPublicKey: null, - cryptoStore: null, windowDimensions: { width: window.width, height: window.height }, loadingStatuses: {}, calendarFilters: defaultCalendarFilters, diff --git a/web/redux/persist.js b/web/redux/persist.js --- a/web/redux/persist.js +++ b/web/redux/persist.js @@ -38,6 +38,7 @@ 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'; import { isSQLiteSupported } from '../shared-worker/utils/db-utils.js'; import { workerRequestMessageTypes } from '../types/worker-types.js'; @@ -45,7 +46,6 @@ const persistWhitelist = [ 'enabledApps', - 'cryptoStore', 'notifPermissionAlertInfo', 'commServicesAccessToken', 'keyserverStore', @@ -311,6 +311,16 @@ return handleReduxMigrationFailure(newState); } }, + [13]: async (state: any) => { + const { cryptoStore, ...rest } = state; + const sharedWorker = await getCommSharedWorker(); + await sharedWorker.schedule({ + type: workerRequestMessageTypes.INITIALIZE_CRYPTO_ACCOUNT, + olmWasmPath: getOlmWasmPath(), + initialCryptoStore: cryptoStore, + }); + return rest; + }, }; const migrateStorageToSQLite: StorageMigrationFunction = async debug => { @@ -356,7 +366,7 @@ { debug: isDev }, migrateStorageToSQLite, ): any), - version: 12, + version: 13, transforms: [keyserverStoreTransform], }; 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 @@ -27,7 +27,6 @@ identityInvalidSessionDowngrade, } from 'lib/shared/session-utils.js'; import type { CommunityStore } from 'lib/types/community-types.js'; -import type { CryptoStore } from 'lib/types/crypto-types.js'; import type { DraftStore } from 'lib/types/draft-types.js'; import type { EnabledApps } from 'lib/types/enabled-apps.js'; import type { EntryStore } from 'lib/types/entry-types.js'; @@ -57,7 +56,6 @@ setInitialReduxState, } from './action-types.js'; import { reduceCommunityPickerStore } from './community-picker-reducer.js'; -import { reduceCryptoStore, setCryptoStore } from './crypto-store-reducer.js'; import { defaultWebState } from './default-state.js'; import reduceNavInfo from './nav-reducer.js'; import { onStateDifference } from './redux-debug-utils.js'; @@ -108,7 +106,6 @@ +dataLoaded: boolean, +windowActive: boolean, +userPolicies: UserPolicies, - +cryptoStore: ?CryptoStore, +pushApiPublicKey: ?string, +_persist: ?PersistState, +commServicesAccessToken: ?string, @@ -133,7 +130,6 @@ +type: 'UPDATE_WINDOW_ACTIVE', +payload: boolean, } - | { +type: 'SET_CRYPTO_STORE', +payload: CryptoStore } | { +type: 'SET_INITIAL_REDUX_STATE', +payload: InitialReduxState }; function reducer(oldState: AppState | void, action: Action): AppState { @@ -318,10 +314,7 @@ ); } - if ( - action.type !== updateNavInfoActionType && - action.type !== setCryptoStore - ) { + if (action.type !== updateNavInfoActionType) { const baseReducerResult = baseReducer(state, action, onStateDifference); state = baseReducerResult.state; storeOperations = { @@ -345,7 +338,6 @@ action, state.threadStore.threadInfos, ), - cryptoStore: reduceCryptoStore(state.cryptoStore, action), communityPickerStore, commServicesAccessToken: reduceServicesAccessToken( state.commServicesAccessToken, diff --git a/web/shared-worker/worker/worker-crypto.js b/web/shared-worker/worker/worker-crypto.js --- a/web/shared-worker/worker/worker-crypto.js +++ b/web/shared-worker/worker/worker-crypto.js @@ -12,7 +12,6 @@ import { olmEncryptedMessageTypes, type OLMIdentityKeys, - type CryptoStore, type PickledOLMAccount, type IdentityKeysBlob, type SignedIdentityKeysBlob, @@ -57,6 +56,7 @@ type WorkerResponseMessage, workerRequestMessageTypes, workerResponseMessageTypes, + type LegacyCryptoStore, } from '../../types/worker-types.js'; import type { OlmPersistSession } from '../types/sqlite-query-executor.js'; import { isDesktopSafari } from '../utils/db-utils.js'; @@ -201,7 +201,7 @@ async function initializeCryptoAccount( olmWasmPath: string, - initialCryptoStore: ?CryptoStore, + initialCryptoStore: ?LegacyCryptoStore, ) { const sqliteQueryExecutor = getSQLiteQueryExecutor(); if (!sqliteQueryExecutor) { diff --git a/web/types/worker-types.js b/web/types/worker-types.js --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -1,7 +1,11 @@ // @flow import type { AuthMetadata } from 'lib/shared/identity-client-context.js'; -import type { OlmAPI, CryptoStore } from 'lib/types/crypto-types.js'; +import type { + PickledOLMAccount, + OLMIdentityKeys, + OlmAPI, +} from 'lib/types/crypto-types.js'; import type { PlatformDetails } from 'lib/types/device-types.js'; import type { IdentityServiceClient, @@ -115,10 +119,18 @@ +backupLogDataKey: string, }; +// Previously used on web in redux. Now only used +// in a migration to the shared worker. +export type LegacyCryptoStore = { + +primaryAccount: PickledOLMAccount, + +primaryIdentityKeys: OLMIdentityKeys, + +notificationAccount: PickledOLMAccount, + +notificationIdentityKeys: OLMIdentityKeys, +}; export type InitializeCryptoAccountRequestMessage = { +type: 12, +olmWasmPath: string, - +initialCryptoStore?: CryptoStore, + +initialCryptoStore?: LegacyCryptoStore, }; export type CreateIdentityServiceClientRequestMessage = {