@carlonicora/nestjs-neo4jsonapi 4.16.0 → 4.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/decorators/audit.decorator.d.ts.map +1 -1
- package/dist/common/decorators/audit.decorator.js +9 -2
- package/dist/common/decorators/audit.decorator.js.map +1 -1
- package/dist/foundations/audit/repositories/audit.repository.d.ts +2 -2
- package/dist/foundations/audit/repositories/audit.repository.d.ts.map +1 -1
- package/dist/foundations/audit/repositories/audit.repository.js +3 -2
- package/dist/foundations/audit/repositories/audit.repository.js.map +1 -1
- package/dist/foundations/audit/services/audit.service.d.ts +18 -1
- package/dist/foundations/audit/services/audit.service.d.ts.map +1 -1
- package/dist/foundations/audit/services/audit.service.js +66 -17
- package/dist/foundations/audit/services/audit.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.decorator.d.ts","sourceRoot":"","sources":["../../../src/common/decorators/audit.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit.decorator.d.ts","sourceRoot":"","sources":["../../../src/common/decorators/audit.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAI7D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,IAC7B,QAAQ,GAAG,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBA+BlF"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Audit = Audit;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const logger = new common_1.Logger("Audit");
|
|
4
6
|
/**
|
|
5
7
|
* Decorator that automatically logs a read audit entry after the method executes.
|
|
6
8
|
*
|
|
@@ -15,10 +17,15 @@ function Audit(meta, id) {
|
|
|
15
17
|
const req = args.find((arg) => arg?.params);
|
|
16
18
|
const paramId = req?.params?.[id];
|
|
17
19
|
if (paramId && this.auditService) {
|
|
18
|
-
|
|
20
|
+
// Fire-and-forget, but never unhandled: a rejected audit write must not crash the
|
|
21
|
+
// process (unhandled rejection) nor fail the request that already succeeded.
|
|
22
|
+
const auditService = this.auditService;
|
|
23
|
+
Promise.resolve()
|
|
24
|
+
.then(() => auditService.logRead({
|
|
19
25
|
entityType: meta.labelName,
|
|
20
26
|
entityId: paramId,
|
|
21
|
-
})
|
|
27
|
+
}))
|
|
28
|
+
.catch((error) => logger.error(`Audit read failed for ${meta.labelName} ${paramId}`, error instanceof Error ? error.stack : String(error)));
|
|
22
29
|
}
|
|
23
30
|
return result;
|
|
24
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.decorator.js","sourceRoot":"","sources":["../../../src/common/decorators/audit.decorator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"audit.decorator.js","sourceRoot":"","sources":["../../../src/common/decorators/audit.decorator.ts"],"names":[],"mappings":";;AAWA,sBAgCC;AA3CD,2CAAwC;AAGxC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,CAAC;AAEnC;;;;;GAKG;AACH,SAAgB,KAAK,CAAC,IAAc,EAAE,EAAU;IAC9C,OAAO,UAAU,MAAW,EAAE,WAAmB,EAAE,UAA8B;QAC/E,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QACxC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAW;YAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAEtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAElC,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,kFAAkF;gBAClF,6EAA6E;gBAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvC,OAAO,CAAC,OAAO,EAAE;qBACd,IAAI,CAAC,GAAG,EAAE,CACT,YAAY,CAAC,OAAO,CAAC;oBACnB,UAAU,EAAE,IAAI,CAAC,SAAS;oBAC1B,QAAQ,EAAE,OAAiB;iBAC5B,CAAC,CACH;qBACA,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CACxB,MAAM,CAAC,KAAK,CACV,yBAAyB,IAAI,CAAC,SAAS,IAAI,OAAO,EAAE,EACpD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACrD,CACF,CAAC;YACN,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@ export declare class AuditRepository implements OnModuleInit {
|
|
|
8
8
|
onModuleInit(): Promise<void>;
|
|
9
9
|
createEntry(params: {
|
|
10
10
|
userId: string;
|
|
11
|
-
companyId: string;
|
|
11
|
+
companyId: string | null;
|
|
12
12
|
ipAddress: string;
|
|
13
13
|
action: string;
|
|
14
14
|
entityType: string;
|
|
@@ -20,7 +20,7 @@ export declare class AuditRepository implements OnModuleInit {
|
|
|
20
20
|
findByEntity(params: {
|
|
21
21
|
entityType: string;
|
|
22
22
|
entityId: string;
|
|
23
|
-
companyId: string;
|
|
23
|
+
companyId: string | null;
|
|
24
24
|
cursor?: JsonApiCursorInterface;
|
|
25
25
|
}): Promise<AuditLog[]>;
|
|
26
26
|
findByUser(params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/audit/repositories/audit.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKpD,qBACa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAEjD,YAAY;IAYZ,WAAW,CAAC,MAAM,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/audit/repositories/audit.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AACnG,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKpD,qBACa,eAAgB,YAAW,YAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,YAAY;IAEjD,YAAY;IAYZ,WAAW,CAAC,MAAM,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CX,YAAY,CAAC,MAAM,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,EAAE,sBAAsB,CAAC;KACjC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAwBjB,UAAU,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAiBnG"}
|
|
@@ -37,7 +37,8 @@ let AuditRepository = class AuditRepository {
|
|
|
37
37
|
...query.queryParams,
|
|
38
38
|
id: (0, crypto_1.randomUUID)(),
|
|
39
39
|
userId: params.userId,
|
|
40
|
-
|
|
40
|
+
// Neo4j drops undefined params (ParameterMissing); users without a company (system admins) send null.
|
|
41
|
+
companyId: params.companyId ?? null,
|
|
41
42
|
ipAddress: params.ipAddress,
|
|
42
43
|
action: params.action,
|
|
43
44
|
entityType: params.entityType,
|
|
@@ -78,7 +79,7 @@ let AuditRepository = class AuditRepository {
|
|
|
78
79
|
...query.queryParams,
|
|
79
80
|
entityType: params.entityType,
|
|
80
81
|
entityId: params.entityId,
|
|
81
|
-
companyId: params.companyId,
|
|
82
|
+
companyId: params.companyId ?? null,
|
|
82
83
|
};
|
|
83
84
|
query.query = `
|
|
84
85
|
MATCH (${audit_meta_1.auditLogMeta.nodeName}_user:${user_meta_1.userMeta.labelName})-[:PERFORMED]->(${audit_meta_1.auditLogMeta.nodeName}:${audit_meta_1.auditLogMeta.labelName} {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.repository.js","sourceRoot":"","sources":["../../../../src/foundations/audit/repositories/audit.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,mCAAoC;AAEpC,8EAA0E;AAE1E,uDAAsD;AACtD,yDAAwD;AACxD,6DAAyD;AAGlD,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAE3D,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC/B,KAAK,EAAE,qBAAqB,yBAAY,CAAC,QAAQ,0BAA0B,yBAAY,CAAC,QAAQ,IAAI,yBAAY,CAAC,SAAS,aAAa,yBAAY,CAAC,QAAQ,eAAe;SAC5K,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC/B,KAAK,EAAE,kDAAkD,yBAAY,CAAC,SAAS,mCAAmC;SACnH,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC/B,KAAK,EAAE,qDAAqD,yBAAY,CAAC,SAAS,kCAAkC;SACrH,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAUjB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC5C,KAAK,CAAC,WAAW,GAAG;YAClB,GAAG,KAAK,CAAC,WAAW;YACpB,EAAE,EAAE,IAAA,mBAAU,GAAE;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"audit.repository.js","sourceRoot":"","sources":["../../../../src/foundations/audit/repositories/audit.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { ClsService } from "nestjs-cls";
|
|
2
|
+
import { SystemRolesInterface } from "../../../common/tokens";
|
|
3
|
+
import { AppLoggingService } from "../../../core/logging/services/logging.service";
|
|
2
4
|
import { EntityDescriptor } from "../../../common/interfaces/entity.schema.interface";
|
|
3
5
|
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
4
6
|
import { AuditRepository } from "../repositories/audit.repository";
|
|
@@ -6,7 +8,22 @@ export declare class AuditService {
|
|
|
6
8
|
private readonly builder;
|
|
7
9
|
private readonly auditRepository;
|
|
8
10
|
private readonly clsService;
|
|
9
|
-
|
|
11
|
+
private readonly systemRoles?;
|
|
12
|
+
private readonly logger?;
|
|
13
|
+
constructor(builder: JsonApiService, auditRepository: AuditRepository, clsService: ClsService, systemRoles?: SystemRolesInterface, logger?: AppLoggingService);
|
|
14
|
+
/**
|
|
15
|
+
* System Administrators must never produce audit entries. Roles are read from CLS,
|
|
16
|
+
* where JwtAuthGuard / AdminJwtAuthGuard / OptionalJwtAuthGuard store them.
|
|
17
|
+
*/
|
|
18
|
+
private isAdministrator;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the current user id when the request must be audited, null otherwise.
|
|
21
|
+
*/
|
|
22
|
+
private auditableUserId;
|
|
23
|
+
/**
|
|
24
|
+
* An audit failure must never fail the request or crash the process: log it and move on.
|
|
25
|
+
*/
|
|
26
|
+
private safeCreateEntry;
|
|
10
27
|
logCreate(params: {
|
|
11
28
|
entityType: string;
|
|
12
29
|
entityId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/audit/services/audit.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/audit/services/audit.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAgB,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAEtF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AASnE,qBACa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAG3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAPP,OAAO,EAAE,cAAc,EACvB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EAGtB,WAAW,CAAC,EAAE,oBAAoB,EAElC,MAAM,CAAC,EAAE,iBAAiB;IAG7C;;;OAGG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;YACW,eAAe;IAUvB,SAAS,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1E,OAAO,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE,SAAS,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,UAAU,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACxC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBX,SAAS,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,GAAG,CAAC;QACd,UAAU,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACxC,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBX,YAAY,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAexF,UAAU,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAatE,OAAO,CAAC,WAAW;IAiDnB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,SAAS;CAKlB"}
|
|
@@ -8,27 +8,73 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var AuditService_1;
|
|
11
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
16
|
exports.AuditService = void 0;
|
|
13
17
|
const common_1 = require("@nestjs/common");
|
|
14
18
|
const nestjs_cls_1 = require("nestjs-cls");
|
|
19
|
+
const system_roles_1 = require("../../../common/constants/system.roles");
|
|
20
|
+
const tokens_1 = require("../../../common/tokens");
|
|
21
|
+
const logging_service_1 = require("../../../core/logging/services/logging.service");
|
|
15
22
|
const jsonapi_paginator_1 = require("../../../core/jsonapi/serialisers/jsonapi.paginator");
|
|
16
23
|
const jsonapi_service_1 = require("../../../core/jsonapi/services/jsonapi.service");
|
|
17
24
|
const audit_model_1 = require("../entities/audit.model");
|
|
18
25
|
const audit_repository_1 = require("../repositories/audit.repository");
|
|
19
|
-
let AuditService = class AuditService {
|
|
20
|
-
constructor(builder, auditRepository, clsService) {
|
|
26
|
+
let AuditService = AuditService_1 = class AuditService {
|
|
27
|
+
constructor(builder, auditRepository, clsService, systemRoles, logger) {
|
|
21
28
|
this.builder = builder;
|
|
22
29
|
this.auditRepository = auditRepository;
|
|
23
30
|
this.clsService = clsService;
|
|
31
|
+
this.systemRoles = systemRoles;
|
|
32
|
+
this.logger = logger;
|
|
24
33
|
}
|
|
25
|
-
|
|
34
|
+
/**
|
|
35
|
+
* System Administrators must never produce audit entries. Roles are read from CLS,
|
|
36
|
+
* where JwtAuthGuard / AdminJwtAuthGuard / OptionalJwtAuthGuard store them.
|
|
37
|
+
*/
|
|
38
|
+
isAdministrator() {
|
|
39
|
+
const roles = this.clsService.get("roles");
|
|
40
|
+
if (!Array.isArray(roles))
|
|
41
|
+
return false;
|
|
42
|
+
const administratorRoleId = this.systemRoles?.Administrator ?? system_roles_1.SystemRoles.Administrator;
|
|
43
|
+
return roles.includes(administratorRoleId);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns the current user id when the request must be audited, null otherwise.
|
|
47
|
+
*/
|
|
48
|
+
auditableUserId() {
|
|
26
49
|
const userId = this.clsService.get("userId");
|
|
50
|
+
if (!userId)
|
|
51
|
+
return null;
|
|
52
|
+
if (this.isAdministrator())
|
|
53
|
+
return null;
|
|
54
|
+
return userId;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* An audit failure must never fail the request or crash the process: log it and move on.
|
|
58
|
+
*/
|
|
59
|
+
async safeCreateEntry(params) {
|
|
60
|
+
try {
|
|
61
|
+
await this.auditRepository.createEntry(params);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const message = `Audit ${params.action} failed for ${params.entityType} ${params.entityId}`;
|
|
65
|
+
if (this.logger)
|
|
66
|
+
this.logger.error(message, error, AuditService_1.name);
|
|
67
|
+
else
|
|
68
|
+
new common_1.Logger(AuditService_1.name).error(message, error?.stack);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async logCreate(params) {
|
|
72
|
+
const userId = this.auditableUserId();
|
|
27
73
|
if (!userId)
|
|
28
74
|
return;
|
|
29
|
-
await this.
|
|
75
|
+
await this.safeCreateEntry({
|
|
30
76
|
userId,
|
|
31
|
-
companyId: this.clsService.get("companyId"),
|
|
77
|
+
companyId: this.clsService.get("companyId") ?? null,
|
|
32
78
|
ipAddress: this.clsService.get("ipAddress") ?? "",
|
|
33
79
|
action: "create",
|
|
34
80
|
entityType: params.entityType,
|
|
@@ -39,12 +85,12 @@ let AuditService = class AuditService {
|
|
|
39
85
|
});
|
|
40
86
|
}
|
|
41
87
|
async logRead(params) {
|
|
42
|
-
const userId = this.
|
|
88
|
+
const userId = this.auditableUserId();
|
|
43
89
|
if (!userId)
|
|
44
90
|
return;
|
|
45
|
-
await this.
|
|
91
|
+
await this.safeCreateEntry({
|
|
46
92
|
userId,
|
|
47
|
-
companyId: this.clsService.get("companyId"),
|
|
93
|
+
companyId: this.clsService.get("companyId") ?? null,
|
|
48
94
|
ipAddress: this.clsService.get("ipAddress") ?? "",
|
|
49
95
|
action: "read",
|
|
50
96
|
entityType: params.entityType,
|
|
@@ -55,16 +101,16 @@ let AuditService = class AuditService {
|
|
|
55
101
|
});
|
|
56
102
|
}
|
|
57
103
|
async logUpdate(params) {
|
|
58
|
-
const userId = this.
|
|
104
|
+
const userId = this.auditableUserId();
|
|
59
105
|
if (!userId)
|
|
60
106
|
return;
|
|
61
107
|
const changes = this.diffChanges(params.before, params.after, params.descriptor);
|
|
62
108
|
if (changes.length === 0)
|
|
63
109
|
return;
|
|
64
|
-
const companyId = this.clsService.get("companyId");
|
|
110
|
+
const companyId = this.clsService.get("companyId") ?? null;
|
|
65
111
|
const ipAddress = this.clsService.get("ipAddress") ?? "";
|
|
66
112
|
for (const change of changes) {
|
|
67
|
-
await this.
|
|
113
|
+
await this.safeCreateEntry({
|
|
68
114
|
userId,
|
|
69
115
|
companyId,
|
|
70
116
|
ipAddress,
|
|
@@ -78,13 +124,13 @@ let AuditService = class AuditService {
|
|
|
78
124
|
}
|
|
79
125
|
}
|
|
80
126
|
async logDelete(params) {
|
|
81
|
-
const userId = this.
|
|
127
|
+
const userId = this.auditableUserId();
|
|
82
128
|
if (!userId)
|
|
83
129
|
return;
|
|
84
130
|
const snapshotStr = this.snapshotEntity(params.snapshot, params.descriptor);
|
|
85
|
-
await this.
|
|
131
|
+
await this.safeCreateEntry({
|
|
86
132
|
userId,
|
|
87
|
-
companyId: this.clsService.get("companyId"),
|
|
133
|
+
companyId: this.clsService.get("companyId") ?? null,
|
|
88
134
|
ipAddress: this.clsService.get("ipAddress") ?? "",
|
|
89
135
|
action: "delete",
|
|
90
136
|
entityType: params.entityType,
|
|
@@ -99,7 +145,7 @@ let AuditService = class AuditService {
|
|
|
99
145
|
return this.builder.buildList(audit_model_1.auditLogModel, await this.auditRepository.findByEntity({
|
|
100
146
|
entityType: params.entityType,
|
|
101
147
|
entityId: params.entityId,
|
|
102
|
-
companyId: this.clsService.get("companyId"),
|
|
148
|
+
companyId: this.clsService.get("companyId") ?? null,
|
|
103
149
|
cursor: paginator.generateCursor(),
|
|
104
150
|
}), paginator);
|
|
105
151
|
}
|
|
@@ -167,10 +213,13 @@ let AuditService = class AuditService {
|
|
|
167
213
|
}
|
|
168
214
|
};
|
|
169
215
|
exports.AuditService = AuditService;
|
|
170
|
-
exports.AuditService = AuditService = __decorate([
|
|
216
|
+
exports.AuditService = AuditService = AuditService_1 = __decorate([
|
|
171
217
|
(0, common_1.Injectable)(),
|
|
218
|
+
__param(3, (0, common_1.Optional)()),
|
|
219
|
+
__param(3, (0, common_1.Inject)(tokens_1.SYSTEM_ROLES)),
|
|
220
|
+
__param(4, (0, common_1.Optional)()),
|
|
172
221
|
__metadata("design:paramtypes", [jsonapi_service_1.JsonApiService,
|
|
173
222
|
audit_repository_1.AuditRepository,
|
|
174
|
-
nestjs_cls_1.ClsService])
|
|
223
|
+
nestjs_cls_1.ClsService, Object, logging_service_1.AppLoggingService])
|
|
175
224
|
], AuditService);
|
|
176
225
|
//# sourceMappingURL=audit.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.service.js","sourceRoot":"","sources":["../../../../src/foundations/audit/services/audit.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit.service.js","sourceRoot":"","sources":["../../../../src/foundations/audit/services/audit.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED