UNPKG

nestjs-auditlog

Version:

A powerful package for auditlog using opentelemetry in NestJS applications

86 lines 8.69 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuditLogInterceptor = void 0; const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const request_ip_1 = require("request-ip"); const operators_1 = require("rxjs/operators"); const audit_log_service_1 = require("./audit-log.service"); const constant_1 = require("./constant"); const decorators_1 = require("./decorators"); let AuditLogInterceptor = class AuditLogInterceptor { constructor(_reflector, auditLogService) { this._reflector = _reflector; this.auditLogService = auditLogService; } deepValue(obj, path) { return path .split('.') .reduce((acc, key) => (acc && key in acc ? acc[key] : undefined), obj); } getFieldMap({ request, response }, fieldId) { return this.deepValue(fieldId.startsWith(constant_1.RESPONSE_KEYWORD) ? response : request, fieldId.startsWith(constant_1.RESPONSE_KEYWORD) ? fieldId.substring(constant_1.RESPONSE_KEYWORD.length) : fieldId); } async sendAuditLog(options, request, response, status) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; const ip = (0, request_ip_1.getClientIp)(request); const auditLog = { resource: { id: (_d = (_b = (_a = options.resource) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : this.getFieldMap({ request, response }, (_c = options.resource_id_field_map) !== null && _c !== void 0 ? _c : constant_1.DEFAULT_RESOURCE_ID_FIELD_MAP)) !== null && _d !== void 0 ? _d : constant_1.DEFAULT_UNKNOWN_VALUE, type: (_f = (_e = options.resource) === null || _e === void 0 ? void 0 : _e.type) !== null && _f !== void 0 ? _f : constant_1.DEFAULT_UNKNOWN_VALUE, }, operation: { id: (_g = options.operation.id) !== null && _g !== void 0 ? _g : constant_1.DEFAULT_UNKNOWN_VALUE, type: (_h = options.operation.type) !== null && _h !== void 0 ? _h : constant_1.DEFAULT_UNKNOWN_VALUE, status, }, actor: { id: (_k = this.getFieldMap({ request, response }, (_j = options.actor_id_field_map) !== null && _j !== void 0 ? _j : constant_1.DEFAULT_ACTOR_ID_FIELD_MAP)) !== null && _k !== void 0 ? _k : constant_1.DEFAULT_UNKNOWN_VALUE, type: (_m = this.getFieldMap({ request, response }, (_l = options.actor_type_field_map) !== null && _l !== void 0 ? _l : constant_1.DEFAULT_ACTOR_TYPE_FIELD_MAP)) !== null && _m !== void 0 ? _m : constant_1.DEFAULT_UNKNOWN_VALUE, ip, agent: request.headers[constant_1.REQUEST_HEADER_USER_AGENT], }, }; if (request[decorators_1.AUDIT_LOG_DATA_DIFF_KEY]) { auditLog.data_diff = request[decorators_1.AUDIT_LOG_DATA_DIFF_KEY]; } await this.auditLogService.sendAuditLog(auditLog); } intercept(context, next) { const options = this._reflector.get(constant_1.META_AUDIT_LOG, context.getHandler()); if (options) { options.operation = Object.assign({ id: context.getHandler().name }, options.operation); } const request = context.switchToHttp().getRequest(); return next.handle().pipe((0, operators_1.tap)({ next: async (response) => { if (options) { await this.sendAuditLog(options, request, response, constant_1.OperationStatus.SUCCEEDED); } }, error: async (err) => { if (options) { await this.sendAuditLog(options, request, err.response, constant_1.OperationStatus.FAILED); } }, })); } }; /* istanbul ignore next */ AuditLogInterceptor = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [core_1.Reflector, audit_log_service_1.AuditLogService]) ], AuditLogInterceptor); exports.AuditLogInterceptor = AuditLogInterceptor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbG9nLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGVzL2F1ZGl0LWxvZy9hdWRpdC1sb2cuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkNBS3dCO0FBQ3hCLHVDQUF5QztBQUN6QywyQ0FBeUM7QUFFekMsOENBQXFDO0FBR3JDLDJEQUFzRDtBQUN0RCx5Q0FTb0I7QUFDcEIsNkNBQXVEO0FBSXZELElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBQzlCLFlBQ21CLFVBQXFCLEVBQ3JCLGVBQWdDO1FBRGhDLGVBQVUsR0FBVixVQUFVLENBQVc7UUFDckIsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ2hELENBQUM7SUFFSSxTQUFTLENBQUMsR0FBd0IsRUFBRSxJQUFZO1FBQ3RELE9BQU8sSUFBSTthQUNSLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBZTtRQUN4RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQ25CLE9BQU8sQ0FBQyxVQUFVLENBQUMsMkJBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQ3pELE9BQU8sQ0FBQyxVQUFVLENBQUMsMkJBQWdCLENBQUM7WUFDbEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsMkJBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzVDLENB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