1.4.0 • Published 1 year ago

@uphold/http-errors v1.4.0

Weekly downloads
142
License
MIT
Repository
-
Last release
1 year ago

http-errors

This module provides a set of errors based on standard-http-error, reducing the boilerplate of adding error classes for the most common HTTP errors.

Setup

Install @uphold/http-errors with yarn:

$ yarn add @uphold/http-errors

Alternatively, with npm:

$ npm i @uphold/http-errors

Errors

The HttpError serves as base error since all other errors extend it, use it to handle errors provided from this library.

const { BadRequestError, HttpError } = require('@uphold/http-errors');

try {
  throw new BadRequestError();
} catch (e) {
  console.log(e instanceof HttpError);
  // true
}

Below is the list of all available errors:

NameCodeDefault message
AssertionFailedError500Internal Server Error
BadRequestError400Bad Request
ConflictError409Conflict
ForbiddenError403Forbidden
GoneError410Gone
NotFoundError404Not Found
ServiceUnavailableError503Service Unavailable
TooManyRequestsError429Too Many Requests
UnauthorizedError401Unauthorized
ValidationFailedError400Validation Failed

Usage

Import and throw an HTTP error:

const { ForbiddenError, UnauthorizedError } = require('@uphold/http-errors');

function authorize(user, permission) {
  if (!user.role) {
    throw new UnauthorizedError('User needs to authenticate');
  }

  if (permission === 'admin' && user.role !== 'admin') {
    throw new ForbiddenError('Only admins allowed', { role: 'admin' })
  }

  return true;
}

All errors accept a message and a set of properties as arguments, or both:

const { BadRequestError } = require('@uphold/http-errors');

try {
  throw new BadRequestError();
} catch (e) {
  console.log(e);
  // { BadRequestError: Bad Request
  //   at ...
  //   message: 'Bad Request', name: 'BadRequestError', code: 400 }
}

try {
  throw new BadRequestError('foo');
} catch (e) {
  // { BadRequestError: Bad Request
  //   at ...
  //   message: 'foo', name: 'BadRequestError', code: 400 }
}

try {
  throw new BadRequestError({ foo: 'bar' });
} catch (e) {
  console.log(e);
  // { BadRequestError: Bad Request
  //   at ...
  //   message: 'Bad Request', foo: 'bar', name: 'BadRequestError', code: 400 }
}

try {
  throw new BadRequestError('foo', { bar: 'biz' });
} catch (e) {
  console.log(e);
  // { BadRequestError: Bad Request
  //   at ...
  //   message: 'foo', bar: 'biz', name: 'BadRequestError', code: 400 }
}

Test suite

Use the test script to run the test suite:

$ yarn test

To test and check coverage use the cover script:

$ yarn cover

A full coverage report will be generated on test/coverage folder.

Contributing

Please create a PR with a description of the changes, its motivation and impacted areas, making sure the build passes.

Release

$ yarn release [<version> | major | minor | patch]

License

MIT