@jmlq/logger 0.1.0-alpha.0 → 0.1.0-alpha.10

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 (133) hide show
  1. package/README.md +307 -0
  2. package/architecture.md +171 -0
  3. package/dist/examples/data-source-service.example.d.ts +3 -0
  4. package/dist/examples/data-source-service.example.js +174 -0
  5. package/dist/examples/flush-buffers-use-case.example.d.ts +3 -0
  6. package/dist/examples/flush-buffers-use-case.example.js +60 -0
  7. package/dist/examples/get-logs-use-case.example.d.ts +3 -0
  8. package/dist/examples/get-logs-use-case.example.js +110 -0
  9. package/dist/examples/index.example.d.ts +8 -0
  10. package/dist/examples/index.example.js +116 -0
  11. package/dist/examples/logger-factory.example.d.ts +39 -0
  12. package/dist/examples/logger-factory.example.js +158 -0
  13. package/dist/examples/normalize-message.example.d.ts +3 -0
  14. package/dist/examples/normalize-message.example.js +80 -0
  15. package/dist/examples/pii-redactor.example.d.ts +3 -0
  16. package/dist/examples/pii-redactor.example.js +129 -0
  17. package/dist/examples/save-log-use-case.example.d.ts +3 -0
  18. package/dist/examples/save-log-use-case.example.js +150 -0
  19. package/dist/examples/to-log-level.example.d.ts +3 -0
  20. package/dist/examples/to-log-level.example.js +49 -0
  21. package/dist/examples/to-pii-regex.example.d.ts +3 -0
  22. package/dist/examples/to-pii-regex.example.js +75 -0
  23. package/dist/src/application/factory/create-logger.d.ts +2 -0
  24. package/dist/src/application/factory/create-logger.js +29 -0
  25. package/dist/src/application/factory/index.d.ts +1 -0
  26. package/dist/{index.js → src/application/factory/index.js} +1 -3
  27. package/dist/src/application/factory/logger.factory.d.ts +12 -0
  28. package/dist/src/application/factory/logger.factory.js +74 -0
  29. package/dist/src/application/index.d.ts +2 -0
  30. package/dist/src/application/index.js +18 -0
  31. package/dist/src/application/use-cases/flush-buffers.use-case.d.ts +6 -0
  32. package/dist/src/application/use-cases/flush-buffers.use-case.js +13 -0
  33. package/dist/src/application/use-cases/get-logs.use-case.d.ts +8 -0
  34. package/dist/src/application/use-cases/get-logs.use-case.js +24 -0
  35. package/dist/src/application/use-cases/index.d.ts +3 -0
  36. package/dist/src/application/use-cases/index.js +19 -0
  37. package/dist/src/application/use-cases/save-log.use-case.d.ts +8 -0
  38. package/dist/src/application/use-cases/save-log.use-case.js +26 -0
  39. package/dist/src/domain/index.d.ts +6 -0
  40. package/dist/src/domain/index.js +22 -0
  41. package/dist/src/domain/ports/create-logger-options.port.d.ts +7 -0
  42. package/dist/src/domain/ports/create-logger-options.port.js +2 -0
  43. package/dist/src/domain/ports/index.d.ts +6 -0
  44. package/dist/src/domain/ports/index.js +22 -0
  45. package/dist/src/domain/ports/log-datasource.port.d.ts +9 -0
  46. package/dist/src/domain/ports/log-datasource.port.js +2 -0
  47. package/dist/src/domain/ports/logger-factory-config.port.d.ts +28 -0
  48. package/dist/src/domain/ports/logger-factory-config.port.js +2 -0
  49. package/dist/src/domain/ports/logger-service.port.d.ts +19 -0
  50. package/dist/src/domain/ports/logger-service.port.js +2 -0
  51. package/dist/src/domain/ports/logger.port.d.ts +10 -0
  52. package/dist/src/domain/ports/logger.port.js +2 -0
  53. package/dist/src/domain/ports/pii-redactor.port.d.ts +5 -0
  54. package/dist/src/domain/ports/pii-redactor.port.js +2 -0
  55. package/dist/src/domain/request/get-logs-filter.props.d.ts +9 -0
  56. package/dist/src/domain/request/get-logs-filter.props.js +2 -0
  57. package/dist/src/domain/request/index.d.ts +5 -0
  58. package/dist/src/domain/request/index.js +21 -0
  59. package/dist/src/domain/request/log.props.d.ts +7 -0
  60. package/dist/src/domain/request/log.props.js +2 -0
  61. package/dist/src/domain/request/pii-options.props.d.ts +8 -0
  62. package/dist/src/domain/request/pii-options.props.js +2 -0
  63. package/dist/src/domain/request/pii-replacement.props.d.ts +5 -0
  64. package/dist/src/domain/request/pii-replacement.props.js +2 -0
  65. package/dist/src/domain/request/save-log.props.d.ts +7 -0
  66. package/dist/src/domain/request/save-log.props.js +2 -0
  67. package/dist/src/domain/response/index.d.ts +1 -0
  68. package/dist/src/domain/response/index.js +17 -0
  69. package/dist/src/domain/response/log.response.d.ts +7 -0
  70. package/dist/src/domain/response/log.response.js +2 -0
  71. package/dist/src/domain/services/index.d.ts +4 -0
  72. package/dist/src/domain/services/index.js +20 -0
  73. package/dist/src/domain/services/log-level.service.d.ts +2 -0
  74. package/dist/src/domain/services/log-level.service.js +27 -0
  75. package/dist/src/domain/services/message-normalizer.service.d.ts +3 -0
  76. package/dist/src/domain/services/message-normalizer.service.js +8 -0
  77. package/dist/src/domain/services/pii-pattern.service.d.ts +2 -0
  78. package/dist/src/domain/services/pii-pattern.service.js +13 -0
  79. package/dist/src/domain/services/pii-redactor.d.ts +10 -0
  80. package/dist/src/domain/services/pii-redactor.js +68 -0
  81. package/dist/src/domain/services/pii-redactor.service.d.ts +10 -0
  82. package/dist/src/domain/services/pii-redactor.service.js +68 -0
  83. package/dist/src/domain/types/index.d.ts +1 -0
  84. package/dist/src/domain/types/index.js +17 -0
  85. package/dist/src/domain/types/log-message.type.d.ts +1 -0
  86. package/dist/src/domain/types/log-message.type.js +2 -0
  87. package/dist/src/domain/value-objects/index.d.ts +1 -0
  88. package/dist/src/domain/value-objects/index.js +17 -0
  89. package/dist/src/domain/value-objects/log-level.vo.d.ts +8 -0
  90. package/dist/src/domain/value-objects/log-level.vo.js +13 -0
  91. package/dist/src/index.d.ts +6 -0
  92. package/dist/src/index.js +22 -0
  93. package/dist/src/infrastructure/datasources/in-memory-log.datasource.d.ts +1 -0
  94. package/dist/src/infrastructure/datasources/in-memory-log.datasource.js +2 -0
  95. package/dist/src/infrastructure/datasources/index.d.ts +1 -0
  96. package/dist/src/infrastructure/datasources/index.js +17 -0
  97. package/dist/src/infrastructure/index.d.ts +1 -0
  98. package/dist/src/infrastructure/index.js +17 -0
  99. package/dist/src/infrastructure/services/data-source-error-handler.type.d.ts +5 -0
  100. package/dist/src/infrastructure/services/data-source-error-handler.type.js +2 -0
  101. package/dist/src/infrastructure/services/datasource.service.d.ts +15 -0
  102. package/dist/src/infrastructure/services/datasource.service.js +63 -0
  103. package/dist/src/infrastructure/services/index.d.ts +2 -0
  104. package/dist/src/infrastructure/services/index.js +18 -0
  105. package/dist/tests/application/factory/logger-factory.spec.d.ts +1 -0
  106. package/dist/tests/application/factory/logger-factory.spec.js +161 -0
  107. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.d.ts +1 -0
  108. package/dist/tests/application/use-cases/flush-buffers.use-case.spec.js +38 -0
  109. package/dist/tests/application/use-cases/get-logs.use-case.spec.d.ts +1 -0
  110. package/dist/tests/application/use-cases/get-logs.use-case.spec.js +114 -0
  111. package/dist/tests/application/use-cases/save-log.use-case.spec.d.ts +1 -0
  112. package/dist/tests/application/use-cases/save-log.use-case.spec.js +138 -0
  113. package/dist/tests/domain/services/log-level.service.spec.d.ts +1 -0
  114. package/dist/tests/domain/services/log-level.service.spec.js +68 -0
  115. package/dist/tests/domain/services/normalize-message.spec.d.ts +1 -0
  116. package/dist/tests/domain/services/normalize-message.spec.js +83 -0
  117. package/dist/tests/domain/services/pii-redactor.spec.d.ts +1 -0
  118. package/dist/tests/domain/services/pii-redactor.spec.js +170 -0
  119. package/dist/tests/domain/services/to-pii-regex.spec.d.ts +1 -0
  120. package/dist/tests/domain/services/to-pii-regex.spec.js +82 -0
  121. package/dist/tests/infrastructure/services/datasource.service.spec.d.ts +1 -0
  122. package/dist/tests/infrastructure/services/datasource.service.spec.js +128 -0
  123. package/dist/tests/test-utils/create-pii-redactor-mock.d.ts +5 -0
  124. package/dist/tests/test-utils/create-pii-redactor-mock.js +10 -0
  125. package/install.md +367 -0
  126. package/package.json +33 -10
  127. package/dist/Composite/index.d.ts +0 -9
  128. package/dist/Composite/index.js +0 -23
  129. package/dist/Factory/index.d.ts +0 -5
  130. package/dist/Factory/index.js +0 -23
  131. package/dist/index.d.ts +0 -3
  132. package/dist/interfaces/index.d.ts +0 -35
  133. package/dist/interfaces/index.js +0 -13
@@ -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("./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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ export interface ILogger {
2
+ trace: (message: unknown, meta?: unknown) => void | Promise<void>;
3
+ debug: (message: unknown, meta?: unknown) => void | Promise<void>;
4
+ info: (message: unknown, meta?: unknown) => void | Promise<void>;
5
+ warn: (message: unknown, meta?: unknown) => void | Promise<void>;
6
+ error: (message: unknown, meta?: unknown) => void | Promise<void>;
7
+ fatal: (message: unknown, meta?: unknown) => void | Promise<void>;
8
+ flush?: () => Promise<void>;
9
+ dispose?: () => Promise<void>;
10
+ }
@@ -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";
@@ -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("./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";
@@ -0,0 +1,20 @@
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("./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
+ }
@@ -0,0 +1,10 @@
1
+ import { IPiiRedactor } from "../ports";
2
+ import { IPiiOptionsProps } from "../request";
3
+ export declare class PiiRedactor implements IPiiRedactor {
4
+ private props;
5
+ constructor(props?: IPiiOptionsProps);
6
+ updateOptions(opts: IPiiOptionsProps): void;
7
+ redact<T = unknown>(value: T): T;
8
+ private applyPatterns;
9
+ private redactDeep;
10
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PiiRedactor = void 0;
4
+ const pii_pattern_service_1 = require("./pii-pattern.service");
5
+ class PiiRedactor {
6
+ constructor(props = {}) {
7
+ this.props = props;
8
+ }
9
+ updateOptions(opts) {
10
+ // merge superficial de opciones; no muta referencias externas
11
+ this.props = { ...this.props, ...opts };
12
+ }
13
+ redact(value) {
14
+ if (!this.props.enabled)
15
+ return value; // early exit si PII apagado
16
+ if (value == null)
17
+ return value;
18
+ // Si es string → aplicar patrones
19
+ if (typeof value === "string") {
20
+ return this.applyPatterns(value);
21
+ }
22
+ // Si es objeto/array → redacción profunda si corresponde
23
+ if (typeof value === "object") {
24
+ return this.redactDeep(value);
25
+ }
26
+ // Otros tipos (number, boolean, function) no se redactan
27
+ return value;
28
+ }
29
+ applyPatterns(input) {
30
+ const patterns = this.props.patterns ?? [];
31
+ let out = input;
32
+ for (const p of patterns) {
33
+ const rx = (0, pii_pattern_service_1.toPiiRegex)(p);
34
+ // replace con patrón RegExp
35
+ out = out.replace(rx, p.replaceWith);
36
+ }
37
+ return out;
38
+ }
39
+ redactDeep(obj) {
40
+ // Evita mutar el objeto original → copia superficial
41
+ const clone = Array.isArray(obj)
42
+ ? [...obj]
43
+ : { ...obj };
44
+ const { whitelistKeys = [], blacklistKeys = [], deep = true } = this.props;
45
+ for (const key of Object.keys(clone)) {
46
+ const val = clone[key];
47
+ // Si está en whitelist, se respeta siempre
48
+ if (whitelistKeys.includes(key))
49
+ continue;
50
+ // Si está en blacklist y es string → reemplazar completamente
51
+ if (blacklistKeys.includes(key)) {
52
+ clone[key] = "[REDACTED]"; // fuerza redacción total de claves sensibles
53
+ continue;
54
+ }
55
+ // Para strings comunes → aplicar patrones
56
+ if (typeof val === "string") {
57
+ clone[key] = this.applyPatterns(val);
58
+ continue;
59
+ }
60
+ // Para objetos/arrays y deep===true → recursión
61
+ if (deep && val && typeof val === "object") {
62
+ clone[key] = this.redactDeep(val);
63
+ }
64
+ }
65
+ return clone;
66
+ }
67
+ }
68
+ exports.PiiRedactor = PiiRedactor;
@@ -0,0 +1,10 @@
1
+ import { IPiiRedactor } from "../ports";
2
+ import { IPiiOptionsProps } from "../request";
3
+ export declare class PiiRedactor implements IPiiRedactor {
4
+ private props;
5
+ constructor(props?: IPiiOptionsProps);
6
+ updateOptions(opts: IPiiOptionsProps): void;
7
+ redact<T = unknown>(value: T): T;
8
+ private applyPatterns;
9
+ private redactDeep;
10
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PiiRedactor = void 0;
4
+ const pii_pattern_service_1 = require("./pii-pattern.service");
5
+ class PiiRedactor {
6
+ constructor(props = {}) {
7
+ this.props = props;
8
+ }
9
+ updateOptions(opts) {
10
+ // merge superficial de opciones; no muta referencias externas
11
+ this.props = { ...this.props, ...opts };
12
+ }
13
+ redact(value) {
14
+ if (!this.props.enabled)
15
+ return value; // early exit si PII apagado
16
+ if (value == null)
17
+ return value;
18
+ // Si es string → aplicar patrones
19
+ if (typeof value === "string") {
20
+ return this.applyPatterns(value);
21
+ }
22
+ // Si es objeto/array → redacción profunda si corresponde
23
+ if (typeof value === "object") {
24
+ return this.redactDeep(value);
25
+ }
26
+ // Otros tipos (number, boolean, function) no se redactan
27
+ return value;
28
+ }
29
+ applyPatterns(input) {
30
+ const patterns = this.props.patterns ?? [];
31
+ let out = input;
32
+ for (const p of patterns) {
33
+ const rx = (0, pii_pattern_service_1.toPiiRegex)(p);
34
+ // replace con patrón RegExp
35
+ out = out.replace(rx, p.replaceWith);
36
+ }
37
+ return out;
38
+ }
39
+ redactDeep(obj) {
40
+ // Evita mutar el objeto original → copia superficial
41
+ const clone = Array.isArray(obj)
42
+ ? [...obj]
43
+ : { ...obj };
44
+ const { whitelistKeys = [], blacklistKeys = [], deep = true } = this.props;
45
+ for (const key of Object.keys(clone)) {
46
+ const val = clone[key];
47
+ // Si está en whitelist, se respeta siempre
48
+ if (whitelistKeys.includes(key))
49
+ continue;
50
+ // Si está en blacklist y es string → reemplazar completamente
51
+ if (blacklistKeys.includes(key)) {
52
+ clone[key] = "[REDACTED]"; // fuerza redacción total de claves sensibles
53
+ continue;
54
+ }
55
+ // Para strings comunes → aplicar patrones
56
+ if (typeof val === "string") {
57
+ clone[key] = this.applyPatterns(val);
58
+ continue;
59
+ }
60
+ // Para objetos/arrays y deep===true → recursión
61
+ if (deep && val && typeof val === "object") {
62
+ clone[key] = this.redactDeep(val);
63
+ }
64
+ }
65
+ return clone;
66
+ }
67
+ }
68
+ exports.PiiRedactor = PiiRedactor;
@@ -0,0 +1 @@
1
+ export * from "./log-message.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("./log-message.type"), exports);