diff --git a/lib/utils/thread-ops-utils.js b/lib/utils/thread-ops-utils.js --- a/lib/utils/thread-ops-utils.js +++ b/lib/utils/thread-ops-utils.js @@ -5,6 +5,7 @@ import { minimallyEncodedMemberInfoValidator, minimallyEncodedRoleInfoValidator, + minimallyEncodedThreadCurrentUserInfoValidator, } from '../permissions/minimally-encoded-thread-permissions-validators.js'; import type { MinimallyEncodedMemberInfo, @@ -15,6 +16,7 @@ decodeMinimallyEncodedRawThreadInfo, minimallyEncodeMemberInfo, minimallyEncodeRoleInfo, + minimallyEncodeThreadCurrentUserInfo, } from '../types/minimally-encoded-thread-permissions-types.js'; import { assertThreadType } from '../types/thread-types-enum.js'; import { @@ -23,6 +25,7 @@ type LegacyRawThreadInfo, legacyRoleInfoValidator, type RawThreadInfo, + threadCurrentUserInfoValidator, } from '../types/thread-types.js'; function convertRawThreadInfoToClientDBThreadInfo( @@ -75,6 +78,17 @@ {}, ); + // 3. Validate and potentially minimally encode `rawCurrentUser`. + const rawCurrentUser = JSON.parse(clientDBThreadInfo.currentUser); + invariant( + minimallyEncodedThreadCurrentUserInfoValidator.is(rawCurrentUser) || + threadCurrentUserInfoValidator.is(rawCurrentUser), + 'rawCurrentUser must be valid [MinimallyEncoded]ThreadCurrentUserInfo', + ); + const minimallyEncodedCurrentUser = rawCurrentUser.minimallyEncoded + ? rawCurrentUser + : minimallyEncodeThreadCurrentUserInfo(rawCurrentUser); + let rawThreadInfo: MinimallyEncodedRawThreadInfo = { minimallyEncoded: true, id: clientDBThreadInfo.id, @@ -88,7 +102,7 @@ community: clientDBThreadInfo.community, members: minimallyEncodedMembers, roles: minimallyEncodedRoles, - currentUser: JSON.parse(clientDBThreadInfo.currentUser), + currentUser: minimallyEncodedCurrentUser, repliesCount: clientDBThreadInfo.repliesCount, pinnedCount: clientDBThreadInfo.pinnedCount, };