fg-tracker-sdk 0.14.0 → 0.16.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.
- package/CHANGELOG.md +26 -0
- package/README.md +23 -6
- package/dist/context.d.ts +16 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +30 -0
- package/dist/context.js.map +1 -1
- package/dist/express.d.ts +6 -1
- package/dist/express.d.ts.map +1 -1
- package/dist/express.js +19 -5
- package/dist/express.js.map +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +156 -9
- package/dist/fetch.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/infra/aws.d.ts.map +1 -1
- package/dist/infra/aws.js +26 -0
- package/dist/infra/aws.js.map +1 -1
- package/dist/infra/lambda.d.ts +2 -0
- package/dist/infra/lambda.d.ts.map +1 -1
- package/dist/infra/lambda.js +5 -2
- package/dist/infra/lambda.js.map +1 -1
- package/dist/logs/shipper.d.ts.map +1 -1
- package/dist/logs/shipper.js +15 -4
- package/dist/logs/shipper.js.map +1 -1
- package/dist/logs/types.d.ts +8 -0
- package/dist/logs/types.d.ts.map +1 -1
- package/dist/monitors.d.ts.map +1 -1
- package/dist/monitors.js +3 -1
- package/dist/monitors.js.map +1 -1
- package/dist/next.d.ts.map +1 -1
- package/dist/next.js +7 -2
- package/dist/next.js.map +1 -1
- package/dist/node-http.d.ts.map +1 -1
- package/dist/node-http.js +12 -3
- package/dist/node-http.js.map +1 -1
- package/dist/scrub.d.ts +62 -4
- package/dist/scrub.d.ts.map +1 -1
- package/dist/scrub.js +656 -11
- package/dist/scrub.js.map +1 -1
- package/dist/tracker.d.ts +24 -0
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +84 -17
- package/dist/tracker.js.map +1 -1
- package/dist/types.d.ts +37 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/next.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseTraceContext } from './context.js';
|
|
1
|
+
import { parseTraceContext, sanitizeBaggage } from './context.js';
|
|
2
2
|
import { normalizePath } from './normalize.js';
|
|
3
3
|
/**
|
|
4
4
|
* Envolve um route handler do App Router (`export const GET = tracker.wrapNextRoute(...)`)
|
|
@@ -25,7 +25,7 @@ export function wrapNextRouteHandler(core, handler) {
|
|
|
25
25
|
const attributes = {
|
|
26
26
|
url: rawUrl,
|
|
27
27
|
userAgent: req.headers.get('user-agent'),
|
|
28
|
-
ip: req.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? null,
|
|
28
|
+
...(core.options.sendDefaultPii ? { ip: req.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? null } : {}),
|
|
29
29
|
...(requestId ? { requestId } : {}),
|
|
30
30
|
};
|
|
31
31
|
const remote = parseTraceContext(req.headers.get('traceparent'), req.headers.get('tracestate'));
|
|
@@ -34,6 +34,11 @@ export function wrapNextRouteHandler(core, handler) {
|
|
|
34
34
|
: core.startSpan('http.server', `${method} ${route}`, attributes, null);
|
|
35
35
|
span.method = method;
|
|
36
36
|
span.route = route;
|
|
37
|
+
if (core.options.propagateBaggageTo !== false) {
|
|
38
|
+
const baggage = sanitizeBaggage(req.headers.get('baggage'));
|
|
39
|
+
if (baggage)
|
|
40
|
+
span.baggage = baggage;
|
|
41
|
+
}
|
|
37
42
|
try {
|
|
38
43
|
const res = await core.runInSpan(span, () => handler(req, ctx));
|
|
39
44
|
span.statusCode = res.status;
|
package/dist/next.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
|
package/dist/node-http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0DjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AA0DjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CA6FhE"}
|
package/dist/node-http.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { subscribe, unsubscribe } from 'node:diagnostics_channel';
|
|
2
|
-
import { TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
|
|
2
|
+
import { BAGGAGE_HEADER, TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
|
|
3
3
|
import { httpClientSemconv, normalizePath } from './normalize.js';
|
|
4
4
|
import { shouldPropagate } from './tracker.js';
|
|
5
5
|
const CREATED = 'http.client.request.created';
|
|
@@ -50,12 +50,18 @@ export function instrumentNodeHttp(core) {
|
|
|
50
50
|
const request = message.request;
|
|
51
51
|
if (!request || typeof request.setHeader !== 'function')
|
|
52
52
|
return;
|
|
53
|
-
// Fora de um request instrumentado não há trace a que pendurar a chamada
|
|
54
|
-
|
|
53
|
+
// Fora de um request instrumentado não há trace a que pendurar a chamada; dentro de uma chamada
|
|
54
|
+
// do AWS SDK, o span `http.client` dela já cobre este HTTP (S08).
|
|
55
|
+
const parent = core.currentContext();
|
|
56
|
+
if (!core.enabled || !parent)
|
|
55
57
|
return;
|
|
56
58
|
const url = requestUrl(request);
|
|
57
59
|
if (!url)
|
|
58
60
|
return;
|
|
61
|
+
if (parent.httpCovered) {
|
|
62
|
+
core.noteCoveredHttp(url);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
59
65
|
// Nunca instrumentar a entrega ao próprio coletor: daria loop de ingestão.
|
|
60
66
|
if (`${url.origin}${url.pathname}`.startsWith(core.options.endpoint))
|
|
61
67
|
return;
|
|
@@ -75,6 +81,9 @@ export function instrumentNodeHttp(core) {
|
|
|
75
81
|
request.setHeader(TRACEPARENT_HEADER, headers[TRACEPARENT_HEADER]);
|
|
76
82
|
if (headers[TRACESTATE_HEADER] && !request.getHeader(TRACESTATE_HEADER))
|
|
77
83
|
request.setHeader(TRACESTATE_HEADER, headers[TRACESTATE_HEADER]);
|
|
84
|
+
// `baggage` só para quem também está em `propagateBaggageTo` (padrão: ninguém).
|
|
85
|
+
if (parent.baggage && !request.getHeader(BAGGAGE_HEADER) && shouldPropagate(core.options.propagateBaggageTo, url))
|
|
86
|
+
request.setHeader(BAGGAGE_HEADER, parent.baggage);
|
|
78
87
|
span.setAttribute('propagated', true);
|
|
79
88
|
}
|
|
80
89
|
catch {
|
package/dist/node-http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"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"}
|
package/dist/scrub.d.ts
CHANGED
|
@@ -1,12 +1,70 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Remoção de dados sensíveis antes
|
|
3
|
-
* conhecidas viram `[Filtered]`, em qualquer profundidade
|
|
2
|
+
* Remoção de dados sensíveis antes de enfileirar (CONTRATO.md §22):
|
|
3
|
+
* - **por chave**: valores de chaves conhecidas viram `[Filtered]`, em qualquer profundidade;
|
|
4
|
+
* - **por valor**: JWT, `Bearer`/`Basic`, cartão (Luhn), CPF formatado, chaves privadas e tokens
|
|
5
|
+
* de formato conhecido viram `[Filtered]`; `chave=valor` com chave sensível dentro de texto também;
|
|
6
|
+
* e-mails viram `<email>` (o mesmo marcador da normalização da API, §16: a fingerprint não muda);
|
|
7
|
+
* - **URLs**: sem usuário/senha; valores da query (e de parâmetros no fragmento) viram `[Filtered]`,
|
|
8
|
+
* as chaves ficam. Com `sendDefaultPii: true` só os valores de chaves sensíveis saem.
|
|
9
|
+
*
|
|
10
|
+
* Identificadores (`traceId`, `spanId`, `requestId`, `user.id`…), `user.email`/`user.name` (dados
|
|
11
|
+
* que a aplicação entregou de propósito) e o SQL já normalizado não passam pela limpeza por valor.
|
|
12
|
+
* Os padrões são lineares: nada aqui pode travar o event loop com uma string grande.
|
|
4
13
|
*/
|
|
5
14
|
export declare const DEFAULT_SCRUB_FIELDS: string[];
|
|
6
15
|
export declare const FILTERED = "[Filtered]";
|
|
16
|
+
export declare const EMAIL_PLACEHOLDER = "<email>";
|
|
17
|
+
/** Objeto ou array além de `MAX_DEPTH`: não sai sem passar pela limpeza. */
|
|
18
|
+
export declare const MAX_DEPTH_MARKER = "[MaxDepth]";
|
|
19
|
+
export interface ScrubOptions {
|
|
20
|
+
/** Chaves sensíveis (lista já resolvida; vazia desliga a limpeza por chave e por valor). */
|
|
21
|
+
fields: string[];
|
|
22
|
+
/** Mantém os valores da query string das URLs (salvo os de chave sensível). Default `false`. */
|
|
23
|
+
sendDefaultPii?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** A chave casa com um campo (sem diferenciar maiúsculas: `scrubFields: ['internalRef']` pega `internalref`). */
|
|
7
26
|
export declare function shouldScrub(key: string, fields: string[]): boolean;
|
|
8
|
-
|
|
9
|
-
|
|
27
|
+
/**
|
|
28
|
+
* JWT/JWS compacto (`eyJ…` `.` `…` `.` `…`; o cabeçalho em base64url sempre começa com `eyJ`, `{"`)
|
|
29
|
+
* → `[Filtered]`. Varredura linear: um segmento que não termina em `.` descarta todos os candidatos
|
|
30
|
+
* dentro dele de uma vez (todos acabariam no mesmo ponto). Com a expressão
|
|
31
|
+
* `\beyJ[…]{4,}\.[…]{4,}\.[…]*`, cada `eyJ` depois de um hífen relia o resto do texto procurando o
|
|
32
|
+
* ponto: `'eyJaaaa-'.repeat(16000)` levava 2 s.
|
|
33
|
+
*/
|
|
34
|
+
export declare function replaceJwts(text: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* E-mails → `<email>`. Varredura a partir de cada `@` (linear): uma expressão `[\w.]+@` testada
|
|
37
|
+
* em cada posição de uma string longa sem `@` seria quadrática.
|
|
38
|
+
*/
|
|
39
|
+
export declare function replaceEmails(text: string): string;
|
|
40
|
+
/** Limpeza por valor de um texto livre (mensagem de erro, atributo, nome de span, linha de log). */
|
|
41
|
+
export declare function scrubText(text: string, options: ScrubOptions): string;
|
|
42
|
+
/**
|
|
43
|
+
* URL sem usuário/senha e com a query limpa (`/reset?token=[Filtered]&page=[Filtered]`). Vale para
|
|
44
|
+
* URL absoluta, caminho com query e texto que não é URL válida (a limpeza é textual, sem `new URL`).
|
|
45
|
+
* Fragmento com parâmetros (`#access_token=…`, `#/cb?code=…`) segue a mesma regra da query.
|
|
46
|
+
*/
|
|
47
|
+
export declare function scrubUrl(raw: string, options: ScrubOptions): string;
|
|
48
|
+
/**
|
|
49
|
+
* Cópia limpa até `MAX_DEPTH`. `ancestors` guarda o ramo atual: um ciclo vira `[Circular]` na
|
|
50
|
+
* primeira repetição (como na serialização), e o mesmo objeto em dois ramos sai inteiro nos dois.
|
|
51
|
+
*/
|
|
52
|
+
export declare function scrubValue(value: unknown, options: ScrubOptions, depth?: number, key?: string | null, ancestors?: object[], fromToJSON?: boolean): unknown;
|
|
53
|
+
/**
|
|
54
|
+
* Atributos limpos por chave, por valor e com as URLs limpas. Com `fields` vazio (`scrubFields:
|
|
55
|
+
* false`), só as URLs passam pela regra da query (que depende de `sendDefaultPii`).
|
|
56
|
+
*/
|
|
57
|
+
export declare function scrubAttributes(attributes: Record<string, unknown>, fields: string[], options?: {
|
|
58
|
+
sendDefaultPii?: boolean;
|
|
59
|
+
}): Record<string, unknown>;
|
|
60
|
+
/** Mensagem e stack de um erro limpos por valor (o nome fica: é o tipo do erro). */
|
|
61
|
+
export declare function scrubError<T extends {
|
|
62
|
+
name: string;
|
|
63
|
+
message: string;
|
|
64
|
+
stack?: string;
|
|
65
|
+
}>(error: T, options: ScrubOptions): T;
|
|
66
|
+
/** Texto de diagnóstico (console): sempre limpo com a lista padrão, mesmo com `scrubFields: false`. */
|
|
67
|
+
export declare function scrubDiagnostic(text: string): string;
|
|
10
68
|
export declare function matchesAny(value: string, patterns: (string | RegExp)[] | undefined): boolean;
|
|
11
69
|
/**
|
|
12
70
|
* `RegExp.test` sem depender de estado: com flag `g` ou `y`, `test` começa em `lastIndex` e o
|
package/dist/scrub.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../src/scrub.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../src/scrub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,UAIhC,CAAC;AAEF,eAAO,MAAM,QAAQ,eAAe,CAAC;AACrC,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,4FAA4F;IAC5F,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gGAAgG;IAChG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAuCD,iHAAiH;AACjH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAKlE;AA4FD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BhD;AA6LD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBlD;AAgCD,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAWrE;AAiDD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAmBnE;AAaD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,SAAI,EAAE,GAAG,GAAE,MAAM,GAAG,IAAW,EAAE,SAAS,GAAE,MAAM,EAAO,EAAE,UAAU,UAAQ,GAAG,OAAO,CAmD7J;AAgBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc1J;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,GAAG,CAAC,CAM1H;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,CAG5F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CASnE"}
|