export declare const MOCK_TRANSLATION_TTL_SECONDS: number;
export declare const MOCK_TRANSLATION_KEY_PREFIX = "mock-translator:v1:job:";
export interface MockTranslationObservation {
    calls: number;
    attempts: number;
    released: boolean;
}
interface RedisClient {
    incr(key: string): Promise<number>;
    get(key: string): Promise<string | null>;
    set(key: string, value: string, ...args: Array<string | number>): Promise<unknown>;
    expire(key: string, seconds: number): Promise<number>;
    del(...keys: string[]): Promise<number>;
    publish(channel: string, message: string): Promise<number>;
    duplicate?: () => RedisClient;
    subscribe?: (channel: string) => Promise<unknown>;
    unsubscribe?: (channel: string) => Promise<unknown>;
    on?: (event: string, listener: (...args: unknown[]) => void) => RedisClient;
    removeListener?: (event: string, listener: (...args: unknown[]) => void) => RedisClient;
    quit?: () => Promise<unknown>;
}
export interface MockTranslationStoreOptions {
    redis?: RedisClient;
    subscriber?: RedisClient;
    pollIntervalMs?: number;
}
export declare class MockTranslationStore {
    private readonly redis;
    private readonly subscriber?;
    private readonly pollIntervalMs;
    constructor(options?: MockTranslationStoreOptions | RedisClient);
    key(jobId: string, suffix: 'gate' | 'calls' | 'attempts'): string;
    channel(jobId: string): string;
    recordCall(jobId: string, attempt: number): Promise<MockTranslationObservation>;
    getObservation(jobId: string): Promise<MockTranslationObservation>;
    waitForRelease(jobId: string, signal?: AbortSignal): Promise<void>;
    release(jobId: string): Promise<MockTranslationObservation>;
    reset(jobId: string): Promise<void>;
}
export declare const mockTranslationStore: MockTranslationStore;
export default mockTranslationStore;
//# sourceMappingURL=mockTranslationStore.d.ts.map