// Copyright 2025 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import type { ReadonlyDeep } from 'type-fest'; import { PaymentEventKind } from '../types/Payment.std.js'; import type { AnyPaymentEvent } from '../types/Payment.std.js'; import type { LocalizerType } from '../types/Util.std.js'; import type { ReadonlyMessageAttributesType } from '../model-types.d.ts'; import { missingCaseError } from '../util/missingCaseError.std.js'; export type MessageAttributesWithPaymentEvent = ReadonlyMessageAttributesType & ReadonlyDeep<{ payment: AnyPaymentEvent; }>; export function messageHasPaymentEvent( message: ReadonlyMessageAttributesType ): message is MessageAttributesWithPaymentEvent { return message.payment != null; } export function getPaymentEventNotificationText( payment: ReadonlyDeep, senderTitle: string, conversationTitle: string | null, senderIsMe: boolean, i18n: LocalizerType ): string { if (payment.kind === PaymentEventKind.Notification) { return i18n('icu:payment-event-notification-label'); } return getPaymentEventDescription( payment, senderTitle, conversationTitle, senderIsMe, i18n ); } export function getPaymentEventDescription( payment: ReadonlyDeep, senderTitle: string, conversationTitle: string | null, senderIsMe: boolean, i18n: LocalizerType ): string { const { kind } = payment; if (kind === PaymentEventKind.Notification) { if (senderIsMe) { if (conversationTitle != null) { return i18n('icu:payment-event-notification-message-you-label', { receiver: conversationTitle, }); } return i18n( 'icu:payment-event-notification-message-you-label-without-receiver' ); } return i18n('icu:payment-event-notification-message-label', { sender: senderTitle, }); } if (kind === PaymentEventKind.ActivationRequest) { if (senderIsMe) { if (conversationTitle != null) { return i18n('icu:payment-event-activation-request-you-label', { receiver: conversationTitle, }); } return i18n( 'icu:payment-event-activation-request-you-label-without-receiver' ); } return i18n('icu:payment-event-activation-request-label', { sender: senderTitle, }); } if (kind === PaymentEventKind.Activation) { if (senderIsMe) { return i18n('icu:payment-event-activated-you-label'); } return i18n('icu:payment-event-activated-label', { sender: senderTitle, }); } throw missingCaseError(kind); }