@multiplayer-app/session-recorder-react-native 1.3.12 → 1.3.14

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.
@@ -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
- // Standard OTEL exception event + span status
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
- span.recordException(error);
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","SessionRecorderSdk","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","addEvent","name","message","stack","_ignored","tracer","getTracer","startSpan","recordException","setStatus","code","ERROR","end","ErrorUtilsRef","global","ErrorUtils","setGlobalHandler","previous","getGlobalHandler","isFatal","err","String","_e"],"sourceRoot":"../../../src","sources":["otel/index.ts"],"mappings":"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","ignoreList":[]}
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;AASxD,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;IAoCrE,OAAO,CAAC,4BAA4B;CAqBrC"}
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.12",
3
+ "version": "1.3.14",
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.12",
110
+ "@multiplayer-app/session-recorder-common": "1.3.14",
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 { SessionRecorderSdk } from '@multiplayer-app/session-recorder-common';
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
- // Standard OTEL exception event + span status
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
- span.recordException(error)
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