/**
 * Proxy usage statistics with restart- and handoff-safe persistence.
 *
 * Request handlers update memory synchronously. Small deltas are merged into a
 * shared snapshot asynchronously, under a cross-process lock, so overlapping
 * rolling workers cannot overwrite each other's counters.
 */
import type { AccountStats, ProxyTerminalErrorDetails, ProxyTerminalErrorJournal, ProxyStats, ProxyStatsPersistenceStatus, ProxyUsageStatsSnapshot, ProxyUsageStatsStoreOptions } from "../types/index.js";
export declare class ProxyUsageStatsStore {
    private readonly now;
    private readonly flushIntervalMs;
    private readonly lockTimeoutMs;
    private readonly staleLockMs;
    private filePath?;
    private terminalErrorsFilePath?;
    private stats;
    private pending;
    private terminalErrors;
    private pendingTerminalErrors;
    private pendingMutations;
    private inFlightMutations;
    private pendingTerminalErrorMutations;
    private inFlightTerminalErrorMutations;
    private revision;
    private terminalErrorsRevision;
    private flushTimer;
    private readonly flushMutex;
    private lastFlushedAt?;
    private lastReconciledAt?;
    private lastRecoveryAt?;
    private lastError?;
    private terminalErrorsLastFlushedAt?;
    private terminalErrorsLastRecoveryAt?;
    private terminalErrorsLastError?;
    private snapshotVersion;
    constructor(options?: ProxyUsageStatsStoreOptions);
    initialize(filePath?: string): Promise<void>;
    recordAttempt(accountLabel: string, accountType: string): void;
    recordFinalSuccess(accountLabel?: string, accountType?: string): void;
    recordAttemptError(accountLabel: string, accountType: string, status: number, rateLimitKind?: "transient" | "quota"): void;
    recordFinalError(status: number, accountLabel?: string, accountType?: string, details?: ProxyTerminalErrorDetails): void;
    getStats(): ProxyStats;
    getAccountStats(label: string): AccountStats | undefined;
    getTerminalErrors(): ProxyTerminalErrorJournal;
    getUsageSnapshot(): ProxyUsageStatsSnapshot;
    getPersistenceStatus(): ProxyStatsPersistenceStatus;
    flush(): Promise<void>;
    private persistStatsDelta;
    private persistTerminalErrorDelta;
    reconcileUsageSnapshot(): Promise<ProxyUsageStatsSnapshot>;
    reconcile(): Promise<ProxyStats>;
    resetMemory(): void;
    resetForTests(): Promise<void>;
    private markMutation;
    private applyAttempt;
    private applyFinalSuccess;
    private applyAttemptError;
    private applyFinalError;
    private applyTerminalError;
    private ensureAccount;
    private scheduleFlush;
    private cancelFlushTimer;
    private readSnapshot;
    private readTerminalErrorSnapshot;
    private applySnapshot;
    private applyTerminalErrorSnapshot;
    private recoverCorruptSnapshot;
    private recoverCorruptTerminalErrorSnapshot;
    private quarantineCorruptSnapshot;
    private quarantineCorruptTerminalErrorSnapshot;
    private pruneCorruptSnapshots;
    private describeError;
}
export declare function initUsageStats(filePath: string): Promise<void>;
export declare function recordAttempt(accountLabel: string, accountType: string): void;
export declare function recordFinalSuccess(accountLabel?: string, accountType?: string): void;
export declare function recordAttemptError(accountLabel: string, accountType: string, status: number, rateLimitKind?: "transient" | "quota"): void;
export declare function recordFinalError(status: number, accountLabel?: string, accountType?: string, details?: ProxyTerminalErrorDetails): void;
export declare function getStats(): ProxyStats;
export declare function getReconciledStats(): Promise<ProxyStats>;
export declare function getReconciledUsageSnapshot(): Promise<ProxyUsageStatsSnapshot>;
export declare function getAccountStats(label: string): AccountStats | undefined;
export declare function getTerminalErrors(): ProxyTerminalErrorJournal;
export declare function getUsageStatsPersistenceStatus(): ProxyStatsPersistenceStatus;
export declare function flushUsageStats(): Promise<void>;
/** Reset process-local counters while intentionally preserving durable state. */
export declare function resetStats(): void;
/** Disconnect persistence and clear singleton state between isolated tests. */
export declare function resetUsageStatsForTests(): Promise<void>;
