@jmlq/logger 0.1.0-alpha.14 → 0.1.0-alpha.17
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/application/factory/logger.factory.d.ts +1 -1
- package/dist/application/factory/logger.factory.js +10 -10
- package/dist/application/use-cases/get-logs.use-case.d.ts +2 -2
- package/dist/application/use-cases/save-log/index.d.ts +1 -0
- package/dist/application/use-cases/save-log/index.js +17 -0
- package/dist/application/use-cases/save-log/save-log.props.d.ts +7 -0
- package/dist/application/use-cases/save-log.use-case.d.ts +3 -3
- package/dist/application/use-cases/save-log.use-case.js +4 -3
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.js +2 -0
- package/dist/domain/model/index.d.ts +3 -0
- package/dist/domain/model/index.js +19 -0
- package/dist/domain/{request/log.props.d.ts → model/log-entry.model.d.ts} +2 -1
- package/dist/domain/model/pii-options.model.d.ts +8 -0
- package/dist/domain/{request/pii-replacement.props.d.ts → model/pii-replacement-rule.d.ts} +1 -1
- package/dist/domain/ports/create-logger-options.port.d.ts +2 -2
- package/dist/domain/ports/log-datasource.port.d.ts +4 -3
- package/dist/domain/ports/logger-factory-config.port.d.ts +2 -2
- package/dist/domain/ports/logger.port.d.ts +2 -2
- package/dist/domain/ports/pii-redactor.port.d.ts +2 -2
- package/dist/domain/request/index.d.ts +1 -5
- package/dist/domain/request/index.js +1 -5
- package/dist/domain/request/{get-logs-filter.props.d.ts → log-filter.request.d.ts} +1 -1
- package/dist/domain/response/log.response.d.ts +1 -0
- package/dist/domain/services/index.d.ts +0 -3
- package/dist/domain/services/index.js +0 -3
- package/dist/domain/services/pii-redactor.service.d.ts +3 -3
- package/dist/domain/services/pii-redactor.service.js +2 -2
- package/dist/domain/utils/index.d.ts +3 -0
- package/dist/domain/utils/index.js +19 -0
- package/dist/domain/utils/parse-log-level.util.d.ts +2 -0
- package/dist/domain/{services/log-level.service.js → utils/parse-log-level.util.js} +8 -8
- package/dist/domain/utils/pii-regex.util.d.ts +2 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.js +36 -7
- package/dist/infrastructure/services/datasource.service.d.ts +7 -5
- package/dist/infrastructure/services/datasource.service.js +49 -39
- package/dist/infrastructure/services/index.d.ts +0 -1
- package/dist/infrastructure/services/index.js +0 -1
- package/dist/infrastructure/types/index.d.ts +1 -0
- package/dist/infrastructure/types/index.js +17 -0
- package/dist/infrastructure/{services/data-source-error-handler.type.d.ts → types/on-data-source-error.type.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/domain/request/pii-options.props.d.ts +0 -8
- package/dist/domain/request/save-log.props.d.ts +0 -7
- package/dist/domain/services/log-level.service.d.ts +0 -2
- package/dist/domain/services/pii-pattern.service.d.ts +0 -2
- /package/dist/{domain/request → application/use-cases/save-log}/save-log.props.js +0 -0
- /package/dist/domain/{request/get-logs-filter.props.js → model/log-entry.model.js} +0 -0
- /package/dist/domain/{request/log.props.js → model/pii-options.model.js} +0 -0
- /package/dist/domain/{request/pii-options.props.js → model/pii-replacement-rule.js} +0 -0
- /package/dist/domain/request/{pii-replacement.props.js → log-filter.request.js} +0 -0
- /package/dist/domain/{services/message-normalizer.service.d.ts → utils/normalize-message.util.d.ts} +0 -0
- /package/dist/domain/{services/message-normalizer.service.js → utils/normalize-message.util.js} +0 -0
- /package/dist/domain/{services/pii-pattern.service.js → utils/pii-regex.util.js} +0 -0
- /package/dist/infrastructure/{services/data-source-error-handler.type.js → types/on-data-source-error.type.js} +0 -0
|
@@ -8,5 +8,5 @@ import { ILoggerFactoryConfig, ILogger } from "../../domain/ports";
|
|
|
8
8
|
* - Exponer un servicio de logger de alto nivel
|
|
9
9
|
*/
|
|
10
10
|
export declare class LoggerFactory {
|
|
11
|
-
static create(config: ILoggerFactoryConfig): ILogger;
|
|
11
|
+
static create(config: ILoggerFactoryConfig, source?: string): ILogger;
|
|
12
12
|
}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LoggerFactory = void 0;
|
|
4
4
|
const value_objects_1 = require("../../domain/value-objects");
|
|
5
5
|
const pii_redactor_service_1 = require("../../domain/services/pii-redactor.service");
|
|
6
|
-
const
|
|
6
|
+
const services_1 = require("../../infrastructure/services");
|
|
7
7
|
const use_cases_1 = require("../use-cases");
|
|
8
8
|
/**
|
|
9
9
|
* Factory principal de @jmlq/logger.
|
|
@@ -14,7 +14,7 @@ const use_cases_1 = require("../use-cases");
|
|
|
14
14
|
* - Exponer un servicio de logger de alto nivel
|
|
15
15
|
*/
|
|
16
16
|
class LoggerFactory {
|
|
17
|
-
static create(config) {
|
|
17
|
+
static create(config, source = "app-logger") {
|
|
18
18
|
// 1) Normalizar config
|
|
19
19
|
const minLevel = config.minLevel ?? value_objects_1.LogLevel.INFO;
|
|
20
20
|
const datasources = Array.isArray(config.datasources)
|
|
@@ -23,7 +23,7 @@ class LoggerFactory {
|
|
|
23
23
|
// 2) Componer datasource (si hay varios) con DataSourceService
|
|
24
24
|
const ds = datasources.length === 1
|
|
25
25
|
? datasources[0]
|
|
26
|
-
: new
|
|
26
|
+
: new services_1.DataSourceService(datasources);
|
|
27
27
|
// 3) Crear/usar redactor de PII
|
|
28
28
|
const redactor = config.redactor ?? new pii_redactor_service_1.PiiRedactor(config.redactorOptions);
|
|
29
29
|
// 4) Construir casos de uso de Application
|
|
@@ -38,26 +38,26 @@ class LoggerFactory {
|
|
|
38
38
|
const service = {
|
|
39
39
|
// Método genérico de logging
|
|
40
40
|
async log(level, message, meta) {
|
|
41
|
-
await saveLogUseCase.execute(level, message, meta);
|
|
41
|
+
await saveLogUseCase.execute("app-logger", level, message, meta);
|
|
42
42
|
},
|
|
43
43
|
// Helpers por nivel
|
|
44
44
|
trace(message, meta) {
|
|
45
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.TRACE, message, meta);
|
|
45
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.TRACE, message, meta);
|
|
46
46
|
},
|
|
47
47
|
debug(message, meta) {
|
|
48
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.DEBUG, message, meta);
|
|
48
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.DEBUG, message, meta);
|
|
49
49
|
},
|
|
50
50
|
info(message, meta) {
|
|
51
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.INFO, message, meta);
|
|
51
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.INFO, message, meta);
|
|
52
52
|
},
|
|
53
53
|
warn(message, meta) {
|
|
54
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.WARN, message, meta);
|
|
54
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.WARN, message, meta);
|
|
55
55
|
},
|
|
56
56
|
error(message, meta) {
|
|
57
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.ERROR, message, meta);
|
|
57
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.ERROR, message, meta);
|
|
58
58
|
},
|
|
59
59
|
fatal(message, meta) {
|
|
60
|
-
return saveLogUseCase.execute(value_objects_1.LogLevel.FATAL, message, meta);
|
|
60
|
+
return saveLogUseCase.execute(source, value_objects_1.LogLevel.FATAL, message, meta);
|
|
61
61
|
},
|
|
62
62
|
// Lectura de logs con filtros
|
|
63
63
|
async getLogs(filter) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ILogDatasource } from "../../domain/ports";
|
|
2
|
-
import {
|
|
2
|
+
import { LogFilterRequest } from "../../domain/request";
|
|
3
3
|
import { ILogResponse } from "../../domain/response";
|
|
4
4
|
export declare class GetLogsUseCase {
|
|
5
5
|
private readonly ds;
|
|
6
6
|
constructor(ds: ILogDatasource);
|
|
7
|
-
execute(filter?:
|
|
7
|
+
execute(filter?: LogFilterRequest): Promise<ILogResponse[]>;
|
|
8
8
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./save-log.props";
|
|
@@ -0,0 +1,17 @@
|
|
|
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);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ISaveLogProps } from "../../domain/request";
|
|
2
1
|
import { LogMessage } from "../../domain/types";
|
|
3
2
|
import { LogLevel } from "../../domain/value-objects";
|
|
3
|
+
import { SaveLogDependencies } from "./save-log";
|
|
4
4
|
export declare class SaveLogUseCase {
|
|
5
5
|
private readonly props;
|
|
6
|
-
constructor(props:
|
|
7
|
-
execute(level: LogLevel, message: LogMessage, meta?: unknown): Promise<void>;
|
|
6
|
+
constructor(props: SaveLogDependencies);
|
|
7
|
+
execute(source: string, level: LogLevel, message: LogMessage, meta?: unknown): Promise<void>;
|
|
8
8
|
}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SaveLogUseCase = void 0;
|
|
4
|
-
const
|
|
4
|
+
const utils_1 = require("../../domain/utils");
|
|
5
5
|
class SaveLogUseCase {
|
|
6
6
|
constructor(props) {
|
|
7
7
|
this.props = props;
|
|
8
8
|
}
|
|
9
|
-
async execute(level, message, meta) {
|
|
9
|
+
async execute(source, level, message, meta) {
|
|
10
10
|
// 1) Filtro por nivel (evita hacer trabajo innecesario)
|
|
11
11
|
if (level < this.props.minLevel)
|
|
12
12
|
return; // no se loggea
|
|
13
13
|
// 2) Normalización + PII
|
|
14
|
-
const normalized = (0,
|
|
14
|
+
const normalized = (0, utils_1.normalizeMessage)(message, this.props.redactor);
|
|
15
15
|
// 3) Construcción del evento
|
|
16
16
|
const log = {
|
|
17
|
+
source,
|
|
17
18
|
level,
|
|
18
19
|
message: normalized,
|
|
19
20
|
meta: meta === undefined ? undefined : this.props.redactor.redact(meta),
|
package/dist/domain/index.d.ts
CHANGED
package/dist/domain/index.js
CHANGED
|
@@ -20,3 +20,5 @@ __exportStar(require("./response"), exports);
|
|
|
20
20
|
__exportStar(require("./services"), exports);
|
|
21
21
|
__exportStar(require("./types"), exports);
|
|
22
22
|
__exportStar(require("./value-objects"), exports);
|
|
23
|
+
__exportStar(require("./model"), exports);
|
|
24
|
+
__exportStar(require("./utils"), exports);
|
|
@@ -0,0 +1,19 @@
|
|
|
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-entry.model"), exports);
|
|
18
|
+
__exportStar(require("./pii-options.model"), exports);
|
|
19
|
+
__exportStar(require("./pii-replacement-rule"), exports);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PiiOptions } from "../model";
|
|
2
2
|
import { LogLevel } from "../value-objects";
|
|
3
3
|
export interface ICreateLoggerOptions {
|
|
4
4
|
minLevel?: LogLevel;
|
|
5
5
|
redactPII?: boolean;
|
|
6
|
-
pii?:
|
|
6
|
+
pii?: PiiOptions;
|
|
7
7
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LogEntry } from "../model";
|
|
2
|
+
import { LogFilterRequest } from "../request";
|
|
2
3
|
import { ILogResponse } from "../response";
|
|
3
4
|
export interface ILogDatasource {
|
|
4
|
-
save(log:
|
|
5
|
-
find?(filter?:
|
|
5
|
+
save(log: LogEntry): Promise<void>;
|
|
6
|
+
find?(filter?: LogFilterRequest): Promise<ILogResponse[]>;
|
|
6
7
|
flush?(): Promise<void>;
|
|
7
8
|
dispose?(): Promise<void>;
|
|
8
9
|
readonly name?: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ILogDatasource, IPiiRedactor } from ".";
|
|
2
|
-
import {
|
|
2
|
+
import { PiiOptions } from "../model";
|
|
3
3
|
import { LogLevel } from "../value-objects";
|
|
4
4
|
/**
|
|
5
5
|
* Configuración de alto nivel para construir el logger.
|
|
@@ -24,5 +24,5 @@ export interface ILoggerFactoryConfig {
|
|
|
24
24
|
* Opciones para el redactor de PII interno.
|
|
25
25
|
* Solo se usan si no se pasa `redactor` explícito.
|
|
26
26
|
*/
|
|
27
|
-
redactorOptions?:
|
|
27
|
+
redactorOptions?: PiiOptions;
|
|
28
28
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LogFilterRequest } from "../request";
|
|
2
2
|
import { ILogResponse } from "../response";
|
|
3
3
|
import { LogMessage } from "../types";
|
|
4
4
|
import { LogLevel } from "../value-objects";
|
|
@@ -10,6 +10,6 @@ export interface ILogger {
|
|
|
10
10
|
warn(message: LogMessage, meta?: unknown): Promise<void>;
|
|
11
11
|
error(message: LogMessage, meta?: unknown): Promise<void>;
|
|
12
12
|
fatal(message: LogMessage, meta?: unknown): Promise<void>;
|
|
13
|
-
getLogs(filter?:
|
|
13
|
+
getLogs(filter?: LogFilterRequest): Promise<ILogResponse[]>;
|
|
14
14
|
flush(): Promise<void>;
|
|
15
15
|
}
|
|
@@ -14,8 +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("./
|
|
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);
|
|
17
|
+
__exportStar(require("./log-filter.request"), exports);
|
|
@@ -15,6 +15,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
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);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { IPiiRedactor } from "../ports";
|
|
2
|
-
import {
|
|
2
|
+
import { PiiOptions } from "../model";
|
|
3
3
|
export declare class PiiRedactor implements IPiiRedactor {
|
|
4
4
|
private props;
|
|
5
|
-
constructor(props?:
|
|
6
|
-
updateOptions(opts:
|
|
5
|
+
constructor(props?: PiiOptions);
|
|
6
|
+
updateOptions(opts: PiiOptions): void;
|
|
7
7
|
redact<T = unknown>(value: T): T;
|
|
8
8
|
private applyPatterns;
|
|
9
9
|
private redactDeep;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PiiRedactor = void 0;
|
|
4
|
-
const
|
|
4
|
+
const utils_1 = require("../utils");
|
|
5
5
|
class PiiRedactor {
|
|
6
6
|
constructor(props = {}) {
|
|
7
7
|
this.props = props;
|
|
@@ -30,7 +30,7 @@ class PiiRedactor {
|
|
|
30
30
|
const patterns = this.props.patterns ?? [];
|
|
31
31
|
let out = input;
|
|
32
32
|
for (const p of patterns) {
|
|
33
|
-
const rx = (0,
|
|
33
|
+
const rx = (0, utils_1.toPiiRegex)(p);
|
|
34
34
|
// replace con patrón RegExp
|
|
35
35
|
out = out.replace(rx, p.replaceWith);
|
|
36
36
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./parse-log-level.util"), exports);
|
|
18
|
+
__exportStar(require("./normalize-message.util"), exports);
|
|
19
|
+
__exportStar(require("./pii-regex.util"), exports);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.parseLogLevel = parseLogLevel;
|
|
4
4
|
const value_objects_1 = require("../value-objects");
|
|
5
5
|
// Convierte string a LogLevel con fallback seguro
|
|
6
|
-
function
|
|
7
|
-
if (typeof
|
|
8
|
-
return (Object.values(value_objects_1.LogLevel).includes(
|
|
9
|
-
if (!
|
|
10
|
-
return
|
|
11
|
-
switch (String(
|
|
6
|
+
function parseLogLevel(input, fallback = value_objects_1.LogLevel.INFO) {
|
|
7
|
+
if (typeof input === "number")
|
|
8
|
+
return (Object.values(value_objects_1.LogLevel).includes(input) ? input : fallback);
|
|
9
|
+
if (!input)
|
|
10
|
+
return fallback;
|
|
11
|
+
switch (String(input).toLowerCase()) {
|
|
12
12
|
case "trace":
|
|
13
13
|
return value_objects_1.LogLevel.TRACE;
|
|
14
14
|
case "debug":
|
|
@@ -22,6 +22,6 @@ function toLogLevel(level, def = value_objects_1.LogLevel.INFO) {
|
|
|
22
22
|
case "fatal":
|
|
23
23
|
return value_objects_1.LogLevel.FATAL;
|
|
24
24
|
default:
|
|
25
|
-
return
|
|
25
|
+
return fallback; // evita lanzar excepción por valores inesperados
|
|
26
26
|
}
|
|
27
27
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export declare function createLogger(config: import("./domain/ports").ILoggerFactoryConfig, source?: string): import("./domain/ports").ILogger;
|
|
2
|
+
export type { ILogger } from "./domain/ports/logger.port";
|
|
3
|
+
export type { ILoggerFactoryConfig } from "./domain/ports/logger-factory-config.port";
|
|
4
|
+
export type { ILogDatasource } from "./domain/ports/log-datasource.port";
|
|
5
|
+
export type { IPiiRedactor } from "./domain/ports/pii-redactor.port";
|
|
6
|
+
export { LogLevel } from "./domain/value-objects";
|
|
7
|
+
export type { LogMessage } from "./domain/types";
|
|
8
|
+
export type { LogFilterRequest as LogSearchRequest } from "./domain/request";
|
|
9
|
+
export type { ILogResponse as LogRecord } from "./domain/response";
|
|
10
|
+
export type { PiiOptions as PiiRedactorOptions } from "./domain/model";
|
|
11
|
+
export { PiiRedactor } from "./domain/services/pii-redactor.service";
|
|
12
|
+
export * as LoggerUtils from "./domain/utils";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// Re-exporta la API pública del paquete
|
|
3
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
3
|
if (k2 === undefined) k2 = k;
|
|
5
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -11,10 +10,40 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
11
10
|
if (k2 === undefined) k2 = k;
|
|
12
11
|
o[k2] = m[k];
|
|
13
12
|
}));
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
}
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
17
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
36
|
+
exports.LoggerUtils = exports.PiiRedactor = exports.LogLevel = void 0;
|
|
37
|
+
exports.createLogger = createLogger;
|
|
38
|
+
const factory_1 = require("./application/factory");
|
|
39
|
+
// 1) API principal de creación
|
|
40
|
+
function createLogger(config, source) {
|
|
41
|
+
return factory_1.LoggerFactory.create(config, source);
|
|
42
|
+
}
|
|
43
|
+
// 3) Tipos de dominio útiles
|
|
44
|
+
var value_objects_1 = require("./domain/value-objects");
|
|
45
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return value_objects_1.LogLevel; } });
|
|
46
|
+
var pii_redactor_service_1 = require("./domain/services/pii-redactor.service");
|
|
47
|
+
Object.defineProperty(exports, "PiiRedactor", { enumerable: true, get: function () { return pii_redactor_service_1.PiiRedactor; } });
|
|
48
|
+
// 5) Utils públicos
|
|
49
|
+
exports.LoggerUtils = __importStar(require("./domain/utils"));
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnDataSourceError } from "../types";
|
|
2
2
|
import { ILogDatasource } from "../../domain/ports";
|
|
3
|
-
import {
|
|
3
|
+
import { LogFilterRequest } from "../../domain/request";
|
|
4
4
|
import { ILogResponse } from "../../domain/response";
|
|
5
|
+
import { LogEntry } from "../../domain/model";
|
|
5
6
|
export declare class DataSourceService implements ILogDatasource {
|
|
6
7
|
private readonly targets;
|
|
7
8
|
private readonly onError?;
|
|
8
9
|
readonly name = "composite";
|
|
9
10
|
private logs;
|
|
10
|
-
|
|
11
|
+
private nextId;
|
|
12
|
+
constructor(targets: ILogDatasource[], onError?: OnDataSourceError | undefined);
|
|
11
13
|
private handleError;
|
|
12
|
-
save(log:
|
|
13
|
-
find(filter?:
|
|
14
|
+
save(log: LogEntry): Promise<void>;
|
|
15
|
+
find(filter?: LogFilterRequest): Promise<ILogResponse[]>;
|
|
14
16
|
flush(): Promise<void>;
|
|
15
17
|
dispose(): Promise<void>;
|
|
16
18
|
}
|
|
@@ -7,6 +7,7 @@ class DataSourceService {
|
|
|
7
7
|
this.onError = onError;
|
|
8
8
|
this.name = "composite";
|
|
9
9
|
this.logs = [];
|
|
10
|
+
this.nextId = 1;
|
|
10
11
|
this.targets = (targets ?? []).filter(Boolean);
|
|
11
12
|
}
|
|
12
13
|
handleError(op, i, reason) {
|
|
@@ -23,54 +24,63 @@ class DataSourceService {
|
|
|
23
24
|
console.warn(`[DataSourceService] ${op} error in ds#${i} (${datasourceName})`, reason);
|
|
24
25
|
}
|
|
25
26
|
async save(log) {
|
|
27
|
+
// 1) Fan-out a todos los datasources
|
|
26
28
|
const results = await Promise.allSettled(this.targets.map((ds) => ds.save(log)));
|
|
27
29
|
results.forEach((r, i) => {
|
|
28
30
|
if (r.status === "rejected") {
|
|
29
31
|
this.handleError("save", i, r.reason);
|
|
30
32
|
}
|
|
31
33
|
});
|
|
34
|
+
// 2) Indexar en memoria para soportar find() con filtros/paginación
|
|
35
|
+
this.logs.push({
|
|
36
|
+
...log,
|
|
37
|
+
id: this.nextId++,
|
|
38
|
+
});
|
|
32
39
|
}
|
|
33
|
-
// async find(filter?: IGetLogsFilterProps) {
|
|
34
|
-
// const results = await Promise.allSettled(
|
|
35
|
-
// this.targets.map((ds) => ds.find?.(filter))
|
|
36
|
-
// );
|
|
37
|
-
// const logs: ILogResponse[] = [];
|
|
38
|
-
// results.forEach((r, i) => {
|
|
39
|
-
// if (r.status === "fulfilled" && Array.isArray(r.value)) {
|
|
40
|
-
// logs.push(...r.value);
|
|
41
|
-
// } else if (r.status === "rejected") {
|
|
42
|
-
// this.handleError("find", i, r.reason);
|
|
43
|
-
// }
|
|
44
|
-
// });
|
|
45
|
-
// logs.sort((a, b) => b.timestamp - a.timestamp);
|
|
46
|
-
// return logs;
|
|
47
|
-
// }
|
|
48
40
|
async find(filter) {
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
41
|
+
// Si hay logs indexados en memoria, usamos ese índice
|
|
42
|
+
if (this.logs.length > 0) {
|
|
43
|
+
let result = [...this.logs];
|
|
44
|
+
// Orden ASC por timestamp
|
|
45
|
+
result.sort((a, b) => a.timestamp - b.timestamp);
|
|
46
|
+
if (filter) {
|
|
47
|
+
const { levelMin, since, until, query, offset = 0, limit } = filter;
|
|
48
|
+
if (levelMin !== undefined) {
|
|
49
|
+
result = result.filter((l) => l.level >= levelMin);
|
|
50
|
+
}
|
|
51
|
+
if (since !== undefined) {
|
|
52
|
+
result = result.filter((l) => l.timestamp >= since);
|
|
53
|
+
}
|
|
54
|
+
if (until !== undefined) {
|
|
55
|
+
result = result.filter((l) => l.timestamp <= until);
|
|
56
|
+
}
|
|
57
|
+
if (query) {
|
|
58
|
+
const q = query.toLowerCase();
|
|
59
|
+
result = result.filter((l) => {
|
|
60
|
+
const msg = typeof l.message === "string" ? l.message.toLowerCase() : "";
|
|
61
|
+
return msg.includes(q);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const start = offset;
|
|
65
|
+
const end = limit != null ? start + limit : undefined;
|
|
66
|
+
result = result.slice(start, end);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
67
69
|
}
|
|
68
|
-
//
|
|
69
|
-
results.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
// Si NO hay logs en memoria, delegamos en los datasources
|
|
71
|
+
const results = await Promise.allSettled(this.targets.map((ds) => ds.find?.(filter)));
|
|
72
|
+
const logs = [];
|
|
73
|
+
results.forEach((r, i) => {
|
|
74
|
+
if (r.status === "fulfilled" && Array.isArray(r.value)) {
|
|
75
|
+
logs.push(...r.value);
|
|
76
|
+
}
|
|
77
|
+
else if (r.status === "rejected") {
|
|
78
|
+
this.handleError("find", i, r.reason);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Orden ASC también aquí, para cumplir el test
|
|
82
|
+
logs.sort((a, b) => a.timestamp - b.timestamp);
|
|
83
|
+
return logs;
|
|
74
84
|
}
|
|
75
85
|
async flush() {
|
|
76
86
|
const results = await Promise.allSettled(this.targets.map((ds) => ds.flush?.()));
|
|
@@ -15,4 +15,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./datasource.service"), exports);
|
|
18
|
-
__exportStar(require("./data-source-error-handler.type"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./on-data-source-error.type";
|
|
@@ -0,0 +1,17 @@
|
|
|
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("./on-data-source-error.type"), exports);
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/domain/{services/message-normalizer.service.d.ts → utils/normalize-message.util.d.ts}
RENAMED
|
File without changes
|
/package/dist/domain/{services/message-normalizer.service.js → utils/normalize-message.util.js}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|