import { RequiredConfig } from "./config";
import { Result, ValidationErrorInfo } from "./types/common";
export type ResponseHandler<Output> = (response: Response) => Promise<Output>;
export type ResponseHandlerCreator<Output> = (config: RequiredConfig) => ResponseHandler<Output>;
type ApiErrorArgs = {
    message: string;
    status: number;
    body?: any;
    requestId?: string;
    /**
     * The type of timeout that occurred. If "user", this was a user-specified
     * timeout via startTimeout and should NOT be retried.
     */
    timeoutType?: string;
};
export declare class ApiError<Body> extends Error {
    readonly status: number;
    readonly body: Body;
    readonly requestId: string;
    readonly timeoutType?: string;
    constructor({ message, status, body, requestId, timeoutType }: ApiErrorArgs);
    /**
     * Returns true if this error was caused by a user-specified timeout
     * (via startTimeout parameter). These errors should NOT be retried.
     */
    get isUserTimeout(): boolean;
}
type ValidationErrorBody = {
    detail: ValidationErrorInfo[];
};
export declare class ValidationError extends ApiError<ValidationErrorBody> {
    constructor(args: ApiErrorArgs);
    get fieldErrors(): ValidationErrorInfo[];
    getFieldErrors(field: string): ValidationErrorInfo[];
}
export declare function defaultResponseHandler<Output>(response: Response): Promise<Output>;
export declare function resultResponseHandler<Output>(response: Response): Promise<Result<Output>>;
export {};
