OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-booking / node_modules / bare-ws / lib / errors.js

165 lines · javascript ref:
const { status } = require('./constants')

module.exports = class WebSocketError extends Error {
  constructor(msg, code, status, fn = WebSocketError, cause) {
    super(`${code}: ${msg}`, { cause })
    this.code = code
    this.status = status

    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, fn)
    }
  }

  get name() {
    return 'WebSocketError'
  }

  static NETWORK_ERROR(msg, cause) {
    return new WebSocketError(msg, 'NETWORK_ERROR', 0, WebSocketError.NETWORK_ERROR, cause)
  }

  static NOT_CONNECTED(msg = 'Socket is not connected') {
    return new WebSocketError(msg, 'NOT_CONNECTED', 0, WebSocketError.NOT_CONNECTED)
  }

  static UNEXPECTED_RSV1(msg = 'RSV1 must be unset') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_RSV1',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_RSV1
    )
  }

  static UNEXPECTED_RSV2(msg = 'RSV2 must be unset') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_RSV2',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_RSV2
    )
  }

  static UNEXPECTED_RSV3(msg = 'RSV3 must be unset') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_RSV3',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_RSV3
    )
  }

  static EXPECTED_MASK(msg = 'MASK must be set') {
    return new WebSocketError(
      msg,
      'EXPECTED_MASK',
      status.PROTOCOL_ERROR,
      WebSocketError.EXPECTED_MASK
    )
  }

  static UNEXPECTED_MASK(msg = 'MASK must be unset') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_MASK',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_MASK
    )
  }

  static EXPECTED_CONTINUATION(msg = 'Expected a continuation frame') {
    return new WebSocketError(
      msg,
      'EXPECTED_CONTINUATION',
      status.PROTOCOL_ERROR,
      WebSocketError.EXPECTED_CONTINUATION
    )
  }

  static UNEXPECTED_CONTINUATION(msg = 'Unexpected continuation frame') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_CONTINUATION',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_CONTINUATION
    )
  }

  static UNEXPECTED_CONTROL(msg = 'Unexpected control frame') {
    return new WebSocketError(
      msg,
      'UNEXPECTED_CONTROL',
      status.PROTOCOL_ERROR,
      WebSocketError.UNEXPECTED_CONTROL
    )
  }

  static INVALID_ENCODING(msg = 'Invalid encoding') {
    return new WebSocketError(
      msg,
      'INVALID_ENCODING',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_ENCODING
    )
  }

  static INVALID_UPGRADE_HEADER(msg = 'Invalid Upgrade header') {
    return new WebSocketError(
      msg,
      'INVALID_UPGRADE_HEADER',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_UPGRADE_HEADER
    )
  }

  static INVALID_VERSION_HEADER(msg = 'Invalid Sec-WebSocket-Version header') {
    return new WebSocketError(
      msg,
      'INVALID_VERSION_HEADER',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_VERSION_HEADER
    )
  }

  static INVALID_KEY_HEADER(msg = 'Invalid Sec-WebSocket-Key header') {
    return new WebSocketError(
      msg,
      'INVALID_KEY_HEADER',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_KEY_HEADER
    )
  }

  static INVALID_ACCEPT_HEADER(msg = 'Invalid Sec-WebSocket-Accept header') {
    return new WebSocketError(
      msg,
      'INVALID_ACCEPT_HEADER',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_ACCEPT_HEADER
    )
  }

  static INVALID_OPCODE(msg = 'Invalid opcode') {
    return new WebSocketError(
      msg,
      'INVALID_OPCODE',
      status.PROTOCOL_ERROR,
      WebSocketError.INVALID_OPCODE
    )
  }

  static INVALID_PAYLOAD_LENGTH(msg = 'Invalid payload length') {
    return new WebSocketError(
      msg,
      'INVALID_PAYLOAD_LENGTH',
      status.MESSAGE_TOO_LARGE,
      WebSocketError.INVALID_PAYLOAD_LENGTH
    )
  }

  static INCOMPLETE_FRAME(msg = 'Incomplete frame', length = -1) {
    return new WebSocketError(msg, 'INCOMPLETE_FRAME', length, WebSocketError.INCOMPLETE_FRAME)
  }
}