import { IncomingHttpHeaders } from 'http' import Dispatcher from './dispatcher'; import { Headers } from './fetch' export { Interceptable, MockInterceptor, MockScope } /** The scope associated with a mock dispatch. */ declare class MockScope { constructor(mockDispatch: MockInterceptor.MockDispatch); /** Delay a reply by a set amount of time in ms. */ delay(waitInMs: number): MockScope; /** Persist the defined mock data for the associated reply. It will return the defined mock data indefinitely. */ persist(): MockScope; /** Define a reply for a set amount of matching requests. */ times(repeatTimes: number): MockScope; } /** The interceptor for a Mock. */ declare class MockInterceptor { constructor(options: MockInterceptor.Options, mockDispatches: MockInterceptor.MockDispatch[]); /** Mock an undici request with the defined reply. */ reply(replyOptionsCallback: MockInterceptor.MockReplyOptionsCallback): MockScope; reply( statusCode: number, data: TData | Buffer | string | MockInterceptor.MockResponseDataHandler, responseOptions?: MockInterceptor.MockResponseOptions ): MockScope; /** Mock an undici request by throwing the defined reply error. */ replyWithError(error: TError): MockScope; /** Set default reply headers on the interceptor for subsequent mocked replies. */ defaultReplyHeaders(headers: IncomingHttpHeaders): MockInterceptor; /** Set default reply trailers on the interceptor for subsequent mocked replies. */ defaultReplyTrailers(trailers: Record): MockInterceptor; /** Set automatically calculated content-length header on subsequent mocked replies. */ replyContentLength(): MockInterceptor; } declare namespace MockInterceptor { /** MockInterceptor options. */ export interface Options { /** Path to intercept on. */ path: string | RegExp | ((path: string) => boolean); /** Method to intercept on. */ method: string | RegExp | ((method: string) => boolean); /** Body to intercept on. */ body?: string | RegExp | ((body: string) => boolean); /** Headers to intercept on. */ headers?: Record boolean)> | ((headers: Record) => boolean); } export interface MockDispatch extends Options { times: number | null; persist: boolean; consumed: boolean; data: MockDispatchData; } export interface MockDispatchData extends MockResponseOptions { error: TError | null; statusCode?: number; data?: TData | string; } export interface MockResponseOptions { headers?: IncomingHttpHeaders; trailers?: Record; } export interface MockResponseCallbackOptions { path: string; origin: string; method: string; body?: string; headers: Headers; maxRedirections: number; } export type MockResponseDataHandler = ( opts: MockResponseCallbackOptions ) => TData | Buffer | string; export type MockReplyOptionsCallback = ( opts: MockResponseCallbackOptions ) => { statusCode: number, data: TData | Buffer | string, responseOptions?: MockResponseOptions } } interface Interceptable extends Dispatcher { /** Intercepts any matching requests that use the same origin as this mock client. */ intercept(options: MockInterceptor.Options): MockInterceptor; }