Socket
Socket
Sign inDemoInstall

boom

Package Overview
Dependencies
Maintainers
5
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

boom - npm Package Compare versions

Comparing version 6.0.0 to 7.1.1

583

lib/index.js

@@ -11,402 +11,411 @@ 'use strict';

const internals = {
STATUS_CODES: Object.setPrototypeOf({
'100': 'Continue',
'101': 'Switching Protocols',
'102': 'Processing',
'200': 'OK',
'201': 'Created',
'202': 'Accepted',
'203': 'Non-Authoritative Information',
'204': 'No Content',
'205': 'Reset Content',
'206': 'Partial Content',
'207': 'Multi-Status',
'300': 'Multiple Choices',
'301': 'Moved Permanently',
'302': 'Moved Temporarily',
'303': 'See Other',
'304': 'Not Modified',
'305': 'Use Proxy',
'307': 'Temporary Redirect',
'400': 'Bad Request',
'401': 'Unauthorized',
'402': 'Payment Required',
'403': 'Forbidden',
'404': 'Not Found',
'405': 'Method Not Allowed',
'406': 'Not Acceptable',
'407': 'Proxy Authentication Required',
'408': 'Request Time-out',
'409': 'Conflict',
'410': 'Gone',
'411': 'Length Required',
'412': 'Precondition Failed',
'413': 'Request Entity Too Large',
'414': 'Request-URI Too Large',
'415': 'Unsupported Media Type',
'416': 'Requested Range Not Satisfiable',
'417': 'Expectation Failed',
'418': 'I\'m a teapot',
'422': 'Unprocessable Entity',
'423': 'Locked',
'424': 'Failed Dependency',
'425': 'Unordered Collection',
'426': 'Upgrade Required',
'428': 'Precondition Required',
'429': 'Too Many Requests',
'431': 'Request Header Fields Too Large',
'451': 'Unavailable For Legal Reasons',
'500': 'Internal Server Error',
'501': 'Not Implemented',
'502': 'Bad Gateway',
'503': 'Service Unavailable',
'504': 'Gateway Time-out',
'505': 'HTTP Version Not Supported',
'506': 'Variant Also Negotiates',
'507': 'Insufficient Storage',
'509': 'Bandwidth Limit Exceeded',
'510': 'Not Extended',
'511': 'Network Authentication Required'
}, null)
codes: new Map([
[100, 'Continue'],
[101, 'Switching Protocols'],
[102, 'Processing'],
[200, 'OK'],
[201, 'Created'],
[202, 'Accepted'],
[203, 'Non-Authoritative Information'],
[204, 'No Content'],
[205, 'Reset Content'],
[206, 'Partial Content'],
[207, 'Multi-Status'],
[300, 'Multiple Choices'],
[301, 'Moved Permanently'],
[302, 'Moved Temporarily'],
[303, 'See Other'],
[304, 'Not Modified'],
[305, 'Use Proxy'],
[307, 'Temporary Redirect'],
[400, 'Bad Request'],
[401, 'Unauthorized'],
[402, 'Payment Required'],
[403, 'Forbidden'],
[404, 'Not Found'],
[405, 'Method Not Allowed'],
[406, 'Not Acceptable'],
[407, 'Proxy Authentication Required'],
[408, 'Request Time-out'],
[409, 'Conflict'],
[410, 'Gone'],
[411, 'Length Required'],
[412, 'Precondition Failed'],
[413, 'Request Entity Too Large'],
[414, 'Request-URI Too Large'],
[415, 'Unsupported Media Type'],
[416, 'Requested Range Not Satisfiable'],
[417, 'Expectation Failed'],
[418, 'I\'m a teapot'],
[422, 'Unprocessable Entity'],
[423, 'Locked'],
[424, 'Failed Dependency'],
[425, 'Unordered Collection'],
[426, 'Upgrade Required'],
[428, 'Precondition Required'],
[429, 'Too Many Requests'],
[431, 'Request Header Fields Too Large'],
[451, 'Unavailable For Legal Reasons'],
[500, 'Internal Server Error'],
[501, 'Not Implemented'],
[502, 'Bad Gateway'],
[503, 'Service Unavailable'],
[504, 'Gateway Time-out'],
[505, 'HTTP Version Not Supported'],
[506, 'Variant Also Negotiates'],
[507, 'Insufficient Storage'],
[509, 'Bandwidth Limit Exceeded'],
[510, 'Not Extended'],
[511, 'Network Authentication Required']
])
};
exports.boomify = function (error, options) {
module.exports = internals.Boom = class extends Error {
Hoek.assert(error instanceof Error, 'Cannot wrap non-Error object');
static [Symbol.hasInstance](instance) {
options = options || {};
if (!error.isBoom) {
return internals.initialize(error, options.statusCode || 500, options.message);
return internals.Boom.isBoom(instance);
}
if (options.override === false || // Defaults to true
(!options.statusCode && !options.message)) {
constructor(message, options = {}) {
return error;
}
if (message instanceof Error) {
return internals.Boom.boomify(Hoek.clone(message), options);
}
return internals.initialize(error, options.statusCode || error.output.statusCode, options.message);
};
const { statusCode = 500, data = null, ctor = internals.Boom } = options;
const error = new Error(message ? message : undefined); // Avoids settings null message
Error.captureStackTrace(error, ctor); // Filter the stack to our external API
error.data = data;
internals.initialize(error, statusCode);
error.typeof = ctor;
exports.wrap = function (error, statusCode, message) {
Hoek.assert(error instanceof Error, 'Cannot wrap non-Error object');
Hoek.assert(!error.isBoom || (!statusCode && !message), 'Cannot provide statusCode or message with boom error');
return (error.isBoom ? error : internals.initialize(error, statusCode || 500, message));
};
exports.create = function (statusCode, message, data) {
return internals.create(statusCode, message, data, exports.create);
};
internals.create = function (statusCode, message, data, ctor) {
if (message instanceof Error) {
if (data) {
message.data = data;
if (options.decorate) {
Object.assign(error, options.decorate);
}
return exports.wrap(message, statusCode);
return error;
}
const error = new Error(message ? message : undefined); // Avoids settings null message
Error.captureStackTrace(error, ctor); // Filter the stack to our external API
error.data = data || null;
internals.initialize(error, statusCode);
error.typeof = ctor;
static isBoom(err) {
return error;
};
return (err instanceof Error && !!err.isBoom);
}
static boomify(err, options) {
internals.initialize = function (error, statusCode, message) {
Hoek.assert(err instanceof Error, 'Cannot wrap non-Error object');
const numberCode = parseInt(statusCode, 10);
Hoek.assert(!isNaN(numberCode) && numberCode >= 400, 'First argument must be a number (400+):', statusCode);
options = options || {};
error.isBoom = true;
error.isServer = numberCode >= 500;
if (options.data !== undefined) {
err.data = options.data;
}
if (!error.hasOwnProperty('data')) {
error.data = null;
}
if (options.decorate) {
Object.assign(err, options.decorate);
}
error.output = {
statusCode: numberCode,
payload: {},
headers: {}
};
if (!err.isBoom) {
return internals.initialize(err, options.statusCode || 500, options.message);
}
error.reformat = internals.reformat;
if (options.override === false || // Defaults to true
(!options.statusCode && !options.message)) {
if (!message &&
!error.message) {
return err;
}
error.reformat();
message = error.output.payload.error;
return internals.initialize(err, options.statusCode || err.output.statusCode, options.message);
}
if (message) {
error.message = (message + (error.message ? ': ' + error.message : ''));
error.output.payload.message = error.message;
}
// 4xx Client Errors
error.reformat();
return error;
};
static badRequest(message, data) {
internals.reformat = function () {
this.output.payload.statusCode = this.output.statusCode;
this.output.payload.error = internals.STATUS_CODES[this.output.statusCode] || 'Unknown';
if (this.output.statusCode === 500) {
this.output.payload.message = 'An internal server error occurred'; // Hide actual error from user
return new internals.Boom(message, { statusCode: 400, data, ctor: internals.Boom.badRequest });
}
else if (this.message) {
this.output.payload.message = this.message;
}
};
static unauthorized(message, scheme, attributes) { // Or function (message, wwwAuthenticate[])
// 4xx Client Errors
const err = new internals.Boom(message, { statusCode: 401, ctor: internals.Boom.unauthorized });
exports.badRequest = function (message, data) {
if (!scheme) {
return err;
}
return internals.create(400, message, data, exports.badRequest);
};
let wwwAuthenticate = '';
if (typeof scheme === 'string') {
exports.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[])
// function (message, scheme, attributes)
const err = internals.create(401, message, undefined, exports.unauthorized);
wwwAuthenticate = scheme;
if (!scheme) {
return err;
}
if (attributes || message) {
err.output.payload.attributes = {};
}
let wwwAuthenticate = '';
if (attributes) {
if (typeof attributes === 'string') {
wwwAuthenticate = wwwAuthenticate + ' ' + Hoek.escapeHeaderAttribute(attributes);
err.output.payload.attributes = attributes;
}
else {
const names = Object.keys(attributes);
for (let i = 0; i < names.length; ++i) {
const name = names[i];
if (i) {
wwwAuthenticate = wwwAuthenticate + ',';
}
if (typeof scheme === 'string') {
let value = attributes[name];
if (value === null ||
value === undefined) { // Value can be zero
// function (message, scheme, attributes)
value = '';
}
wwwAuthenticate = wwwAuthenticate + ' ' + name + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"';
err.output.payload.attributes[name] = value;
}
}
}
wwwAuthenticate = scheme;
if (attributes || message) {
err.output.payload.attributes = {};
}
if (attributes) {
if (typeof attributes === 'string') {
wwwAuthenticate = wwwAuthenticate + ' ' + Hoek.escapeHeaderAttribute(attributes);
err.output.payload.attributes = attributes;
if (message) {
if (attributes) {
wwwAuthenticate = wwwAuthenticate + ',';
}
wwwAuthenticate = wwwAuthenticate + ' error="' + Hoek.escapeHeaderAttribute(message) + '"';
err.output.payload.attributes.error = message;
}
else {
const names = Object.keys(attributes);
for (let i = 0; i < names.length; ++i) {
const name = names[i];
if (i) {
wwwAuthenticate = wwwAuthenticate + ',';
}
err.isMissing = true;
}
}
else {
let value = attributes[name];
if (value === null ||
value === undefined) { // Value can be zero
// function (message, wwwAuthenticate[])
value = '';
}
wwwAuthenticate = wwwAuthenticate + ' ' + name + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"';
err.output.payload.attributes[name] = value;
const wwwArray = scheme;
for (let i = 0; i < wwwArray.length; ++i) {
if (i) {
wwwAuthenticate = wwwAuthenticate + ', ';
}
wwwAuthenticate = wwwAuthenticate + wwwArray[i];
}
}
err.output.headers['WWW-Authenticate'] = wwwAuthenticate;
if (message) {
if (attributes) {
wwwAuthenticate = wwwAuthenticate + ',';
}
wwwAuthenticate = wwwAuthenticate + ' error="' + Hoek.escapeHeaderAttribute(message) + '"';
err.output.payload.attributes.error = message;
}
else {
err.isMissing = true;
}
return err;
}
else {
// function (message, wwwAuthenticate[])
static paymentRequired(message, data) {
const wwwArray = scheme;
for (let i = 0; i < wwwArray.length; ++i) {
if (i) {
wwwAuthenticate = wwwAuthenticate + ', ';
}
wwwAuthenticate = wwwAuthenticate + wwwArray[i];
}
return new internals.Boom(message, { statusCode: 402, data, ctor: internals.Boom.paymentRequired });
}
err.output.headers['WWW-Authenticate'] = wwwAuthenticate;
static forbidden(message, data) {
return err;
};
return new internals.Boom(message, { statusCode: 403, data, ctor: internals.Boom.forbidden });
}
static notFound(message, data) {
exports.paymentRequired = function (message, data) {
return new internals.Boom(message, { statusCode: 404, data, ctor: internals.Boom.notFound });
}
return internals.create(402, message, data, exports.paymentRequired);
};
static methodNotAllowed(message, data, allow) {
const err = new internals.Boom(message, { statusCode: 405, data, ctor: internals.Boom.methodNotAllowed });
exports.forbidden = function (message, data) {
if (typeof allow === 'string') {
allow = [allow];
}
return internals.create(403, message, data, exports.forbidden);
};
if (Array.isArray(allow)) {
err.output.headers.Allow = allow.join(', ');
}
return err;
}
exports.notFound = function (message, data) {
static notAcceptable(message, data) {
return internals.create(404, message, data, exports.notFound);
};
return new internals.Boom(message, { statusCode: 406, data, ctor: internals.Boom.notAcceptable });
}
static proxyAuthRequired(message, data) {
exports.methodNotAllowed = function (message, data, allow) {
return new internals.Boom(message, { statusCode: 407, data, ctor: internals.Boom.proxyAuthRequired });
}
const err = internals.create(405, message, data, exports.methodNotAllowed);
static clientTimeout(message, data) {
if (typeof allow === 'string') {
allow = [allow];
return new internals.Boom(message, { statusCode: 408, data, ctor: internals.Boom.clientTimeout });
}
if (Array.isArray(allow)) {
err.output.headers.Allow = allow.join(', ');
static conflict(message, data) {
return new internals.Boom(message, { statusCode: 409, data, ctor: internals.Boom.conflict });
}
return err;
};
static resourceGone(message, data) {
return new internals.Boom(message, { statusCode: 410, data, ctor: internals.Boom.resourceGone });
}
exports.notAcceptable = function (message, data) {
static lengthRequired(message, data) {
return internals.create(406, message, data, exports.notAcceptable);
};
return new internals.Boom(message, { statusCode: 411, data, ctor: internals.Boom.lengthRequired });
}
static preconditionFailed(message, data) {
exports.proxyAuthRequired = function (message, data) {
return new internals.Boom(message, { statusCode: 412, data, ctor: internals.Boom.preconditionFailed });
}
return internals.create(407, message, data, exports.proxyAuthRequired);
};
static entityTooLarge(message, data) {
return new internals.Boom(message, { statusCode: 413, data, ctor: internals.Boom.entityTooLarge });
}
exports.clientTimeout = function (message, data) {
static uriTooLong(message, data) {
return internals.create(408, message, data, exports.clientTimeout);
};
return new internals.Boom(message, { statusCode: 414, data, ctor: internals.Boom.uriTooLong });
}
static unsupportedMediaType(message, data) {
exports.conflict = function (message, data) {
return new internals.Boom(message, { statusCode: 415, data, ctor: internals.Boom.unsupportedMediaType });
}
return internals.create(409, message, data, exports.conflict);
};
static rangeNotSatisfiable(message, data) {
return new internals.Boom(message, { statusCode: 416, data, ctor: internals.Boom.rangeNotSatisfiable });
}
exports.resourceGone = function (message, data) {
static expectationFailed(message, data) {
return internals.create(410, message, data, exports.resourceGone);
};
return new internals.Boom(message, { statusCode: 417, data, ctor: internals.Boom.expectationFailed });
}
static teapot(message, data) {
exports.lengthRequired = function (message, data) {
return new internals.Boom(message, { statusCode: 418, data, ctor: internals.Boom.teapot });
}
return internals.create(411, message, data, exports.lengthRequired);
};
static badData(message, data) {
return new internals.Boom(message, { statusCode: 422, data, ctor: internals.Boom.badData });
}
exports.preconditionFailed = function (message, data) {
static locked(message, data) {
return internals.create(412, message, data, exports.preconditionFailed);
};
return new internals.Boom(message, { statusCode: 423, data, ctor: internals.Boom.locked });
}
static preconditionRequired(message, data) {
exports.entityTooLarge = function (message, data) {
return new internals.Boom(message, { statusCode: 428, data, ctor: internals.Boom.preconditionRequired });
}
return internals.create(413, message, data, exports.entityTooLarge);
};
static tooManyRequests(message, data) {
return new internals.Boom(message, { statusCode: 429, data, ctor: internals.Boom.tooManyRequests });
}
exports.uriTooLong = function (message, data) {
static illegal(message, data) {
return internals.create(414, message, data, exports.uriTooLong);
};
return new internals.Boom(message, { statusCode: 451, data, ctor: internals.Boom.illegal });
}
// 5xx Server Errors
exports.unsupportedMediaType = function (message, data) {
static internal(message, data, statusCode = 500) {
return internals.create(415, message, data, exports.unsupportedMediaType);
};
return internals.serverError(message, data, statusCode, internals.Boom.internal);
}
static notImplemented(message, data) {
exports.rangeNotSatisfiable = function (message, data) {
return internals.serverError(message, data, 501, internals.Boom.notImplemented);
}
return internals.create(416, message, data, exports.rangeNotSatisfiable);
};
static badGateway(message, data) {
return internals.serverError(message, data, 502, internals.Boom.badGateway);
}
exports.expectationFailed = function (message, data) {
static serverUnavailable(message, data) {
return internals.create(417, message, data, exports.expectationFailed);
};
return internals.serverError(message, data, 503, internals.Boom.serverUnavailable);
}
static gatewayTimeout(message, data) {
exports.teapot = function (message, data) {
return internals.serverError(message, data, 504, internals.Boom.gatewayTimeout);
}
return internals.create(418, message, data, exports.teapot);
};
static badImplementation(message, data) {
exports.badData = function (message, data) {
return internals.create(422, message, data, exports.badData);
const err = internals.serverError(message, data, 500, internals.Boom.badImplementation);
err.isDeveloperError = true;
return err;
}
};
exports.locked = function (message, data) {
return internals.create(423, message, data, exports.locked);
};
internals.initialize = function (err, statusCode, message) {
const numberCode = parseInt(statusCode, 10);
Hoek.assert(!isNaN(numberCode) && numberCode >= 400, 'First argument must be a number (400+):', statusCode);
exports.preconditionRequired = function (message, data) {
err.isBoom = true;
err.isServer = numberCode >= 500;
return internals.create(428, message, data, exports.preconditionRequired);
};
if (!err.hasOwnProperty('data')) {
err.data = null;
}
err.output = {
statusCode: numberCode,
payload: {},
headers: {}
};
exports.tooManyRequests = function (message, data) {
err.reformat = internals.reformat;
return internals.create(429, message, data, exports.tooManyRequests);
};
if (!message &&
!err.message) {
err.reformat();
message = err.output.payload.error;
}
exports.illegal = function (message, data) {
if (message) {
err.message = (message + (err.message ? ': ' + err.message : ''));
err.output.payload.message = err.message;
}
return internals.create(451, message, data, exports.illegal);
err.reformat();
return err;
};
// 5xx Server Errors
internals.reformat = function () {
exports.internal = function (message, data, statusCode) {
this.output.payload.statusCode = this.output.statusCode;
this.output.payload.error = internals.codes.get(this.output.statusCode) || 'Unknown';
return internals.serverError(message, data, statusCode, exports.internal);
if (this.output.statusCode === 500) {
this.output.payload.message = 'An internal server error occurred'; // Hide actual error from user
}
else if (this.message) {
this.output.payload.message = this.message;
}
};

@@ -420,40 +429,6 @@

return exports.wrap(data, statusCode, message);
return internals.Boom.boomify(data, { statusCode, message });
}
const error = internals.create(statusCode || 500, message, undefined, ctor);
error.data = data;
return error;
return new internals.Boom(message, { statusCode, data, ctor });
};
exports.notImplemented = function (message, data) {
return internals.serverError(message, data, 501, exports.notImplemented);
};
exports.badGateway = function (message, data) {
return internals.serverError(message, data, 502, exports.badGateway);
};
exports.serverUnavailable = function (message, data) {
return internals.serverError(message, data, 503, exports.serverUnavailable);
};
exports.gatewayTimeout = function (message, data) {
return internals.serverError(message, data, 504, exports.gatewayTimeout);
};
exports.badImplementation = function (message, data) {
const err = internals.serverError(message, data, 500, exports.badImplementation);
err.isDeveloperError = true;
return err;
};
{
"name": "boom",
"description": "HTTP-friendly error objects",
"version": "6.0.0",
"version": "7.1.1",
"repository": "git://github.com/hapijs/boom",

@@ -12,3 +12,3 @@ "main": "lib/index.js",

"engines": {
"node": ">=8.0.0"
"node": ">=8.9.0"
},

@@ -20,3 +20,3 @@ "dependencies": {

"code": "5.x.x",
"lab": "14.x.x",
"lab": "15.x.x",
"markdown-toc": "0.12.x"

@@ -23,0 +23,0 @@ },

@@ -14,5 +14,5 @@ ![boom Logo](https://raw.github.com/hapijs/boom/master/images/boom.png)

- [Helper Methods](#helper-methods)
- [`boomify(error, [options])`](#boomifyerror-options)
- [`wrap(error, [statusCode], [message])`](#wraperror-statuscode-message)
- [`create(statusCode, [message], [data])`](#createstatuscode-message-data)
- [`new Boom(message, [options])`](#new-boommessage-options)
- [`boomify(err, [options])`](#boomifyerr-options)
- [`isBoom(err)`](#isboomerr)
- [HTTP 4xx Errors](#http-4xx-errors)

@@ -55,8 +55,10 @@ - [`Boom.badRequest([message], [data])`](#boombadrequestmessage-data)

**boom** provides a set of utilities for returning HTTP errors. Each utility returns a `Boom` error response
object (instance of `Error`) which includes the following properties:
- `isBoom` - if `true`, indicates this is a `Boom` object instance.
**boom** provides a set of utilities for returning HTTP errors. Each utility returns a `Boom`
error response object which includes the following properties:
- `isBoom` - if `true`, indicates this is a `Boom` object instance. Note that this boolean should
only be used the the error is an instance of `Error`. If it is not certain, use `Boom.isBoom()`
instead.
- `isServer` - convenience bool indicating status code >= 500.
- `message` - the error message.
- `typeof` - the contructor used to create the error (e.g. `Boom.badRequest`).
- `typeof` - the constructor used to create the error (e.g. `Boom.badRequest`).
- `output` - the formatted response. Can be directly manipulated after object construction to return a custom

@@ -77,8 +79,28 @@ error response. Allowed root keys:

Note that `Boom` object will return `true` when used with `instanceof Boom`, but do not use the
`Boom` prototype (they are either plain `Error` or the error prototype passed in). This means
`Boom` objects should only be tested using `instaceof Boom` or `Boom.isBoom()` but not by looking
at the prototype or contructor information. This limitation is to avoid manipulating the prototype
chain which is very slow.
## Helper Methods
### `boomify(error, [options])`
### `new Boom(message, [options])`
Decorates an error with the **boom** properties where:
- `error` - the `Error` object to decorate.
Creates a new `Boom` object using the provided `message` and then calling
[`boomify()`](#boomifyerr-options) to decorate the error with the `Boom` properties, where:
- `message` - the error message. If `message` is an error, it is the same as calling
[`boomify()`](#boomifyerr-options) directly.
- `options` - and optional object where:
- `statusCode` - the HTTP status code. Defaults to `500` if no status code is already set.
- `data` - additional error information (assigned to `error.data`).
- `decorate` - an option with extra properties to set on the error object.
- `cotr` - constructor reference used to crop the exception call stack output.
- if `message` is an error object, also supports the other [`boomify()`](#boomifyerr-options)
options.
### `boomify(err, [options])`
Decorates an error with the `Boom` properties where:
- `err` - the `Error` object to decorate.
- `options` - optional object with the following optional settings:

@@ -88,9 +110,7 @@ - `statusCode` - the HTTP status code. Defaults to `500` if no status code is already set.

Defaults to no message.
- `override` - if `false`, the `error` provided is a **boom** object, and a `statusCode` or `message` are provided,
- `decorate` - an option with extra properties to set on the error object.
- `override` - if `false`, the `err` provided is a `Boom` object, and a `statusCode` or `message` are provided,
the values are ignored. Defaults to `true` (apply the provided `statusCode` and `message` options to the error
regardless of its type, `Error` or **boom** object).
regardless of its type, `Error` or `Boom` object).
Note: This method replaces the [`wrap()`](#wraperror-statuscode-message) and changes the default behavior to override
existing **boom** objects with the provided status code and message.
```js

@@ -101,28 +121,6 @@ var error = new Error('Unexpected input');

### `wrap(error, [statusCode], [message])`
### `isBoom(err)`
Note: This method is deprecated.
Identifies whether an error is a `Boom` object. Same as calling `instanceof Boom`.
Decorates an error with the **boom** properties where:
- `error` - the error object to wrap. If `error` is already a **boom** object, returns back the same object.
- `statusCode` - optional HTTP status code. Defaults to `500`.
- `message` - optional message string. If the error already has a message, it adds the message as a prefix.
Defaults to no message.
```js
var error = new Error('Unexpected input');
Boom.wrap(error, 400);
```
### `create(statusCode, [message], [data])`
Generates an `Error` object with the **boom** decorations where:
- `statusCode` - an HTTP error code number. Must be greater or equal 400.
- `message` - optional message string.
- `data` - additional error data set to `error.data` property.
```js
var error = Boom.create(400, 'Bad request', { timestamp: Date.now() });
```
## HTTP 4xx Errors

@@ -164,3 +162,4 @@

If either `scheme` or `attributes` are set, the resultant `Boom` object will have the 'WWW-Authenticate' header set for the response.
If either `scheme` or `attributes` are set, the resultant `Boom` object will have the
'WWW-Authenticate' header set for the response.

@@ -167,0 +166,0 @@ ```js

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc