import { z } from "zod";
import type { AdapterHealth, GdsAdapter, GdsRequest, GdsResponse } from "./adapter.ts";
export declare const ChaosFailureTypeSchema: z.ZodEnum<{
    timeout: "timeout";
    "service-unavailable": "service-unavailable";
    "rate-limit": "rate-limit";
    "auth-expired": "auth-expired";
    "internal-error": "internal-error";
}>;
export type ChaosFailureType = z.infer<typeof ChaosFailureTypeSchema>;
export declare const ChaosConfigSchema: z.ZodObject<{
    failureRate: z.ZodDefault<z.ZodNumber>;
    failureTypes: z.ZodDefault<z.ZodArray<z.ZodEnum<{
        timeout: "timeout";
        "service-unavailable": "service-unavailable";
        "rate-limit": "rate-limit";
        "auth-expired": "auth-expired";
        "internal-error": "internal-error";
    }>>>;
    latencyJitterMs: z.ZodDefault<z.ZodNumber>;
    durationMs: z.ZodDefault<z.ZodNumber>;
}, z.core.$strip>;
export type ChaosConfig = z.infer<typeof ChaosConfigSchema>;
/**
 * Wraps a GdsAdapter and injects configurable failures for resilience testing.
 *
 * Use to verify circuit breaker behaviour, retry logic, and fallback routing
 * under controlled failure conditions.
 *
 * ```ts
 * const adapter = new OutageSimulator(new AmadeusAdapter(), {
 *   failureRate: 0.5,        // 50% of calls fail
 *   failureTypes: ["timeout", "rate-limit"],
 *   latencyJitterMs: 2000,    // up to 2s of simulated latency
 * });
 * ```
 */
export declare class OutageSimulator implements GdsAdapter {
    private readonly inner;
    private chaos;
    private startTime;
    private failuresInjected;
    private calls;
    constructor(inner: GdsAdapter, config?: Partial<ChaosConfig>);
    get providerName(): string;
    get supportedCarriers(): readonly string[];
    supportsCarrier(carrier: string): boolean;
    /** Current chaos configuration. */
    getChaosConfig(): ChaosConfig;
    /** Update chaos parameters at runtime. */
    setChaosConfig(config: Partial<ChaosConfig>): void;
    /** Total failures injected. */
    getFailureCount(): number;
    /** Total calls made through the simulator. */
    getCallCount(): number;
    /** Whether chaos is still active (not past durationMs). */
    isChaosActive(): boolean;
    authenticate(): Promise<void>;
    isAuthenticated(): Promise<boolean>;
    execute(request: GdsRequest): Promise<GdsResponse>;
    health(): Promise<AdapterHealth>;
    private shouldInject;
    private createChaosError;
}
//# sourceMappingURL=outage-simulator.d.ts.map