fg-tracker-sdk 0.22.0 → 0.23.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,12 @@
1
1
  # Changelog — fg-tracker-sdk
2
2
 
3
+ ## 0.23.0
4
+
5
+ Sucede a 0.22.0 (métricas de processo, T118).
6
+
7
+ - **Flush de route handlers Next.js em serverless (T128):** `wrapNextRoute` encerra o span e aguarda o envio da fila por até 1 segundo antes de devolver a `Response` ou relançar a exceção original. Usa o transporte e os limites existentes, inclusive em invocações concorrentes, sem chamar `shutdown()` nem consumir o corpo da resposta.
8
+ - **Efeito ao atualizar:** cada route handler do App Router no runtime Node passa a aguardar esse flush. Uma falha de coleta não substitui a resposta nem o erro da aplicação; backoff, timeout ou indisponibilidade podem deixar itens na memória. A medição termina no retorno da `Response`, sem acompanhar streaming posterior ou tarefas soltas. Pages Router, middleware, server actions e Edge continuam sem adapter próprio.
9
+
3
10
  ## 0.22.0
4
11
 
5
12
  Sucede a 0.21.0 (nomes semconv estáveis, T114).
package/README.md CHANGED
@@ -239,13 +239,18 @@ export const tracker = createTracker({ apiKey: process.env.FG_TRACKER_KEY!, endp
239
239
 
240
240
  // app/api/users/[id]/route.ts
241
241
  import { tracker } from '@/lib/tracker';
242
+ export const runtime = 'nodejs';
242
243
  export const GET = tracker.wrapNextRoute(async (req, ctx) => {
243
244
  const user = await db.query('select * from users where id = $1', [id]);
244
245
  return Response.json(user);
245
246
  });
246
247
  ```
247
248
 
248
- O span `http.server` recebe `${method} ${pathname normalizado}` e o status da `Response`. Só funciona no runtime Node (não no Edge) e só em route handlers do App Router; não espera o envio no fim da requisição, então em plataformas que congelam a função (Vercel e afins) a fila pode se perder. Em `output: 'export'` não há route handlers dinâmicos, então nada a instrumentar.
249
+ O span `http.server` recebe `${method} ${pathname normalizado}` e o status da `Response`. O wrapper encerra o span e aguarda o envio da fila por até **1 segundo** antes de devolver a resposta ou relançar a exceção original, inclusive em plataformas que congelam a função (Vercel e afins). Não é necessário chamar `flush()` manualmente nem `shutdown()` por requisição; reutilize o tracker entre invocações.
250
+
251
+ Falha de coleta não substitui a resposta nem a exceção do handler. O prazo inclui a fila compartilhada do tracker; backoff, indisponibilidade ou timeout podem deixar itens na memória, sem garantia de entrega após o congelamento. A medição termina ao devolver a `Response`: o wrapper não consome seu corpo e não acompanha o restante de um stream ou tarefas que continuem depois do retorno.
252
+
253
+ O adapter cobre somente route handlers do App Router no runtime **Node**. Pages Router (API/SSR), middleware, server actions e Edge não têm adapter próprio. Em `output: 'export'` não há route handlers dinâmicos para instrumentar.
249
254
 
250
255
  ## pg
251
256
 
package/dist/next.d.ts CHANGED
@@ -4,6 +4,7 @@ import type { NextRouteHandler } from './types.js';
4
4
  * Envolve um route handler do App Router (`export const GET = tracker.wrapNextRoute(...)`)
5
5
  * num span raiz `http.server`. Status vem da `Response`; exceções viram `error`.
6
6
  * Continua o trace de um `traceparent` recebido (CONTRATO.md §16).
7
+ * Aguarda o envio por até 1 s antes do retorno para suportar congelamento serverless.
7
8
  */
8
9
  export declare function wrapNextRouteHandler<TCtx>(core: TrackerCore, handler: NextRouteHandler<TCtx>): NextRouteHandler<TCtx>;
9
10
  //# sourceMappingURL=next.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CA4CrH"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CA6CrH"}
package/dist/next.js CHANGED
@@ -1,9 +1,11 @@
1
1
  import { parseTraceContext, sanitizeBaggage } from './context.js';
2
2
  import { normalizePath } from './normalize.js';
3
+ import { flushWithTimeout } from './infra/lambda.js';
3
4
  /**
4
5
  * Envolve um route handler do App Router (`export const GET = tracker.wrapNextRoute(...)`)
5
6
  * num span raiz `http.server`. Status vem da `Response`; exceções viram `error`.
6
7
  * Continua o trace de um `traceparent` recebido (CONTRATO.md §16).
8
+ * Aguarda o envio por até 1 s antes do retorno para suportar congelamento serverless.
7
9
  */
8
10
  export function wrapNextRouteHandler(core, handler) {
9
11
  return async function fgTrackerRoute(req, ctx) {
@@ -54,6 +56,7 @@ export function wrapNextRouteHandler(core, handler) {
54
56
  }
55
57
  finally {
56
58
  span.end();
59
+ await flushWithTimeout(core, 1000);
57
60
  }
58
61
  };
59
62
  }
package/dist/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.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.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "SDK de instrumentação Node para o FG Tracker (Express, Fastify, Koa, 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",