uaxi-shared-entities 1.0.215 → 1.0.217
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/entities/admin-audit-log.entity.d.ts +3 -0
- package/dist/entities/admin-audit-log.entity.d.ts.map +1 -1
- package/dist/entities/admin-audit-log.entity.js +38 -9
- package/dist/entities/admin-audit-log.entity.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/entities/admin-audit-log.entity.ts +50 -7
- package/src/index.ts +0 -3
- package/dist/utils/admin-audit-log.util.d.ts +0 -5
- package/dist/utils/admin-audit-log.util.d.ts.map +0 -1
- package/dist/utils/admin-audit-log.util.js +0 -40
- package/dist/utils/admin-audit-log.util.js.map +0 -1
- package/src/utils/admin-audit-log.util.ts +0 -48
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Model } from "sequelize-typescript";
|
|
2
|
+
import { CreateAdminAuditLogInput } from "../types/admin-audit-log.types";
|
|
2
3
|
import { User } from "./user.entity";
|
|
3
4
|
export declare enum AdminAuditHttpMethod {
|
|
4
5
|
POST = "POST",
|
|
@@ -37,6 +38,8 @@ export declare class AdminAuditLog extends Model<AdminAuditLogAttributes, AdminA
|
|
|
37
38
|
entityId: string | null;
|
|
38
39
|
createdAt: Date;
|
|
39
40
|
performedByUser: User;
|
|
41
|
+
static sanitizeAuditData(data: unknown): Record<string, unknown> | null;
|
|
42
|
+
static persistAdminAuditLog(model: typeof AdminAuditLog, input: CreateAdminAuditLogInput): Promise<void>;
|
|
40
43
|
}
|
|
41
44
|
export {};
|
|
42
45
|
//# sourceMappingURL=admin-audit-log.entity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-audit-log.entity.d.ts","sourceRoot":"","sources":["../../src/entities/admin-audit-log.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EAMN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"admin-audit-log.entity.d.ts","sourceRoot":"","sources":["../../src/entities/admin-audit-log.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EAMN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,oBAAY,oBAAoB;IAC9B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAUD,qBAMa,aAAc,SAAQ,KAAK,CACtC,uBAAuB,EACvB,0BAA0B,CAC3B;IAMS,EAAE,EAAE,MAAM,CAAC;IAQnB,iBAAiB,EAAE,MAAM,CAAC;IAM1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAM7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAMxC,QAAQ,EAAE,MAAM,CAAC;IAMjB,UAAU,EAAE,oBAAoB,CAAC;IAOjC,SAAS,EAAE,MAAM,CAAC;IAOlB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;IAGxB,eAAe,EAAE,IAAI,CAAC;IAEtB,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;WAoBpB,oBAAoB,CAC/B,KAAK,EAAE,OAAO,aAAa,EAC3B,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,IAAI,CAAC;CAejB"}
|
|
@@ -8,6 +8,7 @@ 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 AdminAuditLog_1;
|
|
11
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
13
|
exports.AdminAuditLog = exports.AdminAuditHttpMethod = void 0;
|
|
13
14
|
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
@@ -19,7 +20,42 @@ var AdminAuditHttpMethod;
|
|
|
19
20
|
AdminAuditHttpMethod["PATCH"] = "PATCH";
|
|
20
21
|
AdminAuditHttpMethod["DELETE"] = "DELETE";
|
|
21
22
|
})(AdminAuditHttpMethod || (exports.AdminAuditHttpMethod = AdminAuditHttpMethod = {}));
|
|
22
|
-
|
|
23
|
+
const SENSITIVE_AUDIT_FIELDS = [
|
|
24
|
+
"password",
|
|
25
|
+
"refreshToken",
|
|
26
|
+
"verificationToken",
|
|
27
|
+
"access_token",
|
|
28
|
+
"accessToken",
|
|
29
|
+
];
|
|
30
|
+
let AdminAuditLog = AdminAuditLog_1 = class AdminAuditLog extends sequelize_typescript_1.Model {
|
|
31
|
+
static sanitizeAuditData(data) {
|
|
32
|
+
if (data == null) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const plain = typeof data.toJSON === "function"
|
|
36
|
+
? data.toJSON()
|
|
37
|
+
: { ...data };
|
|
38
|
+
for (const field of SENSITIVE_AUDIT_FIELDS) {
|
|
39
|
+
delete plain[field];
|
|
40
|
+
}
|
|
41
|
+
return plain;
|
|
42
|
+
}
|
|
43
|
+
static async persistAdminAuditLog(model, input) {
|
|
44
|
+
try {
|
|
45
|
+
await model.create({
|
|
46
|
+
performedByUserId: input.performedByUserId,
|
|
47
|
+
previousData: AdminAuditLog_1.sanitizeAuditData(input.previousData),
|
|
48
|
+
newData: AdminAuditLog_1.sanitizeAuditData(input.newData),
|
|
49
|
+
endpoint: input.endpoint,
|
|
50
|
+
httpMethod: input.httpMethod,
|
|
51
|
+
tableName: input.tableName,
|
|
52
|
+
entityId: input.entityId ?? null,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error("No se pudo persistir admin audit log:", error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
23
59
|
};
|
|
24
60
|
exports.AdminAuditLog = AdminAuditLog;
|
|
25
61
|
__decorate([
|
|
@@ -36,7 +72,6 @@ __decorate([
|
|
|
36
72
|
(0, sequelize_typescript_1.Column)({
|
|
37
73
|
type: sequelize_typescript_1.DataType.UUID,
|
|
38
74
|
allowNull: false,
|
|
39
|
-
comment: "Usuario admin que realizó la acción (del token JWT)",
|
|
40
75
|
}),
|
|
41
76
|
__metadata("design:type", String)
|
|
42
77
|
], AdminAuditLog.prototype, "performedByUserId", void 0);
|
|
@@ -44,7 +79,6 @@ __decorate([
|
|
|
44
79
|
(0, sequelize_typescript_1.Column)({
|
|
45
80
|
type: sequelize_typescript_1.DataType.JSONB,
|
|
46
81
|
allowNull: true,
|
|
47
|
-
comment: "Estado anterior del recurso afectado",
|
|
48
82
|
}),
|
|
49
83
|
__metadata("design:type", Object)
|
|
50
84
|
], AdminAuditLog.prototype, "previousData", void 0);
|
|
@@ -52,7 +86,6 @@ __decorate([
|
|
|
52
86
|
(0, sequelize_typescript_1.Column)({
|
|
53
87
|
type: sequelize_typescript_1.DataType.JSONB,
|
|
54
88
|
allowNull: true,
|
|
55
|
-
comment: "Estado nuevo del recurso afectado",
|
|
56
89
|
}),
|
|
57
90
|
__metadata("design:type", Object)
|
|
58
91
|
], AdminAuditLog.prototype, "newData", void 0);
|
|
@@ -60,7 +93,6 @@ __decorate([
|
|
|
60
93
|
(0, sequelize_typescript_1.Column)({
|
|
61
94
|
type: sequelize_typescript_1.DataType.STRING(500),
|
|
62
95
|
allowNull: false,
|
|
63
|
-
comment: "Ruta del endpoint que ejecutó la acción",
|
|
64
96
|
}),
|
|
65
97
|
__metadata("design:type", String)
|
|
66
98
|
], AdminAuditLog.prototype, "endpoint", void 0);
|
|
@@ -68,7 +100,6 @@ __decorate([
|
|
|
68
100
|
(0, sequelize_typescript_1.Column)({
|
|
69
101
|
type: sequelize_typescript_1.DataType.ENUM(...Object.values(AdminAuditHttpMethod)),
|
|
70
102
|
allowNull: false,
|
|
71
|
-
comment: "Método HTTP de la operación",
|
|
72
103
|
}),
|
|
73
104
|
__metadata("design:type", String)
|
|
74
105
|
], AdminAuditLog.prototype, "httpMethod", void 0);
|
|
@@ -77,7 +108,6 @@ __decorate([
|
|
|
77
108
|
(0, sequelize_typescript_1.Column)({
|
|
78
109
|
type: sequelize_typescript_1.DataType.STRING(100),
|
|
79
110
|
allowNull: false,
|
|
80
|
-
comment: "Nombre de la tabla que fue modificada",
|
|
81
111
|
}),
|
|
82
112
|
__metadata("design:type", String)
|
|
83
113
|
], AdminAuditLog.prototype, "tableName", void 0);
|
|
@@ -86,7 +116,6 @@ __decorate([
|
|
|
86
116
|
(0, sequelize_typescript_1.Column)({
|
|
87
117
|
type: sequelize_typescript_1.DataType.UUID,
|
|
88
118
|
allowNull: true,
|
|
89
|
-
comment: "ID del registro afectado",
|
|
90
119
|
}),
|
|
91
120
|
__metadata("design:type", Object)
|
|
92
121
|
], AdminAuditLog.prototype, "entityId", void 0);
|
|
@@ -98,7 +127,7 @@ __decorate([
|
|
|
98
127
|
(0, sequelize_typescript_1.BelongsTo)(() => user_entity_1.User, "performedByUserId"),
|
|
99
128
|
__metadata("design:type", user_entity_1.User)
|
|
100
129
|
], AdminAuditLog.prototype, "performedByUser", void 0);
|
|
101
|
-
exports.AdminAuditLog = AdminAuditLog = __decorate([
|
|
130
|
+
exports.AdminAuditLog = AdminAuditLog = AdminAuditLog_1 = __decorate([
|
|
102
131
|
(0, sequelize_typescript_1.Table)({
|
|
103
132
|
tableName: "admin_audit_logs",
|
|
104
133
|
timestamps: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-audit-log.entity.js","sourceRoot":"","sources":["../../src/entities/admin-audit-log.entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"admin-audit-log.entity.js","sourceRoot":"","sources":["../../src/entities/admin-audit-log.entity.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,4 @@ __exportStar(require("./enums"), exports);
|
|
|
25
25
|
__exportStar(require("./config"), exports);
|
|
26
26
|
// Exportar tipos y interfaces
|
|
27
27
|
__exportStar(require("./types"), exports);
|
|
28
|
-
// Utilidades compartidas
|
|
29
|
-
__exportStar(require("./utils/admin-audit-log.util"), exports);
|
|
30
28
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gDAAgD;AAChD,4BAA4B;AAC5B,gDAAgD;;;;;;;;;;;;;;;;AAEhD,oDAAoD;AACpD,6CAA2B;AAE3B,uDAAuD;AACvD,0CAAwB;AAExB,2BAA2B;AAC3B,2CAAyB;AAEzB,8BAA8B;AAC9B,0CAAwB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gDAAgD;AAChD,4BAA4B;AAC5B,gDAAgD;;;;;;;;;;;;;;;;AAEhD,oDAAoD;AACpD,6CAA2B;AAE3B,uDAAuD;AACvD,0CAAwB;AAExB,2BAA2B;AAC3B,2CAAyB;AAEzB,8BAA8B;AAC9B,0CAAwB"}
|
package/package.json
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
BelongsTo,
|
|
9
9
|
Index,
|
|
10
10
|
} from "sequelize-typescript";
|
|
11
|
+
import { CreateAdminAuditLogInput } from "../types/admin-audit-log.types";
|
|
11
12
|
import { User } from "./user.entity";
|
|
12
13
|
|
|
13
14
|
export enum AdminAuditHttpMethod {
|
|
@@ -39,6 +40,14 @@ interface AdminAuditLogCreationAttrs {
|
|
|
39
40
|
entityId?: string | null;
|
|
40
41
|
}
|
|
41
42
|
|
|
43
|
+
const SENSITIVE_AUDIT_FIELDS = [
|
|
44
|
+
"password",
|
|
45
|
+
"refreshToken",
|
|
46
|
+
"verificationToken",
|
|
47
|
+
"access_token",
|
|
48
|
+
"accessToken",
|
|
49
|
+
];
|
|
50
|
+
|
|
42
51
|
@Table({
|
|
43
52
|
tableName: "admin_audit_logs",
|
|
44
53
|
timestamps: true,
|
|
@@ -61,35 +70,30 @@ export class AdminAuditLog extends Model<
|
|
|
61
70
|
@Column({
|
|
62
71
|
type: DataType.UUID,
|
|
63
72
|
allowNull: false,
|
|
64
|
-
comment: "Usuario admin que realizó la acción (del token JWT)",
|
|
65
73
|
})
|
|
66
74
|
performedByUserId: string;
|
|
67
75
|
|
|
68
76
|
@Column({
|
|
69
77
|
type: DataType.JSONB,
|
|
70
78
|
allowNull: true,
|
|
71
|
-
comment: "Estado anterior del recurso afectado",
|
|
72
79
|
})
|
|
73
80
|
previousData: Record<string, unknown> | null;
|
|
74
81
|
|
|
75
82
|
@Column({
|
|
76
83
|
type: DataType.JSONB,
|
|
77
84
|
allowNull: true,
|
|
78
|
-
comment: "Estado nuevo del recurso afectado",
|
|
79
85
|
})
|
|
80
86
|
newData: Record<string, unknown> | null;
|
|
81
87
|
|
|
82
88
|
@Column({
|
|
83
89
|
type: DataType.STRING(500),
|
|
84
90
|
allowNull: false,
|
|
85
|
-
comment: "Ruta del endpoint que ejecutó la acción",
|
|
86
91
|
})
|
|
87
92
|
endpoint: string;
|
|
88
93
|
|
|
89
94
|
@Column({
|
|
90
95
|
type: DataType.ENUM(...Object.values(AdminAuditHttpMethod)),
|
|
91
96
|
allowNull: false,
|
|
92
|
-
comment: "Método HTTP de la operación",
|
|
93
97
|
})
|
|
94
98
|
httpMethod: AdminAuditHttpMethod;
|
|
95
99
|
|
|
@@ -97,7 +101,6 @@ export class AdminAuditLog extends Model<
|
|
|
97
101
|
@Column({
|
|
98
102
|
type: DataType.STRING(100),
|
|
99
103
|
allowNull: false,
|
|
100
|
-
comment: "Nombre de la tabla que fue modificada",
|
|
101
104
|
})
|
|
102
105
|
tableName: string;
|
|
103
106
|
|
|
@@ -105,7 +108,6 @@ export class AdminAuditLog extends Model<
|
|
|
105
108
|
@Column({
|
|
106
109
|
type: DataType.UUID,
|
|
107
110
|
allowNull: true,
|
|
108
|
-
comment: "ID del registro afectado",
|
|
109
111
|
})
|
|
110
112
|
entityId: string | null;
|
|
111
113
|
|
|
@@ -114,4 +116,45 @@ export class AdminAuditLog extends Model<
|
|
|
114
116
|
|
|
115
117
|
@BelongsTo(() => User, "performedByUserId")
|
|
116
118
|
performedByUser: User;
|
|
119
|
+
|
|
120
|
+
static sanitizeAuditData(
|
|
121
|
+
data: unknown,
|
|
122
|
+
): Record<string, unknown> | null {
|
|
123
|
+
if (data == null) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const plain =
|
|
128
|
+
typeof (data as { toJSON?: () => unknown }).toJSON === "function"
|
|
129
|
+
? ((data as { toJSON: () => unknown }).toJSON() as Record<
|
|
130
|
+
string,
|
|
131
|
+
unknown
|
|
132
|
+
>)
|
|
133
|
+
: ({ ...(data as Record<string, unknown>) } as Record<string, unknown>);
|
|
134
|
+
|
|
135
|
+
for (const field of SENSITIVE_AUDIT_FIELDS) {
|
|
136
|
+
delete plain[field];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return plain;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
static async persistAdminAuditLog(
|
|
143
|
+
model: typeof AdminAuditLog,
|
|
144
|
+
input: CreateAdminAuditLogInput,
|
|
145
|
+
): Promise<void> {
|
|
146
|
+
try {
|
|
147
|
+
await model.create({
|
|
148
|
+
performedByUserId: input.performedByUserId,
|
|
149
|
+
previousData: AdminAuditLog.sanitizeAuditData(input.previousData),
|
|
150
|
+
newData: AdminAuditLog.sanitizeAuditData(input.newData),
|
|
151
|
+
endpoint: input.endpoint,
|
|
152
|
+
httpMethod: input.httpMethod,
|
|
153
|
+
tableName: input.tableName,
|
|
154
|
+
entityId: input.entityId ?? null,
|
|
155
|
+
});
|
|
156
|
+
} catch (error) {
|
|
157
|
+
console.error("No se pudo persistir admin audit log:", error);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
117
160
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { AdminAuditLog } from "../entities/admin-audit-log.entity";
|
|
2
|
-
import { CreateAdminAuditLogInput } from "../types/admin-audit-log.types";
|
|
3
|
-
export declare function sanitizeAuditData(data: unknown): Record<string, unknown> | null;
|
|
4
|
-
export declare function persistAdminAuditLog(model: typeof AdminAuditLog, input: CreateAdminAuditLogInput): Promise<void>;
|
|
5
|
-
//# sourceMappingURL=admin-audit-log.util.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-audit-log.util.d.ts","sourceRoot":"","sources":["../../src/utils/admin-audit-log.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAU1E,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAehC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,OAAO,aAAa,EAC3B,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sanitizeAuditData = sanitizeAuditData;
|
|
4
|
-
exports.persistAdminAuditLog = persistAdminAuditLog;
|
|
5
|
-
const SENSITIVE_FIELDS = [
|
|
6
|
-
"password",
|
|
7
|
-
"refreshToken",
|
|
8
|
-
"verificationToken",
|
|
9
|
-
"access_token",
|
|
10
|
-
"accessToken",
|
|
11
|
-
];
|
|
12
|
-
function sanitizeAuditData(data) {
|
|
13
|
-
if (data == null) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
const plain = typeof data.toJSON === "function"
|
|
17
|
-
? data.toJSON()
|
|
18
|
-
: { ...data };
|
|
19
|
-
for (const field of SENSITIVE_FIELDS) {
|
|
20
|
-
delete plain[field];
|
|
21
|
-
}
|
|
22
|
-
return plain;
|
|
23
|
-
}
|
|
24
|
-
async function persistAdminAuditLog(model, input) {
|
|
25
|
-
try {
|
|
26
|
-
await model.create({
|
|
27
|
-
performedByUserId: input.performedByUserId,
|
|
28
|
-
previousData: sanitizeAuditData(input.previousData),
|
|
29
|
-
newData: sanitizeAuditData(input.newData),
|
|
30
|
-
endpoint: input.endpoint,
|
|
31
|
-
httpMethod: input.httpMethod,
|
|
32
|
-
tableName: input.tableName,
|
|
33
|
-
entityId: input.entityId ?? null,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.error("No se pudo persistir admin audit log:", error);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=admin-audit-log.util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-audit-log.util.js","sourceRoot":"","sources":["../../src/utils/admin-audit-log.util.ts"],"names":[],"mappings":";;AAWA,8CAiBC;AAED,oDAiBC;AA5CD,MAAM,gBAAgB,GAAG;IACvB,UAAU;IACV,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,aAAa;CACd,CAAC;AAEF,SAAgB,iBAAiB,CAC/B,IAAa;IAEb,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GACT,OAAQ,IAAmC,CAAC,MAAM,KAAK,UAAU;QAC/D,CAAC,CAAG,IAAkC,CAAC,MAAM,EAA8B;QAC3E,CAAC,CAAE,EAAE,GAAI,IAAgC,EAA8B,CAAC;IAE5E,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,KAA2B,EAC3B,KAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,CAAC;YACjB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,YAAY,EAAE,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC;YACnD,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;SACjC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { AdminAuditLog } from "../entities/admin-audit-log.entity";
|
|
2
|
-
import { CreateAdminAuditLogInput } from "../types/admin-audit-log.types";
|
|
3
|
-
|
|
4
|
-
const SENSITIVE_FIELDS = [
|
|
5
|
-
"password",
|
|
6
|
-
"refreshToken",
|
|
7
|
-
"verificationToken",
|
|
8
|
-
"access_token",
|
|
9
|
-
"accessToken",
|
|
10
|
-
];
|
|
11
|
-
|
|
12
|
-
export function sanitizeAuditData(
|
|
13
|
-
data: unknown,
|
|
14
|
-
): Record<string, unknown> | null {
|
|
15
|
-
if (data == null) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const plain =
|
|
20
|
-
typeof (data as { toJSON?: () => unknown }).toJSON === "function"
|
|
21
|
-
? ((data as { toJSON: () => unknown }).toJSON() as Record<string, unknown>)
|
|
22
|
-
: ({ ...(data as Record<string, unknown>) } as Record<string, unknown>);
|
|
23
|
-
|
|
24
|
-
for (const field of SENSITIVE_FIELDS) {
|
|
25
|
-
delete plain[field];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return plain;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export async function persistAdminAuditLog(
|
|
32
|
-
model: typeof AdminAuditLog,
|
|
33
|
-
input: CreateAdminAuditLogInput,
|
|
34
|
-
): Promise<void> {
|
|
35
|
-
try {
|
|
36
|
-
await model.create({
|
|
37
|
-
performedByUserId: input.performedByUserId,
|
|
38
|
-
previousData: sanitizeAuditData(input.previousData),
|
|
39
|
-
newData: sanitizeAuditData(input.newData),
|
|
40
|
-
endpoint: input.endpoint,
|
|
41
|
-
httpMethod: input.httpMethod,
|
|
42
|
-
tableName: input.tableName,
|
|
43
|
-
entityId: input.entityId ?? null,
|
|
44
|
-
});
|
|
45
|
-
} catch (error) {
|
|
46
|
-
console.error("No se pudo persistir admin audit log:", error);
|
|
47
|
-
}
|
|
48
|
-
}
|