UNPKG

gbox-errors

Version:

Error handlers

85 lines (63 loc) 2.93 kB
let construct = require("./Errors/errorConstruct"); let errorType = require("./Errors/errorType"); let options = require("./Errors/customErrorOptions"); const Sentry = require('@sentry/node'); module.exports = function (error) { let errType, customError, config = this.config || {}; errType = errorType.validate(error); // initialize sentry if (config.sentry) { config.sentry.configuration.environment = config.environment; // set app environment Sentry.init(config.sentry.configuration); } // set additional sentry log options // TODO: consider making sentry validation function for detailed validation of sentry options if (config.sentry) { Sentry.configureScope((scope) => { if (config.sentry.hasOwnProperty('user') && config.sentry.user) scope.setUser(config.sentry.user); if (config.sentry.hasOwnProperty('level') && config.sentry.level) scope.setLevel(config.sentry.level); if (config.sentry.hasOwnProperty('tags') && config.sentry.tags) { for (let key in config.sentry.tags) { if (config.sentry.tags.hasOwnProperty(key)) scope.setTag(key, config.sentry.tags[key]); } } if (config.sentry.hasOwnProperty('extra') && config.sentry.extra) { for (let key in config.sentry.extra) { if (config.sentry.extra.hasOwnProperty(key)) scope.setExtra(key, config.sentry.extra[key]); } } if (config.sentry.hasOwnProperty('breadcrumb') && config.sentry.breadcrumb) Sentry.addBreadcrumb(config.sentry.breadcrumb); }); } if (errType === 'gbox') { return { response: error.raw, status: error.raw.error.statusCode }; } customError = construct(errType, error); let payloadObject = { response: { data: [], message: customError.output.payload.message }, status: customError.output.statusCode }; // Format output error for gaussbox needs customError.output.details = options.generate(customError, config.packageJson); customError.output.validator = errType; customError.output.code = customError.code; customError.output.enviroment = config.environment || "Environment not available"; customError.output.serverTime = new Date().toLocaleString(); delete customError.output.headers; if (error instanceof Error) { customError.output.development = error.stack; } payloadObject.response.error = customError.output; options.sendEmail(payloadObject, config.emailConfig); if (config.sentry && payloadObject.status >= 500) Sentry.captureException(payloadObject); if (config.environment && config.environment === 'production') { delete payloadObject.response.error; } return payloadObject; };