import { Writable } from 'stream';
import { OngoingRequest, CompletedRequest, OngoingResponse, Explainable } from "../../types";
import { MaybePromise } from '@httptoolkit/util';
import * as matchers from "../matchers";
import { type RequestStepDefinition } from "./request-step-definitions";
import * as completionCheckers from "../completion-checkers";
export interface RequestRule extends Explainable {
    id: string;
    requests: Promise<CompletedRequest>[];
    matches(request: OngoingRequest): MaybePromise<boolean>;
    handle(request: OngoingRequest, response: OngoingResponse, options: {
        record: boolean;
        debug: boolean;
        keyLogStream?: Writable;
        emitEventCallback?: (type: string, event: unknown) => void;
    }): Promise<void>;
    isComplete(): boolean | null;
}
export interface RequestRuleData {
    id?: string;
    priority?: number;
    matchers: matchers.RequestMatcher[];
    steps: Array<RequestStepDefinition>;
    completionChecker?: completionCheckers.RuleCompletionChecker;
}
export declare class RequestRule implements RequestRule {
    private matchers;
    private steps;
    private completionChecker?;
    id: string;
    readonly priority: number;
    requests: Promise<CompletedRequest>[];
    requestCount: number;
    constructor(data: RequestRuleData);
    explain(withoutExactCompletion?: boolean): string;
    dispose(): void;
}
export declare function explainSteps(steps: RequestStepDefinition[]): string;
//# sourceMappingURL=request-rule.d.ts.map