import type { CredentialRankingContext, CredentialRankingStrategy, UsageLimit, UsageLogger, UsageReport } from "../usage.js"; /** Read a string identity field from report metadata. */ export declare function usageReportMetadataValue(report: UsageReport, key: string): string | undefined; /** Resolve a single report-scoped account ID. */ export declare function usageReportScopeAccountId(report: UsageReport): string | undefined; /** Merge reports for the same account, logging a reduction when configured. */ export declare function dedupeUsageReports(reports: UsageReport[], logger?: UsageLogger): UsageReport[]; /** Determine whether a usage limit has exhausted its quota. */ export declare function isUsageLimitExhausted(limit: UsageLimit): boolean; /** Return the usage limits that apply to the requested model for this strategy. */ export declare function scopedUsageLimits(strategy: CredentialRankingStrategy, report: UsageReport, context: CredentialRankingContext): UsageLimit[]; /** Returns true if usage indicates rate limit has been reached. */ export declare function isUsageLimitReached(limits: UsageLimit[]): boolean; /** Extracts when every currently exhausted window has reset (in ms). */ export declare function usageResetAtMs(limits: UsageLimit[], nowMs: number): number | undefined; /** Read a finite reset deadline from a usage window. */ export declare function windowResetAt(window: UsageLimit["window"]): number | undefined; /** Normalize a window’s used fraction for ranking. */ export declare function normalizeUsageFraction(limit: UsageLimit | undefined): number; /** Select usage limits for account reserve evaluation. */ export declare function reserveUsageLimits(strategy: CredentialRankingStrategy | undefined, report: UsageReport, rankingContext: CredentialRankingContext): UsageLimit[]; /** Measure currently available quota outside expired windows. */ export declare function remainingUsageFraction(strategy: CredentialRankingStrategy | undefined, report: UsageReport | null, rankingContext: CredentialRankingContext, nowMs: number): number | undefined; /** * Computes the required drain rate: `headroomFraction / remainingHours` — * how fast the window's remaining quota must be consumed to fully use it * before it resets and expires. Higher = more headroom at risk of expiring * unused = ranked first, so selection chases quota that is about to be * wasted ("use it or lose it"). Without a reset clock, the full window * duration is assumed to remain so clocked and clockless scores stay comparable. */ export declare function windowRequiredDrain(limit: UsageLimit | undefined, nowMs: number, fallbackDurationMs: number): number;