///
import { ClientRequest } from 'http';
export interface Headers {
[name: string]: string | string[];
}
export interface Request {
url: string;
method: string;
headers: Headers;
body?: Buffer | false;
}
export interface Response {
statusCode: number;
statusMessage: string;
headers: Headers;
body?: Buffer | false;
}
export interface RequestContext {
timing: Timing;
requestId: string;
[name: string]: any;
}
export interface Timing {
socket: {
lookup?: number;
connect?: number;
tls?: number;
ready?: number;
error?: number;
close?: number;
};
request: {
initiated?: number;
finish?: number;
close?: number;
timeout?: number;
write?: number;
end?: number;
};
response: {
read?: number;
end?: number;
error?: number;
aborted?: number;
};
}
export declare type Event = 'request.initiated' | 'request.sent' | 'socket.error' | 'response.received' | 'response.error';
declare type Listener = T extends 'request.initiated' ? (request: ClientRequest, context: RequestContext) => void : T extends 'request.sent' ? (request: Request, context: RequestContext) => void : T extends 'response.received' ? (request: Request, response: Response, context: RequestContext) => void : T extends 'response.error' ? (request: Request, error: Error, context: RequestContext) => void : T extends 'socket.error' ? (request: Request, error: Error, context: RequestContext) => void : never;
export interface Options {
peekRequestBody?(request: Omit): boolean;
peekResponseBody?(response: Omit): boolean;
}
export declare type Stub = (request: Request) => Response;
export declare class HttpInterceptor {
private emitter;
private enabled;
private _stub?;
private options;
constructor(options?: Options);
enable(): void;
disable(): void;
stub(stub: Stub): void;
unstub(): void;
private wrap;
private wrapRequest;
private peekRequestBody;
private wrapResponse;
private wrapSocket;
on(event: T, listener: Listener): void;
private handleWrapperError;
}
export {};