@appello/services
Version:
Services package with api / graphql
54 lines (53 loc) • 2.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleApiRequestError = handleApiRequestError;
const common_1 = require("@appello/common");
const axios_1 = __importDefault(require("axios"));
const consts_1 = require("../../consts");
function handleApiRequestError({ error, onManualHandleError, handleDetailError, }) {
if (!axios_1.default.isAxiosError(error)) {
return {
[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR]: consts_1.ApiErrorMessagesEnum.UNKNOWN_ERROR,
};
}
if (onManualHandleError) {
return onManualHandleError(error);
}
if (error.request && error.request.status === 0) {
return {
[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR]: consts_1.ApiErrorMessagesEnum.NETWORK_ERROR,
};
}
if (error.response && error.response.status !== consts_1.ApiErrorStatusEnum.UNAUTHORIZED) {
const data = error.response.data;
if (!data || !('detail' in data)) {
return {
[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR]: consts_1.ApiErrorMessagesEnum.SERVER_ERROR,
};
}
if (handleDetailError) {
return handleDetailError(data.detail);
}
const errors = {};
(0, common_1.entries)(data.detail).forEach(([field, message]) => {
if ((0, common_1.isObject)(message)) {
(0, common_1.keys)(message).forEach(subField => {
errors[`${field}.${subField}`] = getErrorMessage(message[subField]);
});
}
else {
errors[field] = getErrorMessage(message);
}
});
return errors;
}
return {
[consts_1.ApiErrorCodeEnum.GLOBAL_ERROR]: consts_1.ApiErrorMessagesEnum.UNKNOWN_ERROR,
};
}
function getErrorMessage(error) {
return Array.isArray(error) ? error[0] : error;
}