diff --git a/keyserver/src/endpoints.js b/keyserver/src/endpoints.js --- a/keyserver/src/endpoints.js +++ b/keyserver/src/endpoints.js @@ -1,67 +1,12 @@ // @flow import t from 'tcomb'; +import type { TType } from 'tcomb'; import { baseLegalPolicies } from 'lib/facts/policies.js'; -import { - setThreadUnreadStatusResultValidator, - updateActivityResultValidator, -} from 'lib/types/activity-types.js'; +import type { PolicyType } from 'lib/facts/policies.js'; import type { Endpoint } from 'lib/types/endpoints.js'; -import { inviteLinkValidator } from 'lib/types/link-types.js'; -import { uploadMultimediaResultValidator } from 'lib/types/media-types.js'; -import { getOlmSessionInitializationDataResponseValidator } from 'lib/types/request-types.js'; -import { - saveEntryResponseValidator, - deleteEntryResponseValidator, - fetchEntryInfosResponseValidator, - fetchEntryRevisionInfosResultValidator, - deltaEntryInfosResultValidator, - restoreEntryResponseValidator, -} from 'lib/types/validators/entry-validators.js'; -import { createOrUpdateFarcasterChannelTagResponseValidator } from 'lib/types/validators/farcaster-channel-tag-validators.js'; -import { - fetchInviteLinksResponseValidator, - inviteLinkVerificationResponseValidator, -} from 'lib/types/validators/link-validators.js'; -import { messageReportCreationResultValidator } from 'lib/types/validators/message-report-validators.js'; -import { - fetchMessageInfosResponseValidator, - fetchPinnedMessagesResultValidator, - searchMessagesResponseValidator, - sendEditMessageResponseValidator, - sendMessageResponseValidator, -} from 'lib/types/validators/message-validators.js'; -import { initialReduxStateValidator } from 'lib/types/validators/redux-state-validators.js'; -import { relationshipErrorsValidator } from 'lib/types/validators/relationship-validators.js'; -import { - fetchErrorReportInfosResponseValidator, - reportCreationResponseValidator, -} from 'lib/types/validators/report-validators.js'; -import { - exactUserSearchResultValidator, - userSearchResultValidator, -} from 'lib/types/validators/search-validators.js'; -import { siweNonceResponseValidator } from 'lib/types/validators/siwe-nonce-validators.js'; -import { - changeThreadSettingsResultValidator, - leaveThreadResultValidator, - newThreadResponseValidator, - threadFetchMediaResultValidator, - threadJoinResultValidator, - toggleMessagePinResultValidator, - roleModificationResultValidator, - roleDeletionResultValidator, -} from 'lib/types/validators/thread-validators.js'; -import { - logInResponseValidator, - registerResponseValidator, - logOutResponseValidator, - claimUsernameResponseValidator, - subscriptionUpdateResponseValidator, - updateUserAvatarResponderValidator, -} from 'lib/types/validators/user-validators.js'; -import { versionResponseValidator } from 'lib/types/validators/version-validators.js'; +import { endpointValidators } from 'lib/types/validators/endpoint-validators.js'; import { updateUserAvatarRequestValidator } from 'lib/utils/avatar-utils.js'; import { @@ -207,6 +152,7 @@ codeVerificationRequestInputValidator, } from './responders/verification-responders.js'; import { versionResponder } from './responders/version-responders.js'; +import type { Viewer } from './session/viewer.js'; import { uploadMediaMetadataResponder, uploadDeletionResponder, @@ -219,391 +165,354 @@ () => true, ); -const jsonEndpoints: { [id: Endpoint]: JSONResponder } = { - create_account: createJSONResponder( - accountCreationResponder, - registerRequestInputValidator, - registerResponseValidator, - [], - ), - create_entry: createJSONResponder( - entryCreationResponder, - createEntryRequestInputValidator, - saveEntryResponseValidator, - baseLegalPolicies, - ), - create_error_report: createJSONResponder( - reportCreationResponder, - reportCreationRequestInputValidator, - reportCreationResponseValidator, - [], - ), - create_message_report: createJSONResponder( - messageReportCreationResponder, - messageReportCreationRequestInputValidator, - messageReportCreationResultValidator, - baseLegalPolicies, - ), - create_multimedia_message: createJSONResponder( - multimediaMessageCreationResponder, - sendMultimediaMessageRequestInputValidator, - sendMessageResponseValidator, - baseLegalPolicies, - ), - create_or_update_public_link: createJSONResponder( - createOrUpdatePublicLinkResponder, - createOrUpdatePublicLinkInputValidator, - inviteLinkValidator, - baseLegalPolicies, - ), - create_reaction_message: createJSONResponder( - reactionMessageCreationResponder, - sendReactionMessageRequestInputValidator, - sendMessageResponseValidator, - baseLegalPolicies, - ), - disable_invite_link: createJSONResponder( - disableInviteLinkResponder, - disableInviteLinkInputValidator, - t.Nil, - baseLegalPolicies, - ), - edit_message: createJSONResponder( - editMessageCreationResponder, - editMessageRequestInputValidator, - sendEditMessageResponseValidator, - baseLegalPolicies, - ), - create_report: createJSONResponder( - reportCreationResponder, - reportCreationRequestInputValidator, - reportCreationResponseValidator, - [], - ), - create_reports: createJSONResponder( - reportMultiCreationResponder, - reportMultiCreationRequestInputValidator, - t.Nil, - [], - ), - create_text_message: createJSONResponder( - textMessageCreationResponder, - sendTextMessageRequestInputValidator, - sendMessageResponseValidator, - baseLegalPolicies, - ), - create_thread: createJSONResponder( - threadCreationResponder, - newThreadRequestInputValidator, - newThreadResponseValidator, - baseLegalPolicies, - ), - delete_account: createJSONResponder( - accountDeletionResponder, - ignoredArgumentValidator, - logOutResponseValidator, - [], - ), - delete_entry: createJSONResponder( - entryDeletionResponder, - deleteEntryRequestInputValidator, - deleteEntryResponseValidator, - baseLegalPolicies, - ), - delete_community_role: createJSONResponder( - roleDeletionResponder, - roleDeletionRequestInputValidator, - roleDeletionResultValidator, - baseLegalPolicies, - ), - delete_thread: createJSONResponder( - threadDeletionResponder, - threadDeletionRequestInputValidator, - leaveThreadResultValidator, - baseLegalPolicies, - ), - delete_upload: createJSONResponder( - uploadDeletionResponder, - UploadDeletionRequestInputValidator, - t.Nil, - baseLegalPolicies, - ), - exact_search_user: createJSONResponder( - exactUserSearchResponder, - exactUserSearchRequestInputValidator, - exactUserSearchResultValidator, - [], - ), - fetch_entries: createJSONResponder( - entryFetchResponder, - entryQueryInputValidator, - fetchEntryInfosResponseValidator, - baseLegalPolicies, - ), - fetch_entry_revisions: createJSONResponder( - entryRevisionFetchResponder, - entryRevisionHistoryFetchInputValidator, - fetchEntryRevisionInfosResultValidator, - baseLegalPolicies, - ), - fetch_error_report_infos: createJSONResponder( - errorReportFetchInfosResponder, - fetchErrorReportInfosRequestInputValidator, - fetchErrorReportInfosResponseValidator, - baseLegalPolicies, - ), - fetch_messages: createJSONResponder( - messageFetchResponder, - fetchMessageInfosRequestInputValidator, - fetchMessageInfosResponseValidator, - baseLegalPolicies, - ), - fetch_pinned_messages: createJSONResponder( - fetchPinnedMessagesResponder, - fetchPinnedMessagesResponderInputValidator, - fetchPinnedMessagesResultValidator, - baseLegalPolicies, - ), - fetch_primary_invite_links: createJSONResponder( - fetchPrimaryInviteLinksResponder, - ignoredArgumentValidator, - fetchInviteLinksResponseValidator, - baseLegalPolicies, - ), - fetch_thread_media: createJSONResponder( - threadFetchMediaResponder, - threadFetchMediaRequestInputValidator, - threadFetchMediaResultValidator, - baseLegalPolicies, - ), - get_initial_redux_state: createJSONResponder( - getInitialReduxStateResponder, - initialReduxStateRequestValidator, - initialReduxStateValidator, - [], - ), - join_thread: createJSONResponder( - threadJoinResponder, - joinThreadRequestInputValidator, - threadJoinResultValidator, - baseLegalPolicies, - ), - keyserver_auth: createJSONResponder( - keyserverAuthResponder, - keyserverAuthRequestInputValidator, - logInResponseValidator, - [], - ), - leave_thread: createJSONResponder( - threadLeaveResponder, - leaveThreadRequestInputValidator, - leaveThreadResultValidator, - baseLegalPolicies, - ), - log_in: createJSONResponder( - logInResponder, - logInRequestInputValidator, - logInResponseValidator, - [], - ), - log_out: createJSONResponder( - logOutResponder, - ignoredArgumentValidator, - logOutResponseValidator, - [], - ), - modify_community_role: createJSONResponder( - roleModificationResponder, - roleModificationRequestInputValidator, - roleModificationResultValidator, - baseLegalPolicies, - ), - policy_acknowledgment: createJSONResponder( - policyAcknowledgmentResponder, - policyAcknowledgmentRequestInputValidator, - t.Nil, - [], - ), - remove_members: createJSONResponder( - memberRemovalResponder, - removeMembersRequestInputValidator, - changeThreadSettingsResultValidator, - baseLegalPolicies, - ), - restore_entry: createJSONResponder( - entryRestorationResponder, - restoreEntryRequestInputValidator, - restoreEntryResponseValidator, - baseLegalPolicies, - ), - search_messages: createJSONResponder( - searchMessagesResponder, - searchMessagesResponderInputValidator, - searchMessagesResponseValidator, - baseLegalPolicies, - ), - search_users: createJSONResponder( - userSearchResponder, - userSearchRequestInputValidator, - userSearchResultValidator, - baseLegalPolicies, - ), - send_password_reset_email: createJSONResponder( - sendPasswordResetEmailResponder, - resetPasswordRequestInputValidator, - t.Nil, - [], - ), - send_verification_email: createJSONResponder( - sendVerificationEmailResponder, - ignoredArgumentValidator, - t.Nil, - [], - ), - set_thread_unread_status: createJSONResponder( - threadSetUnreadStatusResponder, - setThreadUnreadStatusValidator, - setThreadUnreadStatusResultValidator, - baseLegalPolicies, - ), - toggle_message_pin: createJSONResponder( - toggleMessagePinResponder, - toggleMessagePinRequestInputValidator, - toggleMessagePinResultValidator, - baseLegalPolicies, - ), - update_account: createJSONResponder( - passwordUpdateResponder, - accountUpdateInputValidator, - t.Nil, - baseLegalPolicies, - ), - update_activity: createJSONResponder( - updateActivityResponder, - updateActivityResponderInputValidator, - updateActivityResultValidator, - baseLegalPolicies, - ), - update_calendar_query: createJSONResponder( - calendarQueryUpdateResponder, - newEntryQueryInputValidator, - deltaEntryInfosResultValidator, - baseLegalPolicies, - ), - update_user_settings: createJSONResponder( - updateUserSettingsResponder, - updateUserSettingsInputValidator, - t.Nil, - baseLegalPolicies, - ), - update_device_token: createJSONResponder( - deviceTokenUpdateResponder, - deviceTokenUpdateRequestInputValidator, - t.Nil, - [], - ), - update_entry: createJSONResponder( - entryUpdateResponder, - saveEntryRequestInputValidator, - saveEntryResponseValidator, - baseLegalPolicies, - ), - update_password: createJSONResponder( - oldPasswordUpdateResponder, - updatePasswordRequestInputValidator, - logInResponseValidator, - baseLegalPolicies, - ), - update_relationships: createJSONResponder( - updateRelationshipsResponder, - updateRelationshipInputValidator, - relationshipErrorsValidator, - baseLegalPolicies, - ), - update_role: createJSONResponder( - roleUpdateResponder, - roleChangeRequestInputValidator, - changeThreadSettingsResultValidator, - baseLegalPolicies, - ), - update_thread: createJSONResponder( - threadUpdateResponder, - updateThreadRequestInputValidator, - changeThreadSettingsResultValidator, - baseLegalPolicies, - ), - update_user_subscription: createJSONResponder( - userSubscriptionUpdateResponder, - subscriptionUpdateRequestInputValidator, - subscriptionUpdateResponseValidator, - baseLegalPolicies, - ), - verify_code: createJSONResponder( - codeVerificationResponder, - codeVerificationRequestInputValidator, - t.Nil, - baseLegalPolicies, - ), - verify_invite_link: createJSONResponder( - inviteLinkVerificationResponder, - inviteLinkVerificationRequestInputValidator, - inviteLinkVerificationResponseValidator, - baseLegalPolicies, - ), - siwe_nonce: createJSONResponder( - siweNonceResponder, - ignoredArgumentValidator, - siweNonceResponseValidator, - [], - ), - siwe_auth: createJSONResponder( - siweAuthResponder, - siweAuthRequestInputValidator, - logInResponseValidator, - [], - ), - claim_username: createJSONResponder( - claimUsernameResponder, - ignoredArgumentValidator, - claimUsernameResponseValidator, - [], - ), - update_user_avatar: createJSONResponder( - updateUserAvatarResponder, - updateUserAvatarRequestValidator, - updateUserAvatarResponderValidator, - baseLegalPolicies, - ), - upload_media_metadata: createJSONResponder( - uploadMediaMetadataResponder, - uploadMediaMetadataInputValidator, - uploadMultimediaResultValidator, - baseLegalPolicies, - ), - get_olm_session_initialization_data: createJSONResponder( - getOlmSessionInitializationDataResponder, - ignoredArgumentValidator, - getOlmSessionInitializationDataResponseValidator, - [], - ), - version: createJSONResponder( - versionResponder, - ignoredArgumentValidator, - versionResponseValidator, - [], - ), - create_or_update_farcaster_channel_tag: createJSONResponder( - createOrUpdateFarcasterChannelTagResponder, - createOrUpdateFarcasterChannelTagInputValidator, - createOrUpdateFarcasterChannelTagResponseValidator, - baseLegalPolicies, - ), - delete_farcaster_channel_tag: createJSONResponder( - deleteFarcasterChannelTagResponder, - deleteFarcasterChannelTagInputValidator, - t.Nil, - baseLegalPolicies, - ), +type EndpointData = { + responder: (viewer: Viewer, input: any) => Promise<*>, + inputValidator: TType<*>, + policies: $ReadOnlyArray, +}; + +const jsonEndpointsData: { +[id: Endpoint]: EndpointData } = { + create_account: { + responder: accountCreationResponder, + inputValidator: registerRequestInputValidator, + policies: [], + }, + create_entry: { + responder: entryCreationResponder, + inputValidator: createEntryRequestInputValidator, + policies: baseLegalPolicies, + }, + create_error_report: { + responder: reportCreationResponder, + inputValidator: reportCreationRequestInputValidator, + policies: [], + }, + create_message_report: { + responder: messageReportCreationResponder, + inputValidator: messageReportCreationRequestInputValidator, + policies: baseLegalPolicies, + }, + create_multimedia_message: { + responder: multimediaMessageCreationResponder, + inputValidator: sendMultimediaMessageRequestInputValidator, + policies: baseLegalPolicies, + }, + create_or_update_public_link: { + responder: createOrUpdatePublicLinkResponder, + inputValidator: createOrUpdatePublicLinkInputValidator, + policies: baseLegalPolicies, + }, + create_reaction_message: { + responder: reactionMessageCreationResponder, + inputValidator: sendReactionMessageRequestInputValidator, + policies: baseLegalPolicies, + }, + disable_invite_link: { + responder: disableInviteLinkResponder, + inputValidator: disableInviteLinkInputValidator, + policies: baseLegalPolicies, + }, + edit_message: { + responder: editMessageCreationResponder, + inputValidator: editMessageRequestInputValidator, + policies: baseLegalPolicies, + }, + create_report: { + responder: reportCreationResponder, + inputValidator: reportCreationRequestInputValidator, + policies: [], + }, + create_reports: { + responder: reportMultiCreationResponder, + inputValidator: reportMultiCreationRequestInputValidator, + policies: [], + }, + create_text_message: { + responder: textMessageCreationResponder, + inputValidator: sendTextMessageRequestInputValidator, + policies: baseLegalPolicies, + }, + create_thread: { + responder: threadCreationResponder, + inputValidator: newThreadRequestInputValidator, + policies: baseLegalPolicies, + }, + delete_account: { + responder: accountDeletionResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + delete_entry: { + responder: entryDeletionResponder, + inputValidator: deleteEntryRequestInputValidator, + policies: baseLegalPolicies, + }, + delete_community_role: { + responder: roleDeletionResponder, + inputValidator: roleDeletionRequestInputValidator, + policies: baseLegalPolicies, + }, + delete_thread: { + responder: threadDeletionResponder, + inputValidator: threadDeletionRequestInputValidator, + policies: baseLegalPolicies, + }, + delete_upload: { + responder: uploadDeletionResponder, + inputValidator: UploadDeletionRequestInputValidator, + policies: baseLegalPolicies, + }, + exact_search_user: { + responder: exactUserSearchResponder, + inputValidator: exactUserSearchRequestInputValidator, + policies: [], + }, + fetch_entries: { + responder: entryFetchResponder, + inputValidator: entryQueryInputValidator, + policies: baseLegalPolicies, + }, + fetch_entry_revisions: { + responder: entryRevisionFetchResponder, + inputValidator: entryRevisionHistoryFetchInputValidator, + policies: baseLegalPolicies, + }, + fetch_error_report_infos: { + responder: errorReportFetchInfosResponder, + inputValidator: fetchErrorReportInfosRequestInputValidator, + policies: baseLegalPolicies, + }, + fetch_messages: { + responder: messageFetchResponder, + inputValidator: fetchMessageInfosRequestInputValidator, + policies: baseLegalPolicies, + }, + fetch_pinned_messages: { + responder: fetchPinnedMessagesResponder, + inputValidator: fetchPinnedMessagesResponderInputValidator, + policies: baseLegalPolicies, + }, + fetch_primary_invite_links: { + responder: fetchPrimaryInviteLinksResponder, + inputValidator: ignoredArgumentValidator, + policies: baseLegalPolicies, + }, + fetch_thread_media: { + responder: threadFetchMediaResponder, + inputValidator: threadFetchMediaRequestInputValidator, + policies: baseLegalPolicies, + }, + get_initial_redux_state: { + responder: getInitialReduxStateResponder, + inputValidator: initialReduxStateRequestValidator, + policies: [], + }, + join_thread: { + responder: threadJoinResponder, + inputValidator: joinThreadRequestInputValidator, + policies: baseLegalPolicies, + }, + keyserver_auth: { + responder: keyserverAuthResponder, + inputValidator: keyserverAuthRequestInputValidator, + policies: [], + }, + leave_thread: { + responder: threadLeaveResponder, + inputValidator: leaveThreadRequestInputValidator, + policies: baseLegalPolicies, + }, + log_in: { + responder: logInResponder, + inputValidator: logInRequestInputValidator, + policies: [], + }, + log_out: { + responder: logOutResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + modify_community_role: { + responder: roleModificationResponder, + inputValidator: roleModificationRequestInputValidator, + policies: baseLegalPolicies, + }, + policy_acknowledgment: { + responder: policyAcknowledgmentResponder, + inputValidator: policyAcknowledgmentRequestInputValidator, + policies: [], + }, + remove_members: { + responder: memberRemovalResponder, + inputValidator: removeMembersRequestInputValidator, + policies: baseLegalPolicies, + }, + restore_entry: { + responder: entryRestorationResponder, + inputValidator: restoreEntryRequestInputValidator, + policies: baseLegalPolicies, + }, + search_messages: { + responder: searchMessagesResponder, + inputValidator: searchMessagesResponderInputValidator, + policies: baseLegalPolicies, + }, + search_users: { + responder: userSearchResponder, + inputValidator: userSearchRequestInputValidator, + policies: baseLegalPolicies, + }, + send_password_reset_email: { + responder: sendPasswordResetEmailResponder, + inputValidator: resetPasswordRequestInputValidator, + policies: [], + }, + send_verification_email: { + responder: sendVerificationEmailResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + set_thread_unread_status: { + responder: threadSetUnreadStatusResponder, + inputValidator: setThreadUnreadStatusValidator, + policies: baseLegalPolicies, + }, + toggle_message_pin: { + responder: toggleMessagePinResponder, + inputValidator: toggleMessagePinRequestInputValidator, + policies: baseLegalPolicies, + }, + update_account: { + responder: passwordUpdateResponder, + inputValidator: accountUpdateInputValidator, + policies: baseLegalPolicies, + }, + update_activity: { + responder: updateActivityResponder, + inputValidator: updateActivityResponderInputValidator, + policies: baseLegalPolicies, + }, + update_calendar_query: { + responder: calendarQueryUpdateResponder, + inputValidator: newEntryQueryInputValidator, + policies: baseLegalPolicies, + }, + update_user_settings: { + responder: updateUserSettingsResponder, + inputValidator: updateUserSettingsInputValidator, + policies: baseLegalPolicies, + }, + update_device_token: { + responder: deviceTokenUpdateResponder, + inputValidator: deviceTokenUpdateRequestInputValidator, + policies: [], + }, + update_entry: { + responder: entryUpdateResponder, + inputValidator: saveEntryRequestInputValidator, + policies: baseLegalPolicies, + }, + update_password: { + responder: oldPasswordUpdateResponder, + inputValidator: updatePasswordRequestInputValidator, + policies: baseLegalPolicies, + }, + update_relationships: { + responder: updateRelationshipsResponder, + inputValidator: updateRelationshipInputValidator, + policies: baseLegalPolicies, + }, + update_role: { + responder: roleUpdateResponder, + inputValidator: roleChangeRequestInputValidator, + policies: baseLegalPolicies, + }, + update_thread: { + responder: threadUpdateResponder, + inputValidator: updateThreadRequestInputValidator, + policies: baseLegalPolicies, + }, + update_user_subscription: { + responder: userSubscriptionUpdateResponder, + inputValidator: subscriptionUpdateRequestInputValidator, + policies: baseLegalPolicies, + }, + verify_code: { + responder: codeVerificationResponder, + inputValidator: codeVerificationRequestInputValidator, + policies: baseLegalPolicies, + }, + verify_invite_link: { + responder: inviteLinkVerificationResponder, + inputValidator: inviteLinkVerificationRequestInputValidator, + policies: baseLegalPolicies, + }, + siwe_nonce: { + responder: siweNonceResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + siwe_auth: { + responder: siweAuthResponder, + inputValidator: siweAuthRequestInputValidator, + policies: [], + }, + claim_username: { + responder: claimUsernameResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + update_user_avatar: { + responder: updateUserAvatarResponder, + inputValidator: updateUserAvatarRequestValidator, + policies: baseLegalPolicies, + }, + upload_media_metadata: { + responder: uploadMediaMetadataResponder, + inputValidator: uploadMediaMetadataInputValidator, + policies: baseLegalPolicies, + }, + get_olm_session_initialization_data: { + responder: getOlmSessionInitializationDataResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + version: { + responder: versionResponder, + inputValidator: ignoredArgumentValidator, + policies: [], + }, + create_or_update_farcaster_channel_tag: { + responder: createOrUpdateFarcasterChannelTagResponder, + inputValidator: createOrUpdateFarcasterChannelTagInputValidator, + policies: baseLegalPolicies, + }, + delete_farcaster_channel_tag: { + responder: deleteFarcasterChannelTagResponder, + inputValidator: deleteFarcasterChannelTagInputValidator, + policies: baseLegalPolicies, + }, }; +function createJSONResponders(obj: { +[Endpoint]: EndpointData }): { + +[Endpoint]: JSONResponder, +} { + const result: { [Endpoint]: JSONResponder } = {}; + + Object.keys(obj).forEach((endpoint: Endpoint) => { + const responder = createJSONResponder( + obj[endpoint].responder, + obj[endpoint].inputValidator, + endpointValidators[endpoint].validator, + obj[endpoint].policies, + ); + result[endpoint] = responder; + }); + + return result; +} + +const jsonEndpoints: { +[Endpoint]: JSONResponder } = + createJSONResponders(jsonEndpointsData); + export { jsonEndpoints };