// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import { CallbackResultType } from '../textsecure/SendMessage'; export const SEALED_SENDER = { UNKNOWN: 0, ENABLED: 1, DISABLED: 2, UNRESTRICTED: 3, }; export async function handleMessageSend( promise: Promise ): Promise { try { const result = await promise; if (result) { await handleMessageSendResult( result.failoverIdentifiers, result.unidentifiedDeliveries ); } return result; } catch (err) { if (err) { await handleMessageSendResult( err.failoverIdentifiers, err.unidentifiedDeliveries ); } throw err; } } async function handleMessageSendResult( failoverIdentifiers: Array | undefined, unidentifiedDeliveries: Array | undefined ): Promise { await Promise.all( (failoverIdentifiers || []).map(async identifier => { const conversation = window.ConversationController.get(identifier); if ( conversation && conversation.get('sealedSender') !== SEALED_SENDER.DISABLED ) { window.log.info( `Setting sealedSender to DISABLED for conversation ${conversation.idForLogging()}` ); conversation.set({ sealedSender: SEALED_SENDER.DISABLED, }); window.Signal.Data.updateConversation(conversation.attributes); } }) ); await Promise.all( (unidentifiedDeliveries || []).map(async identifier => { const conversation = window.ConversationController.get(identifier); if ( conversation && conversation.get('sealedSender') === SEALED_SENDER.UNKNOWN ) { if (conversation.get('accessKey')) { window.log.info( `Setting sealedSender to ENABLED for conversation ${conversation.idForLogging()}` ); conversation.set({ sealedSender: SEALED_SENDER.ENABLED, }); } else { window.log.info( `Setting sealedSender to UNRESTRICTED for conversation ${conversation.idForLogging()}` ); conversation.set({ sealedSender: SEALED_SENDER.UNRESTRICTED, }); } window.Signal.Data.updateConversation(conversation.attributes); } }) ); }