// Copyright 2022 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import * as log from '../logging/log'; import * as Errors from '../types/errors'; import type { ConversationQueueJobData } from '../jobs/conversationJobQueue'; import { conversationJobQueue, conversationQueueJobEnum, } from '../jobs/conversationJobQueue'; import { isOlderThan } from './timestamp'; import { DAY } from './durations'; export async function retryDeleteForEveryone(messageId: string): Promise { const message = window.MessageController.getById(messageId); if (!message) { throw new Error(`retryDeleteForEveryone: Message ${messageId} missing!`); } if (isOlderThan(message.get('sent_at'), DAY)) { throw new Error( 'retryDeleteForEveryone: Message too old to retry delete for everyone!' ); } try { const conversation = message.getConversation(); if (!conversation) { throw new Error( `retryDeleteForEveryone: Conversation for ${messageId} missing!` ); } const jobData: ConversationQueueJobData = { type: conversationQueueJobEnum.enum.DeleteForEveryone, conversationId: conversation.id, messageId, recipients: conversation.getRecipients(), revision: conversation.get('revision'), targetTimestamp: message.get('sent_at'), }; log.info( `retryDeleteForEveryone: Adding job for message ${message.idForLogging()}!` ); await conversationJobQueue.add(jobData); } catch (error) { log.error( 'retryDeleteForEveryone: Failed to queue delete for everyone', Errors.toLogFormat(error) ); throw error; } }