export type OauthTokenWindowSnapshot = { fiveHourUtilization: number; fiveHourReset: number; sevenDayUtilization: number; sevenDayReset: number; }; export type OauthTokenCandidate = { name: string; token: string; snapshot: OauthTokenWindowSnapshot | null; subscriptionDisabled: boolean; unifiedRejected: boolean; fableRejected: boolean; blockedUntilEpoch: number; selectionWeight?: number; }; export type SelectionRandom = () => number; export declare const DEFAULT_SELECTION_WEIGHT = 1; export declare const selectionWeightOf: (candidate: OauthTokenCandidate) => number; export type OauthTokenCandidateMetrics = { name: string; fiveHourFreeRatio: number; sevenDayFreeRatio: number; sevenDayEndEpoch: number; eligible: boolean; exclusionReason: string | null; drawWeight: number; }; export type OauthTokenSelectResult = { selected: OauthTokenCandidate | null; metrics: OauthTokenCandidateMetrics[]; }; export type OauthTokenSelectionThresholds = { fiveHourMinFreeRatio: number; sevenDayMinFreeRatio: number; }; export declare const OAUTH_TOKEN_SELECTION_WITHOUT_FREE_RATIO_CUTOFF: OauthTokenSelectionThresholds; export declare const CL_SCRIPT_OAUTH_TOKEN_SELECTION_THRESHOLDS: OauthTokenSelectionThresholds; export declare const SEVEN_DAY_WINDOW_HOURS = 168; export declare const MIN_HOURS_TO_RESET = 1; export declare const SEVEN_DAY_SPEND_DEADLINE_HOURS = 72; export declare const SEVEN_DAY_SPEND_WINDOW_HOURS: number; export declare const FIVE_HOUR_SPEND_DEADLINE_HOURS = 1; export declare const FIVE_HOUR_WINDOW_HOURS = 5; export declare const SEVEN_DAY_FREE_RATIO_SPENT_PER_FULLY_SPENT_FIVE_HOUR_WINDOW = 0.14; export declare const windowFreeRatioOfUtilization: (utilization: number) => number; export declare const sevenDayFreeRatioSpendableBeforeSpendDeadlineOf: (secondsUntilSevenDayReset: number) => number; export type OauthTokenSevenDayBudget = { sevenDayFreeRatio: number; secondsUntilSevenDayReset: number; }; export type OauthTokenSevenDayBudgetWithRemainingConcurrentSlots = OauthTokenSevenDayBudget & { remainingConcurrentSlotCount: number; }; export declare const isSevenDayBudgetUnspendableBeforeSpendDeadline: (budget: OauthTokenSevenDayBudget) => boolean; export declare const oauthTokenDrainOrderSort: (budgets: readonly Budget[]) => Budget[]; export declare const oauthTokenFillTargetSelect: (budgets: readonly Budget[]) => Budget | null; export declare const sevenDayUrgencyFactor: (sevenDayFreeRatio: number, sevenDayEndEpoch: number, nowEpochSeconds: number) => number; export declare const selectWeightedCandidate: (eligible: Entry[], weightOf: (entry: Entry) => number, deterministicBest: Entry, random: SelectionRandom) => Entry; export declare class OauthTokenSelectUseCase { run: (candidates: OauthTokenCandidate[], nowEpochSeconds: number, random?: SelectionRandom, thresholds?: OauthTokenSelectionThresholds) => OauthTokenSelectResult; private evaluate; private exclusionReason; private deadlinePassed; private fiveHourFreeRatio; private sevenDayFreeRatio; private sevenDayEndEpoch; private windowExpired; private toPercent; } //# sourceMappingURL=OauthTokenSelectUseCase.d.ts.map