vestig 0.16.0 → 0.19.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/dist/index.d.ts CHANGED
@@ -23,6 +23,8 @@ export { SentryTransport, SentryTransportError } from './transports/sentry';
23
23
  export { span, spanSync, startSpan, endSpan, getActiveSpan, withActiveSpan, SpanImpl, clearActiveSpans, getActiveSpanStackDepth, withSpanContext, withSpanContextAsync, } from './tracing';
24
24
  export { registerSpanProcessor, unregisterSpanProcessor, getSpanProcessors, flushSpanProcessors, shutdownSpanProcessors, } from './otlp';
25
25
  export type { SpanProcessor } from './otlp';
26
+ export { instrumentFetch, uninstrumentFetch, isFetchInstrumented } from './instrumentation';
27
+ export type { InstrumentFetchOptions } from './instrumentation';
26
28
  export { createSampler, createSamplerFromConfig, createProbabilitySampler, createRateLimitSampler, createNamespaceSampler, createCompositeSampler, } from './sampling';
27
29
  export { createWideEvent, WideEventBuilderImpl, getActiveWideEvent, withWideEvent, withWideEventAsync, } from './wide-events';
28
30
  export type { WideEvent, WideEventBuilder, WideEventConfig, WideEventContext, WideEventEndOptions, WideEventFields, WideEventStatus, TailSamplingConfig, } from './wide-events';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAClF,YAAY,EACX,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,SAAS,EACT,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,OAAO,EAEP,YAAY,EACZ,eAAe,EACf,cAAc,EACd,cAAc,EAEd,YAAY,EAEZ,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EAEhB,OAAO,EACP,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,SAAS,CAAA;AAGhB,OAAO,EACN,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,GACT,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG/D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGlE,OAAO,EACN,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EAEjB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAGhD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,SAAS,EACT,YAAY,EACZ,eAAe,EACf,OAAO,GACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAG3E,OAAO,EACN,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,QAAQ,EAER,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACpB,MAAM,WAAW,CAAA;AAGlB,OAAO,EAEN,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAG3C,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAA;AAGnB,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GAClB,MAAM,eAAe,CAAA;AACtB,YAAY,EACX,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,kBAAkB,GAClB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAK9C;;GAEG;AACH,eAAO,MAAM,GAAG,0BAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -32,6 +32,8 @@ clearActiveSpans, getActiveSpanStackDepth, withSpanContext, withSpanContextAsync
32
32
  export {
33
33
  // Span processor registration
34
34
  registerSpanProcessor, unregisterSpanProcessor, getSpanProcessors, flushSpanProcessors, shutdownSpanProcessors, } from './otlp';
35
+ // Auto-Instrumentation
36
+ export { instrumentFetch, uninstrumentFetch, isFetchInstrumented } from './instrumentation';
35
37
  // Sampling - factory functions for creating samplers
36
38
  export { createSampler, createSamplerFromConfig, createProbabilitySampler, createRateLimitSampler, createNamespaceSampler, createCompositeSampler, } from './sampling';
37
39
  // Wide Events - canonical log lines for comprehensive request context
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA0ClF,oBAAoB;AACpB,OAAO,EACN,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,GACT,MAAM,WAAW,CAAA;AAGlB,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE/D,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAElE,qBAAqB;AACrB,OAAO,EACN,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB;AACjB,uCAAuC;AACvC,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,WAAW,CAAA;AAGlB,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,SAAS,EACT,YAAY,EACZ,eAAe,EACf,OAAO,GACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,+CAA+C;AAC/C,OAAO,EACN,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,QAAQ;AACR,6CAA6C;AAC7C,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACpB,MAAM,WAAW,CAAA;AAElB,wCAAwC;AACxC,OAAO;AACN,8BAA8B;AAC9B,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,QAAQ,CAAA;AAGf,qDAAqD;AACrD,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAA;AAEnB,sEAAsE;AACtE,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GAClB,MAAM,eAAe,CAAA;AAYtB,qCAAqC;AACrC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAGnF,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AA0ClF,oBAAoB;AACpB,OAAO,EACN,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,GACT,MAAM,WAAW,CAAA;AAGlB,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE/D,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAElE,qBAAqB;AACrB,OAAO,EACN,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB;AACjB,uCAAuC;AACvC,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,WAAW,CAAA;AAGlB,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EACN,SAAS,EACT,QAAQ,EACR,eAAe,EACf,SAAS,EACT,YAAY,EACZ,eAAe,EACf,OAAO,GACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE3E,+CAA+C;AAC/C,OAAO,EACN,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,aAAa,EACb,cAAc,EACd,QAAQ;AACR,6CAA6C;AAC7C,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,GACpB,MAAM,WAAW,CAAA;AAElB,wCAAwC;AACxC,OAAO;AACN,8BAA8B;AAC9B,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,QAAQ,CAAA;AAGf,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAG3F,qDAAqD;AACrD,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,YAAY,CAAA;AAEnB,sEAAsE;AACtE,OAAO,EACN,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GAClB,MAAM,eAAe,CAAA;AAYtB,qCAAqC;AACrC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAGnF,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Fetch Auto-Instrumentation
3
+ *
4
+ * Automatically creates spans for all fetch() calls.
5
+ * Call once in your instrumentation.ts file.
6
+ */
7
+ import type { InstrumentFetchOptions } from './types';
8
+ /**
9
+ * Instrument fetch to automatically create spans
10
+ *
11
+ * Call this once in your instrumentation.ts file.
12
+ * All subsequent fetch() calls will automatically create spans.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * // instrumentation.ts
17
+ * import { instrumentFetch } from 'vestig'
18
+ *
19
+ * export function register() {
20
+ * instrumentFetch({
21
+ * spanNamePrefix: 'http.client',
22
+ * captureHeaders: ['content-type', 'x-request-id'],
23
+ * ignoreUrls: ['/health', '/metrics', /^\/_next/],
24
+ * })
25
+ * }
26
+ * ```
27
+ *
28
+ * @example With all options
29
+ * ```typescript
30
+ * instrumentFetch({
31
+ * spanNamePrefix: 'fetch',
32
+ * captureHeaders: ['content-type'],
33
+ * ignoreUrls: [/health/, /metrics/],
34
+ * propagateContext: true,
35
+ * captureRequestBody: false,
36
+ * captureResponseBody: false,
37
+ * defaultAttributes: { 'app.name': 'my-app' },
38
+ * })
39
+ * ```
40
+ */
41
+ export declare function instrumentFetch(options?: InstrumentFetchOptions): void;
42
+ /**
43
+ * Restore original fetch (for testing)
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * import { instrumentFetch, uninstrumentFetch } from 'vestig'
48
+ *
49
+ * instrumentFetch()
50
+ * // ... fetch calls are instrumented
51
+ *
52
+ * uninstrumentFetch()
53
+ * // ... fetch is back to normal
54
+ * ```
55
+ */
56
+ export declare function uninstrumentFetch(): void;
57
+ /**
58
+ * Check if fetch is instrumented
59
+ */
60
+ export declare function isFetchInstrumented(): boolean;
61
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/instrumentation/fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAA6B,sBAAsB,EAAE,MAAM,SAAS,CAAA;AA0FhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,IAAI,CAiK1E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CASxC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Fetch Auto-Instrumentation
3
+ *
4
+ * Automatically creates spans for all fetch() calls.
5
+ * Call once in your instrumentation.ts file.
6
+ */
7
+ import { span } from '../tracing/functions';
8
+ import { getActiveSpan } from '../tracing/context';
9
+ import { createTraceparent } from '../context/correlation';
10
+ /**
11
+ * Global state for fetch instrumentation
12
+ */
13
+ const state = {
14
+ isInstrumented: false,
15
+ originalFetch: null,
16
+ options: null,
17
+ };
18
+ /**
19
+ * Default span name prefix
20
+ */
21
+ const DEFAULT_SPAN_PREFIX = 'http.client';
22
+ /**
23
+ * Default options
24
+ */
25
+ const DEFAULT_OPTIONS = {
26
+ spanNamePrefix: DEFAULT_SPAN_PREFIX,
27
+ propagateContext: true,
28
+ captureRequestBody: false,
29
+ maxRequestBodyLength: 1024,
30
+ captureResponseBody: false,
31
+ maxResponseBodyLength: 1024,
32
+ };
33
+ /**
34
+ * Check if a URL should be ignored
35
+ */
36
+ function shouldIgnoreUrl(url, ignorePatterns) {
37
+ if (!ignorePatterns || ignorePatterns.length === 0)
38
+ return false;
39
+ for (const pattern of ignorePatterns) {
40
+ if (typeof pattern === 'string') {
41
+ if (url.includes(pattern))
42
+ return true;
43
+ }
44
+ else if (pattern instanceof RegExp) {
45
+ if (pattern.test(url))
46
+ return true;
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ /**
52
+ * Parse URL safely
53
+ */
54
+ function parseUrl(input) {
55
+ try {
56
+ if (input instanceof URL)
57
+ return input;
58
+ if (input instanceof Request)
59
+ return new URL(input.url);
60
+ return new URL(input, globalThis.location?.origin ?? 'http://localhost');
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Generate span name
68
+ */
69
+ function generateSpanName(method, url, options) {
70
+ if (options.spanNameGenerator) {
71
+ return options.spanNameGenerator(method, url);
72
+ }
73
+ const prefix = options.spanNamePrefix ?? DEFAULT_SPAN_PREFIX;
74
+ const host = url.hostname;
75
+ const path = url.pathname;
76
+ return `${prefix} ${method} ${host}${path}`;
77
+ }
78
+ /**
79
+ * Truncate string to max length
80
+ */
81
+ function truncate(str, maxLength) {
82
+ if (str.length <= maxLength)
83
+ return str;
84
+ return `${str.slice(0, maxLength)}... (truncated)`;
85
+ }
86
+ /**
87
+ * Instrument fetch to automatically create spans
88
+ *
89
+ * Call this once in your instrumentation.ts file.
90
+ * All subsequent fetch() calls will automatically create spans.
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * // instrumentation.ts
95
+ * import { instrumentFetch } from 'vestig'
96
+ *
97
+ * export function register() {
98
+ * instrumentFetch({
99
+ * spanNamePrefix: 'http.client',
100
+ * captureHeaders: ['content-type', 'x-request-id'],
101
+ * ignoreUrls: ['/health', '/metrics', /^\/_next/],
102
+ * })
103
+ * }
104
+ * ```
105
+ *
106
+ * @example With all options
107
+ * ```typescript
108
+ * instrumentFetch({
109
+ * spanNamePrefix: 'fetch',
110
+ * captureHeaders: ['content-type'],
111
+ * ignoreUrls: [/health/, /metrics/],
112
+ * propagateContext: true,
113
+ * captureRequestBody: false,
114
+ * captureResponseBody: false,
115
+ * defaultAttributes: { 'app.name': 'my-app' },
116
+ * })
117
+ * ```
118
+ */
119
+ export function instrumentFetch(options = {}) {
120
+ // Prevent double instrumentation
121
+ if (state.isInstrumented) {
122
+ console.warn('[vestig] fetch is already instrumented');
123
+ return;
124
+ }
125
+ // Check if fetch exists
126
+ if (typeof globalThis.fetch !== 'function') {
127
+ console.warn('[vestig] fetch is not available in this environment');
128
+ return;
129
+ }
130
+ // Store original fetch
131
+ state.originalFetch = globalThis.fetch;
132
+ state.options = options;
133
+ // Merge options with defaults
134
+ const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
135
+ // Create instrumented fetch
136
+ const instrumentedFetch = async (input, init) => {
137
+ const originalFetch = state.originalFetch;
138
+ // Parse URL
139
+ const url = parseUrl(input);
140
+ if (!url) {
141
+ // Can't parse URL, just call original
142
+ return originalFetch(input, init);
143
+ }
144
+ // Check if URL should be ignored
145
+ const fullUrl = url.toString();
146
+ if (shouldIgnoreUrl(fullUrl, options.ignoreUrls)) {
147
+ return originalFetch(input, init);
148
+ }
149
+ // Determine method
150
+ const method = init?.method ?? (input instanceof Request ? input.method : 'GET');
151
+ // Generate span name
152
+ const spanName = generateSpanName(method.toUpperCase(), url, mergedOptions);
153
+ // Execute fetch within span
154
+ return span(spanName, async (s) => {
155
+ // Set HTTP attributes (following OpenTelemetry semantic conventions)
156
+ s.setAttribute('http.request.method', method.toUpperCase());
157
+ s.setAttribute('url.full', fullUrl);
158
+ s.setAttribute('url.scheme', url.protocol.replace(':', ''));
159
+ s.setAttribute('server.address', url.hostname);
160
+ if (url.port) {
161
+ s.setAttribute('server.port', Number.parseInt(url.port, 10));
162
+ }
163
+ s.setAttribute('url.path', url.pathname);
164
+ if (url.search) {
165
+ s.setAttribute('url.query', url.search.slice(1));
166
+ }
167
+ // Add default attributes
168
+ if (options.defaultAttributes) {
169
+ for (const [key, value] of Object.entries(options.defaultAttributes)) {
170
+ s.setAttribute(key, value);
171
+ }
172
+ }
173
+ // Prepare headers
174
+ const headers = new Headers(init?.headers);
175
+ // Capture request headers
176
+ if (options.captureHeaders) {
177
+ for (const headerName of options.captureHeaders) {
178
+ const value = headers.get(headerName);
179
+ if (value) {
180
+ s.setAttribute(`http.request.header.${headerName.toLowerCase()}`, value);
181
+ }
182
+ }
183
+ }
184
+ // Propagate trace context
185
+ if (mergedOptions.propagateContext) {
186
+ const activeSpan = getActiveSpan();
187
+ if (activeSpan) {
188
+ const traceparent = createTraceparent(activeSpan.traceId, s.spanId);
189
+ headers.set('traceparent', traceparent);
190
+ }
191
+ }
192
+ // Capture request body
193
+ if (mergedOptions.captureRequestBody && init?.body) {
194
+ try {
195
+ const bodyStr = typeof init.body === 'string' ? init.body : JSON.stringify(init.body);
196
+ s.setAttribute('http.request.body', truncate(bodyStr, mergedOptions.maxRequestBodyLength));
197
+ }
198
+ catch {
199
+ // Ignore body capture errors
200
+ }
201
+ }
202
+ // Make the request
203
+ const startTime = performance.now();
204
+ try {
205
+ const response = await originalFetch(input, {
206
+ ...init,
207
+ headers,
208
+ });
209
+ // Set response attributes
210
+ const duration = performance.now() - startTime;
211
+ s.setAttribute('http.response.status_code', response.status);
212
+ s.setAttribute('http.response.duration_ms', Math.round(duration));
213
+ // Capture response headers
214
+ if (options.captureHeaders) {
215
+ for (const headerName of options.captureHeaders) {
216
+ const value = response.headers.get(headerName);
217
+ if (value) {
218
+ s.setAttribute(`http.response.header.${headerName.toLowerCase()}`, value);
219
+ }
220
+ }
221
+ }
222
+ // Set status based on response
223
+ if (response.ok) {
224
+ s.setStatus('ok');
225
+ }
226
+ else {
227
+ s.setStatus('error', `HTTP ${response.status}`);
228
+ }
229
+ // Capture response body (need to clone to avoid consuming)
230
+ if (mergedOptions.captureResponseBody) {
231
+ try {
232
+ const cloned = response.clone();
233
+ const text = await cloned.text();
234
+ s.setAttribute('http.response.body', truncate(text, mergedOptions.maxResponseBodyLength));
235
+ }
236
+ catch {
237
+ // Ignore body capture errors
238
+ }
239
+ }
240
+ return response;
241
+ }
242
+ catch (error) {
243
+ // Network or other error
244
+ const duration = performance.now() - startTime;
245
+ s.setAttribute('http.response.duration_ms', Math.round(duration));
246
+ s.setAttribute('error.type', error instanceof Error ? error.name : 'Error');
247
+ s.setStatus('error', error instanceof Error ? error.message : String(error));
248
+ throw error;
249
+ }
250
+ });
251
+ };
252
+ // Replace global fetch
253
+ globalThis.fetch = instrumentedFetch;
254
+ state.isInstrumented = true;
255
+ }
256
+ /**
257
+ * Restore original fetch (for testing)
258
+ *
259
+ * @example
260
+ * ```typescript
261
+ * import { instrumentFetch, uninstrumentFetch } from 'vestig'
262
+ *
263
+ * instrumentFetch()
264
+ * // ... fetch calls are instrumented
265
+ *
266
+ * uninstrumentFetch()
267
+ * // ... fetch is back to normal
268
+ * ```
269
+ */
270
+ export function uninstrumentFetch() {
271
+ if (!state.isInstrumented || !state.originalFetch) {
272
+ return;
273
+ }
274
+ globalThis.fetch = state.originalFetch;
275
+ state.isInstrumented = false;
276
+ state.originalFetch = null;
277
+ state.options = null;
278
+ }
279
+ /**
280
+ * Check if fetch is instrumented
281
+ */
282
+ export function isFetchInstrumented() {
283
+ return state.isInstrumented;
284
+ }
285
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/instrumentation/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Auto-Instrumentation for vestig
3
+ *
4
+ * @example Basic usage
5
+ * ```typescript
6
+ * // instrumentation.ts
7
+ * import { instrumentFetch } from 'vestig'
8
+ *
9
+ * export function register() {
10
+ * instrumentFetch({
11
+ * captureHeaders: ['content-type'],
12
+ * ignoreUrls: ['/health', /^\/_next/],
13
+ * })
14
+ * }
15
+ * ```
16
+ */
17
+ export { instrumentFetch, uninstrumentFetch, isFetchInstrumented } from './fetch';
18
+ export type { InstrumentFetchOptions, FetchInstrumentationState } from './types';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instrumentation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAGjF,YAAY,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Auto-Instrumentation for vestig
3
+ *
4
+ * @example Basic usage
5
+ * ```typescript
6
+ * // instrumentation.ts
7
+ * import { instrumentFetch } from 'vestig'
8
+ *
9
+ * export function register() {
10
+ * instrumentFetch({
11
+ * captureHeaders: ['content-type'],
12
+ * ignoreUrls: ['/health', /^\/_next/],
13
+ * })
14
+ * }
15
+ * ```
16
+ */
17
+ // Fetch instrumentation
18
+ export { instrumentFetch, uninstrumentFetch, isFetchInstrumented } from './fetch';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/instrumentation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,wBAAwB;AACxB,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Types for auto-instrumentation
3
+ */
4
+ /**
5
+ * Options for instrumenting fetch
6
+ */
7
+ export interface InstrumentFetchOptions {
8
+ /**
9
+ * Prefix for span names
10
+ * @default 'http.client'
11
+ * @example 'http.client' → 'http.client GET api.example.com'
12
+ */
13
+ spanNamePrefix?: string;
14
+ /**
15
+ * Headers to capture as span attributes
16
+ * Case-insensitive header names
17
+ * @example ['content-type', 'x-request-id']
18
+ */
19
+ captureHeaders?: string[];
20
+ /**
21
+ * URL patterns to ignore (no spans created)
22
+ * Can be strings (prefix match) or RegExp
23
+ * @example ['/health', '/metrics', /^\/_next/]
24
+ */
25
+ ignoreUrls?: (string | RegExp)[];
26
+ /**
27
+ * Whether to propagate trace context via headers
28
+ * Adds traceparent header to outgoing requests
29
+ * @default true
30
+ */
31
+ propagateContext?: boolean;
32
+ /**
33
+ * Custom span name generator
34
+ * @param method HTTP method
35
+ * @param url Full URL
36
+ * @returns Custom span name
37
+ */
38
+ spanNameGenerator?: (method: string, url: URL) => string;
39
+ /**
40
+ * Capture request body as span attribute
41
+ * Warning: May contain sensitive data
42
+ * @default false
43
+ */
44
+ captureRequestBody?: boolean;
45
+ /**
46
+ * Maximum request body length to capture (characters)
47
+ * @default 1024
48
+ */
49
+ maxRequestBodyLength?: number;
50
+ /**
51
+ * Capture response body as span attribute
52
+ * Warning: May contain sensitive data
53
+ * @default false
54
+ */
55
+ captureResponseBody?: boolean;
56
+ /**
57
+ * Maximum response body length to capture (characters)
58
+ * @default 1024
59
+ */
60
+ maxResponseBodyLength?: number;
61
+ /**
62
+ * Additional attributes to add to all spans
63
+ * @example { 'app.version': '1.0.0' }
64
+ */
65
+ defaultAttributes?: Record<string, unknown>;
66
+ }
67
+ /**
68
+ * Internal state for fetch instrumentation
69
+ */
70
+ export interface FetchInstrumentationState {
71
+ /**
72
+ * Whether fetch has been instrumented
73
+ */
74
+ isInstrumented: boolean;
75
+ /**
76
+ * Original fetch function (for restore)
77
+ */
78
+ originalFetch: typeof globalThis.fetch | null;
79
+ /**
80
+ * Current options
81
+ */
82
+ options: InstrumentFetchOptions | null;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/instrumentation/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IAEzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAEhC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAA;IAExD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAE7B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAE9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC;;OAEG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,aAAa,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;IAE7C;;OAEG;IACH,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACtC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Types for auto-instrumentation
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/instrumentation/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/dist/version.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Vestig library version
3
3
  * This is automatically updated during the release process
4
4
  */
5
- export declare const VERSION = "0.15.1";
5
+ export declare const VERSION = "0.18.0";
6
6
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Vestig library version
3
3
  * This is automatically updated during the release process
4
4
  */
5
- export const VERSION = '0.15.1';
5
+ export const VERSION = '0.18.0';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vestig",
3
- "version": "0.16.0",
3
+ "version": "0.19.0",
4
4
  "description": "Leave a trace. A modern, runtime-agnostic structured logging library with automatic PII sanitization and context propagation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,6 +17,10 @@
17
17
  "./otlp": {
18
18
  "types": "./dist/otlp/index.d.ts",
19
19
  "import": "./dist/otlp/index.js"
20
+ },
21
+ "./instrumentation": {
22
+ "types": "./dist/instrumentation/index.d.ts",
23
+ "import": "./dist/instrumentation/index.js"
20
24
  }
21
25
  },
22
26
  "files": ["dist"],
@@ -58,7 +62,9 @@
58
62
  "jaeger",
59
63
  "honeycomb",
60
64
  "grafana",
61
- "spans"
65
+ "spans",
66
+ "auto-instrumentation",
67
+ "fetch-instrumentation"
62
68
  ],
63
69
  "author": "Arakiss",
64
70
  "license": "MIT",