diff --git a/lib/types/minimally-encoded-thread-permissions-types.js b/lib/types/minimally-encoded-thread-permissions-types.js --- a/lib/types/minimally-encoded-thread-permissions-types.js +++ b/lib/types/minimally-encoded-thread-permissions-types.js @@ -13,6 +13,7 @@ import type { MemberInfo, RawThreadInfo, + RelativeMemberInfo, RoleInfo, ThreadCurrentUserInfo, } from './thread-types.js'; @@ -125,6 +126,39 @@ }; }; +export type MinimallyEncodedRelativeMemberInfo = $ReadOnly<{ + ...MinimallyEncodedMemberInfo, + +username: ?string, + +isViewer: boolean, +}>; + +const minimallyEncodedRelativeMemberInfoValidator: TInterface = + tShape({ + ...minimallyEncodedMemberInfoValidator.meta.props, + username: t.maybe(t.String), + isViewer: t.Boolean, + }); + +const minimallyEncodeRelativeMemberInfo = ( + relativeMemberInfo: RelativeMemberInfo, +): MinimallyEncodedRelativeMemberInfo => ({ + ...relativeMemberInfo, + minimallyEncoded: true, + permissions: permissionsToBitmaskHex(relativeMemberInfo.permissions), +}); + +const decodeMinimallyEncodedRelativeMemberInfo = ( + minimallyEncodedRelativeMemberInfo: MinimallyEncodedRelativeMemberInfo, +): RelativeMemberInfo => { + const { minimallyEncoded, ...rest } = minimallyEncodedRelativeMemberInfo; + return { + ...rest, + permissions: threadPermissionsFromBitmaskHex( + minimallyEncodedRelativeMemberInfo.permissions, + ), + }; +}; + export type MinimallyEncodedRawThreadInfo = $ReadOnly<{ ...RawThreadInfo, +minimallyEncoded: true, @@ -181,4 +215,7 @@ minimallyEncodedRawThreadInfoValidator, minimallyEncodeRawThreadInfo, decodeMinimallyEncodedRawThreadInfo, + minimallyEncodedRelativeMemberInfoValidator, + minimallyEncodeRelativeMemberInfo, + decodeMinimallyEncodedRelativeMemberInfo, };