Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
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,
};