// Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import { UUIDKind } from '../types/UUID'; import type { UUIDStringType, TaggedUUIDStringType } from '../types/UUID'; import type { ConversationAttributesType } from '../model-types.d'; import { strictAssert } from './assert'; export type MinimalConversationType = Pick< ConversationAttributesType, 'uuid' | 'pni' >; export function getConversationUuid( { uuid, pni }: MinimalConversationType, uuidKind = UUIDKind.ACI ): UUIDStringType | undefined { if (uuidKind === UUIDKind.PNI) { return pni; } strictAssert( uuidKind === UUIDKind.ACI, 'getConversationUuid accepts either ACI or PNI uuid kind' ); // When we know only PNI - we put PNI into both `uuid` and `pni` fields. if (pni === uuid) { return undefined; } return uuid; } export function getTaggedConversationUuid( attributes: MinimalConversationType ): TaggedUUIDStringType | undefined { const aci = getConversationUuid(attributes, UUIDKind.ACI); if (aci) { return { aci, pni: undefined }; } const pni = getConversationUuid(attributes, UUIDKind.PNI); if (pni) { return { aci: undefined, pni }; } return undefined; }