@multiplayer-app/session-recorder-react-native 1.3.13 → 1.3.15
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/lib/module/otel/index.js
CHANGED
|
@@ -8,7 +8,6 @@ import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
|
|
8
8
|
import { SessionType, ATTR_MULTIPLAYER_SESSION_ID, SessionRecorderIdGenerator, SessionRecorderTraceIdRatioBasedSampler, SessionRecorderBrowserTraceExporter } from '@multiplayer-app/session-recorder-common';
|
|
9
9
|
import { getInstrumentations } from "./instrumentations/index.js";
|
|
10
10
|
import { getExporterEndpoint } from "./helpers.js";
|
|
11
|
-
import { SessionRecorderSdk } from '@multiplayer-app/session-recorder-common';
|
|
12
11
|
import { trace, SpanStatusCode, context } from '@opentelemetry/api';
|
|
13
12
|
import { getPlatformAttributes } from "../utils/platform.js";
|
|
14
13
|
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
@@ -103,19 +102,11 @@ export class TracerReactNativeSDK {
|
|
|
103
102
|
*/
|
|
104
103
|
captureException(error, errorInfo) {
|
|
105
104
|
if (!error) return;
|
|
106
|
-
|
|
107
105
|
// Prefer attaching to the active span to keep correlation intact
|
|
108
106
|
try {
|
|
109
107
|
const activeSpan = trace.getSpan(context.active());
|
|
110
108
|
if (activeSpan) {
|
|
111
|
-
|
|
112
|
-
SessionRecorderSdk.captureException(error);
|
|
113
|
-
activeSpan.addEvent('exception', {
|
|
114
|
-
'exception.type': error.name || 'Error',
|
|
115
|
-
'exception.message': error.message,
|
|
116
|
-
'exception.stacktrace': error.stack || '',
|
|
117
|
-
...(errorInfo || {})
|
|
118
|
-
});
|
|
109
|
+
this._recordException(activeSpan, error, errorInfo);
|
|
119
110
|
return;
|
|
120
111
|
}
|
|
121
112
|
} catch (_ignored) {}
|
|
@@ -124,20 +115,25 @@ export class TracerReactNativeSDK {
|
|
|
124
115
|
try {
|
|
125
116
|
const tracer = trace.getTracer('exception');
|
|
126
117
|
const span = tracer.startSpan(error.name || 'Error');
|
|
127
|
-
|
|
128
|
-
span.setStatus({
|
|
129
|
-
code: SpanStatusCode.ERROR,
|
|
130
|
-
message: error.message
|
|
131
|
-
});
|
|
132
|
-
span.addEvent('exception', {
|
|
133
|
-
'exception.type': error.name || 'Error',
|
|
134
|
-
'exception.message': error.message,
|
|
135
|
-
'exception.stacktrace': error.stack || '',
|
|
136
|
-
...(errorInfo || {})
|
|
137
|
-
});
|
|
118
|
+
this._recordException(span, error, errorInfo);
|
|
138
119
|
span.end();
|
|
139
120
|
} catch (_ignored) {}
|
|
140
121
|
}
|
|
122
|
+
_recordException(span, error, errorInfo) {
|
|
123
|
+
span.recordException(error);
|
|
124
|
+
span.setStatus({
|
|
125
|
+
code: SpanStatusCode.ERROR,
|
|
126
|
+
message: error.message
|
|
127
|
+
});
|
|
128
|
+
span.setAttribute('exception.type', error.name || 'Error');
|
|
129
|
+
span.setAttribute('exception.message', error.message);
|
|
130
|
+
span.setAttribute('exception.stacktrace', error.stack || '');
|
|
131
|
+
if (errorInfo) {
|
|
132
|
+
Object.entries(errorInfo).forEach(([key, value]) => {
|
|
133
|
+
span.setAttribute(`error_info.${key}`, value);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
141
137
|
_registerGlobalErrorHandlers() {
|
|
142
138
|
if (this.globalErrorHandlerRegistered) return;
|
|
143
139
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["resourceFromAttributes","W3CTraceContextPropagator","BatchSpanProcessor","SemanticAttributes","registerInstrumentations","SessionType","ATTR_MULTIPLAYER_SESSION_ID","SessionRecorderIdGenerator","SessionRecorderTraceIdRatioBasedSampler","SessionRecorderBrowserTraceExporter","getInstrumentations","getExporterEndpoint","
|
|
1
|
+
{"version":3,"names":["resourceFromAttributes","W3CTraceContextPropagator","BatchSpanProcessor","SemanticAttributes","registerInstrumentations","SessionType","ATTR_MULTIPLAYER_SESSION_ID","SessionRecorderIdGenerator","SessionRecorderTraceIdRatioBasedSampler","SessionRecorderBrowserTraceExporter","getInstrumentations","getExporterEndpoint","trace","SpanStatusCode","context","getPlatformAttributes","WebTracerProvider","TracerReactNativeSDK","sessionId","globalErrorHandlerRegistered","constructor","_setSessionId","sessionType","MANUAL","idGenerator","setSessionId","init","options","config","application","version","environment","exporter","apiKey","url","exporterEndpoint","tracerProvider","resource","SEMRESATTRS_SERVICE_NAME","SEMRESATTRS_SERVICE_VERSION","SEMRESATTRS_DEPLOYMENT_ENVIRONMENT","sampler","sampleTraceRatio","spanProcessors","_getSpanSessionIdProcessor","register","propagator","instrumentations","_registerGlobalErrorHandlers","onStart","span","setAttribute","Date","now","onEnd","shutdown","Promise","resolve","forceFlush","start","Error","stop","setApiKey","captureException","error","errorInfo","activeSpan","getSpan","active","_recordException","_ignored","tracer","getTracer","startSpan","name","end","recordException","setStatus","code","ERROR","message","stack","Object","entries","forEach","key","value","ErrorUtilsRef","global","ErrorUtils","setGlobalHandler","previous","getGlobalHandler","isFatal","err","String","_e"],"sourceRoot":"../../../src","sources":["otel/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,6 +22,7 @@ export declare class TracerReactNativeSDK {
|
|
|
22
22
|
* Otherwise, a short-lived span will be created to hold the exception event.
|
|
23
23
|
*/
|
|
24
24
|
captureException(error: Error, errorInfo?: Record<string, any>): void;
|
|
25
|
+
private _recordException;
|
|
25
26
|
private _registerGlobalErrorHandlers;
|
|
26
27
|
}
|
|
27
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/otel/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAKZ,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/otel/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAKZ,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAQxD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAAC,CAA0B;IAEzC,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAAC,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,CAAM;IACvB,OAAO,CAAC,4BAA4B,CAAS;;IAI7C,OAAO,CAAC,aAAa;IAQrB,IAAI,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IA0C5C,OAAO,CAAC,0BAA0B;IAgBlC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAUxD,IAAI,IAAI,IAAI;IAUZ,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAU/B,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAK/D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAoBrE,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,4BAA4B;CAqBrC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplayer-app/session-recorder-react-native",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.15",
|
|
4
4
|
"description": "Multiplayer Fullstack Session Recorder for React Native",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Multiplayer Software, Inc.",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"typescript": "^5.9.2"
|
|
108
108
|
},
|
|
109
109
|
"dependencies": {
|
|
110
|
-
"@multiplayer-app/session-recorder-common": "1.3.
|
|
110
|
+
"@multiplayer-app/session-recorder-common": "1.3.15",
|
|
111
111
|
"@opentelemetry/core": "2.0.1",
|
|
112
112
|
"@opentelemetry/exporter-trace-otlp-http": "0.203.0",
|
|
113
113
|
"@opentelemetry/instrumentation": "0.203.0",
|
package/src/otel/index.ts
CHANGED
|
@@ -13,8 +13,7 @@ import {
|
|
|
13
13
|
import { type TracerReactNativeConfig } from '../types';
|
|
14
14
|
import { getInstrumentations } from './instrumentations';
|
|
15
15
|
import { getExporterEndpoint } from './helpers';
|
|
16
|
-
import {
|
|
17
|
-
import { trace, SpanStatusCode, context } from '@opentelemetry/api';
|
|
16
|
+
import { trace, SpanStatusCode, context, type Span } from '@opentelemetry/api';
|
|
18
17
|
|
|
19
18
|
import { getPlatformAttributes } from '../utils/platform';
|
|
20
19
|
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
@@ -142,20 +141,11 @@ export class TracerReactNativeSDK {
|
|
|
142
141
|
*/
|
|
143
142
|
captureException(error: Error, errorInfo?: Record<string, any>): void {
|
|
144
143
|
if (!error) return;
|
|
145
|
-
|
|
146
|
-
|
|
147
144
|
// Prefer attaching to the active span to keep correlation intact
|
|
148
145
|
try {
|
|
149
146
|
const activeSpan = trace.getSpan(context.active())
|
|
150
147
|
if (activeSpan) {
|
|
151
|
-
|
|
152
|
-
SessionRecorderSdk.captureException(error)
|
|
153
|
-
activeSpan.addEvent('exception', {
|
|
154
|
-
'exception.type': error.name || 'Error',
|
|
155
|
-
'exception.message': error.message,
|
|
156
|
-
'exception.stacktrace': error.stack || '',
|
|
157
|
-
...(errorInfo || {}),
|
|
158
|
-
})
|
|
148
|
+
this._recordException(activeSpan, error, errorInfo)
|
|
159
149
|
return
|
|
160
150
|
}
|
|
161
151
|
} catch (_ignored) { }
|
|
@@ -164,18 +154,24 @@ export class TracerReactNativeSDK {
|
|
|
164
154
|
try {
|
|
165
155
|
const tracer = trace.getTracer('exception')
|
|
166
156
|
const span = tracer.startSpan(error.name || 'Error')
|
|
167
|
-
|
|
168
|
-
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })
|
|
169
|
-
span.addEvent('exception', {
|
|
170
|
-
'exception.type': error.name || 'Error',
|
|
171
|
-
'exception.message': error.message,
|
|
172
|
-
'exception.stacktrace': error.stack || '',
|
|
173
|
-
...(errorInfo || {}),
|
|
174
|
-
})
|
|
157
|
+
this._recordException(span, error, errorInfo)
|
|
175
158
|
span.end()
|
|
176
159
|
} catch (_ignored) { }
|
|
177
160
|
}
|
|
178
161
|
|
|
162
|
+
private _recordException(span: Span, error: Error, errorInfo?: Record<string, any>): void {
|
|
163
|
+
span.recordException(error)
|
|
164
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })
|
|
165
|
+
span.setAttribute('exception.type', error.name || 'Error')
|
|
166
|
+
span.setAttribute('exception.message', error.message)
|
|
167
|
+
span.setAttribute('exception.stacktrace', error.stack || '')
|
|
168
|
+
if (errorInfo) {
|
|
169
|
+
Object.entries(errorInfo).forEach(([key, value]) => {
|
|
170
|
+
span.setAttribute(`error_info.${key}`, value)
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
179
175
|
private _registerGlobalErrorHandlers(): void {
|
|
180
176
|
if (this.globalErrorHandlerRegistered) return;
|
|
181
177
|
|