nestjs-auditlog
Version:
A powerful package for auditlog using opentelemetry in NestJS applications
417 lines • 22.1 kB
JavaScript
;
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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