fg-tracker-sdk 0.16.0 → 0.17.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 CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog — fg-tracker-sdk
2
2
 
3
+ ## 0.17.0
4
+
5
+ Upload de source maps por gzip com limites de transporte explícitos (T08).
6
+
7
+ - O CLI `fg-tracker-sourcemaps` aceita mapas de até 15 MiB, mede o envelope JSON depois de gzip e envia lotes cujo corpo final cabe em 4 MiB, respeitando também 32 MiB descomprimidos. Um mapa que não cabe sozinho é recusado antes de qualquer envio.
8
+ - A API aceita JSON identity legado ou gzip na rota de source maps, limita o corpo recebido antes de acumular bytes descomprimidos e preserva mapas como texto ou objeto. Os limites são próprios da rota.
9
+
10
+ ## 0.16.1
11
+
12
+ Correção de compatibilidade do `node:http` (CONTRATO.md §16, T119). Nada removido, nenhuma opção nova.
13
+
14
+ - **Node 20.x e 22.0–22.11: chamadas por `node:http`/`node:https` voltam a gerar span `http.client` e a levar `traceparent`.** O SDK abria o span no canal `http.client.request.created`, que o Node só publica a partir do 22.12 (e 23.2). Nesses runtimes, nenhuma chamada do AWS SDK, axios, got, node-fetch 2, gaxios ou web-push aparecia no trace, e o serviço chamado abria outro trace. O `fetch` instrumentado não era afetado.
15
+ - Sem o canal, o mesmo aviso sai de `http.Agent.prototype.addRequest` (dentro do construtor do pedido, no contexto de quem chamou) e de `ClientRequest.prototype._implicitHeader` (pedido sem agente, como o do `ws`, ou agente que reimplementa `addRequest`), ambos antes dos headers. Um span por pedido e o `traceparent` apontando para ele, com as regras de sempre: só dentro de um trace, `propagateTraceTo`/`propagateBaggageTo`, header da aplicação preservado, coletor ignorado e uma chamada AWS = um span (S08).
16
+ - **Decidido uma vez por processo, pelo que o runtime publica**, não pela versão: uma sondagem constrói um `ClientRequest` com um agente que não conecta (sem socket, DNS ou span); se outra biblioteca já assina o canal, o SDK lê o construtor em vez de sondar, para ela não ver o pedido de teste. No Node 22.12+ nada muda: o canal nativo continua sendo o caminho, sem trocar método nenhum.
17
+ - Os dois métodos só são trocados enquanto houver um tracker ativo e voltam aos originais no último `tracker.shutdown()`. Se outra instrumentação embrulhar um deles por cima, o embrulho do SDK fica na cadeia, inerte, para não apagar o dela, e é reaproveitado por um tracker novo.
18
+ - Erro de pedido também no Node sem `http.client.request.error` (antes do 20.17 e do 22.6): o span recebe o erro por `events.errorMonitor`, que só observa (um pedido sem listener de `error` continua lançando). Antes, o span fechava só como `aborted`.
19
+
3
20
  ## 0.16.0
4
21
 
5
22
  Taxa de amostragem no span raiz (CONTRATO.md §4.6, §22). Nada removido e nenhuma opção nova. Retoma o #45 (que propunha a 0.12.0, nunca publicada) e vem depois da 0.15.0 (#58).
package/README.md CHANGED
@@ -253,6 +253,8 @@ O `fetch` cobre quem chama `fetch`. Todo o resto do ecossistema Node continua fa
253
253
 
254
254
  Vale para qualquer cliente, inclusive um que você nem sabe que existe dentro de uma dependência — e não depende de lembrar de envolver cada cliente. A implementação usa [`diagnostics_channel`](https://nodejs.org/api/diagnostics_channel.html), o ponto de observação que o próprio Node publica: nada é substituído por monkeypatch, nada quebra se outra biblioteca instrumentar o mesmo módulo, e a ordem de import não importa.
255
255
 
256
+ O canal que permite pôr o `traceparent` antes do envio (`http.client.request.created`) só existe a partir do Node 22.12 (e 23.2). No Node 20.x e no 22.0–22.11, o SDK (desde a 0.16.1) avisa o mesmo pedido por dois pontos do próprio `node:http` que rodam antes dos headers: `http.Agent.prototype.addRequest` e `ClientRequest.prototype._implicitHeader`. O resultado é o mesmo: um span por chamada, com o `traceparent` apontando para ele, para `http`/`https`, qualquer forma de chamada e `import`/`require`. O SDK decide uma vez por processo, pelo que o runtime realmente publica (uma sondagem que não abre socket nem consulta DNS), e não pela versão. Esses dois métodos só são trocados nesses runtimes, só enquanto houver um tracker ativo, e voltam aos originais no `tracker.shutdown()`. Se outra instrumentação embrulhar `addRequest` por cima, o embrulho do SDK fica na cadeia, inerte, para não apagar o dela.
257
+
256
258
  As regras são as mesmas do `fetch`: span `http.client` com o mesmo nome e `attributes.host`, só dentro de um trace em andamento (um poller de background não vira trace órfão), `traceparent` propagado conforme `propagateTraceTo` e sem tocar num header que o chamador já definiu, 5xx marcando erro no span, e chamadas ao próprio endpoint do FG Tracker ignoradas.
257
259
 
258
260
  Para desligar:
@@ -11,9 +11,16 @@
11
11
  * (caminho público onde os JS ficam; `~` = qualquer host; default `~`), --endpoint,
12
12
  * --api-key, --dry-run.
13
13
  */
14
- import { readdirSync, readFileSync, statSync } from 'node:fs';
14
+ import { closeSync, fstatSync, openSync, readdirSync, readSync, statSync } from 'node:fs';
15
+ import { createHash } from 'node:crypto';
15
16
  import { join, relative } from 'node:path';
17
+ import { gzipSync } from 'node:zlib';
16
18
  import { API_KEY_HEADER, DEFAULT_ENDPOINT, readEnv, warnLegacyBin } from '../constants.js';
19
+ const MIB = 1024 * 1024;
20
+ const MAX_MAP_BYTES = 15 * MIB;
21
+ const MAX_WIRE_BYTES = 4 * MIB;
22
+ const MAX_DECODED_BYTES = 32 * MIB;
23
+ const MAX_FILES_PER_BATCH = 20;
17
24
  function parseArgs(argv) {
18
25
  const args = {};
19
26
  for (let i = 0; i < argv.length; i += 1) {
@@ -40,6 +47,81 @@ function walk(dir, out = []) {
40
47
  }
41
48
  return out;
42
49
  }
50
+ function readMap(file) {
51
+ const descriptor = openSync(file, 'r');
52
+ try {
53
+ if (fstatSync(descriptor).size > MAX_MAP_BYTES)
54
+ throw new Error('Mapa excede o limite de 15 MiB por arquivo.');
55
+ const chunks = [];
56
+ let total = 0;
57
+ while (total <= MAX_MAP_BYTES) {
58
+ const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, MAX_MAP_BYTES + 1 - total));
59
+ const read = readSync(descriptor, chunk, 0, chunk.length, total);
60
+ if (read === 0)
61
+ break;
62
+ total += read;
63
+ if (total > MAX_MAP_BYTES)
64
+ throw new Error('Mapa excede o limite de 15 MiB por arquivo.');
65
+ chunks.push(chunk.subarray(0, read));
66
+ }
67
+ return Buffer.concat(chunks, total);
68
+ }
69
+ finally {
70
+ closeSync(descriptor);
71
+ }
72
+ }
73
+ function decodeMap(bytes) {
74
+ try {
75
+ return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
76
+ }
77
+ catch {
78
+ throw new Error('Arquivo .map não está em UTF-8 válido.');
79
+ }
80
+ }
81
+ function jsonFor(release, files) {
82
+ return JSON.stringify({ release, files });
83
+ }
84
+ function encodeBody(release, files) {
85
+ const json = jsonFor(release, files);
86
+ const decodedBytes = Buffer.byteLength(json, 'utf8');
87
+ if (decodedBytes > MAX_DECODED_BYTES)
88
+ throw new Error('Corpo descomprimido do lote excede 32 MiB.');
89
+ const body = gzipSync(Buffer.from(json, 'utf8'));
90
+ if (body.byteLength > MAX_WIRE_BYTES)
91
+ throw new Error('Corpo gzip do lote excede 4 MiB.');
92
+ return body;
93
+ }
94
+ function envelopeBytes(release, files) {
95
+ const emptyEnvelopeBytes = Buffer.byteLength(jsonFor(release, []), 'utf8');
96
+ return emptyEnvelopeBytes - 2 + files.reduce((total, file) => total + Buffer.byteLength(JSON.stringify(file), 'utf8'), 0)
97
+ + Math.max(0, files.length - 1);
98
+ }
99
+ function fileEnvelopeBytes(release, file) {
100
+ return envelopeBytes(release, [file]);
101
+ }
102
+ function hash(bytes) {
103
+ return createHash('sha256').update(bytes).digest('hex');
104
+ }
105
+ function mapPath(prefix, dir, file) {
106
+ return `${prefix}/${relative(dir, file).replace(/\\/g, '/').replace(/\.map$/, '')}`;
107
+ }
108
+ function preflightMap(file, dir, prefix, release) {
109
+ const bytes = readMap(file);
110
+ const map = decodeMap(bytes);
111
+ const uploadFile = { path: mapPath(prefix, dir, file), map };
112
+ if (fileEnvelopeBytes(release, uploadFile) > MAX_DECODED_BYTES) {
113
+ throw new Error('Corpo descomprimido de um mapa excede 32 MiB.');
114
+ }
115
+ encodeBody(release, [uploadFile]);
116
+ return { path: uploadFile.path, file, bytes: bytes.byteLength, digest: hash(bytes) };
117
+ }
118
+ function loadPreflightedMap(file) {
119
+ const bytes = readMap(file.file);
120
+ if (bytes.byteLength !== file.bytes || hash(bytes) !== file.digest) {
121
+ throw new Error('Um arquivo .map mudou durante a preparação do upload. Execute novamente o CLI.');
122
+ }
123
+ return { path: file.path, map: decodeMap(bytes) };
124
+ }
43
125
  async function main() {
44
126
  warnLegacyBin('fg-tracker-sourcemaps');
45
127
  const args = parseArgs(process.argv.slice(2));
@@ -61,13 +143,10 @@ async function main() {
61
143
  console.error(`Nenhum .map encontrado em ${dir}`);
62
144
  process.exit(1);
63
145
  }
64
- const files = maps.map((file) => ({
65
- path: `${prefix}/${relative(dir, file).replace(/\\/g, '/').replace(/\.map$/, '')}`,
66
- map: readFileSync(file, 'utf8'),
67
- }));
146
+ const preflighted = maps.map((file) => preflightMap(file, dir, prefix, release));
68
147
  if (args['dry-run']) {
69
- for (const file of files)
70
- console.log(`${file.path} (${Math.round(file.map.length / 1024)} KB)`);
148
+ for (const file of preflighted)
149
+ console.log(`${file.path} (${Math.round(file.bytes / 1024)} KB)`);
71
150
  return;
72
151
  }
73
152
  if (!apiKey) {
@@ -75,20 +154,48 @@ async function main() {
75
154
  process.exit(2);
76
155
  }
77
156
  let accepted = 0;
78
- for (let i = 0; i < files.length; i += 20) {
79
- const batch = files.slice(i, i + 20);
157
+ let batch = [];
158
+ let batchBody = null;
159
+ const sendBatch = async () => {
160
+ if (!batchBody || batch.length === 0)
161
+ return;
80
162
  const res = await fetch(`${endpoint}/v1/sourcemaps`, {
81
163
  method: 'POST',
82
- headers: { 'content-type': 'application/json', [API_KEY_HEADER]: apiKey },
83
- body: JSON.stringify({ release, files: batch }),
164
+ headers: { 'content-type': 'application/json', 'content-encoding': 'gzip', [API_KEY_HEADER]: apiKey },
165
+ body: batchBody,
84
166
  signal: AbortSignal.timeout(60_000),
85
167
  });
86
168
  if (!res.ok) {
87
- console.error(`Falha no upload (${res.status}): ${await res.text()}`);
169
+ console.error(`Falha no upload de source maps (${res.status}).`);
88
170
  process.exit(1);
89
171
  }
90
172
  accepted += (await res.json()).accepted;
173
+ batch = [];
174
+ batchBody = null;
175
+ };
176
+ for (const file of preflighted) {
177
+ const uploadFile = loadPreflightedMap(file);
178
+ let candidate = [...batch, uploadFile];
179
+ let candidateBody = null;
180
+ const decodedBytes = envelopeBytes(release, candidate);
181
+ if (batch.length < MAX_FILES_PER_BATCH && decodedBytes <= MAX_DECODED_BYTES) {
182
+ try {
183
+ candidateBody = encodeBody(release, candidate);
184
+ }
185
+ catch (error) {
186
+ if (!(error instanceof Error) || !/excede 4 MiB|excede 32 MiB/.test(error.message))
187
+ throw error;
188
+ }
189
+ }
190
+ if (!candidateBody) {
191
+ await sendBatch();
192
+ candidate = [uploadFile];
193
+ candidateBody = encodeBody(release, candidate);
194
+ }
195
+ batch = candidate;
196
+ batchBody = candidateBody;
91
197
  }
198
+ await sendBatch();
92
199
  console.log(`${accepted} source maps enviados para a release ${release}.`);
93
200
  }
94
201
  main().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemaps.js","sourceRoot":"","sources":["../../src/cli/sourcemaps.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sourcemaps.js","sourceRoot":"","sources":["../../src/cli/sourcemaps.ts"],"names":[],"mappings":"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"}
@@ -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,CA6FhE"}
1
+ {"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAoNjE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CAmGhE"}
package/dist/node-http.js CHANGED
@@ -1,10 +1,152 @@
1
- import { subscribe, unsubscribe } from 'node:diagnostics_channel';
2
- import { BAGGAGE_HEADER, TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
1
+ import { channel, subscribe, unsubscribe } from 'node:diagnostics_channel';
2
+ import { errorMonitor } from 'node:events';
3
+ import http from 'node:http';
4
+ import { als, BAGGAGE_HEADER, TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextHeaders } from './context.js';
3
5
  import { httpClientSemconv, normalizePath } from './normalize.js';
4
6
  import { shouldPropagate } from './tracker.js';
5
7
  const CREATED = 'http.client.request.created';
6
8
  const RESPONSE = 'http.client.response.finish';
7
9
  const ERROR = 'http.client.request.error';
10
+ let createdPublisher;
11
+ /**
12
+ * O runtime publica `created` no construtor do `ClientRequest`, antes dos headers?
13
+ *
14
+ * Decidido uma vez por processo, pelo que o runtime faz, não pela versão (o 22.11
15
+ * não publica, o 22.12 publica; um backport mudaria a conta) nem por
16
+ * `channel()`/`hasSubscribers`, que dizem se há inscritos, não se alguém publica.
17
+ */
18
+ function publishesCreated() {
19
+ createdPublisher ??= channel(CREATED).hasSubscribers ? constructorPublishesCreated() : probeCreated();
20
+ return createdPublisher;
21
+ }
22
+ /**
23
+ * Sondagem: um `ClientRequest` com um agente que só guarda o pedido. Nenhum
24
+ * socket, DNS ou byte na rede, e o pedido nunca termina. Roda fora de qualquer
25
+ * trace e antes de qualquer tracker deste módulo se inscrever, então não gera
26
+ * span; e só roda sem outros inscritos em `created`, então ninguém mais a vê.
27
+ */
28
+ function probeCreated() {
29
+ let probe;
30
+ let published = false;
31
+ const listener = (message) => {
32
+ if (probe && message.request === probe)
33
+ published = true;
34
+ };
35
+ const agent = { addRequest: (request) => { probe = request; } };
36
+ subscribe(CREATED, listener);
37
+ try {
38
+ als.exit(() => new http.ClientRequest({ agent: agent, host: 'fg-tracker-probe.invalid', path: '/' }));
39
+ }
40
+ catch {
41
+ // Construtor diferente do esperado: os ganchos funcionam em qualquer runtime.
42
+ }
43
+ finally {
44
+ unsubscribe(CREATED, listener);
45
+ }
46
+ return published;
47
+ }
48
+ /**
49
+ * Com outro inscrito em `created`, a sondagem chegaria a ele como um pedido de
50
+ * verdade. Então basta ler o construtor: nos runtimes com o canal, ele contém a
51
+ * publicação (`onClientRequestCreatedChannel.publish`). Se um Node futuro mudar
52
+ * esse nome, a resposta é "não" e os ganchos assumem, o que também funciona.
53
+ */
54
+ function constructorPublishesCreated() {
55
+ try {
56
+ return /CreatedChannel\.publish\(/.test(Function.prototype.toString.call(http.ClientRequest));
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ /* ----------------------------- runtimes sem `created`: aviso antes dos headers */
63
+ const createdListeners = new Set();
64
+ // Um pedido é avisado uma vez só, pelo primeiro dos dois pontos que alcançar.
65
+ const announced = new WeakSet();
66
+ function announceCreated(request) {
67
+ if (createdListeners.size === 0 || typeof request !== 'object' || request === null || announced.has(request))
68
+ return;
69
+ announced.add(request);
70
+ for (const listener of createdListeners) {
71
+ try {
72
+ listener({ request });
73
+ }
74
+ catch {
75
+ // A instrumentação nunca derruba a chamada da aplicação.
76
+ }
77
+ }
78
+ }
79
+ /**
80
+ * Os dois pontos do `node:http` que todo pedido atravessa antes dos headers irem
81
+ * para a rede, nos runtimes sem `created` (código congelado: 20.x, 22.0–22.11):
82
+ *
83
+ * - `Agent.prototype.addRequest`: chamado de dentro do construtor do
84
+ * `ClientRequest`, no mesmo contexto assíncrono de quem chamou, como o
85
+ * `created`. Vale para o agente global, `agent: false`, `new http.Agent()` e o
86
+ * `https.Agent` (que herda o método), por qualquer forma de chamada:
87
+ * `http.request`/`get`, `https.request`/`get`, `new ClientRequest`, imports ESM
88
+ * nomeados ou um `require` desestruturado antes do tracker existir.
89
+ * - `ClientRequest.prototype._implicitHeader`: onde os headers adiados são
90
+ * montados (primeiro `write`, `end` ou `flushHeaders`). Cobre o pedido sem
91
+ * agente (`createConnection`, como o do `ws`) e o agente que reimplementa
92
+ * `addRequest`; nesse caso o contexto é o de quem escreveu no pedido.
93
+ *
94
+ * Header passado como array ou com `expect` é montado no próprio construtor, e
95
+ * então nem o `created` nativo consegue propagar: o span sai, sem `traceparent`.
96
+ */
97
+ const preSendHooks = [
98
+ {
99
+ target: http.Agent.prototype,
100
+ key: 'addRequest',
101
+ wrap: (original) => function addRequest(...args) {
102
+ announceCreated(args[0]);
103
+ return Reflect.apply(original, this, args);
104
+ },
105
+ },
106
+ {
107
+ target: http.ClientRequest.prototype,
108
+ key: '_implicitHeader',
109
+ wrap: (original) => function _implicitHeader(...args) {
110
+ announceCreated(this);
111
+ return Reflect.apply(original, this, args);
112
+ },
113
+ },
114
+ ];
115
+ function listenPreSend(listener) {
116
+ createdListeners.add(listener);
117
+ if (createdListeners.size !== 1)
118
+ return;
119
+ for (const hook of preSendHooks) {
120
+ // Ainda na cadeia de uma ativação anterior (outra instrumentação embrulhou por cima): reaproveita.
121
+ if (hook.wrapper)
122
+ continue;
123
+ const original = hook.target[hook.key];
124
+ if (typeof original !== 'function')
125
+ continue;
126
+ const wrapper = hook.wrap(original);
127
+ try {
128
+ hook.target[hook.key] = wrapper;
129
+ }
130
+ catch {
131
+ continue;
132
+ }
133
+ hook.original = original;
134
+ hook.wrapper = wrapper;
135
+ }
136
+ }
137
+ function unlistenPreSend(listener) {
138
+ if (!createdListeners.delete(listener) || createdListeners.size > 0)
139
+ return;
140
+ for (const hook of preSendHooks) {
141
+ // Só desfaz o que ainda é o topo. Se outra instrumentação embrulhou por cima,
142
+ // tirar o nosso apagaria o dela: o nosso fica na cadeia, inerte sem ouvintes.
143
+ if (!hook.wrapper || hook.target[hook.key] !== hook.wrapper)
144
+ continue;
145
+ hook.target[hook.key] = hook.original;
146
+ hook.original = undefined;
147
+ hook.wrapper = undefined;
148
+ }
149
+ }
8
150
  /**
9
151
  * URL absoluta da requisição. `request.path` traz caminho + query, e o header
10
152
  * `host` traz host + porta — juntos reconstroem a origem sem depender de
@@ -91,12 +233,15 @@ export function instrumentNodeHttp(core) {
91
233
  }
92
234
  }
93
235
  // Rede de segurança: requisição abortada ou destruída sem resposta nem erro
94
- // não pode deixar o span aberto para sempre.
236
+ // não pode deixar o span aberto para sempre. O `errorMonitor` leva o erro ao
237
+ // span onde o Node não publica `http.client.request.error` (antes do 20.17 e
238
+ // do 22.6) e só observa: um pedido sem listener de `error` continua lançando.
95
239
  try {
240
+ request.on(errorMonitor, (error) => finish(request, (open) => open.setError(error)));
96
241
  request.once('close', () => finish(request, (open) => open.setAttribute('aborted', true)));
97
242
  }
98
243
  catch {
99
- // `once` indisponível: o span ainda fecha por `response.finish` ou `error`.
244
+ // `on`/`once` indisponíveis: o span ainda fecha por `response.finish` ou `error`.
100
245
  }
101
246
  };
102
247
  const onResponse = (message) => {
@@ -116,11 +261,18 @@ export function instrumentNodeHttp(core) {
116
261
  return;
117
262
  finish(request, (span) => span.setError(error));
118
263
  };
119
- subscribe(CREATED, onCreated);
264
+ const native = publishesCreated();
265
+ if (native)
266
+ subscribe(CREATED, onCreated);
267
+ else
268
+ listenPreSend(onCreated);
120
269
  subscribe(RESPONSE, onResponse);
121
270
  subscribe(ERROR, onError);
122
271
  return () => {
123
- unsubscribe(CREATED, onCreated);
272
+ if (native)
273
+ unsubscribe(CREATED, onCreated);
274
+ else
275
+ unlistenPreSend(onCreated);
124
276
  unsubscribe(RESPONSE, onResponse);
125
277
  unsubscribe(ERROR, onError);
126
278
  };
@@ -1 +1 @@
1
- {"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fg-tracker-sdk",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "SDK de instrumentação Node para o FG Tracker (Express, NestJS, Next.js, pg, fetch), tracing distribuído, releases, check-ins de jobs, envio de logs (pino, winston, NestJS Logger) e agregados de infraestrutura (AWS SDK v3, pool de conexões, ECS, Lambda)",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://github.com/FORTGROUND/fg-tracker/tree/main/packages/sdk#readme",