@vinhnt-sdk/trace 0.4.2 → 0.4.3

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/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # @vinhnt-sdk/trace
2
+
3
+ > Version: 0.4.3 | Status: STABLE
4
+
5
+ Observability for vinhnt-sdk — OpenTelemetry-compatible spans, timeline replay, telemetry aggregation, and cost tracking.
6
+
7
+ ## Install
8
+
9
+ `ash
10
+ # npm
11
+ npm install @vinhnt-sdk/trace
12
+
13
+ # pnpm (monorepo)
14
+ pnpm add @vinhnt-sdk/trace
15
+ `
16
+
17
+ ## Features
18
+
19
+ - **SpanRecorder** — Record and query OpenTelemetry-compatible spans
20
+ - **Timeline** — Build transcripts from run events for replay
21
+ - **CostMeter** — Track token usage and calculate costs per model
22
+ - **ContextPressure** — Monitor context window utilization
23
+ - **TelemetryProvider** — Interface for custom telemetry backends
24
+ - **OTLP exporter** — `createOtlpSpanExporter` ships spans to any OTLP/HTTP collector (optional)
25
+ - **DEFAULT_MODEL_PRICING** — Built-in pricing for common models
26
+
27
+ ## Quick Start
28
+
29
+ ` ypescript
30
+ import {
31
+ SpanRecorder, createSpan, endSpan,
32
+ CostMeter, calculateCost, DEFAULT_MODEL_PRICING,
33
+ Timeline, buildTranscript,
34
+ } from "@vinhnt-sdk/trace";
35
+
36
+ // Create and record spans
37
+ const recorder = new SpanRecorder();
38
+ const span = createSpan({ name: "llm-call", kind: "client" });
39
+ recorder.record(span);
40
+
41
+ // ... do work ...
42
+
43
+ endSpan(span, { status: "ok" });
44
+
45
+ // Calculate costs
46
+ const meter = new CostMeter();
47
+ meter.record({
48
+ inputTokens: 1000,
49
+ outputTokens: 500,
50
+ model: "gpt-4o",
51
+ });
52
+ console.log(meter.totalCost); // Cost in USD
53
+
54
+ // Build transcript from events
55
+ const transcript = buildTranscript(events);
56
+ console.log(transcript);
57
+ `
58
+
59
+ ## API Reference
60
+
61
+ ### Tracing
62
+
63
+ | Export | Type | Description |
64
+ |--------|------|-------------|
65
+ | SpanRecorder | Class | Record and query spans |
66
+ | createSpan | Function | Create a new span |
67
+ | endSpan | Function | End a span with status |
68
+ | ddSpanEvent | Function | Add an event to a span |
69
+ | generateTraceId | Function | Generate a unique trace ID |
70
+
71
+ ### Span Types
72
+
73
+ | Export | Type | Description |
74
+ |--------|------|-------------|
75
+ | Span | Interface | A single trace span |
76
+ | SpanKind | Type | Span type (client, server, internal) |
77
+ | SpanStatus | Type | Span completion status |
78
+ | SpanEvent | Interface | Event within a span |
79
+ | SpanNode | Interface | Span tree node |
80
+ | TraceContext | Interface | Trace propagation context |
81
+
82
+ ### Timeline
83
+
84
+ | Export | Type | Description |
85
+ |--------|------|-------------|
86
+ | Timeline | Class | Build and query run timelines |
87
+ | uildTranscript | Function | Build transcript from events |
88
+ | TimelineEvent | Interface | Event in a timeline |
89
+ | TranscriptEntry | Interface | Transcript line item |
90
+
91
+ ### Telemetry
92
+
93
+ | Export | Type | Description |
94
+ |--------|------|-------------|
95
+ | CostMeter | Class | Track token costs |
96
+ | calculateCost | Function | Calculate cost from tokens |
97
+ | calculateContextPressure | Function | Calculate context utilization |
98
+ | DEFAULT_MODEL_PRICING | Constant | Default pricing for common models |
99
+ | ConsoleTelemetryProvider | Class | Console-based telemetry output |
100
+
101
+ ### Telemetry Types
102
+
103
+ | Export | Type | Description |
104
+ |--------|------|-------------|
105
+ | UsageStats | Interface | Token usage statistics |
106
+ | ModelPricing | Interface | Per-1M-token pricing |
107
+ | ContextPressure | Interface | Context window utilization |
108
+ | TelemetryProvider | Interface | Custom telemetry backend |
109
+
110
+ ### OTLP Export (P1-9)
111
+
112
+ | Export | Type | Description |
113
+ |--------|------|-------------|
114
+ | createOtlpSpanExporter | Function | OTLP/HTTP JSON exporter (config or env endpoint) |
115
+ | resolveOtlpEndpoint | Function | Resolve endpoint from config / `OTEL_EXPORTER_OTLP_*` |
116
+ | mapSpanToOtlp | Function | Map custom `Span` → OTLP JSON span |
117
+ | buildOtlpExportRequest | Function | Wrap spans into `ExportTraceServiceRequest` |
118
+ | SpanExporter | Interface | `export(spans)` / `shutdown()` seam |
119
+
120
+ Endpoint resolution (first match wins):
121
+
122
+ 1. `config.endpoint`
123
+ 2. `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`
124
+ 3. `OTEL_EXPORTER_OTLP_ENDPOINT` + `/v1/traces`
125
+
126
+ Headers: `OTEL_EXPORTER_OTLP_HEADERS` (`k1=v1,k2=v2`) merged with `config.headers`.
127
+ Resource: `config.resourceAttributes` (default `service.name=vinhnt-sdk`, override via `OTEL_SERVICE_NAME` in attributes).
128
+
129
+ ```typescript
130
+ import { createOtlpSpanExporter, SpanRecorder } from "@vinhnt-sdk/trace";
131
+
132
+ const recorder = new SpanRecorder();
133
+ // ... record spans ...
134
+
135
+ const exporter = createOtlpSpanExporter({
136
+ endpoint: "http://localhost:4318/v1/traces", // or set env only
137
+ resourceAttributes: { "service.name": "my-agent", "deployment.environment": "dev" },
138
+ });
139
+ await exporter.export(recorder.getSpans());
140
+ await exporter.shutdown();
141
+ ```
142
+
143
+ No exporter is created unless you call `createOtlpSpanExporter` — default telemetry path unchanged.
144
+
145
+ ## Usage Examples
146
+
147
+ ### Cost Tracking
148
+
149
+ ` ypescript
150
+ import { CostMeter, DEFAULT_MODEL_PRICING } from "@vinhnt-sdk/trace";
151
+
152
+ const meter = new CostMeter();
153
+
154
+ // Track usage across multiple calls
155
+ meter.record({ inputTokens: 1000, outputTokens: 500, model: "gpt-4o" });
156
+ meter.record({ inputTokens: 2000, outputTokens: 1000, model: "gpt-4o-mini" });
157
+
158
+ console.log(meter.totalCost); // Total cost in USD
159
+ `
160
+
161
+ ### Custom Telemetry Provider
162
+
163
+ ` ypescript
164
+ import type { TelemetryProvider } from "@vinhnt-sdk/trace";
165
+
166
+ const customProvider: TelemetryProvider = {
167
+ name: "datadog",
168
+ async recordSpan(span) {
169
+ await sendToDatadog(span);
170
+ },
171
+ async recordUsage(usage) {
172
+ await sendMetricsToDatadog(usage);
173
+ },
174
+ };
175
+ `
176
+
177
+ ## Dependencies
178
+
179
+ - @vinhnt-sdk/schema >=0.5.0
180
+
181
+ ## License
182
+
183
+ MIT
package/dist/index.d.ts CHANGED
@@ -11,6 +11,8 @@ export { SpanRecorder, createSpan, endSpan, addSpanEvent, generateTraceId, } fro
11
11
  export type { Span, SpanKind, SpanStatus, SpanEvent, SpanNode, TraceContext } from "./tracing.js";
12
12
  export { Timeline, buildTranscript } from "./timeline.js";
13
13
  export type { TimelineEvent, TimelineEventType, TranscriptEntry } from "./timeline.js";
14
- export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING } from "./telemetry.js";
15
- export type { UsageStats, ModelPricing, ContextPressure } from "./telemetry.js";
14
+ export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING, ConsoleTelemetryProvider } from "./telemetry.js";
15
+ export type { UsageStats, ModelPricing, ContextPressure, TelemetryProvider } from "./telemetry.js";
16
+ export { createOtlpSpanExporter, resolveOtlpEndpoint, parseOtlpHeaders, mapSpanToOtlp, buildOtlpExportRequest, toOtlpAnyValue, toOtlpAttributes, toOtlpId, msToUnixNano, OTLP_SPAN_KIND, OTLP_STATUS_OK, OTLP_STATUS_ERROR, OTLP_STATUS_UNSET, } from "./otlp-exporter.js";
17
+ export type { OtlpExporterConfig, SpanExporter, FetchLike, OtlpAnyValue, OtlpKeyValue, OtlpSpan, OtlpSpanEvent, OtlpSpanStatus, OtlpResourceSpans, OtlpExportTraceRequest, } from "./otlp-exporter.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1H,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACpJ,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnG,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -12,5 +12,7 @@ export { SpanRecorder, createSpan, endSpan, addSpanEvent, generateTraceId, } fro
12
12
  // ── Timeline ──
13
13
  export { Timeline, buildTranscript } from "./timeline.js";
14
14
  // ── Telemetry ──
15
- export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING } from "./telemetry.js";
15
+ export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING, ConsoleTelemetryProvider } from "./telemetry.js";
16
+ // ── OTLP export (P1-9) ──
17
+ export { createOtlpSpanExporter, resolveOtlpEndpoint, parseOtlpHeaders, mapSpanToOtlp, buildOtlpExportRequest, toOtlpAnyValue, toOtlpAttributes, toOtlpId, msToUnixNano, OTLP_SPAN_KIND, OTLP_STATUS_OK, OTLP_STATUS_ERROR, OTLP_STATUS_UNSET, } from "./otlp-exporter.js";
16
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG1D,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG1D,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAGpJ,2BAA2B;AAC3B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
@@ -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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"}
@@ -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
@@ -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
@@ -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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vinhnt-sdk/trace",
3
- "version": "0.4.2",
4
- "description": "Observability — OpenTelemetry spans, timeline replay, telemetry aggregation",
3
+ "version": "0.4.3",
4
+ "description": "Observability - OpenTelemetry spans, timeline replay, telemetry aggregation",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",
@@ -42,17 +42,18 @@
42
42
  "publishConfig": {
43
43
  "access": "public"
44
44
  },
45
- "dependencies": {
46
- "@vinhnt-sdk/schema": "0.4.2"
47
- },
48
- "devDependencies": {
49
- "vitest": "^3.2.7"
50
- },
51
45
  "scripts": {
52
46
  "build": "tsc -b",
53
47
  "typecheck": "tsc --noEmit",
54
48
  "clean": "node -e \"try{require('fs').rmSync('dist',{recursive:true,force:true})}catch(e){}\" && node -e \"try{require('fs').rmSync('tsconfig.tsbuildinfo',{force:true})}catch(e){}\"",
49
+ "prepublishOnly": "pnpm build",
55
50
  "test": "vitest run",
56
51
  "lint": "eslint ."
52
+ },
53
+ "dependencies": {
54
+ "@vinhnt-sdk/schema": "0.5.9"
55
+ },
56
+ "devDependencies": {
57
+ "vitest": "^3.2.7"
57
58
  }
58
- }
59
+ }