Repository URL to install this package:
|
Version:
0.0.11-rc1 ▾
|
var CONSTANTS = require('./constants');
/**
* Fetch error handler.
*/
function errorHandler(error) {
var unknown;
var unreachable;
var errors;
// TODO: Evaluate if this check for error.details.errors is
// even nessesary. I know it does not have anything to do with
// responses that will come back from the svc-zoom-integration,
// but I am hesitant to remove it until I know for sure which service
// or frontend uses these type of error responses.
if (error && error.details && error.details.errors) {
// transform errors to lowercase
errors = Object.keys(error.details.errors).reduce(function(memo, key) {
var lowerKey = key.toLowerCase();
var newObj = {};
newObj[lowerKey] = error.details.errors[key].toLowerCase().replace(/_/g, '-');
return Object.assign(memo, newObj);
}, {});
throw errors;
}
if (error && error.reason) {
throw error;
}
unknown = Object.assign({}, error || {}, { api: CONSTANTS.errorTypes.unknown });
if (error && error.errorType && error.errorType === 'UNKNOWN') {
throw unknown;
}
if (error && !error.response) {
unreachable = { api: CONSTANTS.errorTypes.unreachable };
throw unreachable;
}
throw unknown;
}
/**
* Fetch response handler.
*/
function responseHandler(response) {
var headers = response.headers;
var contentType = headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
if (response.status >= 200 && response.status < 300) {
return response.json();
}
return response.json().then(errorHandler);
}
if (response.status >= 200 && response.status < 300) {
return response.text();
}
return response.text().then(errorHandler);
}
module.exports = {
responseHandler: responseHandler,
errorHandler: errorHandler,
};