import { TypedCustomEvent } from "../events/TypedCustomEvent";
import { TypedEventTarget } from "../events/TypedEventTarget";
import { Timer } from "../metrics/operational/Timer";
import type { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
interface Started {
    requestId: number;
    timer: Timer<"download_latency">;
    dimensions: Dimensions;
}
interface Completed {
    requestId: number;
    dimensions: Dimensions;
    status: number;
    sizeByte: number;
}
interface Errored {
    requestId: number;
    dimensions: Dimensions;
    error: Error;
}
export type Dimensions = Record<string, string | undefined>;
export type RequestStateEvents = TypedCustomEvent<"started", Started> | TypedCustomEvent<"completed", Completed> | TypedCustomEvent<"errored", Errored>;
export declare const dispatchRequestStarted: (requestStateEventTarget: RequestStateEventTarget, data: Omit<Started, "requestId" | "timer">) => Started;
export declare const dispatchRequestCompleted: (requestStateEventTarget: RequestStateEventTarget, data: Completed) => Completed;
export declare const dispatchRequestErrored: (requestStateEventTarget: RequestStateEventTarget, data: Errored) => Errored;
export declare const createRequestStateEmittingHandler: <D extends Dimensions = Dimensions>(requestStateEventTarget: RequestStateEventTarget) => ChainableHandler<[RequestInfo, D], Response, RequestInfo, Response, RequestMetadata>;
/**
 * This event target may be used to listen for any network request state changes initiated by CameraKit.
 *
 * @internal
 */
export type RequestStateEventTarget = TypedEventTarget<RequestStateEvents>;
/**
 * @internal
 */
export declare const requestStateEventTargetFactory: {
    (): RequestStateEventTarget;
    token: "requestStateEventTarget";
    dependencies: [];
};
export {};
//# sourceMappingURL=requestStateEmittingHandler.d.ts.map