Removes groupv1 protos
This commit is contained in:
@@ -31,8 +31,6 @@ type MessageWithAvatar<Message extends OptionalFields> = Omit<
|
||||
expireTimer?: DurationInSeconds;
|
||||
};
|
||||
|
||||
export type ModifiedGroupDetails = MessageWithAvatar<Proto.GroupDetails>;
|
||||
|
||||
export type ModifiedContactDetails = MessageWithAvatar<Proto.ContactDetails>;
|
||||
|
||||
/* eslint-disable @typescript-eslint/brace-style -- Prettier conflicts with ESLint */
|
||||
@@ -107,41 +105,6 @@ abstract class ParserBase<
|
||||
}
|
||||
}
|
||||
|
||||
export class GroupBuffer extends ParserBase<
|
||||
Proto.GroupDetails,
|
||||
typeof Proto.GroupDetails,
|
||||
ModifiedGroupDetails
|
||||
> {
|
||||
constructor(arrayBuffer: Uint8Array) {
|
||||
super(arrayBuffer, Proto.GroupDetails);
|
||||
}
|
||||
|
||||
public override next(): ModifiedGroupDetails | undefined {
|
||||
const proto = this.decodeDelimited();
|
||||
if (!proto) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (!proto.members) {
|
||||
return proto;
|
||||
}
|
||||
|
||||
return {
|
||||
...proto,
|
||||
members: proto.members.map((member, i) => {
|
||||
if (!member.uuid) {
|
||||
return member;
|
||||
}
|
||||
|
||||
return {
|
||||
...member,
|
||||
uuid: normalizeUuid(member.uuid, `GroupBuffer.member[${i}].uuid`),
|
||||
};
|
||||
}),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class ContactBuffer extends ParserBase<
|
||||
Proto.ContactDetails,
|
||||
typeof Proto.ContactDetails,
|
||||
|
@@ -72,7 +72,7 @@ import type { EventHandler } from './EventTarget';
|
||||
import EventTarget from './EventTarget';
|
||||
import { downloadAttachment } from './downloadAttachment';
|
||||
import type { IncomingWebSocketRequest } from './WebsocketResources';
|
||||
import { ContactBuffer, GroupBuffer } from './ContactsParser';
|
||||
import { ContactBuffer } from './ContactsParser';
|
||||
import type { WebAPIType } from './WebAPI';
|
||||
import type { Storage } from './Storage';
|
||||
import { WarnOnlyError } from './Errors';
|
||||
@@ -112,8 +112,6 @@ import {
|
||||
ReadSyncEvent,
|
||||
ViewSyncEvent,
|
||||
ContactSyncEvent,
|
||||
GroupEvent,
|
||||
GroupSyncEvent,
|
||||
StoryRecipientUpdateEvent,
|
||||
CallEventSyncEvent,
|
||||
} from './messageReceiverEvents';
|
||||
@@ -622,16 +620,6 @@ export default class MessageReceiver
|
||||
handler: (ev: ContactSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public override addEventListener(
|
||||
name: 'group',
|
||||
handler: (ev: GroupEvent) => void
|
||||
): void;
|
||||
|
||||
public override addEventListener(
|
||||
name: 'groupSync',
|
||||
handler: (ev: GroupSyncEvent) => void
|
||||
): void;
|
||||
|
||||
public override addEventListener(
|
||||
name: 'envelopeQueued',
|
||||
handler: (ev: EnvelopeQueuedEvent) => void
|
||||
@@ -2998,10 +2986,6 @@ export default class MessageReceiver
|
||||
// before moving on since it updates conversation state.
|
||||
return this.handleContacts(envelope, syncMessage.contacts);
|
||||
}
|
||||
if (syncMessage.groups) {
|
||||
void this.handleGroups(envelope, syncMessage.groups);
|
||||
return;
|
||||
}
|
||||
if (syncMessage.blocked) {
|
||||
return this.handleBlocked(envelope, syncMessage.blocked);
|
||||
}
|
||||
@@ -3454,63 +3438,6 @@ export default class MessageReceiver
|
||||
log.info('handleContacts: finished');
|
||||
}
|
||||
|
||||
private async handleGroups(
|
||||
envelope: ProcessedEnvelope,
|
||||
groups: Proto.SyncMessage.IGroups
|
||||
): Promise<void> {
|
||||
const logId = getEnvelopeId(envelope);
|
||||
log.info('group sync');
|
||||
log.info(`MessageReceiver: handleGroups ${logId}`);
|
||||
const { blob } = groups;
|
||||
|
||||
this.removeFromCache(envelope);
|
||||
|
||||
logUnexpectedUrgentValue(envelope, 'groupSync');
|
||||
|
||||
if (!blob) {
|
||||
throw new Error('MessageReceiver.handleGroups: blob field was missing');
|
||||
}
|
||||
|
||||
// Note: we do not return here because we don't want to block the next message on
|
||||
// this attachment download and a lot of processing of that attachment.
|
||||
const attachmentPointer = await this.handleAttachment(blob, {
|
||||
disableRetries: true,
|
||||
timeout: 90 * SECOND,
|
||||
});
|
||||
const groupBuffer = new GroupBuffer(attachmentPointer.data);
|
||||
let groupDetails = groupBuffer.next();
|
||||
const promises = [];
|
||||
while (groupDetails) {
|
||||
const { id } = groupDetails;
|
||||
strictAssert(id, 'Group details without id');
|
||||
|
||||
if (id.byteLength !== 16) {
|
||||
log.error(
|
||||
`onGroupReceived: Id was ${id} bytes, expected 16 bytes. Dropping group.`
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
const ev = new GroupEvent(
|
||||
{
|
||||
...groupDetails,
|
||||
id: Bytes.toBinary(id),
|
||||
},
|
||||
envelope.receivedAtCounter
|
||||
);
|
||||
const promise = this.dispatchAndWait(logId, ev).catch(e => {
|
||||
log.error('error processing group', e);
|
||||
});
|
||||
groupDetails = groupBuffer.next();
|
||||
promises.push(promise);
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
|
||||
const ev = new GroupSyncEvent();
|
||||
return this.dispatchAndWait(logId, ev);
|
||||
}
|
||||
|
||||
private async handleBlocked(
|
||||
envelope: ProcessedEnvelope,
|
||||
blocked: Proto.SyncMessage.IBlocked
|
||||
|
@@ -1367,30 +1367,6 @@ export default class MessageSender {
|
||||
};
|
||||
}
|
||||
|
||||
static getRequestGroupSyncMessage(): SingleProtoJobData {
|
||||
const myUuid = window.textsecure.storage.user.getCheckedUuid();
|
||||
|
||||
const request = new Proto.SyncMessage.Request();
|
||||
request.type = Proto.SyncMessage.Request.Type.GROUPS;
|
||||
const syncMessage = this.createSyncMessage();
|
||||
syncMessage.request = request;
|
||||
const contentMessage = new Proto.Content();
|
||||
contentMessage.syncMessage = syncMessage;
|
||||
|
||||
const { ContentHint } = Proto.UnidentifiedSenderMessage.Message;
|
||||
|
||||
return {
|
||||
contentHint: ContentHint.RESENDABLE,
|
||||
identifier: myUuid.toString(),
|
||||
isSyncMessage: true,
|
||||
protoBase64: Bytes.toBase64(
|
||||
Proto.Content.encode(contentMessage).finish()
|
||||
),
|
||||
type: 'groupSyncRequest',
|
||||
urgent: false,
|
||||
};
|
||||
}
|
||||
|
||||
static getRequestContactSyncMessage(): SingleProtoJobData {
|
||||
const myUuid = window.textsecure.storage.user.getCheckedUuid();
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
import type { EventHandler } from './EventTarget';
|
||||
import EventTarget from './EventTarget';
|
||||
import MessageReceiver from './MessageReceiver';
|
||||
import type { ContactSyncEvent, GroupSyncEvent } from './messageReceiverEvents';
|
||||
import type { ContactSyncEvent } from './messageReceiverEvents';
|
||||
import MessageSender from './SendMessage';
|
||||
import { assertDev } from '../util/assert';
|
||||
import * as log from '../logging/log';
|
||||
@@ -19,14 +19,10 @@ class SyncRequestInner extends EventTarget {
|
||||
|
||||
contactSync?: boolean;
|
||||
|
||||
groupSync?: boolean;
|
||||
|
||||
timeout: any;
|
||||
|
||||
oncontact: (event: ContactSyncEvent) => void;
|
||||
|
||||
ongroup: (event: GroupSyncEvent) => void;
|
||||
|
||||
timeoutMillis: number;
|
||||
|
||||
constructor(private receiver: MessageReceiver, timeoutMillis?: number) {
|
||||
@@ -41,9 +37,6 @@ class SyncRequestInner extends EventTarget {
|
||||
this.oncontact = this.onContactSyncComplete.bind(this);
|
||||
receiver.addEventListener('contactSync', this.oncontact);
|
||||
|
||||
this.ongroup = this.onGroupSyncComplete.bind(this);
|
||||
receiver.addEventListener('groupSync', this.ongroup);
|
||||
|
||||
this.timeoutMillis = timeoutMillis || 60000;
|
||||
}
|
||||
|
||||
@@ -72,7 +65,6 @@ class SyncRequestInner extends EventTarget {
|
||||
),
|
||||
singleProtoJobQueue.add(MessageSender.getRequestBlockSyncMessage()),
|
||||
singleProtoJobQueue.add(MessageSender.getRequestContactSyncMessage()),
|
||||
singleProtoJobQueue.add(MessageSender.getRequestGroupSyncMessage()),
|
||||
]);
|
||||
} catch (error: unknown) {
|
||||
log.error(
|
||||
@@ -89,20 +81,15 @@ class SyncRequestInner extends EventTarget {
|
||||
this.update();
|
||||
}
|
||||
|
||||
onGroupSyncComplete() {
|
||||
this.groupSync = true;
|
||||
this.update();
|
||||
}
|
||||
|
||||
update() {
|
||||
if (this.contactSync && this.groupSync) {
|
||||
if (this.contactSync) {
|
||||
this.dispatchEvent(new Event('success'));
|
||||
this.cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
onTimeout() {
|
||||
if (this.contactSync || this.groupSync) {
|
||||
if (this.contactSync) {
|
||||
this.dispatchEvent(new Event('success'));
|
||||
} else {
|
||||
this.dispatchEvent(new Event('timeout'));
|
||||
@@ -113,7 +100,6 @@ class SyncRequestInner extends EventTarget {
|
||||
cleanup() {
|
||||
clearTimeout(this.timeout);
|
||||
this.receiver.removeEventListener('contactsync', this.oncontact);
|
||||
this.receiver.removeEventListener('groupSync', this.ongroup);
|
||||
delete this.listeners;
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ import EventTarget from './EventTarget';
|
||||
import AccountManager from './AccountManager';
|
||||
import MessageReceiver from './MessageReceiver';
|
||||
import utils from './Helpers';
|
||||
import { ContactBuffer, GroupBuffer } from './ContactsParser';
|
||||
import { ContactBuffer } from './ContactsParser';
|
||||
import SyncRequest from './SyncRequest';
|
||||
import MessageSender from './SendMessage';
|
||||
import { Storage } from './Storage';
|
||||
@@ -19,7 +19,6 @@ export type TextSecureType = {
|
||||
AccountManager: typeof AccountManager;
|
||||
ContactBuffer: typeof ContactBuffer;
|
||||
EventTarget: typeof EventTarget;
|
||||
GroupBuffer: typeof GroupBuffer;
|
||||
MessageReceiver: typeof MessageReceiver;
|
||||
MessageSender: typeof MessageSender;
|
||||
SyncRequest: typeof SyncRequest;
|
||||
@@ -37,7 +36,6 @@ export const textsecure: TextSecureType = {
|
||||
AccountManager,
|
||||
ContactBuffer,
|
||||
EventTarget,
|
||||
GroupBuffer,
|
||||
MessageReceiver,
|
||||
MessageSender,
|
||||
SyncRequest,
|
||||
|
@@ -11,10 +11,7 @@ import type {
|
||||
ProcessedDataMessage,
|
||||
ProcessedSent,
|
||||
} from './Types.d';
|
||||
import type {
|
||||
ModifiedContactDetails,
|
||||
ModifiedGroupDetails,
|
||||
} from './ContactsParser';
|
||||
import type { ModifiedContactDetails } from './ContactsParser';
|
||||
|
||||
export class EmptyEvent extends Event {
|
||||
constructor() {
|
||||
@@ -84,26 +81,6 @@ export class ContactSyncEvent extends Event {
|
||||
}
|
||||
}
|
||||
|
||||
export type GroupEventData = Omit<ModifiedGroupDetails, 'id'> &
|
||||
Readonly<{
|
||||
id: string;
|
||||
}>;
|
||||
|
||||
export class GroupEvent extends Event {
|
||||
constructor(
|
||||
public readonly groupDetails: GroupEventData,
|
||||
public readonly receivedAtCounter: number
|
||||
) {
|
||||
super('group');
|
||||
}
|
||||
}
|
||||
|
||||
export class GroupSyncEvent extends Event {
|
||||
constructor() {
|
||||
super('groupSync');
|
||||
}
|
||||
}
|
||||
|
||||
// Emitted right before we do full decrypt on a message, but after Sealed Sender unseal
|
||||
export class EnvelopeUnsealedEvent extends Event {
|
||||
constructor(public readonly envelope: ProcessedEnvelope) {
|
||||
|
Reference in New Issue
Block a user