UNPKG

@lodestar/api

Version:

A Typescript REST client for the Ethereum Consensus API

66 lines 2.62 kB
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