gbox-errors
Version:
Error handlers
85 lines (63 loc) • 2.93 kB
JavaScript
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;
};