import type { Logger } from 'pino';
import type { ElsClient } from '../elsClient.js';
import type { CacheService } from './wrapper.js';
import { type CacheClass } from './policies.js';
import type { RequestContext } from './types.js';
/**
 * Кэширующая обёртка над `ElsClient`.
 *
 * Дизайн — **composition over inheritance**:
 *   - сохраняет 100% совместимую сигнатуру с ElsClient;
 *   - не модифицирует ElsClient (additive only);
 *   - `ctx` принимается опционально (по умолчанию — fallback context от config).
 *
 * Если cache недоступен (Redis down или disabled) — все методы прозрачно
 * прокидываются в underlying `ElsClient`.
 *
 * Все cache keys построены через `tenantKey()` (см. `policies.ts`), что
 * гарантирует tenant-isolation (cross-tenant leak guard).
 *
 * Какие методы кэшируем (см. `05-high-load.md` § 2.1):
 *
 *   | Method               | Class            | TTL    |
 *   |----------------------|------------------|--------|
 *   | getLogDetails        | log_details      | 1h     |
 *   | searchLogs           | search_recent    | 15s    |
 *   | topErrorMessages     | top_messages     | 2m     |
 *   | errorHistogram       | histogram        | 1m     |
 *   | trafficStats         | traffic_long     | 5m     |
 *   | listApps             | list_apps        | 30s    |
 *   | heatmap              | heatmap          | 5m     |
 *   | errorStats           | stats_breakdown  | 2m     |
 *   | groupedErrors        | grouped_errors   | 2m     |
 *   | baseline             | baseline         | 5m     |
 *   | versionRegression    | version_timeline | 5m     |
 *
 * Что НЕ кэшируем (см. § 2.4):
 *   - `queryLogsJql`         — высокая кардинальность ключей, hit ratio < 5%.
 *   - `findCorrelatedErrors` — корреляция меняется при ingest.
 *   - `findSimilarErrors`    — агрегаты "за последний час" — слишком волатильны.
 */
export declare class CachedElsClient {
    private readonly inner;
    private readonly cache;
    private readonly policies;
    private readonly _log?;
    constructor(inner: ElsClient, cache: CacheService, policies?: Record<CacheClass, number>, _log?: Logger | undefined);
    /** Доступ к raw client (нужен для методов без кэша). */
    get raw(): ElsClient;
    close(): Promise<void>;
    getLogDetails(traceId: string, ctx?: RequestContext): Promise<ReturnType<ElsClient['getLogDetails']>>;
    searchLogs(params: Record<string, string | number | boolean | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['searchLogs']>>;
    topErrorMessages(params: Record<string, string | number | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['topErrorMessages']>>;
    errorHistogram(params: Record<string, string | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['errorHistogram']>>;
    trafficStats(params: Record<string, string | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['trafficStats']>>;
    listApps(ctx?: RequestContext): Promise<ReturnType<ElsClient['listApps']>>;
    heatmap(params: Record<string, string | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['heatmap']>>;
    errorStats(params: Record<string, string | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['errorStats']>>;
    groupedErrors(params: Record<string, string | number | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['groupedErrors']>>;
    baseline(params: Record<string, string | number | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['baseline']>>;
    versionRegression(params: Record<string, string | undefined>, ctx?: RequestContext): Promise<ReturnType<ElsClient['versionRegression']>>;
    findSimilarErrors(...args: Parameters<ElsClient['findSimilarErrors']>): Promise<ReturnType<ElsClient['findSimilarErrors']>>;
    findCorrelatedErrors(...args: Parameters<ElsClient['findCorrelatedErrors']>): Promise<ReturnType<ElsClient['findCorrelatedErrors']>>;
    queryLogsJql(...args: Parameters<ElsClient['queryLogsJql']>): Promise<ReturnType<ElsClient['queryLogsJql']>>;
    impact(...args: Parameters<ElsClient['impact']>): Promise<ReturnType<ElsClient['impact']>>;
    /**
     * Строит cache key с tenant-isolation. Возвращает null если контекст не даёт
     * tenant идентификатор — caller обязан в этом случае идти в bypass-path.
     */
    private buildKey;
}
//# sourceMappingURL=cachedElsClient.d.ts.map