@lodestar/api
Version:
A Typescript REST client for the Ethereum Consensus API
66 lines • 2.62 kB
JavaScript
import { HttpHeader, MediaType, mergeHeaders, setAuthorizationHeader } from "../headers.js";
import { isRequestWithoutBody, } from "../types.js";
import { WireFormat } from "../wireFormat.js";
import { stringifyQuery, urlJoin } from "./format.js";
export function createApiRequest(definition, args, init) {
const headers = new Headers();
let req;
if (isRequestWithoutBody(definition)) {
req = definition.req.writeReq(args);
}
else {
const requestWireFormat = definition.req.onlySupport ?? init.requestWireFormat;
switch (requestWireFormat) {
case WireFormat.json:
req = definition.req.writeReqJson(args);
if (req.body) {
req.body = JSON.stringify(req.body);
headers.set(HttpHeader.ContentType, MediaType.json);
}
break;
case WireFormat.ssz:
req = definition.req.writeReqSsz(args);
if (req.body) {
headers.set(HttpHeader.ContentType, MediaType.ssz);
}
break;
default:
throw Error(`Invalid requestWireFormat: ${requestWireFormat}`);
}
}
const queryString = req.query ? stringifyQuery(req.query) : "";
const url = new URL(urlJoin(init.baseUrl, definition.urlFormatter(req.params ?? {})) + (queryString ? `?${queryString}` : ""));
setAuthorizationHeader(url, headers, init);
if (definition.resp.isEmpty) {
// Do not set Accept header
}
else if (definition.resp.onlySupport !== undefined) {
switch (definition.resp.onlySupport) {
case WireFormat.json:
headers.set(HttpHeader.Accept, MediaType.json);
break;
case WireFormat.ssz:
headers.set(HttpHeader.Accept, MediaType.ssz);
break;
}
}
else {
switch (init.responseWireFormat) {
case WireFormat.json:
headers.set(HttpHeader.Accept, `${MediaType.json};q=1,${MediaType.ssz};q=0.9`);
break;
case WireFormat.ssz:
headers.set(HttpHeader.Accept, `${MediaType.ssz};q=1,${MediaType.json};q=0.9`);
break;
default:
throw Error(`Invalid responseWireFormat: ${init.responseWireFormat}`);
}
}
return new Request(url, {
...init,
method: definition.method,
headers: mergeHeaders(headers, req.headers, init.headers),
body: req.body,
});
}
//# sourceMappingURL=request.js.map