@groundbrick/audit-service 1.1.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/AuditService.d.ts +14 -0
- package/dist/AuditService.d.ts.map +1 -0
- package/dist/AuditService.js +21 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/interfaces/IAuditProvider.d.ts +5 -0
- package/dist/interfaces/IAuditProvider.d.ts.map +1 -0
- package/dist/interfaces/IAuditProvider.js +1 -0
- package/dist/providers/DatabaseAuditProvider.d.ts +10 -0
- package/dist/providers/DatabaseAuditProvider.d.ts.map +1 -0
- package/dist/providers/DatabaseAuditProvider.js +25 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IAuditProvider } from './interfaces/IAuditProvider.js';
|
|
2
|
+
import { AuditEvent } from './types.js';
|
|
3
|
+
export declare class AuditService {
|
|
4
|
+
private static instance;
|
|
5
|
+
private provider;
|
|
6
|
+
private constructor();
|
|
7
|
+
static getInstance(provider: IAuditProvider): AuditService;
|
|
8
|
+
/**
|
|
9
|
+
* Registra um evento de auditoria de forma assíncrona (fire-and-forget).
|
|
10
|
+
* @param event O evento de auditoria a ser registrado.
|
|
11
|
+
*/
|
|
12
|
+
log(event: AuditEvent): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=AuditService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditService.d.ts","sourceRoot":"","sources":["../src/AuditService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO;WAIO,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY;IAOjE;;;OAGG;IACI,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAIpC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class AuditService {
|
|
2
|
+
static instance;
|
|
3
|
+
provider;
|
|
4
|
+
constructor(provider) {
|
|
5
|
+
this.provider = provider;
|
|
6
|
+
}
|
|
7
|
+
static getInstance(provider) {
|
|
8
|
+
if (!AuditService.instance) {
|
|
9
|
+
AuditService.instance = new AuditService(provider);
|
|
10
|
+
}
|
|
11
|
+
return AuditService.instance;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Registra um evento de auditoria de forma assíncrona (fire-and-forget).
|
|
15
|
+
* @param event O evento de auditoria a ser registrado.
|
|
16
|
+
*/
|
|
17
|
+
log(event) {
|
|
18
|
+
// Não usamos await aqui para não bloquear a execução principal.
|
|
19
|
+
this.provider.save(event).catch(console.error);
|
|
20
|
+
}
|
|
21
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAuditProvider.d.ts","sourceRoot":"","sources":["../../src/interfaces/IAuditProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IAuditProvider } from '../interfaces/IAuditProvider.js';
|
|
2
|
+
import { AuditEvent } from '../types.js';
|
|
3
|
+
type QueryExecutor = (query: string, params: any[]) => Promise<void>;
|
|
4
|
+
export declare class DatabaseAuditProvider implements IAuditProvider {
|
|
5
|
+
private executeQuery;
|
|
6
|
+
constructor(executeQuery: QueryExecutor);
|
|
7
|
+
save(event: AuditEvent): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=DatabaseAuditProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatabaseAuditProvider.d.ts","sourceRoot":"","sources":["../../src/providers/DatabaseAuditProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,qBAAa,qBAAsB,YAAW,cAAc;IAC9C,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,aAAa;IAEzC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA+B7C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class DatabaseAuditProvider {
|
|
2
|
+
executeQuery;
|
|
3
|
+
constructor(executeQuery) {
|
|
4
|
+
this.executeQuery = executeQuery;
|
|
5
|
+
}
|
|
6
|
+
async save(event) {
|
|
7
|
+
const { actorId, petshopId, action, entity, entityId, oldValue, newValue, metadata, } = event;
|
|
8
|
+
const query = `
|
|
9
|
+
INSERT INTO audit_logs (actor_id, petshop_id, action, entity, entity_id, old_value, new_value, metadata, "timestamp")
|
|
10
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
11
|
+
`;
|
|
12
|
+
const params = [
|
|
13
|
+
actorId,
|
|
14
|
+
petshopId,
|
|
15
|
+
action,
|
|
16
|
+
entity,
|
|
17
|
+
entityId,
|
|
18
|
+
oldValue ? JSON.stringify(oldValue) : null,
|
|
19
|
+
newValue ? JSON.stringify(newValue) : null,
|
|
20
|
+
metadata ? JSON.stringify(metadata) : null,
|
|
21
|
+
event.timestamp || new Date(),
|
|
22
|
+
];
|
|
23
|
+
await this.executeQuery(query, params);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './DatabaseAuditProvider.js';
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type AuditAction = 'CREATE' | 'UPDATE' | 'DELETE' | 'LOGIN' | 'LOGOUT';
|
|
2
|
+
export interface AuditEvent {
|
|
3
|
+
/** ID do usuário ou sistema que realizou a ação. */
|
|
4
|
+
actorId: string;
|
|
5
|
+
/** ID do petshop ao qual a ação está associada. */
|
|
6
|
+
petshopId: string;
|
|
7
|
+
/** A ação que foi realizada. */
|
|
8
|
+
action: AuditAction;
|
|
9
|
+
/** A entidade que foi afetada. Ex: 'PET', 'APPOINTMENT', 'USER'. */
|
|
10
|
+
entity: string;
|
|
11
|
+
/** O ID da entidade que foi afetada. */
|
|
12
|
+
entityId: string;
|
|
13
|
+
/** O estado anterior dos dados (para UPDATE e DELETE). */
|
|
14
|
+
oldValue?: any | null;
|
|
15
|
+
/** O novo estado dos dados (para CREATE e UPDATE). */
|
|
16
|
+
newValue?: any | null;
|
|
17
|
+
/** Timestamp do evento. Gerado automaticamente se não for fornecido. */
|
|
18
|
+
timestamp?: Date;
|
|
19
|
+
/** Detalhes adicionais, como endereço IP, user-agent, etc. */
|
|
20
|
+
metadata?: Record<string, any>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACtB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@groundbrick/audit-service",
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "Serviço de auditoria plugável para registrar eventos de log de forma assíncrona.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc -p tsconfig.build.json",
|
|
21
|
+
"build:watch": "tsc -p tsconfig.build.json --watch",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
24
|
+
"lint": "eslint src --ext .ts",
|
|
25
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
26
|
+
"prepare": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"audit",
|
|
30
|
+
"log",
|
|
31
|
+
"auditing",
|
|
32
|
+
"typescript"
|
|
33
|
+
],
|
|
34
|
+
"author": "GroundBrick",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.11.5",
|
|
41
|
+
"@typescript-eslint/eslint-plugin": "^6.19.1",
|
|
42
|
+
"@typescript-eslint/parser": "^6.19.1",
|
|
43
|
+
"eslint": "^8.56.0",
|
|
44
|
+
"prettier": "^3.2.4",
|
|
45
|
+
"typescript": "^5.3.3"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=16.0.0"
|
|
49
|
+
}
|
|
50
|
+
}
|