/**
 * AccountPool — manages a pool of proxy accounts with round-robin / fill-first
 * selection and exponential-backoff cooldowns for quota-exceeded accounts.
 *
 * @module auth/accountPool
 */
import type { ProxyAccount, AccountPoolConfig } from "../types/index.js";
export declare class AccountPool {
    private accounts;
    private cursor;
    private readonly config;
    constructor(config?: Partial<AccountPoolConfig>);
    /** Add (or replace) an account in the pool. */
    addAccount(account: ProxyAccount): void;
    /** Remove an account from the pool by id. */
    removeAccount(id: string): void;
    /**
     * Return the next healthy account according to the configured strategy.
     * Returns `null` when no healthy accounts are available.
     */
    getNextAccount(): ProxyAccount | null;
    /**
     * Mark an account as quota-exceeded.  The account enters a cooldown state
     * with exponential backoff capped at `maxCooldownMs`.
     *
     * @deprecated Proxy routes now use `RuntimeAccountState` in `claudeProxyRoutes.ts`
     * for runtime account state management. This method is retained for public API compatibility.
     *
     * @param id             Account id
     * @param retryAfterMs   Optional explicit retry-after duration (from server header)
     */
    markQuotaExceeded(id: string, retryAfterMs?: number): void;
    /**
     * Manually mark an account as available (healthy), clearing its cooldown.
     *
     * @deprecated Proxy routes now use `RuntimeAccountState` in `claudeProxyRoutes.ts`
     * for runtime account state management. This method is retained for public API compatibility.
     */
    markAvailable(id: string): void;
    /**
     * Mark an account as having completed a request successfully.
     *
     * @deprecated Proxy routes now use `RuntimeAccountState` in `claudeProxyRoutes.ts`
     * for runtime account state management. This method is retained for public API compatibility.
     */
    markSuccess(id: string): void;
    /** Return the number of currently healthy (not cooling/disabled) accounts. */
    getHealthyCount(): number;
    /** Return a snapshot of all accounts in the pool. */
    getAllAccounts(): ProxyAccount[];
    /** Return the configured selection strategy. */
    getStrategy(): string;
    /**
     * Wire automatic token refresh for an OAuth account.
     * Call after addAccount() for OAuth accounts that have a refresh token.
     *
     * @param accountId  The account id to wire refresh for
     * @param refreshFn  Function that takes a refresh token and returns new token data
     */
    wireTokenRefresh(accountId: string, refreshFn: (refreshToken: string) => Promise<{
        accessToken: string;
        refreshToken?: string;
        expiresAt: number | Date;
        tokenType?: string;
    }>): void;
    private _getHealthyAccounts;
    private _expireCooldowns;
}
