|
|
@ -269,26 +269,14 @@ async function getExistingSenderKeysForGroup(
|
|
|
|
// as they each member need to regenerate a new senderkey
|
|
|
|
// as they each member need to regenerate a new senderkey
|
|
|
|
async function getOrUpdateSenderKeysForJoiningMembers(
|
|
|
|
async function getOrUpdateSenderKeysForJoiningMembers(
|
|
|
|
groupId: string,
|
|
|
|
groupId: string,
|
|
|
|
members: Array<string>,
|
|
|
|
members: Array<string>
|
|
|
|
diff?: GroupDiff,
|
|
|
|
|
|
|
|
joiningMembersSenderKeys?: Array<RatchetState>
|
|
|
|
|
|
|
|
): Promise<Array<RatchetState>> {
|
|
|
|
): Promise<Array<RatchetState>> {
|
|
|
|
const leavingMembers = diff?.leavingMembers || [];
|
|
|
|
|
|
|
|
const joiningMembers = diff?.joiningMembers || [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const existingMembers = _.difference(members, joiningMembers);
|
|
|
|
|
|
|
|
// get all devices for members
|
|
|
|
// get all devices for members
|
|
|
|
const allDevices = _.flatten(
|
|
|
|
const allDevices = _.flatten(
|
|
|
|
await Promise.all(
|
|
|
|
await Promise.all(members.map(m => MultiDeviceProtocol.getAllDevices(m)))
|
|
|
|
existingMembers.map(m => MultiDeviceProtocol.getAllDevices(m))
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
let existingKeys: Array<RatchetState> = [];
|
|
|
|
return getExistingSenderKeysForGroup(groupId, allDevices);
|
|
|
|
if (leavingMembers.length === 0) {
|
|
|
|
|
|
|
|
existingKeys = await getExistingSenderKeysForGroup(groupId, allDevices);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return _.union(joiningMembersSenderKeys, existingKeys);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getGroupSecretKey(groupId: string): Promise<Uint8Array> {
|
|
|
|
async function getGroupSecretKey(groupId: string): Promise<Uint8Array> {
|
|
|
|