@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.
Files changed (145) hide show
  1. package/README.md +225 -733
  2. package/dist/examples/data-source-service.example.d.ts +3 -0
  3. package/dist/examples/data-source-service.example.js +174 -0
  4. package/dist/examples/flush-buffers-use-case.example.d.ts +3 -0
  5. package/dist/examples/flush-buffers-use-case.example.js +60 -0
  6. package/dist/examples/get-logs-use-case.example.d.ts +3 -0
  7. package/dist/examples/get-logs-use-case.example.js +110 -0
  8. package/dist/examples/index.example.d.ts +8 -0
  9. package/dist/examples/index.example.js +116 -0
  10. package/dist/examples/logger-factory.example.d.ts +39 -0
  11. package/dist/examples/logger-factory.example.js +158 -0
  12. package/dist/examples/normalize-message.example.d.ts +3 -0
  13. package/dist/examples/normalize-message.example.js +80 -0
  14. package/dist/examples/pii-redactor.example.d.ts +3 -0
  15. package/dist/examples/pii-redactor.example.js +129 -0
  16. package/dist/examples/save-log-use-case.example.d.ts +3 -0
  17. package/dist/examples/save-log-use-case.example.js +150 -0
  18. package/dist/examples/to-log-level.example.d.ts +3 -0
  19. package/dist/examples/to-log-level.example.js +49 -0
  20. package/dist/examples/to-pii-regex.example.d.ts +3 -0
  21. package/dist/examples/to-pii-regex.example.js +75 -0
  22. package/dist/{presentation → src/application}/factory/create-logger.d.ts +1 -1
  23. package/dist/{presentation → src/application}/factory/create-logger.js +3 -3
  24. package/dist/src/application/factory/index.d.ts +1 -0
  25. package/dist/{presentation → src/application}/factory/index.js +1 -1
  26. package/dist/src/application/factory/logger.factory.d.ts +12 -0
  27. package/dist/src/application/factory/logger.factory.js +74 -0
  28. package/dist/src/application/index.d.ts +2 -0
  29. package/dist/src/application/index.js +18 -0
  30. package/dist/src/application/use-cases/flush-buffers.use-case.d.ts +6 -0
  31. package/dist/{application/use-cases/flush-buffers.js → src/application/use-cases/flush-buffers.use-case.js} +3 -3
  32. package/dist/src/application/use-cases/get-logs.use-case.d.ts +8 -0
  33. package/dist/{application/use-cases/get-logs.js → src/application/use-cases/get-logs.use-case.js} +3 -3
  34. package/dist/src/application/use-cases/index.d.ts +3 -0
  35. package/dist/{application → src/application}/use-cases/index.js +3 -3
  36. package/dist/src/application/use-cases/save-log.use-case.d.ts +8 -0
  37. package/dist/src/application/use-cases/save-log.use-case.js +26 -0
  38. package/dist/src/domain/index.d.ts +6 -0
  39. package/dist/src/domain/index.js +22 -0
  40. package/dist/src/domain/ports/create-logger-options.port.d.ts +7 -0
  41. package/dist/src/domain/ports/index.d.ts +6 -0
  42. package/dist/src/domain/ports/index.js +22 -0
  43. package/dist/src/domain/ports/log-datasource.port.d.ts +9 -0
  44. package/dist/src/domain/ports/logger-factory-config.port.d.ts +28 -0
  45. package/dist/src/domain/ports/logger-service.port.d.ts +19 -0
  46. package/dist/{domain/contracts/logger.d.ts → src/domain/ports/logger.port.d.ts} +0 -9
  47. package/dist/src/domain/ports/logger.port.js +2 -0
  48. package/dist/src/domain/ports/pii-redactor.port.d.ts +5 -0
  49. package/dist/src/domain/ports/pii-redactor.port.js +2 -0
  50. package/dist/src/domain/request/get-logs-filter.props.d.ts +9 -0
  51. package/dist/src/domain/request/get-logs-filter.props.js +2 -0
  52. package/dist/src/domain/request/index.d.ts +5 -0
  53. package/dist/src/domain/request/index.js +21 -0
  54. package/dist/src/domain/request/log.props.d.ts +7 -0
  55. package/dist/src/domain/request/log.props.js +2 -0
  56. package/dist/src/domain/request/pii-options.props.d.ts +8 -0
  57. package/dist/src/domain/request/pii-options.props.js +2 -0
  58. package/dist/src/domain/request/pii-replacement.props.d.ts +5 -0
  59. package/dist/src/domain/request/pii-replacement.props.js +2 -0
  60. package/dist/src/domain/request/save-log.props.d.ts +7 -0
  61. package/dist/src/domain/request/save-log.props.js +2 -0
  62. package/dist/src/domain/response/index.d.ts +1 -0
  63. package/dist/{domain/value-objects → src/domain/response}/index.js +1 -1
  64. package/dist/src/domain/response/log.response.d.ts +7 -0
  65. package/dist/src/domain/response/log.response.js +2 -0
  66. package/dist/src/domain/services/index.d.ts +4 -0
  67. package/dist/{domain/contracts → src/domain/services}/index.js +4 -3
  68. package/dist/src/domain/services/log-level.service.d.ts +2 -0
  69. package/dist/src/domain/services/log-level.service.js +27 -0
  70. package/dist/src/domain/services/message-normalizer.service.d.ts +3 -0
  71. package/dist/src/domain/services/message-normalizer.service.js +8 -0
  72. package/dist/src/domain/services/pii-pattern.service.d.ts +2 -0
  73. package/dist/src/domain/services/pii-pattern.service.js +13 -0
  74. package/dist/src/domain/services/pii-redactor.d.ts +10 -0
  75. package/dist/{domain → src/domain}/services/pii-redactor.js +8 -17
  76. package/dist/src/domain/services/pii-redactor.service.d.ts +10 -0
  77. package/dist/src/domain/services/pii-redactor.service.js +68 -0
  78. package/dist/src/domain/types/index.d.ts +1 -0
  79. package/dist/src/domain/types/index.js +17 -0
  80. package/dist/src/domain/types/log-message.type.d.ts +1 -0
  81. package/dist/src/domain/types/log-message.type.js +2 -0
  82. package/dist/src/domain/value-objects/index.d.ts +1 -0
  83. package/dist/{domain/services → src/domain/value-objects}/index.js +1 -1
  84. package/dist/{domain/value-objects/log-level.d.ts → src/domain/value-objects/log-level.vo.d.ts} +0 -1
  85. package/dist/src/domain/value-objects/log-level.vo.js +13 -0
  86. package/dist/src/index.d.ts +6 -0
  87. package/dist/src/index.js +22 -0
  88. package/dist/src/infrastructure/datasources/in-memory-log.datasource.d.ts +1 -0
  89. package/dist/src/infrastructure/datasources/in-memory-log.datasource.js +2 -0
  90. package/dist/src/infrastructure/datasources/index.d.ts +1 -0
  91. package/dist/{infrastructure/adapters → src/infrastructure/datasources}/index.js +1 -1
  92. package/dist/src/infrastructure/index.d.ts +1 -0
  93. package/dist/{domain/types → src/infrastructure}/index.js +1 -1
  94. package/dist/src/infrastructure/services/data-source-error-handler.type.d.ts +5 -0
  95. package/dist/src/infrastructure/services/data-source-error-handler.type.js +2 -0
  96. package/dist/src/infrastructure/services/datasource.service.d.ts +15 -0
  97. package/dist/src/infrastructure/services/datasource.service.js +63 -0
  98. package/dist/src/infrastructure/services/index.d.ts +2 -0
  99. package/dist/src/infrastructure/services/index.js +18 -0
  100. package/dist/tests/application/factory/logger-factory.spec.d.ts +1 -0
  101. package/dist/tests/application/factory/logger-factory.spec.js +161 -0
  102. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.d.ts +1 -0
  103. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.js +38 -0
  104. package/dist/tests/application/use-cases/get-logs.use-case.spec.d.ts +1 -0
  105. package/dist/tests/application/use-cases/get-logs.use-case.spec.js +114 -0
  106. package/dist/tests/application/use-cases/save-log.use-case.spec.d.ts +1 -0
  107. package/dist/tests/application/use-cases/save-log.use-case.spec.js +138 -0
  108. package/dist/tests/domain/services/log-level.service.spec.d.ts +1 -0
  109. package/dist/tests/domain/services/log-level.service.spec.js +68 -0
  110. package/dist/tests/domain/services/normalize-message.spec.d.ts +1 -0
  111. package/dist/tests/domain/services/normalize-message.spec.js +83 -0
  112. package/dist/tests/domain/services/pii-redactor.spec.d.ts +1 -0
  113. package/dist/tests/domain/services/pii-redactor.spec.js +170 -0
  114. package/dist/tests/domain/services/to-pii-regex.spec.d.ts +1 -0
  115. package/dist/tests/domain/services/to-pii-regex.spec.js +82 -0
  116. package/dist/tests/infrastructure/services/datasource.service.spec.d.ts +1 -0
  117. package/dist/tests/infrastructure/services/datasource.service.spec.js +128 -0
  118. package/dist/tests/test-utils/create-pii-redactor-mock.d.ts +5 -0
  119. package/dist/tests/test-utils/create-pii-redactor-mock.js +10 -0
  120. package/package.json +27 -19
  121. package/LICENSE +0 -21
  122. package/dist/application/use-cases/flush-buffers.d.ts +0 -6
  123. package/dist/application/use-cases/get-logs.d.ts +0 -7
  124. package/dist/application/use-cases/index.d.ts +0 -3
  125. package/dist/application/use-cases/save-log.d.ts +0 -13
  126. package/dist/application/use-cases/save-log.js +0 -30
  127. package/dist/domain/contracts/index.d.ts +0 -3
  128. package/dist/domain/contracts/log.datasource.d.ts +0 -8
  129. package/dist/domain/contracts/pii.d.ts +0 -5
  130. package/dist/domain/services/index.d.ts +0 -1
  131. package/dist/domain/services/pii-redactor.d.ts +0 -10
  132. package/dist/domain/types/index.d.ts +0 -1
  133. package/dist/domain/types/log.types.d.ts +0 -28
  134. package/dist/domain/value-objects/index.d.ts +0 -1
  135. package/dist/domain/value-objects/log-level.js +0 -37
  136. package/dist/index.d.ts +0 -5
  137. package/dist/index.js +0 -10
  138. package/dist/infrastructure/adapters/composite.datasource.d.ts +0 -11
  139. package/dist/infrastructure/adapters/composite.datasource.js +0 -46
  140. package/dist/infrastructure/adapters/index.d.ts +0 -1
  141. package/dist/presentation/factory/index.d.ts +0 -1
  142. /package/dist/{domain/contracts/log.datasource.js → src/domain/ports/create-logger-options.port.js} +0 -0
  143. /package/dist/{domain/contracts/logger.js → src/domain/ports/log-datasource.port.js} +0 -0
  144. /package/dist/{domain/contracts/pii.js → src/domain/ports/logger-factory-config.port.js} +0 -0
  145. /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/contracts";
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.SaveLog({ ds, minLevel, redactor });
15
- const flushUC = new use_cases_1.FlushBuffers(ds);
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("./create-logger"), exports);
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,2 @@
1
+ export * from "./factory";
2
+ export * from "./use-cases";
@@ -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);
@@ -0,0 +1,6 @@
1
+ import { ILogDatasource } from "../../domain/ports";
2
+ export declare class FlushBuffersUseCase {
3
+ private readonly ds;
4
+ constructor(ds: ILogDatasource);
5
+ execute(): Promise<void>;
6
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FlushBuffers = void 0;
4
- class FlushBuffers {
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.FlushBuffers = FlushBuffers;
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
+ }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GetLogs = void 0;
4
- class GetLogs {
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.GetLogs = GetLogs;
24
+ exports.GetLogsUseCase = GetLogsUseCase;
@@ -0,0 +1,3 @@
1
+ export * from "./save-log.use-case";
2
+ export * from "./get-logs.use-case";
3
+ export * from "./flush-buffers.use-case";
@@ -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,6 @@
1
+ export * from "./ports";
2
+ export * from "./request";
3
+ export * from "./response";
4
+ export * from "./services";
5
+ export * from "./types";
6
+ export * from "./value-objects";
@@ -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,7 @@
1
+ import { IPiiOptionsProps } from "../request";
2
+ import { LogLevel } from "../value-objects";
3
+ export interface ICreateLoggerOptions {
4
+ minLevel?: LogLevel;
5
+ redactPII?: boolean;
6
+ pii?: IPiiOptionsProps;
7
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./log-datasource.port";
2
+ export * from "./logger.port";
3
+ export * from "./pii-redactor.port";
4
+ export * from "./create-logger-options.port";
5
+ export * from "./logger-factory-config.port";
6
+ export * from "./logger-service.port";
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { IPiiOptionsProps } from "../request";
2
+ export interface IPiiRedactor {
3
+ redact<T = unknown>(value: T): T;
4
+ updateOptions?(opts: IPiiOptionsProps): void;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { LogLevel } from "../value-objects";
2
+ export interface IGetLogsFilterProps {
3
+ levelMin?: LogLevel;
4
+ since?: number;
5
+ until?: number;
6
+ limit?: number;
7
+ offset?: number;
8
+ query?: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export * from "./save-log.props";
2
+ export * from "./pii-options.props";
3
+ export * from "./log.props";
4
+ export * from "./get-logs-filter.props";
5
+ export * from "./pii-replacement.props";
@@ -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,7 @@
1
+ import { LogLevel } from "../value-objects";
2
+ export interface ILogProps {
3
+ level: LogLevel;
4
+ message: string | Record<string, unknown>;
5
+ meta?: unknown;
6
+ timestamp: number;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { IPiiReplacementProps } from ".";
2
+ export interface IPiiOptionsProps {
3
+ enabled?: boolean;
4
+ whitelistKeys?: string[];
5
+ blacklistKeys?: string[];
6
+ patterns?: IPiiReplacementProps[];
7
+ deep?: boolean;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export interface IPiiReplacementProps {
2
+ pattern: string;
3
+ flags?: string;
4
+ replaceWith: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { ILogDatasource, IPiiRedactor } from "../ports";
2
+ import { LogLevel } from "../value-objects";
3
+ export interface ISaveLogProps {
4
+ ds: ILogDatasource;
5
+ minLevel: LogLevel;
6
+ redactor: IPiiRedactor;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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-level"), exports);
17
+ __exportStar(require("./log.response"), exports);
@@ -0,0 +1,7 @@
1
+ import { LogLevel } from "../value-objects";
2
+ export interface ILogResponse {
3
+ level: LogLevel;
4
+ message: string | Record<string, unknown>;
5
+ meta?: unknown;
6
+ timestamp: number;
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ export * from "./pii-redactor.service";
2
+ export * from "./message-normalizer.service";
3
+ export * from "./pii-pattern.service";
4
+ export * from "./log-level.service";
@@ -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("./log.datasource"), exports);
18
- __exportStar(require("./logger"), exports);
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,2 @@
1
+ import { LogLevel } from "../value-objects";
2
+ export declare function toLogLevel(level: string | number | undefined, def?: LogLevel): LogLevel;
@@ -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,3 @@
1
+ import { IPiiRedactor } from "../ports";
2
+ import { LogMessage } from "../types";
3
+ export declare function normalizeMessage(message: LogMessage, redactor: IPiiRedactor): string | Record<string, unknown>;
@@ -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,2 @@
1
+ import { IPiiReplacementProps } from "../request";
2
+ export declare function toPiiRegex(props: IPiiReplacementProps): RegExp;
@@ -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
+ }