@vinhnt-sdk/trace 0.4.2 → 0.11.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/LICENSE +21 -21
- package/README.md +200 -0
- package/dist/gen-ai-attributes.d.ts +99 -0
- package/dist/gen-ai-attributes.d.ts.map +1 -0
- package/dist/gen-ai-attributes.js +126 -0
- package/dist/gen-ai-attributes.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/otlp-exporter.d.ts +141 -0
- package/dist/otlp-exporter.d.ts.map +1 -0
- package/dist/otlp-exporter.js +238 -0
- package/dist/otlp-exporter.js.map +1 -0
- package/dist/telemetry.d.ts +27 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +15 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/timeline.d.ts +26 -3
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +33 -14
- package/dist/timeline.js.map +1 -1
- package/dist/tracing.d.ts +6 -3
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +8 -5
- package/dist/tracing.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP/HTTP span exporter — maps custom Span → OTLP ExportTraceServiceRequest.
|
|
3
|
+
*
|
|
4
|
+
* Zero hard deps: pure JSON encoding over fetch (no @opentelemetry/* runtime dep).
|
|
5
|
+
* Endpoint/headers/service name resolved from config first, then standard OTEL env vars.
|
|
6
|
+
* Default path (no createOtlpSpanExporter call) remains unchanged — no-op / console telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Env (read unless overridden in config):
|
|
9
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT full URL for /v1/traces
|
|
10
|
+
* OTEL_EXPORTER_OTLP_ENDPOINT base URL → <base>/v1/traces
|
|
11
|
+
* OTEL_EXPORTER_OTLP_HEADERS k1=v1,k2=v2
|
|
12
|
+
* OTEL_SERVICE_NAME resource attribute service.name
|
|
13
|
+
*/
|
|
14
|
+
import type { Span } from "./tracing.js";
|
|
15
|
+
/** Minimal fetch shape (injectable for tests / custom runtimes). */
|
|
16
|
+
export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
17
|
+
/** Config for createOtlpSpanExporter — all fields optional; env fills gaps. */
|
|
18
|
+
export interface OtlpExporterConfig {
|
|
19
|
+
/** Full OTLP/HTTP traces endpoint (overrides env). */
|
|
20
|
+
endpoint?: string;
|
|
21
|
+
/** Extra HTTP headers merged over env headers. */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/** Resource attributes (service.name etc.). */
|
|
24
|
+
resourceAttributes?: Record<string, unknown>;
|
|
25
|
+
/** Export timeout in ms (default 10000). */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** Instrumentation scope name (default @vinhnt-sdk/trace). */
|
|
28
|
+
scopeName?: string;
|
|
29
|
+
/** Instrumentation scope version. */
|
|
30
|
+
scopeVersion?: string;
|
|
31
|
+
/** Env source for resolution (default process.env). Injectable for tests. */
|
|
32
|
+
env?: Record<string, string | undefined>;
|
|
33
|
+
/** Custom fetch (default globalThis.fetch). */
|
|
34
|
+
fetch?: FetchLike;
|
|
35
|
+
}
|
|
36
|
+
/** Span exporter seam — default path stays no-op unless an exporter is wired. */
|
|
37
|
+
export interface SpanExporter {
|
|
38
|
+
export(spans: readonly Span[]): Promise<void>;
|
|
39
|
+
shutdown(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export type OtlpAnyValue = {
|
|
42
|
+
stringValue: string;
|
|
43
|
+
} | {
|
|
44
|
+
boolValue: boolean;
|
|
45
|
+
} | {
|
|
46
|
+
intValue: string;
|
|
47
|
+
} | {
|
|
48
|
+
doubleValue: number;
|
|
49
|
+
} | {
|
|
50
|
+
arrayValue: {
|
|
51
|
+
values: OtlpAnyValue[];
|
|
52
|
+
};
|
|
53
|
+
} | {
|
|
54
|
+
kvlistValue: {
|
|
55
|
+
values: Array<{
|
|
56
|
+
key: string;
|
|
57
|
+
value: OtlpAnyValue;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
export interface OtlpKeyValue {
|
|
62
|
+
key: string;
|
|
63
|
+
value: OtlpAnyValue;
|
|
64
|
+
}
|
|
65
|
+
export interface OtlpSpanEvent {
|
|
66
|
+
timeUnixNano: string;
|
|
67
|
+
name: string;
|
|
68
|
+
attributes?: OtlpKeyValue[];
|
|
69
|
+
}
|
|
70
|
+
export interface OtlpSpanStatus {
|
|
71
|
+
code: number;
|
|
72
|
+
message?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface OtlpSpan {
|
|
75
|
+
traceId: string;
|
|
76
|
+
spanId: string;
|
|
77
|
+
parentSpanId?: string;
|
|
78
|
+
name: string;
|
|
79
|
+
kind: number;
|
|
80
|
+
startTimeUnixNano: string;
|
|
81
|
+
endTimeUnixNano: string;
|
|
82
|
+
attributes: OtlpKeyValue[];
|
|
83
|
+
events: OtlpSpanEvent[];
|
|
84
|
+
status: OtlpSpanStatus;
|
|
85
|
+
}
|
|
86
|
+
export interface OtlpResourceSpans {
|
|
87
|
+
resource: {
|
|
88
|
+
attributes: OtlpKeyValue[];
|
|
89
|
+
};
|
|
90
|
+
scopeSpans: Array<{
|
|
91
|
+
scope: {
|
|
92
|
+
name: string;
|
|
93
|
+
version?: string;
|
|
94
|
+
};
|
|
95
|
+
spans: OtlpSpan[];
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
export interface OtlpExportTraceRequest {
|
|
99
|
+
resourceSpans: OtlpResourceSpans[];
|
|
100
|
+
}
|
|
101
|
+
/** OTLP span kind codes (proto Span.Kind). */
|
|
102
|
+
export declare const OTLP_SPAN_KIND: Record<string, number>;
|
|
103
|
+
/** OTLP status codes (proto Status.StatusCode). */
|
|
104
|
+
export declare const OTLP_STATUS_OK = 1;
|
|
105
|
+
export declare const OTLP_STATUS_ERROR = 2;
|
|
106
|
+
export declare const OTLP_STATUS_UNSET = 0;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve OTLP traces endpoint: config.endpoint > OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
109
|
+
* > OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces". Returns undefined if none set.
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolveOtlpEndpoint(config?: Pick<OtlpExporterConfig, "endpoint" | "env">): string | undefined;
|
|
112
|
+
/** Parse OTEL_EXPORTER_OTLP_HEADERS format `k1=v1,k2=v2`. */
|
|
113
|
+
export declare function parseOtlpHeaders(raw: string | undefined): Record<string, string>;
|
|
114
|
+
/** Deterministic FNV-1a → hex string of `length` chars (span/trace id wire form). */
|
|
115
|
+
export declare function toOtlpId(id: string, length: number): string;
|
|
116
|
+
/** Convert ms epoch → OTLP timeUnixNano string. */
|
|
117
|
+
export declare function msToUnixNano(ms: number): string;
|
|
118
|
+
/** Map a JS value to OTLP AnyValue. */
|
|
119
|
+
export declare function toOtlpAnyValue(value: unknown): OtlpAnyValue;
|
|
120
|
+
/** Convert attributes record → OTLP key-value list. */
|
|
121
|
+
export declare function toOtlpAttributes(attributes: Record<string, unknown>): OtlpKeyValue[];
|
|
122
|
+
/** Map a custom Span → OTLP JSON span. Exported for unit tests / custom pipelines. */
|
|
123
|
+
export declare function mapSpanToOtlp(span: Span): OtlpSpan;
|
|
124
|
+
/** Build full ExportTraceServiceRequest body. */
|
|
125
|
+
export declare function buildOtlpExportRequest(spans: readonly Span[], config?: Pick<OtlpExporterConfig, "resourceAttributes" | "scopeName" | "scopeVersion">): OtlpExportTraceRequest;
|
|
126
|
+
/**
|
|
127
|
+
* Create an OTLP/HTTP span exporter (JSON encoding).
|
|
128
|
+
*
|
|
129
|
+
* @throws ConfigurationError if no endpoint in config or env.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const exporter = createOtlpSpanExporter({
|
|
134
|
+
* endpoint: "http://localhost:4318/v1/traces",
|
|
135
|
+
* });
|
|
136
|
+
* await exporter.export(recorder.getSpans());
|
|
137
|
+
* await exporter.shutdown();
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export declare function createOtlpSpanExporter(config?: OtlpExporterConfig): SpanExporter;
|
|
141
|
+
//# sourceMappingURL=otlp-exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-exporter.d.ts","sourceRoot":"","sources":["../src/otlp-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP/HTTP span exporter — maps custom Span → OTLP ExportTraceServiceRequest.
|
|
3
|
+
*
|
|
4
|
+
* Zero hard deps: pure JSON encoding over fetch (no @opentelemetry/* runtime dep).
|
|
5
|
+
* Endpoint/headers/service name resolved from config first, then standard OTEL env vars.
|
|
6
|
+
* Default path (no createOtlpSpanExporter call) remains unchanged — no-op / console telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Env (read unless overridden in config):
|
|
9
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT full URL for /v1/traces
|
|
10
|
+
* OTEL_EXPORTER_OTLP_ENDPOINT base URL → <base>/v1/traces
|
|
11
|
+
* OTEL_EXPORTER_OTLP_HEADERS k1=v1,k2=v2
|
|
12
|
+
* OTEL_SERVICE_NAME resource attribute service.name
|
|
13
|
+
*/
|
|
14
|
+
import { ConfigurationError, NetworkError } from "@vinhnt-sdk/schema";
|
|
15
|
+
/** OTLP span kind codes (proto Span.Kind). */
|
|
16
|
+
export const OTLP_SPAN_KIND = {
|
|
17
|
+
internal: 1,
|
|
18
|
+
server: 2,
|
|
19
|
+
client: 3,
|
|
20
|
+
producer: 4,
|
|
21
|
+
consumer: 5,
|
|
22
|
+
};
|
|
23
|
+
/** OTLP status codes (proto Status.StatusCode). */
|
|
24
|
+
export const OTLP_STATUS_OK = 1;
|
|
25
|
+
export const OTLP_STATUS_ERROR = 2;
|
|
26
|
+
export const OTLP_STATUS_UNSET = 0;
|
|
27
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
28
|
+
const DEFAULT_SCOPE_NAME = "@vinhnt-sdk/trace";
|
|
29
|
+
/**
|
|
30
|
+
* Resolve OTLP traces endpoint: config.endpoint > OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
31
|
+
* > OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces". Returns undefined if none set.
|
|
32
|
+
*/
|
|
33
|
+
export function resolveOtlpEndpoint(config) {
|
|
34
|
+
const env = config?.env ?? (typeof process !== "undefined" ? process.env : undefined);
|
|
35
|
+
if (config?.endpoint)
|
|
36
|
+
return config.endpoint;
|
|
37
|
+
const traces = env?.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;
|
|
38
|
+
if (traces)
|
|
39
|
+
return traces;
|
|
40
|
+
const base = env?.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
41
|
+
if (base) {
|
|
42
|
+
return base.endsWith("/v1/traces") ? base : `${base.replace(/\/+$/, "")}/v1/traces`;
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Parse OTEL_EXPORTER_OTLP_HEADERS format `k1=v1,k2=v2`. */
|
|
47
|
+
export function parseOtlpHeaders(raw) {
|
|
48
|
+
if (!raw)
|
|
49
|
+
return {};
|
|
50
|
+
const out = {};
|
|
51
|
+
for (const pair of raw.split(",")) {
|
|
52
|
+
const eq = pair.indexOf("=");
|
|
53
|
+
if (eq <= 0)
|
|
54
|
+
continue;
|
|
55
|
+
const key = pair.slice(0, eq).trim();
|
|
56
|
+
const value = pair.slice(eq + 1).trim();
|
|
57
|
+
if (key)
|
|
58
|
+
out[key] = value;
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/** Deterministic FNV-1a → hex string of `length` chars (span/trace id wire form). */
|
|
63
|
+
export function toOtlpId(id, length) {
|
|
64
|
+
let hex = "";
|
|
65
|
+
let seed = 0x811c9dc5;
|
|
66
|
+
let round = 0;
|
|
67
|
+
while (hex.length < length) {
|
|
68
|
+
let h = seed;
|
|
69
|
+
const input = `${id}#${round++}`;
|
|
70
|
+
for (let i = 0; i < input.length; i++) {
|
|
71
|
+
h ^= input.charCodeAt(i);
|
|
72
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
73
|
+
}
|
|
74
|
+
hex += (h >>> 0).toString(16).padStart(8, "0");
|
|
75
|
+
seed = (h ^ 0x9e3779b9) >>> 0;
|
|
76
|
+
}
|
|
77
|
+
return hex.slice(0, length);
|
|
78
|
+
}
|
|
79
|
+
/** Convert ms epoch → OTLP timeUnixNano string. */
|
|
80
|
+
export function msToUnixNano(ms) {
|
|
81
|
+
return `${BigInt(Math.max(0, Math.trunc(ms))) * 1000000n}`;
|
|
82
|
+
}
|
|
83
|
+
/** Map a JS value to OTLP AnyValue. */
|
|
84
|
+
export function toOtlpAnyValue(value) {
|
|
85
|
+
if (value === null || value === undefined)
|
|
86
|
+
return { stringValue: "" };
|
|
87
|
+
if (typeof value === "string")
|
|
88
|
+
return { stringValue: value };
|
|
89
|
+
if (typeof value === "boolean")
|
|
90
|
+
return { boolValue: value };
|
|
91
|
+
if (typeof value === "number") {
|
|
92
|
+
return Number.isInteger(value) && Number.isSafeInteger(value)
|
|
93
|
+
? { intValue: String(value) }
|
|
94
|
+
: { doubleValue: value };
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "bigint")
|
|
97
|
+
return { intValue: value.toString() };
|
|
98
|
+
if (Array.isArray(value)) {
|
|
99
|
+
return { arrayValue: { values: value.map(toOtlpAnyValue) } };
|
|
100
|
+
}
|
|
101
|
+
if (typeof value === "object") {
|
|
102
|
+
const values = Object.entries(value).map(([key, v]) => ({ key, value: toOtlpAnyValue(v) }));
|
|
103
|
+
return { kvlistValue: { values } };
|
|
104
|
+
}
|
|
105
|
+
return { stringValue: String(value) };
|
|
106
|
+
}
|
|
107
|
+
/** Convert attributes record → OTLP key-value list. */
|
|
108
|
+
export function toOtlpAttributes(attributes) {
|
|
109
|
+
return Object.entries(attributes).map(([key, value]) => ({
|
|
110
|
+
key,
|
|
111
|
+
value: toOtlpAnyValue(value),
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
function mapStatus(status) {
|
|
115
|
+
if (status === "ok")
|
|
116
|
+
return { code: OTLP_STATUS_OK };
|
|
117
|
+
if (status === "" || status === "unset")
|
|
118
|
+
return { code: OTLP_STATUS_UNSET };
|
|
119
|
+
// error | cancelled | timeout | custom → ERROR with message
|
|
120
|
+
const result = { code: OTLP_STATUS_ERROR };
|
|
121
|
+
if (status !== "error")
|
|
122
|
+
result.message = status;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
/** Map a custom Span → OTLP JSON span. Exported for unit tests / custom pipelines. */
|
|
126
|
+
export function mapSpanToOtlp(span) {
|
|
127
|
+
const endMs = span.endTimeMs > 0 ? span.endTimeMs : span.startTimeMs;
|
|
128
|
+
const out = {
|
|
129
|
+
traceId: toOtlpId(span.traceId ?? span.id, 32),
|
|
130
|
+
spanId: toOtlpId(span.id, 16),
|
|
131
|
+
name: span.name,
|
|
132
|
+
kind: OTLP_SPAN_KIND[span.kind] ?? OTLP_SPAN_KIND.internal,
|
|
133
|
+
startTimeUnixNano: msToUnixNano(span.startTimeMs),
|
|
134
|
+
endTimeUnixNano: msToUnixNano(endMs),
|
|
135
|
+
attributes: toOtlpAttributes(span.attributes),
|
|
136
|
+
events: span.events.map((event) => ({
|
|
137
|
+
timeUnixNano: msToUnixNano(event.timestampMs),
|
|
138
|
+
name: event.name,
|
|
139
|
+
attributes: toOtlpAttributes(event.attributes),
|
|
140
|
+
})),
|
|
141
|
+
status: mapStatus(span.status),
|
|
142
|
+
};
|
|
143
|
+
if (span.parentId) {
|
|
144
|
+
out.parentSpanId = toOtlpId(span.parentId, 16);
|
|
145
|
+
}
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
/** Build full ExportTraceServiceRequest body. */
|
|
149
|
+
export function buildOtlpExportRequest(spans, config) {
|
|
150
|
+
const resourceAttrs = {
|
|
151
|
+
...(config?.resourceAttributes ?? {}),
|
|
152
|
+
};
|
|
153
|
+
if (resourceAttrs["service.name"] === undefined) {
|
|
154
|
+
resourceAttrs["service.name"] = "vinhnt-sdk";
|
|
155
|
+
}
|
|
156
|
+
const scope = {
|
|
157
|
+
name: config?.scopeName ?? DEFAULT_SCOPE_NAME,
|
|
158
|
+
};
|
|
159
|
+
if (config?.scopeVersion !== undefined) {
|
|
160
|
+
scope.version = config.scopeVersion;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
resourceSpans: [
|
|
164
|
+
{
|
|
165
|
+
resource: { attributes: toOtlpAttributes(resourceAttrs) },
|
|
166
|
+
scopeSpans: [
|
|
167
|
+
{
|
|
168
|
+
scope,
|
|
169
|
+
spans: spans.map(mapSpanToOtlp),
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create an OTLP/HTTP span exporter (JSON encoding).
|
|
178
|
+
*
|
|
179
|
+
* @throws ConfigurationError if no endpoint in config or env.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const exporter = createOtlpSpanExporter({
|
|
184
|
+
* endpoint: "http://localhost:4318/v1/traces",
|
|
185
|
+
* });
|
|
186
|
+
* await exporter.export(recorder.getSpans());
|
|
187
|
+
* await exporter.shutdown();
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export function createOtlpSpanExporter(config = {}) {
|
|
191
|
+
const endpoint = resolveOtlpEndpoint(config);
|
|
192
|
+
if (!endpoint) {
|
|
193
|
+
throw new ConfigurationError("OTLP endpoint not configured: set config.endpoint, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, or OTEL_EXPORTER_OTLP_ENDPOINT");
|
|
194
|
+
}
|
|
195
|
+
const env = config.env ?? (typeof process !== "undefined" ? process.env : undefined);
|
|
196
|
+
const headers = {
|
|
197
|
+
"content-type": "application/json",
|
|
198
|
+
...parseOtlpHeaders(env?.OTEL_EXPORTER_OTLP_HEADERS),
|
|
199
|
+
...(config.headers ?? {}),
|
|
200
|
+
};
|
|
201
|
+
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
202
|
+
const fetchImpl = config.fetch ??
|
|
203
|
+
((input, init) => {
|
|
204
|
+
if (typeof globalThis.fetch !== "function") {
|
|
205
|
+
throw new NetworkError("globalThis.fetch is not available; pass config.fetch");
|
|
206
|
+
}
|
|
207
|
+
return globalThis.fetch(input, init);
|
|
208
|
+
});
|
|
209
|
+
let closed = false;
|
|
210
|
+
return {
|
|
211
|
+
async export(spans) {
|
|
212
|
+
if (closed)
|
|
213
|
+
return;
|
|
214
|
+
if (spans.length === 0)
|
|
215
|
+
return;
|
|
216
|
+
const body = JSON.stringify(buildOtlpExportRequest(spans, config));
|
|
217
|
+
let response;
|
|
218
|
+
try {
|
|
219
|
+
response = await fetchImpl(endpoint, {
|
|
220
|
+
method: "POST",
|
|
221
|
+
headers,
|
|
222
|
+
body,
|
|
223
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (cause) {
|
|
227
|
+
throw new NetworkError(`OTLP export failed: ${String(cause)}`, { cause });
|
|
228
|
+
}
|
|
229
|
+
if (!response.ok) {
|
|
230
|
+
throw new NetworkError(`OTLP export failed: HTTP ${response.status} ${response.statusText}`);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
async shutdown() {
|
|
234
|
+
closed = true;
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=otlp-exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-exporter.js","sourceRoot":"","sources":["../src/otlp-exporter.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -75,4 +75,31 @@ export interface ContextPressure {
|
|
|
75
75
|
* Calculate context pressure.
|
|
76
76
|
*/
|
|
77
77
|
export declare function calculateContextPressure(currentTokens: number, maxTokens: number, compactThreshold?: number): ContextPressure;
|
|
78
|
+
/**
|
|
79
|
+
* Telemetry provider interface — export telemetry data to external systems.
|
|
80
|
+
*
|
|
81
|
+
* Inspired by Vercel AI SDK's telemetry pattern.
|
|
82
|
+
*/
|
|
83
|
+
export interface TelemetryProvider {
|
|
84
|
+
exportTrace(trace: {
|
|
85
|
+
traceId: string;
|
|
86
|
+
spans: Array<{
|
|
87
|
+
spanId: string;
|
|
88
|
+
name: string;
|
|
89
|
+
startTime: number;
|
|
90
|
+
endTime?: number;
|
|
91
|
+
attributes?: Record<string, unknown>;
|
|
92
|
+
}>;
|
|
93
|
+
}): Promise<void> | void;
|
|
94
|
+
exportMetric(metric: {
|
|
95
|
+
name: string;
|
|
96
|
+
value: number;
|
|
97
|
+
unit: string;
|
|
98
|
+
attributes?: Record<string, unknown>;
|
|
99
|
+
}): Promise<void> | void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Default telemetry provider — logs to console.
|
|
103
|
+
*/
|
|
104
|
+
export declare const ConsoleTelemetryProvider: TelemetryProvider;
|
|
78
105
|
//# sourceMappingURL=telemetry.d.ts.map
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8BAAwB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAA8B,GACtC,MAAM,CAIR;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAEhD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIvD,iCAAiC;IACjC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAe/E,sBAAsB;IACtB,QAAQ,IAAI,UAAU;IAUtB,0BAA0B;IAC1B,iBAAiB,IAAI,MAAM;IAI3B,8BAA8B;IAC9B,aAAa,IAAI,SAAS,UAAU,EAAE;IAItC,sBAAsB;IACtB,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAM,GACrB,eAAe,CAQjB"}
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8BAAwB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAA8B,GACtC,MAAM,CAIR;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAEhD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIvD,iCAAiC;IACjC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAe/E,sBAAsB;IACtB,QAAQ,IAAI,UAAU;IAUtB,0BAA0B;IAC1B,iBAAiB,IAAI,MAAM;IAI3B,8BAA8B;IAC9B,aAAa,IAAI,SAAS,UAAU,EAAE;IAItC,sBAAsB;IACtB,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAM,GACrB,eAAe,CAQjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,KAAK,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACtC,CAAC,CAAC;KACJ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAWtC,CAAC"}
|
package/dist/telemetry.js
CHANGED
|
@@ -98,4 +98,19 @@ export function calculateContextPressure(currentTokens, maxTokens, compactThresh
|
|
|
98
98
|
shouldCompact: pressure >= compactThreshold,
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Default telemetry provider — logs to console.
|
|
103
|
+
*/
|
|
104
|
+
export const ConsoleTelemetryProvider = {
|
|
105
|
+
exportTrace(trace) {
|
|
106
|
+
if (typeof console !== "undefined") {
|
|
107
|
+
console.log("[trace]", trace);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
exportMetric(metric) {
|
|
111
|
+
if (typeof console !== "undefined") {
|
|
112
|
+
console.log("[metric]", metric);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
101
116
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/timeline.d.ts
CHANGED
|
@@ -7,9 +7,31 @@
|
|
|
7
7
|
* The timeline is a linear sequence of events that can be replayed
|
|
8
8
|
* to reconstruct the full conversation history.
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import type { KnownRunEvent } from "@vinhnt-sdk/schema";
|
|
11
|
+
/**
|
|
12
|
+
* Timeline event types — DERIVED from `KnownRunEvent["type"]` (the canonical
|
|
13
|
+
* run-event vocabulary). There is intentionally no `(string & {})` escape
|
|
14
|
+
* hatch: a name that is not emitted by the SDK cannot enter the timeline, so
|
|
15
|
+
* phantom names (`turn.ended`, `permission.asked`, `assistant.chunk`, …) are
|
|
16
|
+
* rejected at compile time.
|
|
17
|
+
*/
|
|
18
|
+
export type TimelineEventType = KnownRunEvent["type"];
|
|
19
|
+
/**
|
|
20
|
+
* Every timeline event type the SDK emits, in emission order.
|
|
21
|
+
*
|
|
22
|
+
* Checked both ways at compile time:
|
|
23
|
+
* - `satisfies` → an unknown name fails typecheck (no phantoms);
|
|
24
|
+
* - {@link TimelineCoversAllRunEvents} → a missing name fails typecheck
|
|
25
|
+
* (adding a `KnownRunEvent` without updating this list is a build error).
|
|
26
|
+
*/
|
|
27
|
+
export declare const KNOWN_TIMELINE_EVENT_TYPES: readonly ["run.started", "step.started", "token.streamed", "thinking.started", "thinking.content", "thinking.completed", "context.compressed", "token.counted", "tool.invoked", "tool.completed", "tool.failed", "tool.cancelled", "tool.self_correcting", "step.completed", "step.failed", "run.completed", "permission.requested", "permission.replied", "step.type_changed", "model.cost", "turn.started", "turn.end", "agent.handoff", "llm.retry", "llm.retry_started", "llm.failover", "approval.asked", "approval.decided", "request.header", "request.context", "llm.request", "llm.response"];
|
|
28
|
+
/** Compile-time helper: constrains `T` to `never` (errors on anything else). */
|
|
29
|
+
type AssertNever<T extends never> = T;
|
|
30
|
+
/**
|
|
31
|
+
* Compile-time drift check: fails to typecheck when a `KnownRunEvent` type
|
|
32
|
+
* is missing from {@link KNOWN_TIMELINE_EVENT_TYPES}.
|
|
33
|
+
*/
|
|
34
|
+
export type TimelineCoversAllRunEvents = AssertNever<Exclude<KnownRunEvent["type"], (typeof KNOWN_TIMELINE_EVENT_TYPES)[number]>>;
|
|
13
35
|
/** A single timeline event */
|
|
14
36
|
export interface TimelineEvent {
|
|
15
37
|
/** Event type */
|
|
@@ -60,4 +82,5 @@ export interface TranscriptEntry {
|
|
|
60
82
|
output?: unknown;
|
|
61
83
|
timestampMs: number;
|
|
62
84
|
}
|
|
85
|
+
export {};
|
|
63
86
|
//# sourceMappingURL=timeline.d.ts.map
|
package/dist/timeline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,wkBAiCc,CAAC;AAEtD,gFAAgF;AAChF,KAAK,WAAW,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC;AAEtC;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAClD,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5E,CAAC;AAEF,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,0BAA0B;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,GAAG,CAAK;IAEhB,sBAAsB;IACtB,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;IAW7E,qBAAqB;IACrB,SAAS,IAAI,SAAS,aAAa,EAAE;IAIrC,kCAAkC;IAClC,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,aAAa,EAAE;IAIlE,iCAAiC;IACjC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE;IAI1E,sBAAsB;IACtB,KAAK,IAAI,MAAM;IAIf,mCAAmC;IACnC,aAAa,IAAI,MAAM;IAKvB,sCAAsC;IAChC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7E,4BAA4B;IAC5B,MAAM,IAAI,aAAa,EAAE;IAIzB,8BAA8B;IAC9B,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;CAOtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,eAAe,EAAE,CAuCnF;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
package/dist/timeline.js
CHANGED
|
@@ -7,28 +7,47 @@
|
|
|
7
7
|
* The timeline is a linear sequence of events that can be replayed
|
|
8
8
|
* to reconstruct the full conversation history.
|
|
9
9
|
*/
|
|
10
|
+
/**
|
|
11
|
+
* Every timeline event type the SDK emits, in emission order.
|
|
12
|
+
*
|
|
13
|
+
* Checked both ways at compile time:
|
|
14
|
+
* - `satisfies` → an unknown name fails typecheck (no phantoms);
|
|
15
|
+
* - {@link TimelineCoversAllRunEvents} → a missing name fails typecheck
|
|
16
|
+
* (adding a `KnownRunEvent` without updating this list is a build error).
|
|
17
|
+
*/
|
|
10
18
|
export const KNOWN_TIMELINE_EVENT_TYPES = [
|
|
11
19
|
"run.started",
|
|
12
|
-
"run.completed",
|
|
13
|
-
"run.failed",
|
|
14
20
|
"step.started",
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
21
|
+
"token.streamed",
|
|
22
|
+
"thinking.started",
|
|
23
|
+
"thinking.content",
|
|
24
|
+
"thinking.completed",
|
|
25
|
+
"context.compressed",
|
|
26
|
+
"token.counted",
|
|
19
27
|
"tool.invoked",
|
|
20
28
|
"tool.completed",
|
|
21
29
|
"tool.failed",
|
|
22
30
|
"tool.cancelled",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
31
|
+
"tool.self_correcting",
|
|
32
|
+
"step.completed",
|
|
33
|
+
"step.failed",
|
|
34
|
+
"run.completed",
|
|
35
|
+
"permission.requested",
|
|
36
|
+
"permission.replied",
|
|
37
|
+
"step.type_changed",
|
|
38
|
+
"model.cost",
|
|
39
|
+
"turn.started",
|
|
40
|
+
"turn.end",
|
|
41
|
+
"agent.handoff",
|
|
25
42
|
"llm.retry",
|
|
26
43
|
"llm.retry_started",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
44
|
+
"llm.failover",
|
|
45
|
+
"approval.asked",
|
|
46
|
+
"approval.decided",
|
|
47
|
+
"request.header",
|
|
48
|
+
"request.context",
|
|
49
|
+
"llm.request",
|
|
50
|
+
"llm.response",
|
|
32
51
|
];
|
|
33
52
|
/**
|
|
34
53
|
* Timeline — ordered sequence of events for a session.
|
|
@@ -103,7 +122,7 @@ export function buildTranscript(events) {
|
|
|
103
122
|
timestampMs: event.timestampMs,
|
|
104
123
|
});
|
|
105
124
|
break;
|
|
106
|
-
case "
|
|
125
|
+
case "token.streamed":
|
|
107
126
|
entries.push({
|
|
108
127
|
type: "assistant",
|
|
109
128
|
content: event.data.content,
|
package/dist/timeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"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"}
|
package/dist/tracing.d.ts
CHANGED
|
@@ -53,8 +53,11 @@ export interface TraceContext {
|
|
|
53
53
|
export declare function generateTraceId(): string;
|
|
54
54
|
/**
|
|
55
55
|
* Create a new span.
|
|
56
|
+
*
|
|
57
|
+
* `startTimeMs` back-dates the span — used when a span is recorded after the
|
|
58
|
+
* work finished (e.g. tool batches, failed calls) but must keep its real start.
|
|
56
59
|
*/
|
|
57
|
-
export declare function createSpan(name: string, kind: SpanKind, parentId?: string, traceId?: string): Span;
|
|
60
|
+
export declare function createSpan(name: string, kind: SpanKind, parentId?: string, traceId?: string, startTimeMs?: number): Span;
|
|
58
61
|
/**
|
|
59
62
|
* End a span with a status.
|
|
60
63
|
*/
|
|
@@ -70,8 +73,8 @@ export declare class SpanRecorder {
|
|
|
70
73
|
private readonly spans;
|
|
71
74
|
private readonly traceId;
|
|
72
75
|
constructor(traceId?: string);
|
|
73
|
-
/** Start a new span */
|
|
74
|
-
startSpan(name: string, kind: SpanKind, parentId?: string): Span;
|
|
76
|
+
/** Start a new span — `startTimeMs` optionally back-dates the start. */
|
|
77
|
+
startSpan(name: string, kind: SpanKind, parentId?: string, startTimeMs?: number): Span;
|
|
75
78
|
/** End a span */
|
|
76
79
|
endSpan(span: Span, status?: SpanStatus): void;
|
|
77
80
|
/** Get all recorded spans */
|