@janiscommerce/app-request
Version:
Module to do requests at janis apps
66 lines (56 loc) • 2.17 kB
JavaScript
import axiosInstance from './axiosInstance.js';
import crashlytics from './crashlytics.js';
import {isNumber, isObject, isString, isArray} from './helpers.js';
const makeRequest = ({httpVerb, url, data, headers, extendedConfig, crashConfig}) =>
new Promise((resolve, reject) => {
const config = {
method: httpVerb,
url,
...extendedConfig,
...(!!headers && isObject(headers) && {headers}),
...(!!data && (isObject(data) || isArray(data)) && {data}),
};
const {method, service, namespace, id} = crashConfig;
crashlytics.log(`${method}/ service:${service} - namespace:${namespace}`);
crashlytics.log(`URL ${method}: ${url}`);
axiosInstance(config)
.then((response) => {
const {headers: responseHeaders, status, statusText, data: responseData} = response;
const {'x-janis-total': totalResult, ...restHeaders} = responseHeaders;
const total = Number(totalResult);
const isLastPage = responseData?.length < headers['x-janis-page-size'];
resolve({
result: responseData,
headers: restHeaders,
statusCode: status,
isLastPage,
...(total && isNumber(total) && {total}),
...(statusText && isString(statusText) && {statusText}),
});
})
.catch((error) => {
if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
const {data: errorData = {}, status = '', statusText = ''} = error.response;
const validMessage = errorData?.message;
if (isString(validMessage) && validMessage) error.message = validMessage;
reject({
result: errorData,
statusCode: status,
statusText: statusText,
});
} else if (error.request) {
//Request was made but no response was received
reject({result: {message: error.message}});
} else {
//Something happened in setting up the request that triggered an Error
reject({result: {message: error.message}});
}
crashlytics.recordError(
error,
`Error at ${method}: service: ${service} namespace: ${namespace} ${id ? `id: ${id}` : ''} URL:${url}`,
);
});
});
export default makeRequest;