@uphold/http-errors
v2.0.2
Published
Set of errors based on standard-http-error
Readme
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.
Status
Setup
Install @uphold/http-errors with yarn:
yarn add @uphold/http-errorsAlternatively, with npm:
npm i @uphold/http-errorsErrors
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:
| Name | Code | Default message | | :---------------------- | :--- | :-------------------- | | AssertionFailedError | 500 | Internal Server Error | | BadRequestError | 400 | Bad Request | | ConflictError | 409 | Conflict | | ForbiddenError | 403 | Forbidden | | GoneError | 410 | Gone | | NotFoundError | 404 | Not Found | | NotImplementedError | 501 | Not Implemented | | ServiceUnavailableError | 503 | Service Unavailable | | TooManyRequestsError | 429 | Too Many Requests | | UnauthorizedError | 401 | Unauthorized | | ValidationFailedError | 400 | Validation 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 testTo run the tests on watch mode, use the test:watch script:
yarn test:watchTo test and check coverage use the test:coverage script:
yarn test:coverageA full coverage report will be generated on /coverage folder.
Contributing
Please create a PR with a description of the changes, its motivation and impacted areas, making sure the build passes.
Release process
The release of a version is automated via the release GitHub workflow. Run it by clicking the "Run workflow" button.
License
MIT
