@jmlq/logger 0.1.0-alpha.7 → 0.1.0-alpha.8
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/README.md +225 -733
- package/dist/examples/data-source-service.example.d.ts +3 -0
- package/dist/examples/data-source-service.example.js +174 -0
- package/dist/examples/flush-buffers-use-case.example.d.ts +3 -0
- package/dist/examples/flush-buffers-use-case.example.js +60 -0
- package/dist/examples/get-logs-use-case.example.d.ts +3 -0
- package/dist/examples/get-logs-use-case.example.js +110 -0
- package/dist/examples/index.example.d.ts +8 -0
- package/dist/examples/index.example.js +116 -0
- package/dist/examples/logger-factory.example.d.ts +39 -0
- package/dist/examples/logger-factory.example.js +158 -0
- package/dist/examples/normalize-message.example.d.ts +3 -0
- package/dist/examples/normalize-message.example.js +80 -0
- package/dist/examples/pii-redactor.example.d.ts +3 -0
- package/dist/examples/pii-redactor.example.js +129 -0
- package/dist/examples/save-log-use-case.example.d.ts +3 -0
- package/dist/examples/save-log-use-case.example.js +150 -0
- package/dist/examples/to-log-level.example.d.ts +3 -0
- package/dist/examples/to-log-level.example.js +49 -0
- package/dist/examples/to-pii-regex.example.d.ts +3 -0
- package/dist/examples/to-pii-regex.example.js +75 -0
- package/dist/{presentation → src/application}/factory/create-logger.d.ts +1 -1
- package/dist/{presentation → src/application}/factory/create-logger.js +3 -3
- package/dist/src/application/factory/index.d.ts +1 -0
- package/dist/{presentation → src/application}/factory/index.js +1 -1
- package/dist/src/application/factory/logger.factory.d.ts +12 -0
- package/dist/src/application/factory/logger.factory.js +74 -0
- package/dist/src/application/index.d.ts +2 -0
- package/dist/src/application/index.js +18 -0
- package/dist/src/application/use-cases/flush-buffers.use-case.d.ts +6 -0
- package/dist/{application/use-cases/flush-buffers.js → src/application/use-cases/flush-buffers.use-case.js} +3 -3
- package/dist/src/application/use-cases/get-logs.use-case.d.ts +8 -0
- package/dist/{application/use-cases/get-logs.js → src/application/use-cases/get-logs.use-case.js} +3 -3
- package/dist/src/application/use-cases/index.d.ts +3 -0
- package/dist/{application → src/application}/use-cases/index.js +3 -3
- package/dist/src/application/use-cases/save-log.use-case.d.ts +8 -0
- package/dist/src/application/use-cases/save-log.use-case.js +26 -0
- package/dist/src/domain/index.d.ts +6 -0
- package/dist/src/domain/index.js +22 -0
- package/dist/src/domain/ports/create-logger-options.port.d.ts +7 -0
- package/dist/src/domain/ports/index.d.ts +6 -0
- package/dist/src/domain/ports/index.js +22 -0
- package/dist/src/domain/ports/log-datasource.port.d.ts +9 -0
- package/dist/src/domain/ports/logger-factory-config.port.d.ts +28 -0
- package/dist/src/domain/ports/logger-service.port.d.ts +19 -0
- package/dist/{domain/contracts/logger.d.ts → src/domain/ports/logger.port.d.ts} +0 -9
- package/dist/src/domain/ports/logger.port.js +2 -0
- package/dist/src/domain/ports/pii-redactor.port.d.ts +5 -0
- package/dist/src/domain/ports/pii-redactor.port.js +2 -0
- package/dist/src/domain/request/get-logs-filter.props.d.ts +9 -0
- package/dist/src/domain/request/get-logs-filter.props.js +2 -0
- package/dist/src/domain/request/index.d.ts +5 -0
- package/dist/src/domain/request/index.js +21 -0
- package/dist/src/domain/request/log.props.d.ts +7 -0
- package/dist/src/domain/request/log.props.js +2 -0
- package/dist/src/domain/request/pii-options.props.d.ts +8 -0
- package/dist/src/domain/request/pii-options.props.js +2 -0
- package/dist/src/domain/request/pii-replacement.props.d.ts +5 -0
- package/dist/src/domain/request/pii-replacement.props.js +2 -0
- package/dist/src/domain/request/save-log.props.d.ts +7 -0
- package/dist/src/domain/request/save-log.props.js +2 -0
- package/dist/src/domain/response/index.d.ts +1 -0
- package/dist/{domain/value-objects → src/domain/response}/index.js +1 -1
- package/dist/src/domain/response/log.response.d.ts +7 -0
- package/dist/src/domain/response/log.response.js +2 -0
- package/dist/src/domain/services/index.d.ts +4 -0
- package/dist/{domain/contracts → src/domain/services}/index.js +4 -3
- package/dist/src/domain/services/log-level.service.d.ts +2 -0
- package/dist/src/domain/services/log-level.service.js +27 -0
- package/dist/src/domain/services/message-normalizer.service.d.ts +3 -0
- package/dist/src/domain/services/message-normalizer.service.js +8 -0
- package/dist/src/domain/services/pii-pattern.service.d.ts +2 -0
- package/dist/src/domain/services/pii-pattern.service.js +13 -0
- package/dist/src/domain/services/pii-redactor.d.ts +10 -0
- package/dist/{domain → src/domain}/services/pii-redactor.js +8 -17
- package/dist/src/domain/services/pii-redactor.service.d.ts +10 -0
- package/dist/src/domain/services/pii-redactor.service.js +68 -0
- package/dist/src/domain/types/index.d.ts +1 -0
- package/dist/src/domain/types/index.js +17 -0
- package/dist/src/domain/types/log-message.type.d.ts +1 -0
- package/dist/src/domain/types/log-message.type.js +2 -0
- package/dist/src/domain/value-objects/index.d.ts +1 -0
- package/dist/{domain/services → src/domain/value-objects}/index.js +1 -1
- package/dist/{domain/value-objects/log-level.d.ts → src/domain/value-objects/log-level.vo.d.ts} +0 -1
- package/dist/src/domain/value-objects/log-level.vo.js +13 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +22 -0
- package/dist/src/infrastructure/datasources/in-memory-log.datasource.d.ts +1 -0
- package/dist/src/infrastructure/datasources/in-memory-log.datasource.js +2 -0
- package/dist/src/infrastructure/datasources/index.d.ts +1 -0
- package/dist/{infrastructure/adapters → src/infrastructure/datasources}/index.js +1 -1
- package/dist/src/infrastructure/index.d.ts +1 -0
- package/dist/{domain/types → src/infrastructure}/index.js +1 -1
- package/dist/src/infrastructure/services/data-source-error-handler.type.d.ts +5 -0
- package/dist/src/infrastructure/services/data-source-error-handler.type.js +2 -0
- package/dist/src/infrastructure/services/datasource.service.d.ts +15 -0
- package/dist/src/infrastructure/services/datasource.service.js +63 -0
- package/dist/src/infrastructure/services/index.d.ts +2 -0
- package/dist/src/infrastructure/services/index.js +18 -0
- package/dist/tests/application/factory/logger-factory.spec.d.ts +1 -0
- package/dist/tests/application/factory/logger-factory.spec.js +161 -0
- package/dist/tests/application/use-cases/flush-buffers.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/flush-buffers.use-case.spec.js +38 -0
- package/dist/tests/application/use-cases/get-logs.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/get-logs.use-case.spec.js +114 -0
- package/dist/tests/application/use-cases/save-log.use-case.spec.d.ts +1 -0
- package/dist/tests/application/use-cases/save-log.use-case.spec.js +138 -0
- package/dist/tests/domain/services/log-level.service.spec.d.ts +1 -0
- package/dist/tests/domain/services/log-level.service.spec.js +68 -0
- package/dist/tests/domain/services/normalize-message.spec.d.ts +1 -0
- package/dist/tests/domain/services/normalize-message.spec.js +83 -0
- package/dist/tests/domain/services/pii-redactor.spec.d.ts +1 -0
- package/dist/tests/domain/services/pii-redactor.spec.js +170 -0
- package/dist/tests/domain/services/to-pii-regex.spec.d.ts +1 -0
- package/dist/tests/domain/services/to-pii-regex.spec.js +82 -0
- package/dist/tests/infrastructure/services/datasource.service.spec.d.ts +1 -0
- package/dist/tests/infrastructure/services/datasource.service.spec.js +128 -0
- package/dist/tests/test-utils/create-pii-redactor-mock.d.ts +5 -0
- package/dist/tests/test-utils/create-pii-redactor-mock.js +10 -0
- package/package.json +27 -19
- package/LICENSE +0 -21
- package/dist/application/use-cases/flush-buffers.d.ts +0 -6
- package/dist/application/use-cases/get-logs.d.ts +0 -7
- package/dist/application/use-cases/index.d.ts +0 -3
- package/dist/application/use-cases/save-log.d.ts +0 -13
- package/dist/application/use-cases/save-log.js +0 -30
- package/dist/domain/contracts/index.d.ts +0 -3
- package/dist/domain/contracts/log.datasource.d.ts +0 -8
- package/dist/domain/contracts/pii.d.ts +0 -5
- package/dist/domain/services/index.d.ts +0 -1
- package/dist/domain/services/pii-redactor.d.ts +0 -10
- package/dist/domain/types/index.d.ts +0 -1
- package/dist/domain/types/log.types.d.ts +0 -28
- package/dist/domain/value-objects/index.d.ts +0 -1
- package/dist/domain/value-objects/log-level.js +0 -37
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -10
- package/dist/infrastructure/adapters/composite.datasource.d.ts +0 -11
- package/dist/infrastructure/adapters/composite.datasource.js +0 -46
- package/dist/infrastructure/adapters/index.d.ts +0 -1
- package/dist/presentation/factory/index.d.ts +0 -1
- /package/dist/{domain/contracts/log.datasource.js → src/domain/ports/create-logger-options.port.js} +0 -0
- /package/dist/{domain/contracts/logger.js → src/domain/ports/log-datasource.port.js} +0 -0
- /package/dist/{domain/contracts/pii.js → src/domain/ports/logger-factory-config.port.js} +0 -0
- /package/dist/{domain/types/log.types.js → src/domain/ports/logger-service.port.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ICreateLoggerOptions, ILogDatasource, ILogger } from "../../domain/
|
|
1
|
+
import { ICreateLoggerOptions, ILogDatasource, ILogger } from "../../domain/ports";
|
|
2
2
|
export declare function createLogger(ds: ILogDatasource, opts?: ICreateLoggerOptions): ILogger;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createLogger = createLogger;
|
|
4
|
-
const use_cases_1 = require("../../application/use-cases");
|
|
5
4
|
const services_1 = require("../../domain/services");
|
|
6
5
|
const value_objects_1 = require("../../domain/value-objects");
|
|
6
|
+
const use_cases_1 = require("../use-cases");
|
|
7
7
|
// Factoría de logger. Encapsula composición de casos de uso y servicios
|
|
8
8
|
function createLogger(ds, opts = {}) {
|
|
9
9
|
// Resolve minLevel con un default razonable (INFO)
|
|
@@ -11,8 +11,8 @@ function createLogger(ds, opts = {}) {
|
|
|
11
11
|
// Mantén compatibilidad con redactPII
|
|
12
12
|
const piiEnabled = opts.pii?.enabled ?? opts.redactPII ?? false;
|
|
13
13
|
const redactor = new services_1.PiiRedactor({ enabled: piiEnabled, ...opts.pii });
|
|
14
|
-
const save = new use_cases_1.
|
|
15
|
-
const flushUC = new use_cases_1.
|
|
14
|
+
const save = new use_cases_1.SaveLogUseCase({ ds, minLevel, redactor });
|
|
15
|
+
const flushUC = new use_cases_1.FlushBuffersUseCase(ds);
|
|
16
16
|
// Helper emisor; si en el futuro se necesita encolar, aquí es el lugar
|
|
17
17
|
const emit = (lvl, message, meta) => save.execute(lvl, message, meta);
|
|
18
18
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./logger.factory";
|
|
@@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./logger.factory"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ILoggerFactoryConfig, ILoggerService } from "../../domain/ports";
|
|
2
|
+
/**
|
|
3
|
+
* Factory principal de @jmlq/logger.
|
|
4
|
+
* Se encarga de:
|
|
5
|
+
* - Componer datasources (fan-out si hay varios)
|
|
6
|
+
* - Construir el redactor de PII
|
|
7
|
+
* - Instanciar y conectar los casos de uso
|
|
8
|
+
* - Exponer un servicio de logger de alto nivel
|
|
9
|
+
*/
|
|
10
|
+
export declare class LoggerFactory {
|
|
11
|
+
static create(config: ILoggerFactoryConfig): ILoggerService;
|
|
12
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggerFactory = void 0;
|
|
4
|
+
const value_objects_1 = require("../../domain/value-objects");
|
|
5
|
+
const pii_redactor_service_1 = require("../../domain/services/pii-redactor.service");
|
|
6
|
+
const datasource_service_1 = require("../../infrastructure/services/datasource.service");
|
|
7
|
+
const use_cases_1 = require("../use-cases");
|
|
8
|
+
/**
|
|
9
|
+
* Factory principal de @jmlq/logger.
|
|
10
|
+
* Se encarga de:
|
|
11
|
+
* - Componer datasources (fan-out si hay varios)
|
|
12
|
+
* - Construir el redactor de PII
|
|
13
|
+
* - Instanciar y conectar los casos de uso
|
|
14
|
+
* - Exponer un servicio de logger de alto nivel
|
|
15
|
+
*/
|
|
16
|
+
class LoggerFactory {
|
|
17
|
+
static create(config) {
|
|
18
|
+
// 1) Normalizar config
|
|
19
|
+
const minLevel = config.minLevel ?? value_objects_1.LogLevel.INFO;
|
|
20
|
+
const datasources = Array.isArray(config.datasources)
|
|
21
|
+
? config.datasources
|
|
22
|
+
: [config.datasources];
|
|
23
|
+
// 2) Componer datasource (si hay varios) con DataSourceService
|
|
24
|
+
const ds = datasources.length === 1
|
|
25
|
+
? datasources[0]
|
|
26
|
+
: new datasource_service_1.DataSourceService(datasources);
|
|
27
|
+
// 3) Crear/usar redactor de PII
|
|
28
|
+
const redactor = config.redactor ?? new pii_redactor_service_1.PiiRedactor(config.redactorOptions);
|
|
29
|
+
// 4) Construir casos de uso de Application
|
|
30
|
+
const saveLogUseCase = new use_cases_1.SaveLogUseCase({
|
|
31
|
+
ds,
|
|
32
|
+
minLevel,
|
|
33
|
+
redactor,
|
|
34
|
+
});
|
|
35
|
+
const getLogsUseCase = new use_cases_1.GetLogsUseCase(ds);
|
|
36
|
+
const flushBuffersUseCase = new use_cases_1.FlushBuffersUseCase(ds);
|
|
37
|
+
// 5) Construir facade de servicio de logging
|
|
38
|
+
const service = {
|
|
39
|
+
// Método genérico de logging
|
|
40
|
+
async log(level, message, meta) {
|
|
41
|
+
await saveLogUseCase.execute(level, message, meta);
|
|
42
|
+
},
|
|
43
|
+
// Helpers por nivel
|
|
44
|
+
trace(message, meta) {
|
|
45
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.TRACE, message, meta);
|
|
46
|
+
},
|
|
47
|
+
debug(message, meta) {
|
|
48
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.DEBUG, message, meta);
|
|
49
|
+
},
|
|
50
|
+
info(message, meta) {
|
|
51
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.INFO, message, meta);
|
|
52
|
+
},
|
|
53
|
+
warn(message, meta) {
|
|
54
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.WARN, message, meta);
|
|
55
|
+
},
|
|
56
|
+
error(message, meta) {
|
|
57
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.ERROR, message, meta);
|
|
58
|
+
},
|
|
59
|
+
fatal(message, meta) {
|
|
60
|
+
return saveLogUseCase.execute(value_objects_1.LogLevel.FATAL, message, meta);
|
|
61
|
+
},
|
|
62
|
+
// Lectura de logs con filtros
|
|
63
|
+
async getLogs(filter) {
|
|
64
|
+
return getLogsUseCase.execute(filter);
|
|
65
|
+
},
|
|
66
|
+
// Flush explícito (si el datasource lo soporta)
|
|
67
|
+
async flush() {
|
|
68
|
+
await flushBuffersUseCase.execute();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
return service;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.LoggerFactory = LoggerFactory;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./factory"), exports);
|
|
18
|
+
__exportStar(require("./use-cases"), exports);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.FlushBuffersUseCase = void 0;
|
|
4
|
+
class FlushBuffersUseCase {
|
|
5
5
|
constructor(ds) {
|
|
6
6
|
this.ds = ds;
|
|
7
7
|
}
|
|
@@ -10,4 +10,4 @@ class FlushBuffers {
|
|
|
10
10
|
await this.ds.flush?.();
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
exports.
|
|
13
|
+
exports.FlushBuffersUseCase = FlushBuffersUseCase;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ILogDatasource } from "../../domain/ports";
|
|
2
|
+
import { IGetLogsFilterProps } from "../../domain/request";
|
|
3
|
+
import { ILogResponse } from "../../domain/response";
|
|
4
|
+
export declare class GetLogsUseCase {
|
|
5
|
+
private readonly ds;
|
|
6
|
+
constructor(ds: ILogDatasource);
|
|
7
|
+
execute(filter?: IGetLogsFilterProps): Promise<ILogResponse[]>;
|
|
8
|
+
}
|
package/dist/{application/use-cases/get-logs.js → src/application/use-cases/get-logs.use-case.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
class
|
|
3
|
+
exports.GetLogsUseCase = void 0;
|
|
4
|
+
class GetLogsUseCase {
|
|
5
5
|
constructor(ds) {
|
|
6
6
|
this.ds = ds;
|
|
7
7
|
}
|
|
@@ -21,4 +21,4 @@ class GetLogs {
|
|
|
21
21
|
return this.ds.find(safe);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
exports.
|
|
24
|
+
exports.GetLogsUseCase = GetLogsUseCase;
|
|
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./save-log"), exports);
|
|
18
|
-
__exportStar(require("./get-logs"), exports);
|
|
19
|
-
__exportStar(require("./flush-buffers"), exports);
|
|
17
|
+
__exportStar(require("./save-log.use-case"), exports);
|
|
18
|
+
__exportStar(require("./get-logs.use-case"), exports);
|
|
19
|
+
__exportStar(require("./flush-buffers.use-case"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ISaveLogProps } from "../../domain/request";
|
|
2
|
+
import { LogMessage } from "../../domain/types";
|
|
3
|
+
import { LogLevel } from "../../domain/value-objects";
|
|
4
|
+
export declare class SaveLogUseCase {
|
|
5
|
+
private readonly props;
|
|
6
|
+
constructor(props: ISaveLogProps);
|
|
7
|
+
execute(level: LogLevel, message: LogMessage, meta?: unknown): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SaveLogUseCase = void 0;
|
|
4
|
+
const services_1 = require("../../domain/services");
|
|
5
|
+
class SaveLogUseCase {
|
|
6
|
+
constructor(props) {
|
|
7
|
+
this.props = props;
|
|
8
|
+
}
|
|
9
|
+
async execute(level, message, meta) {
|
|
10
|
+
// 1) Filtro por nivel (evita hacer trabajo innecesario)
|
|
11
|
+
if (level < this.props.minLevel)
|
|
12
|
+
return; // no se loggea
|
|
13
|
+
// 2) Normalización + PII
|
|
14
|
+
const normalized = (0, services_1.normalizeMessage)(message, this.props.redactor);
|
|
15
|
+
// 3) Construcción del evento
|
|
16
|
+
const log = {
|
|
17
|
+
level,
|
|
18
|
+
message: normalized,
|
|
19
|
+
meta: meta === undefined ? undefined : this.props.redactor.redact(meta),
|
|
20
|
+
timestamp: Date.now(),
|
|
21
|
+
};
|
|
22
|
+
// 4) Persistencia (fan-out lo maneja el ds si es composite)
|
|
23
|
+
await this.props.ds.save(log);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.SaveLogUseCase = SaveLogUseCase;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ports"), exports);
|
|
18
|
+
__exportStar(require("./request"), exports);
|
|
19
|
+
__exportStar(require("./response"), exports);
|
|
20
|
+
__exportStar(require("./services"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./value-objects"), exports);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./log-datasource.port"), exports);
|
|
18
|
+
__exportStar(require("./logger.port"), exports);
|
|
19
|
+
__exportStar(require("./pii-redactor.port"), exports);
|
|
20
|
+
__exportStar(require("./create-logger-options.port"), exports);
|
|
21
|
+
__exportStar(require("./logger-factory-config.port"), exports);
|
|
22
|
+
__exportStar(require("./logger-service.port"), exports);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IGetLogsFilterProps, ILogProps } from "../request";
|
|
2
|
+
import { ILogResponse } from "../response";
|
|
3
|
+
export interface ILogDatasource {
|
|
4
|
+
save(log: ILogProps): Promise<void>;
|
|
5
|
+
find?(filter?: IGetLogsFilterProps): Promise<ILogResponse[]>;
|
|
6
|
+
flush?(): Promise<void>;
|
|
7
|
+
dispose?(): Promise<void>;
|
|
8
|
+
readonly name?: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ILogDatasource, IPiiRedactor } from ".";
|
|
2
|
+
import { IPiiOptionsProps } from "../request";
|
|
3
|
+
import { LogLevel } from "../value-objects";
|
|
4
|
+
/**
|
|
5
|
+
* Configuración de alto nivel para construir el logger.
|
|
6
|
+
* Es lo que recibe el usuario del paquete npm.
|
|
7
|
+
*/
|
|
8
|
+
export interface ILoggerFactoryConfig {
|
|
9
|
+
/**
|
|
10
|
+
* Datasource(s) concretos donde se van a persistir los logs.
|
|
11
|
+
* Pueden venir uno o varios; si hay más de uno se compone con DataSourceService (fan-out).
|
|
12
|
+
*/
|
|
13
|
+
datasources: ILogDatasource | ILogDatasource[];
|
|
14
|
+
/**
|
|
15
|
+
* Nivel mínimo de logging. Por defecto: INFO.
|
|
16
|
+
*/
|
|
17
|
+
minLevel?: LogLevel;
|
|
18
|
+
/**
|
|
19
|
+
* Instancia de redactor de PII personalizada.
|
|
20
|
+
* Si no se proporciona, se creará internamente un PiiRedactor con las opciones dadas.
|
|
21
|
+
*/
|
|
22
|
+
redactor?: IPiiRedactor;
|
|
23
|
+
/**
|
|
24
|
+
* Opciones para el redactor de PII interno.
|
|
25
|
+
* Solo se usan si no se pasa `redactor` explícito.
|
|
26
|
+
*/
|
|
27
|
+
redactorOptions?: IPiiOptionsProps;
|
|
28
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { IGetLogsFilterProps } from "../request";
|
|
2
|
+
import { ILogResponse } from "../response";
|
|
3
|
+
import { LogMessage } from "../types";
|
|
4
|
+
import { LogLevel } from "../value-objects";
|
|
5
|
+
/**
|
|
6
|
+
* Facade de alto nivel que expone el comportamiento del logger
|
|
7
|
+
* listo para ser usado por el cliente del paquete.
|
|
8
|
+
*/
|
|
9
|
+
export interface ILoggerService {
|
|
10
|
+
log(level: LogLevel, message: LogMessage, meta?: unknown): Promise<void>;
|
|
11
|
+
trace(message: LogMessage, meta?: unknown): Promise<void>;
|
|
12
|
+
debug(message: LogMessage, meta?: unknown): Promise<void>;
|
|
13
|
+
info(message: LogMessage, meta?: unknown): Promise<void>;
|
|
14
|
+
warn(message: LogMessage, meta?: unknown): Promise<void>;
|
|
15
|
+
error(message: LogMessage, meta?: unknown): Promise<void>;
|
|
16
|
+
fatal(message: LogMessage, meta?: unknown): Promise<void>;
|
|
17
|
+
getLogs(filter?: IGetLogsFilterProps): Promise<ILogResponse[]>;
|
|
18
|
+
flush(): Promise<void>;
|
|
19
|
+
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
import { ILogDatasource } from ".";
|
|
2
|
-
import { PiiOptions } from "../types";
|
|
3
|
-
import { LogLevel } from "../value-objects";
|
|
4
|
-
export interface ICreateLoggerOptions {
|
|
5
|
-
minLevel?: LogLevel;
|
|
6
|
-
redactPII?: boolean;
|
|
7
|
-
pii?: PiiOptions;
|
|
8
|
-
}
|
|
9
1
|
export interface ILogger {
|
|
10
2
|
trace: (message: unknown, meta?: unknown) => void | Promise<void>;
|
|
11
3
|
debug: (message: unknown, meta?: unknown) => void | Promise<void>;
|
|
@@ -16,4 +8,3 @@ export interface ILogger {
|
|
|
16
8
|
flush?: () => Promise<void>;
|
|
17
9
|
dispose?: () => Promise<void>;
|
|
18
10
|
}
|
|
19
|
-
export type { ILogDatasource as LogDatasourcePort };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./save-log.props"), exports);
|
|
18
|
+
__exportStar(require("./pii-options.props"), exports);
|
|
19
|
+
__exportStar(require("./log.props"), exports);
|
|
20
|
+
__exportStar(require("./get-logs-filter.props"), exports);
|
|
21
|
+
__exportStar(require("./pii-replacement.props"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./log.response";
|
|
@@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./log
|
|
17
|
+
__exportStar(require("./log.response"), exports);
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./pii"), exports);
|
|
17
|
+
__exportStar(require("./pii-redactor.service"), exports);
|
|
18
|
+
__exportStar(require("./message-normalizer.service"), exports);
|
|
19
|
+
__exportStar(require("./pii-pattern.service"), exports);
|
|
20
|
+
__exportStar(require("./log-level.service"), exports);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toLogLevel = toLogLevel;
|
|
4
|
+
const value_objects_1 = require("../value-objects");
|
|
5
|
+
// Convierte string a LogLevel con fallback seguro
|
|
6
|
+
function toLogLevel(level, def = value_objects_1.LogLevel.INFO) {
|
|
7
|
+
if (typeof level === "number")
|
|
8
|
+
return (Object.values(value_objects_1.LogLevel).includes(level) ? level : def);
|
|
9
|
+
if (!level)
|
|
10
|
+
return def;
|
|
11
|
+
switch (String(level).toLowerCase()) {
|
|
12
|
+
case "trace":
|
|
13
|
+
return value_objects_1.LogLevel.TRACE;
|
|
14
|
+
case "debug":
|
|
15
|
+
return value_objects_1.LogLevel.DEBUG;
|
|
16
|
+
case "info":
|
|
17
|
+
return value_objects_1.LogLevel.INFO;
|
|
18
|
+
case "warn":
|
|
19
|
+
return value_objects_1.LogLevel.WARN;
|
|
20
|
+
case "error":
|
|
21
|
+
return value_objects_1.LogLevel.ERROR;
|
|
22
|
+
case "fatal":
|
|
23
|
+
return value_objects_1.LogLevel.FATAL;
|
|
24
|
+
default:
|
|
25
|
+
return def; // evita lanzar excepción por valores inesperados
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeMessage = normalizeMessage;
|
|
4
|
+
// Normaliza el mensaje: si es función, la evalúa; si es objeto, se redacta; si es string, se redacta
|
|
5
|
+
function normalizeMessage(message, redactor) {
|
|
6
|
+
const resolved = typeof message === "function" ? message() : message; // eval laziness
|
|
7
|
+
return redactor.redact(resolved);
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPiiRegex = toPiiRegex;
|
|
4
|
+
// Convierte un patrón PII declarativo a un RegExp seguro
|
|
5
|
+
function toPiiRegex(props) {
|
|
6
|
+
try {
|
|
7
|
+
return new RegExp(props.pattern, props.flags ?? "g");
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// fallback: RegExp imposible que nunca hace match
|
|
11
|
+
return /$a/;
|
|
12
|
+
}
|
|
13
|
+
}
|