react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / hawk / node_modules / boom / lib / index.js
81155 views// Load modules12var Http = require('http');3var Hoek = require('hoek');456// Declare internals78var internals = {};91011exports.wrap = function (error, statusCode, message) {1213Hoek.assert(error instanceof Error, 'Cannot wrap non-Error object');14return (error.isBoom ? error : internals.initialize(error, statusCode || 500, message));15};161718exports.create = function (statusCode, message, data) {1920var error = new Error(message ? message : undefined); // Avoids settings null message21error.data = data || null;22internals.initialize(error, statusCode);23return error;24};252627internals.initialize = function (error, statusCode, message) {2829var numberCode = parseInt(statusCode, 10);30Hoek.assert(!isNaN(numberCode) && numberCode >= 400, 'First argument must be a number (400+):', statusCode);3132error.isBoom = true;33error.isServer = numberCode >= 500;3435if (!error.hasOwnProperty('data')) {36error.data = null;37}3839error.output = {40statusCode: numberCode,41payload: {},42headers: {}43};4445error.reformat = internals.reformat;46error.reformat();4748if (!message &&49!error.message) {5051message = error.output.payload.error;52}5354if (message) {55error.message = (message + (error.message ? ': ' + error.message : ''));56}5758return error;59};606162internals.reformat = function () {6364this.output.payload.statusCode = this.output.statusCode;65this.output.payload.error = Http.STATUS_CODES[this.output.statusCode] || 'Unknown';6667if (this.output.statusCode === 500) {68this.output.payload.message = 'An internal server error occurred'; // Hide actual error from user69}70else if (this.message) {71this.output.payload.message = this.message;72}73};747576// 4xx Client Errors7778exports.badRequest = function (message, data) {7980return exports.create(400, message, data);81};828384exports.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[])8586var err = exports.create(401, message);8788if (!scheme) {89return err;90}9192var wwwAuthenticate = '';93var i = 0;94var il = 0;9596if (typeof scheme === 'string') {9798// function (message, scheme, attributes)99100wwwAuthenticate = scheme;101if (attributes) {102var names = Object.keys(attributes);103for (i = 0, il = names.length; i < il; ++i) {104if (i) {105wwwAuthenticate += ',';106}107108var value = attributes[names[i]];109if (value === null ||110value === undefined) { // Value can be zero111112value = '';113}114wwwAuthenticate += ' ' + names[i] + '="' + Hoek.escapeHeaderAttribute(value.toString()) + '"';115}116}117118if (message) {119if (attributes) {120wwwAuthenticate += ',';121}122wwwAuthenticate += ' error="' + Hoek.escapeHeaderAttribute(message) + '"';123}124else {125err.isMissing = true;126}127}128else {129130// function (message, wwwAuthenticate[])131132var wwwArray = scheme;133for (i = 0, il = wwwArray.length; i < il; ++i) {134if (i) {135wwwAuthenticate += ', ';136}137138wwwAuthenticate += wwwArray[i];139}140}141142err.output.headers['WWW-Authenticate'] = wwwAuthenticate;143144return err;145};146147148exports.forbidden = function (message, data) {149150return exports.create(403, message, data);151};152153154exports.notFound = function (message, data) {155156return exports.create(404, message, data);157};158159160exports.methodNotAllowed = function (message, data) {161162return exports.create(405, message, data);163};164165166exports.notAcceptable = function (message, data) {167168return exports.create(406, message, data);169};170171172exports.proxyAuthRequired = function (message, data) {173174return exports.create(407, message, data);175};176177178exports.clientTimeout = function (message, data) {179180return exports.create(408, message, data);181};182183184exports.conflict = function (message, data) {185186return exports.create(409, message, data);187};188189190exports.resourceGone = function (message, data) {191192return exports.create(410, message, data);193};194195196exports.lengthRequired = function (message, data) {197198return exports.create(411, message, data);199};200201202exports.preconditionFailed = function (message, data) {203204return exports.create(412, message, data);205};206207208exports.entityTooLarge = function (message, data) {209210return exports.create(413, message, data);211};212213214exports.uriTooLong = function (message, data) {215216return exports.create(414, message, data);217};218219220exports.unsupportedMediaType = function (message, data) {221222return exports.create(415, message, data);223};224225226exports.rangeNotSatisfiable = function (message, data) {227228return exports.create(416, message, data);229};230231232exports.expectationFailed = function (message, data) {233234return exports.create(417, message, data);235};236237exports.badData = function (message, data) {238239return exports.create(422, message, data);240};241242243exports.tooManyRequests = function (message, data) {244245return exports.create(429, message, data);246};247248249// 5xx Server Errors250251exports.internal = function (message, data, statusCode) {252253var error = (data instanceof Error ? exports.wrap(data, statusCode, message) : exports.create(statusCode || 500, message));254255if (data instanceof Error === false) {256error.data = data;257}258259return error;260};261262263exports.notImplemented = function (message, data) {264265return exports.internal(message, data, 501);266};267268269exports.badGateway = function (message, data) {270271return exports.internal(message, data, 502);272};273274275exports.serverTimeout = function (message, data) {276277return exports.internal(message, data, 503);278};279280281exports.gatewayTimeout = function (message, data) {282283return exports.internal(message, data, 504);284};285286287exports.badImplementation = function (message, data) {288289var err = exports.internal(message, data, 500);290err.isDeveloperError = true;291return err;292};293294295