shelving
Version:
Toolkit for using data in JavaScript.
24 lines (23 loc) • 1.1 kB
JavaScript
import { ResponseError } from "../../error/ResponseError.js";
import { getMessage } from "../../util/error.js";
import { createJSONRequest, parseResponseJSON } from "../../util/http.js";
import { ClientAPIProvider } from "./ClientAPIProvider.js";
/** API provider that always sends request bodies as JSON and parses responses as JSON. */
export class JSONAPIProvider extends ClientAPIProvider {
_createBodyRequest(method, url, payload, options, caller) {
return createJSONRequest(method, url, payload, options, caller);
}
/**
* 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.
*/
async parseResponse(_endpoint, response, caller = this.parseResponse) {
const { ok, status } = response;
const content = await parseResponseJSON(response, caller);
if (!ok)
throw new ResponseError(getMessage(content) ?? `Error ${status}`, { code: status, cause: response, caller });
return content;
}
}