fg-tracker-sdk 0.10.0 → 0.13.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 +30 -0
- package/README.md +129 -35
- package/dist/context.d.ts +9 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +27 -0
- package/dist/context.js.map +1 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +34 -5
- package/dist/database.js.map +1 -1
- package/dist/express.js +2 -2
- package/dist/express.js.map +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js +47 -10
- package/dist/fetch.js.map +1 -1
- package/dist/genai/bedrock.d.ts +22 -0
- package/dist/genai/bedrock.d.ts.map +1 -0
- package/dist/genai/bedrock.js +161 -0
- package/dist/genai/bedrock.js.map +1 -0
- package/dist/genai/call.d.ts +96 -0
- package/dist/genai/call.d.ts.map +1 -0
- package/dist/genai/call.js +260 -0
- package/dist/genai/call.js.map +1 -0
- package/dist/genai/config.d.ts +71 -0
- package/dist/genai/config.d.ts.map +1 -0
- package/dist/genai/config.js +110 -0
- package/dist/genai/config.js.map +1 -0
- package/dist/genai/http.d.ts +49 -0
- package/dist/genai/http.d.ts.map +1 -0
- package/dist/genai/http.js +795 -0
- package/dist/genai/http.js.map +1 -0
- package/dist/genai/semconv.d.ts +64 -0
- package/dist/genai/semconv.d.ts.map +1 -0
- package/dist/genai/semconv.js +52 -0
- package/dist/genai/semconv.js.map +1 -0
- package/dist/genai/sse.d.ts +26 -0
- package/dist/genai/sse.d.ts.map +1 -0
- package/dist/genai/sse.js +100 -0
- package/dist/genai/sse.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/infra/aws.d.ts +45 -3
- package/dist/infra/aws.d.ts.map +1 -1
- package/dist/infra/aws.js +455 -29
- package/dist/infra/aws.js.map +1 -1
- package/dist/infra/lambda.d.ts +19 -0
- package/dist/infra/lambda.d.ts.map +1 -1
- package/dist/infra/lambda.js +61 -9
- package/dist/infra/lambda.js.map +1 -1
- package/dist/infra/messaging.d.ts +133 -0
- package/dist/infra/messaging.d.ts.map +1 -0
- package/dist/infra/messaging.js +366 -0
- package/dist/infra/messaging.js.map +1 -0
- package/dist/next.js +2 -2
- package/dist/next.js.map +1 -1
- package/dist/node-http.d.ts.map +1 -1
- package/dist/node-http.js +7 -3
- package/dist/node-http.js.map +1 -1
- package/dist/normalize.d.ts +32 -0
- package/dist/normalize.d.ts.map +1 -1
- package/dist/normalize.js +165 -10
- package/dist/normalize.js.map +1 -1
- package/dist/pg.d.ts +8 -3
- package/dist/pg.d.ts.map +1 -1
- package/dist/pg.js +512 -41
- package/dist/pg.js.map +1 -1
- package/dist/tracker.d.ts +17 -1
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +50 -5
- package/dist/tracker.js.map +1 -1
- package/dist/types.d.ts +26 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -1
package/dist/normalize.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
const UUID_RE = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;
|
|
2
3
|
const HEX_RE = /^[0-9a-f]{16,}$/i;
|
|
3
4
|
const NUM_RE = /^\d+$/;
|
|
@@ -26,15 +27,83 @@ export function normalizePath(input) {
|
|
|
26
27
|
const out = segments.join('/') || '/';
|
|
27
28
|
return out.length > 1 && out.endsWith('/') ? out.slice(0, -1) : out;
|
|
28
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* `url.full` (semconv OTel) sem credenciais e sem os valores da query string, que costumam
|
|
32
|
+
* levar tokens e assinaturas: `https://api.x.com/v1/a?token=REDACTED&page=REDACTED`.
|
|
33
|
+
*/
|
|
34
|
+
export function redactedUrl(url) {
|
|
35
|
+
let search = '';
|
|
36
|
+
if (url.search) {
|
|
37
|
+
const keys = [];
|
|
38
|
+
for (const key of url.searchParams.keys())
|
|
39
|
+
keys.push(`${encodeURIComponent(key)}=REDACTED`);
|
|
40
|
+
search = keys.length > 0 ? `?${keys.join('&')}` : '';
|
|
41
|
+
}
|
|
42
|
+
return `${url.protocol}//${url.host}${url.pathname}${search}`;
|
|
43
|
+
}
|
|
44
|
+
/** Atributos semconv OTel de uma chamada HTTP de saída (aditivos aos históricos `url`/`host`). */
|
|
45
|
+
export function httpClientSemconv(url) {
|
|
46
|
+
const port = url.port ? Number(url.port) : url.protocol === 'https:' ? 443 : url.protocol === 'http:' ? 80 : undefined;
|
|
47
|
+
return { 'url.full': redactedUrl(url), 'server.address': url.hostname, ...(port ? { 'server.port': port } : {}) };
|
|
48
|
+
}
|
|
29
49
|
/**
|
|
30
50
|
* Normaliza SQL para agrupar queries com o mesmo "shape":
|
|
31
51
|
* números → `?`, strings → `'?'`, `IN (...)` → `IN (?)`, espaços colapsados,
|
|
32
52
|
* minúsculas, no máximo 200 caracteres.
|
|
33
53
|
*/
|
|
34
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Abertura de dollar-quoting: `$$` ou `$tag$`, com a tag nas regras de identificador do Postgres
|
|
56
|
+
* (letra, `_` ou qualquer caractere não ASCII no início; depois também dígitos; nunca `$`). Tags
|
|
57
|
+
* com acento (`$é$`) são válidas e precisam ser reconhecidas, senão o conteúdo sai como texto.
|
|
58
|
+
* Sticky (`y`): testada na posição do `$`, sem copiar o resto do texto.
|
|
59
|
+
*/
|
|
60
|
+
const DOLLAR_TAG = /\$(?:[A-Za-z_\u0080-\uffff][A-Za-z_0-9\u0080-\uffff]*)?\$/y;
|
|
61
|
+
/**
|
|
62
|
+
* Identificador (e palavra-chave) inteiro, com os `$` internos (`a$b$c`), e parâmetro (`$1`), como
|
|
63
|
+
* no analisador do Postgres: o `$` só abre dollar-quoting no início de um token. Depois de um
|
|
64
|
+
* parâmetro ele abre (`$1$t$…$t$`), e o conteúdo é ocultado.
|
|
65
|
+
*/
|
|
66
|
+
const IDENTIFIER = /[A-Za-z_\u0080-\uffff][A-Za-z0-9_$\u0080-\uffff]*/y;
|
|
67
|
+
const PARAM = /\$[0-9]+/y;
|
|
68
|
+
function sticky(pattern, text, at) {
|
|
69
|
+
pattern.lastIndex = at;
|
|
70
|
+
return pattern.exec(text)?.[0];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* `stopAtAmbiguous`: o texto que sai do processo para no literal comum com barra invertida (ver
|
|
74
|
+
* abaixo); a análise local dos comandos (transações) lê até o fim, pela leitura padrão do servidor.
|
|
75
|
+
*/
|
|
76
|
+
function redactSqlLiterals(sql, stopAtAmbiguous = true) {
|
|
35
77
|
let result = '';
|
|
36
78
|
let i = 0;
|
|
79
|
+
/** Fim do último identificador e se ele era só `E`: `E'…'` colado é o literal com escape. */
|
|
80
|
+
let identifierEnd = -1;
|
|
81
|
+
let identifierIsE = false;
|
|
37
82
|
while (i < sql.length) {
|
|
83
|
+
// Identificador entre aspas duplas ("a'b"): copiado como está, para uma aspa simples dentro dele
|
|
84
|
+
// não abrir um literal.
|
|
85
|
+
if (sql[i] === '"') {
|
|
86
|
+
let end = i + 1;
|
|
87
|
+
let closed = false;
|
|
88
|
+
while (end < sql.length) {
|
|
89
|
+
if (sql[end] === '"' && sql[end + 1] === '"') {
|
|
90
|
+
end += 2;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (sql[end++] === '"') {
|
|
94
|
+
closed = true;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Sem fechamento, o resto pode conter literais que o servidor nunca leu como tais: corta.
|
|
99
|
+
if (!closed && stopAtAmbiguous) {
|
|
100
|
+
result += ' …';
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
result += sql.slice(i, end);
|
|
104
|
+
i = end;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
38
107
|
if (sql.startsWith('--', i)) {
|
|
39
108
|
const end = sql.indexOf('\n', i);
|
|
40
109
|
i = end < 0 ? sql.length : end;
|
|
@@ -60,11 +129,21 @@ function redactSqlLiterals(sql) {
|
|
|
60
129
|
continue;
|
|
61
130
|
}
|
|
62
131
|
if (sql[i] === "'") {
|
|
132
|
+
// `E'...'`: a barra invertida escapa. Num literal comum ela é um caractere como outro
|
|
133
|
+
// (standard_conforming_strings, padrão desde o PostgreSQL 9.1), mas com a opção desligada
|
|
134
|
+
// escapa: o fim do literal depende da configuração do servidor.
|
|
135
|
+
// Lido da entrada, não do `result` acumulado: ler o fim de uma string concatenada a materializa
|
|
136
|
+
// inteira, e isso a cada literal tornava um INSERT em lote quadrático (40 mil linhas: 2 s).
|
|
137
|
+
const escaped = identifierIsE && identifierEnd === i;
|
|
63
138
|
i++;
|
|
139
|
+
let backslash = false;
|
|
64
140
|
while (i < sql.length) {
|
|
65
141
|
if (sql[i] === '\\') {
|
|
66
|
-
|
|
67
|
-
|
|
142
|
+
backslash = true;
|
|
143
|
+
if (escaped) {
|
|
144
|
+
i += 2;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
68
147
|
}
|
|
69
148
|
if (sql[i] === "'" && sql[i + 1] === "'") {
|
|
70
149
|
i += 2;
|
|
@@ -74,9 +153,30 @@ function redactSqlLiterals(sql) {
|
|
|
74
153
|
break;
|
|
75
154
|
}
|
|
76
155
|
result += "'?'";
|
|
156
|
+
// Literal comum com barra invertida: as duas leituras dão fins diferentes, e o que vem depois
|
|
157
|
+
// pode ser outro literal. Para nunca expor um valor, o resto do texto não é enviado.
|
|
158
|
+
if (backslash && !escaped && stopAtAmbiguous) {
|
|
159
|
+
result += ' …';
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const identifier = sticky(IDENTIFIER, sql, i);
|
|
165
|
+
if (identifier) {
|
|
166
|
+
result += identifier;
|
|
167
|
+
i += identifier.length;
|
|
168
|
+
identifierEnd = i;
|
|
169
|
+
identifierIsE = identifier === 'E' || identifier === 'e';
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// `$1`: parâmetro. Um `$` logo depois dele começa outro token e pode abrir dollar-quoting.
|
|
173
|
+
const param = sql[i] === '$' ? sticky(PARAM, sql, i) : undefined;
|
|
174
|
+
if (param) {
|
|
175
|
+
result += param;
|
|
176
|
+
i += param.length;
|
|
77
177
|
continue;
|
|
78
178
|
}
|
|
79
|
-
const dollar = sql[i] === '$' ?
|
|
179
|
+
const dollar = sql[i] === '$' ? sticky(DOLLAR_TAG, sql, i) : undefined;
|
|
80
180
|
if (dollar) {
|
|
81
181
|
const end = sql.indexOf(dollar, i + dollar.length);
|
|
82
182
|
i = end < 0 ? sql.length : end + dollar.length;
|
|
@@ -87,15 +187,70 @@ function redactSqlLiterals(sql) {
|
|
|
87
187
|
}
|
|
88
188
|
return result;
|
|
89
189
|
}
|
|
90
|
-
|
|
190
|
+
/**
|
|
191
|
+
* Comandos do SQL, sem literais, para a análise local (BEGIN/COMMIT/ROLLBACK em vários comandos).
|
|
192
|
+
* Lê o texto inteiro pela leitura padrão (`standard_conforming_strings`); nunca é enviado.
|
|
193
|
+
*/
|
|
194
|
+
export function sqlCommandText(sql) {
|
|
195
|
+
return redactSqlLiterals(sql, false).replace(/\s+/g, ' ').trim().toLowerCase();
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* `IN (?, ?, '?')` → `IN (?)`: itens separados por espaço e no máximo uma vírgula, vírgula final
|
|
199
|
+
* opcional. Escrita sem ambiguidade: depois de cada item o espaço só tem um jeito de ser consumido.
|
|
200
|
+
* A forma anterior (`\((?:\s*ITEM\s*,?\s*)+\)`) reconhecia a mesma linguagem, mas dividia o espaço
|
|
201
|
+
* entre os `\s*` de duas repetições vizinhas: uma lista que não fecha só com itens
|
|
202
|
+
* (`in (1, 1, …, outra_coluna)`, SQL válido) custava 2ⁿ passos antes de falhar e prendia o event
|
|
203
|
+
* loop da aplicação a cada query (26 itens: 2,6 s).
|
|
204
|
+
*/
|
|
205
|
+
const IN_LIST = /\bin\s*\(\s*(?:(?:\?|'\?')\s*(?:,\s*)?)+\)/gi;
|
|
206
|
+
/** SQL normalizado inteiro (sem o corte de 200 caracteres do nome do span). */
|
|
207
|
+
export function normalizeSqlFull(sql) {
|
|
91
208
|
let s = redactSqlLiterals(sql);
|
|
92
209
|
s = s.replace(/\$\d+/g, '?');
|
|
93
210
|
s = s.replace(/\b\d+(?:\.\d+)?\b/g, '?');
|
|
94
|
-
s = s.replace(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
211
|
+
s = s.replace(IN_LIST, 'IN (?)');
|
|
212
|
+
return s.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
213
|
+
}
|
|
214
|
+
export function normalizeSql(sql) {
|
|
215
|
+
const s = normalizeSqlFull(sql);
|
|
216
|
+
return s.length > 200 ? s.slice(0, 200) : s;
|
|
217
|
+
}
|
|
218
|
+
/** `db.query.text` vai até este tamanho (o resto é cortado); o fingerprint usa o texto inteiro. */
|
|
219
|
+
export const MAX_DB_QUERY_TEXT = 2048;
|
|
220
|
+
/**
|
|
221
|
+
* Nome do span e atributos semconv de uma query: `db.query.text` (SQL normalizado, sem
|
|
222
|
+
* literais), `db.query.fingerprint` (16 hex do SHA-256 do SQL normalizado **inteiro**, calculado
|
|
223
|
+
* antes do corte de 200 caracteres do nome: duas queries com o mesmo prefixo não se fundem) e
|
|
224
|
+
* `db.operation.name` (primeira palavra: SELECT, INSERT, BEGIN…).
|
|
225
|
+
*/
|
|
226
|
+
export function sqlSpanFields(sql) {
|
|
227
|
+
const full = normalizeSqlFull(sql);
|
|
228
|
+
const operation = /^[a-z]+/.exec(full)?.[0]?.toUpperCase();
|
|
229
|
+
return {
|
|
230
|
+
name: full.length > 200 ? full.slice(0, 200) : full,
|
|
231
|
+
attributes: {
|
|
232
|
+
'db.query.text': full.length > MAX_DB_QUERY_TEXT ? full.slice(0, MAX_DB_QUERY_TEXT) : full,
|
|
233
|
+
'db.query.fingerprint': createHash('sha256').update(full).digest('hex').slice(0, 16),
|
|
234
|
+
...(operation ? { 'db.operation.name': operation } : {}),
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
const LOCK_OUTCOMES = {
|
|
239
|
+
'40P01': 'deadlock',
|
|
240
|
+
'55P03': 'lock_not_available',
|
|
241
|
+
'40001': 'serialization_failure',
|
|
242
|
+
'57014': 'query_canceled',
|
|
243
|
+
};
|
|
244
|
+
/**
|
|
245
|
+
* Atributos de uma falha de banco pelo SQLSTATE: `db.response.status_code` (semconv) e, para
|
|
246
|
+
* disputa de lock, `db.lock.outcome` (`deadlock`, `lock_not_available` — `lock_timeout`/`NOWAIT` —,
|
|
247
|
+
* `serialization_failure` ou `query_canceled` — `statement_timeout`/cancelamento).
|
|
248
|
+
*/
|
|
249
|
+
export function databaseErrorAttributes(error) {
|
|
250
|
+
const code = typeof error === 'object' && error ? error.code : undefined;
|
|
251
|
+
if (typeof code !== 'string' || !/^[A-Z0-9_]{3,40}$/.test(code))
|
|
252
|
+
return {};
|
|
253
|
+
return { 'db.response.status_code': code, ...(LOCK_OUTCOMES[code] ? { 'db.lock.outcome': LOCK_OUTCOMES[code] } : {}) };
|
|
99
254
|
}
|
|
100
255
|
export function toSpanError(err) {
|
|
101
256
|
if (err instanceof Error) {
|
package/dist/normalize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,gEAAgE,CAAC;AACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAClC,MAAM,MAAM,GAAG,OAAO,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3C,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACtC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,GAAW;
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAO,GAAG,gEAAgE,CAAC;AACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAClC,MAAM,MAAM,GAAG,OAAO,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAgC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3C,IAAI,GAAG,KAAK,EAAE;YAAE,OAAO,GAAG,CAAC;QAC3B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACtC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5F,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;AAChE,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvH,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACpH,CAAC;AAED;;;;GAIG;AACH;;;;;GAKG;AACH,MAAM,UAAU,GAAG,4DAA4D,CAAC;AAChF;;;;GAIG;AACH,MAAM,UAAU,GAAG,oDAAoD,CAAC;AACxE,MAAM,KAAK,GAAG,WAAW,CAAC;AAE1B,SAAS,MAAM,CAAC,OAAe,EAAE,IAAY,EAAE,EAAU;IACvD,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC;IACvB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,GAAW,EAAE,eAAe,GAAG,IAAI;IAC5D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,6FAA6F;IAC7F,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,iGAAiG;QACjG,wBAAwB;QACxB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,GAAG,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBACrE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACnD,CAAC;YACD,0FAA0F;YAC1F,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;gBAAC,MAAM,IAAI,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC1D,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC,GAAG,GAAG,CAAC;YAAC,SAAS;QACjD,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAAC,MAAM,IAAI,GAAG,CAAC;YAAC,SAAS;QAC5F,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;qBAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAAC,KAAK,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;;oBACjD,CAAC,EAAE,CAAC;YACX,CAAC;YACD,MAAM,IAAI,GAAG,CAAC;YAAC,SAAS;QAC1B,CAAC;QACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,sFAAsF;YACtF,0FAA0F;YAC1F,gEAAgE;YAChE,gGAAgG;YAChG,4FAA4F;YAC5F,MAAM,OAAO,GAAG,aAAa,IAAI,aAAa,KAAK,CAAC,CAAC;YACrD,CAAC,EAAE,CAAC;YACJ,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACpB,SAAS,GAAG,IAAI,CAAC;oBACjB,IAAI,OAAO,EAAE,CAAC;wBAAC,CAAC,IAAI,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;gBACpC,CAAC;gBACD,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC7D,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;oBAAE,MAAM;YAC9B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC;YAChB,8FAA8F;YAC9F,qFAAqF;YACrF,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;gBAAC,MAAM,IAAI,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;YACxE,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,UAAU,CAAC;YACrB,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC;YACvB,aAAa,GAAG,CAAC,CAAC;YAClB,aAAa,GAAG,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG,CAAC;YACzD,SAAS;QACX,CAAC;QACD,2FAA2F;QAC3F,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjE,IAAI,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC;YAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC;YAAC,SAAS;QAC5B,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,8CAA8C,CAAC;AAE/D,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACnD,UAAU,EAAE;YACV,eAAe,EAAE,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1F,sBAAsB,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACpF,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAA2B;IAC5C,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAE,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3E,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAsD,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QACnH,IAAI,GAAG,CAAC,KAAK;YAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,GAA4C,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACjD,CAAC"}
|
package/dist/pg.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { TrackerCore } from './tracker.js';
|
|
2
2
|
import type { PgPoolLike } from './types.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* span `db.query` com
|
|
6
|
-
*
|
|
4
|
+
* Instrumenta um `pg.Pool` (ou objeto compatível):
|
|
5
|
+
* - `pool.query`: span `db.query` com SQL normalizado, `rows`, `db.query.fingerprint` e, quando
|
|
6
|
+
* a espera por conexão passa de 1 ms, `db.poolWaitMs`;
|
|
7
|
+
* - `pool.connect()`: span `custom` `pg connect` com a espera por conexão (`db.poolWaitMs`) e a
|
|
8
|
+
* ocupação do pool; o client devolvido também gera spans `db.query`;
|
|
9
|
+
* - transação num client (`BEGIN` … `COMMIT`/`ROLLBACK`): span `custom` `pg transaction`, pai das
|
|
10
|
+
* queries dela, com `db.transaction.outcome` (`commit`, `rollback` ou `released_open` quando o
|
|
11
|
+
* client volta ao pool com a transação aberta).
|
|
7
12
|
*/
|
|
8
13
|
export declare function instrumentPgPool<T extends PgPoolLike>(core: TrackerCore, pool: T): T;
|
|
9
14
|
//# sourceMappingURL=pg.d.ts.map
|
package/dist/pg.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../src/pg.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../src/pg.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAiQ7C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAuTpF"}
|