diff --git a/keyserver/src/endpoints.js b/keyserver/src/endpoints.js --- a/keyserver/src/endpoints.js +++ b/keyserver/src/endpoints.js @@ -7,6 +7,7 @@ import type { PolicyType } from 'lib/facts/policies.js'; import type { Endpoint } from 'lib/types/endpoints.js'; import { calendarQueryValidator } from 'lib/types/entry-types.js'; +import { sessionStateValidator } from 'lib/types/session-types.js'; import { endpointValidators } from 'lib/types/validators/endpoint-validators.js'; import { updateUserAvatarRequestValidator } from 'lib/utils/avatar-utils.js'; @@ -121,6 +122,7 @@ roleDeletionRequestInputValidator, roleModificationRequestInputValidator, } from './responders/thread-responders.js'; +import { fetchPendingUpdatesResponder } from './responders/update-responders.js'; import { keyserverAuthRequestInputValidator, keyserverAuthResponder, @@ -289,6 +291,11 @@ inputValidator: fetchMessageInfosRequestInputValidator, policies: baseLegalPolicies, }, + fetch_pending_updates: { + responder: fetchPendingUpdatesResponder, + inputValidator: sessionStateValidator, + policies: baseLegalPolicies, + }, fetch_pinned_messages: { responder: fetchPinnedMessagesResponder, inputValidator: fetchPinnedMessagesResponderInputValidator, diff --git a/keyserver/src/responders/update-responders.js b/keyserver/src/responders/update-responders.js new file mode 100644 --- /dev/null +++ b/keyserver/src/responders/update-responders.js @@ -0,0 +1,16 @@ +// @flow + +import type { SessionState } from 'lib/types/session-types.js'; +import type { ServerStateSyncSocketPayload } from 'lib/types/socket-types.js'; + +import { Viewer } from '../session/viewer.js'; +import { fetchDataForSocketInit } from '../socket/fetch-data.js'; + +function fetchPendingUpdatesResponder( + viewer: Viewer, + request: SessionState, +): Promise { + return fetchDataForSocketInit(viewer, request); +} + +export { fetchPendingUpdatesResponder }; diff --git a/lib/types/endpoints.js b/lib/types/endpoints.js --- a/lib/types/endpoints.js +++ b/lib/types/endpoints.js @@ -39,15 +39,16 @@ }); type UploadEndpoint = $Values; -const intialReduxStateEndpoints = Object.freeze({ +const largeDataFetchEndpoints = Object.freeze({ GET_INITIAL_REDUX_STATE: 'get_initial_redux_state', + FETCH_PENDING_UPDATES: 'fetch_pending_updates', }); -type InitialReduxStateEndpoint = $Values; +type LargeDataFetchEndpoint = $Values; type HTTPOnlyEndpoint = | SessionChangingEndpoint | UploadEndpoint - | InitialReduxStateEndpoint; + | LargeDataFetchEndpoint; const socketOnlyEndpoints = Object.freeze({ UPDATE_ACTIVITY: 'update_activity', diff --git a/lib/types/socket-types.js b/lib/types/socket-types.js --- a/lib/types/socket-types.js +++ b/lib/types/socket-types.js @@ -294,10 +294,11 @@ export type ServerStateSyncSocketPayload = | ServerStateSyncFullSocketPayload | ServerStateSyncIncrementalSocketPayload; -const serverStateSyncSocketPayloadValidator = t.union([ - serverStateSyncFullSocketPayloadValidator, - serverStateSyncIncrementalSocketPayloadValidator, -]); +export const serverStateSyncSocketPayloadValidator: TUnion = + t.union([ + serverStateSyncFullSocketPayloadValidator, + serverStateSyncIncrementalSocketPayloadValidator, + ]); export type ServerStateSyncServerSocketMessage = { +type: 0, diff --git a/lib/types/validators/endpoint-validators.js b/lib/types/validators/endpoint-validators.js --- a/lib/types/validators/endpoint-validators.js +++ b/lib/types/validators/endpoint-validators.js @@ -62,6 +62,7 @@ import { inviteLinkValidator } from '../link-types.js'; import { uploadMultimediaResultValidator } from '../media-types.js'; import { getOlmSessionInitializationDataResponseValidator } from '../request-types.js'; +import { serverStateSyncSocketPayloadValidator } from '../socket-types.js'; const sessionChangingEndpoints = Object.freeze({ log_out: { @@ -93,10 +94,13 @@ }, }); -const initialReduxStateEndpoints = Object.freeze({ +const largeDataFetchEndpoints = Object.freeze({ get_initial_redux_state: { validator: initialReduxStateValidator, }, + fetch_pending_updates: { + validator: serverStateSyncSocketPayloadValidator, + }, }); const socketOnlyEndpoints = Object.freeze({ @@ -179,7 +183,7 @@ export const endpointValidators = Object.freeze({ ...sessionChangingEndpoints, ...uploadEndpoints, - ...initialReduxStateEndpoints, + ...largeDataFetchEndpoints, ...socketOnlyEndpoints, ...socketPreferredEndpoints, ...httpPreferredEndpoints,