UNPKG

nestjs-auditlog

Version:

A powerful package for auditlog using opentelemetry in NestJS applications

417 lines 22.1 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); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TestController = void 0; const common_1 = require("@nestjs/common"); const __1 = require(".."); let TestController = class TestController { constructor() { } findTheCat(id) { return `Congratulations! You have found the cat ${id}!`; } findTheCatNoAudit(id) { return `Congratulations! You have found the cat ${id}!`; } findTheCatFailed() { throw new common_1.BadRequestException(); } findTheCatFailedNoAudit() { throw new common_1.BadRequestException(); } createTheCat(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatByParam(id) { return `Congratulations! You created the cat ${id}!`; } createTheCatDefault1(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatDefault2(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatDefault3(body) { return `Congratulations! You created the cat ${body.id}!`; } createAnotherCat(body) { return `Congratulations! You created the cat ${body.id}!`; } createCatFixedId() { return `Congratulations! You created the cat 1!`; } createCatUnknowId() { return `Congratulations! You created the cat unknown!`; } createCatWithActor(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogCreate1(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogCreate2(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogUpdate1(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogUpdate2(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogRemove1(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogRemove2(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogQuery1(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatWithAuditLogQuery2(body) { return `Congratulations! You created the cat ${body.id}!`; } createTheCatMapResponse() { return { id: '2', role: 'admin', }; } createTheCatArrayId(body) { return `Congratulations! You created the cat ${body.id.join(',')}!`; } async createTheCatWithCompareData(dataDiff) { dataDiff({ name: 'test1', }, { name: 'test2', }); return `Congratulations! You created the cat!`; } }; __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'findTheCat', type: 'Query', }, resource_id_field_map: 'query.id', }), (0, common_1.Get)(), __param(0, (0, common_1.Query)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Object) ], TestController.prototype, "findTheCat", null); __decorate([ (0, common_1.Get)('no-audit'), __param(0, (0, common_1.Query)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Object) ], TestController.prototype, "findTheCatNoAudit", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'findTheCat', type: 'Query', }, resource_id_field_map: 'query.id', }), (0, common_1.Get)('failed'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], TestController.prototype, "findTheCatFailed", null); __decorate([ (0, common_1.Get)('failed-no-audit'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], TestController.prototype, "findTheCatFailedNoAudit", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, resource_id_field_map: 'body.id', }), (0, common_1.Post)(), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCat", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, resource_id_field_map: 'params.id', }), (0, common_1.Post)('create/:id'), __param(0, (0, common_1.Param)('id')), __metadata("design:type", Function), __metadata("design:paramtypes", [String]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatByParam", null); __decorate([ (0, __1.AuditLog)(), (0, common_1.Post)('default1'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatDefault1", null); __decorate([ (0, __1.AuditLog)({ resource: {}, operation: {}, actor: {}, }), (0, common_1.Post)('default2'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatDefault2", null); __decorate([ (0, __1.AuditLog)({ resource: {}, operation: { id: null, }, actor: {}, }), (0, common_1.Post)('default3'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatDefault3", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, }), (0, common_1.Post)('another'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createAnotherCat", null); __decorate([ (0, __1.AuditLog)({ resource: { id: '1', type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, }), (0, common_1.Post)('fixed'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], TestController.prototype, "createCatFixedId", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, }), (0, common_1.Post)('unknown'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], TestController.prototype, "createCatUnknowId", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, actor_id_field_map: 'body.username', actor_type_field_map: 'body.role', }), (0, common_1.Post)('actor/actor_id_field_map'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createCatWithActor", null); __decorate([ (0, __1.AuditLogCreate)(), (0, common_1.Post)('default/create1'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogCreate1", null); __decorate([ (0, __1.AuditLogCreate)({ operation: { id: 'createTheCatWithAuditLogCreate2', }, }), (0, common_1.Post)('default/create2'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogCreate2", null); __decorate([ (0, __1.AuditLogUpdate)(), (0, common_1.Post)('default/update1'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogUpdate1", null); __decorate([ (0, __1.AuditLogUpdate)({ operation: { id: 'createTheCatWithAuditLogUpdate2', }, }), (0, common_1.Post)('default/update2'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogUpdate2", null); __decorate([ (0, __1.AuditLogRemove)(), (0, common_1.Post)('default/remove1'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogRemove1", null); __decorate([ (0, __1.AuditLogRemove)({ operation: { id: 'createTheCatWithAuditLogRemove2', }, }), (0, common_1.Post)('default/remove2'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogRemove2", null); __decorate([ (0, __1.AuditLogQuery)(), (0, common_1.Post)('default/query1'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogQuery1", null); __decorate([ (0, __1.AuditLogQuery)({ operation: { id: 'createTheCatWithAuditLogQuery2', }, }), (0, common_1.Post)('default/query2'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatWithAuditLogQuery2", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, resource_id_field_map: '$response.id', actor_id_field_map: '$response.id', actor_type_field_map: '$response.role', }), (0, common_1.Post)('map-response'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatMapResponse", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, }), (0, common_1.Post)('array-id'), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Object) ], TestController.prototype, "createTheCatArrayId", null); __decorate([ (0, __1.AuditLog)({ resource: { type: 'Cat', }, operation: { id: 'createTheCat', type: 'Create', }, actor_id_field_map: 'body.username', actor_type_field_map: 'body.role', }), (0, common_1.Get)('compare-data'), __param(0, (0, __1.AuditLogDataDiff)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Function]), __metadata("design:returntype", Promise) ], TestController.prototype, "createTheCatWithCompareData", null); TestController = __decorate([ (0, common_1.Controller)('/'), __metadata("design:paramtypes", []) ], TestController); exports.TestController = TestController; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2V4YW1wbGUvdGVzdC5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQVF3QjtBQUV4QiwwQkFRWTtBQUdaLElBQWEsY0FBYyxHQUEzQixNQUFhLGNBQWM7SUFDekIsZ0JBQWUsQ0FBQztJQWFoQixVQUFVLENBQWMsRUFBVTtRQUNoQyxPQUFPLDJDQUEyQyxFQUFFLEdBQUcsQ0FBQztJQUMxRCxDQUFDO0lBR0QsaUJBQWlCLENBQWMsRUFBVTtRQUN2QyxPQUFPLDJDQUEyQyxFQUFFLEdBQUcsQ0FBQztJQUMxRCxDQUFDO0lBYUQsZ0JBQWdCO1FBQ2QsTUFBTSxJQUFJLDRCQUFtQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUdELHVCQUF1QjtRQUNyQixNQUFNLElBQUksNEJBQW1CLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBYUQsWUFBWSxDQUFTLElBQVM7UUFDNUIsT0FBTyx3Q0FBd0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQzVELENBQUM7SUFhRCxtQkFBbUIsQ0FBYyxFQUFVO1FBQ3pDLE9BQU8sd0NBQXdDLEVBQUUsR0FBRyxDQUFDO0lBQ3ZELENBQUM7SUFJRCxvQkFBb0IsQ0FBUyxJQUFTO1FBQ3BDLE9BQU8sd0NBQXdDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM1RCxDQUFDO0lBUUQsb0JBQW9CLENBQVMsSUFBUztRQUNwQyxPQUFPLHdDQUF3QyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDNUQsQ0FBQztJQVVELG9CQUFvQixDQUFTLElBQVM7UUFDcEMsT0FBTyx3Q0FBd0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQzVELENBQUM7SUFZRCxnQkFBZ0IsQ0FBUyxJQUFTO1FBQ2hDLE9BQU8sd0NBQXdDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUM1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