/// <reference types="node" />
import { SetupWorker } from "msw/browser";
import { SetupServer } from "msw/node";
import { JSONValue, Logger } from "./utils/utils";
import { convertMswMatchToPact } from "./convertMswMatchToPact";
import { EventEmitter } from "events";
export interface PactMswAdapterOptions {
    timeout?: number;
    debug?: boolean;
    pactOutDir?: string;
    consumer: string;
    providers: {
        [name: string]: string[];
    } | ((event: PendingRequest) => string | null);
    includeUrl?: string[];
    excludeUrl?: string[];
    excludeHeaders?: string[];
    logger?: Logger;
}
export interface PactMswAdapterOptionsInternal {
    timeout: number;
    debug: boolean;
    pactOutDir: string;
    consumer: string;
    providers: {
        [name: string]: string[];
    } | ((event: PendingRequest) => string | null);
    includeUrl?: string[];
    excludeUrl?: string[];
    excludeHeaders?: string[];
    logger: Logger;
}
export interface PactMswAdapter {
    emitter: EventEmitter;
    newTest: () => void;
    verifyTest: () => void;
    writeToFile: (writer?: (path: string, data: object) => void) => Promise<void>;
    clear: () => void;
}
export declare const setupPactMswAdapter: ({ options: externalOptions, worker, server, }: {
    options: PactMswAdapterOptions;
    worker?: SetupWorker;
    server?: SetupServer;
}) => PactMswAdapter;
export { convertMswMatchToPact };
export interface PactInteraction {
    description: string;
    providerState: string;
    request: {
        method: string;
        path: string;
        headers: any;
        body: JSONValue | FormData | undefined;
        query?: string;
    };
    response: {
        status: number;
        headers: any;
        body: any;
    };
}
export interface PactParticipants {
    consumer: {
        name: string;
    };
    provider: {
        name: string;
    };
}
export interface PactFile {
    consumer: PactParticipants["consumer"];
    provider: PactParticipants["provider"];
    interactions: PactInteraction[];
    metadata: PactFileMetaData;
}
export interface PactFileMetaData {
    pactSpecification: {
        version: string;
    };
    client: {
        name: string;
        version: string;
    };
}
export interface PendingRequest {
    request: Request;
    requestId: string;
}
export interface MatchedRequest extends PendingRequest {
    response: Response;
}
export interface ExpiredRequest extends PendingRequest {
    startTime: number;
    duration?: number;
}
