import { getQuotaWarningCount } from '../../universal/quota-usage'; export type QuotaAlertKind = 'quota' | 'quotaNearing'; type GetQuotaAlertKindOptions = { previousCount: number; newCount: number; quota: number; }; /** * Determines whether the request that moved the counter from `previousCount` to * `newCount` crossed an alert threshold. * * - 'quota': this request reached (or jumped past) the monthly quota. * - 'quotaNearing': this request reached the warning threshold (80% of quota). * - null: no threshold crossed by this request. * * Precondition: callers must handle `quota === null` (unlimited) and `quota === 0` * (blocked) before calling — this function assumes a positive quota. */ export const getQuotaAlertKind = (opts: GetQuotaAlertKindOptions): QuotaAlertKind | null => { const { previousCount, newCount, quota } = opts; if (newCount >= quota) { // Only the single request that reached the quota boundary should alert. If the // same request also skipped past the warning threshold, the quota alert // supersedes the warning. return previousCount < quota ? 'quota' : null; } // From here newCount < quota, so for tiny quotas (1-4) where the rounded-up // warning threshold equals the quota itself, the warning can never fire — the // exhausting request is handled by the quota branch above. const warningCount = getQuotaWarningCount(quota); const didCrossWarning = newCount >= warningCount && previousCount < warningCount; return didCrossWarning ? 'quotaNearing' : null; };