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 +17 -0
- package/README.md +2 -0
- package/dist/cli/sourcemaps.js +119 -12
- package/dist/cli/sourcemaps.js.map +1 -1
- package/dist/node-http.d.ts.map +1 -1
- package/dist/node-http.js +158 -6
- package/dist/node-http.js.map +1 -1
- package/package.json +1 -1
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:
|
package/dist/cli/sourcemaps.js
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
70
|
-
console.log(`${file.path} (${Math.round(file.
|
|
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
|
-
|
|
79
|
-
|
|
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:
|
|
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})
|
|
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":";AACA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"sourcemaps.js","sourceRoot":"","sources":["../../src/cli/sourcemaps.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":"
|
|
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 {
|
|
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`
|
|
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
|
-
|
|
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
|
-
|
|
272
|
+
if (native)
|
|
273
|
+
unsubscribe(CREATED, onCreated);
|
|
274
|
+
else
|
|
275
|
+
unlistenPreSend(onCreated);
|
|
124
276
|
unsubscribe(RESPONSE, onResponse);
|
|
125
277
|
unsubscribe(ERROR, onError);
|
|
126
278
|
};
|
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;
|
|
1
|
+
{"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AAyCjE,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAC9C,MAAM,QAAQ,GAAG,6BAA6B,CAAC;AAC/C,MAAM,KAAK,GAAG,2BAA2B,CAAC;AAI1C,IAAI,gBAAqC,CAAC;AAE1C;;;;;;GAMG;AACH,SAAS,gBAAgB;IACvB,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACtG,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY;IACnB,IAAI,KAAyB,CAAC;IAC9B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAQ,EAAE;QAC1C,IAAI,KAAK,IAAK,OAAiC,CAAC,OAAO,KAAK,KAAK;YAAE,SAAS,GAAG,IAAI,CAAC;IACtF,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,KAA8B,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACjI,CAAC;IAAC,MAAM,CAAC;QACP,8EAA8E;IAChF,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B;IAClC,IAAI,CAAC;QACH,OAAO,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAChG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,mFAAmF;AAEnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAmB,CAAC;AACpD,8EAA8E;AAC9E,MAAM,SAAS,GAAG,IAAI,OAAO,EAAU,CAAC;AAExC,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IACrH,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;AACH,CAAC;AAUD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,YAAY,GAAkB;IAClC;QACE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,SAA+C;QAClE,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CACjB,SAAS,UAAU,CAAgB,GAAG,IAAe;YACnD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;KACJ;IACD;QACE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,SAA+C;QAC1E,GAAG,EAAE,iBAAiB;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CACjB,SAAS,eAAe,CAAgB,GAAG,IAAe;YACxD,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;KACJ;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,QAAyB;IAC9C,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IACxC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,mGAAmG;QACnG,IAAI,IAAI,CAAC,OAAO;YAAE,SAAS;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,SAAS;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAA2C,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,QAA2C,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB;IAChD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO;IAC5E,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,SAAS;QACtE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,OAA0B;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACtF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,yEAAyE;IACzE,4EAA4E;IAC5E,yCAAyC;IACzC,MAAM,KAAK,GAAG,IAAI,OAAO,EAAsB,CAAC;IAEhD,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,KAAiC,EAAQ,EAAE;QAC1E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,kEAAkE;QAClE,iEAAiE;QACjE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAQ,EAAE;QAC3C,MAAM,OAAO,GAAI,OAA2C,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU;YAAE,OAAO;QAChE,gGAAgG;QAChG,kEAAkE;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM;YAAE,OAAO;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,2EAA2E;QAC3E,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO;QAE7E,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE;YAClG,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;YAC3C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,GAAG,iBAAiB,CAAC,GAAG,CAAC;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzB,gFAAgF;QAChF,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC;YAC1H,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAE,CAAC,CAAC;gBACpE,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC;oBAAE,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1I,gFAAgF;gBAChF,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;oBAAE,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrK,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,kFAAkF;YACpF,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,8EAA8E;QAC9E,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACP,kFAAkF;QACpF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAQ,EAAE;QAC5C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAwD,CAAC;QACvF,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC;YAC3C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG;gBAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,MAAM,EAAE,EAAE,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAQ,EAAE;QACzC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAgD,CAAC;QAC5E,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM;QAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;QACrC,aAAa,CAAC,SAAS,CAAC,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE1B,OAAO,GAAG,EAAE;QACV,IAAI,MAAM;YAAE,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;YACvC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fg-tracker-sdk",
|
|
3
|
-
"version": "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",
|