import { RequestEventType, RequestProgressEventType, RequestResponseEventType } from '../managers';
import { RequestInstance } from './request.types';
type HookName = "onBeforeSent" | "onRequestStart" | "onResponseStart" | "onUploadProgress" | "onDownloadProgress" | "onResponse" | "onRemove";
export interface RequestHooks<R extends RequestInstance> {
    onBeforeSent: (cb: (eventData: RequestEventType<R>) => void) => () => void;
    onRequestStart: (cb: (eventData: RequestEventType<R>) => void) => () => void;
    onResponseStart: (cb: (eventData: RequestEventType<R>) => void) => () => void;
    onUploadProgress: (cb: (eventData: RequestProgressEventType<R>) => void) => () => void;
    onDownloadProgress: (cb: (eventData: RequestProgressEventType<R>) => void) => () => void;
    onResponse: (cb: (eventData: RequestResponseEventType<R>) => void) => () => void;
    onRemove: (cb: (eventData: RequestEventType<R>) => void) => () => void;
    /** @internal Invoke all registered listeners for a given hook */
    __emit: (name: HookName, data: any) => void;
    /** @internal Get a snapshot of all registered listeners (used by clone) */
    __snapshot: () => Record<HookName, Array<(...args: any[]) => void>>;
}
export declare function createRequestHooks<R extends RequestInstance>(initial?: Record<HookName, Array<(...args: any[]) => void>>): RequestHooks<R>;
export {};
//# sourceMappingURL=request.hooks.d.ts.map