/// <reference types="node" />
/// <reference types="koa-compose" />
import { ClientRequest, IncomingMessage, ServerResponse } from 'http';
import { ServerOptions } from 'http-proxy';
import { DefaultContext, DefaultState, ParameterizedContext } from 'koa';
import { Url } from 'url';
export declare type ProxyTargetUrl = string | Partial<Url>;
export interface ProxyEventListener {
    error?: (err: Error, req: IncomingMessage, res: ServerResponse, target?: ProxyTargetUrl) => void;
    start?: (req: IncomingMessage, res: ServerResponse, target: ProxyTargetUrl) => void;
    proxyReq?: (proxyReq: ClientRequest, req: IncomingMessage, res: ServerResponse, options: ServerOptions) => void;
    proxyRes?: (proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse) => void;
    econnreset?: (err: Error, req: IncomingMessage, res: ServerResponse, target: ProxyTargetUrl) => void;
    end?: (req: IncomingMessage, res: ServerResponse, proxyRes: IncomingMessage) => void;
}
export interface KoaProxyOptions<StateT, CustomT> extends ServerOptions {
    listeners?: ProxyEventListener;
    override?: (ctx: ParameterizedContext<StateT, CustomT>) => ServerOptions;
    skipError?: boolean;
}
export declare const proxy: <StateT = DefaultState, CustomT = DefaultContext>({ listeners, override, skipError, ...options }?: KoaProxyOptions<StateT, CustomT>) => import("koa-compose").Middleware<ParameterizedContext<StateT, CustomT>>;
export default proxy;
//# sourceMappingURL=index.d.ts.map