diff --git a/keyserver/src/responders/activity-responders.js b/keyserver/src/responders/activity-responders.js --- a/keyserver/src/responders/activity-responders.js +++ b/keyserver/src/responders/activity-responders.js @@ -39,7 +39,11 @@ ): Promise { const request = await validateInput(viewer, inputValidator, input); const result = await activityUpdater(viewer, request); - return validateOutput(viewer, updateActivityResultValidator, result); + return validateOutput( + viewer.platformDetails, + updateActivityResultValidator, + result, + ); } const setThreadUnreadStatusValidator = tShape({ @@ -58,7 +62,11 @@ ); const result = await setThreadUnreadStatus(viewer, request); - return validateOutput(viewer, setThreadUnreadStatusResult, result); + return validateOutput( + viewer.platformDetails, + setThreadUnreadStatusResult, + result, + ); } export { diff --git a/keyserver/src/responders/entry-responders.js b/keyserver/src/responders/entry-responders.js --- a/keyserver/src/responders/entry-responders.js +++ b/keyserver/src/responders/entry-responders.js @@ -148,10 +148,14 @@ await verifyCalendarQueryThreadIDs(request); const response = await fetchEntryInfos(viewer, [request]); - return validateOutput(viewer, fetchEntryInfosResponseValidator, { - ...response, - userInfos: {}, - }); + return validateOutput( + viewer.platformDetails, + fetchEntryInfosResponseValidator, + { + ...response, + userInfos: {}, + }, + ); } const entryRevisionHistoryFetchInputValidator = @@ -176,7 +180,7 @@ const entryHistory = await fetchEntryRevisionInfo(viewer, request.id); const response = { result: entryHistory }; return validateOutput( - viewer, + viewer.platformDetails, fetchEntryRevisionInfosResultValidator, response, ); @@ -209,7 +213,11 @@ input, ); const response = await createEntry(viewer, request); - return validateOutput(viewer, saveEntryResponseValidator, response); + return validateOutput( + viewer.platformDetails, + saveEntryResponseValidator, + response, + ); } const saveEntryRequestInputValidator = tShape({ @@ -231,7 +239,11 @@ input, ); const response = await updateEntry(viewer, request); - return validateOutput(viewer, saveEntryResponseValidator, response); + return validateOutput( + viewer.platformDetails, + saveEntryResponseValidator, + response, + ); } const deleteEntryRequestInputValidator = tShape({ @@ -259,7 +271,11 @@ input, ); const response = await deleteEntry(viewer, request); - return validateOutput(viewer, deleteEntryResponseValidator, response); + return validateOutput( + viewer.platformDetails, + deleteEntryResponseValidator, + response, + ); } const restoreEntryRequestInputValidator = tShape({ @@ -285,7 +301,11 @@ input, ); const response = await restoreEntry(viewer, request); - return validateOutput(viewer, restoreEntryResponseValidator, response); + return validateOutput( + viewer.platformDetails, + restoreEntryResponseValidator, + response, + ); } export const deltaEntryInfosResultValidator: TInterface = @@ -318,12 +338,16 @@ commitSessionUpdate(viewer, sessionUpdate), ]); - return validateOutput(viewer, deltaEntryInfosResultValidator, { - rawEntryInfos: response.rawEntryInfos, - deletedEntryIDs: response.deletedEntryIDs, - // Old clients expect userInfos object - userInfos: [], - }); + return validateOutput( + viewer.platformDetails, + deltaEntryInfosResultValidator, + { + rawEntryInfos: response.rawEntryInfos, + deletedEntryIDs: response.deletedEntryIDs, + // Old clients expect userInfos object + userInfos: [], + }, + ); } export { diff --git a/keyserver/src/responders/keys-responders.js b/keyserver/src/responders/keys-responders.js --- a/keyserver/src/responders/keys-responders.js +++ b/keyserver/src/responders/keys-responders.js @@ -35,7 +35,7 @@ ); const response = await fetchSessionPublicKeys(request.session); return validateOutput( - viewer, + viewer.platformDetails, getSessionPublicKeysResponseValidator, response, ); diff --git a/keyserver/src/responders/message-report-responder.js b/keyserver/src/responders/message-report-responder.js --- a/keyserver/src/responders/message-report-responder.js +++ b/keyserver/src/responders/message-report-responder.js @@ -33,7 +33,11 @@ const rawMessageInfos = await createMessageReport(viewer, request); const result = { messageInfo: rawMessageInfos[0] }; - return validateOutput(viewer, messageReportCreationResultValidator, result); + return validateOutput( + viewer.platformDetails, + messageReportCreationResultValidator, + result, + ); } export { messageReportCreationResponder }; diff --git a/keyserver/src/responders/message-responders.js b/keyserver/src/responders/message-responders.js --- a/keyserver/src/responders/message-responders.js +++ b/keyserver/src/responders/message-responders.js @@ -123,7 +123,11 @@ const rawMessageInfos = await createMessages(viewer, [messageData]); const response = { newMessageInfo: rawMessageInfos[0] }; - return validateOutput(viewer, sendMessageResponseValidator, response); + return validateOutput( + viewer.platformDetails, + sendMessageResponseValidator, + response, + ); } const fetchMessageInfosRequestInputValidator = tShape( @@ -154,10 +158,14 @@ { threadCursors: request.cursors }, request.numberPerThread ? request.numberPerThread : defaultNumberPerThread, ); - return validateOutput(viewer, fetchMessageInfosResponseValidator, { - ...response, - userInfos: {}, - }); + return validateOutput( + viewer.platformDetails, + fetchMessageInfosResponseValidator, + { + ...response, + userInfos: {}, + }, + ); } const sendMultimediaMessageRequestInputValidator = @@ -253,7 +261,11 @@ } const response = { newMessageInfo }; - return validateOutput(viewer, sendMessageResponseValidator, response); + return validateOutput( + viewer.platformDetails, + sendMessageResponseValidator, + response, + ); } const sendReactionMessageRequestInputValidator = @@ -332,7 +344,11 @@ const rawMessageInfos = await createMessages(viewer, [messageData]); const response = { newMessageInfo: rawMessageInfos[0] }; - return validateOutput(viewer, sendMessageResponseValidator, response); + return validateOutput( + viewer.platformDetails, + sendMessageResponseValidator, + response, + ); } const editMessageRequestInputValidator = tShape({ @@ -426,7 +442,11 @@ const newMessageInfos = await createMessages(viewer, messagesData); const response = { newMessageInfos }; - return validateOutput(viewer, sendEditMessageResponseValidator, response); + return validateOutput( + viewer.platformDetails, + sendEditMessageResponseValidator, + response, + ); } const fetchPinnedMessagesResponderInputValidator = @@ -449,7 +469,11 @@ input, ); const response = await fetchPinnedMessageInfos(viewer, request); - return validateOutput(viewer, fetchPinnedMessagesResultValidator, response); + return validateOutput( + viewer.platformDetails, + fetchPinnedMessagesResultValidator, + response, + ); } export { diff --git a/keyserver/src/responders/relationship-responders.js b/keyserver/src/responders/relationship-responders.js --- a/keyserver/src/responders/relationship-responders.js +++ b/keyserver/src/responders/relationship-responders.js @@ -35,7 +35,11 @@ input, ); const response = await updateRelationships(viewer, request); - return validateOutput(viewer, relationshipErrorsValidator, response); + return validateOutput( + viewer.platformDetails, + relationshipErrorsValidator, + response, + ); } export { updateRelationshipsResponder }; diff --git a/keyserver/src/responders/report-responders.js b/keyserver/src/responders/report-responders.js --- a/keyserver/src/responders/report-responders.js +++ b/keyserver/src/responders/report-responders.js @@ -159,7 +159,11 @@ if (!response) { throw new ServerError('ignored_report'); } - return validateOutput(viewer, reportCreationResponseValidator, response); + return validateOutput( + viewer.platformDetails, + reportCreationResponseValidator, + response, + ); } const reportMultiCreationRequestInputValidator = @@ -232,7 +236,7 @@ ); const response = await fetchErrorReportInfos(viewer, request); return validateOutput( - viewer, + viewer.platformDetails, fetchErrorReportInfosResponseValidator, response, ); diff --git a/keyserver/src/responders/search-responders.js b/keyserver/src/responders/search-responders.js --- a/keyserver/src/responders/search-responders.js +++ b/keyserver/src/responders/search-responders.js @@ -33,7 +33,11 @@ ); const searchResults = await searchForUsers(request); const result = { userInfos: searchResults }; - return validateOutput(viewer, userSearchResultValidator, result); + return validateOutput( + viewer.platformDetails, + userSearchResultValidator, + result, + ); } export { userSearchResponder }; diff --git a/keyserver/src/responders/thread-responders.js b/keyserver/src/responders/thread-responders.js --- a/keyserver/src/responders/thread-responders.js +++ b/keyserver/src/responders/thread-responders.js @@ -81,7 +81,11 @@ input, ); const result = await deleteThread(viewer, request); - return validateOutput(viewer, leaveThreadResultValidator, result); + return validateOutput( + viewer.platformDetails, + leaveThreadResultValidator, + result, + ); } export const roleChangeRequestInputValidator: TInterface = @@ -117,7 +121,11 @@ input, ); const result = await updateRole(viewer, request); - return validateOutput(viewer, changeThreadSettingsResultValidator, result); + return validateOutput( + viewer.platformDetails, + changeThreadSettingsResultValidator, + result, + ); } const removeMembersRequestInputValidator = tShape({ @@ -135,7 +143,11 @@ input, ); const result = await removeMembers(viewer, request); - return validateOutput(viewer, changeThreadSettingsResultValidator, result); + return validateOutput( + viewer.platformDetails, + changeThreadSettingsResultValidator, + result, + ); } const leaveThreadRequestInputValidator = tShape({ @@ -152,7 +164,11 @@ input, ); const result = await leaveThread(viewer, request); - return validateOutput(viewer, leaveThreadResultValidator, result); + return validateOutput( + viewer.platformDetails, + leaveThreadResultValidator, + result, + ); } const updateThreadRequestInputValidator = tShape({ @@ -179,7 +195,11 @@ input, ); const result = await updateThread(viewer, request); - return validateOutput(viewer, changeThreadSettingsResultValidator, result); + return validateOutput( + viewer.platformDetails, + changeThreadSettingsResultValidator, + result, + ); } const threadRequestValidationShape = { @@ -233,7 +253,11 @@ const result = await createThread(viewer, request, { silentlyFailMembers: request.type === threadTypes.SIDEBAR, }); - return validateOutput(viewer, newThreadResponseValidator, result); + return validateOutput( + viewer.platformDetails, + newThreadResponseValidator, + result, + ); } const joinThreadRequestInputValidator = tShape({ @@ -269,7 +293,11 @@ } const result = await joinThread(viewer, request); - return validateOutput(viewer, threadJoinResultValidator, result); + return validateOutput( + viewer.platformDetails, + threadJoinResultValidator, + result, + ); } const threadFetchMediaRequestInputValidator = tShape({ @@ -291,7 +319,11 @@ input, ); const result = await fetchMediaForThread(viewer, request); - return validateOutput(viewer, threadFetchMediaResultValidator, result); + return validateOutput( + viewer.platformDetails, + threadFetchMediaResultValidator, + result, + ); } const toggleMessagePinRequestInputValidator = tShape({ @@ -315,7 +347,11 @@ input, ); const result = await toggleMessagePinForThread(viewer, request); - return validateOutput(viewer, toggleMessagePinResultValidator, result); + return validateOutput( + viewer.platformDetails, + toggleMessagePinResultValidator, + result, + ); } export { diff --git a/keyserver/src/responders/user-responders.js b/keyserver/src/responders/user-responders.js --- a/keyserver/src/responders/user-responders.js +++ b/keyserver/src/responders/user-responders.js @@ -157,9 +157,13 @@ input, ); const threadSubscription = await userSubscriptionUpdater(viewer, request); - return validateOutput(viewer, subscriptionUpdateResponseValidator, { - threadSubscription, - }); + return validateOutput( + viewer.platformDetails, + subscriptionUpdateResponseValidator, + { + threadSubscription, + }, + ); } const accountUpdateInputValidator = tShape({ @@ -230,7 +234,11 @@ anonymous: true, }, }; - return validateOutput(viewer, logOutResponseValidator, response); + return validateOutput( + viewer.platformDetails, + logOutResponseValidator, + response, + ); } const deleteAccountRequestInputValidator = tShape({ @@ -248,7 +256,11 @@ ); const result = await deleteAccount(viewer, request); invariant(result, 'deleteAccount should return result if handed request'); - return validateOutput(viewer, logOutResponseValidator, result); + return validateOutput( + viewer.platformDetails, + logOutResponseValidator, + result, + ); } const deviceTokenUpdateRequestInputValidator = tShape({ @@ -313,7 +325,11 @@ } } const response = await createAccount(viewer, request); - return validateOutput(viewer, registerResponseValidator, response); + return validateOutput( + viewer.platformDetails, + registerResponseValidator, + response, + ); } type ProcessSuccessfulLoginParams = { @@ -528,7 +544,11 @@ calendarQuery, signedIdentityKeysBlob, }); - return validateOutput(viewer, logInResponseValidator, response); + return validateOutput( + viewer.platformDetails, + logInResponseValidator, + response, + ); } const siweAuthRequestInputValidator = tShape({ @@ -668,7 +688,11 @@ socialProof, signedIdentityKeysBlob, }); - return validateOutput(viewer, logInResponseValidator, response); + return validateOutput( + viewer.platformDetails, + logInResponseValidator, + response, + ); } const updatePasswordRequestInputValidator = tShape({ @@ -694,7 +718,11 @@ request.calendarQuery = normalizeCalendarQuery(request.calendarQuery); } const response = await updatePassword(viewer, request); - return validateOutput(viewer, logInResponseValidator, response); + return validateOutput( + viewer.platformDetails, + logInResponseValidator, + response, + ); } const updateUserSettingsInputValidator = tShape({ @@ -754,7 +782,11 @@ input, ); const result = await updateUserAvatar(viewer, request); - return validateOutput(viewer, updateUserAvatarResponderValidator, result); + return validateOutput( + viewer.platformDetails, + updateUserAvatarResponderValidator, + result, + ); } export { diff --git a/keyserver/src/responders/website-responders.js b/keyserver/src/responders/website-responders.js --- a/keyserver/src/responders/website-responders.js +++ b/keyserver/src/responders/website-responders.js @@ -527,7 +527,7 @@ commServicesAccessToken: null, }); const validatedInitialReduxState = validateOutput( - viewer, + viewer.platformDetails, initialReduxStateValidator, initialReduxState, ); diff --git a/keyserver/src/socket/socket.js b/keyserver/src/socket/socket.js --- a/keyserver/src/socket/socket.js +++ b/keyserver/src/socket/socket.js @@ -380,7 +380,7 @@ if (this.ws.readyState === 1) { const { viewer } = this; const validatedMessage = validateOutput( - viewer, + viewer?.platformDetails, serverServerSocketMessageValidator, message, ); diff --git a/keyserver/src/utils/validation-utils.js b/keyserver/src/utils/validation-utils.js --- a/keyserver/src/utils/validation-utils.js +++ b/keyserver/src/utils/validation-utils.js @@ -5,8 +5,11 @@ import type { TType, TInterface } from 'tcomb'; import type { PolicyType } from 'lib/facts/policies.js'; -import { hasMinCodeVersion } from 'lib/shared/version-utils.js'; -import { isWebPlatform } from 'lib/types/device-types.js'; +import { + hasMinCodeVersion, + FUTURE_CODE_VERSION, +} from 'lib/shared/version-utils.js'; +import { type PlatformDetails, isWebPlatform } from 'lib/types/device-types.js'; import { ServerError } from 'lib/utils/errors.js'; import { tCookie, @@ -35,7 +38,7 @@ const convertedInput = checkInputValidator(inputValidator, input); if ( - hasMinCodeVersion(viewer.platformDetails, 1000) && + hasMinCodeVersion(viewer.platformDetails, FUTURE_CODE_VERSION) && !isWebPlatform(viewer.platformDetails?.platform) && convertToNewIDSchema ) { @@ -50,7 +53,7 @@ } function validateOutput( - viewer: ?Viewer, + platformDetails: ?PlatformDetails, outputValidator: TType, data: T, ): T { @@ -63,8 +66,8 @@ } if ( - hasMinCodeVersion(viewer?.platformDetails, 1000) && - !isWebPlatform(viewer?.platformDetails?.platform) && + hasMinCodeVersion(platformDetails, FUTURE_CODE_VERSION) && + !isWebPlatform(platformDetails?.platform) && convertToNewIDSchema ) { return convertServerIDsToClientIDs(