diff --git a/ts/util/deleteForEveryone.ts b/ts/util/deleteForEveryone.ts index 67782f4ed94..fb0e3b7aedd 100644 --- a/ts/util/deleteForEveryone.ts +++ b/ts/util/deleteForEveryone.ts @@ -1,25 +1,24 @@ -// Copyright 2020 Signal Messenger, LLC +// Copyright 2020-2022 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { DeleteModel } from '../messageModifiers/Deletes'; import type { MessageModel } from '../models/messages'; import * as log from '../logging/log'; import { DAY } from './durations'; +import { getContactId } from '../messages/helpers'; export async function deleteForEveryone( message: MessageModel, doe: DeleteModel, shouldPersist = true ): Promise { - const messageTimestamp = - message.get('serverTimestamp') || message.get('sent_at') || 0; - - // Make sure the server timestamps for the DOE and the matching message - // are less than one day apart - const delta = Math.abs(doe.get('serverTimestamp') - messageTimestamp); + if (isDeletionByMe(message, doe)) { + await message.handleDeleteForEveryone(doe, shouldPersist); + return; + } - if (delta > DAY) { - log.info('Received late DOE. Dropping.', { + if (isDeletionTooOld(message, doe)) { + log.warn('Received late DOE. Dropping.', { fromId: doe.get('fromId'), targetSentTimestamp: doe.get('targetSentTimestamp'), messageServerTimestamp: message.get('serverTimestamp'), @@ -31,3 +30,25 @@ export async function deleteForEveryone( await message.handleDeleteForEveryone(doe, shouldPersist); } + +function isDeletionByMe( + message: Readonly, + doe: Readonly +): boolean { + const ourConversationId = + window.ConversationController.getOurConversationIdOrThrow(); + return ( + getContactId(message.attributes) === ourConversationId && + doe.get('fromId') === ourConversationId + ); +} + +function isDeletionTooOld( + message: Readonly, + doe: Readonly +): boolean { + const messageTimestamp = + message.get('serverTimestamp') || message.get('sent_at') || 0; + const delta = Math.abs(doe.get('serverTimestamp') - messageTimestamp); + return delta > DAY; +}