Repository URL to install this package:
|
Version:
0.0.9 ▾
|
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) {
return Object.assign(memo, {
[key.toLowerCase()]: error.details.errors[key].toLowerCase().replace(/_/g, '-'),
});
}, {});
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;
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,
errorHandler,
};