import type { AnyCaller } from "../../util/function.js";
import { type RequestBodyMethod, type RequestOptions } from "../../util/http.js";
import type { PossibleURL } from "../../util/url.js";
import type { Endpoint } from "../endpoint/Endpoint.js";
import { ClientAPIProvider } from "./ClientAPIProvider.js";
/** API provider that always sends request bodies as JSON and parses responses as JSON. */
export declare class JSONAPIProvider<P = unknown, R = unknown> extends ClientAPIProvider<P, R> {
    protected _createBodyRequest(method: RequestBodyMethod, url: PossibleURL, payload: P, options: RequestOptions, caller: AnyCaller): Request;
    /**
     * Parse a JSON `Response` for an endpoint.
     *
     * - Non-2xx responses become `ResponseError`.
     * - JSON is parsed even if the server omitted or mis-set the response content type.
     */
    parseResponse<PP extends P, RR extends R>(_endpoint: Endpoint<PP, RR>, response: Response, caller?: AnyCaller): Promise<RR>;
}
