@scaleway/sdk-client
Version:
Scaleway SDK Client
61 lines (60 loc) • 2.55 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const isBrowser = require("../../helpers/is-browser.cjs");
const composer = require("../../internal/interceptors/composer.cjs");
const auth = require("../auth.cjs");
const httpInterceptors = require("./http-interceptors.cjs");
const responseParser = require("./response-parser.cjs");
const buildRequest = (request, settings) => {
let { path } = request;
if (request.urlParams instanceof URLSearchParams) {
path = path.concat(`?${request.urlParams.toString()}`);
}
return new Request(`${settings.apiURL}${path}`, {
body: request.body,
headers: {
Accept: "application/json",
.../* istanbul ignore next */
!isBrowser.isBrowser() ? { "User-Agent": settings.userAgent } : {},
...request.headers
},
method: request.method
});
};
const asIs = (response) => response;
const buildFetcher = (settings, httpClient) => {
let requestNumber = 0;
const prepareRequest = (requestId) => composer.composeRequestInterceptors([
...settings.interceptors.map((obj) => obj.request).filter((obj) => obj),
httpInterceptors.logRequest(requestId, httpInterceptors.obfuscateInterceptor(auth.obfuscateAuthHeadersEntry))
]);
const prepareResponse = (requestId) => composer.composeResponseInterceptors([
...settings.interceptors.map((obj) => obj.response).filter((obj) => obj),
httpInterceptors.logResponse(requestId)
]);
const prepareResponseErrors = () => composer.composeResponseErrorInterceptors(
settings.interceptors.map((obj) => obj.responseError).filter((obj) => obj)
);
return async (request, unwrapper = asIs) => {
const requestId = `${requestNumber += 1}`;
const reqInterceptors = prepareRequest(requestId);
const finalRequest = await reqInterceptors(buildRequest(request, settings));
try {
const response = await httpClient(finalRequest);
const resInterceptors = prepareResponse(requestId);
const finalResponse = await resInterceptors(response);
const resUnmarshaller = responseParser.responseParser(
unwrapper,
request.responseType ?? "json"
);
const unmarshaledResponse = await resUnmarshaller(finalResponse);
return unmarshaledResponse;
} catch (err) {
const resErrorInterceptors = prepareResponseErrors();
const handledError = await resErrorInterceptors(finalRequest, err);
return unwrapper(handledError);
}
};
};
exports.buildFetcher = buildFetcher;
exports.buildRequest = buildRequest;
;