You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.4 KiB
TypeScript
90 lines
3.4 KiB
TypeScript
import { GroupPubkeyType } from 'libsession_util_nodejs';
|
|
import { stringify } from '../../../../types/sqlSharedTypes';
|
|
import { MetaGroupWrapperActions } from '../../../../webworker/workers/browser/libsession_worker_interface';
|
|
import { ed25519Str } from '../../../onions/onionPath';
|
|
import { fromBase64ToArray } from '../../../utils/String';
|
|
import { SnodeNamespaces } from '../namespaces';
|
|
import { RetrieveMessageItemWithNamespace } from '../types';
|
|
import { groupInfoActions } from '../../../../state/ducks/groups';
|
|
import { LibSessionUtil } from '../../../utils/libsession/libsession_utils';
|
|
|
|
async function handleGroupSharedConfigMessages(
|
|
groupConfigMessagesMerged: Array<RetrieveMessageItemWithNamespace>,
|
|
groupPk: GroupPubkeyType
|
|
) {
|
|
window.log.info(
|
|
`received groupConfigMessagesMerged count: ${
|
|
groupConfigMessagesMerged.length
|
|
} for groupPk:${ed25519Str(groupPk)}`
|
|
);
|
|
try {
|
|
const infos = groupConfigMessagesMerged
|
|
.filter(m => m.namespace === SnodeNamespaces.ClosedGroupInfo)
|
|
.map(info => {
|
|
return { data: fromBase64ToArray(info.data), hash: info.hash };
|
|
});
|
|
const members = groupConfigMessagesMerged
|
|
.filter(m => m.namespace === SnodeNamespaces.ClosedGroupMembers)
|
|
.map(info => {
|
|
return { data: fromBase64ToArray(info.data), hash: info.hash };
|
|
});
|
|
const keys = groupConfigMessagesMerged
|
|
.filter(m => m.namespace === SnodeNamespaces.ClosedGroupKeys)
|
|
.map(info => {
|
|
return {
|
|
data: fromBase64ToArray(info.data),
|
|
hash: info.hash,
|
|
timestampMs: info.timestamp,
|
|
};
|
|
});
|
|
const toMerge = {
|
|
groupInfo: infos,
|
|
groupKeys: keys,
|
|
groupMember: members,
|
|
};
|
|
|
|
await MetaGroupWrapperActions.metaMerge(groupPk, toMerge);
|
|
await LibSessionUtil.saveMetaGroupDumpToDb(groupPk);
|
|
|
|
const updatedInfos = await MetaGroupWrapperActions.infoGet(groupPk);
|
|
const updatedMembers = await MetaGroupWrapperActions.memberGetAll(groupPk);
|
|
console.info(`groupInfo after merge: ${stringify(updatedInfos)}`);
|
|
console.info(`groupMembers after merge: ${stringify(updatedMembers)}`);
|
|
if (!updatedInfos || !updatedMembers) {
|
|
throw new Error('updatedInfos or updatedMembers is null but we just created them');
|
|
}
|
|
|
|
window.inboxStore.dispatch(
|
|
groupInfoActions.updateGroupDetailsAfterMerge({
|
|
groupPk,
|
|
infos: updatedInfos,
|
|
members: updatedMembers,
|
|
})
|
|
);
|
|
|
|
// if (allDecryptedConfigMessages.length) {
|
|
// try {
|
|
// window.log.info(
|
|
// `handleGroupSharedConfigMessages of "${allDecryptedConfigMessages.length}" messages with libsession`
|
|
// );
|
|
// console.warn('HANDLING OF INCOMING GROUP TODO ');
|
|
// // await ConfigMessageHandler.handleUserConfigMessagesViaLibSession(
|
|
// // allDecryptedConfigMessages
|
|
// // );
|
|
// } catch (e) {
|
|
// const allMessageHases = allDecryptedConfigMessages.map(m => m.messageHash).join(',');
|
|
// window.log.warn(
|
|
// `failed to handle group messages hashes "${allMessageHases}" with libsession. Error: "${e.message}"`
|
|
// );
|
|
// }
|
|
// }
|
|
} catch (e) {
|
|
window.log.warn(
|
|
`handleGroupSharedConfigMessages of ${groupConfigMessagesMerged.length} failed with ${e.message}`
|
|
);
|
|
// not rethrowing
|
|
}
|
|
}
|
|
|
|
export const SwarmPollingGroupConfig = { handleGroupSharedConfigMessages };
|