37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import type { BillingBlock } from '@hermes/shared/billing'
|
|
|
|
export interface BillingDialogCopy {
|
|
cancelLabel: string
|
|
confirmLabel: string
|
|
detail: string
|
|
title: string
|
|
}
|
|
|
|
/**
|
|
* Copy for the out-of-credits confirm dialog (the TUI's billing wall). The
|
|
* dialog is the actionable layer — the full provider guidance already lands in
|
|
* the transcript — so `detail` stays to one concise, non-truncating line and the
|
|
* confirm button carries the recovery: Nous → `/topup`, other providers → their
|
|
* billing page (or `/model` to switch when we have no URL). Pure + exported so
|
|
* the wording is unit-tested without driving the gateway.
|
|
*/
|
|
export function billingDialogCopy(block: BillingBlock): BillingDialogCopy {
|
|
if (block.is_nous) {
|
|
return {
|
|
cancelLabel: 'Dismiss',
|
|
confirmLabel: 'Top up',
|
|
detail: 'Your Nous credit balance is exhausted — top up to keep going.',
|
|
title: 'Out of Nous credits'
|
|
}
|
|
}
|
|
|
|
const label = block.provider_label || 'your provider'
|
|
|
|
return {
|
|
cancelLabel: 'Dismiss',
|
|
confirmLabel: block.billing_url ? 'Open billing page' : 'Switch provider',
|
|
detail: `${label} reports your credits or billing are exhausted.`,
|
|
title: `Out of credits · ${label}`
|
|
}
|
|
}
|