UNPKG

ts-logs

Version:

This package provide a skd for audit and manager logs in nodejs and express

53 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stackLog = void 0; const get_log_data_from_request_util_1 = require("../utils/get-log-data-from-request.util"); const get_step_data_from_request_util_1 = require("../utils/get-step-data-from-request.util"); const encrypt_string_util_1 = require("../utils/encrypt-string.util"); const delete_object_key_util_1 = require("../utils/delete-object-key.util"); const step_1 = require("./step"); const log_1 = require("./log"); /** * @description Create a middleware to handle stack error on express * @param options Object as MiddlewareOptions * @returns Middleware */ const stackLog = (options) => { const { print, remove: keysToRemoveFromBody = [], callback, writeLocal, encrypt, sendAsResponse = true, encryptOption, ...opt } = options; const publish = !!opt?.publish; if (sendAsResponse && callback) throw new Error('[stackLog]: could not sendAsResponse and callback'); if (!sendAsResponse && !callback && !print && !writeLocal && !publish) throw new Error('[stackLog]: invalid options'); return async (err, req, res, next) => { const { name, uid, ip, origin } = (0, get_log_data_from_request_util_1.default)(req); const log = req?.log ?? log_1.default.init({ name, uid, ip, origin }); const { message, method, stack, statusCode, tags, ...param } = (0, get_step_data_from_request_util_1.default)(err, req); const body = (0, delete_object_key_util_1.default)(param.body, keysToRemoveFromBody); const maybeMasked = Array.isArray(opt?.mask) ? step_1.default.create({ data: body }).mask(opt.mask).data : body; const encrypted = await (0, encrypt_string_util_1.default)({ data: param.data, encryptOption, encrypt }); const data = encrypt ? encrypted : maybeMasked; const stepId = param.uid; const props = { message, stack, statusCode, data, url: origin, method, name, uid: stepId }; const step = step_1.default.stack(props).addTags(tags.slice(0, 5)); log.addStep(step); if (print) log.print(); if (writeLocal) await log.writeLocal(); if (opt.publish && !opt.provider) { throw new Error('[stackLog]: could not publish log missing provider settings'); } if (opt.publish && opt.provider) { await log.publish(opt.provider); } if (sendAsResponse) return res.status(statusCode).json(log); if (callback && typeof callback === 'function') return callback(err, req, res, next, log); return next(); }; }; exports.stackLog = stackLog; exports.default = exports.stackLog; //# sourceMappingURL=stack-log.builder.js.map