contensis-core-api
Version:
A dependency library used by contensis-delivery-api and contensis-management-api
83 lines • 3.86 kB
JavaScript
import { isBrowser } from '../utils';
var HttpClient = /** @class */ (function () {
function HttpClient(paramsProvider, fetchFn) {
this.paramsProvider = paramsProvider;
this.fetchFn = fetchFn;
}
HttpClient.prototype.request = function (url, request) {
if (request === void 0) { request = {}; }
var params = this.paramsProvider.getParams();
var isRelativeRequestUrl = !params.rootUrl || params.rootUrl === '/';
if (!isBrowser() && isRelativeRequestUrl) {
throw new Error('You cannot specify a relative root url if not in a browser context.');
}
request.method = request.method || (!!request.body ? 'POST' : 'GET');
if (!isRelativeRequestUrl) {
request.mode = 'cors';
}
request.headers = request.headers || {};
var headers = request.headers;
if (!headers.accessToken && !!params.accessToken) {
headers.accessToken = params.accessToken;
}
if (params.clientType === 'none' && !headers.accessToken) {
throw new Error("If the property clientType is set to \"".concat(params.clientType, "\" then the property accessToken must be provided."));
}
if (params.clientType === 'client_credentials' && !params.clientDetails) {
throw new Error("If the property client type is set to \"".concat(params.clientType, "\" then the property clientDetails must be set to a ClientCredentialsGrant value."));
}
if (!!params.defaultHeaders) {
var keys = Object.keys(params.defaultHeaders);
keys.forEach(function (key) {
if (!headers[key] && !!params.defaultHeaders[key]) {
headers[key] = params.defaultHeaders[key];
}
});
}
var requestUrl = isRelativeRequestUrl ? "".concat(url) : "".concat(params.rootUrl).concat(url);
return this.fetchFn(requestUrl, request)
.then(function (response) {
var responseHandlerFunction = null;
if (!!params.responseHandler) {
if (!!params.responseHandler['*']) {
responseHandlerFunction = params.responseHandler['*'];
}
if (!!params.responseHandler[response.status]) {
responseHandlerFunction = params.responseHandler[response.status];
}
}
var responseContext = {
status: response.status,
statusText: response.statusText,
url: response.url,
data: null
};
return response
.text()
.then(function (text) {
return !!text && text.length && text.length > 0 ? JSON.parse(text) : {};
})
.then(function (result) {
responseContext.data = result;
if (response.ok) {
if (!!responseHandlerFunction) {
responseHandlerFunction(response, responseContext);
}
return result;
}
return !!responseHandlerFunction ?
responseHandlerFunction(response, responseContext)
: Promise.reject(responseContext);
}, function (reason) {
responseContext.data = reason;
return !!responseHandlerFunction ?
responseHandlerFunction(response, responseContext)
: Promise.reject(responseContext);
});
})
.then(function (result) { return result; });
};
return HttpClient;
}());
export { HttpClient };
//# sourceMappingURL=http-client.js.map