ts-logs
Version:
This package provide a skd for audit and manager logs in nodejs and express
53 lines • 2.76 kB
JavaScript
"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