errors.js

/**
 * Network error.
 *
 * @export
 * @class
 */
export class NetworkError extends Error {
  constructor (message, data) {
    super(message)
    this.data = data
  }
};

/**
 * Request timeout error.
 *
 * @export
 * @class
 */
export class ClientTimeoutError extends Error {
  constructor (message, data) {
    super(message)
    this.data = data
  }
}

/**
 * Base class for server errors.
 */
export class ServerErrorBase extends Error {
  /**
   * Wrap a raw axios error.
   *
   * @param {object} originalError Raw axios response.
   * @param {axios} axios Axios instance used for request.
   */
  constructor (originalError, axios) {
    super(originalError.message)
    this.originalError = originalError
    this._axios = axios
  }

  /**
   * Response HTTP status.
   */
  get httpStatus () {
    return this.originalError.response.status
  }

  /**
   * Error meta.
   */
  get meta () {
    return this._meta
  }

  /**
   * A short, human-readable summary of the problem.
   */
  get title () {
    return this._title
  }

  /**
   * A human-readable explanation specific to this occurrence of the problem.
   */
  get detail () {
    return this._detail
  }

  /**
   * Retry the failed request.
   * Use it to retry requests after 2FA.
   */
  retryRequest () {
    let config = this.originalError.config
    return this._axios(config)
  }
}

/**
 * Generic Not Found(404) error.
 */
export class NotFoundError extends ServerErrorBase {}

/**
 * Generic Bad Gateway(502) error.
 */
export class BadGatewayError extends ServerErrorBase {}

/**
 * Generic Service Unavailable(503) error.
 */
export class ServiceUnavailableError extends ServerErrorBase {}

/**
 * Generic Gateway Timeout(504) error.
 */
export class GatewayTimeoutError extends ServerErrorBase {}