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,7 @@
   UpdateUserAvatarResponse,
 } from './avatar-types.js';
 import type { CommunityStore, AddCommunityPayload } from './community-types.js';
-import type { DBOpsStore } from './db-ops-types.js';
+import type { MessageID, DBOpsStore } from './db-ops-types.js';
 import type {
   GetVersionActionPayload,
   LastCommunicatedPlatformDetails,
@@ -195,1188 +195,1192 @@
   +updatesCurrentAsOf: number,
 };
 
-export type BaseAction =
-  | {
-      +type: '@@redux/INIT',
-      +payload?: void,
-    }
-  | {
-      +type: 'FETCH_ENTRIES_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_ENTRIES_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_ENTRIES_SUCCESS',
-      +payload: FetchEntryInfosResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LOG_OUT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LOG_OUT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LOG_OUT_SUCCESS',
-      +payload: LogOutResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CLAIM_USERNAME_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CLAIM_USERNAME_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CLAIM_USERNAME_SUCCESS',
-      +payload: ClaimUsernameResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_KEYSERVER_ACCOUNT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_KEYSERVER_ACCOUNT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_KEYSERVER_ACCOUNT_SUCCESS',
-      +payload: KeyserverLogOutResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_ACCOUNT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_ACCOUNT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_ACCOUNT_SUCCESS',
-      +payload: LogOutResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CREATE_LOCAL_ENTRY',
-      +payload: RawEntryInfo,
-    }
-  | {
-      +type: 'CREATE_ENTRY_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CREATE_ENTRY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CREATE_ENTRY_SUCCESS',
-      +payload: CreateEntryPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SAVE_ENTRY_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SAVE_ENTRY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SAVE_ENTRY_SUCCESS',
-      +payload: SaveEntryPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CONCURRENT_MODIFICATION_RESET',
-      +payload: {
-        +id: string,
-        +dbText: string,
-      },
-    }
-  | {
-      +type: 'DELETE_ENTRY_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload: {
-        +localID: ?string,
-        +serverID: ?string,
-      },
-    }
-  | {
-      +type: 'DELETE_ENTRY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_ENTRY_SUCCESS',
-      +payload: ?DeleteEntryResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_LOG_IN_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'IDENTITY_LOG_IN_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_LOG_IN_SUCCESS',
-      +payload: IdentityAuthResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'KEYSERVER_AUTH_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload: LogInStartingPayload,
-    }
-  | {
-      +type: 'KEYSERVER_AUTH_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'KEYSERVER_AUTH_SUCCESS',
-      +payload: KeyserverAuthResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LOG_IN_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload: LogInStartingPayload,
-    }
-  | {
-      +type: 'LOG_IN_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LOG_IN_SUCCESS',
-      +payload: LogInResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'KEYSERVER_REGISTER_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload: LogInStartingPayload,
-    }
-  | {
-      +type: 'KEYSERVER_REGISTER_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'KEYSERVER_REGISTER_SUCCESS',
-      +payload: RegisterResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_REGISTER_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_REGISTER_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_REGISTER_SUCCESS',
-      +payload: IdentityAuthResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_GENERATE_NONCE_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_GENERATE_NONCE_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'IDENTITY_GENERATE_NONCE_SUCCESS',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_KEYSERVER_USER_PASSWORD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_KEYSERVER_USER_PASSWORD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_KEYSERVER_USER_PASSWORD_SUCCESS',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_SETTINGS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_SETTINGS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_SETTINGS_SUCCESS',
-      +payload: ChangeThreadSettingsPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_THREAD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_THREAD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_THREAD_SUCCESS',
-      +payload: LeaveThreadPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'NEW_THREAD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'NEW_THREAD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'NEW_THREAD_SUCCESS',
-      +payload: NewThreadResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'REMOVE_USERS_FROM_THREAD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'REMOVE_USERS_FROM_THREAD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'REMOVE_USERS_FROM_THREAD_SUCCESS',
-      +payload: ChangeThreadSettingsPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_MEMBER_ROLES_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_MEMBER_ROLES_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CHANGE_THREAD_MEMBER_ROLES_SUCCESS',
-      +payload: ChangeThreadSettingsPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_REVISIONS_FOR_ENTRY_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_REVISIONS_FOR_ENTRY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_REVISIONS_FOR_ENTRY_SUCCESS',
-      +payload: FetchRevisionsForEntryPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'RESTORE_ENTRY_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'RESTORE_ENTRY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'RESTORE_ENTRY_SUCCESS',
-      +payload: RestoreEntryPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'JOIN_THREAD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'JOIN_THREAD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'JOIN_THREAD_SUCCESS',
-      +payload: ThreadJoinPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LEAVE_THREAD_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LEAVE_THREAD_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'LEAVE_THREAD_SUCCESS',
-      +payload: LeaveThreadPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_NEW_SESSION',
-      +payload: SetSessionPayload,
-    }
-  | {
-      +type: 'persist/REHYDRATE',
-      +payload: ?BaseAppState<>,
-    }
-  | {
-      +type: 'FETCH_MESSAGES_BEFORE_CURSOR_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_MESSAGES_BEFORE_CURSOR_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_MESSAGES_BEFORE_CURSOR_SUCCESS',
-      +payload: FetchMessageInfosPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_MOST_RECENT_MESSAGES_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_MOST_RECENT_MESSAGES_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_MOST_RECENT_MESSAGES_SUCCESS',
-      +payload: FetchMessageInfosPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_SUCCESS',
-      +payload: SimpleMessagesPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_TEXT_MESSAGE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload: RawTextMessageInfo,
-    }
-  | {
-      +type: 'SEND_TEXT_MESSAGE_FAILED',
-      +error: true,
-      +payload: Error & {
-        +localID: string,
-        +threadID: string,
-      },
-      +loadingInfo?: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_TEXT_MESSAGE_SUCCESS',
-      +payload: SendMessagePayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_MULTIMEDIA_MESSAGE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload: RawMultimediaMessageInfo,
-    }
-  | {
-      +type: 'SEND_MULTIMEDIA_MESSAGE_FAILED',
-      +error: true,
-      +payload: Error & {
-        +localID: string,
-        +threadID: string,
-      },
-      +loadingInfo?: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_MULTIMEDIA_MESSAGE_SUCCESS',
-      +payload: SendMessagePayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REACTION_MESSAGE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload: RawReactionMessageInfo,
-    }
-  | {
-      +type: 'SEND_REACTION_MESSAGE_FAILED',
-      +error: true,
-      +payload: Error & {
-        +localID: string,
-        +threadID: string,
-        +targetMessageID: string,
-        +reaction: string,
-        +action: string,
-      },
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REACTION_MESSAGE_SUCCESS',
-      +payload: SendMessagePayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEARCH_USERS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEARCH_USERS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEARCH_USERS_SUCCESS',
-      +payload: UserSearchResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'EXACT_SEARCH_USER_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'EXACT_SEARCH_USER_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'EXACT_SEARCH_USER_SUCCESS',
-      +payload: ExactUserSearchResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_DRAFT',
-      +payload: {
-        +key: string,
-        +text: string,
-      },
-    }
-  | {
-      +type: 'MOVE_DRAFT',
-      +payload: {
-        +oldKey: string,
-        +newKey: string,
-      },
-    }
-  | {
-      +type: 'SET_CLIENT_DB_STORE',
-      +payload: ClientStore,
-    }
-  | {
-      +type: 'UPDATE_ACTIVITY_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_ACTIVITY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_ACTIVITY_SUCCESS',
-      +payload: ActivityUpdateSuccessPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_DEVICE_TOKEN_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_DEVICE_TOKEN_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_DEVICE_TOKEN_SUCCESS',
-      +payload: SetDeviceTokenActionPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORT_SUCCESS',
-      +payload?: ClearDeliveredReportsPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORTS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORTS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_REPORTS_SUCCESS',
-      +payload?: ClearDeliveredReportsPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'QUEUE_REPORTS',
-      +payload: QueueReportsPayload,
-    }
-  | {
-      +type: 'SET_URL_PREFIX',
-      +payload: string,
-    }
-  | {
-      +type: 'SAVE_MESSAGES',
-      +payload: SaveMessagesPayload,
-    }
-  | {
-      +type: 'UPDATE_CALENDAR_THREAD_FILTER',
-      +payload: CalendarThreadFilter,
-    }
-  | {
-      +type: 'CLEAR_CALENDAR_THREAD_FILTER',
-      +payload?: void,
-    }
-  | {
-      +type: 'SET_CALENDAR_DELETED_FILTER',
-      +payload: SetCalendarDeletedFilterPayload,
-    }
-  | {
-      +type: 'UPDATE_SUBSCRIPTION_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_SUBSCRIPTION_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_SUBSCRIPTION_SUCCESS',
-      +payload: SubscriptionUpdateResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_CALENDAR_QUERY_STARTED',
-      +loadingInfo: LoadingInfo,
-      +payload?: CalendarQueryUpdateStartingPayload,
-    }
-  | {
-      +type: 'UPDATE_CALENDAR_QUERY_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_CALENDAR_QUERY_SUCCESS',
-      +payload: CalendarQueryUpdateResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FULL_STATE_SYNC',
-      +payload: StateSyncFullActionPayload,
-    }
-  | {
-      +type: 'INCREMENTAL_STATE_SYNC',
-      +payload: StateSyncIncrementalActionPayload,
-    }
-  | ProcessServerRequestAction
-  | {
-      +type: 'UPDATE_CONNECTION_STATUS',
-      +payload: UpdateConnectionStatusPayload,
-    }
-  | {
-      +type: 'QUEUE_ACTIVITY_UPDATES',
-      +payload: QueueActivityUpdatesPayload,
-    }
-  | {
-      +type: 'UNSUPERVISED_BACKGROUND',
-      +payload: { +keyserverID: string },
-    }
-  | {
-      +type: 'UPDATE_LIFECYCLE_STATE',
-      +payload: LifecycleState,
-    }
-  | {
-      +type: 'ENABLE_APP',
-      +payload: SupportedApps,
-    }
-  | {
-      +type: 'DISABLE_APP',
-      +payload: SupportedApps,
-    }
-  | {
-      +type: 'UPDATE_REPORTS_ENABLED',
-      +payload: Partial<EnabledReports>,
-    }
-  | {
-      +type: 'PROCESS_UPDATES',
-      +payload: ClientUpdatesResultWithUserInfos,
-    }
-  | {
-      +type: 'PROCESS_MESSAGES',
-      +payload: NewMessagesPayload,
-    }
-  | {
-      +type: 'MESSAGE_STORE_PRUNE',
-      +payload: MessageStorePrunePayload,
-    }
-  | {
-      +type: 'SET_LATE_RESPONSE',
-      +payload: SetLateResponsePayload,
-    }
-  | {
-      +type: 'UPDATE_KEYSERVER_REACHABILITY',
-      +payload: UpdateKeyserverReachabilityPayload,
-    }
-  | {
-      +type: 'REQUEST_ACCESS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'REQUEST_ACCESS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'REQUEST_ACCESS_SUCCESS',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_MULTIMEDIA_MESSAGE_MEDIA',
-      +payload: UpdateMultimediaMessageMediaPayload,
-    }
-  | {
-      +type: 'CREATE_LOCAL_MESSAGE',
-      +payload: LocallyComposedMessageInfo,
-    }
-  | {
-      +type: 'UPDATE_RELATIONSHIPS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_RELATIONSHIPS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_RELATIONSHIPS_SUCCESS',
-      +payload: RelationshipErrors,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_THREAD_UNREAD_STATUS_STARTED',
-      +payload: {
-        +threadID: string,
-        +unread: boolean,
-      },
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_THREAD_UNREAD_STATUS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_THREAD_UNREAD_STATUS_SUCCESS',
-      +payload: SetThreadUnreadStatusPayload,
-    }
-  | {
-      +type: 'SET_USER_SETTINGS_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_USER_SETTINGS_SUCCESS',
-      +payload: DefaultNotificationPayload,
-    }
-  | {
-      +type: 'SET_USER_SETTINGS_FAILED',
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_MESSAGE_REPORT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_MESSAGE_REPORT_SUCCESS',
-      +payload: MessageReportCreationResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_MESSAGE_REPORT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FORCE_POLICY_ACKNOWLEDGMENT',
-      +payload: ForcePolicyAcknowledgmentPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'POLICY_ACKNOWLEDGMENT_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'POLICY_ACKNOWLEDGMENT_SUCCESS',
-      +payload: PolicyAcknowledgmentPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'POLICY_ACKNOWLEDGMENT_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_SIWE_NONCE_STARTED',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_SIWE_NONCE_SUCCESS',
-      +payload?: void,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_SIWE_NONCE_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SIWE_AUTH_STARTED',
-      +payload: LogInStartingPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SIWE_AUTH_SUCCESS',
-      +payload: LogInResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SIWE_AUTH_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'RECORD_NOTIF_PERMISSION_ALERT',
-      +payload: { +time: number },
-    }
-  | {
-      +type: 'UPDATE_USER_AVATAR_STARTED',
-      +payload: UpdateUserAvatarRequest,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_USER_AVATAR_SUCCESS',
-      +payload: UpdateUserAvatarResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_USER_AVATAR_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_EDIT_MESSAGE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'SEND_EDIT_MESSAGE_SUCCESS',
-      +payload: EditMessagePayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEND_EDIT_MESSAGE_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'TOGGLE_MESSAGE_PIN_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'TOGGLE_MESSAGE_PIN_SUCCESS',
-      +payload: ToggleMessagePinResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'TOGGLE_MESSAGE_PIN_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_PINNED_MESSAGES_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'FETCH_PINNED_MESSAGES_SUCCESS',
-      +payload: FetchPinnedMessagesResult,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_PINNED_MESSAGES_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'VERIFY_INVITE_LINK_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'VERIFY_INVITE_LINK_SUCCESS',
-      +payload: InviteLinkVerificationResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'VERIFY_INVITE_LINK_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_PRIMARY_INVITE_LINKS_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'FETCH_PRIMARY_INVITE_LINKS_SUCCESS',
-      +payload: FetchInviteLinksResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'FETCH_PRIMARY_INVITE_LINKS_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_CALENDAR_COMMUNITY_FILTER',
-      +payload: string,
-    }
-  | {
-      +type: 'CLEAR_CALENDAR_COMMUNITY_FILTER',
-      +payload: void,
-    }
-  | {
-      +type: 'UPDATE_CHAT_COMMUNITY_FILTER',
-      +payload: string,
-    }
-  | {
-      +type: 'CLEAR_CHAT_COMMUNITY_FILTER',
-      +payload: void,
-    }
-  | {
-      +type: 'SEARCH_MESSAGES_STARTED',
-      +payload: void,
-      +loadingInfo?: LoadingInfo,
-    }
-  | {
-      +type: 'SEARCH_MESSAGES_SUCCESS',
-      +payload: SearchMessagesResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SEARCH_MESSAGES_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_SUCCESS',
-      +payload: InviteLink,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DISABLE_INVITE_LINK_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'DISABLE_INVITE_LINK_SUCCESS',
-      +payload: DisableInviteLinkPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DISABLE_INVITE_LINK_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_SUCCESS',
-      +payload: GetOlmSessionInitializationDataResponse,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_DATA_LOADED',
-      +payload: {
-        +dataLoaded: boolean,
-      },
-    }
-  | {
-      +type: 'GET_VERSION_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'GET_VERSION_SUCCESS',
-      +payload: GetVersionActionPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'GET_VERSION_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'UPDATE_LAST_COMMUNICATED_PLATFORM_DETAILS',
-      +payload: LastCommunicatedPlatformDetails,
-    }
-  | { +type: 'RESET_USER_STATE', +payload?: void }
-  | {
-      +type: 'MODIFY_COMMUNITY_ROLE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'MODIFY_COMMUNITY_ROLE_SUCCESS',
-      +payload: RoleModificationPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'MODIFY_COMMUNITY_ROLE_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_COMMUNITY_ROLE_STARTED',
-      +loadingInfo?: LoadingInfo,
-      +payload?: void,
-    }
-  | {
-      +type: 'DELETE_COMMUNITY_ROLE_SUCCESS',
-      +payload: RoleDeletionPayload,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'DELETE_COMMUNITY_ROLE_FAILED',
-      +error: true,
-      +payload: Error,
-      +loadingInfo: LoadingInfo,
-    }
-  | {
-      +type: 'SET_ACCESS_TOKEN',
-      +payload: ?string,
-    }
-  | {
-      +type: 'UPDATE_THREAD_LAST_NAVIGATED',
-      +payload: { +threadID: string, +time: number },
-    }
-  | {
-      +type: 'UPDATE_INTEGRITY_STORE',
-      +payload: {
-        +threadIDsToHash?: $ReadOnlyArray<string>,
-        +threadHashingStatus?: 'starting' | 'running' | 'completed',
+export type BaseAction = $ReadOnly<{
+  +messageID?: MessageID,
+  ...
+    | {
+        +type: '@@redux/INIT',
+        +payload?: void,
+      }
+    | {
+        +type: 'FETCH_ENTRIES_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_ENTRIES_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_ENTRIES_SUCCESS',
+        +payload: FetchEntryInfosResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LOG_OUT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LOG_OUT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LOG_OUT_SUCCESS',
+        +payload: LogOutResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CLAIM_USERNAME_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CLAIM_USERNAME_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CLAIM_USERNAME_SUCCESS',
+        +payload: ClaimUsernameResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_KEYSERVER_ACCOUNT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_KEYSERVER_ACCOUNT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_KEYSERVER_ACCOUNT_SUCCESS',
+        +payload: KeyserverLogOutResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_ACCOUNT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_ACCOUNT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_ACCOUNT_SUCCESS',
+        +payload: LogOutResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CREATE_LOCAL_ENTRY',
+        +payload: RawEntryInfo,
+      }
+    | {
+        +type: 'CREATE_ENTRY_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CREATE_ENTRY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CREATE_ENTRY_SUCCESS',
+        +payload: CreateEntryPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SAVE_ENTRY_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SAVE_ENTRY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SAVE_ENTRY_SUCCESS',
+        +payload: SaveEntryPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CONCURRENT_MODIFICATION_RESET',
+        +payload: {
+          +id: string,
+          +dbText: string,
+        },
+      }
+    | {
+        +type: 'DELETE_ENTRY_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload: {
+          +localID: ?string,
+          +serverID: ?string,
+        },
+      }
+    | {
+        +type: 'DELETE_ENTRY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_ENTRY_SUCCESS',
+        +payload: ?DeleteEntryResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_LOG_IN_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'IDENTITY_LOG_IN_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_LOG_IN_SUCCESS',
+        +payload: IdentityAuthResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'KEYSERVER_AUTH_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload: LogInStartingPayload,
+      }
+    | {
+        +type: 'KEYSERVER_AUTH_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'KEYSERVER_AUTH_SUCCESS',
+        +payload: KeyserverAuthResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LOG_IN_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload: LogInStartingPayload,
+      }
+    | {
+        +type: 'LOG_IN_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LOG_IN_SUCCESS',
+        +payload: LogInResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'KEYSERVER_REGISTER_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload: LogInStartingPayload,
+      }
+    | {
+        +type: 'KEYSERVER_REGISTER_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'KEYSERVER_REGISTER_SUCCESS',
+        +payload: RegisterResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_REGISTER_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_REGISTER_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_REGISTER_SUCCESS',
+        +payload: IdentityAuthResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_GENERATE_NONCE_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_GENERATE_NONCE_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'IDENTITY_GENERATE_NONCE_SUCCESS',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_KEYSERVER_USER_PASSWORD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_KEYSERVER_USER_PASSWORD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_KEYSERVER_USER_PASSWORD_SUCCESS',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_SETTINGS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_SETTINGS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_SETTINGS_SUCCESS',
+        +payload: ChangeThreadSettingsPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_THREAD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_THREAD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_THREAD_SUCCESS',
+        +payload: LeaveThreadPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'NEW_THREAD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'NEW_THREAD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'NEW_THREAD_SUCCESS',
+        +payload: NewThreadResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'REMOVE_USERS_FROM_THREAD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'REMOVE_USERS_FROM_THREAD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'REMOVE_USERS_FROM_THREAD_SUCCESS',
+        +payload: ChangeThreadSettingsPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_MEMBER_ROLES_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_MEMBER_ROLES_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CHANGE_THREAD_MEMBER_ROLES_SUCCESS',
+        +payload: ChangeThreadSettingsPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_REVISIONS_FOR_ENTRY_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_REVISIONS_FOR_ENTRY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_REVISIONS_FOR_ENTRY_SUCCESS',
+        +payload: FetchRevisionsForEntryPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'RESTORE_ENTRY_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'RESTORE_ENTRY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'RESTORE_ENTRY_SUCCESS',
+        +payload: RestoreEntryPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'JOIN_THREAD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'JOIN_THREAD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'JOIN_THREAD_SUCCESS',
+        +payload: ThreadJoinPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LEAVE_THREAD_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LEAVE_THREAD_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'LEAVE_THREAD_SUCCESS',
+        +payload: LeaveThreadPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_NEW_SESSION',
+        +payload: SetSessionPayload,
+      }
+    | {
+        +type: 'persist/REHYDRATE',
+        +payload: ?BaseAppState<>,
+      }
+    | {
+        +type: 'FETCH_MESSAGES_BEFORE_CURSOR_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_MESSAGES_BEFORE_CURSOR_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_MESSAGES_BEFORE_CURSOR_SUCCESS',
+        +payload: FetchMessageInfosPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_MOST_RECENT_MESSAGES_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_MOST_RECENT_MESSAGES_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_MOST_RECENT_MESSAGES_SUCCESS',
+        +payload: FetchMessageInfosPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_SINGLE_MOST_RECENT_MESSAGES_FROM_THREADS_SUCCESS',
+        +payload: SimpleMessagesPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_TEXT_MESSAGE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload: RawTextMessageInfo,
+      }
+    | {
+        +type: 'SEND_TEXT_MESSAGE_FAILED',
+        +error: true,
+        +payload: Error & {
+          +localID: string,
+          +threadID: string,
+        },
+        +loadingInfo?: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_TEXT_MESSAGE_SUCCESS',
+        +payload: SendMessagePayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_MULTIMEDIA_MESSAGE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload: RawMultimediaMessageInfo,
+      }
+    | {
+        +type: 'SEND_MULTIMEDIA_MESSAGE_FAILED',
+        +error: true,
+        +payload: Error & {
+          +localID: string,
+          +threadID: string,
+        },
+        +loadingInfo?: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_MULTIMEDIA_MESSAGE_SUCCESS',
+        +payload: SendMessagePayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REACTION_MESSAGE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload: RawReactionMessageInfo,
+      }
+    | {
+        +type: 'SEND_REACTION_MESSAGE_FAILED',
+        +error: true,
+        +payload: Error & {
+          +localID: string,
+          +threadID: string,
+          +targetMessageID: string,
+          +reaction: string,
+          +action: string,
+        },
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REACTION_MESSAGE_SUCCESS',
+        +payload: SendMessagePayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEARCH_USERS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEARCH_USERS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEARCH_USERS_SUCCESS',
+        +payload: UserSearchResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'EXACT_SEARCH_USER_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'EXACT_SEARCH_USER_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'EXACT_SEARCH_USER_SUCCESS',
+        +payload: ExactUserSearchResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_DRAFT',
+        +payload: {
+          +key: string,
+          +text: string,
+        },
+      }
+    | {
+        +type: 'MOVE_DRAFT',
+        +payload: {
+          +oldKey: string,
+          +newKey: string,
+        },
+      }
+    | {
+        +type: 'SET_CLIENT_DB_STORE',
+        +payload: ClientStore,
+      }
+    | {
+        +type: 'UPDATE_ACTIVITY_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_ACTIVITY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_ACTIVITY_SUCCESS',
+        +payload: ActivityUpdateSuccessPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_DEVICE_TOKEN_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_DEVICE_TOKEN_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_DEVICE_TOKEN_SUCCESS',
+        +payload: SetDeviceTokenActionPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORT_SUCCESS',
+        +payload?: ClearDeliveredReportsPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORTS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORTS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_REPORTS_SUCCESS',
+        +payload?: ClearDeliveredReportsPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'QUEUE_REPORTS',
+        +payload: QueueReportsPayload,
+      }
+    | {
+        +type: 'SET_URL_PREFIX',
+        +payload: string,
+      }
+    | {
+        +type: 'SAVE_MESSAGES',
+        +payload: SaveMessagesPayload,
+      }
+    | {
+        +type: 'UPDATE_CALENDAR_THREAD_FILTER',
+        +payload: CalendarThreadFilter,
+      }
+    | {
+        +type: 'CLEAR_CALENDAR_THREAD_FILTER',
+        +payload?: void,
+      }
+    | {
+        +type: 'SET_CALENDAR_DELETED_FILTER',
+        +payload: SetCalendarDeletedFilterPayload,
+      }
+    | {
+        +type: 'UPDATE_SUBSCRIPTION_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_SUBSCRIPTION_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_SUBSCRIPTION_SUCCESS',
+        +payload: SubscriptionUpdateResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_CALENDAR_QUERY_STARTED',
+        +loadingInfo: LoadingInfo,
+        +payload?: CalendarQueryUpdateStartingPayload,
+      }
+    | {
+        +type: 'UPDATE_CALENDAR_QUERY_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_CALENDAR_QUERY_SUCCESS',
+        +payload: CalendarQueryUpdateResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FULL_STATE_SYNC',
+        +payload: StateSyncFullActionPayload,
+      }
+    | {
+        +type: 'INCREMENTAL_STATE_SYNC',
+        +payload: StateSyncIncrementalActionPayload,
+      }
+    | ProcessServerRequestAction
+    | {
+        +type: 'UPDATE_CONNECTION_STATUS',
+        +payload: UpdateConnectionStatusPayload,
+      }
+    | {
+        +type: 'QUEUE_ACTIVITY_UPDATES',
+        +payload: QueueActivityUpdatesPayload,
+      }
+    | {
+        +type: 'UNSUPERVISED_BACKGROUND',
+        +payload: { +keyserverID: string },
+      }
+    | {
+        +type: 'UPDATE_LIFECYCLE_STATE',
+        +payload: LifecycleState,
+      }
+    | {
+        +type: 'ENABLE_APP',
+        +payload: SupportedApps,
+      }
+    | {
+        +type: 'DISABLE_APP',
+        +payload: SupportedApps,
+      }
+    | {
+        +type: 'UPDATE_REPORTS_ENABLED',
+        +payload: Partial<EnabledReports>,
+      }
+    | {
+        +type: 'PROCESS_UPDATES',
+        +payload: ClientUpdatesResultWithUserInfos,
+      }
+    | {
+        +type: 'PROCESS_MESSAGES',
+        +payload: NewMessagesPayload,
+      }
+    | {
+        +type: 'MESSAGE_STORE_PRUNE',
+        +payload: MessageStorePrunePayload,
+      }
+    | {
+        +type: 'SET_LATE_RESPONSE',
+        +payload: SetLateResponsePayload,
+      }
+    | {
+        +type: 'UPDATE_KEYSERVER_REACHABILITY',
+        +payload: UpdateKeyserverReachabilityPayload,
+      }
+    | {
+        +type: 'REQUEST_ACCESS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'REQUEST_ACCESS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'REQUEST_ACCESS_SUCCESS',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_MULTIMEDIA_MESSAGE_MEDIA',
+        +payload: UpdateMultimediaMessageMediaPayload,
+      }
+    | {
+        +type: 'CREATE_LOCAL_MESSAGE',
+        +payload: LocallyComposedMessageInfo,
+      }
+    | {
+        +type: 'UPDATE_RELATIONSHIPS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_RELATIONSHIPS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_RELATIONSHIPS_SUCCESS',
+        +payload: RelationshipErrors,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_THREAD_UNREAD_STATUS_STARTED',
+        +payload: {
+          +threadID: string,
+          +unread: boolean,
+        },
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_THREAD_UNREAD_STATUS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_THREAD_UNREAD_STATUS_SUCCESS',
+        +payload: SetThreadUnreadStatusPayload,
+      }
+    | {
+        +type: 'SET_USER_SETTINGS_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_USER_SETTINGS_SUCCESS',
+        +payload: DefaultNotificationPayload,
+      }
+    | {
+        +type: 'SET_USER_SETTINGS_FAILED',
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_MESSAGE_REPORT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_MESSAGE_REPORT_SUCCESS',
+        +payload: MessageReportCreationResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_MESSAGE_REPORT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FORCE_POLICY_ACKNOWLEDGMENT',
+        +payload: ForcePolicyAcknowledgmentPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'POLICY_ACKNOWLEDGMENT_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'POLICY_ACKNOWLEDGMENT_SUCCESS',
+        +payload: PolicyAcknowledgmentPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'POLICY_ACKNOWLEDGMENT_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_SIWE_NONCE_STARTED',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_SIWE_NONCE_SUCCESS',
+        +payload?: void,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_SIWE_NONCE_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SIWE_AUTH_STARTED',
+        +payload: LogInStartingPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SIWE_AUTH_SUCCESS',
+        +payload: LogInResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SIWE_AUTH_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'RECORD_NOTIF_PERMISSION_ALERT',
+        +payload: { +time: number },
+      }
+    | {
+        +type: 'UPDATE_USER_AVATAR_STARTED',
+        +payload: UpdateUserAvatarRequest,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_USER_AVATAR_SUCCESS',
+        +payload: UpdateUserAvatarResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_USER_AVATAR_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_EDIT_MESSAGE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'SEND_EDIT_MESSAGE_SUCCESS',
+        +payload: EditMessagePayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEND_EDIT_MESSAGE_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'TOGGLE_MESSAGE_PIN_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'TOGGLE_MESSAGE_PIN_SUCCESS',
+        +payload: ToggleMessagePinResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'TOGGLE_MESSAGE_PIN_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_PINNED_MESSAGES_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'FETCH_PINNED_MESSAGES_SUCCESS',
+        +payload: FetchPinnedMessagesResult,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_PINNED_MESSAGES_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'VERIFY_INVITE_LINK_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'VERIFY_INVITE_LINK_SUCCESS',
+        +payload: InviteLinkVerificationResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'VERIFY_INVITE_LINK_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_PRIMARY_INVITE_LINKS_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'FETCH_PRIMARY_INVITE_LINKS_SUCCESS',
+        +payload: FetchInviteLinksResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'FETCH_PRIMARY_INVITE_LINKS_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_CALENDAR_COMMUNITY_FILTER',
+        +payload: string,
+      }
+    | {
+        +type: 'CLEAR_CALENDAR_COMMUNITY_FILTER',
+        +payload: void,
+      }
+    | {
+        +type: 'UPDATE_CHAT_COMMUNITY_FILTER',
+        +payload: string,
+      }
+    | {
+        +type: 'CLEAR_CHAT_COMMUNITY_FILTER',
+        +payload: void,
+      }
+    | {
+        +type: 'SEARCH_MESSAGES_STARTED',
+        +payload: void,
+        +loadingInfo?: LoadingInfo,
+      }
+    | {
+        +type: 'SEARCH_MESSAGES_SUCCESS',
+        +payload: SearchMessagesResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SEARCH_MESSAGES_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_SUCCESS',
+        +payload: InviteLink,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'CREATE_OR_UPDATE_PUBLIC_LINK_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DISABLE_INVITE_LINK_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'DISABLE_INVITE_LINK_SUCCESS',
+        +payload: DisableInviteLinkPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DISABLE_INVITE_LINK_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_SUCCESS',
+        +payload: GetOlmSessionInitializationDataResponse,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_OLM_SESSION_INITIALIZATION_DATA_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_DATA_LOADED',
+        +payload: {
+          +dataLoaded: boolean,
+        },
+      }
+    | {
+        +type: 'GET_VERSION_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'GET_VERSION_SUCCESS',
+        +payload: GetVersionActionPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'GET_VERSION_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'UPDATE_LAST_COMMUNICATED_PLATFORM_DETAILS',
+        +payload: LastCommunicatedPlatformDetails,
+      }
+    | { +type: 'RESET_USER_STATE', +payload?: void }
+    | {
+        +type: 'MODIFY_COMMUNITY_ROLE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'MODIFY_COMMUNITY_ROLE_SUCCESS',
+        +payload: RoleModificationPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'MODIFY_COMMUNITY_ROLE_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_COMMUNITY_ROLE_STARTED',
+        +loadingInfo?: LoadingInfo,
+        +payload?: void,
+      }
+    | {
+        +type: 'DELETE_COMMUNITY_ROLE_SUCCESS',
+        +payload: RoleDeletionPayload,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'DELETE_COMMUNITY_ROLE_FAILED',
+        +error: true,
+        +payload: Error,
+        +loadingInfo: LoadingInfo,
+      }
+    | {
+        +type: 'SET_ACCESS_TOKEN',
+        +payload: ?string,
+      }
+    | {
+        +type: 'UPDATE_THREAD_LAST_NAVIGATED',
+        +payload: { +threadID: string, +time: number },
+      }
+    | {
+        +type: 'UPDATE_INTEGRITY_STORE',
+        +payload: {
+          +threadIDsToHash?: $ReadOnlyArray<string>,
+          +threadHashingStatus?: 'starting' | 'running' | 'completed',
+        },
+      }
+    | {
+        +type: 'UPDATE_THEME_INFO',
+        +payload: Partial<GlobalThemeInfo>,
+      }
+    | {
+        +type: 'ADD_KEYSERVER',
+        +payload: AddKeyserverPayload,
+      }
+    | {
+        +type: 'REMOVE_KEYSERVER',
+        +payload: RemoveKeyserverPayload,
+      }
+    | {
+        +type: 'SET_CUSTOM_SERVER',
+        +payload: string,
+      }
+    | {
+        +type: 'SET_CONNECTION_ISSUE',
+        +payload: { +connectionIssue: ?ConnectionIssue, +keyserverID: string },
+      }
+    | {
+        +type: 'ADD_COMMUNITY',
+        +payload: AddCommunityPayload,
+      }
+    | {
+        +type: 'SET_ACTIVE_SESSION_RECOVERY',
+        +payload: SetActiveSessionRecoveryPayload,
+      }
+    | {
+        +type: 'OPS_PROCESSING_FINISHED_ACTION_TYPE',
+        +payload?: void,
       },
-    }
-  | {
-      +type: 'UPDATE_THEME_INFO',
-      +payload: Partial<GlobalThemeInfo>,
-    }
-  | {
-      +type: 'ADD_KEYSERVER',
-      +payload: AddKeyserverPayload,
-    }
-  | {
-      +type: 'REMOVE_KEYSERVER',
-      +payload: RemoveKeyserverPayload,
-    }
-  | {
-      +type: 'SET_CUSTOM_SERVER',
-      +payload: string,
-    }
-  | {
-      +type: 'SET_CONNECTION_ISSUE',
-      +payload: { +connectionIssue: ?ConnectionIssue, +keyserverID: string },
-    }
-  | {
-      +type: 'ADD_COMMUNITY',
-      +payload: AddCommunityPayload,
-    }
-  | {
-      +type: 'SET_ACTIVE_SESSION_RECOVERY',
-      +payload: SetActiveSessionRecoveryPayload,
-    }
-  | {
-      +type: 'OPS_PROCESSING_FINISHED_ACTION_TYPE',
-      +payload?: void,
-    };
+}>;
 
 export type ActionPayload = ?(Object | Array<*> | $ReadOnlyArray<*> | string);
 export type DispatchSource = 'tunnelbroker' | 'tab-sync';
 export type SuperAction = {
-  type: string,
-  payload?: ActionPayload,
-  loadingInfo?: LoadingInfo,
-  error?: boolean,
-  dispatchSource?: DispatchSource,
+  +type: string,
+  +payload?: ActionPayload,
+  +loadingInfo?: LoadingInfo,
+  +error?: boolean,
+  +dispatchSource?: DispatchSource,
+  +messageID?: MessageID,
 };
 type ThunkedAction = (dispatch: Dispatch) => void;
 export type PromisedAction = (dispatch: Dispatch) => Promise<void>;
diff --git a/lib/types/request-types.js b/lib/types/request-types.js
--- a/lib/types/request-types.js
+++ b/lib/types/request-types.js
@@ -6,6 +6,7 @@
 import { type ActivityUpdate } from './activity-types.js';
 import type { SignedIdentityKeysBlob } from './crypto-types.js';
 import { signedIdentityKeysBlobValidator } from './crypto-types.js';
+import type { MessageID } from './db-ops-types.js';
 import type { Platform, PlatformDetails } from './device-types.js';
 import {
   type RawEntryInfo,
@@ -267,6 +268,7 @@
   +keyserverID: string,
 };
 export type ProcessServerRequestAction = {
+  +messageID?: MessageID,
   +type: 'PROCESS_SERVER_REQUESTS',
   +payload: ProcessServerRequestsPayload,
 };
diff --git a/native/redux/action-types.js b/native/redux/action-types.js
--- a/native/redux/action-types.js
+++ b/native/redux/action-types.js
@@ -3,6 +3,7 @@
 import type { Orientations } from 'react-native-orientation-locker';
 
 import { saveMessagesActionType } from 'lib/actions/message-actions.js';
+import type { MessageID } from 'lib/types/db-ops-types';
 import type { BaseAction } from 'lib/types/redux-types.js';
 
 import type { DimensionsInfo } from './dimensions-updater.react.js';
@@ -23,33 +24,38 @@
   saveMessagesActionType,
 ]);
 
-export type Action =
+export type Action = $ReadOnly<
   | BaseAction
   | {
-      +type: 'SET_REDUX_STATE',
-      +payload: { +state: AppState, +hideFromMonitor: boolean },
-    }
-  | {
-      +type: 'UPDATE_DIMENSIONS',
-      +payload: Partial<DimensionsInfo>,
-    }
-  | {
-      +type: 'UPDATE_CONNECTIVITY',
-      +payload: ConnectivityInfo,
-    }
-  | {
-      +type: 'UPDATE_DEVICE_CAMERA_INFO',
-      +payload: Partial<DeviceCameraInfo>,
-    }
-  | {
-      +type: 'UPDATE_DEVICE_ORIENTATION',
-      +payload: Orientations,
-    }
-  | {
-      +type: 'UPDATE_THREAD_LAST_NAVIGATED',
-      +payload: { +threadID: string, +time: number },
-    }
-  | {
-      +type: 'SET_STORE_LOADED',
-    }
-  | { +type: 'SET_LOCAL_SETTINGS', +payload: LocalSettings };
+      +messageID?: MessageID,
+      ...
+        | {
+            +type: 'SET_REDUX_STATE',
+            +payload: { +state: AppState, +hideFromMonitor: boolean },
+          }
+        | {
+            +type: 'UPDATE_DIMENSIONS',
+            +payload: Partial<DimensionsInfo>,
+          }
+        | {
+            +type: 'UPDATE_CONNECTIVITY',
+            +payload: ConnectivityInfo,
+          }
+        | {
+            +type: 'UPDATE_DEVICE_CAMERA_INFO',
+            +payload: Partial<DeviceCameraInfo>,
+          }
+        | {
+            +type: 'UPDATE_DEVICE_ORIENTATION',
+            +payload: Orientations,
+          }
+        | {
+            +type: 'UPDATE_THREAD_LAST_NAVIGATED',
+            +payload: { +threadID: string, +time: number },
+          }
+        | {
+            +type: 'SET_STORE_LOADED',
+          }
+        | { +type: 'SET_LOCAL_SETTINGS', +payload: LocalSettings },
+    },
+>;
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,7 @@
   identityInvalidSessionDowngrade,
 } from 'lib/shared/session-utils.js';
 import type { CommunityStore } from 'lib/types/community-types.js';
-import type { DBOpsStore } from 'lib/types/db-ops-types.js';
+import type { MessageID, DBOpsStore } from 'lib/types/db-ops-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';
@@ -121,18 +121,23 @@
   +dbOpsStore: DBOpsStore,
 };
 
-export type Action =
+export type Action = $ReadOnly<
   | BaseAction
-  | { +type: 'UPDATE_NAV_INFO', +payload: Partial<WebNavInfo> }
   | {
-      +type: 'UPDATE_WINDOW_DIMENSIONS',
-      +payload: WindowDimensions,
-    }
-  | {
-      +type: 'UPDATE_WINDOW_ACTIVE',
-      +payload: boolean,
-    }
-  | { +type: 'SET_INITIAL_REDUX_STATE', +payload: InitialReduxState };
+      +messageID?: MessageID,
+      ...
+        | { +type: 'UPDATE_NAV_INFO', +payload: Partial<WebNavInfo> }
+        | {
+            +type: 'UPDATE_WINDOW_DIMENSIONS',
+            +payload: WindowDimensions,
+          }
+        | {
+            +type: 'UPDATE_WINDOW_ACTIVE',
+            +payload: boolean,
+          }
+        | { +type: 'SET_INITIAL_REDUX_STATE', +payload: InitialReduxState },
+    },
+>;
 
 function reducer(oldState: AppState | void, action: Action): AppState {
   invariant(oldState, 'should be set');