import type { Logger } from 'pino';
import type { RedisService } from './redis.js';
export interface CacheServiceDeps {
    redis: RedisService;
    log?: Logger;
    /** Tool-class label, используется в метриках. По умолчанию — извлекается из key. */
    toolClass?: string;
}
export interface CacheOptions {
    /** Tool-class для метрик. Если не задан — берётся из CacheServiceDeps. */
    toolClass?: string;
    /** Bypass cache (всегда вызывать loader). */
    bypass?: boolean;
}
export declare class CacheService {
    private readonly deps;
    constructor(deps: CacheServiceDeps);
    /**
     * Lookup-aside fetch.
     *
     * Loader НЕ вызывается, если был cache hit. Ошибки loader'а — пробрасываются
     * (не кэшируем negative result).
     */
    cached<T>(key: string, ttlSec: number, loader: () => Promise<T>, opts?: CacheOptions): Promise<{
        value: T;
        cached: boolean;
    }>;
}
/**
 * Static convenience helper (для случаев без CacheService instance).
 *
 * НЕ рекомендуется в production коде — используйте `CacheService.cached()`.
 */
export declare function cached<T>(redis: RedisService, key: string, ttlSec: number, loader: () => Promise<T>, log?: Logger): Promise<{
    value: T;
    cached: boolean;
}>;
//# sourceMappingURL=wrapper.d.ts.map