fg-tracker-sdk 0.17.0 → 0.19.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,21 @@
1
1
  # Changelog — fg-tracker-sdk
2
2
 
3
+ ## 0.19.0
4
+
5
+ - **Descartes locais da fila reportados à API (T60):** o SDK Node envia `clientDropped` com emissor, sequência e contagem idempotentes; `GET …/ingest-health` expõe `ingest.dropped`, separado de amostragem e recusas do servidor.
6
+ - **Saída do processo:** a tentativa de enviar o relatório de descartes fica marcada antes do flush; se um lote voltar à fila, a rotina de saída não entra em outro ciclo para tentar enviar o mesmo relatório. Novos descartes ainda rearmam a tentativa.
7
+
8
+ ## 0.18.0
9
+
10
+ Continuidade de traces com Fastify, Koa, SNS e Kinesis (T116, T129).
11
+
12
+ - `tracker.fastify()` fornece hooks `onRequest` e `onError`; `tracker.koa()` registra middleware async. Ambos criam a raiz `http.server`, continuam um `traceparent` válido e deixam handlers e chamadas descendentes no mesmo contexto. O hook Fastify `onError` preserva nome, mensagem e stack das exceções.
13
+ - `instrumentAws` injeta `traceparent` e `tracestate` no `MessageAttributes` do SNS (`Publish` e `PublishBatch`) e em objetos JSON no `Data` do Kinesis (`PutRecord` e `PutRecords`). `wrapLambda` continua traces de eventos SNS diretos, SNS entregue em envelope SQS e registros Kinesis.
14
+ - Kinesis usa 1 MiB por registro por padrão (configurável até 10 MiB) e 10 MiB por pedido; SNS usa 256 KiB por padrão (configurável de 1 KiB a 1 MiB). Erros de validação de SNS/Kinesis repetem uma vez o pedido original sem o contexto.
15
+ - SNS `Publish` com `MessageStructure: 'json'` não injeta atributos, pois esse modo não os entrega. Payloads Kinesis não JSON, atributos ou registros que já tenham `traceparent`, e mensagens sem espaço seguem sem alteração. A mensagem SNS original permanece intacta; contexto fica em atributos separados.
16
+ - **Efeito ao atualizar:** por padrão, `instrumentAws` injeta contexto no JSON de `Data` do Kinesis, alterando esses bytes. Configure `propagation: false` nesse client para preservar o payload original, sem propagação distribuída.
17
+ - O middleware Koa preserva status HTTP e `x-trace-id` em erros lançados. Exceções lançadas, inclusive `ctx.throw(4xx)`, continuam registradas como erro; uma resposta 4xx sem exceção não é tratada como erro pelo middleware.
18
+
3
19
  ## 0.17.0
4
20
 
5
21
  Upload de source maps por gzip com limites de transporte explícitos (T08).
package/README.md CHANGED
@@ -146,6 +146,35 @@ process.on('SIGTERM', () => tracker.shutdown().finally(() => process.exit(0)));
146
146
 
147
147
  O middleware cria um span raiz `http.server` por request. O nome é `${method} ${route}`; a rota vem de `req.baseUrl + req.route.path` (disponível no `finish` da resposta), com fallback para o path com uuids/números trocados por `:id`. Atributos: `url` (query sem valores), `userAgent` e, com `sendDefaultPii: true`, `ip`. O `identify` padrão grava `user.id` (`req.user.id` ou `sub`); e-mail e nome só com `sendDefaultPii: true` ou com um `identify` próprio. Status ≥ 500 vira `error`.
148
148
 
149
+ ## Fastify
150
+
151
+ ```ts
152
+ import Fastify from 'fastify';
153
+ import { createTracker } from 'fg-tracker-sdk';
154
+
155
+ const tracker = createTracker({ apiKey: process.env.FG_TRACKER_KEY!, serviceName: 'minha-api' });
156
+ const app = Fastify();
157
+ app.addHook('onRequest', tracker.fastify());
158
+ app.addHook('onError', tracker.fastifyErrorHandler());
159
+ app.get('/orders/:orderId', async () => ({ ok: true }));
160
+ ```
161
+
162
+ Registre os hooks antes dos hooks e rotas da aplicação. O `onRequest` cria uma raiz `http.server`, mantém o contexto assíncrono até a resposta terminar e continua `traceparent`/`tracestate` válidos. O `onError` registra a exceção original para preservar nome, mensagem e stack no agrupamento de issues.
163
+
164
+ ## Koa
165
+
166
+ ```ts
167
+ import Koa from 'koa';
168
+ import { createTracker } from 'fg-tracker-sdk';
169
+
170
+ const tracker = createTracker({ apiKey: process.env.FG_TRACKER_KEY!, serviceName: 'minha-api' });
171
+ const app = new Koa();
172
+ app.use(tracker.koa());
173
+ app.use(async (ctx) => { ctx.body = { ok: true }; });
174
+ ```
175
+
176
+ Registre o middleware antes dos demais. Ele cria uma raiz `http.server`, envolve a cadeia assíncrona da requisição e continua `traceparent`/`tracestate` válidos. Em erro lançado, preserva o status e inclui `x-trace-id` nos headers restaurados pela resposta de erro do Koa. Exceções lançadas, inclusive `ctx.throw(4xx)`, permanecem registradas como erro; respostas 4xx sem exceção não são marcadas como erro.
177
+
149
178
  ## NestJS (platform-express)
150
179
 
151
180
  ```ts
@@ -550,20 +579,25 @@ await sqs.send(new SendMessageCommand({ QueueUrl, MessageBody }));
550
579
  - Quando há um trace em andamento, **toda** chamada AWS (de qualquer serviço) vira um span `http.client` `AWS <serviço> <operação> <recurso>` com `attributes['aws.service']`, `aws.operation`, `aws.resourceArn`, `aws.region` e `statusCode`/erro. Esses spans seguem a amostragem normal. É **um** span por chamada: o HTTP dela (`node:http` ou fetch instrumentado) não gera um segundo `http.client` nem recebe `traceparent`, e os retries do AWS SDK aparecem como `aws.attempts` (quando > 1).
551
580
  - Nomes viram ARN quando a conta é conhecida (aprendida de ARNs/URLs vistos ou `AWS_ACCOUNT_ID`); sem conta, a API casa o nó por nome + região + serviço.
552
581
 
553
- ### Contexto pelas filas (SQS e EventBridge)
582
+ ### Contexto por filas e streams (SQS, SNS, EventBridge e Kinesis)
554
583
 
555
- Dentro de um trace, um client instrumentado leva o contexto nas mensagens: `SendMessage`/`SendMessageBatch` ganham o span `custom` `SQS publish <fila>` e o atributo de mensagem `traceparent` (e `tracestate`, quando o trace veio com um); `PutEvents` ganha `EventBridge publish <barramento>` e `"traceparent"` no `Detail` (só quando ele é um objeto JSON). As cotas de cada serviço são respeitadas: sem espaço (10 atributos, 1 MiB por mensagem, 1 MiB somando o lote do SQS ou o pedido do EventBridge), a mensagem segue exatamente como você a montou, e uma recusa por validação com o contexto é repetida sem ele. A publicação nunca falha por causa da instrumentação.
584
+ Dentro de um trace, `instrumentAws` propaga `traceparent` e `tracestate` em `MessageAttributes` no SNS (`Publish`/`PublishBatch`) e SQS (`SendMessage`/`SendMessageBatch`), em `Detail` do EventBridge (`PutEvents`) e em objetos JSON no `Data` do Kinesis (`PutRecord`/`PutRecords`). O texto SNS não muda; o Kinesis mantém os campos do objeto e só recebe os cabeçalhos quando o `Data` já é um objeto JSON e há espaço sob o limite por registro (incluindo a partition key) e o limite de 10 MiB por chamada `PutRecords` (incluindo as partition keys). O padrão por registro Kinesis é 1 MiB; configure `kinesisMaxRecordBytes` somente quando o limite efetivo do stream for maior. SNS usa o `MaximumMessageSize` do tópico, por padrão 256 KiB; `snsMaxMessageBytes` aceita de 1 KiB a 1 MiB. Mensagens não JSON, atributos já presentes e contextos sem espaço seguem sem alteração. `Publish` com `MessageStructure: 'json'` não recebe propagação: SNS não entrega atributos nesse modo, então o SDK registra um skip em vez de uma injeção.
585
+
586
+ Para SQS, respeita até 10 atributos, 1 MiB por mensagem e 1 MiB por lote. SNS respeita até 10 atributos e o tamanho configurado do tópico (256 KiB por padrão); EventBridge respeita 1 MiB por pedido. Kinesis respeita 1 MiB por registro por padrão (configurável até 10 MiB) e 10 MiB por pedido. Se o limite efetivo do serviço for menor que o configurado, erros de validação reconhecidos de SNS/Kinesis repetem uma vez o pedido original sem o contexto. Se o original também for inválido, o erro do serviço é devolvido; não há retry quando o serviço pode já ter aceitado a publicação.
556
587
 
557
588
  ```ts
558
589
  const sqs = tracker.instrumentAws(new SQSClient({}), {
559
590
  propagation: true, // default (false desliga; propagateTraceTo: false também)
560
591
  sqsMaxMessageBytes: 262_144, // MaximumMessageSize da fila, se for menor que 1 MiB
561
592
  });
593
+
594
+ tracker.instrumentAws(new SNSClient({}), { snsMaxMessageBytes: 1_048_576 });
595
+ tracker.instrumentAws(new KinesisClient({}), { kinesisMaxRecordBytes: 10 * 1_048_576 });
562
596
  ```
563
597
 
564
598
  Em fila FIFO o SDK nunca reenvia uma entrada do lote fora de ordem. Por isso, em `SendMessageBatch` sem `sqsMaxMessageBytes`, ele só põe o contexto em mensagens que ficam com até 1 KiB (o menor `MaximumMessageSize` possível); informe o limite da fila para propagar também nas maiores. Se o limite informado passar do real, o SQS recusa o lote FIFO inteiro e o SDK o repete inteiro sem o contexto, na ordem. O `SendMessage` avulso usa o limite configurado também em FIFO: uma recusa não publica nada e o pedido é repetido sem o contexto.
565
599
 
566
- **Efeito no EventBridge:** quem consome o evento passa a ver a chave `traceparent` no `detail`. Se o consumidor valida um schema estrito, use `propagation: false` nesse client.
600
+ **Efeito no EventBridge e no Kinesis:** consumidores passam a ver `traceparent` no `detail` do EventBridge ou no objeto JSON do Kinesis. Se o consumidor valida schema estrito, use `propagation: false` nesse client.
567
601
 
568
602
  ### Consumidores de fila
569
603
 
@@ -587,7 +621,7 @@ await tracker.trackMessage(QueueUrl, () => handle(message));
587
621
 
588
622
  - `trackMessage(queue, record, fn)` e `trackMessage(queue, fn, { record })` aceitam o record do evento da Lambda ou a `Message` do `ReceiveMessage`. O span `custom` `SQS process <fila>` continua o trace do produtor (aparece em jobs e no waterfall de quem publicou), com `messaging.message.receive.latency` (ms desde o envio) e `messaging.message.retry.count`. Cada mensagem tem o próprio contexto, inclusive em `Promise.all`.
589
623
  - No `ReceiveMessage`, o SDK pede `traceparent`/`tracestate` e `SentTimestamp`/`ApproximateReceiveCount` sem mudar o que você recebe: o que só ele pediu sai da resposta, com o `MD5OfMessageAttributes` recalculado.
590
- - `wrapLambda` continua o trace de eventos de origem única (um record SQS, EventBridge com `detail.traceparent`, HTTP com `traceparent`); um lote de mensagens fica num trace próprio, com `attributes.links` apontando para cada produtor (`continueTrace: false` desliga).
624
+ - `wrapLambda` continua o trace de eventos de origem única (SQS, SNS direto ou dentro do envelope SQS, Kinesis com JSON em `data`, EventBridge com `detail.traceparent`, HTTP com `traceparent`); lotes ficam num trace próprio, com `attributes.links` apontando para cada produtor (`continueTrace: false` desliga).
591
625
  - A flag `00` do `traceparent` recebido vale por padrão: um chamador HTTP ou produtor com `…-00` faz a invocação e o erro dela não serem enviados. Para uma Lambda (ou API) pública, `respectUpstreamSampling: { http: false }` decide a amostragem localmente para entradas HTTP (Express, `wrapNextRoute`, eventos HTTP da Lambda) e continua respeitando os produtores de filas (`messaging`). Outra saída é `sendUnsampledErrors: true`.
592
626
  - O cache do `ReceiveMessage` guarda só o contexto W3C válido (atributos enormes de um produtor não ficam na memória) e, mesmo sem contexto, o atraso e as tentativas.
593
627
  - Mede `processingMsSum`/`processingMsMax` e conta `errors` quando `fn` lança (o erro é relançado).
@@ -0,0 +1,5 @@
1
+ import type { TrackerCore } from './tracker.js';
2
+ import type { FastifyErrorHook, FastifyHook, FastifyOptions } from './types.js';
3
+ export declare function createFastifyHook(core: TrackerCore, options?: FastifyOptions): FastifyHook;
4
+ export declare function createFastifyErrorHook(core: TrackerCore): FastifyErrorHook;
5
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAsB,MAAM,YAAY,CAAC;AAwBpG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,cAAmB,GAAG,WAAW,CA6D9F;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAK1E"}
@@ -0,0 +1,90 @@
1
+ import { parseTraceContext, sanitizeBaggage } from './context.js';
2
+ import { normalizePath } from './normalize.js';
3
+ const spansByCore = new WeakMap();
4
+ function requestSpans(core) {
5
+ let spans = spansByCore.get(core);
6
+ if (!spans) {
7
+ spans = new WeakMap();
8
+ spansByCore.set(core, spans);
9
+ }
10
+ return spans;
11
+ }
12
+ function headerValue(value) {
13
+ return Array.isArray(value) ? value[0] : value;
14
+ }
15
+ function routePath(request) {
16
+ const route = request.routeOptions?.url;
17
+ return normalizePath(typeof route === 'string' && route ? route : request.url ?? '/');
18
+ }
19
+ export function createFastifyHook(core, options = {}) {
20
+ const continueTrace = options.continueTrace ?? true;
21
+ return function fgTrackerFastifyHook(request, reply, done) {
22
+ if (!core.enabled) {
23
+ done();
24
+ return;
25
+ }
26
+ const method = (request.method ?? 'GET').toUpperCase();
27
+ const rawUrl = request.url ?? '/';
28
+ const route = routePath(request);
29
+ const requestId = headerValue(request.headers['x-request-id']) ?? request.id ?? null;
30
+ const attributes = {
31
+ url: rawUrl,
32
+ userAgent: headerValue(request.headers['user-agent']) ?? null,
33
+ ...(core.options.sendDefaultPii ? { ip: request.ip ?? headerValue(request.headers['x-forwarded-for'])?.split(',')[0]?.trim() ?? request.socket?.remoteAddress ?? null } : {}),
34
+ ...(requestId ? { requestId } : {}),
35
+ };
36
+ const remote = continueTrace ? parseTraceContext(request.headers.traceparent, request.headers.tracestate) : undefined;
37
+ const span = remote
38
+ ? core.startRemoteRoot('http.server', `${method} ${route}`, attributes, remote, { origin: 'http' })
39
+ : core.startSpan('http.server', `${method} ${route}`, attributes, null);
40
+ const spans = requestSpans(core);
41
+ spans.set(request, span);
42
+ span.method = method;
43
+ span.route = route;
44
+ if (continueTrace && core.options.propagateBaggageTo !== false) {
45
+ const baggage = sanitizeBaggage(request.headers.baggage);
46
+ if (baggage)
47
+ span.baggage = baggage;
48
+ }
49
+ if (typeof reply.header === 'function' && !reply.getHeader?.('x-trace-id') && !reply.raw.getHeader?.('x-trace-id')) {
50
+ reply.header('x-trace-id', span.traceId);
51
+ }
52
+ let doneOnce = false;
53
+ const finish = (aborted) => {
54
+ if (doneOnce)
55
+ return;
56
+ doneOnce = true;
57
+ span.route = routePath(request);
58
+ span.name = `${method} ${span.route}`;
59
+ span.statusCode = reply.statusCode ?? reply.raw.statusCode ?? null;
60
+ if (aborted) {
61
+ span.setAttribute('aborted', true);
62
+ if (!span.error)
63
+ span.error = { name: 'ClientAborted', message: 'conexão encerrada antes da resposta' };
64
+ }
65
+ else if (typeof span.statusCode === 'number' && span.statusCode >= 500 && !span.error) {
66
+ span.error = { name: 'HttpError', message: `HTTP ${span.statusCode}` };
67
+ }
68
+ spans.delete(request);
69
+ span.end();
70
+ };
71
+ reply.raw.once('finish', () => finish(false));
72
+ reply.raw.once('close', () => finish(!doneOnce));
73
+ core.runInSpan(span, () => {
74
+ try {
75
+ done();
76
+ }
77
+ catch (error) {
78
+ span.setError(error);
79
+ throw error;
80
+ }
81
+ });
82
+ };
83
+ }
84
+ export function createFastifyErrorHook(core) {
85
+ return function fgTrackerFastifyErrorHook(request, _reply, error, done) {
86
+ requestSpans(core).get(request)?.setError(error);
87
+ done();
88
+ };
89
+ }
90
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../src/fastify.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type { DatabaseInstrumentationOptions, DatabaseOperation, PostgresSqlLike } from "./database.js";
2
2
  import type { Tracker, TrackerOptions } from './types.js';
3
- export type { ActiveSpan, CheckInHandle, CheckInOptions, ExpressErrorMiddleware, ExpressLikeRequest, ExpressLikeResponse, ExpressMiddleware, ExpressOptions, InfraOptions, NextRouteHandler, PgPoolLike, PropagationTargets, RegisterReleaseInput, ReleaseCommitInput, SamplingContext, Span, SpanError, SpanKind, Tracker, TrackerOptions, UpstreamSamplingOrigin, UpstreamSamplingPolicy, UserRef, } from './types.js';
3
+ export type { ActiveSpan, CheckInHandle, CheckInOptions, ExpressErrorMiddleware, ExpressLikeRequest, ExpressLikeResponse, ExpressMiddleware, ExpressOptions, FastifyHook, FastifyErrorHook, FastifyLikeReply, FastifyLikeRequest, FastifyOptions, KoaContextLike, KoaMiddleware, KoaOptions, InfraOptions, NextRouteHandler, PgPoolLike, PropagationTargets, RegisterReleaseInput, ReleaseCommitInput, SamplingContext, Span, SpanError, SpanKind, Tracker, TrackerOptions, UpstreamSamplingOrigin, UpstreamSamplingPolicy, UserRef, } from './types.js';
4
4
  export type { MeasureOptions } from './measure.js';
5
5
  export type { NestContainerLike, NestInstrumentationOptions } from './nest.js';
6
6
  export { MIN_POOL_WAIT_MS } from './pool-wait.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { instrumentPostgresClient, instrumentDatabaseClient, startDatabaseSpan, databaseError } from "./database.js";
2
2
  import { createExpressErrorHandler, createExpressMiddleware } from './express.js';
3
+ import { createFastifyErrorHook, createFastifyHook } from './fastify.js';
3
4
  import { createInstrumentedFetch } from './fetch.js';
4
5
  import { installGlobalErrorCapture } from './global-errors.js';
5
6
  import { createMonitor, runCheckIn } from './monitors.js';
@@ -8,6 +9,7 @@ import { instrumentNestContainer } from './nest.js';
8
9
  import { instrumentNodeHttp } from './node-http.js';
9
10
  import { wrapNextRouteHandler } from './next.js';
10
11
  import { instrumentPgPool } from './pg.js';
12
+ import { createKoaMiddleware } from './koa.js';
11
13
  import { registerRelease } from './releases.js';
12
14
  import { TrackerCore } from './tracker.js';
13
15
  import { instrumentAwsClient, trackQueueMessage } from './infra/aws.js';
@@ -52,6 +54,9 @@ export function createTracker(options) {
52
54
  const uninstallGlobalErrors = options.captureGlobalErrors && core.enabled ? installGlobalErrorCapture(core) : undefined;
53
55
  const tracker = {
54
56
  express: (expressOptions) => createExpressMiddleware(core, expressOptions),
57
+ fastify: (fastifyOptions) => createFastifyHook(core, fastifyOptions),
58
+ fastifyErrorHandler: () => createFastifyErrorHook(core),
59
+ koa: (koaOptions) => createKoaMiddleware(core, koaOptions),
55
60
  expressErrorHandler: () => createExpressErrorHandler(core),
56
61
  instrumentPostgres: (client) => instrumentPostgresClient(core, client),
57
62
  instrumentDatabase: (client, options) => instrumentDatabaseClient(core, client, options),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,10 @@ export interface AwsInstrumentationOptions {
57
57
  sqsMaxMessageBytes?: number;
58
58
  /** Limite do pedido `PutEvents` (soma das entradas). Default 1 MiB. */
59
59
  eventBridgeMaxRequestBytes?: number;
60
+ /** Tamanho máximo configurado por mensagem SNS (`MaximumMessageSize`). Default do tópico SNS: 256 KiB. */
61
+ snsMaxMessageBytes?: number;
62
+ /** Tamanho máximo configurado por registro Kinesis, incluindo partition key. Default do stream: 1 MiB. */
63
+ kinesisMaxRecordBytes?: number;
60
64
  }
61
65
  /** Mensagens recebidas por clients instrumentados deste tracker (contexto lido antes de retirar os atributos). */
62
66
  export declare function receivedMessages(core: TrackerCore): ReceivedMessages;
@@ -1 +1 @@
1
- {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../src/infra/aws.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAA8B,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAUL,gBAAgB,EAWjB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AAEH,iGAAiG;AACjG,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE;QACf,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,KAAK,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC/H,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5J,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA2ED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIlG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgBpF;AA6PD,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC;AAID,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAOpE;AAoBD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAYlD;AAuJD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,yBAA8B,GAAG,CAAC,CAyQrI;AAED,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CA6D5I"}
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../src/infra/aws.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAA8B,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAoBL,gBAAgB,EAWjB,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AAEH,iGAAiG;AACjG,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE;QACf,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,KAAK,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC/H,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5J,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA2ED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIlG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgBpF;AA6PD,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,0GAA0G;IAC1G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0GAA0G;IAC1G,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAID,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAOpE;AAoBD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAYlD;AAmSD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,yBAA8B,GAAG,CAAC,CA6QrI;AAED,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CA6D5I"}
package/dist/infra/aws.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { performance } from 'node:perf_hooks';
2
2
  import { als } from '../context.js';
3
3
  import { isBedrockRuntime, startBedrockCall } from '../genai/bedrock.js';
4
- import { EVENTBRIDGE_MAX_REQUEST_BYTES, eventBridgeEntryBytes, injectEventBridgeContext, injectSqsContext, isValidationCode, isValidationError, metaContext, planReceive, readSqsMessage, ReceivedMessages, SQS_MAX_BATCH_BYTES, SQS_MAX_MESSAGE_BYTES, SQS_MIN_MESSAGE_BYTES, sqsAttributesMd5, sqsMessageBytes, stripReceivedMessage, uniqueLinks, } from './messaging.js';
4
+ import { EVENTBRIDGE_MAX_REQUEST_BYTES, KINESIS_HARD_MAX_RECORD_BYTES, KINESIS_MAX_REQUEST_BYTES, KINESIS_MAX_RECORD_BYTES, SNS_HARD_MAX_MESSAGE_BYTES, SNS_MIN_MESSAGE_BYTES, SNS_MAX_MESSAGE_BYTES, eventBridgeEntryBytes, injectEventBridgeContext, injectKinesisContext, injectSnsContext, injectSqsContext, isValidationCode, isValidationError, metaContext, planReceive, readSqsMessage, readSnsMessage, readKinesisRecord, ReceivedMessages, SQS_MAX_BATCH_BYTES, SQS_MAX_MESSAGE_BYTES, SQS_MIN_MESSAGE_BYTES, sqsAttributesMd5, sqsMessageBytes, stripReceivedMessage, uniqueLinks, } from './messaging.js';
5
5
  const PATCHED = Symbol.for('fg-tracker.aws.patched');
6
6
  const SERVICE_IDS = {
7
7
  sqs: 'sqs',
@@ -506,6 +506,155 @@ function sqsPublishPlan(args, operation, ref, configured) {
506
506
  }
507
507
  return null;
508
508
  }
509
+ function snsPublishPlan(args, operation, ref, maxMessageBytes) {
510
+ const input = obj(args.input);
511
+ const topicName = ref?.resourceName ?? str(input.TopicArn) ?? 'topic';
512
+ const base = {
513
+ 'messaging.system': 'aws_sns',
514
+ 'messaging.operation.type': 'send',
515
+ 'messaging.operation.name': operation,
516
+ 'messaging.destination.name': topicName,
517
+ ...(ref?.resourceArn ? { 'aws.resourceArn': ref.resourceArn } : {}),
518
+ };
519
+ if (operation === 'Publish') {
520
+ const unsupportedStructure = input.MessageStructure === 'json';
521
+ return {
522
+ name: `SNS publish ${topicName}`,
523
+ attributes: base,
524
+ inject(ctx) {
525
+ if (unsupportedStructure)
526
+ return { args, injected: new Set(), skipped: ['unsupported_structure'] };
527
+ const result = injectSnsContext(input, ctx, Number.POSITIVE_INFINITY, maxMessageBytes);
528
+ return {
529
+ args: result.injected ? { ...args, input: result.entry } : args,
530
+ injected: new Set(result.injected ? ['message'] : []),
531
+ skipped: result.skipped && result.skipped !== 'present' ? [result.skipped] : [],
532
+ };
533
+ },
534
+ restore: (output) => output,
535
+ };
536
+ }
537
+ if (operation !== 'PublishBatch')
538
+ return null;
539
+ const entries = arr(input.PublishBatchRequestEntries).map(obj);
540
+ if (entries.length === 0)
541
+ return null;
542
+ const originals = new Map(entries.map((entry) => [String(entry.Id), entry]));
543
+ return {
544
+ name: `SNS publish ${topicName}`,
545
+ attributes: { ...base, 'messaging.batch.message_count': entries.length },
546
+ inject(ctx) {
547
+ let remaining = maxMessageBytes - entries.reduce((sum, entry) => sum + sqsMessageBytes(entry.Message, entry.MessageAttributes), 0);
548
+ const injected = new Set();
549
+ const skipped = [];
550
+ const next = entries.map((entry) => {
551
+ const result = injectSnsContext(entry, ctx, Math.max(0, remaining), maxMessageBytes);
552
+ if (result.injected) {
553
+ remaining -= result.addedBytes;
554
+ injected.add(String(entry.Id));
555
+ }
556
+ else if (result.skipped && result.skipped !== 'present')
557
+ skipped.push(result.skipped);
558
+ return result.entry;
559
+ });
560
+ return { args: injected.size ? { ...args, input: { ...input, PublishBatchRequestEntries: next } } : args, injected, skipped };
561
+ },
562
+ restore: (output) => output,
563
+ retryEntries(output, injected) {
564
+ const failed = arr(output.Failed).map(obj).filter((item) => injected.has(String(item.Id)) && isValidationCode(item.Code ?? item.ErrorCode));
565
+ if (failed.length === 0)
566
+ return null;
567
+ const retry = failed.map((item) => originals.get(String(item.Id))).filter(Boolean);
568
+ return {
569
+ args: { ...args, input: { ...input, PublishBatchRequestEntries: retry } },
570
+ merge(first, retried) {
571
+ const retriedIds = new Set([...arr(retried.Successful), ...arr(retried.Failed)].map((item) => String(obj(item).Id)));
572
+ return {
573
+ ...first,
574
+ Successful: [...arr(first.Successful).filter((item) => !retriedIds.has(String(obj(item).Id))), ...arr(retried.Successful)],
575
+ Failed: [...arr(first.Failed).filter((item) => !retriedIds.has(String(obj(item).Id))), ...arr(retried.Failed)],
576
+ };
577
+ },
578
+ };
579
+ },
580
+ };
581
+ }
582
+ function kinesisPublishPlan(args, operation, ref, maxRecordBytes) {
583
+ if (operation !== 'PutRecord' && operation !== 'PutRecords')
584
+ return null;
585
+ const input = obj(args.input);
586
+ const streamName = ref?.resourceName ?? str(input.StreamName) ?? str(input.StreamARN) ?? 'stream';
587
+ const base = {
588
+ 'messaging.system': 'aws_kinesis',
589
+ 'messaging.operation.type': 'send',
590
+ 'messaging.operation.name': operation,
591
+ 'messaging.destination.name': streamName,
592
+ ...(ref?.resourceArn ? { 'aws.resourceArn': ref.resourceArn } : {}),
593
+ };
594
+ if (operation === 'PutRecord') {
595
+ return {
596
+ name: `Kinesis publish ${streamName}`,
597
+ attributes: base,
598
+ inject(ctx) {
599
+ const result = injectKinesisContext(input, ctx, Number.POSITIVE_INFINITY, maxRecordBytes);
600
+ return {
601
+ args: result.injected ? { ...args, input: result.entry } : args,
602
+ injected: new Set(result.injected ? ['record'] : []),
603
+ skipped: result.skipped && result.skipped !== 'present' ? [result.skipped] : [],
604
+ };
605
+ },
606
+ restore: (output) => output,
607
+ };
608
+ }
609
+ const entries = arr(input.Records).map(obj);
610
+ if (entries.length === 0)
611
+ return null;
612
+ return {
613
+ name: `Kinesis publish ${streamName}`,
614
+ attributes: { ...base, 'messaging.batch.message_count': entries.length },
615
+ inject(ctx) {
616
+ let remaining = KINESIS_MAX_REQUEST_BYTES - entries.reduce((sum, entry) => {
617
+ const dataBytes = typeof entry.Data === 'string'
618
+ ? Buffer.byteLength(entry.Data)
619
+ : entry.Data instanceof Uint8Array ? entry.Data.byteLength : 0;
620
+ const partitionKeyBytes = typeof entry.PartitionKey === 'string' ? Buffer.byteLength(entry.PartitionKey) : 0;
621
+ return sum + dataBytes + partitionKeyBytes;
622
+ }, 0);
623
+ const injected = new Set();
624
+ const skipped = [];
625
+ const next = entries.map((entry, index) => {
626
+ const result = injectKinesisContext(entry, ctx, Math.max(0, remaining), maxRecordBytes);
627
+ if (result.injected) {
628
+ remaining -= result.addedBytes;
629
+ injected.add(String(index));
630
+ }
631
+ else if (result.skipped && result.skipped !== 'present')
632
+ skipped.push(result.skipped);
633
+ return result.entry;
634
+ });
635
+ return { args: injected.size ? { ...args, input: { ...input, Records: next } } : args, injected, skipped };
636
+ },
637
+ restore: (output) => output,
638
+ retryEntries(output, injected) {
639
+ const records = arr(output.Records).map(obj);
640
+ const indexes = records.flatMap((record, index) => injected.has(String(index)) && isValidationCode(record.ErrorCode) ? [index] : []);
641
+ if (indexes.length === 0)
642
+ return null;
643
+ return {
644
+ args: { ...args, input: { ...input, Records: indexes.map((index) => entries[index]) } },
645
+ merge(first, retried) {
646
+ const merged = arr(first.Records).slice();
647
+ const again = arr(retried.Records);
648
+ indexes.forEach((index, position) => {
649
+ if (again[position] !== undefined)
650
+ merged[index] = again[position];
651
+ });
652
+ return { ...first, Records: merged, FailedRecordCount: merged.filter((item) => obj(item).ErrorCode).length };
653
+ },
654
+ };
655
+ },
656
+ };
657
+ }
509
658
  function eventBridgePublishPlan(args, limits) {
510
659
  const input = obj(args.input);
511
660
  const entries = arr(input.Entries).map(obj);
@@ -584,6 +733,8 @@ export function instrumentAwsClient(core, client, options = {}) {
584
733
  declared: options.sqsMaxMessageBytes !== undefined,
585
734
  };
586
735
  const eventBridgeLimits = { requestBytes: Math.min(EVENTBRIDGE_MAX_REQUEST_BYTES, Math.max(1024, options.eventBridgeMaxRequestBytes ?? EVENTBRIDGE_MAX_REQUEST_BYTES)) };
736
+ const snsMaxMessageBytes = Math.min(SNS_HARD_MAX_MESSAGE_BYTES, Math.max(SNS_MIN_MESSAGE_BYTES, options.snsMaxMessageBytes ?? SNS_MAX_MESSAGE_BYTES));
737
+ const kinesisMaxRecordBytes = Math.min(KINESIS_HARD_MAX_RECORD_BYTES, Math.max(KINESIS_MAX_RECORD_BYTES, options.kinesisMaxRecordBytes ?? KINESIS_MAX_RECORD_BYTES));
587
738
  let regionPromise = null;
588
739
  let endpointPromise = null;
589
740
  const middleware = (next, context) => async (args) => {
@@ -766,8 +917,12 @@ export function instrumentAwsClient(core, client, options = {}) {
766
917
  try {
767
918
  if (service === 'sqs')
768
919
  publish = sqsPublishPlan(callArgs, operation, info.primary, sqsLimits);
920
+ else if (service === 'sns')
921
+ publish = snsPublishPlan(callArgs, operation, info.primary, snsMaxMessageBytes);
769
922
  else if (service === 'eventbridge' && operation === 'PutEvents')
770
923
  publish = eventBridgePublishPlan(callArgs, eventBridgeLimits);
924
+ else if (service === 'kinesis')
925
+ publish = kinesisPublishPlan(callArgs, operation, info.primary, kinesisMaxRecordBytes);
771
926
  }
772
927
  catch {
773
928
  publish = null;