react-native-otel 0.1.0 → 0.1.5

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.
Files changed (110) hide show
  1. package/README.md +1137 -13
  2. package/lib/module/context/span-context.js +56 -5
  3. package/lib/module/context/span-context.js.map +1 -1
  4. package/lib/module/core/ids.js +21 -7
  5. package/lib/module/core/ids.js.map +1 -1
  6. package/lib/module/core/meter.js +101 -12
  7. package/lib/module/core/meter.js.map +1 -1
  8. package/lib/module/core/processor.js +28 -0
  9. package/lib/module/core/processor.js.map +1 -0
  10. package/lib/module/core/resource.js +1 -0
  11. package/lib/module/core/resource.js.map +1 -1
  12. package/lib/module/core/sampler.js +55 -0
  13. package/lib/module/core/sampler.js.map +1 -0
  14. package/lib/module/core/span.js +15 -1
  15. package/lib/module/core/span.js.map +1 -1
  16. package/lib/module/core/tracer.js +94 -5
  17. package/lib/module/core/tracer.js.map +1 -1
  18. package/lib/module/exporters/console-exporter.js +8 -1
  19. package/lib/module/exporters/console-exporter.js.map +1 -1
  20. package/lib/module/exporters/multi-exporter.js +57 -0
  21. package/lib/module/exporters/multi-exporter.js.map +1 -0
  22. package/lib/module/exporters/otlp-http-exporter.js +159 -25
  23. package/lib/module/exporters/otlp-http-exporter.js.map +1 -1
  24. package/lib/module/exporters/wal.js +129 -0
  25. package/lib/module/exporters/wal.js.map +1 -0
  26. package/lib/module/index.js +16 -0
  27. package/lib/module/index.js.map +1 -1
  28. package/lib/module/instrumentation/errors.js +21 -0
  29. package/lib/module/instrumentation/errors.js.map +1 -1
  30. package/lib/module/instrumentation/expo-router.js +76 -0
  31. package/lib/module/instrumentation/expo-router.js.map +1 -0
  32. package/lib/module/instrumentation/fetch.js +99 -0
  33. package/lib/module/instrumentation/fetch.js.map +1 -0
  34. package/lib/module/instrumentation/lifecycle.js +6 -1
  35. package/lib/module/instrumentation/lifecycle.js.map +1 -1
  36. package/lib/module/instrumentation/linking.js +65 -0
  37. package/lib/module/instrumentation/linking.js.map +1 -0
  38. package/lib/module/instrumentation/network.js +35 -0
  39. package/lib/module/instrumentation/network.js.map +1 -1
  40. package/lib/module/instrumentation/startup.js +46 -0
  41. package/lib/module/instrumentation/startup.js.map +1 -0
  42. package/lib/module/sdk.js +87 -5
  43. package/lib/module/sdk.js.map +1 -1
  44. package/lib/module/version.js +7 -0
  45. package/lib/module/version.js.map +1 -0
  46. package/lib/typescript/src/context/span-context.d.ts +14 -4
  47. package/lib/typescript/src/context/span-context.d.ts.map +1 -1
  48. package/lib/typescript/src/core/ids.d.ts.map +1 -1
  49. package/lib/typescript/src/core/meter.d.ts +12 -2
  50. package/lib/typescript/src/core/meter.d.ts.map +1 -1
  51. package/lib/typescript/src/core/processor.d.ts +29 -0
  52. package/lib/typescript/src/core/processor.d.ts.map +1 -0
  53. package/lib/typescript/src/core/resource.d.ts +3 -0
  54. package/lib/typescript/src/core/resource.d.ts.map +1 -1
  55. package/lib/typescript/src/core/sampler.d.ts +31 -0
  56. package/lib/typescript/src/core/sampler.d.ts.map +1 -0
  57. package/lib/typescript/src/core/span.d.ts +16 -0
  58. package/lib/typescript/src/core/span.d.ts.map +1 -1
  59. package/lib/typescript/src/core/tracer.d.ts +16 -6
  60. package/lib/typescript/src/core/tracer.d.ts.map +1 -1
  61. package/lib/typescript/src/exporters/console-exporter.d.ts.map +1 -1
  62. package/lib/typescript/src/exporters/multi-exporter.d.ts +28 -0
  63. package/lib/typescript/src/exporters/multi-exporter.d.ts.map +1 -0
  64. package/lib/typescript/src/exporters/otlp-http-exporter.d.ts +20 -2
  65. package/lib/typescript/src/exporters/otlp-http-exporter.d.ts.map +1 -1
  66. package/lib/typescript/src/exporters/types.d.ts +17 -3
  67. package/lib/typescript/src/exporters/types.d.ts.map +1 -1
  68. package/lib/typescript/src/exporters/wal.d.ts +21 -0
  69. package/lib/typescript/src/exporters/wal.d.ts.map +1 -0
  70. package/lib/typescript/src/index.d.ts +15 -2
  71. package/lib/typescript/src/index.d.ts.map +1 -1
  72. package/lib/typescript/src/instrumentation/errors.d.ts.map +1 -1
  73. package/lib/typescript/src/instrumentation/expo-router.d.ts +31 -0
  74. package/lib/typescript/src/instrumentation/expo-router.d.ts.map +1 -0
  75. package/lib/typescript/src/instrumentation/fetch.d.ts +18 -0
  76. package/lib/typescript/src/instrumentation/fetch.d.ts.map +1 -0
  77. package/lib/typescript/src/instrumentation/lifecycle.d.ts.map +1 -1
  78. package/lib/typescript/src/instrumentation/linking.d.ts +23 -0
  79. package/lib/typescript/src/instrumentation/linking.d.ts.map +1 -0
  80. package/lib/typescript/src/instrumentation/network.d.ts.map +1 -1
  81. package/lib/typescript/src/instrumentation/startup.d.ts +16 -0
  82. package/lib/typescript/src/instrumentation/startup.d.ts.map +1 -0
  83. package/lib/typescript/src/sdk.d.ts +35 -0
  84. package/lib/typescript/src/sdk.d.ts.map +1 -1
  85. package/lib/typescript/src/version.d.ts +2 -0
  86. package/lib/typescript/src/version.d.ts.map +1 -0
  87. package/package.json +12 -2
  88. package/src/context/span-context.ts +61 -8
  89. package/src/core/ids.ts +21 -7
  90. package/src/core/meter.ts +136 -14
  91. package/src/core/processor.ts +33 -0
  92. package/src/core/resource.ts +6 -0
  93. package/src/core/sampler.ts +65 -0
  94. package/src/core/span.ts +28 -1
  95. package/src/core/tracer.ts +140 -19
  96. package/src/exporters/console-exporter.ts +18 -4
  97. package/src/exporters/multi-exporter.ts +59 -0
  98. package/src/exporters/otlp-http-exporter.ts +191 -29
  99. package/src/exporters/types.ts +24 -3
  100. package/src/exporters/wal.ts +145 -0
  101. package/src/index.ts +36 -1
  102. package/src/instrumentation/errors.ts +27 -0
  103. package/src/instrumentation/expo-router.ts +94 -0
  104. package/src/instrumentation/fetch.ts +134 -0
  105. package/src/instrumentation/lifecycle.ts +7 -1
  106. package/src/instrumentation/linking.ts +83 -0
  107. package/src/instrumentation/network.ts +39 -0
  108. package/src/instrumentation/startup.ts +49 -0
  109. package/src/sdk.ts +115 -4
  110. package/src/version.ts +6 -0
@@ -1,14 +1,65 @@
1
1
  "use strict";
2
2
 
3
- // Module-level singleton. Tracks only the current active screen span.
4
- // Network spans do NOT touch this context (handled via activeNetworkSpans map).
3
+ // Public interface what external consumers see when they import spanContext.
4
+ // Hides push/pop to prevent misuse; use tracer.startActiveSpan() or
5
+ // tracer.withSpan() for safe nested context management.
6
+
7
+ // Each manual push is tracked by a unique token so that pop() can find the
8
+ // exact entry to remove regardless of concurrent async interleaving.
9
+
5
10
  class SpanContextManager {
11
+ // Screen-level span set by navigation instrumentation.
12
+
13
+ // Manual spans pushed by startActiveSpan / withSpan.
14
+ // Separate from screenSpan_ because they have different lifecycles.
15
+ manualStack_ = [];
16
+
17
+ // ─── Public API (backward-compatible) ──────────────────────────────────────
18
+
19
+ // Set the screen-level span. Called by navigation on route change.
20
+ // Clears the manual stack so stale sub-operation context from the previous
21
+ // screen does not leak into the new one.
6
22
  setCurrent(span) {
7
- this.current_ = span;
23
+ this.screenSpan_ = span;
24
+ this.manualStack_ = [];
8
25
  }
26
+
27
+ // Return the most specific active span. Manual stack takes precedence.
9
28
  current() {
10
- return this.current_;
29
+ const top = this.manualStack_[this.manualStack_.length - 1];
30
+ return top?.span ?? this.screenSpan_;
31
+ }
32
+
33
+ // ─── Internal API (used by Tracer only, not re-exported from index.ts) ─────
34
+
35
+ // Push span as the active context. Returns a token required by pop().
36
+ /** @internal */
37
+ push(span) {
38
+ const token = Symbol();
39
+ this.manualStack_.push({
40
+ span,
41
+ token
42
+ });
43
+ return token;
44
+ }
45
+
46
+ // Remove the entry matching token, regardless of position in the stack.
47
+ // Identity-based (not positional) so concurrent async operations cannot
48
+ // accidentally pop each other's entries.
49
+ /** @internal */
50
+ pop(token) {
51
+ const idx = this.manualStack_.findIndex(e => e.token === token);
52
+ if (idx !== -1) {
53
+ this.manualStack_.splice(idx, 1);
54
+ }
11
55
  }
12
56
  }
13
- export const spanContext = new SpanContextManager();
57
+ const manager = new SpanContextManager();
58
+
59
+ // External consumers get the narrowed type — push/pop are hidden.
60
+ export const spanContext = manager;
61
+
62
+ // Internal alias with the concrete type so tracer.ts can call push/pop.
63
+ // Not re-exported from index.ts.
64
+ export const spanContextInternal = manager;
14
65
  //# sourceMappingURL=span-context.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SpanContextManager","setCurrent","span","current_","current","spanContext"],"sourceRoot":"../../../src","sources":["context/span-context.ts"],"mappings":";;AAEA;AACA;AACA,MAAMA,kBAAkB,CAAC;EAGvBC,UAAUA,CAACC,IAAiC,EAAQ;IAClD,IAAI,CAACC,QAAQ,GAAGD,IAAI;EACtB;EAEAE,OAAOA,CAAA,EAAgC;IACrC,OAAO,IAAI,CAACD,QAAQ;EACtB;AACF;AAEA,OAAO,MAAME,WAAW,GAAG,IAAIL,kBAAkB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["SpanContextManager","manualStack_","setCurrent","span","screenSpan_","current","top","length","push","token","Symbol","pop","idx","findIndex","e","splice","manager","spanContext","spanContextInternal"],"sourceRoot":"../../../src","sources":["context/span-context.ts"],"mappings":";;AAEA;AACA;AACA;;AAMA;AACA;;AAMA,MAAMA,kBAAkB,CAAqC;EAC3D;;EAEA;EACA;EACQC,YAAY,GAAiB,EAAE;;EAEvC;;EAEA;EACA;EACA;EACAC,UAAUA,CAACC,IAAiC,EAAQ;IAClD,IAAI,CAACC,WAAW,GAAGD,IAAI;IACvB,IAAI,CAACF,YAAY,GAAG,EAAE;EACxB;;EAEA;EACAI,OAAOA,CAAA,EAAgC;IACrC,MAAMC,GAAG,GAAG,IAAI,CAACL,YAAY,CAAC,IAAI,CAACA,YAAY,CAACM,MAAM,GAAG,CAAC,CAAC;IAC3D,OAAOD,GAAG,EAAEH,IAAI,IAAI,IAAI,CAACC,WAAW;EACtC;;EAEA;;EAEA;EACA;EACAI,IAAIA,CAACL,IAAqB,EAAU;IAClC,MAAMM,KAAK,GAAGC,MAAM,CAAC,CAAC;IACtB,IAAI,CAACT,YAAY,CAACO,IAAI,CAAC;MAAEL,IAAI;MAAEM;IAAM,CAAC,CAAC;IACvC,OAAOA,KAAK;EACd;;EAEA;EACA;EACA;EACA;EACAE,GAAGA,CAACF,KAAa,EAAQ;IACvB,MAAMG,GAAG,GAAG,IAAI,CAACX,YAAY,CAACY,SAAS,CAAEC,CAAC,IAAKA,CAAC,CAACL,KAAK,KAAKA,KAAK,CAAC;IACjE,IAAIG,GAAG,KAAK,CAAC,CAAC,EAAE;MACd,IAAI,CAACX,YAAY,CAACc,MAAM,CAACH,GAAG,EAAE,CAAC,CAAC;IAClC;EACF;AACF;AAEA,MAAMI,OAAO,GAAG,IAAIhB,kBAAkB,CAAC,CAAC;;AAExC;AACA,OAAO,MAAMiB,WAAqC,GAAGD,OAAO;;AAE5D;AACA;AACA,OAAO,MAAME,mBAAuC,GAAGF,OAAO","ignoreList":[]}
@@ -1,16 +1,30 @@
1
1
  "use strict";
2
2
 
3
- function randomHex(length) {
4
- let result = '';
5
- for (let i = 0; i < length; i++) {
6
- result += Math.floor(Math.random() * 16).toString(16);
3
+ function randomBytesHex(byteCount) {
4
+ try {
5
+ const bytes = new Uint8Array(byteCount);
6
+ crypto.getRandomValues(bytes);
7
+ return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
8
+ } catch {
9
+ // Fallback if crypto.getRandomValues is unavailable
10
+ if (__DEV__) {
11
+ console.warn('[react-native-otel] crypto.getRandomValues unavailable; falling back to Math.random for ID generation. IDs may collide at scale.');
12
+ }
13
+ let result = '';
14
+ for (let i = 0; i < byteCount * 2; i++) {
15
+ result += Math.floor(Math.random() * 16).toString(16);
16
+ }
17
+ return result;
7
18
  }
8
- return result;
9
19
  }
20
+
21
+ // 128-bit trace ID per OTel spec (32 hex chars)
10
22
  export function generateTraceId() {
11
- return randomHex(32);
23
+ return randomBytesHex(16);
12
24
  }
25
+
26
+ // 64-bit span ID per OTel spec (16 hex chars)
13
27
  export function generateSpanId() {
14
- return randomHex(16);
28
+ return randomBytesHex(8);
15
29
  }
16
30
  //# sourceMappingURL=ids.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["randomHex","length","result","i","Math","floor","random","toString","generateTraceId","generateSpanId"],"sourceRoot":"../../../src","sources":["core/ids.ts"],"mappings":";;AAAA,SAASA,SAASA,CAACC,MAAc,EAAU;EACzC,IAAIC,MAAM,GAAG,EAAE;EACf,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,MAAM,EAAEE,CAAC,EAAE,EAAE;IAC/BD,MAAM,IAAIE,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;EACvD;EACA,OAAOL,MAAM;AACf;AAEA,OAAO,SAASM,eAAeA,CAAA,EAAW;EACxC,OAAOR,SAAS,CAAC,EAAE,CAAC;AACtB;AAEA,OAAO,SAASS,cAAcA,CAAA,EAAW;EACvC,OAAOT,SAAS,CAAC,EAAE,CAAC;AACtB","ignoreList":[]}
1
+ {"version":3,"names":["randomBytesHex","byteCount","bytes","Uint8Array","crypto","getRandomValues","Array","from","b","toString","padStart","join","__DEV__","console","warn","result","i","Math","floor","random","generateTraceId","generateSpanId"],"sourceRoot":"../../../src","sources":["core/ids.ts"],"mappings":";;AAAA,SAASA,cAAcA,CAACC,SAAiB,EAAU;EACjD,IAAI;IACF,MAAMC,KAAK,GAAG,IAAIC,UAAU,CAACF,SAAS,CAAC;IACvCG,MAAM,CAACC,eAAe,CAACH,KAAK,CAAC;IAC7B,OAAOI,KAAK,CAACC,IAAI,CAACL,KAAK,EAAGM,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;EAC3E,CAAC,CAAC,MAAM;IACN;IACA,IAAIC,OAAO,EAAE;MACXC,OAAO,CAACC,IAAI,CACV,kIACF,CAAC;IACH;IACA,IAAIC,MAAM,GAAG,EAAE;IACf,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGf,SAAS,GAAG,CAAC,EAAEe,CAAC,EAAE,EAAE;MACtCD,MAAM,IAAIE,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAACV,QAAQ,CAAC,EAAE,CAAC;IACvD;IACA,OAAOM,MAAM;EACf;AACF;;AAEA;AACA,OAAO,SAASK,eAAeA,CAAA,EAAW;EACxC,OAAOpB,cAAc,CAAC,EAAE,CAAC;AAC3B;;AAEA;AACA,OAAO,SAASqB,cAAcA,CAAA,EAAW;EACvC,OAAOrB,cAAc,CAAC,CAAC,CAAC;AAC1B","ignoreList":[]}
@@ -2,7 +2,35 @@
2
2
 
3
3
  import { sanitizeAttributes } from "./attributes.js";
4
4
  import { now } from "./clock.js";
5
+
6
+ // Default bucket boundaries in milliseconds — covers typical mobile latencies.
7
+ const DEFAULT_HISTOGRAM_BOUNDARIES = [0, 5, 10, 25, 50, 75, 100, 250, 500, 1000];
8
+
9
+ // Cap for the sanitized-attributes memoization cache to prevent memory leaks
10
+ // when attributes have high cardinality.
11
+ const ATTR_CACHE_MAX = 100;
12
+
13
+ /**
14
+ * Memoized attribute sanitization: avoids calling sanitizeAttributes() on
15
+ * every Counter.add() / Gauge.set() call for the same attribute set.
16
+ */
17
+ function cachedSanitize(cache, attrs) {
18
+ if (!attrs) return {};
19
+ const key = JSON.stringify(attrs);
20
+ let sanitized = cache.get(key);
21
+ if (sanitized === undefined) {
22
+ sanitized = sanitizeAttributes(attrs);
23
+ if (cache.size >= ATTR_CACHE_MAX) {
24
+ // Evict the oldest entry to cap memory usage.
25
+ const firstKey = cache.keys().next().value;
26
+ if (firstKey !== undefined) cache.delete(firstKey);
27
+ }
28
+ cache.set(key, sanitized);
29
+ }
30
+ return sanitized;
31
+ }
5
32
  export class Counter {
33
+ attrCache = new Map();
6
34
  constructor(name, pushToBuffer) {
7
35
  this.name = name;
8
36
  this.pushToBuffer = pushToBuffer;
@@ -13,26 +41,78 @@ export class Counter {
13
41
  name: this.name,
14
42
  value,
15
43
  timestampMs: now(),
16
- attributes: attrs ? sanitizeAttributes(attrs) : {}
44
+ attributes: cachedSanitize(this.attrCache, attrs)
17
45
  });
18
46
  }
19
47
  }
20
48
  export class Histogram {
21
- constructor(name, pushToBuffer) {
49
+ // Keyed by serialized attributes so concurrent recordings with different
50
+ // attribute sets are tracked independently.
51
+ buckets = new Map();
52
+ constructor(name, pushToBuffer, options) {
22
53
  this.name = name;
23
54
  this.pushToBuffer = pushToBuffer;
55
+ this.boundaries = options?.boundaries ?? DEFAULT_HISTOGRAM_BOUNDARIES;
24
56
  }
25
57
  record(value, attrs) {
26
- this.pushToBuffer({
27
- type: 'histogram',
28
- name: this.name,
29
- value,
30
- timestampMs: now(),
31
- attributes: attrs ? sanitizeAttributes(attrs) : {}
32
- });
58
+ const sanitized = attrs ? sanitizeAttributes(attrs) : {};
59
+ const key = JSON.stringify(sanitized);
60
+ let bucket = this.buckets.get(key);
61
+ if (!bucket) {
62
+ bucket = {
63
+ count: 0,
64
+ sum: 0,
65
+ bucketCounts: new Array(this.boundaries.length + 1).fill(0),
66
+ startTimeMs: now(),
67
+ lastTimeMs: now(),
68
+ attributes: sanitized
69
+ };
70
+ this.buckets.set(key, bucket);
71
+ }
72
+ bucket.count += 1;
73
+ bucket.sum += value;
74
+ bucket.lastTimeMs = now();
75
+
76
+ // Place value into its bucket (first boundary that the value is <= to).
77
+ let placed = false;
78
+ for (let i = 0; i < this.boundaries.length; i++) {
79
+ if (value <= this.boundaries[i]) {
80
+ bucket.bucketCounts[i] += 1;
81
+ placed = true;
82
+ break;
83
+ }
84
+ }
85
+ // +Inf bucket
86
+ if (!placed) {
87
+ bucket.bucketCounts[this.boundaries.length] += 1;
88
+ }
89
+ }
90
+
91
+ // Called by Meter.flush() — drains accumulated buckets into the export buffer.
92
+ flush() {
93
+ for (const bucket of this.buckets.values()) {
94
+ const record = {
95
+ type: 'histogram',
96
+ name: this.name,
97
+ count: bucket.count,
98
+ sum: bucket.sum,
99
+ bucketBoundaries: this.boundaries,
100
+ bucketCounts: bucket.bucketCounts,
101
+ timestampMs: bucket.lastTimeMs,
102
+ attributes: bucket.attributes
103
+ };
104
+ this.pushToBuffer(record);
105
+ }
106
+ this.buckets.clear();
107
+ }
108
+
109
+ // Returns whether there is any accumulated data.
110
+ hasData() {
111
+ return this.buckets.size > 0;
33
112
  }
34
113
  }
35
114
  export class Gauge {
115
+ attrCache = new Map();
36
116
  constructor(name, pushToBuffer) {
37
117
  this.name = name;
38
118
  this.pushToBuffer = pushToBuffer;
@@ -43,25 +123,34 @@ export class Gauge {
43
123
  name: this.name,
44
124
  value,
45
125
  timestampMs: now(),
46
- attributes: attrs ? sanitizeAttributes(attrs) : {}
126
+ attributes: cachedSanitize(this.attrCache, attrs)
47
127
  });
48
128
  }
49
129
  }
50
130
  export class Meter {
51
131
  buffer = [];
132
+ histograms = [];
52
133
  constructor(exporter) {
53
134
  this.exporter = exporter;
54
135
  }
55
136
  createCounter(name) {
56
137
  return new Counter(name, r => this.buffer.push(r));
57
138
  }
58
- createHistogram(name) {
59
- return new Histogram(name, r => this.buffer.push(r));
139
+ createHistogram(name, options) {
140
+ const histogram = new Histogram(name, r => this.buffer.push(r), options);
141
+ this.histograms.push(histogram);
142
+ return histogram;
60
143
  }
61
144
  createGauge(name) {
62
145
  return new Gauge(name, r => this.buffer.push(r));
63
146
  }
64
147
  flush() {
148
+ // Drain all histogram buckets into the buffer first.
149
+ for (const histogram of this.histograms) {
150
+ if (histogram.hasData()) {
151
+ histogram.flush();
152
+ }
153
+ }
65
154
  if (this.buffer.length === 0) return;
66
155
  const toExport = this.buffer.splice(0, this.buffer.length);
67
156
  this.exporter?.export(toExport);
@@ -1 +1 @@
1
- {"version":3,"names":["sanitizeAttributes","now","Counter","constructor","name","pushToBuffer","add","value","attrs","type","timestampMs","attributes","Histogram","record","Gauge","set","Meter","buffer","exporter","createCounter","r","push","createHistogram","createGauge","flush","length","toExport","splice","export"],"sourceRoot":"../../../src","sources":["core/meter.ts"],"mappings":";;AAEA,SAASA,kBAAkB,QAAQ,iBAAc;AACjD,SAASC,GAAG,QAAQ,YAAS;AAE7B,OAAO,MAAMC,OAAO,CAAC;EACnBC,WAAWA,CACDC,IAAY,EACZC,YAA4C,EACpD;IAAA,KAFQD,IAAY,GAAZA,IAAY;IAAA,KACZC,YAA4C,GAA5CA,YAA4C;EACnD;EAEHC,GAAGA,CAACC,KAAa,EAAEC,KAAkB,EAAQ;IAC3C,IAAI,CAACH,YAAY,CAAC;MAChBI,IAAI,EAAE,SAAS;MACfL,IAAI,EAAE,IAAI,CAACA,IAAI;MACfG,KAAK;MACLG,WAAW,EAAET,GAAG,CAAC,CAAC;MAClBU,UAAU,EAAEH,KAAK,GAAGR,kBAAkB,CAACQ,KAAK,CAAC,GAAG,CAAC;IACnD,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,MAAMI,SAAS,CAAC;EACrBT,WAAWA,CACDC,IAAY,EACZC,YAA4C,EACpD;IAAA,KAFQD,IAAY,GAAZA,IAAY;IAAA,KACZC,YAA4C,GAA5CA,YAA4C;EACnD;EAEHQ,MAAMA,CAACN,KAAa,EAAEC,KAAkB,EAAQ;IAC9C,IAAI,CAACH,YAAY,CAAC;MAChBI,IAAI,EAAE,WAAW;MACjBL,IAAI,EAAE,IAAI,CAACA,IAAI;MACfG,KAAK;MACLG,WAAW,EAAET,GAAG,CAAC,CAAC;MAClBU,UAAU,EAAEH,KAAK,GAAGR,kBAAkB,CAACQ,KAAK,CAAC,GAAG,CAAC;IACnD,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,MAAMM,KAAK,CAAC;EACjBX,WAAWA,CACDC,IAAY,EACZC,YAA4C,EACpD;IAAA,KAFQD,IAAY,GAAZA,IAAY;IAAA,KACZC,YAA4C,GAA5CA,YAA4C;EACnD;EAEHU,GAAGA,CAACR,KAAa,EAAEC,KAAkB,EAAQ;IAC3C,IAAI,CAACH,YAAY,CAAC;MAChBI,IAAI,EAAE,OAAO;MACbL,IAAI,EAAE,IAAI,CAACA,IAAI;MACfG,KAAK;MACLG,WAAW,EAAET,GAAG,CAAC,CAAC;MAClBU,UAAU,EAAEH,KAAK,GAAGR,kBAAkB,CAACQ,KAAK,CAAC,GAAG,CAAC;IACnD,CAAC,CAAC;EACJ;AACF;AAEA,OAAO,MAAMQ,KAAK,CAAC;EACTC,MAAM,GAAmB,EAAE;EAGnCd,WAAWA,CAACe,QAAyB,EAAE;IACrC,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;EAEAC,aAAaA,CAACf,IAAY,EAAW;IACnC,OAAO,IAAIF,OAAO,CAACE,IAAI,EAAGgB,CAAC,IAAK,IAAI,CAACH,MAAM,CAACI,IAAI,CAACD,CAAC,CAAC,CAAC;EACtD;EAEAE,eAAeA,CAAClB,IAAY,EAAa;IACvC,OAAO,IAAIQ,SAAS,CAACR,IAAI,EAAGgB,CAAC,IAAK,IAAI,CAACH,MAAM,CAACI,IAAI,CAACD,CAAC,CAAC,CAAC;EACxD;EAEAG,WAAWA,CAACnB,IAAY,EAAS;IAC/B,OAAO,IAAIU,KAAK,CAACV,IAAI,EAAGgB,CAAC,IAAK,IAAI,CAACH,MAAM,CAACI,IAAI,CAACD,CAAC,CAAC,CAAC;EACpD;EAEAI,KAAKA,CAAA,EAAS;IACZ,IAAI,IAAI,CAACP,MAAM,CAACQ,MAAM,KAAK,CAAC,EAAE;IAC9B,MAAMC,QAAQ,GAAG,IAAI,CAACT,MAAM,CAACU,MAAM,CAAC,CAAC,EAAE,IAAI,CAACV,MAAM,CAACQ,MAAM,CAAC;IAC1D,IAAI,CAACP,QAAQ,EAAEU,MAAM,CAACF,QAAQ,CAAC;EACjC;AACF","ignoreList":[]}
1
+ {"version":3,"names":["sanitizeAttributes","now","DEFAULT_HISTOGRAM_BOUNDARIES","ATTR_CACHE_MAX","cachedSanitize","cache","attrs","key","JSON","stringify","sanitized","get","undefined","size","firstKey","keys","next","value","delete","set","Counter","attrCache","Map","constructor","name","pushToBuffer","add","type","timestampMs","attributes","Histogram","buckets","options","boundaries","record","bucket","count","sum","bucketCounts","Array","length","fill","startTimeMs","lastTimeMs","placed","i","flush","values","bucketBoundaries","clear","hasData","Gauge","Meter","buffer","histograms","exporter","createCounter","r","push","createHistogram","histogram","createGauge","toExport","splice","export"],"sourceRoot":"../../../src","sources":["core/meter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * A SpanProcessor intercepts span lifecycle events.
5
+ * Implement this interface to add custom logic (e.g. enrichment, filtering)
6
+ * before spans are exported.
7
+ */
8
+
9
+ /**
10
+ * Wraps a SpanExporter: calls exporter.export() immediately when a span ends.
11
+ * This is the default processor used inside Tracer when no custom processor
12
+ * is provided.
13
+ */
14
+ export class SimpleSpanProcessor {
15
+ constructor(exporter) {
16
+ this.exporter = exporter;
17
+ }
18
+ onEnd(span) {
19
+ this.exporter.export([span]);
20
+ }
21
+ }
22
+
23
+ /** No-op processor — useful as a placeholder or in tests. */
24
+ export class NoopSpanProcessor {
25
+ onStart(_span) {}
26
+ onEnd(_span) {}
27
+ }
28
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SimpleSpanProcessor","constructor","exporter","onEnd","span","export","NoopSpanProcessor","onStart","_span"],"sourceRoot":"../../../src","sources":["core/processor.ts"],"mappings":";;AAGA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,mBAAmB,CAA0B;EACxDC,WAAWA,CAAkBC,QAAsB,EAAE;IAAA,KAAxBA,QAAsB,GAAtBA,QAAsB;EAAG;EAEtDC,KAAKA,CAACC,IAAkB,EAAQ;IAC9B,IAAI,CAACF,QAAQ,CAACG,MAAM,CAAC,CAACD,IAAI,CAAC,CAAC;EAC9B;AACF;;AAEA;AACA,OAAO,MAAME,iBAAiB,CAA0B;EACtDC,OAAOA,CAACC,KAAW,EAAQ,CAAC;EAC5BL,KAAKA,CAACK,KAAmB,EAAQ,CAAC;AACpC","ignoreList":[]}
@@ -6,6 +6,7 @@ import { ATTR_APP_BUILD_ID, ATTR_DEPLOYMENT_ENVIRONMENT_NAME, ATTR_DEVICE_MANUFA
6
6
  // Immutable after creation — user identity is NOT stored here.
7
7
  export function buildResource(params) {
8
8
  return Object.freeze({
9
+ ...params.extra,
9
10
  [ATTR_SERVICE_NAME]: params.serviceName,
10
11
  [ATTR_SERVICE_VERSION]: params.serviceVersion,
11
12
  [ATTR_OS_NAME]: params.osName,
@@ -1 +1 @@
1
- {"version":3,"names":["ATTR_SERVICE_NAME","ATTR_SERVICE_VERSION","ATTR_APP_BUILD_ID","ATTR_DEPLOYMENT_ENVIRONMENT_NAME","ATTR_DEVICE_MANUFACTURER","ATTR_DEVICE_MODEL_NAME","ATTR_OS_NAME","ATTR_OS_VERSION","buildResource","params","Object","freeze","serviceName","serviceVersion","osName","osVersion","deviceBrand","deviceModel","deviceType","appBuild","environment"],"sourceRoot":"../../../src","sources":["core/resource.ts"],"mappings":";;AAAA,SACEA,iBAAiB,EACjBC,oBAAoB,QACf,qCAAqC;AAC5C,SACEC,iBAAiB,EACjBC,gCAAgC,EAChCC,wBAAwB,EACxBC,sBAAsB,EACtBC,YAAY,EACZC,eAAe,QACV,gDAAgD;AAcvD;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,MAU7B,EAAsB;EACrB,OAAOC,MAAM,CAACC,MAAM,CAAC;IACnB,CAACX,iBAAiB,GAAGS,MAAM,CAACG,WAAW;IACvC,CAACX,oBAAoB,GAAGQ,MAAM,CAACI,cAAc;IAC7C,CAACP,YAAY,GAAGG,MAAM,CAACK,MAAM;IAC7B,CAACP,eAAe,GAAGE,MAAM,CAACM,SAAS;IACnC,CAACX,wBAAwB,GAAGK,MAAM,CAACO,WAAW;IAC9C,CAACX,sBAAsB,GAAGI,MAAM,CAACQ,WAAW;IAC5C,aAAa,EAAER,MAAM,CAACS,UAAU;IAChC,CAAChB,iBAAiB,GAAGO,MAAM,CAACU,QAAQ;IACpC,CAAChB,gCAAgC,GAAGM,MAAM,CAACW;EAC7C,CAAC,CAAC;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["ATTR_SERVICE_NAME","ATTR_SERVICE_VERSION","ATTR_APP_BUILD_ID","ATTR_DEPLOYMENT_ENVIRONMENT_NAME","ATTR_DEVICE_MANUFACTURER","ATTR_DEVICE_MODEL_NAME","ATTR_OS_NAME","ATTR_OS_VERSION","buildResource","params","Object","freeze","extra","serviceName","serviceVersion","osName","osVersion","deviceBrand","deviceModel","deviceType","appBuild","environment"],"sourceRoot":"../../../src","sources":["core/resource.ts"],"mappings":";;AAAA,SACEA,iBAAiB,EACjBC,oBAAoB,QACf,qCAAqC;AAC5C,SACEC,iBAAiB,EACjBC,gCAAgC,EAChCC,wBAAwB,EACxBC,sBAAsB,EACtBC,YAAY,EACZC,eAAe,QACV,gDAAgD;AAiBvD;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,MAY7B,EAAsB;EACrB,OAAOC,MAAM,CAACC,MAAM,CAAC;IACnB,GAAGF,MAAM,CAACG,KAAK;IACf,CAACZ,iBAAiB,GAAGS,MAAM,CAACI,WAAW;IACvC,CAACZ,oBAAoB,GAAGQ,MAAM,CAACK,cAAc;IAC7C,CAACR,YAAY,GAAGG,MAAM,CAACM,MAAM;IAC7B,CAACR,eAAe,GAAGE,MAAM,CAACO,SAAS;IACnC,CAACZ,wBAAwB,GAAGK,MAAM,CAACQ,WAAW;IAC9C,CAACZ,sBAAsB,GAAGI,MAAM,CAACS,WAAW;IAC5C,aAAa,EAAET,MAAM,CAACU,UAAU;IAChC,CAACjB,iBAAiB,GAAGO,MAAM,CAACW,QAAQ;IACpC,CAACjB,gCAAgC,GAAGM,MAAM,CAACY;EAC7C,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * A Sampler decides whether a span should be recorded or dropped.
5
+ * Return `true` to record the span, `false` to drop it (NoopSpan is used).
6
+ */
7
+
8
+ /** Records every span (default). */
9
+ export class AlwaysOnSampler {
10
+ shouldSample() {
11
+ return true;
12
+ }
13
+ }
14
+
15
+ /** Drops every span. */
16
+ export class AlwaysOffSampler {
17
+ shouldSample() {
18
+ return false;
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Samples a deterministic fraction of traces based on the trace ID.
24
+ * Uses the first 8 bytes of the traceId to produce a 0–1 value and
25
+ * compares it against the configured ratio, matching the W3C spec intent.
26
+ *
27
+ * When there is no parent (new root trace), a random value is used instead
28
+ * so that the ratio still holds for root spans.
29
+ */
30
+ export class TraceIdRatioSampler {
31
+ constructor(ratio) {
32
+ this.ratio = ratio;
33
+ if (ratio < 0 || ratio > 1) {
34
+ throw new RangeError(`TraceIdRatioSampler: ratio must be in [0, 1], got ${ratio}`);
35
+ }
36
+ }
37
+ shouldSample(_name, parent) {
38
+ if (this.ratio <= 0) return false;
39
+ if (this.ratio >= 1) return true;
40
+ const traceId = parent?.traceId;
41
+ if (traceId && traceId.length >= 16) {
42
+ // Parse the lower 32 bits of the first 8 bytes (hex chars 8–15) as an
43
+ // unsigned integer in [0, 2^32) and normalize to [0, 1).
44
+ // parseInt with radix 16 always returns a non-negative number for 8 hex
45
+ // digits, so no bitwise operation is needed.
46
+ const lo = parseInt(traceId.slice(8, 16), 16); // [0, 0xFFFFFFFF]
47
+ const normalized = lo / 0x100000000; // [0, 1)
48
+ return normalized < this.ratio;
49
+ }
50
+
51
+ // No parent trace ID — fall back to random.
52
+ return Math.random() < this.ratio;
53
+ }
54
+ }
55
+ //# sourceMappingURL=sampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AlwaysOnSampler","shouldSample","AlwaysOffSampler","TraceIdRatioSampler","constructor","ratio","RangeError","_name","parent","traceId","length","lo","parseInt","slice","normalized","Math","random"],"sourceRoot":"../../../src","sources":["core/sampler.ts"],"mappings":";;AAGA;AACA;AACA;AACA;;AASA;AACA,OAAO,MAAMA,eAAe,CAAoB;EAC9CC,YAAYA,CAAA,EAAY;IACtB,OAAO,IAAI;EACb;AACF;;AAEA;AACA,OAAO,MAAMC,gBAAgB,CAAoB;EAC/CD,YAAYA,CAAA,EAAY;IACtB,OAAO,KAAK;EACd;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,mBAAmB,CAAoB;EAClDC,WAAWA,CAAkBC,KAAa,EAAE;IAAA,KAAfA,KAAa,GAAbA,KAAa;IACxC,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;MAC1B,MAAM,IAAIC,UAAU,CAClB,qDAAqDD,KAAK,EAC5D,CAAC;IACH;EACF;EAEAJ,YAAYA,CAACM,KAAa,EAAEC,MAAoB,EAAW;IACzD,IAAI,IAAI,CAACH,KAAK,IAAI,CAAC,EAAE,OAAO,KAAK;IACjC,IAAI,IAAI,CAACA,KAAK,IAAI,CAAC,EAAE,OAAO,IAAI;IAEhC,MAAMI,OAAO,GAAGD,MAAM,EAAEC,OAAO;IAC/B,IAAIA,OAAO,IAAIA,OAAO,CAACC,MAAM,IAAI,EAAE,EAAE;MACnC;MACA;MACA;MACA;MACA,MAAMC,EAAE,GAAGC,QAAQ,CAACH,OAAO,CAACI,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;MAC/C,MAAMC,UAAU,GAAGH,EAAE,GAAG,WAAW,CAAC,CAAC;MACrC,OAAOG,UAAU,GAAG,IAAI,CAACT,KAAK;IAChC;;IAEA;IACA,OAAOU,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,IAAI,CAACX,KAAK;EACnC;AACF","ignoreList":[]}
@@ -7,6 +7,10 @@ import { generateSpanId, generateTraceId } from "./ids.js";
7
7
 
8
8
  // Defined here to avoid circular dep with exporters/types.ts
9
9
 
10
+ // Forward-declared to avoid circular dep with core/processor.ts
11
+
12
+ /** A causal link to a span in a different (or the same) trace. */
13
+
10
14
  // Carries both IDs needed to link a child span into an existing trace.
11
15
 
12
16
  export class Span {
@@ -15,6 +19,7 @@ export class Span {
15
19
  // Mutable plain object — setAttribute writes directly, no full clone.
16
20
 
17
21
  events = [];
22
+ links = [];
18
23
  droppedEventsCount = 0;
19
24
  status = 'UNSET';
20
25
  statusMessage = undefined;
@@ -26,7 +31,10 @@ export class Span {
26
31
  this.kind = params.kind ?? 'INTERNAL';
27
32
  this.startTimeMs = now();
28
33
  this.attributes = params.attributes ? sanitizeAttributes(params.attributes) : {};
34
+ this.links = params.links ?? [];
29
35
  this.exporter = params.exporter;
36
+ this.processor = params.processor;
37
+ this.processor?.onStart?.(this);
30
38
  }
31
39
  setAttribute(key, value) {
32
40
  if (this.endTimeMs !== undefined) return;
@@ -68,7 +76,12 @@ export class Span {
68
76
  if (this.status === 'UNSET') {
69
77
  this.status = 'OK';
70
78
  }
71
- this.exporter?.export([this]);
79
+ // Processor takes precedence over direct exporter (processor wraps the exporter).
80
+ if (this.processor) {
81
+ this.processor.onEnd(this);
82
+ } else {
83
+ this.exporter?.export([this]);
84
+ }
72
85
  }
73
86
  }
74
87
 
@@ -84,6 +97,7 @@ export class NoopSpan {
84
97
  endTimeMs = undefined;
85
98
  attributes = {};
86
99
  events = [];
100
+ links = [];
87
101
  droppedEventsCount = 0;
88
102
  status = 'UNSET';
89
103
  statusMessage = undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","sanitizeAttributes","sanitizeValue","now","generateSpanId","generateTraceId","Span","MAX_EVENTS","endTimeMs","undefined","events","droppedEventsCount","status","statusMessage","constructor","params","traceId","parent","spanId","parentSpanId","name","kind","startTimeMs","attributes","exporter","setAttribute","key","value","sanitized","addEvent","attrs","length","push","timestampMs","setStatus","message","recordException","error","stack","end","export","NoopSpan","_key","_value","_name","_attrs","_status","_message","_error"],"sourceRoot":"../../../src","sources":["core/span.ts"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,yBAAyB,EACzBC,mBAAmB,QACd,qCAAqC;AAG5C,SAASC,kBAAkB,EAAEC,aAAa,QAAQ,iBAAc;AAChE,SAASC,GAAG,QAAQ,YAAS;AAC7B,SAASC,cAAc,EAAEC,eAAe,QAAQ,UAAO;;AAEvD;;AAkCA;;AAMA,OAAO,MAAMC,IAAI,CAAyB;EACxC,OAAwBC,UAAU,GAAG,GAAG;EASxCC,SAAS,GAAuBC,SAAS;EACzC;;EAEAC,MAAM,GAAgB,EAAE;EACxBC,kBAAkB,GAAG,CAAC;EACtBC,MAAM,GAAe,OAAO;EAC5BC,aAAa,GAAuBJ,SAAS;EAI7CK,WAAWA,CAACC,MAOX,EAAE;IACD,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACE,MAAM,EAAED,OAAO,IAAIX,eAAe,CAAC,CAAC;IAC1D,IAAI,CAACa,MAAM,GAAGd,cAAc,CAAC,CAAC;IAC9B,IAAI,CAACe,YAAY,GAAGJ,MAAM,CAACE,MAAM,EAAEC,MAAM;IACzC,IAAI,CAACE,IAAI,GAAGL,MAAM,CAACK,IAAI;IACvB,IAAI,CAACC,IAAI,GAAGN,MAAM,CAACM,IAAI,IAAI,UAAU;IACrC,IAAI,CAACC,WAAW,GAAGnB,GAAG,CAAC,CAAC;IACxB,IAAI,CAACoB,UAAU,GAAGR,MAAM,CAACQ,UAAU,GAC/BtB,kBAAkB,CAACc,MAAM,CAACQ,UAAU,CAAC,GACrC,CAAC,CAAC;IACN,IAAI,CAACC,QAAQ,GAAGT,MAAM,CAACS,QAAQ;EACjC;EAEAC,YAAYA,CAACC,GAAW,EAAEC,KAAyB,EAAQ;IACzD,IAAI,IAAI,CAACnB,SAAS,KAAKC,SAAS,EAAE;IAClC;IACA,MAAMmB,SAAS,GAAG1B,aAAa,CAACyB,KAAK,CAAC;IACtC,IAAIC,SAAS,KAAKnB,SAAS,EAAE;MAC3B,IAAI,CAACc,UAAU,CAACG,GAAG,CAAC,GAAGE,SAAS;IAClC;EACF;EAEAC,QAAQA,CAACT,IAAY,EAAEU,KAAkB,EAAQ;IAC/C,IAAI,IAAI,CAACtB,SAAS,KAAKC,SAAS,EAAE;IAClC,IAAI,IAAI,CAACC,MAAM,CAACqB,MAAM,IAAIzB,IAAI,CAACC,UAAU,EAAE;MACzC,IAAI,CAACI,kBAAkB,EAAE;MACzB;IACF;IACA,IAAI,CAACD,MAAM,CAACsB,IAAI,CAAC;MACfZ,IAAI;MACJa,WAAW,EAAE9B,GAAG,CAAC,CAAC;MAClBoB,UAAU,EAAEO,KAAK,GAAG7B,kBAAkB,CAAC6B,KAAK,CAAC,GAAG,CAAC;IACnD,CAAC,CAAC;EACJ;EAEAI,SAASA,CAACtB,MAAkB,EAAEuB,OAAgB,EAAQ;IACpD,IAAI,IAAI,CAAC3B,SAAS,KAAKC,SAAS,EAAE;IAClC,IAAI,CAACG,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,aAAa,GAAGsB,OAAO;EAC9B;EAEAC,eAAeA,CAACC,KAAY,EAAEP,KAAkB,EAAQ;IACtD,IAAI,CAACD,QAAQ,CAAC,WAAW,EAAE;MACzB,CAAC7B,mBAAmB,GAAGqC,KAAK,CAACjB,IAAI;MACjC,CAACtB,sBAAsB,GAAGuC,KAAK,CAACF,OAAO;MACvC,CAACpC,yBAAyB,GAAGsC,KAAK,CAACC,KAAK,IAAI,EAAE;MAC9C,GAAGR;IACL,CAAC,CAAC;IACF,IAAI,CAACI,SAAS,CAAC,OAAO,EAAEG,KAAK,CAACF,OAAO,CAAC;EACxC;EAEAI,GAAGA,CAAA,EAAS;IACV,IAAI,IAAI,CAAC/B,SAAS,KAAKC,SAAS,EAAE;IAClC,IAAI,CAACD,SAAS,GAAGL,GAAG,CAAC,CAAC;IACtB,IAAI,IAAI,CAACS,MAAM,KAAK,OAAO,EAAE;MAC3B,IAAI,CAACA,MAAM,GAAG,IAAI;IACpB;IACA,IAAI,CAACY,QAAQ,EAAEgB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;EAC/B;AACF;;AAEA;AACA;AACA,OAAO,MAAMC,QAAQ,CAAyB;EACnCzB,OAAO,GAAG,EAAE;EACZE,MAAM,GAAG,EAAE;EACXC,YAAY,GAAGV,SAAS;EACxBW,IAAI,GAAG,EAAE;EACTC,IAAI,GAAa,UAAU;EAC3BC,WAAW,GAAG,CAAC;EACfd,SAAS,GAAGC,SAAS;EACrBc,UAAU,GAAG,CAAC,CAAC;EACfb,MAAM,GAAgB,EAAE;EACxBC,kBAAkB,GAAG,CAAC;EACtBC,MAAM,GAAe,OAAO;EAC5BC,aAAa,GAAGJ,SAAS;EAElCgB,YAAYA,CAACiB,IAAY,EAAEC,MAA0B,EAAQ,CAAC;EAC9Dd,QAAQA,CAACe,KAAa,EAAEC,MAAmB,EAAQ,CAAC;EACpDX,SAASA,CAACY,OAAmB,EAAEC,QAAiB,EAAQ,CAAC;EACzDX,eAAeA,CAACY,MAAa,EAAEH,MAAmB,EAAQ,CAAC;EAC3DN,GAAGA,CAAA,EAAS,CAAC;AACf","ignoreList":[]}
1
+ {"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","sanitizeAttributes","sanitizeValue","now","generateSpanId","generateTraceId","Span","MAX_EVENTS","endTimeMs","undefined","events","links","droppedEventsCount","status","statusMessage","constructor","params","traceId","parent","spanId","parentSpanId","name","kind","startTimeMs","attributes","exporter","processor","onStart","setAttribute","key","value","sanitized","addEvent","attrs","length","push","timestampMs","setStatus","message","recordException","error","stack","end","onEnd","export","NoopSpan","_key","_value","_name","_attrs","_status","_message","_error"],"sourceRoot":"../../../src","sources":["core/span.ts"],"mappings":"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","ignoreList":[]}
@@ -2,20 +2,41 @@
2
2
 
3
3
  import { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE } from '@opentelemetry/semantic-conventions';
4
4
  import { Span, NoopSpan } from "./span.js";
5
- import { spanContext } from "../context/span-context.js";
5
+ import { spanContext, spanContextInternal } from "../context/span-context.js";
6
6
  export class Tracer {
7
7
  constructor(params) {
8
8
  this.exporter = params.exporter;
9
9
  this.sampleRate = params.sampleRate ?? 1.0;
10
+ this.sampler = params.sampler;
11
+ this.processors = params.processors ?? [];
10
12
  this.getUserAttributes = params.getUserAttributes;
11
13
  }
14
+
15
+ // Create a span without making it the active context.
16
+ // Use startActiveSpan() when you want sub-operations to auto-parent.
12
17
  startSpan(name, options) {
13
- if (this.sampleRate < 1.0 && Math.random() > this.sampleRate) {
18
+ // Resolve parent: explicit > current active span > none (new root trace)
19
+ const parent = options?.parent !== undefined ? options.parent ?? undefined : spanContext.current() ?? undefined;
20
+
21
+ // Sampler takes precedence over legacy sampleRate when provided.
22
+ if (this.sampler) {
23
+ if (!this.sampler.shouldSample(name, parent, options?.attributes)) {
24
+ return new NoopSpan();
25
+ }
26
+ } else if (this.sampleRate < 1.0 && Math.random() > this.sampleRate) {
14
27
  return new NoopSpan();
15
28
  }
16
29
 
17
- // Resolve parent: explicit > current screen span > none (new trace)
18
- const parent = options?.parent !== undefined ? options.parent ?? undefined : spanContext.current() ?? undefined;
30
+ // Build a composite processor if multiple processors are registered,
31
+ // otherwise use a single processor or fall back to direct exporter.
32
+ const processor = this.processors.length > 1 ? {
33
+ onStart: s => {
34
+ for (const p of this.processors) p.onStart?.(s);
35
+ },
36
+ onEnd: s => {
37
+ for (const p of this.processors) p.onEnd(s);
38
+ }
39
+ } : this.processors[0];
19
40
  const userAttrs = this.getUserAttributes();
20
41
  return new Span({
21
42
  name,
@@ -24,10 +45,78 @@ export class Tracer {
24
45
  ...userAttrs,
25
46
  ...options?.attributes
26
47
  },
48
+ links: options?.links,
27
49
  parent,
28
- exporter: this.exporter
50
+ exporter: processor ? undefined : this.exporter,
51
+ processor
29
52
  });
30
53
  }
54
+
55
+ // Create a span, make it the active context for the duration of fn, then
56
+ // automatically end it. Sub-operations started inside fn via startSpan() will
57
+ // automatically parent to this span.
58
+ //
59
+ // For concurrent async work (multiple in-flight awaits), pass parent
60
+ // explicitly to startSpan() instead — the shared context stack is not safe
61
+ // for interleaved async operations.
62
+
63
+ startActiveSpan(name, optionsOrFn, fn) {
64
+ const options = typeof optionsOrFn === 'function' ? undefined : optionsOrFn;
65
+ const callback = typeof optionsOrFn === 'function' ? optionsOrFn : fn;
66
+ const span = this.startSpan(name, options);
67
+ const token = spanContextInternal.push(span);
68
+ const cleanup = (isError, err) => {
69
+ if (isError && err instanceof Error) {
70
+ span.setStatus('ERROR', err.message);
71
+ }
72
+ span.end();
73
+ spanContextInternal.pop(token);
74
+ };
75
+ try {
76
+ const result = callback(span);
77
+ if (result instanceof Promise) {
78
+ // Token-based pop fires after the promise settles, preserving identity
79
+ // even if other startActiveSpan calls interleave on the event loop.
80
+ return result.then(v => {
81
+ cleanup(false);
82
+ return v;
83
+ }, e => {
84
+ cleanup(true, e);
85
+ throw e;
86
+ });
87
+ }
88
+ cleanup(false);
89
+ return result;
90
+ } catch (e) {
91
+ cleanup(true, e);
92
+ throw e;
93
+ }
94
+ }
95
+
96
+ // Make an existing span the active context for the duration of fn.
97
+ // Does NOT end the span — the caller owns its lifetime.
98
+ // Safe for synchronous work. For concurrent async work, see startActiveSpan.
99
+ withSpan(span, fn) {
100
+ const token = spanContextInternal.push(span);
101
+ const cleanup = () => spanContextInternal.pop(token);
102
+ try {
103
+ const result = fn(span);
104
+ if (result instanceof Promise) {
105
+ return result.then(v => {
106
+ cleanup();
107
+ return v;
108
+ }, e => {
109
+ cleanup();
110
+ throw e;
111
+ });
112
+ }
113
+ cleanup();
114
+ return result;
115
+ } catch (e) {
116
+ cleanup();
117
+ throw e;
118
+ }
119
+ }
31
120
  recordEvent(name, attributes) {
32
121
  spanContext.current()?.addEvent(name, attributes);
33
122
  }
@@ -1 +1 @@
1
- {"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","Span","NoopSpan","spanContext","Tracer","constructor","params","exporter","sampleRate","getUserAttributes","startSpan","name","options","Math","random","parent","undefined","current","userAttrs","kind","attributes","recordEvent","addEvent","recordException","error","span","message","stack","setStatus","end"],"sourceRoot":"../../../src","sources":["core/tracer.ts"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,yBAAyB,EACzBC,mBAAmB,QACd,qCAAqC;AAI5C,SAASC,IAAI,EAAEC,QAAQ,QAAQ,WAAQ;AACvC,SAASC,WAAW,QAAQ,4BAAyB;AAErD,OAAO,MAAMC,MAAM,CAAC;EAKlBC,WAAWA,CAACC,MAIX,EAAE;IACD,IAAI,CAACC,QAAQ,GAAGD,MAAM,CAACC,QAAQ;IAC/B,IAAI,CAACC,UAAU,GAAGF,MAAM,CAACE,UAAU,IAAI,GAAG;IAC1C,IAAI,CAACC,iBAAiB,GAAGH,MAAM,CAACG,iBAAiB;EACnD;EAEAC,SAASA,CACPC,IAAY,EACZC,OAOC,EACgB;IACjB,IAAI,IAAI,CAACJ,UAAU,GAAG,GAAG,IAAIK,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,IAAI,CAACN,UAAU,EAAE;MAC5D,OAAO,IAAIN,QAAQ,CAAC,CAAC;IACvB;;IAEA;IACA,MAAMa,MAA+B,GACnCH,OAAO,EAAEG,MAAM,KAAKC,SAAS,GACzBJ,OAAO,CAACG,MAAM,IAAIC,SAAS,GAC3Bb,WAAW,CAACc,OAAO,CAAC,CAAC,IAAID,SAAS;IAExC,MAAME,SAAS,GAAG,IAAI,CAACT,iBAAiB,CAAC,CAAC;IAC1C,OAAO,IAAIR,IAAI,CAAC;MACdU,IAAI;MACJQ,IAAI,EAAEP,OAAO,EAAEO,IAAI;MACnBC,UAAU,EAAE;QAAE,GAAGF,SAAS;QAAE,GAAGN,OAAO,EAAEQ;MAAW,CAAC;MACpDL,MAAM;MACNR,QAAQ,EAAE,IAAI,CAACA;IACjB,CAAC,CAAC;EACJ;EAEAc,WAAWA,CAACV,IAAY,EAAES,UAAuB,EAAQ;IACvDjB,WAAW,CAACc,OAAO,CAAC,CAAC,EAAEK,QAAQ,CAACX,IAAI,EAAES,UAAU,CAAC;EACnD;EAEAG,eAAeA,CAACC,KAAY,EAAEJ,UAAuB,EAAQ;IAC3D,MAAMK,IAAI,GAAG,IAAI,CAACf,SAAS,CAAC,aAAac,KAAK,CAACb,IAAI,EAAE,EAAE;MACrDQ,IAAI,EAAE,UAAU;MAChBC,UAAU,EAAE;QACV,CAACpB,mBAAmB,GAAGwB,KAAK,CAACb,IAAI;QACjC,CAACb,sBAAsB,GAAG0B,KAAK,CAACE,OAAO;QACvC,CAAC3B,yBAAyB,GAAGyB,KAAK,CAACG,KAAK,IAAI,EAAE;QAC9C,GAAGP;MACL;IACF,CAAC,CAAC;IACFK,IAAI,CAACG,SAAS,CAAC,OAAO,EAAEJ,KAAK,CAACE,OAAO,CAAC;IACtCD,IAAI,CAACI,GAAG,CAAC,CAAC;EACZ;AACF","ignoreList":[]}
1
+ {"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","Span","NoopSpan","spanContext","spanContextInternal","Tracer","constructor","params","exporter","sampleRate","sampler","processors","getUserAttributes","startSpan","name","options","parent","undefined","current","shouldSample","attributes","Math","random","processor","length","onStart","s","p","onEnd","userAttrs","kind","links","startActiveSpan","optionsOrFn","fn","callback","span","token","push","cleanup","isError","err","Error","setStatus","message","end","pop","result","Promise","then","v","e","withSpan","recordEvent","addEvent","recordException","error","stack"],"sourceRoot":"../../../src","sources":["core/tracer.ts"],"mappings":"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","ignoreList":[]}