/**
 * @typedef {NetworkError | TimeoutError | AbortError | HttpError | RetryError} Errors
 */
/**
 * Check if a value is a RequestError
 *
 * @param {unknown} value
 * @returns {value is RequestError}
 */
export function isRequestError(value: unknown): value is RequestError;
/**
 * Request timeout
 *
 * @param {import('./types.js').RequestInput} resource
 * @param {import("./types.js").RequestOptions} options
 * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
 */
export function request(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
export namespace request {
    /**
     * Request GET
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function get(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request POST
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function post(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request PUT
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function put(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request DELETE
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    function _delete(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    export { _delete as delete };
    /**
     * Request PATCH
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function patch(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request HEAD
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function head(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request OPTIONS
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function options(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request TRACE
     *
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").RequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<Response, Errors>>}
     */
    export function trace(resource: import("./types.js").RequestInput, options?: import("./types.js").RequestOptions): Promise<import("./types.js").MaybeResult<Response, Errors>>;
    /**
     * Request Json GET
     *
     * @template T
     * @param {import('./types.js').RequestInput} resource
     * @param {import("./types.js").JSONRequestOptions} options
     * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
     */
    export function json<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
    export namespace json {
        /**
         * Request Json GET
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function get<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json POST
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function post<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json PUT
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function put<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json DELETE
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        function _delete<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        export { _delete as delete };
        /**
         * Request Json PATCH
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function patch<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json HEAD
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function head<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json OPTIONS
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function options<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
        /**
         * Request Json TRACE
         *
         * @template T
         * @param {import('./types.js').RequestInput} resource
         * @param {import("./types.js").JSONRequestOptions} options
         * @returns {Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>}
         */
        export function trace<T>(resource: import("./types.js").RequestInput, options?: import("./types.js").JSONRequestOptions): Promise<import("./types.js").MaybeResult<T, Errors | JsonError>>;
    }
}
export class RequestError extends Error {
    /**
     * Check if a value is a RequestError
     *
     * @param {unknown} value
     * @returns {value is RequestError}
     */
    static is(value: unknown): value is RequestError;
    /**
     *
     * @param {string} message
     * @param {ErrorOptions} [options]
     */
    constructor(message: string, options?: ErrorOptions);
    /** @type {unknown} */
    cause: unknown;
    /** @type {boolean} */
    [symbol]: boolean;
}
export class JsonError extends RequestError {
    /**
     * Check if a value is a JsonError
     *
     * @param {unknown} value
     * @returns {value is JsonError}
     */
    static is(value: unknown): value is JsonError;
    /**
     *
     * @param {{ cause: import('type-fest').JsonValue }} options
     */
    constructor(options: {
        cause: import("type-fest").JsonValue;
    });
    /** @type {import('type-fest').JsonValue} */
    cause: import("type-fest").JsonValue;
}
export class NetworkError extends RequestError {
}
export class TimeoutError extends RequestError {
    /**
     *
     * @param {number} timeout
     * @param {ErrorOptions} [options]
     */
    constructor(timeout: number, options?: ErrorOptions);
}
export class AbortError extends RequestError {
    /**
     * Check if a value is a AbortError
     *
     * @param {unknown} value
     * @returns {value is AbortError}
     */
    static is(value: unknown): value is AbortError;
    /**
     *
     * @param {AbortSignal} signal
     * @param {ErrorOptions} [options]
     */
    constructor(signal: AbortSignal, options?: ErrorOptions);
    /** @type {AbortSignal} */
    signal: AbortSignal;
}
export class RetryError extends RequestError {
    /**
     *
     * @param {number} attempts
     * @param {ErrorOptions} [options]
     */
    constructor(attempts: number, options?: ErrorOptions);
}
export class HttpError extends RequestError {
    /**
     * Check if a value is a HttpError
     *
     * @param {unknown} value
     * @returns {value is HttpError}
     */
    static is(value: unknown): value is HttpError;
    /**
     *
     * @param {ErrorOptions & {response: Response, request: Request, options: import('./types.js').RequestOptions}} options
     */
    constructor(options: ErrorOptions & {
        response: Response;
        request: Request;
        options: import("./types.js").RequestOptions;
    });
    /** @type {number} */
    code: number;
    /** @type {Response} */
    response: Response;
    /** @type {Request} */
    request: Request;
    /** @type {import('./types.js').RequestOptions} */
    options: import("./types.js").RequestOptions;
}
export type Errors = NetworkError | TimeoutError | AbortError | HttpError | RetryError;
declare const symbol: unique symbol;
export {};
//# sourceMappingURL=http.d.ts.map