@gyramais/log-transport 1.0.0 → 1.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAmCA,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,EAKL,aAAa,EAEd,MAAM,WAAW,CAAC;AAQnB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IAOtB,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAOrC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA0KD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,WA8FxD,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAmCA,OAAO,aAAa,GAAG,QAAQ,cAAc,CAAC,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAMpD,OAAO,EAKL,aAAa,EAEd,MAAM,WAAW,CAAC;AAQnB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,aAAa,CAAC;IAOtB,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IAOrC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA0LD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,WAyGxD,CAAC"}
package/dist/logger.js CHANGED
@@ -36,6 +36,7 @@ const winston_1 = require("winston");
36
36
  const nest_winston_1 = require("nest-winston");
37
37
  const LokiTransport = require("winston-loki");
38
38
  const os_1 = require("os");
39
+ const mask_format_1 = require("./mask-format");
39
40
  const console_redirect_1 = require("./console-redirect");
40
41
  const fatal_handlers_1 = require("./fatal-handlers");
41
42
  const options_1 = require("./options");
@@ -159,6 +160,21 @@ const buildLokiTransport = (loki, labels, lineFormat) => new LokiTransport({
159
160
  batching: true,
160
161
  timeout: loki.timeout ?? options_1.DEFAULT_LOKI_TIMEOUT_MS,
161
162
  format: lineFormat,
163
+ /*
164
+ Lote que falhou é DESCARTADO, não reenfileirado.
165
+
166
+ Sem isto o `winston-loki` chama `_requeue(snapshot)` a cada falha, e como
167
+ não existe teto de tamanho na lib o lote vira append-only: cada ciclo
168
+ re-envia tudo o que já foi recusado. Com um destino que recusa de forma
169
+ sustentada (429 de tenant sem allowance, 401 de escopo), isso não é um
170
+ retry — é um laço que cresce sozinho. Na sandbox rendeu 13,3 TB de egress
171
+ inter-região e um serviço travado acima do limite de 100 MiB do gRPC, sem
172
+ uma única linha ingerida (GYR-1669).
173
+
174
+ O preço é perder as linhas do lote que falhou. É o preço certo: log é
175
+ best-effort, e a falha continua audível pelo `[LOKI-SHIP-FAIL]` abaixo.
176
+ */
177
+ clearOnError: true,
162
178
  /*
163
179
  A falha de entrega tem que ser audível: enquanto era silenciosa, o serviço
164
180
  perdeu ~99,5% dos seus logs sem ninguém notar. Escreve direto no console
@@ -244,8 +260,19 @@ const buildNestLogger = (options) => {
244
260
  format: remoteFormat,
245
261
  }));
246
262
  }
263
+ /*
264
+ O mascaramento do payload do chamador (GYR-1644) vai no nível do LOGGER, não
265
+ no de cada transport, por dois motivos: roda UMA vez por linha em vez de uma
266
+ por destino, e assim Console, File e Loki recebem a mesma linha já limpa —
267
+ um destino que escapasse seria o vazamento de volta.
268
+ */
247
269
  const logger = nest_winston_1.WinstonModule.createLogger({
248
270
  level: options.level ?? options_1.DEFAULT_LEVEL,
271
+ /*
272
+ `undefined` e nao um combine vazio: e o estado anterior FIEL — antes desta
273
+ mudanca nao havia format de nivel de logger nenhum.
274
+ */
275
+ format: options.maskPayload === false ? undefined : (0, mask_format_1.buildMaskFormat)(),
249
276
  transports: transportsList,
250
277
  });
251
278
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BE;AAEF,qCAAsE;AACtE,+CAA6C;AAC7C,8CAA+C;AAE/C,2BAA8B;AAE9B,+CAAgD;AAChD,yDAAiE;AACjE,qDAAyD;AACzD,uCAOmB;AA0BnB,MAAM,UAAU,GAAG,CAAC,IAAkC,EAAU,EAAE;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAExC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC;QAEzC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,GAAG,GAAG,CAAC;QACnB,CAAC;QAED,IACE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,MAAM,KAAK,CAAC;YAChB,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAChC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,EAC5B,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,GAAmB,EAAE;IAC7C,MAAM,WAAW,GAAG,gBAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;QACjE,MAAM,KAAK,GAAG;YACZ,KAAK,EAAE,wBAAwB;YAC/B,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,UAAU;YACf,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,UAAU;YACnB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,MAAM,UAAU,GAA2B;YACzC,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,KAAK,EAAE,KAAK,CAAC,GAAG;YAChB,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QAEF,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAE/B;;UAEE;QACF,IAAI,YAAY,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QACjE,YAAY,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,KAAK,EAAE,CAAC,CAAC;QAE3E,OAAO,GAAG,YAAY,EAAE,GAAG,YAAY,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;EAcE;AACF,MAAM,YAAY,GAAG,CAAC,IAAa,EAAkB,EAAE;IACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnC,OAAO,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;EAeE;AACF,MAAM,YAAY,GAAG,CAAC,IAAa,EAAU,EAAE;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,OAAO,IAAI,GAAG,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,IAAa,EAAQ,EAAE;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,KAAK,EAAE,OAAO;QACd,OAAO,EACL,8BAA8B,YAAY,CAAC,IAAI,CAAC,GAAG;YACnD,6DAA6D;YAC7D,4CAA4C;QAC9C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,IAAI,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,IAAiB,EACjB,MAA8B,EAC9B,UAA0B,EACX,EAAE,CACjB,IAAI,aAAa,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,SAAS,EAAE,IAAI,CAAC,SAAS;IACzB,IAAI,EAAE,IAAI;IACV,MAAM;IACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,uCAA6B;IACxD,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,iCAAuB;IAChD,MAAM,EAAE,UAAU;IAElB;;;;;;;;;;;;;MAaE;IACF,YAAY,EAAE,IAAI;IAElB;;;;MAIE;IACF,iBAAiB,EAAE,CAAC,GAAkB,EAAE,EAAE,CACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,2BAA2B,GAAG,EAAE,UAAU,IAAI,MAAM,IAC3D,GAAG,EAAE,OAAO,IAAI,GAClB,EAAE;QACF,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,IAAI,CACP;CACJ,CAAC,CAAC;AAEL;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,eAAe,GAAG,CAAC,OAAsB,EAAe,EAAE;IACrE;;;;;;;;;;;MAWE;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM;QAClC,CAAC,CAAC,iBAAiB,EAAE;QACrB,CAAC,CAAC,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,SAAS,EAAE,EAAE,gBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,YAAY,GAAG,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,SAAS,EAAE,EAAE,gBAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAEvE,MAAM,cAAc,GAAgB;QAClC,IAAI,oBAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;KAClD,CAAC;IAEF,IAAI,aAAwC,CAAC;IAE7C;;;;;;;MAOE;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7D,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;QACvB,aAAa,GAAG,kBAAkB,CAChC,IAAI,EACJ;YACE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,2BAAiB;YACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAA,aAAQ,GAAE;YACxC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;SACvB,EACD,YAAY,CACb,CAAC;QAEF,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB;;;;;UAKE;QACF,cAAc,CAAC,IAAI,CACjB,IAAI,oBAAU,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ;YAC/B,MAAM,EAAE,YAAY;SACrB,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;;MAKE;IACF,MAAM,MAAM,GAAG,4BAAa,CAAC,YAAY,CAAC;QACxC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,uBAAa;QACrC;;;UAGE;QACF,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,6BAAe,GAAE;QACrE,UAAU,EAAE,cAAc;KAC3B,CAAC,CAAC;IAEH;;;;;MAKE;IACF,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,IAAA,8CAA2B,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,uBAAiD,CAAC;IAEtD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,uBAAuB,GAAG,IAAA,sCAAqB,EAC7C,MAAM,EACN,aAAa,EACb,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAC5D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,CAAC;AAC5D,CAAC,CAAC;AAzGW,QAAA,eAAe,mBAyG1B"}
@@ -0,0 +1,3 @@
1
+ import { Logform } from 'winston';
2
+ export declare const buildMaskFormat: () => Logform.Format;
3
+ //# sourceMappingURL=mask-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask-format.d.ts","sourceRoot":"","sources":["../src/mask-format.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAU,OAAO,EAAE,MAAM,SAAS,CAAC;AAa1C,eAAO,MAAM,eAAe,QAAO,OAAO,CAAC,MAqBrC,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.buildMaskFormat = void 0;
5
+ /*
6
+ Mascaramento do argumento que o chamador passou ao `Logger` (GYR-1644).
7
+
8
+ O interceptor protege o que ATRAVESSA a requisição. Uma chamada direta —
9
+ `Logger.log('CreateReport', user)` — não atravessa nada e saía crua; foi assim
10
+ que um e-mail de pessoa real apareceu no log de produção do gyra-core em
11
+ 02/09/2026. São 70 chamadas dessas em 9 repos, nenhuma mascarando.
12
+
13
+ Corrigir aqui, e não nos 70 call sites, é o ponto: a 71ª chamada nasce protegida
14
+ e cada serviço herda ao adotar o pacote.
15
+
16
+ ONDE O ARGUMENTO CAI. Medido com o winston e o nest-winston reais do repo, não
17
+ suposto — o card original supunha que o winston espalhava o objeto no topo do
18
+ `info`, e não é o que acontece:
19
+
20
+ Logger.log('CreateReport', user) -> info.context = user (objeto)
21
+ Logger.log('mensagem', 'SCRPlugin')-> info.context = 'SCRPlugin' (string)
22
+ Logger.warn('aviso', {…}) -> info.context = {…}
23
+ Logger.error('after', {…}) -> info.stack = [ {…} ]
24
+
25
+ Top-level do `info` é sempre `['context','level','message']` (+ `stack` no
26
+ `error`). Ou seja, a fronteira entre metadado da linha e payload do chamador
27
+ está PRESERVADA num campo conhecido — é a assimetria `warn`/`error` medida na
28
+ GYR-1571, que aqui deixa de ser problema e vira o mecanismo.
29
+
30
+ Daí a regra: `context` string é o contexto do Nest (nome da classe) e não se
31
+ toca; `context` objeto é payload do chamador e passa por `maskLogMeta`.
32
+
33
+ O TERCEIRO CANAL. Substituir `info.context` NÃO limpa
34
+ `info[Symbol.for('splat')]`, que segue apontando para o objeto cru — medido. E é
35
+ de lá que o `formatMeta` do formato pretty lê. Mascarar só um canal deixaria o
36
+ PII em claro no stdout de desenvolvimento, que é onde ele é lido por humano.
37
+ */
38
+ const winston_1 = require("winston");
39
+ const log_redaction_1 = require("@gyramais/log-redaction");
40
+ const SPLAT = Symbol.for('splat');
41
+ /*
42
+ `maskLogMeta` devolve CÓPIA. Isso não é detalhe: o objeto no `splat` é o do
43
+ chamador, e mascarar no lugar corromperia o dado da aplicação — o `user` do
44
+ request perderia o `username` para o resto do handler.
45
+ */
46
+ const maskEntry = (value) => value && typeof value === 'object' ? (0, log_redaction_1.maskLogMeta)(value) : value;
47
+ const buildMaskFormat = () => (0, winston_1.format)((info) => {
48
+ if (info.context && typeof info.context === 'object') {
49
+ info.context = (0, log_redaction_1.maskLogMeta)(info.context);
50
+ }
51
+ /*
52
+ Só array: num `Logger.error(msg, err.stack)` o `stack` é a string da stack
53
+ trace, e passá-la por um mascarador de objeto não faria nada além de custar.
54
+ */
55
+ if (Array.isArray(info.stack)) {
56
+ info.stack = info.stack.map(maskEntry);
57
+ }
58
+ const splat = info[SPLAT];
59
+ if (Array.isArray(splat)) {
60
+ info[SPLAT] = splat.map(maskEntry);
61
+ }
62
+ return info;
63
+ })();
64
+ exports.buildMaskFormat = buildMaskFormat;
65
+ //# sourceMappingURL=mask-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mask-format.js","sourceRoot":"","sources":["../src/mask-format.ts"],"names":[],"mappings":";AAAA,uDAAuD;;;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCE;AAEF,qCAA0C;AAC1C,2DAAsD;AAEtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAElC;;;;EAIE;AACF,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE,CAC5C,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,2BAAW,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAE3D,MAAM,eAAe,GAAG,GAAmB,EAAE,CAClD,IAAA,gBAAM,EAAC,CAAC,IAAS,EAAE,EAAE;IACnB,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,IAAA,2BAAW,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;MAGE;IACF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,EAAE,CAAC;AArBM,QAAA,eAAe,mBAqBrB"}
package/dist/options.d.ts CHANGED
@@ -18,6 +18,7 @@ export interface LoggerOptions {
18
18
  level?: string;
19
19
  instance?: string;
20
20
  pretty?: boolean;
21
+ maskPayload?: boolean;
21
22
  loki?: LokiOptions;
22
23
  file?: FileOptions;
23
24
  redirectConsole?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAS5B,OAAO,EAAE,MAAM,CAAC;IAOhB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,MAAM,CAAC,EAAE,OAAO,CAAC;IAYjB,IAAI,CAAC,EAAE,WAAW,CAAC;IAMnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAWnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAa1B,aAAa,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAChD;AAED,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,aAAa,UAAU,CAAC;AAGrC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,eAAO,MAAM,uBAAuB,QAAQ,CAAC"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,WAAW;IAE1B,IAAI,EAAE,MAAM,CAAC;IAEb,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAS5B,OAAO,EAAE,MAAM,CAAC;IAOhB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,KAAK,CAAC,EAAE,MAAM,CAAC;IAQf,QAAQ,CAAC,EAAE,MAAM,CAAC;IASlB,MAAM,CAAC,EAAE,OAAO,CAAC;IAWjB,WAAW,CAAC,EAAE,OAAO,CAAC;IAYtB,IAAI,CAAC,EAAE,WAAW,CAAC;IAMnB,IAAI,CAAC,EAAE,WAAW,CAAC;IAWnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAa1B,aAAa,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAChD;AAED,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,aAAa,UAAU,CAAC;AAGrC,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,eAAO,MAAM,uBAAuB,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AAiHW,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,aAAa,GAAG,OAAO,CAAC;AAErC,gEAAgE;AACnD,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAElC,QAAA,uBAAuB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;EAeE;;;AA4HW,QAAA,iBAAiB,GAAG,MAAM,CAAC;AAC3B,QAAA,aAAa,GAAG,OAAO,CAAC;AAErC,gEAAgE;AACnD,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAElC,QAAA,uBAAuB,GAAG,KAAK,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gyramais/log-transport",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Entrega de log ao Loki e registro de excecao fatal para os servicos gyra-*",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -25,6 +25,7 @@
25
25
  "prepack": "npm run build"
26
26
  },
27
27
  "dependencies": {
28
+ "@gyramais/log-redaction": "^1.2.0",
28
29
  "nest-winston": "^1.9.4",
29
30
  "winston": "^3.13.1",
30
31
  "winston-loki": "^6.1.6"
package/src/logger.ts CHANGED
@@ -37,6 +37,7 @@ import LokiTransport = require('winston-loki');
37
37
  import type { LoggerService } from '@nestjs/common';
38
38
  import { hostname } from 'os';
39
39
 
40
+ import { buildMaskFormat } from './mask-format';
40
41
  import { redirectConsoleToNestLogger } from './console-redirect';
41
42
  import { registerFatalHandlers } from './fatal-handlers';
42
43
  import {
@@ -223,6 +224,22 @@ const buildLokiTransport = (
223
224
  timeout: loki.timeout ?? DEFAULT_LOKI_TIMEOUT_MS,
224
225
  format: lineFormat,
225
226
 
227
+ /*
228
+ Lote que falhou é DESCARTADO, não reenfileirado.
229
+
230
+ Sem isto o `winston-loki` chama `_requeue(snapshot)` a cada falha, e como
231
+ não existe teto de tamanho na lib o lote vira append-only: cada ciclo
232
+ re-envia tudo o que já foi recusado. Com um destino que recusa de forma
233
+ sustentada (429 de tenant sem allowance, 401 de escopo), isso não é um
234
+ retry — é um laço que cresce sozinho. Na sandbox rendeu 13,3 TB de egress
235
+ inter-região e um serviço travado acima do limite de 100 MiB do gRPC, sem
236
+ uma única linha ingerida (GYR-1669).
237
+
238
+ O preço é perder as linhas do lote que falhou. É o preço certo: log é
239
+ best-effort, e a falha continua audível pelo `[LOKI-SHIP-FAIL]` abaixo.
240
+ */
241
+ clearOnError: true,
242
+
226
243
  /*
227
244
  A falha de entrega tem que ser audível: enquanto era silenciosa, o serviço
228
245
  perdeu ~99,5% dos seus logs sem ninguém notar. Escreve direto no console
@@ -327,8 +344,19 @@ export const buildNestLogger = (options: LoggerOptions): BuiltLogger => {
327
344
  );
328
345
  }
329
346
 
347
+ /*
348
+ O mascaramento do payload do chamador (GYR-1644) vai no nível do LOGGER, não
349
+ no de cada transport, por dois motivos: roda UMA vez por linha em vez de uma
350
+ por destino, e assim Console, File e Loki recebem a mesma linha já limpa —
351
+ um destino que escapasse seria o vazamento de volta.
352
+ */
330
353
  const logger = WinstonModule.createLogger({
331
354
  level: options.level ?? DEFAULT_LEVEL,
355
+ /*
356
+ `undefined` e nao um combine vazio: e o estado anterior FIEL — antes desta
357
+ mudanca nao havia format de nivel de logger nenhum.
358
+ */
359
+ format: options.maskPayload === false ? undefined : buildMaskFormat(),
332
360
  transports: transportsList,
333
361
  });
334
362
 
@@ -0,0 +1,71 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ /*
4
+ Mascaramento do argumento que o chamador passou ao `Logger` (GYR-1644).
5
+
6
+ O interceptor protege o que ATRAVESSA a requisição. Uma chamada direta —
7
+ `Logger.log('CreateReport', user)` — não atravessa nada e saía crua; foi assim
8
+ que um e-mail de pessoa real apareceu no log de produção do gyra-core em
9
+ 02/09/2026. São 70 chamadas dessas em 9 repos, nenhuma mascarando.
10
+
11
+ Corrigir aqui, e não nos 70 call sites, é o ponto: a 71ª chamada nasce protegida
12
+ e cada serviço herda ao adotar o pacote.
13
+
14
+ ONDE O ARGUMENTO CAI. Medido com o winston e o nest-winston reais do repo, não
15
+ suposto — o card original supunha que o winston espalhava o objeto no topo do
16
+ `info`, e não é o que acontece:
17
+
18
+ Logger.log('CreateReport', user) -> info.context = user (objeto)
19
+ Logger.log('mensagem', 'SCRPlugin')-> info.context = 'SCRPlugin' (string)
20
+ Logger.warn('aviso', {…}) -> info.context = {…}
21
+ Logger.error('after', {…}) -> info.stack = [ {…} ]
22
+
23
+ Top-level do `info` é sempre `['context','level','message']` (+ `stack` no
24
+ `error`). Ou seja, a fronteira entre metadado da linha e payload do chamador
25
+ está PRESERVADA num campo conhecido — é a assimetria `warn`/`error` medida na
26
+ GYR-1571, que aqui deixa de ser problema e vira o mecanismo.
27
+
28
+ Daí a regra: `context` string é o contexto do Nest (nome da classe) e não se
29
+ toca; `context` objeto é payload do chamador e passa por `maskLogMeta`.
30
+
31
+ O TERCEIRO CANAL. Substituir `info.context` NÃO limpa
32
+ `info[Symbol.for('splat')]`, que segue apontando para o objeto cru — medido. E é
33
+ de lá que o `formatMeta` do formato pretty lê. Mascarar só um canal deixaria o
34
+ PII em claro no stdout de desenvolvimento, que é onde ele é lido por humano.
35
+ */
36
+
37
+ import { format, Logform } from 'winston';
38
+ import { maskLogMeta } from '@gyramais/log-redaction';
39
+
40
+ const SPLAT = Symbol.for('splat');
41
+
42
+ /*
43
+ `maskLogMeta` devolve CÓPIA. Isso não é detalhe: o objeto no `splat` é o do
44
+ chamador, e mascarar no lugar corromperia o dado da aplicação — o `user` do
45
+ request perderia o `username` para o resto do handler.
46
+ */
47
+ const maskEntry = (value: unknown): unknown =>
48
+ value && typeof value === 'object' ? maskLogMeta(value) : value;
49
+
50
+ export const buildMaskFormat = (): Logform.Format =>
51
+ format((info: any) => {
52
+ if (info.context && typeof info.context === 'object') {
53
+ info.context = maskLogMeta(info.context);
54
+ }
55
+
56
+ /*
57
+ Só array: num `Logger.error(msg, err.stack)` o `stack` é a string da stack
58
+ trace, e passá-la por um mascarador de objeto não faria nada além de custar.
59
+ */
60
+ if (Array.isArray(info.stack)) {
61
+ info.stack = info.stack.map(maskEntry);
62
+ }
63
+
64
+ const splat = info[SPLAT];
65
+
66
+ if (Array.isArray(splat)) {
67
+ info[SPLAT] = splat.map(maskEntry);
68
+ }
69
+
70
+ return info;
71
+ })();
package/src/options.ts CHANGED
@@ -83,6 +83,17 @@ export interface LoggerOptions {
83
83
  */
84
84
  pretty?: boolean;
85
85
 
86
+ /*
87
+ Mascara o objeto que o chamador passa ao `Logger` (GYR-1644). Default LIGADO:
88
+ o caminho que ele protege é o que vazou em produção, e um default desligado
89
+ faria cada serviço precisar lembrar de ligá-lo — que é exatamente a
90
+ disciplina por serviço que este pacote existe para não depender.
91
+
92
+ Existe para medir o custo do format (o benchmark liga e desliga a mesma
93
+ carga) e para desligar em emergência. Não é configuração de rotina.
94
+ */
95
+ maskPayload?: boolean;
96
+
86
97
  /*
87
98
  A PRESENÇA deste objeto é o gate de envio — substitui o
88
99
  `LOG_GRAFANA_LOKI === 'true'`. Ausente significa não enviar, e o pacote não