@mks2508/better-logger 0.18.2-alpha.2 → 0.18.4
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/dist/Logger.d.ts +113 -21
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +38 -1
- package/dist/ScopedLogger.d.ts.map +1 -1
- package/dist/chunks/LogContext-BO-f0KXu.js +142 -0
- package/dist/chunks/LogContext-BO-f0KXu.js.map +1 -0
- package/dist/chunks/{LogContext-BaMXleWj.cjs → LogContext-CIKxWPrK.cjs} +54 -12
- package/dist/chunks/LogContext-CIKxWPrK.cjs.map +1 -0
- package/dist/chunks/{transports-yK6CL0Ml.cjs → transports-BZ-Mc2IT.cjs} +196 -24
- package/dist/chunks/transports-BZ-Mc2IT.cjs.map +1 -0
- package/dist/chunks/{transports-BGfwwakw.js → transports-DvaLAeGJ.js} +191 -25
- package/dist/chunks/transports-DvaLAeGJ.js.map +1 -0
- package/dist/context/LogContext.d.ts +2 -4
- package/dist/context/LogContext.d.ts.map +1 -1
- package/dist/context.cjs +1 -1
- package/dist/context.js +1 -1
- package/dist/index.cjs +345 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +343 -35
- package/dist/index.js.map +1 -1
- package/dist/transports/OtlpTraceTransport.d.ts +118 -0
- package/dist/transports/OtlpTraceTransport.d.ts.map +1 -0
- package/dist/transports/OtlpTransport.d.ts +27 -1
- package/dist/transports/OtlpTransport.d.ts.map +1 -1
- package/dist/transports/SpanRuntime.d.ts +76 -0
- package/dist/transports/SpanRuntime.d.ts.map +1 -0
- package/dist/transports/TransportManager.d.ts +18 -11
- package/dist/transports/TransportManager.d.ts.map +1 -1
- package/dist/transports/index.d.ts +1 -0
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports-module.d.ts +3 -1
- package/dist/transports-module.d.ts.map +1 -1
- package/dist/transports.cjs +2 -1
- package/dist/transports.js +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/transports.d.ts +121 -2
- package/dist/types/transports.d.ts.map +1 -1
- package/dist/utils/asyncLocalStorage.d.ts +33 -0
- package/dist/utils/asyncLocalStorage.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/chunks/LogContext-BaMXleWj.cjs.map +0 -1
- package/dist/chunks/LogContext-DjlITOzZ.js +0 -100
- package/dist/chunks/LogContext-DjlITOzZ.js.map +0 -1
- package/dist/chunks/transports-BGfwwakw.js.map +0 -1
- package/dist/chunks/transports-yK6CL0Ml.cjs.map +0 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type { SpanRecord, TransportRecord } from '../types/index.js';
|
|
2
|
+
import { HttpTransport } from './HttpTransport.js';
|
|
3
|
+
import { type OtlpAttributeValue, type OtlpTransportOptions } from './OtlpTransport.js';
|
|
4
|
+
/**
|
|
5
|
+
* Opciones de configuración para {@link OtlpTraceTransport}. Hereda todas las
|
|
6
|
+
* opciones de {@link OtlpTransportOptions} (endpoint, serviceName,
|
|
7
|
+
* ingestKeyEnvVar, batching, retry, ...) porque el transport de traces espeja
|
|
8
|
+
* al de logs.
|
|
9
|
+
*/
|
|
10
|
+
export interface OtlpTraceTransportOptions extends OtlpTransportOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Versión del scope que emite los spans (`scopeSpans[].scope.version`).
|
|
13
|
+
* Opcional: si se omite, el bloque `scope` se emite sin `version` en vez
|
|
14
|
+
* de inventar una.
|
|
15
|
+
*/
|
|
16
|
+
scopeVersion?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Shape del body JSON de un request OTLP/HTTP para traces. Coincide con el
|
|
20
|
+
* JSON mapping del proto `TracesData` para `/v1/traces`. Ver
|
|
21
|
+
* https://opentelemetry.io/docs/specs/otlp/#json-protobuf-encoding
|
|
22
|
+
*/
|
|
23
|
+
interface OtlpTracesPayload {
|
|
24
|
+
resourceSpans: Array<{
|
|
25
|
+
resource: {
|
|
26
|
+
attributes: Array<{
|
|
27
|
+
key: string;
|
|
28
|
+
value: {
|
|
29
|
+
stringValue: string;
|
|
30
|
+
};
|
|
31
|
+
}>;
|
|
32
|
+
};
|
|
33
|
+
scopeSpans: Array<{
|
|
34
|
+
scope: {
|
|
35
|
+
name: string;
|
|
36
|
+
version?: string;
|
|
37
|
+
};
|
|
38
|
+
spans: Array<OtlpSpan>;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Span individual dentro del payload OTLP. Mappea 1:1 los campos del
|
|
44
|
+
* `SpanRecord` al proto `Span` de la spec OTel Trace.
|
|
45
|
+
* @see https://opentelemetry.io/docs/specs/otel/trace/api/#span
|
|
46
|
+
*/
|
|
47
|
+
interface OtlpSpan {
|
|
48
|
+
traceId: string;
|
|
49
|
+
spanId: string;
|
|
50
|
+
parentSpanId?: string;
|
|
51
|
+
name: string;
|
|
52
|
+
kind: number;
|
|
53
|
+
startTimeUnixNano: string;
|
|
54
|
+
endTimeUnixNano: string;
|
|
55
|
+
attributes?: Array<{
|
|
56
|
+
key: string;
|
|
57
|
+
value: OtlpAttributeValue;
|
|
58
|
+
}>;
|
|
59
|
+
status?: {
|
|
60
|
+
code: number;
|
|
61
|
+
message?: string;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Transport OTLP/HTTP para traces (spans) — POST a `<endpoint>/v1/traces`.
|
|
66
|
+
*
|
|
67
|
+
* Espeja {@link OtlpTransport} (que va a `/v1/logs`): hereda de
|
|
68
|
+
* {@link HttpTransport} el batch, retry con backoff, buffer acotado, close
|
|
69
|
+
* asincrónico y el hook on-error. Solo cambia la shape del payload y acepta
|
|
70
|
+
* exclusivamente records de kind `'span'` (`accepts = ['span']`): el
|
|
71
|
+
* {@link TransportManager} garantiza que jamás recibe un log record.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* logger.addTransport({
|
|
76
|
+
* target: new OtlpTraceTransport({
|
|
77
|
+
* endpoint: 'https://otelcollector.example.com:4318',
|
|
78
|
+
* serviceName: 'my-app',
|
|
79
|
+
* scopeVersion: '1.2.3'
|
|
80
|
+
* })
|
|
81
|
+
* });
|
|
82
|
+
*
|
|
83
|
+
* await logger.span('db.query', { table: 'users' }, async () => {
|
|
84
|
+
* await db.select();
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare class OtlpTraceTransport extends HttpTransport {
|
|
89
|
+
readonly name = "otlp-trace";
|
|
90
|
+
/** Este transport SOLO acepta spans — jamás recibe log records. */
|
|
91
|
+
readonly accepts: readonly ["span"];
|
|
92
|
+
private readonly resource;
|
|
93
|
+
private readonly scopeVersion;
|
|
94
|
+
/** Resuelto al construir. Nunca se loguea, nunca se escribe a source. */
|
|
95
|
+
private readonly ingestKeyValue;
|
|
96
|
+
constructor(options: OtlpTraceTransportOptions);
|
|
97
|
+
/**
|
|
98
|
+
* Construye el payload JSON OTLP/HTTP a partir de los spans bufferizados.
|
|
99
|
+
* Un bloque `resourceSpans` por batch. Expuesto para tests y subclasses.
|
|
100
|
+
*
|
|
101
|
+
* @param spans - Spans a serializar dentro del payload.
|
|
102
|
+
* @returns Objeto `TracesData` listo para `JSON.stringify`.
|
|
103
|
+
*/
|
|
104
|
+
buildPayload(spans: SpanRecord[]): OtlpTracesPayload;
|
|
105
|
+
/**
|
|
106
|
+
* Serializa un batch al body JSON del request OTLP/HTTP. Override de
|
|
107
|
+
* {@link HttpTransport.serializeBody}.
|
|
108
|
+
*/
|
|
109
|
+
protected serializeBody(records: TransportRecord[]): string;
|
|
110
|
+
/**
|
|
111
|
+
* Construye los headers del request. Agrega `signoz-ingestion-key` con el
|
|
112
|
+
* valor resuelto al construir.
|
|
113
|
+
*/
|
|
114
|
+
protected buildHeaders(): Record<string, string>;
|
|
115
|
+
private toOtlpSpan;
|
|
116
|
+
}
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=OtlpTraceTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OtlpTraceTransport.d.ts","sourceRoot":"","sources":["../../src/transports/OtlpTraceTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAIH,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC5B,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACnE;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,UAAU,iBAAiB;IACvB,aAAa,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE;YACN,UAAU,EAAE,KAAK,CAAC;gBAAE,GAAG,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE;oBAAE,WAAW,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;SACtE,CAAC;QACF,UAAU,EAAE,KAAK,CAAC;YACd,KAAK,EAAE;gBACH,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,CAAC,EAAE,MAAM,CAAC;aACpB,CAAC;YACF,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC1B,CAAC,CAAC;KACN,CAAC,CAAC;CACN;AAED;;;;GAIG;AACH,UAAU,QAAQ;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACjD,SAAkB,IAAI,gBAAgB;IAEtC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,oBAAqB;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,OAAO,EAAE,yBAAyB;IAsC9C;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,iBAAiB;IAuBpD;;;OAGG;cACgB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM;IAMpE;;;OAGG;cACgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQzD,OAAO,CAAC,UAAU;CA+BrB"}
|
|
@@ -95,7 +95,7 @@ interface OtlpLogRecord {
|
|
|
95
95
|
* mixtos).
|
|
96
96
|
* @see https://opentelemetry.io/docs/specs/otel/common/
|
|
97
97
|
*/
|
|
98
|
-
type OtlpAttributeValue = {
|
|
98
|
+
export type OtlpAttributeValue = {
|
|
99
99
|
stringValue: string;
|
|
100
100
|
} | {
|
|
101
101
|
intValue: number;
|
|
@@ -161,5 +161,31 @@ export declare class OtlpTransport extends HttpTransport {
|
|
|
161
161
|
protected buildHeaders(): Record<string, string>;
|
|
162
162
|
private toLogRecord;
|
|
163
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Quita la barra final de un endpoint si la lleva.
|
|
166
|
+
*
|
|
167
|
+
* @internal Compartido con {@link OtlpTraceTransport}; no es API pública.
|
|
168
|
+
*/
|
|
169
|
+
export declare function stripTrailingSlash(value: string): string;
|
|
170
|
+
/**
|
|
171
|
+
* Lee la ingest API key desde `process.env[name]`. Devuelve `undefined`
|
|
172
|
+
* silenciosamente si `process` no está disponible (bundles estrictos de
|
|
173
|
+
* browser) o si la variable no está seteada. Nunca throwea, nunca loguea
|
|
174
|
+
* el valor.
|
|
175
|
+
*
|
|
176
|
+
* @internal Helper del constructor de {@link OtlpTransport} y
|
|
177
|
+
* {@link OtlpTraceTransport}; no es API pública.
|
|
178
|
+
* @param envVarName - Nombre de la env var a leer.
|
|
179
|
+
* @returns Valor de la key, o `undefined` si no está disponible.
|
|
180
|
+
*/
|
|
181
|
+
export declare function readIngestKey(envVarName: string | undefined): string | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Convierte un valor JS a un `AnyValue` de OTel. Compartido con
|
|
184
|
+
* {@link OtlpTraceTransport} para serializar attributes de span con el mismo
|
|
185
|
+
* mapping.
|
|
186
|
+
*
|
|
187
|
+
* @internal Exportado para reuse entre transports OTLP; no es API pública.
|
|
188
|
+
*/
|
|
189
|
+
export declare function toOtlpAttribute(value: unknown): OtlpAttributeValue | null;
|
|
164
190
|
export {};
|
|
165
191
|
//# sourceMappingURL=OtlpTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OtlpTransport.d.ts","sourceRoot":"","sources":["../../src/transports/OtlpTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EACf,YAAY,EAGf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;;;GAIG;AACH,UAAU,eAAe;IACrB,YAAY,EAAE,KAAK,CAAC;QAChB,QAAQ,EAAE;YACN,UAAU,EAAE,KAAK,CAAC;gBAAE,GAAG,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE;oBAAE,WAAW,EAAE,MAAM,CAAA;iBAAE,CAAA;aAAE,CAAC,CAAC;SACtE,CAAC;QACF,SAAS,EAAE,KAAK,CAAC;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,CAAC;aACnB,CAAC;YACF,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;SACpC,CAAC,CAAC;KACN,CAAC,CAAC;CACN;AAED;;;;;GAKG;AACH,UAAU,aAAa;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,
|
|
1
|
+
{"version":3,"file":"OtlpTransport.d.ts","sourceRoot":"","sources":["../../src/transports/OtlpTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SpanRuntime — runtime de spans del trio API
|
|
3
|
+
* `event` / `span` / `startSpan`.
|
|
4
|
+
*
|
|
5
|
+
* Vive en transports/ porque es la extensión del pipeline de dispatch: los
|
|
6
|
+
* {@link SpanRecord} que produce viajan por el {@link TransportManager} junto
|
|
7
|
+
* a los log records, enrutados por kind (`accepts`).
|
|
8
|
+
*
|
|
9
|
+
* Tres responsabilidades:
|
|
10
|
+
* - **ALS singleton del módulo**: un único `AsyncLocalStorage<SpanRecord>`
|
|
11
|
+
* compartido por TODAS las instancias de Logger — "qué instancia lleva el
|
|
12
|
+
* span" es ambiguo con MDC por-instancia, el span activo es una propiedad
|
|
13
|
+
* del call stack, no del logger.
|
|
14
|
+
* - **Generación de ids** conforme a W3C Trace Context (traceId 16 bytes →
|
|
15
|
+
* 32 hex, spanId 8 bytes → 16 hex) vía `crypto.getRandomValues`.
|
|
16
|
+
* - **Leak-safety**: registry de spans abiertos; en flush/shutdown se
|
|
17
|
+
* fuerzan a `end()` con `incomplete: true` y se exportan — nunca se tiran.
|
|
18
|
+
*/
|
|
19
|
+
import type { Span, SpanAttributes, SpanRecord } from '../types/index.js';
|
|
20
|
+
/**
|
|
21
|
+
* Span activo en el call stack corriente (dentro de `span(fn)`), si lo hay.
|
|
22
|
+
* Lo consumen la correlación log→span (`TransportRecord.traceId/spanId`) y la
|
|
23
|
+
* resolución de `parentSpanId` en spans hijos.
|
|
24
|
+
*
|
|
25
|
+
* Sin `run()` previo el store estaría vacío igual, así que el guard por
|
|
26
|
+
* flag es observable-identico a consultar el ALS real.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getActiveSpan(): SpanRecord | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Ejecuta `fn` con `record` como span activo. Sin ALS disponible (browser),
|
|
31
|
+
* ejecuta `fn` directamente — sin correlación pero funcional.
|
|
32
|
+
*/
|
|
33
|
+
export declare function runWithActiveSpan<R>(record: SpanRecord, fn: () => R): R;
|
|
34
|
+
/** Nanosegundos Unix actuales como string decimal (formato OTLP). */
|
|
35
|
+
export declare function nowUnixNano(): string;
|
|
36
|
+
/** Trace id W3C: 16 bytes → 32 chars hex. */
|
|
37
|
+
export declare function generateTraceId(): string;
|
|
38
|
+
/** Span id W3C: 8 bytes → 16 chars hex. */
|
|
39
|
+
export declare function generateSpanId(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Crea el record de span y su {@link Span} handle. El handle registra el
|
|
42
|
+
* span en el registry de abiertos; `onEnd` se invoca una única vez, con el
|
|
43
|
+
* record final (duración real o `incomplete: true`), para su export al
|
|
44
|
+
* pipeline de transports.
|
|
45
|
+
*
|
|
46
|
+
* `end()` solo fija `endTimeUnixNano` si no se fijó antes — así los
|
|
47
|
+
* point-spans (`event()`) pueden fijar `end = start` exacto.
|
|
48
|
+
*
|
|
49
|
+
* @param name - Nombre de la operación.
|
|
50
|
+
* @param attributes - Attributes iniciales (copia propia del record).
|
|
51
|
+
* @param scope - Scope del logger emisor.
|
|
52
|
+
* @param onEnd - Callback de export; recibe el record cerrado.
|
|
53
|
+
* @returns El record (para el ALS store) y el handle del span.
|
|
54
|
+
*/
|
|
55
|
+
export declare function createSpan(name: string, attributes: SpanAttributes | undefined, scope: string, onEnd: (record: SpanRecord) => void): {
|
|
56
|
+
record: SpanRecord;
|
|
57
|
+
span: Span;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Emite un point-span (`event()`): start = end exactamente, sin registro en
|
|
61
|
+
* abiertos tras el cierre — no hay leak posible. El `parentSpanId` se resuelve
|
|
62
|
+
* contra el span activo si existe, pero NO fija contexto ALS.
|
|
63
|
+
*/
|
|
64
|
+
export declare function emitEventSpan(name: string, attributes: SpanAttributes | undefined, scope: string, onEnd: (record: SpanRecord) => void): void;
|
|
65
|
+
/**
|
|
66
|
+
* Fuerza el cierre de todos los spans abiertos (`incomplete: true`) y los
|
|
67
|
+
* exporta vía el `onEnd` de cada uno. Lo invocan `flushTransports()` /
|
|
68
|
+
* `closeTransports()` / `cleanup()` ANTES del flush real — un span abierto
|
|
69
|
+
* nunca se tira en shutdown.
|
|
70
|
+
*
|
|
71
|
+
* @returns Los records forzados a cerrar (para diagnóstico/tests).
|
|
72
|
+
*/
|
|
73
|
+
export declare function forceCloseOpenSpans(): SpanRecord[];
|
|
74
|
+
/** Número de spans actualmente abiertos (expuesto para tests/diagnóstico). */
|
|
75
|
+
export declare function openSpanCount(): number;
|
|
76
|
+
//# sourceMappingURL=SpanRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpanRuntime.d.ts","sourceRoot":"","sources":["../../src/transports/SpanRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiC1E;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAGtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAGvE;AAED,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAyBD,6CAA6C;AAC7C,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CACtB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GACpC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAkEpC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,EACtC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GACpC,IAAI,CAIN;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,EAAE,CAOlD;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TransportTarget, TransportOptions, ITransport, ITransportManager, LogLevel, TransportDispatchRecord } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Firma del constructor de los transports registrados en el registry
|
|
4
4
|
* built-in. Acepta el tipo propio de options del transport; el pass-through
|
|
@@ -157,16 +157,22 @@ export declare class TransportManager implements ITransportManager {
|
|
|
157
157
|
*/
|
|
158
158
|
remove(id: string): boolean;
|
|
159
159
|
/**
|
|
160
|
-
* Dispatcha un {@link TransportRecord} a todos los
|
|
161
|
-
*
|
|
160
|
+
* Dispatcha un {@link TransportRecord} o {@link SpanRecord} a todos los
|
|
161
|
+
* transports activos que acepten su kind.
|
|
162
162
|
*
|
|
163
163
|
* Por cada transport, en orden:
|
|
164
|
-
* 1. **
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
164
|
+
* 1. **Routing por kind**: el kind del record (`'log'` o `'span'`)
|
|
165
|
+
* debe estar en el `accepts` del transport (default `['log']` cuando
|
|
166
|
+
* no lo declara). Un `SpanRecord` JAMÁS llega a un transport
|
|
167
|
+
* log-only, y viceversa — esto evita que un `OtlpTransport` serialice
|
|
168
|
+
* spans como `logRecords` hacia `/v1/logs`.
|
|
169
|
+
* 2. **Filtro de nivel** (solo logs): si `record.levelValue <
|
|
170
|
+
* entry.levelValue`, se skipa. Los spans no tienen nivel.
|
|
171
|
+
* 3. **Transform** (solo logs): si `entry.options.transform` está
|
|
172
|
+
* seteado, se aplica al record. Si devuelve `null`, el record se
|
|
173
|
+
* droppea para este transport. Los spans NO pasan por transform —
|
|
174
|
+
* su contrato asume shape de log (muta `record.message`).
|
|
175
|
+
* 4. **Write**: se llama a `transport.write(record)`. Si
|
|
170
176
|
* devuelve una Promise, se añade al batch await. Toda excepción
|
|
171
177
|
* sincrónica o rechazo de Promise se captura y se loguea por
|
|
172
178
|
* consola — el log call original del caller nunca rompe por un
|
|
@@ -176,7 +182,7 @@ export declare class TransportManager implements ITransportManager {
|
|
|
176
182
|
* resuelto (o fallado) su write. Para fire-and-forget desde el Logger,
|
|
177
183
|
* el caller puede ignorar la Promise.
|
|
178
184
|
*
|
|
179
|
-
* @param {
|
|
185
|
+
* @param {TransportDispatchRecord} record - Record (log o span) a dispatchar.
|
|
180
186
|
* @returns {Promise<void>} Resuelve cuando todos los writes terminaron
|
|
181
187
|
* (exitosos o fallidos). Nunca rechaza.
|
|
182
188
|
*
|
|
@@ -187,8 +193,9 @@ export declare class TransportManager implements ITransportManager {
|
|
|
187
193
|
* });
|
|
188
194
|
*
|
|
189
195
|
* @see {@link TransportRecord}
|
|
196
|
+
* @see {@link SpanRecord}
|
|
190
197
|
*/
|
|
191
|
-
write(record:
|
|
198
|
+
write(record: TransportDispatchRecord): Promise<void>;
|
|
192
199
|
/**
|
|
193
200
|
* Flushea todos los transports que expongan `flush()` (buffered transports
|
|
194
201
|
* como {@link HttpTransport}, {@link FileTransport}, {@link OtlpTransport}).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportManager.d.ts","sourceRoot":"","sources":["../../src/transports/TransportManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TransportManager.d.ts","sourceRoot":"","sources":["../../src/transports/TransportManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,QAAQ,EAER,uBAAuB,EAC1B,MAAM,mBAAmB,CAAC;AAoB3B;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,OAAO,CAAC,EAAE,gBAAgB,KAAK,UAAU,CAAC;AAiDlF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACtD,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgE;IAEzF;;;;;;;;;;OAUG;gBACS,YAAY,CAAC,EAAE,QAAQ;IAMnC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAOxD;;;;;;;;;;OAUG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM;IA+BpC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAc3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACG,KAAK,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C3D;;;;;;;;;;;;;;OAcG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB5B;;;;;;;;;;;;;;;;;;OAkBG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B5B;;;;;;;OAOG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,IAAI,MAAM,EAAE;CAGnB"}
|
|
@@ -3,4 +3,5 @@ export { ConsoleTransport } from './ConsoleTransport.js';
|
|
|
3
3
|
export { FileTransport, type FileTransportOptions } from './FileTransport.js';
|
|
4
4
|
export { HttpTransport, type HttpTransportOptions } from './HttpTransport.js';
|
|
5
5
|
export { OtlpTransport, type OtlpTransportOptions } from './OtlpTransport.js';
|
|
6
|
+
export { OtlpTraceTransport, type OtlpTraceTransportOptions } from './OtlpTraceTransport.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Entry point for ./transports subpath.
|
|
3
|
-
* Transport classes: FileTransport, HttpTransport, OtlpTransport,
|
|
3
|
+
* Transport classes: FileTransport, HttpTransport, OtlpTransport,
|
|
4
|
+
* OtlpTraceTransport, ConsoleTransport.
|
|
4
5
|
*/
|
|
5
6
|
export { TransportManager } from './transports/index.js';
|
|
6
7
|
export { ConsoleTransport } from './transports/index.js';
|
|
7
8
|
export { FileTransport, type FileTransportOptions } from './transports/index.js';
|
|
8
9
|
export { HttpTransport, type HttpTransportOptions } from './transports/index.js';
|
|
9
10
|
export { OtlpTransport, type OtlpTransportOptions } from './transports/index.js';
|
|
11
|
+
export { OtlpTraceTransport, type OtlpTraceTransportOptions } from './transports/index.js';
|
|
10
12
|
//# sourceMappingURL=transports-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports-module.d.ts","sourceRoot":"","sources":["../src/transports-module.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"transports-module.d.ts","sourceRoot":"","sources":["../src/transports-module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/transports.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_transports = require("./chunks/transports-
|
|
2
|
+
const require_transports = require("./chunks/transports-BZ-Mc2IT.cjs");
|
|
3
3
|
exports.ConsoleTransport = require_transports.ConsoleTransport;
|
|
4
4
|
exports.FileTransport = require_transports.FileTransport;
|
|
5
5
|
exports.HttpTransport = require_transports.HttpTransport;
|
|
6
|
+
exports.OtlpTraceTransport = require_transports.OtlpTraceTransport;
|
|
6
7
|
exports.OtlpTransport = require_transports.OtlpTransport;
|
|
7
8
|
exports.TransportManager = require_transports.TransportManager;
|
package/dist/transports.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export { ConsoleTransport, FileTransport, HttpTransport, OtlpTransport, TransportManager };
|
|
1
|
+
import { a as FileTransport, i as HttpTransport, n as OtlpTraceTransport, o as ConsoleTransport, r as OtlpTransport, t as TransportManager } from "./chunks/transports-DvaLAeGJ.js";
|
|
2
|
+
export { ConsoleTransport, FileTransport, HttpTransport, OtlpTraceTransport, OtlpTransport, TransportManager };
|
package/dist/types/index.d.ts
CHANGED
|
@@ -6,6 +6,6 @@ export { LOG_LEVELS, SUCCESS_LEVEL } from './core.js';
|
|
|
6
6
|
export type { LogMetadata, ILogHandler, } from './handlers.js';
|
|
7
7
|
export type { SerializerFn, SerializerContext, SerializerEntry, SerializerConfig, ISerializerRegistry, } from './serializers.js';
|
|
8
8
|
export type { HookLogEntry, HookEvent, HookCallback, MiddlewareFn, HookRegistration, MiddlewareRegistration, IHookManager, } from './hooks.js';
|
|
9
|
-
export type { TransportRecord, TransportOptions, TransportTarget, ITransport, IBufferedTransport, ITransportManager, ILogResource, ILogAttributes, LogAttributeValue, } from './transports.js';
|
|
9
|
+
export type { TransportRecord, TransportOptions, TransportTarget, ITransport, IBufferedTransport, ITransportManager, ILogResource, ILogAttributes, LogAttributeValue, TransportRecordKind, TransportDispatchRecord, SpanRecord, Span, SpanAttributes, SpanAttributeValue, SpanStatus, } from './transports.js';
|
|
10
10
|
export { LOG_LEVEL_TO_SEVERITY_NUMBER, LOG_LEVEL_TO_SEVERITY_TEXT, } from './transports.js';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGtD,YAAY,EACR,WAAW,EACX,WAAW,GACd,MAAM,eAAe,CAAC;AAGvB,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,eAAe,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGtD,YAAY,EACR,WAAW,EACX,WAAW,GACd,MAAM,eAAe,CAAC;AAGvB,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACR,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,UAAU,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,4BAA4B,EAC5B,0BAA0B,GAC7B,MAAM,iBAAiB,CAAC"}
|
|
@@ -75,6 +75,108 @@ export interface TransportRecord {
|
|
|
75
75
|
/** Tag especial "success" — lo setea `Logger.success()`. */
|
|
76
76
|
tag?: LogTag;
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Kind de record que circula por el pipeline de transports. Los transports
|
|
80
|
+
* declaran cuáles aceptan vía {@link ITransport.accepts}; el
|
|
81
|
+
* {@link ITransportManager} enruta cada record solo a los transports cuyo
|
|
82
|
+
* `accepts` lo incluye.
|
|
83
|
+
*/
|
|
84
|
+
export type TransportRecordKind = 'log' | 'span';
|
|
85
|
+
/**
|
|
86
|
+
* Valor admitido en los attributes de un {@link SpanRecord}. Deliberadamente
|
|
87
|
+
* más estrecho que {@link LogAttributeValue}: el JSON mapping de OTLP traces
|
|
88
|
+
* solo acepta primitivos en `span.attributes` sin schema extra.
|
|
89
|
+
*/
|
|
90
|
+
export type SpanAttributeValue = string | number | boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Bag de attributes de un span (compatible con el modelo de attributes de
|
|
93
|
+
* OpenTelemetry para traces).
|
|
94
|
+
*/
|
|
95
|
+
export interface SpanAttributes {
|
|
96
|
+
[key: string]: SpanAttributeValue;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Status de finalización de un span, conforme al proto OTel `Status`.
|
|
100
|
+
* `code: 2` = `STATUS_CODE_ERROR`.
|
|
101
|
+
*
|
|
102
|
+
* @see https://opentelemetry.io/docs/specs/otel/trace/api/#set-status
|
|
103
|
+
*/
|
|
104
|
+
export interface SpanStatus {
|
|
105
|
+
code: number;
|
|
106
|
+
message?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Record de span (trace) que emite el trio API `event`/`span`/`startSpan`.
|
|
110
|
+
* A diferencia de {@link TransportRecord}, NO atraviesa el hook path de logs:
|
|
111
|
+
* el {@link ITransportManager} lo despacha solo a transports cuyo
|
|
112
|
+
* {@link ITransport.accepts} incluye `'span'`.
|
|
113
|
+
*
|
|
114
|
+
* `traceId` son 16 bytes en hex (32 chars) y `spanId` 8 bytes en hex
|
|
115
|
+
* (16 chars), conforme a la spec W3C Trace Context que exige OTLP/HTTP.
|
|
116
|
+
*/
|
|
117
|
+
export interface SpanRecord {
|
|
118
|
+
kind: 'span';
|
|
119
|
+
/** Trace id hex de 32 chars. Se hereda del span activo si existe. */
|
|
120
|
+
traceId: string;
|
|
121
|
+
/** Span id hex de 16 chars. */
|
|
122
|
+
spanId: string;
|
|
123
|
+
/** Span id del padre, tomado del span activo en el ALS al crearse. */
|
|
124
|
+
parentSpanId?: string;
|
|
125
|
+
/** Nombre de la operación (`db.query`, `http.request`, ...). */
|
|
126
|
+
name: string;
|
|
127
|
+
/** Span kind OTel numérico. 1 = SPAN_KIND_INTERNAL. */
|
|
128
|
+
spanKind: number;
|
|
129
|
+
/** Instante de inicio en nanosegundos (string decimal). */
|
|
130
|
+
startTimeUnixNano: string;
|
|
131
|
+
/** Instante de fin en nanosegundos (string decimal). `'0'` hasta end(). */
|
|
132
|
+
endTimeUnixNano: string;
|
|
133
|
+
/** Attributes del span. Mutables vía {@link Span.set} hasta el end(). */
|
|
134
|
+
attributes: SpanAttributes;
|
|
135
|
+
/** Status de finalización. Presente si el span terminó con `fail()`. */
|
|
136
|
+
status?: SpanStatus;
|
|
137
|
+
/** `true` cuando el span se cerró por flush sin `end()` explícito. */
|
|
138
|
+
incomplete?: boolean;
|
|
139
|
+
/** Scope del logger que emitió el span (nombre del scoped logger). */
|
|
140
|
+
scope: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle de un span externally-ended. Lo devuelven `startSpan()` y el
|
|
144
|
+
* callback de `span(fn)`.
|
|
145
|
+
*/
|
|
146
|
+
export interface Span {
|
|
147
|
+
/**
|
|
148
|
+
* Añade o actualiza un attribute del span.
|
|
149
|
+
*
|
|
150
|
+
* @param key - Nombre del attribute.
|
|
151
|
+
* @param value - Valor primitivo (string | number | boolean).
|
|
152
|
+
* @returns `this`, para encadenar.
|
|
153
|
+
*/
|
|
154
|
+
set(key: string, value: SpanAttributeValue): this;
|
|
155
|
+
/**
|
|
156
|
+
* Finaliza el span: fija `endTimeUnixNano` y encola el
|
|
157
|
+
* {@link SpanRecord} para export. Llamadas posteriores son no-op.
|
|
158
|
+
*
|
|
159
|
+
* @param attributes - Attributes finales a mergear antes del export.
|
|
160
|
+
*/
|
|
161
|
+
end(attributes?: SpanAttributes): void;
|
|
162
|
+
/**
|
|
163
|
+
* Marca el span como fallido (`status.code = 2` con el mensaje del
|
|
164
|
+
* error) y luego lo finaliza como {@link end}.
|
|
165
|
+
*
|
|
166
|
+
* @param err - Error (o valor) que causó el fallo.
|
|
167
|
+
*/
|
|
168
|
+
fail(err: unknown): void;
|
|
169
|
+
/** Trace id hex de 32 chars del span. */
|
|
170
|
+
readonly traceId: string;
|
|
171
|
+
/** Span id hex de 16 chars del span. */
|
|
172
|
+
readonly spanId: string;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Unión de todo record que puede atravesar el {@link ITransportManager}:
|
|
176
|
+
* un log ({@link TransportRecord}) o un span ({@link SpanRecord}).
|
|
177
|
+
* El routing por kind lo hace el manager vía {@link ITransport.accepts}.
|
|
178
|
+
*/
|
|
179
|
+
export type TransportDispatchRecord = TransportRecord | SpanRecord;
|
|
78
180
|
/**
|
|
79
181
|
* Opciones aceptadas por cualquier transport al registrarse.
|
|
80
182
|
*/
|
|
@@ -102,10 +204,23 @@ export interface TransportTarget {
|
|
|
102
204
|
}
|
|
103
205
|
/**
|
|
104
206
|
* Contrato mínimo que todo transport debe satisfacer.
|
|
207
|
+
*
|
|
208
|
+
* Un transport declara qué kinds de record acepta vía {@link accepts}:
|
|
209
|
+
* ausente o `['log']` → log-only (default, comportamiento de todos los
|
|
210
|
+
* transports históricos); `['span']` → solo spans (p.ej. `OtlpTraceTransport`);
|
|
211
|
+
* `['log', 'span']` → ambos. El {@link ITransportManager} garantiza que un
|
|
212
|
+
* transport jamás recibe un record de un kind que no declaró — un
|
|
213
|
+
* `SpanRecord` nunca llega a un transport de logs.
|
|
105
214
|
*/
|
|
106
215
|
export interface ITransport {
|
|
107
216
|
readonly name: string;
|
|
108
|
-
|
|
217
|
+
/**
|
|
218
|
+
* Kinds de record que este transport acepta. **Default `['log']` cuando
|
|
219
|
+
* está ausente** — los transports existentes siguen siendo log-only sin
|
|
220
|
+
* cambios.
|
|
221
|
+
*/
|
|
222
|
+
readonly accepts?: readonly TransportRecordKind[];
|
|
223
|
+
write(record: TransportDispatchRecord): void | Promise<void>;
|
|
109
224
|
flush?(): void | Promise<void>;
|
|
110
225
|
close?(): void | Promise<void>;
|
|
111
226
|
isReady?(): boolean;
|
|
@@ -125,7 +240,11 @@ export interface IBufferedTransport extends ITransport {
|
|
|
125
240
|
export interface ITransportManager {
|
|
126
241
|
add(target: TransportTarget): string;
|
|
127
242
|
remove(id: string): boolean;
|
|
128
|
-
|
|
243
|
+
/**
|
|
244
|
+
* Dispatcha un record (log o span) a los transports que acepten su kind
|
|
245
|
+
* y (para logs) pasen el filtro de nivel del transport.
|
|
246
|
+
*/
|
|
247
|
+
write(record: TransportDispatchRecord): Promise<void>;
|
|
129
248
|
flush(): Promise<void>;
|
|
130
249
|
close(): Promise<void>;
|
|
131
250
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../../src/types/transports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAa,MAAM,WAAW,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOxD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOtD,CAAC;AAEX;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,iBAAiB,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAE5H;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,6DAA6D;IAC7D,KAAK,EAAE,QAAQ,CAAC;IAChB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACjC,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,oFAAoF;IACpF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,eAAe,GAAG,IAAI,CAAC;IAChE,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../../src/types/transports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Resolución compartida de `AsyncLocalStorage` — utilidad
|
|
3
|
+
* interna, NO exportada por el barrel público (`src/utils/index.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Único punto de verdad para resolver `node:async_hooks` por capas. Lo
|
|
6
|
+
* consumen tanto `transports/SpanRuntime.ts` (ALS singleton de spans) como
|
|
7
|
+
* `context/LogContext.ts` (ALS singleton de MDC). Antes había dos copias de
|
|
8
|
+
* este conocimiento: una acertaba (SpanRuntime, la que sigue este archivo) y
|
|
9
|
+
* otra usaba `typeof AsyncLocalStorage !== 'undefined'` — un feature-detect
|
|
10
|
+
* roto, porque en Node y Bun el constructor NO es global, así que esa rama
|
|
11
|
+
* quedaba siempre en `undefined` y el MDC de logs era no-op silencioso fuera
|
|
12
|
+
* del browser.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Forma mínima de `AsyncLocalStorage<T>` que necesita este paquete.
|
|
16
|
+
*/
|
|
17
|
+
export interface AsyncLocalStorageLike<T> {
|
|
18
|
+
run<R>(store: T, fn: () => R): R;
|
|
19
|
+
getStore(): T | undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Resuelve `AsyncLocalStorage` por capas:
|
|
23
|
+
* 1. global `AsyncLocalStorage` (runtimes/polyfills que lo exponen),
|
|
24
|
+
* 2. `process.getBuiltinModule('async_hooks')` (Node >= 22.3, Bun),
|
|
25
|
+
* 3. `require('node:async_hooks')` (CJS interop),
|
|
26
|
+
* 4. `undefined` → browser estricto: sin correlación (degradación
|
|
27
|
+
* documentada; el caller decide qué hacer sin ALS).
|
|
28
|
+
*
|
|
29
|
+
* Nota: NO basta con `typeof AsyncLocalStorage !== 'undefined'` — en Node y
|
|
30
|
+
* Bun el constructor NO es global y hay que ir a `node:async_hooks`.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveAsyncLocalStorage<T>(): AsyncLocalStorageLike<T> | undefined;
|
|
33
|
+
//# sourceMappingURL=asyncLocalStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncLocalStorage.d.ts","sourceRoot":"","sources":["../../src/utils/asyncLocalStorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,IAAI,CAAC,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,KAAK,qBAAqB,CAAC,CAAC,CAAC,GAAG,SAAS,CAiClF"}
|