react-native-otel 0.1.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.
Files changed (105) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +37 -0
  3. package/lib/module/context/span-context.js +14 -0
  4. package/lib/module/context/span-context.js.map +1 -0
  5. package/lib/module/core/attributes.js +43 -0
  6. package/lib/module/core/attributes.js.map +1 -0
  7. package/lib/module/core/clock.js +8 -0
  8. package/lib/module/core/clock.js.map +1 -0
  9. package/lib/module/core/ids.js +16 -0
  10. package/lib/module/core/ids.js.map +1 -0
  11. package/lib/module/core/log-record.js +41 -0
  12. package/lib/module/core/log-record.js.map +1 -0
  13. package/lib/module/core/meter.js +70 -0
  14. package/lib/module/core/meter.js.map +1 -0
  15. package/lib/module/core/resource.js +20 -0
  16. package/lib/module/core/resource.js.map +1 -0
  17. package/lib/module/core/span.js +96 -0
  18. package/lib/module/core/span.js.map +1 -0
  19. package/lib/module/core/tracer.js +48 -0
  20. package/lib/module/core/tracer.js.map +1 -0
  21. package/lib/module/exporters/console-exporter.js +53 -0
  22. package/lib/module/exporters/console-exporter.js.map +1 -0
  23. package/lib/module/exporters/otlp-http-exporter.js +317 -0
  24. package/lib/module/exporters/otlp-http-exporter.js.map +1 -0
  25. package/lib/module/exporters/types.js +4 -0
  26. package/lib/module/exporters/types.js.map +1 -0
  27. package/lib/module/index.js +24 -0
  28. package/lib/module/index.js.map +1 -0
  29. package/lib/module/instrumentation/errors.js +63 -0
  30. package/lib/module/instrumentation/errors.js.map +1 -0
  31. package/lib/module/instrumentation/lifecycle.js +15 -0
  32. package/lib/module/instrumentation/lifecycle.js.map +1 -0
  33. package/lib/module/instrumentation/navigation.js +51 -0
  34. package/lib/module/instrumentation/navigation.js.map +1 -0
  35. package/lib/module/instrumentation/network.js +183 -0
  36. package/lib/module/instrumentation/network.js.map +1 -0
  37. package/lib/module/package.json +1 -0
  38. package/lib/module/react/OtelProvider.js +57 -0
  39. package/lib/module/react/OtelProvider.js.map +1 -0
  40. package/lib/module/react/useOtel.js +12 -0
  41. package/lib/module/react/useOtel.js.map +1 -0
  42. package/lib/module/sdk.js +127 -0
  43. package/lib/module/sdk.js.map +1 -0
  44. package/lib/typescript/package.json +1 -0
  45. package/lib/typescript/src/context/span-context.d.ts +9 -0
  46. package/lib/typescript/src/context/span-context.d.ts.map +1 -0
  47. package/lib/typescript/src/core/attributes.d.ts +6 -0
  48. package/lib/typescript/src/core/attributes.d.ts.map +1 -0
  49. package/lib/typescript/src/core/clock.d.ts +2 -0
  50. package/lib/typescript/src/core/clock.d.ts.map +1 -0
  51. package/lib/typescript/src/core/ids.d.ts +3 -0
  52. package/lib/typescript/src/core/ids.d.ts.map +1 -0
  53. package/lib/typescript/src/core/log-record.d.ts +15 -0
  54. package/lib/typescript/src/core/log-record.d.ts.map +1 -0
  55. package/lib/typescript/src/core/meter.d.ts +30 -0
  56. package/lib/typescript/src/core/meter.d.ts.map +1 -0
  57. package/lib/typescript/src/core/resource.d.ts +25 -0
  58. package/lib/typescript/src/core/resource.d.ts.map +1 -0
  59. package/lib/typescript/src/core/span.d.ts +77 -0
  60. package/lib/typescript/src/core/span.d.ts.map +1 -0
  61. package/lib/typescript/src/core/tracer.d.ts +21 -0
  62. package/lib/typescript/src/core/tracer.d.ts.map +1 -0
  63. package/lib/typescript/src/exporters/console-exporter.d.ts +17 -0
  64. package/lib/typescript/src/exporters/console-exporter.d.ts.map +1 -0
  65. package/lib/typescript/src/exporters/otlp-http-exporter.d.ts +58 -0
  66. package/lib/typescript/src/exporters/otlp-http-exporter.d.ts.map +1 -0
  67. package/lib/typescript/src/exporters/types.d.ts +25 -0
  68. package/lib/typescript/src/exporters/types.d.ts.map +1 -0
  69. package/lib/typescript/src/index.d.ts +25 -0
  70. package/lib/typescript/src/index.d.ts.map +1 -0
  71. package/lib/typescript/src/instrumentation/errors.d.ts +15 -0
  72. package/lib/typescript/src/instrumentation/errors.d.ts.map +1 -0
  73. package/lib/typescript/src/instrumentation/lifecycle.d.ts +3 -0
  74. package/lib/typescript/src/instrumentation/lifecycle.d.ts.map +1 -0
  75. package/lib/typescript/src/instrumentation/navigation.d.ts +7 -0
  76. package/lib/typescript/src/instrumentation/navigation.d.ts.map +1 -0
  77. package/lib/typescript/src/instrumentation/network.d.ts +33 -0
  78. package/lib/typescript/src/instrumentation/network.d.ts.map +1 -0
  79. package/lib/typescript/src/react/OtelProvider.d.ts +21 -0
  80. package/lib/typescript/src/react/OtelProvider.d.ts.map +1 -0
  81. package/lib/typescript/src/react/useOtel.d.ts +3 -0
  82. package/lib/typescript/src/react/useOtel.d.ts.map +1 -0
  83. package/lib/typescript/src/sdk.d.ts +50 -0
  84. package/lib/typescript/src/sdk.d.ts.map +1 -0
  85. package/package.json +125 -0
  86. package/src/context/span-context.ts +17 -0
  87. package/src/core/attributes.ts +61 -0
  88. package/src/core/clock.ts +5 -0
  89. package/src/core/ids.ts +15 -0
  90. package/src/core/log-record.ts +58 -0
  91. package/src/core/meter.ts +82 -0
  92. package/src/core/resource.ts +50 -0
  93. package/src/core/span.ts +161 -0
  94. package/src/core/tracer.ts +75 -0
  95. package/src/exporters/console-exporter.ts +89 -0
  96. package/src/exporters/otlp-http-exporter.ts +377 -0
  97. package/src/exporters/types.ts +29 -0
  98. package/src/index.ts +63 -0
  99. package/src/instrumentation/errors.ts +95 -0
  100. package/src/instrumentation/lifecycle.ts +17 -0
  101. package/src/instrumentation/navigation.ts +61 -0
  102. package/src/instrumentation/network.ts +253 -0
  103. package/src/react/OtelProvider.tsx +98 -0
  104. package/src/react/useOtel.ts +14 -0
  105. package/src/sdk.ts +179 -0
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+
3
+ // ─── OTLP attribute value serialization ──────────────────────────────────────
4
+
5
+ function toOtlpValue(value) {
6
+ if (typeof value === 'boolean') return {
7
+ boolValue: value
8
+ };
9
+ if (typeof value === 'string') return {
10
+ stringValue: value
11
+ };
12
+ if (typeof value === 'number') {
13
+ return Number.isInteger(value) ? {
14
+ intValue: String(value)
15
+ } : {
16
+ doubleValue: value
17
+ };
18
+ }
19
+ if (Array.isArray(value)) {
20
+ return {
21
+ arrayValue: {
22
+ values: value.map(toOtlpValue)
23
+ }
24
+ };
25
+ }
26
+ return {
27
+ stringValue: String(value)
28
+ };
29
+ }
30
+ function toOtlpAttributes(attrs) {
31
+ return Object.entries(attrs).map(([key, value]) => ({
32
+ key,
33
+ value: toOtlpValue(value)
34
+ }));
35
+ }
36
+
37
+ // Milliseconds → nanoseconds as string (exceeds JS safe integer range).
38
+ function msToNano(ms) {
39
+ return String(ms * 1_000_000);
40
+ }
41
+
42
+ // ─── SpanKind + SpanStatus mappings ──────────────────────────────────────────
43
+
44
+ const SPAN_KIND = {
45
+ INTERNAL: 1,
46
+ SERVER: 2,
47
+ CLIENT: 3,
48
+ PRODUCER: 4,
49
+ CONSUMER: 5
50
+ };
51
+ const SPAN_STATUS_CODE = {
52
+ UNSET: 0,
53
+ OK: 1,
54
+ ERROR: 2
55
+ };
56
+
57
+ // ─── Exporter ─────────────────────────────────────────────────────────────────
58
+
59
+ export class OtlpHttpExporter {
60
+ buffer = [];
61
+ constructor(options) {
62
+ this.tracesEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/traces';
63
+ this.headers = {
64
+ 'Content-Type': 'application/json',
65
+ ...options.headers
66
+ };
67
+ this.batchSize = options.batchSize ?? 50;
68
+ const interval = options.flushIntervalMs ?? 30_000;
69
+ this.timer_ = setInterval(() => {
70
+ this.flush();
71
+ }, interval);
72
+ }
73
+
74
+ // Called by OtelSDK.init() after buildResource() — not part of SpanExporter.
75
+ setResource(resource) {
76
+ this.resource_ = resource;
77
+ }
78
+ export(spans) {
79
+ this.buffer.push(...spans);
80
+ if (this.buffer.length >= this.batchSize) {
81
+ this.flush();
82
+ }
83
+ }
84
+ flush() {
85
+ if (this.buffer.length === 0) return;
86
+ const batch = this.buffer.splice(0);
87
+ this.send(batch);
88
+ }
89
+
90
+ // Clear the flush timer and send any remaining buffered spans.
91
+ destroy() {
92
+ if (this.timer_ !== undefined) {
93
+ clearInterval(this.timer_);
94
+ this.timer_ = undefined;
95
+ }
96
+ this.flush();
97
+ }
98
+ send(spans) {
99
+ const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
100
+ const body = JSON.stringify({
101
+ resourceSpans: [{
102
+ resource: {
103
+ attributes: resourceAttrs
104
+ },
105
+ scopeSpans: [{
106
+ scope: {
107
+ name: 'react-native-otel',
108
+ version: '0.1.0'
109
+ },
110
+ spans: spans.map(s => this.toOtlpSpan(s))
111
+ }]
112
+ }]
113
+ });
114
+ fetch(this.tracesEndpoint, {
115
+ method: 'POST',
116
+ headers: this.headers,
117
+ body
118
+ }).catch(() => {});
119
+ }
120
+ toOtlpSpan(span) {
121
+ return {
122
+ traceId: span.traceId,
123
+ spanId: span.spanId,
124
+ // Root spans must omit parentSpanId — empty string breaks trace tree assembly.
125
+ ...(span.parentSpanId ? {
126
+ parentSpanId: span.parentSpanId
127
+ } : {}),
128
+ name: span.name,
129
+ kind: SPAN_KIND[span.kind] ?? 1,
130
+ startTimeUnixNano: msToNano(span.startTimeMs),
131
+ endTimeUnixNano: msToNano(span.endTimeMs ?? span.startTimeMs),
132
+ attributes: toOtlpAttributes(span.attributes),
133
+ events: span.events.map(event => ({
134
+ name: event.name,
135
+ timeUnixNano: msToNano(event.timestampMs),
136
+ attributes: toOtlpAttributes(event.attributes)
137
+ })),
138
+ droppedEventsCount: span.droppedEventsCount,
139
+ status: {
140
+ code: SPAN_STATUS_CODE[span.status] ?? 0,
141
+ // Omit message when empty — some parsers reject the empty string.
142
+ ...(span.statusMessage ? {
143
+ message: span.statusMessage
144
+ } : {})
145
+ }
146
+ };
147
+ }
148
+ }
149
+
150
+ // ─── Metric exporter ──────────────────────────────────────────────────────────
151
+
152
+ // OTLP aggregation temporality: 2 = CUMULATIVE
153
+ const AGGREGATION_TEMPORALITY_CUMULATIVE = 2;
154
+ export class OtlpHttpMetricExporter {
155
+ constructor(options) {
156
+ this.metricsEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/metrics';
157
+ this.headers = {
158
+ 'Content-Type': 'application/json',
159
+ ...options.headers
160
+ };
161
+ }
162
+ setResource(resource) {
163
+ this.resource_ = resource;
164
+ }
165
+ export(metrics) {
166
+ if (metrics.length === 0) return;
167
+ this.send(metrics);
168
+ }
169
+ send(metrics) {
170
+ const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
171
+
172
+ // Group records by name so each unique metric name becomes one OTLP metric.
173
+ const byName = new Map();
174
+ for (const record of metrics) {
175
+ const group = byName.get(record.name);
176
+ if (group) {
177
+ group.push(record);
178
+ } else {
179
+ byName.set(record.name, [record]);
180
+ }
181
+ }
182
+ const otlpMetrics = Array.from(byName.entries()).map(([name, records]) => {
183
+ const type = records[0]?.type;
184
+
185
+ // Counters → sum; histograms + gauges → gauge (no bucket data available).
186
+ if (type === 'counter') {
187
+ return {
188
+ name,
189
+ sum: {
190
+ dataPoints: records.map(r => ({
191
+ asDouble: r.value,
192
+ startTimeUnixNano: msToNano(r.timestampMs),
193
+ timeUnixNano: msToNano(r.timestampMs),
194
+ attributes: toOtlpAttributes(r.attributes)
195
+ })),
196
+ aggregationTemporality: AGGREGATION_TEMPORALITY_CUMULATIVE,
197
+ isMonotonic: true
198
+ }
199
+ };
200
+ }
201
+ return {
202
+ name,
203
+ gauge: {
204
+ dataPoints: records.map(r => ({
205
+ asDouble: r.value,
206
+ timeUnixNano: msToNano(r.timestampMs),
207
+ attributes: toOtlpAttributes(r.attributes)
208
+ }))
209
+ }
210
+ };
211
+ });
212
+ const body = JSON.stringify({
213
+ resourceMetrics: [{
214
+ resource: {
215
+ attributes: resourceAttrs
216
+ },
217
+ scopeMetrics: [{
218
+ scope: {
219
+ name: 'react-native-otel',
220
+ version: '0.1.0'
221
+ },
222
+ metrics: otlpMetrics
223
+ }]
224
+ }]
225
+ });
226
+ fetch(this.metricsEndpoint, {
227
+ method: 'POST',
228
+ headers: this.headers,
229
+ body
230
+ }).catch(() => {});
231
+ }
232
+ }
233
+
234
+ // ─── Log exporter ─────────────────────────────────────────────────────────────
235
+
236
+ // OTLP severity number mapping (spec: https://opentelemetry.io/docs/specs/otel/logs/data-model/)
237
+ const LOG_SEVERITY_NUMBER = {
238
+ TRACE: 1,
239
+ DEBUG: 5,
240
+ INFO: 9,
241
+ WARN: 13,
242
+ ERROR: 17,
243
+ FATAL: 21
244
+ };
245
+ export class OtlpHttpLogExporter {
246
+ buffer = [];
247
+ constructor(options) {
248
+ this.logsEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/logs';
249
+ this.headers = {
250
+ 'Content-Type': 'application/json',
251
+ ...options.headers
252
+ };
253
+ this.batchSize = options.batchSize ?? 50;
254
+ const interval = options.flushIntervalMs ?? 30_000;
255
+ this.timer_ = setInterval(() => {
256
+ this.flush();
257
+ }, interval);
258
+ }
259
+ setResource(resource) {
260
+ this.resource_ = resource;
261
+ }
262
+ export(logs) {
263
+ this.buffer.push(...logs);
264
+ if (this.buffer.length >= this.batchSize) {
265
+ this.flush();
266
+ }
267
+ }
268
+ flush() {
269
+ if (this.buffer.length === 0) return;
270
+ const batch = this.buffer.splice(0);
271
+ this.send(batch);
272
+ }
273
+ destroy() {
274
+ if (this.timer_ !== undefined) {
275
+ clearInterval(this.timer_);
276
+ this.timer_ = undefined;
277
+ }
278
+ this.flush();
279
+ }
280
+ send(logs) {
281
+ const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
282
+ const body = JSON.stringify({
283
+ resourceLogs: [{
284
+ resource: {
285
+ attributes: resourceAttrs
286
+ },
287
+ scopeLogs: [{
288
+ scope: {
289
+ name: 'react-native-otel',
290
+ version: '0.1.0'
291
+ },
292
+ logRecords: logs.map(log => ({
293
+ timeUnixNano: msToNano(log.timestampMs),
294
+ severityNumber: LOG_SEVERITY_NUMBER[log.severity] ?? 9,
295
+ severityText: log.severity,
296
+ body: {
297
+ stringValue: log.body
298
+ },
299
+ ...(log.traceId ? {
300
+ traceId: log.traceId
301
+ } : {}),
302
+ ...(log.spanId ? {
303
+ spanId: log.spanId
304
+ } : {}),
305
+ attributes: toOtlpAttributes(log.attributes)
306
+ }))
307
+ }]
308
+ }]
309
+ });
310
+ fetch(this.logsEndpoint, {
311
+ method: 'POST',
312
+ headers: this.headers,
313
+ body
314
+ }).catch(() => {});
315
+ }
316
+ }
317
+ //# sourceMappingURL=otlp-http-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toOtlpValue","value","boolValue","stringValue","Number","isInteger","intValue","String","doubleValue","Array","isArray","arrayValue","values","map","toOtlpAttributes","attrs","Object","entries","key","msToNano","ms","SPAN_KIND","INTERNAL","SERVER","CLIENT","PRODUCER","CONSUMER","SPAN_STATUS_CODE","UNSET","OK","ERROR","OtlpHttpExporter","buffer","constructor","options","tracesEndpoint","endpoint","replace","headers","batchSize","interval","flushIntervalMs","timer_","setInterval","flush","setResource","resource","resource_","export","spans","push","length","batch","splice","send","destroy","undefined","clearInterval","resourceAttrs","body","JSON","stringify","resourceSpans","attributes","scopeSpans","scope","name","version","s","toOtlpSpan","fetch","method","catch","span","traceId","spanId","parentSpanId","kind","startTimeUnixNano","startTimeMs","endTimeUnixNano","endTimeMs","events","event","timeUnixNano","timestampMs","droppedEventsCount","status","code","statusMessage","message","AGGREGATION_TEMPORALITY_CUMULATIVE","OtlpHttpMetricExporter","metricsEndpoint","metrics","byName","Map","record","group","get","set","otlpMetrics","from","records","type","sum","dataPoints","r","asDouble","aggregationTemporality","isMonotonic","gauge","resourceMetrics","scopeMetrics","LOG_SEVERITY_NUMBER","TRACE","DEBUG","INFO","WARN","FATAL","OtlpHttpLogExporter","logsEndpoint","logs","resourceLogs","scopeLogs","logRecords","log","severityNumber","severity","severityText"],"sourceRoot":"../../../src","sources":["exporters/otlp-http-exporter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["exporters/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ // SDK
4
+ export { otel } from "./sdk.js";
5
+ // Core
6
+ export { Span, NoopSpan } from "./core/span.js";
7
+ export { Tracer } from "./core/tracer.js";
8
+ export { Meter, Counter, Histogram, Gauge } from "./core/meter.js";
9
+ export { OtelLogger } from "./core/log-record.js";
10
+ // Context
11
+ export { spanContext } from "./context/span-context.js";
12
+
13
+ // Exporters
14
+
15
+ export { ConsoleSpanExporter, ConsoleMetricExporter, ConsoleLogExporter } from "./exporters/console-exporter.js";
16
+ export { OtlpHttpExporter, OtlpHttpMetricExporter, OtlpHttpLogExporter } from "./exporters/otlp-http-exporter.js";
17
+ // Instrumentation
18
+ export { createNavigationInstrumentation } from "./instrumentation/navigation.js";
19
+ export { createAxiosInstrumentation } from "./instrumentation/network.js";
20
+ export { installErrorInstrumentation } from "./instrumentation/errors.js";
21
+ // React
22
+ export { OtelProvider, OtelContext } from "./react/OtelProvider.js";
23
+ export { useOtel } from "./react/useOtel.js";
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["otel","Span","NoopSpan","Tracer","Meter","Counter","Histogram","Gauge","OtelLogger","spanContext","ConsoleSpanExporter","ConsoleMetricExporter","ConsoleLogExporter","OtlpHttpExporter","OtlpHttpMetricExporter","OtlpHttpLogExporter","createNavigationInstrumentation","createAxiosInstrumentation","installErrorInstrumentation","OtelProvider","OtelContext","useOtel"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,SAASA,IAAI,QAAQ,UAAO;AAG5B;AACA,SAASC,IAAI,EAAEC,QAAQ,QAAQ,gBAAa;AAO5C,SAASC,MAAM,QAAQ,kBAAe;AACtC,SAASC,KAAK,EAAEC,OAAO,EAAEC,SAAS,EAAEC,KAAK,QAAQ,iBAAc;AAC/D,SAASC,UAAU,QAAQ,sBAAmB;AAK9C;AACA,SAASC,WAAW,QAAQ,2BAAwB;;AAEpD;;AAQA,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,kBAAkB,QACb,iCAA8B;AACrC,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,mBAAmB,QACd,mCAAgC;AAOvC;AACA,SAASC,+BAA+B,QAAQ,iCAA8B;AAE9E,SAASC,0BAA0B,QAAQ,8BAA2B;AAOtE,SAASC,2BAA2B,QAAQ,6BAA0B;AAGtE;AACA,SAASC,YAAY,EAAEC,WAAW,QAAQ,yBAAsB;AAEhE,SAASC,OAAO,QAAQ,oBAAiB","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ import { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE } from '@opentelemetry/semantic-conventions';
4
+ import { Span } from "../core/span.js";
5
+ const CRASH_KEY = '@react-native-otel/pending-crash';
6
+
7
+ // Serialized crash span shape for storage
8
+
9
+ export function installErrorInstrumentation(params) {
10
+ const {
11
+ tracer,
12
+ storage,
13
+ exporter
14
+ } = params;
15
+
16
+ // Flush any pending crash span from previous session
17
+ if (storage && exporter) {
18
+ const pending = storage.getSync(CRASH_KEY);
19
+ if (pending) {
20
+ try {
21
+ const crashRecord = JSON.parse(pending);
22
+ exporter.export([crashRecord]);
23
+ } catch {
24
+ // Ignore parse errors
25
+ }
26
+ storage.deleteSync(CRASH_KEY);
27
+ }
28
+ }
29
+
30
+ // Wrap the global JS error handler
31
+ const originalHandler = ErrorUtils.getGlobalHandler?.();
32
+ ErrorUtils.setGlobalHandler((error, isFatal) => {
33
+ const span = tracer.startSpan(`crash.${error.name}`, {
34
+ kind: 'INTERNAL',
35
+ attributes: {
36
+ [ATTR_EXCEPTION_TYPE]: error.name,
37
+ [ATTR_EXCEPTION_MESSAGE]: error.message,
38
+ [ATTR_EXCEPTION_STACKTRACE]: error.stack ?? '',
39
+ 'crash.is_fatal': isFatal ?? false // custom — no OTel equivalent
40
+ }
41
+ });
42
+ span.setStatus('ERROR', error.message);
43
+ span.end();
44
+
45
+ // Persist crash span synchronously for next session retrieval
46
+ if (isFatal && storage && span instanceof Span) {
47
+ const record = {
48
+ traceId: span.traceId,
49
+ spanId: span.spanId,
50
+ name: span.name,
51
+ startTimeMs: span.startTimeMs,
52
+ endTimeMs: span.endTimeMs ?? Date.now(),
53
+ attributes: span.attributes,
54
+ events: span.events,
55
+ status: span.status,
56
+ statusMessage: span.statusMessage
57
+ };
58
+ storage.setSync(CRASH_KEY, JSON.stringify(record));
59
+ }
60
+ originalHandler?.(error, isFatal);
61
+ });
62
+ }
63
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","Span","CRASH_KEY","installErrorInstrumentation","params","tracer","storage","exporter","pending","getSync","crashRecord","JSON","parse","export","deleteSync","originalHandler","ErrorUtils","getGlobalHandler","setGlobalHandler","error","isFatal","span","startSpan","name","kind","attributes","message","stack","setStatus","end","record","traceId","spanId","startTimeMs","endTimeMs","Date","now","events","status","statusMessage","setSync","stringify"],"sourceRoot":"../../../src","sources":["instrumentation/errors.ts"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,yBAAyB,EACzBC,mBAAmB,QACd,qCAAqC;AAE5C,SAASC,IAAI,QAAQ,iBAAc;AAInC,MAAMC,SAAS,GAAG,kCAAkC;;AAUpD;;AAiBA,OAAO,SAASC,2BAA2BA,CAACC,MAI3C,EAAQ;EACP,MAAM;IAAEC,MAAM;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGH,MAAM;;EAE5C;EACA,IAAIE,OAAO,IAAIC,QAAQ,EAAE;IACvB,MAAMC,OAAO,GAAGF,OAAO,CAACG,OAAO,CAACP,SAAS,CAAC;IAC1C,IAAIM,OAAO,EAAE;MACX,IAAI;QACF,MAAME,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACJ,OAAO,CAAoB;QAC1DD,QAAQ,CAACM,MAAM,CAAC,CAACH,WAAW,CAA4B,CAAC;MAC3D,CAAC,CAAC,MAAM;QACN;MAAA;MAEFJ,OAAO,CAACQ,UAAU,CAACZ,SAAS,CAAC;IAC/B;EACF;;EAEA;EACA,MAAMa,eAAe,GACnBC,UAAU,CACVC,gBAAgB,GAAG,CAAC;EAEtBD,UAAU,CAACE,gBAAgB,CAAC,CAACC,KAAY,EAAEC,OAAiB,KAAK;IAC/D,MAAMC,IAAI,GAAGhB,MAAM,CAACiB,SAAS,CAAC,SAASH,KAAK,CAACI,IAAI,EAAE,EAAE;MACnDC,IAAI,EAAE,UAAU;MAChBC,UAAU,EAAE;QACV,CAACzB,mBAAmB,GAAGmB,KAAK,CAACI,IAAI;QACjC,CAACzB,sBAAsB,GAAGqB,KAAK,CAACO,OAAO;QACvC,CAAC3B,yBAAyB,GAAGoB,KAAK,CAACQ,KAAK,IAAI,EAAE;QAC9C,gBAAgB,EAAEP,OAAO,IAAI,KAAK,CAAE;MACtC;IACF,CAAC,CAAC;IACFC,IAAI,CAACO,SAAS,CAAC,OAAO,EAAET,KAAK,CAACO,OAAO,CAAC;IACtCL,IAAI,CAACQ,GAAG,CAAC,CAAC;;IAEV;IACA,IAAIT,OAAO,IAAId,OAAO,IAAIe,IAAI,YAAYpB,IAAI,EAAE;MAC9C,MAAM6B,MAAuB,GAAG;QAC9BC,OAAO,EAAEV,IAAI,CAACU,OAAO;QACrBC,MAAM,EAAEX,IAAI,CAACW,MAAM;QACnBT,IAAI,EAAEF,IAAI,CAACE,IAAI;QACfU,WAAW,EAAEZ,IAAI,CAACY,WAAW;QAC7BC,SAAS,EAAEb,IAAI,CAACa,SAAS,IAAIC,IAAI,CAACC,GAAG,CAAC,CAAC;QACvCX,UAAU,EAAEJ,IAAI,CAACI,UAAqC;QACtDY,MAAM,EAAEhB,IAAI,CAACgB,MAAM;QACnBC,MAAM,EAAEjB,IAAI,CAACiB,MAAM;QACnBC,aAAa,EAAElB,IAAI,CAACkB;MACtB,CAAC;MACDjC,OAAO,CAACkC,OAAO,CAACtC,SAAS,EAAES,IAAI,CAAC8B,SAAS,CAACX,MAAM,CAAC,CAAC;IACpD;IAEAf,eAAe,GAAGI,KAAK,EAAEC,OAAO,CAAC;EACnC,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ import { AppState } from 'react-native';
4
+ import { spanContext } from "../context/span-context.js";
5
+ export function installLifecycleInstrumentation(meter) {
6
+ AppState.addEventListener('change', state => {
7
+ spanContext.current()?.addEvent(`app.lifecycle.${state}`, {
8
+ 'app.state': state
9
+ });
10
+ if (state === 'background') {
11
+ meter.flush();
12
+ }
13
+ });
14
+ }
15
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AppState","spanContext","installLifecycleInstrumentation","meter","addEventListener","state","current","addEvent","flush"],"sourceRoot":"../../../src","sources":["instrumentation/lifecycle.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,SAASC,WAAW,QAAQ,4BAAyB;AAGrD,OAAO,SAASC,+BAA+BA,CAACC,KAAY,EAAQ;EAClEH,QAAQ,CAACI,gBAAgB,CAAC,QAAQ,EAAGC,KAAqB,IAAK;IAC7DJ,WAAW,CAACK,OAAO,CAAC,CAAC,EAAEC,QAAQ,CAAC,iBAAiBF,KAAK,EAAE,EAAE;MACxD,WAAW,EAAEA;IACf,CAAC,CAAC;IAEF,IAAIA,KAAK,KAAK,YAAY,EAAE;MAC1BF,KAAK,CAACK,KAAK,CAAC,CAAC;IACf;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ import { ATTR_APP_SCREEN_NAME } from '@opentelemetry/semantic-conventions/incubating';
4
+ import { spanContext } from "../context/span-context.js";
5
+ // Keyed by React Navigation route key — handles modals + tabs coexisting
6
+ const screenSpans = new Map();
7
+ export function createNavigationInstrumentation(tracer) {
8
+ return {
9
+ onRouteChange(currentName, previousName, currentKey, previousKey, params) {
10
+ // End previous screen span looked up by key (not stack pop)
11
+ if (previousKey) {
12
+ const prevSpan = screenSpans.get(previousKey);
13
+ if (prevSpan) {
14
+ prevSpan.end();
15
+ screenSpans.delete(previousKey);
16
+ }
17
+ }
18
+
19
+ // Start new screen span
20
+ const span = tracer.startSpan(`screen.${currentName}`, {
21
+ kind: 'INTERNAL',
22
+ attributes: {
23
+ [ATTR_APP_SCREEN_NAME]: currentName,
24
+ // 'app.screen.name'
25
+ 'app.screen.previous_name': previousName ?? '',
26
+ // custom
27
+ ...(params ? {
28
+ 'app.screen.params': JSON.stringify(params)
29
+ } : {}) // custom
30
+ }
31
+ });
32
+ screenSpans.set(currentKey, span);
33
+ spanContext.setCurrent(span);
34
+ },
35
+ endCurrentScreen() {
36
+ const current = spanContext.current();
37
+ if (current) {
38
+ current.end();
39
+ // Remove from map
40
+ for (const [key, span] of screenSpans.entries()) {
41
+ if (span === current) {
42
+ screenSpans.delete(key);
43
+ break;
44
+ }
45
+ }
46
+ spanContext.setCurrent(undefined);
47
+ }
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ATTR_APP_SCREEN_NAME","spanContext","screenSpans","Map","createNavigationInstrumentation","tracer","onRouteChange","currentName","previousName","currentKey","previousKey","params","prevSpan","get","end","delete","span","startSpan","kind","attributes","JSON","stringify","set","setCurrent","endCurrentScreen","current","key","entries","undefined"],"sourceRoot":"../../../src","sources":["instrumentation/navigation.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,gDAAgD;AAErF,SAASC,WAAW,QAAQ,4BAAyB;AAIrD;AACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAA0B,CAAC;AAEtD,OAAO,SAASC,+BAA+BA,CAACC,MAAc,EAAE;EAC9D,OAAO;IACLC,aAAaA,CACXC,WAAmB,EACnBC,YAAgC,EAChCC,UAAkB,EAClBC,WAA+B,EAC/BC,MAAgC,EAC1B;MACN;MACA,IAAID,WAAW,EAAE;QACf,MAAME,QAAQ,GAAGV,WAAW,CAACW,GAAG,CAACH,WAAW,CAAC;QAC7C,IAAIE,QAAQ,EAAE;UACZA,QAAQ,CAACE,GAAG,CAAC,CAAC;UACdZ,WAAW,CAACa,MAAM,CAACL,WAAW,CAAC;QACjC;MACF;;MAEA;MACA,MAAMM,IAAI,GAAGX,MAAM,CAACY,SAAS,CAAC,UAAUV,WAAW,EAAE,EAAE;QACrDW,IAAI,EAAE,UAAU;QAChBC,UAAU,EAAE;UACV,CAACnB,oBAAoB,GAAGO,WAAW;UAAE;UACrC,0BAA0B,EAAEC,YAAY,IAAI,EAAE;UAAE;UAChD,IAAIG,MAAM,GAAG;YAAE,mBAAmB,EAAES,IAAI,CAACC,SAAS,CAACV,MAAM;UAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE;QACtE;MACF,CAAC,CAAC;MAEFT,WAAW,CAACoB,GAAG,CAACb,UAAU,EAAEO,IAAI,CAAC;MACjCf,WAAW,CAACsB,UAAU,CAACP,IAAI,CAAC;IAC9B,CAAC;IAEDQ,gBAAgBA,CAAA,EAAS;MACvB,MAAMC,OAAO,GAAGxB,WAAW,CAACwB,OAAO,CAAC,CAAC;MACrC,IAAIA,OAAO,EAAE;QACXA,OAAO,CAACX,GAAG,CAAC,CAAC;QACb;QACA,KAAK,MAAM,CAACY,GAAG,EAAEV,IAAI,CAAC,IAAId,WAAW,CAACyB,OAAO,CAAC,CAAC,EAAE;UAC/C,IAAIX,IAAI,KAAKS,OAAO,EAAE;YACpBvB,WAAW,CAACa,MAAM,CAACW,GAAG,CAAC;YACvB;UACF;QACF;QACAzB,WAAW,CAACsB,UAAU,CAACK,SAAS,CAAC;MACnC;IACF;EACF,CAAC;AACH","ignoreList":[]}