MCPcopy Create free account
hub / github.com/CommE2E/comm / convertClientDBThreadInfoToRawThreadInfo

Function convertClientDBThreadInfoToRawThreadInfo

lib/utils/thread-ops-utils.js:53–109  ·  view source on GitHub ↗
(
  clientDBThreadInfo: ClientDBThreadInfo,
)

Source from the content-addressed store, hash-verified

51}
52
53function convertClientDBThreadInfoToRawThreadInfo(
54 clientDBThreadInfo: ClientDBThreadInfo,
55): RawThreadInfo {
56 // 1. Validate and potentially minimally encode `rawMembers`.
57 const rawMembers = JSON.parse(clientDBThreadInfo.members);
58 const minimallyEncodedMembers = rawMembers.map(rawMember => {
59 invariant(
60 memberInfoSansPermissionsValidator.is(rawMember) ||
61 minimallyEncodedThickMemberInfoValidator.is(rawMember) ||
62 memberInfoWithPermissionsValidator.is(rawMember) ||
63 legacyMemberInfoValidator.is(rawMember),
64 'rawMember must be valid [MinimallyEncoded/Legacy]MemberInfo',
65 );
66 return rawMember.minimallyEncoded
67 ? rawMember
68 : minimallyEncodeMemberInfo(rawMember);
69 });
70
71 // 2. Validate and potentially minimally encode `rawRoles`.
72 const rawRoles = JSON.parse(clientDBThreadInfo.roles);
73 const minimallyEncodedRoles: { +[id: string]: RoleInfo } = Object.keys(
74 rawRoles,
75 ).reduce((acc: { [string]: RoleInfo }, roleID: string) => {
76 const roleInfo = rawRoles[roleID];
77 invariant(
78 persistedRoleInfoValidator.is(roleInfo) ||
79 clientLegacyRoleInfoValidator.is(roleInfo),
80 'rawRole must be valid [MinimallyEncoded/Legacy]RoleInfo',
81 );
82 acc[roleID] = roleInfo.minimallyEncoded
83 ? roleInfo
84 : minimallyEncodeRoleInfo(roleInfo);
85 return acc;
86 }, {});
87
88 // 3. Validate and potentially minimally encode `rawCurrentUser`.
89 const rawCurrentUser = JSON.parse(clientDBThreadInfo.currentUser);
90 invariant(
91 threadCurrentUserInfoValidator.is(rawCurrentUser) ||
92 legacyThreadCurrentUserInfoValidator.is(rawCurrentUser),
93 'rawCurrentUser must be valid [MinimallyEncoded]ThreadCurrentUserInfo',
94 );
95 const minimallyEncodedCurrentUser = rawCurrentUser.minimallyEncoded
96 ? rawCurrentUser
97 : minimallyEncodeThreadCurrentUserInfo(rawCurrentUser);
98
99 const threadType = assertThreadType(clientDBThreadInfo.type);
100
101 return threadSpecs[threadType]
102 .protocol()
103 .convertClientDBThreadInfo(
104 clientDBThreadInfo,
105 minimallyEncodedMembers,
106 minimallyEncodedRoles,
107 minimallyEncodedCurrentUser,
108 );
109}
110

Calls 6

minimallyEncodeRoleInfoFunction · 0.90
assertThreadTypeFunction · 0.90
parseMethod · 0.80
keysMethod · 0.65

Tested by

no test coverage detected