// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { SignalService as Proto } from '../protobuf'; import type { ServiceIdString } from '../types/ServiceId'; import { normalizeServiceId } from '../types/ServiceId'; import type { ProcessedSent, ProcessedSyncMessage } from './Types.d'; type ProtoServiceId = Readonly<{ destinationServiceId?: string | null; }>; function processProtoWithDestinationServiceId( input: Input ): Omit & { destinationServiceId?: ServiceIdString; } { const { destinationServiceId, ...remaining } = input; return { ...remaining, destinationServiceId: destinationServiceId ? normalizeServiceId(destinationServiceId, 'processSyncMessage') : undefined, }; } function processSent( sent?: Proto.SyncMessage.ISent | null ): ProcessedSent | undefined { if (!sent) { return undefined; } const { destinationServiceId, unidentifiedStatus, storyMessageRecipients, ...remaining } = sent; return { ...remaining, destinationServiceId: destinationServiceId ? normalizeServiceId(destinationServiceId, 'processSent') : undefined, unidentifiedStatus: unidentifiedStatus ? unidentifiedStatus.map(processProtoWithDestinationServiceId) : undefined, storyMessageRecipients: storyMessageRecipients ? storyMessageRecipients.map(processProtoWithDestinationServiceId) : undefined, }; } export function processSyncMessage( syncMessage: Proto.ISyncMessage ): ProcessedSyncMessage { return { ...syncMessage, sent: processSent(syncMessage.sent), }; }