@multiplayer-app/session-recorder-react-native 1.3.23 → 1.3.32
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/README.md +22 -13
- package/lib/module/config/defaults.js +2 -2
- package/lib/module/config/defaults.js.map +1 -1
- package/lib/module/config/session-recorder.js.map +1 -1
- package/lib/module/otel/CrashBufferSpanProcessor.js +14 -13
- package/lib/module/otel/CrashBufferSpanProcessor.js.map +1 -1
- package/lib/module/otel/index.js +85 -59
- package/lib/module/otel/index.js.map +1 -1
- package/lib/module/recorder/index.js +1 -1
- package/lib/module/recorder/index.js.map +1 -1
- package/lib/module/services/api.service.js.map +1 -1
- package/lib/module/services/crashBuffer.service.js +51 -19
- package/lib/module/services/crashBuffer.service.js.map +1 -1
- package/lib/module/services/socket.service.js +2 -2
- package/lib/module/services/socket.service.js.map +1 -1
- package/lib/module/session-recorder.js +29 -78
- package/lib/module/session-recorder.js.map +1 -1
- package/lib/module/types/session-recorder.js.map +1 -1
- package/lib/module/utils/rrweb-events.js +1 -1
- package/lib/module/utils/rrweb-events.js.map +1 -1
- package/lib/typescript/src/config/defaults.d.ts.map +1 -1
- package/lib/typescript/src/config/session-recorder.d.ts.map +1 -1
- package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts +3 -4
- package/lib/typescript/src/otel/CrashBufferSpanProcessor.d.ts.map +1 -1
- package/lib/typescript/src/otel/index.d.ts +2 -3
- package/lib/typescript/src/otel/index.d.ts.map +1 -1
- package/lib/typescript/src/services/api.service.d.ts +2 -1
- package/lib/typescript/src/services/api.service.d.ts.map +1 -1
- package/lib/typescript/src/services/crashBuffer.service.d.ts +4 -23
- package/lib/typescript/src/services/crashBuffer.service.d.ts.map +1 -1
- package/lib/typescript/src/services/socket.service.d.ts +4 -1
- package/lib/typescript/src/services/socket.service.d.ts.map +1 -1
- package/lib/typescript/src/session-recorder.d.ts +0 -3
- package/lib/typescript/src/session-recorder.d.ts.map +1 -1
- package/lib/typescript/src/types/session-recorder.d.ts +6 -13
- package/lib/typescript/src/types/session-recorder.d.ts.map +1 -1
- package/lib/typescript/src/utils/rrweb-events.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/config/defaults.ts +29 -29
- package/src/config/session-recorder.ts +8 -2
- package/src/otel/CrashBufferSpanProcessor.ts +17 -24
- package/src/otel/index.ts +110 -61
- package/src/recorder/index.ts +1 -1
- package/src/services/api.service.ts +2 -1
- package/src/services/crashBuffer.service.ts +73 -31
- package/src/services/socket.service.ts +5 -2
- package/src/session-recorder.ts +43 -98
- package/src/types/session-recorder.ts +15 -18
- package/src/utils/rrweb-events.ts +3 -3
package/README.md
CHANGED
|
@@ -801,19 +801,22 @@ This is different from system-wide screen recording which would require permissi
|
|
|
801
801
|
|
|
802
802
|
### Optional Options
|
|
803
803
|
|
|
804
|
-
| Option | Type | Default
|
|
805
|
-
| ------------------------------ | ------- |
|
|
806
|
-
| `recordGestures` | boolean | true
|
|
807
|
-
| `recordNavigation` | boolean | true
|
|
808
|
-
| `recordScreen` | boolean | true
|
|
809
|
-
| `sampleTraceRatio` | number | 0.15
|
|
810
|
-
| `
|
|
811
|
-
| `
|
|
812
|
-
| `
|
|
813
|
-
| `
|
|
814
|
-
| `
|
|
815
|
-
| `
|
|
816
|
-
| `
|
|
804
|
+
| Option | Type | Default | Description |
|
|
805
|
+
| ------------------------------ | ------- | --------- | --------------------------------------------------------- |
|
|
806
|
+
| `recordGestures` | boolean | true | Enable gesture recording |
|
|
807
|
+
| `recordNavigation` | boolean | true | Enable navigation tracking |
|
|
808
|
+
| `recordScreen` | boolean | true | Enable screen recording |
|
|
809
|
+
| `sampleTraceRatio` | number | 0.15 | Trace sampling ratio (0.0-1.0) |
|
|
810
|
+
| `buffering` | object | see below | Crash buffer (rolling window when no recording is active) |
|
|
811
|
+
| `captureBody` | boolean | true | Capture request/response bodies |
|
|
812
|
+
| `captureHeaders` | boolean | true | Capture request/response headers |
|
|
813
|
+
| `masking` | object | - | Data masking configuration |
|
|
814
|
+
| `ignoreUrls` | array | [] | URLs to exclude from monitoring |
|
|
815
|
+
| `propagateTraceHeaderCorsUrls` | array | [] | URLs for CORS trace header propagation |
|
|
816
|
+
| `showContinuousRecording` | boolean | true | Show continuous recording option |
|
|
817
|
+
| `widget` | object | - | Session widget configuration |
|
|
818
|
+
|
|
819
|
+
**Buffering** (`buffering.enabled: false`, `buffering.windowMinutes: 0.5` by default): when enabled, the SDK keeps a rolling window of recent events and traces even when no recording is active. The buffer is flushed into the session when the user starts a session or saves (e.g. on error).
|
|
817
820
|
|
|
818
821
|
## Advanced Configuration
|
|
819
822
|
|
|
@@ -832,6 +835,12 @@ SessionRecorder.init({
|
|
|
832
835
|
recordNavigation: true,
|
|
833
836
|
recordScreen: true, // Captures app UI automatically
|
|
834
837
|
|
|
838
|
+
// Crash buffer: rolling window when no recording is active (flushed when session starts/saves)
|
|
839
|
+
buffering: {
|
|
840
|
+
enabled: true,
|
|
841
|
+
windowMinutes: 1, // default: 1
|
|
842
|
+
},
|
|
843
|
+
|
|
835
844
|
// Network monitoring
|
|
836
845
|
// NOTE: if frontend domain doesn't match to backend one, set backend domain to `propagateTraceHeaderCorsUrls` parameter
|
|
837
846
|
propagateTraceHeaderCorsUrls: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SessionRecorderSdk","MULTIPLAYER_BASE_API_URL","MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL","LogLevel","WidgetButtonPlacement","OTEL_MP_SAMPLE_TRACE_RATIO","DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE","mask","sensitiveFields","sensitiveHeaders","DEFAULT_MASKING_CONFIG","isContentMaskingEnabled","maskBody","maskHeaders","maskBodyFieldsList","maskHeadersList","headersToInclude","headersToExclude","maskImages","maskLabels","maskButtons","maskWebViews","maskTextInputs","maskSandboxedViews","DEFAULT_WIDGET_TEXT_CONFIG","initialTitleWithContinuous","initialTitleWithoutContinuous","initialDescriptionWithContinuous","initialDescriptionWithoutContinuous","continuousRecordingLabel","startRecordingButtonText","finalTitle","finalDescription","commentPlaceholder","saveButtonText","cancelButtonText","continuousOverlayTitle","continuousOverlayDescription","saveLastSnapshotButtonText","submitDialogTitle","submitDialogSubtitle","submitDialogCommentLabel","submitDialogCommentPlaceholder","submitDialogSubmitText","submitDialogCancelText","BASE_CONFIG","apiKey","version","application","environment","showContinuousRecording","widget","enabled","button","visible","placement","bottomRight","textOverrides","apiBaseUrl","exporterEndpoint","schemifyDocSpanPayload","ignoreUrls","propagateTraceHeaderCorsUrls","sampleTraceRatio","maxCapturingHttpPayloadSize","captureBody","captureHeaders","masking","recordScreen","recordGestures","recordNavigation","logger","level","INFO","useWebsocket","buffering","windowMinutes"],"sourceRoot":"../../../src","sources":["config/defaults.ts"],"mappings":";;AAAA,SACEA,kBAAkB,EAClBC,wBAAwB,EACxBC,iDAAiD,QAC5C,0CAA0C;AACjD,SACEC,QAAQ,EACRC,qBAAqB,QAEhB,mBAAU;AACjB,SACEC,0BAA0B,EAC1BC,uCAAuC,QAClC,gBAAa;AAEpB,MAAM;EAAEC,IAAI;EAAEC,eAAe;EAAEC;AAAiB,CAAC,GAAGT,kBAAkB;AAEtE,OAAO,MAAMU,sBAAyD,GAAG;EACvEC,uBAAuB,EAAE,IAAI;EAC7BC,QAAQ,EAAEL,IAAI,CAACC,eAAe,CAAC;EAC/BK,WAAW,EAAEN,IAAI,CAACE,gBAAgB,CAAC;EACnCK,kBAAkB,EAAEN,eAAe;EACnCO,eAAe,EAAEN,gBAAgB;EACjCO,gBAAgB,EAAE,EAAE;EACpBC,gBAAgB,EAAE,EAAE;EACpB;EACAC,UAAU,EAAE,KAAK;EACjBC,UAAU,EAAE,KAAK;EACjBC,WAAW,EAAE,KAAK;EAClBC,YAAY,EAAE,KAAK;EACnBC,cAAc,EAAE,KAAK;EACrBC,kBAAkB,EAAE;AACtB,CAAC;AAED,OAAO,MAAMC,0BAA6E,
|
|
1
|
+
{"version":3,"names":["SessionRecorderSdk","MULTIPLAYER_BASE_API_URL","MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL","LogLevel","WidgetButtonPlacement","OTEL_MP_SAMPLE_TRACE_RATIO","DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE","mask","sensitiveFields","sensitiveHeaders","DEFAULT_MASKING_CONFIG","isContentMaskingEnabled","maskBody","maskHeaders","maskBodyFieldsList","maskHeadersList","headersToInclude","headersToExclude","maskImages","maskLabels","maskButtons","maskWebViews","maskTextInputs","maskSandboxedViews","DEFAULT_WIDGET_TEXT_CONFIG","initialTitleWithContinuous","initialTitleWithoutContinuous","initialDescriptionWithContinuous","initialDescriptionWithoutContinuous","continuousRecordingLabel","startRecordingButtonText","finalTitle","finalDescription","commentPlaceholder","saveButtonText","cancelButtonText","continuousOverlayTitle","continuousOverlayDescription","saveLastSnapshotButtonText","submitDialogTitle","submitDialogSubtitle","submitDialogCommentLabel","submitDialogCommentPlaceholder","submitDialogSubmitText","submitDialogCancelText","BASE_CONFIG","apiKey","version","application","environment","showContinuousRecording","widget","enabled","button","visible","placement","bottomRight","textOverrides","apiBaseUrl","exporterEndpoint","schemifyDocSpanPayload","ignoreUrls","propagateTraceHeaderCorsUrls","sampleTraceRatio","maxCapturingHttpPayloadSize","captureBody","captureHeaders","masking","recordScreen","recordGestures","recordNavigation","logger","level","INFO","useWebsocket","buffering","windowMinutes"],"sourceRoot":"../../../src","sources":["config/defaults.ts"],"mappings":";;AAAA,SACEA,kBAAkB,EAClBC,wBAAwB,EACxBC,iDAAiD,QAC5C,0CAA0C;AACjD,SACEC,QAAQ,EACRC,qBAAqB,QAEhB,mBAAU;AACjB,SACEC,0BAA0B,EAC1BC,uCAAuC,QAClC,gBAAa;AAEpB,MAAM;EAAEC,IAAI;EAAEC,eAAe;EAAEC;AAAiB,CAAC,GAAGT,kBAAkB;AAEtE,OAAO,MAAMU,sBAAyD,GAAG;EACvEC,uBAAuB,EAAE,IAAI;EAC7BC,QAAQ,EAAEL,IAAI,CAACC,eAAe,CAAC;EAC/BK,WAAW,EAAEN,IAAI,CAACE,gBAAgB,CAAC;EACnCK,kBAAkB,EAAEN,eAAe;EACnCO,eAAe,EAAEN,gBAAgB;EACjCO,gBAAgB,EAAE,EAAE;EACpBC,gBAAgB,EAAE,EAAE;EACpB;EACAC,UAAU,EAAE,KAAK;EACjBC,UAAU,EAAE,KAAK;EACjBC,WAAW,EAAE,KAAK;EAClBC,YAAY,EAAE,KAAK;EACnBC,cAAc,EAAE,KAAK;EACrBC,kBAAkB,EAAE;AACtB,CAAC;AAED,OAAO,MAAMC,0BAA6E,GACxF;EACEC,0BAA0B,EAAE,uBAAuB;EACnDC,6BAA6B,EAAE,uBAAuB;EACtDC,gCAAgC,EAC9B,kEAAkE;EACpEC,mCAAmC,EACjC,kEAAkE;EACpEC,wBAAwB,EAAE,sBAAsB;EAChDC,wBAAwB,EAAE,iBAAiB;EAC3CC,UAAU,EAAE,iBAAiB;EAC7BC,gBAAgB,EACd,0FAA0F;EAC5FC,kBAAkB,EAAE,kBAAkB;EACtCC,cAAc,EAAE,kBAAkB;EAClCC,gBAAgB,EAAE,kBAAkB;EACpCC,sBAAsB,EAAE,mCAAmC;EAC3DC,4BAA4B,EAC1B,mOAAmO;EACrOC,0BAA0B,EAAE,gBAAgB;EAC5CC,iBAAiB,EAAE,gBAAgB;EACnCC,oBAAoB,EAClB,iJAAiJ;EACnJC,wBAAwB,EAAE,+CAA+C;EACzEC,8BAA8B,EAAE,kBAAkB;EAClDC,sBAAsB,EAAE,MAAM;EAC9BC,sBAAsB,EAAE;AAC1B,CAAC;AAEH,OAAO,MAAMC,WAAmC,GAAG;EACjDC,MAAM,EAAE,EAAE;EAEVC,OAAO,EAAE,EAAE;EACXC,WAAW,EAAE,EAAE;EACfC,WAAW,EAAE,EAAE;EAEfC,uBAAuB,EAAE,IAAI;EAE7BC,MAAM,EAAE;IACNC,OAAO,EAAE,IAAI;IACbC,MAAM,EAAE;MACNC,OAAO,EAAE,IAAI;MACbC,SAAS,EAAEnD,qBAAqB,CAACoD;IACnC,CAAC;IACDC,aAAa,EAAEjC;EACjB,CAAC;EAEDkC,UAAU,EAAEzD,wBAAwB;EACpC0D,gBAAgB,EAAEzD,iDAAiD;EAEnE0D,sBAAsB,EAAE,IAAI;EAE5BC,UAAU,EAAE,EAAE;EACdC,4BAA4B,EAAE,EAAE;EAEhCC,gBAAgB,EAAE1D,0BAA0B;EAC5C2D,2BAA2B,EAAE1D,uCAAuC;EAEpE2D,WAAW,EAAE,IAAI;EACjBC,cAAc,EAAE,IAAI;EACpBC,OAAO,EAAEzD,sBAAsB;EAE/B0D,YAAY,EAAE,IAAI;EAClBC,cAAc,EAAE,IAAI;EACpBC,gBAAgB,EAAE,IAAI;EAEtBC,MAAM,EAAE;IACNnB,OAAO,EAAE,KAAK;IACdoB,KAAK,EAAErE,QAAQ,CAACsE;EAClB,CAAC;EAEDC,YAAY,EAAE,IAAI;EAElBC,SAAS,EAAE;IACTvB,OAAO,EAAE,KAAK;IACdwB,aAAa,EAAE;EACjB;AACF,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LogLevel","BASE_CONFIG","getMaskingConfig","isValidString","isValidNumber","isValidBoolean","isValidArray","getWidgetConfig","getLoggerConfig","config","logger","level","INFO","enabled","getSessionRecorderConfig","c","apiKey","version","application","environment","exporterEndpoint","apiBaseUrl","showContinuousRecording","ignoreUrls","sampleTraceRatio","propagateTraceHeaderCorsUrls","schemifyDocSpanPayload","maxCapturingHttpPayloadSize","captureBody","captureHeaders","recordScreen","recordGestures","recordNavigation","masking","widget","useWebsocket","buffering","windowMinutes"],"sourceRoot":"../../../src","sources":["config/session-recorder.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["LogLevel","BASE_CONFIG","getMaskingConfig","isValidString","isValidNumber","isValidBoolean","isValidArray","getWidgetConfig","getLoggerConfig","config","logger","level","INFO","enabled","getSessionRecorderConfig","c","apiKey","version","application","environment","exporterEndpoint","apiBaseUrl","showContinuousRecording","ignoreUrls","sampleTraceRatio","propagateTraceHeaderCorsUrls","schemifyDocSpanPayload","maxCapturingHttpPayloadSize","captureBody","captureHeaders","recordScreen","recordGestures","recordNavigation","masking","widget","useWebsocket","buffering","windowMinutes"],"sourceRoot":"../../../src","sources":["config/session-recorder.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX
|
|
4
|
-
import { TraceFlags } from '@opentelemetry/api';
|
|
3
|
+
import { MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX } from '@multiplayer-app/session-recorder-common';
|
|
5
4
|
/**
|
|
6
5
|
* Implementation of the {@link SpanProcessor} that batches spans exported by
|
|
7
6
|
* the SDK then pushes them to the exporter pipeline.
|
|
8
7
|
*/
|
|
9
8
|
export class CrashBufferSpanProcessor {
|
|
10
|
-
constructor(
|
|
11
|
-
this._exporter = _exporter;
|
|
9
|
+
constructor(_crashBuffer, _serializeSpan) {
|
|
12
10
|
this._crashBuffer = _crashBuffer;
|
|
13
11
|
this._serializeSpan = _serializeSpan;
|
|
14
12
|
}
|
|
15
13
|
forceFlush() {
|
|
16
|
-
return
|
|
14
|
+
return Promise.resolve();
|
|
17
15
|
}
|
|
18
16
|
onStart(_span, _parentContext) {
|
|
19
|
-
return
|
|
17
|
+
return;
|
|
20
18
|
}
|
|
21
19
|
onEnd(span) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (
|
|
20
|
+
const _spanContext = span.spanContext();
|
|
21
|
+
const traceId = _spanContext.traceId;
|
|
22
|
+
|
|
23
|
+
// // Never buffer/export unsampled spans.
|
|
24
|
+
// if ((_spanContext.traceFlags & TraceFlags.SAMPLED) === 0) {
|
|
25
|
+
// return
|
|
26
|
+
// }
|
|
27
|
+
|
|
28
|
+
if (traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)) {
|
|
27
29
|
if (this._crashBuffer) {
|
|
28
30
|
this._crashBuffer.appendSpans([{
|
|
29
31
|
ts: span.startTime[0] * 1000 + span.startTime[1] / 1000000,
|
|
@@ -32,10 +34,9 @@ export class CrashBufferSpanProcessor {
|
|
|
32
34
|
}
|
|
33
35
|
return;
|
|
34
36
|
}
|
|
35
|
-
this._exporter.onEnd(span);
|
|
36
37
|
}
|
|
37
38
|
shutdown() {
|
|
38
|
-
return
|
|
39
|
+
return Promise.resolve();
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
//# sourceMappingURL=CrashBufferSpanProcessor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX","
|
|
1
|
+
{"version":3,"names":["MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX","CrashBufferSpanProcessor","constructor","_crashBuffer","_serializeSpan","forceFlush","Promise","resolve","onStart","_span","_parentContext","onEnd","span","_spanContext","spanContext","traceId","startsWith","appendSpans","ts","startTime","shutdown"],"sourceRoot":"../../../src","sources":["otel/CrashBufferSpanProcessor.ts"],"mappings":";;AAMA,SAASA,sCAAsC,QAAQ,0CAA0C;AAGjG;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,CAA0B;EAC7DC,WAAWA,CACQC,YAAqC,EACrCC,cAA2C,EAC5D;IAAA,KAFiBD,YAAqC,GAArCA,YAAqC;IAAA,KACrCC,cAA2C,GAA3CA,cAA2C;EAC3D;EAEHC,UAAUA,CAAA,EAAkB;IAC1B,OAAOC,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;EAEAC,OAAOA,CAACC,KAAW,EAAEC,cAAuB,EAAQ;IAClD;EACF;EAEAC,KAAKA,CAACC,IAAkB,EAAQ;IAC9B,MAAMC,YAAY,GAAGD,IAAI,CAACE,WAAW,CAAC,CAAC;IAEvC,MAAMC,OAAO,GAAGF,YAAY,CAACE,OAAO;;IAEpC;IACA;IACA;IACA;;IAEA,IAAIA,OAAO,CAACC,UAAU,CAAChB,sCAAsC,CAAC,EAAE;MAC9D,IAAI,IAAI,CAACG,YAAY,EAAE;QACrB,IAAI,CAACA,YAAY,CAACc,WAAW,CAAC,CAC5B;UACEC,EAAE,EAAEN,IAAI,CAACO,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAGP,IAAI,CAACO,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO;UAC1DP,IAAI,EAAE,IAAI,CAACR,cAAc,CAACQ,IAAI;QAChC,CAAC,CACF,CAAC;MACJ;MACA;IACF;EACF;EAEAQ,QAAQA,CAAA,EAAkB;IACxB,OAAOd,OAAO,CAACC,OAAO,CAAC,CAAC;EAC1B;AACF","ignoreList":[]}
|
package/lib/module/otel/index.js
CHANGED
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
4
4
|
import { W3CTraceContextPropagator } from '@opentelemetry/core';
|
|
5
|
-
import {
|
|
5
|
+
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
6
6
|
import * as SemanticAttributes from '@opentelemetry/semantic-conventions';
|
|
7
7
|
import { registerInstrumentations } from '@opentelemetry/instrumentation';
|
|
8
|
-
import { SessionType, SessionRecorderSdk, SessionRecorderIdGenerator, SessionRecorderBrowserTraceExporter, ATTR_MULTIPLAYER_SESSION_ID, MULTIPLAYER_TRACE_CLIENT_ID_LENGTH } from '@multiplayer-app/session-recorder-common';
|
|
8
|
+
import { SessionType, SessionRecorderSdk, SessionRecorderIdGenerator, SessionRecorderBrowserTraceExporter, ATTR_MULTIPLAYER_SESSION_ID, MULTIPLAYER_TRACE_CLIENT_ID_LENGTH, SessionRecorderTraceIdRatioBasedSampler } from '@multiplayer-app/session-recorder-common';
|
|
9
9
|
import { getInstrumentations } from "./instrumentations/index.js";
|
|
10
10
|
import { getExporterEndpoint } from "./helpers.js";
|
|
11
|
-
import { trace, SpanStatusCode, context } from '@opentelemetry/api';
|
|
12
11
|
import { getPlatformAttributes } from "../utils/platform.js";
|
|
13
12
|
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
14
13
|
import { CrashBufferSpanProcessor } from "./CrashBufferSpanProcessor.js";
|
|
@@ -39,17 +38,18 @@ export class TracerReactNativeSDK {
|
|
|
39
38
|
apiKey: options.apiKey,
|
|
40
39
|
url: getExporterEndpoint(options.exporterEndpoint)
|
|
41
40
|
});
|
|
42
|
-
|
|
41
|
+
const resourceAttributes = resourceFromAttributes({
|
|
42
|
+
[SemanticAttributes.SEMRESATTRS_SERVICE_NAME]: application,
|
|
43
|
+
[SemanticAttributes.SEMRESATTRS_SERVICE_VERSION]: version,
|
|
44
|
+
[SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
|
|
45
|
+
...getPlatformAttributes()
|
|
46
|
+
});
|
|
47
|
+
SessionRecorderSdk.setResourceAttributes(resourceAttributes.attributes);
|
|
43
48
|
this.tracerProvider = new WebTracerProvider({
|
|
44
|
-
resource:
|
|
45
|
-
[SemanticAttributes.SEMRESATTRS_SERVICE_NAME]: application,
|
|
46
|
-
[SemanticAttributes.SEMRESATTRS_SERVICE_VERSION]: version,
|
|
47
|
-
[SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
|
|
48
|
-
...getPlatformAttributes()
|
|
49
|
-
}),
|
|
49
|
+
resource: resourceAttributes,
|
|
50
50
|
idGenerator: this.idGenerator,
|
|
51
|
-
sampler: new
|
|
52
|
-
spanProcessors: [this._getSpanSessionIdProcessor(), new
|
|
51
|
+
sampler: new SessionRecorderTraceIdRatioBasedSampler(this.config.sampleTraceRatio),
|
|
52
|
+
spanProcessors: [this._getSpanSessionIdProcessor(), new BatchSpanProcessor(this.exporter), new CrashBufferSpanProcessor(this.crashBuffer, this.exporter.serializeSpan)]
|
|
53
53
|
});
|
|
54
54
|
this.tracerProvider.register({
|
|
55
55
|
propagator: new W3CTraceContextPropagator()
|
|
@@ -69,25 +69,18 @@ export class TracerReactNativeSDK {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
async exportTraces(spans) {
|
|
72
|
-
if (this.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
if (!this.exporter) {
|
|
73
|
+
throw new Error('Trace exporter not initialized');
|
|
74
|
+
}
|
|
75
|
+
if (!spans || spans.length === 0) {
|
|
76
76
|
return Promise.resolve();
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
span.setAttribute(ATTR_MULTIPLAYER_SESSION_ID, this.sessionId);
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
onEnd: () => {},
|
|
88
|
-
shutdown: () => Promise.resolve(),
|
|
89
|
-
forceFlush: () => Promise.resolve()
|
|
90
|
-
};
|
|
78
|
+
const readableSpans = spans.map(s => TracerReactNativeSDK._toReadableSpanLike(s));
|
|
79
|
+
return new Promise(resolve => {
|
|
80
|
+
this.exporter?.exportBuffer(readableSpans, result => {
|
|
81
|
+
resolve(result);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
91
84
|
}
|
|
92
85
|
start(sessionId, sessionType) {
|
|
93
86
|
if (!this.tracerProvider) {
|
|
@@ -115,37 +108,19 @@ export class TracerReactNativeSDK {
|
|
|
115
108
|
*/
|
|
116
109
|
captureException(error, errorInfo) {
|
|
117
110
|
if (!error) return;
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
const activeSpan = trace.getSpan(context.active());
|
|
121
|
-
if (activeSpan) {
|
|
122
|
-
this._recordException(activeSpan, error, errorInfo);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
} catch (_ignored) {}
|
|
126
|
-
|
|
127
|
-
// Fallback: create a short-lived span to hold the exception details
|
|
128
|
-
try {
|
|
129
|
-
const tracer = trace.getTracer('exception');
|
|
130
|
-
const span = tracer.startSpan(error.name || 'Error');
|
|
131
|
-
this._recordException(span, error, errorInfo);
|
|
132
|
-
span.end();
|
|
133
|
-
} catch (_ignored) {}
|
|
111
|
+
SessionRecorderSdk.captureException(error, errorInfo);
|
|
134
112
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
span.setAttribute(`error_info.${key}`, value);
|
|
147
|
-
});
|
|
148
|
-
}
|
|
113
|
+
_getSpanSessionIdProcessor() {
|
|
114
|
+
return {
|
|
115
|
+
onStart: span => {
|
|
116
|
+
if (this.sessionId) {
|
|
117
|
+
span.setAttribute(ATTR_MULTIPLAYER_SESSION_ID, this.sessionId);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
onEnd: () => {},
|
|
121
|
+
shutdown: () => Promise.resolve(),
|
|
122
|
+
forceFlush: () => Promise.resolve()
|
|
123
|
+
};
|
|
149
124
|
}
|
|
150
125
|
_registerGlobalErrorHandlers() {
|
|
151
126
|
if (this.globalErrorHandlerRegistered) return;
|
|
@@ -172,5 +147,56 @@ export class TracerReactNativeSDK {
|
|
|
172
147
|
this.globalErrorHandlerRegistered = true;
|
|
173
148
|
}
|
|
174
149
|
}
|
|
150
|
+
static _toReadableSpanLike(span) {
|
|
151
|
+
if (span && typeof span.spanContext === 'function' && span.instrumentationScope) {
|
|
152
|
+
return span;
|
|
153
|
+
}
|
|
154
|
+
const spanContext = typeof span?.spanContext === 'function' ? span.spanContext() : span?._spanContext;
|
|
155
|
+
const normalizedCtx = spanContext || {
|
|
156
|
+
traceId: span?.traceId,
|
|
157
|
+
spanId: span?.spanId,
|
|
158
|
+
traceFlags: span?.traceFlags,
|
|
159
|
+
traceState: span?.traceState
|
|
160
|
+
};
|
|
161
|
+
const instrumentationScope = span?.instrumentationScope || span?.instrumentationLibrary || {
|
|
162
|
+
name: 'multiplayer-buffer',
|
|
163
|
+
version: undefined,
|
|
164
|
+
schemaUrl: undefined
|
|
165
|
+
};
|
|
166
|
+
const normalizedScope = {
|
|
167
|
+
name: instrumentationScope?.name || 'multiplayer-buffer',
|
|
168
|
+
version: instrumentationScope?.version,
|
|
169
|
+
schemaUrl: instrumentationScope?.schemaUrl
|
|
170
|
+
};
|
|
171
|
+
const resource = span?.resource || {
|
|
172
|
+
attributes: {},
|
|
173
|
+
asyncAttributesPending: false
|
|
174
|
+
};
|
|
175
|
+
const parentSpanId = span?.parentSpanId;
|
|
176
|
+
return {
|
|
177
|
+
name: span?.name || '',
|
|
178
|
+
kind: span?.kind,
|
|
179
|
+
spanContext: () => normalizedCtx,
|
|
180
|
+
parentSpanContext: parentSpanId ? {
|
|
181
|
+
traceId: normalizedCtx?.traceId,
|
|
182
|
+
spanId: parentSpanId,
|
|
183
|
+
traceFlags: normalizedCtx?.traceFlags,
|
|
184
|
+
traceState: normalizedCtx?.traceState
|
|
185
|
+
} : undefined,
|
|
186
|
+
startTime: span?.startTime,
|
|
187
|
+
endTime: span?.endTime ?? span?.startTime,
|
|
188
|
+
duration: span?.duration,
|
|
189
|
+
status: span?.status,
|
|
190
|
+
attributes: span?.attributes || {},
|
|
191
|
+
links: span?.links || [],
|
|
192
|
+
events: span?.events || [],
|
|
193
|
+
ended: typeof span?.ended === 'boolean' ? span.ended : true,
|
|
194
|
+
droppedAttributesCount: span?.droppedAttributesCount || 0,
|
|
195
|
+
droppedEventsCount: span?.droppedEventsCount || 0,
|
|
196
|
+
droppedLinksCount: span?.droppedLinksCount || 0,
|
|
197
|
+
resource,
|
|
198
|
+
instrumentationScope: normalizedScope
|
|
199
|
+
};
|
|
200
|
+
}
|
|
175
201
|
}
|
|
176
202
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["resourceFromAttributes","W3CTraceContextPropagator","
|
|
1
|
+
{"version":3,"names":["resourceFromAttributes","W3CTraceContextPropagator","BatchSpanProcessor","SemanticAttributes","registerInstrumentations","SessionType","SessionRecorderSdk","SessionRecorderIdGenerator","SessionRecorderBrowserTraceExporter","ATTR_MULTIPLAYER_SESSION_ID","MULTIPLAYER_TRACE_CLIENT_ID_LENGTH","SessionRecorderTraceIdRatioBasedSampler","getInstrumentations","getExporterEndpoint","getPlatformAttributes","WebTracerProvider","CrashBufferSpanProcessor","clientIdGenerator","getIdGenerator","TracerReactNativeSDK","clientId","sessionId","globalErrorHandlerRegistered","constructor","_setSessionId","sessionType","MANUAL","idGenerator","Error","setSessionId","init","options","config","application","version","environment","SESSION_CACHE","exporter","apiKey","url","exporterEndpoint","resourceAttributes","SEMRESATTRS_SERVICE_NAME","SEMRESATTRS_SERVICE_VERSION","SEMRESATTRS_DEPLOYMENT_ENVIRONMENT","setResourceAttributes","attributes","tracerProvider","resource","sampler","sampleTraceRatio","spanProcessors","_getSpanSessionIdProcessor","crashBuffer","serializeSpan","register","propagator","instrumentations","_registerGlobalErrorHandlers","setCrashBuffer","windowMs","Number","isFinite","setDefaultWindowMs","exportTraces","spans","length","Promise","resolve","readableSpans","map","s","_toReadableSpanLike","exportBuffer","result","start","stop","setApiKey","captureException","error","errorInfo","onStart","span","setAttribute","onEnd","shutdown","forceFlush","ErrorUtilsRef","global","ErrorUtils","setGlobalHandler","previous","getGlobalHandler","isFatal","err","String","message","_e","spanContext","instrumentationScope","_spanContext","normalizedCtx","traceId","spanId","traceFlags","traceState","instrumentationLibrary","name","undefined","schemaUrl","normalizedScope","asyncAttributesPending","parentSpanId","kind","parentSpanContext","startTime","endTime","duration","status","links","events","ended","droppedAttributesCount","droppedEventsCount","droppedLinksCount"],"sourceRoot":"../../../src","sources":["otel/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,7 +24,7 @@ export class RecorderReactNativeSDK {
|
|
|
24
24
|
this.socketService = socketService;
|
|
25
25
|
this.crashBuffer = crashBuffer;
|
|
26
26
|
this.bufferingEnabled = Boolean(buffering?.enabled);
|
|
27
|
-
this.bufferWindowMs = Math.max(10_000, buffering?.windowMs ||
|
|
27
|
+
this.bufferWindowMs = Math.max(10_000, buffering?.windowMs || 0.5 * 60 * 1000);
|
|
28
28
|
this.screenRecorder.init(config, this);
|
|
29
29
|
this.navigationTracker.init(config, this.screenRecorder);
|
|
30
30
|
this.gestureRecorder.init(config, this, this.screenRecorder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SessionType","logger","ScreenRecorder","GestureRecorder","NavigationTracker","RecorderReactNativeSDK","isRecording","recordedEvents","bufferingEnabled","bufferWindowMs","sessionId","sessionType","MANUAL","constructor","screenRecorder","gestureRecorder","navigationTracker","init","config","socketService","crashBuffer","buffering","Boolean","enabled","Math","max","windowMs","start","Error","recordScreen","recordGestures","recordNavigation","stop","close","setNavigationRef","ref","setViewShotRef","recordEvent","event","appendEvent","ts","timestamp","debug","send","eventType","type","debugSessionId","debugSessionType","recordTouchStart","x","y","target","pressure","recordTouchMove","recordTouchEnd","getRecordedEvents","clearRecordedEvents","getRecordingStats","totalEvents","length"],"sourceRoot":"../../../src","sources":["recorder/index.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE;;AAGA,SAASC,MAAM,QAAQ,mBAAU;AACjC,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,iBAAiB,QAAQ,wBAAqB;AAGvD,OAAO,MAAMC,sBAAsB,CAA0B;EACnDC,WAAW,GAAG,KAAK;EAKnBC,cAAc,GAAoB,EAAE;EAGpCC,gBAAgB,GAAY,KAAK;EACjCC,cAAc,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI;EACtCC,SAAS,GAAkB,IAAI;EAC/BC,WAAW,GAAgBX,WAAW,CAACY,MAAM;EAErDC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,cAAc,GAAG,IAAIZ,cAAc,CAAC,CAAC;IAC1C,IAAI,CAACa,eAAe,GAAG,IAAIZ,eAAe,CAAC,CAAC;IAC5C,IAAI,CAACa,iBAAiB,GAAG,IAAIZ,iBAAiB,CAAC,CAAC;EAClD;EAEAa,IAAIA,CACFC,MAAsB,EACtBC,aAA4B,EAC5BC,WAAgC,EAChCC,SAAkD,EAC5C;IACN,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACZ,gBAAgB,GAAGc,OAAO,CAACD,SAAS,EAAEE,OAAO,CAAC;IACnD,IAAI,CAACd,cAAc,GAAGe,IAAI,CAACC,GAAG,CAC5B,MAAM,EACNJ,SAAS,EAAEK,QAAQ,IAAI,
|
|
1
|
+
{"version":3,"names":["SessionType","logger","ScreenRecorder","GestureRecorder","NavigationTracker","RecorderReactNativeSDK","isRecording","recordedEvents","bufferingEnabled","bufferWindowMs","sessionId","sessionType","MANUAL","constructor","screenRecorder","gestureRecorder","navigationTracker","init","config","socketService","crashBuffer","buffering","Boolean","enabled","Math","max","windowMs","start","Error","recordScreen","recordGestures","recordNavigation","stop","close","setNavigationRef","ref","setViewShotRef","recordEvent","event","appendEvent","ts","timestamp","debug","send","eventType","type","debugSessionId","debugSessionType","recordTouchStart","x","y","target","pressure","recordTouchMove","recordTouchEnd","getRecordedEvents","clearRecordedEvents","getRecordingStats","totalEvents","length"],"sourceRoot":"../../../src","sources":["recorder/index.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,0CAA0C;AACtE;;AAGA,SAASC,MAAM,QAAQ,mBAAU;AACjC,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,eAAe,QAAQ,sBAAmB;AACnD,SAASC,iBAAiB,QAAQ,wBAAqB;AAGvD,OAAO,MAAMC,sBAAsB,CAA0B;EACnDC,WAAW,GAAG,KAAK;EAKnBC,cAAc,GAAoB,EAAE;EAGpCC,gBAAgB,GAAY,KAAK;EACjCC,cAAc,GAAW,CAAC,GAAG,EAAE,GAAG,IAAI;EACtCC,SAAS,GAAkB,IAAI;EAC/BC,WAAW,GAAgBX,WAAW,CAACY,MAAM;EAErDC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,cAAc,GAAG,IAAIZ,cAAc,CAAC,CAAC;IAC1C,IAAI,CAACa,eAAe,GAAG,IAAIZ,eAAe,CAAC,CAAC;IAC5C,IAAI,CAACa,iBAAiB,GAAG,IAAIZ,iBAAiB,CAAC,CAAC;EAClD;EAEAa,IAAIA,CACFC,MAAsB,EACtBC,aAA4B,EAC5BC,WAAgC,EAChCC,SAAkD,EAC5C;IACN,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACZ,gBAAgB,GAAGc,OAAO,CAACD,SAAS,EAAEE,OAAO,CAAC;IACnD,IAAI,CAACd,cAAc,GAAGe,IAAI,CAACC,GAAG,CAC5B,MAAM,EACNJ,SAAS,EAAEK,QAAQ,IAAI,GAAG,GAAG,EAAE,GAAG,IACpC,CAAC;IACD,IAAI,CAACZ,cAAc,CAACG,IAAI,CAACC,MAAM,EAAE,IAAI,CAAC;IACtC,IAAI,CAACF,iBAAiB,CAACC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACJ,cAAc,CAAC;IACxD,IAAI,CAACC,eAAe,CAACE,IAAI,CAACC,MAAM,EAAE,IAAI,EAAE,IAAI,CAACJ,cAAc,CAAC;EAC9D;EAEAa,KAAKA,CAACjB,SAAwB,EAAEC,WAAwB,EAAQ;IAC9D,IAAI,CAAC,IAAI,CAACO,MAAM,EAAE;MAChB,MAAM,IAAIU,KAAK,CACb,4DACF,CAAC;IACH;IAEA,IAAI,CAAClB,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACL,WAAW,GAAG,IAAI;;IAEvB;;IAEA,IAAI,IAAI,CAACY,MAAM,CAACW,YAAY,EAAE;MAC5B,IAAI,CAACf,cAAc,CAACa,KAAK,CAAC,CAAC;IAC7B;IAEA,IAAI,IAAI,CAACT,MAAM,CAACY,cAAc,EAAE;MAC9B,IAAI,CAACf,eAAe,CAACY,KAAK,CAAC,CAAC;IAC9B;IAEA,IAAI,IAAI,CAACT,MAAM,CAACa,gBAAgB,EAAE;MAChC,IAAI,CAACf,iBAAiB,CAACW,KAAK,CAAC,CAAC;IAChC;EACF;EAEAK,IAAIA,CAAA,EAAS;IACX,IAAI,CAAC1B,WAAW,GAAG,KAAK;IACxB,IAAI,CAACS,eAAe,CAACiB,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAChB,iBAAiB,CAACgB,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAClB,cAAc,CAACkB,IAAI,CAAC,CAAC;IAC1B,IAAI,CAACb,aAAa,EAAEc,KAAK,CAAC,CAAC;EAC7B;EAEAC,gBAAgBA,CAACC,GAAQ,EAAQ;IAC/B,IAAI,CAACnB,iBAAiB,CAACkB,gBAAgB,CAACC,GAAG,CAAC;EAC9C;;EAEA;AACF;AACA;AACA;EACEC,cAAcA,CAACD,GAAQ,EAAQ;IAC7B,IAAI,CAACrB,cAAc,CAACsB,cAAc,CAACD,GAAG,CAAC;EACzC;;EAEA;AACF;AACA;AACA;EACEE,WAAWA,CAACC,KAAoB,EAAQ;IACtC,IAAI,CAAC,IAAI,CAAChC,WAAW,EAAE;MACrB;IACF;;IAEA;IACA,IAAI,CAAC,IAAI,CAACI,SAAS,IAAI,IAAI,CAACU,WAAW,IAAI,IAAI,CAACZ,gBAAgB,EAAE;MAChE,KAAK,IAAI,CAACY,WAAW,CAACmB,WAAW,CAC/B;QAAEC,EAAE,EAAEF,KAAK,CAACG,SAAS;QAAEH;MAAM,CAAC,EAC9B,IAAI,CAAC7B,cACP,CAAC;MACD;IACF;IAEA,IAAI,IAAI,CAACU,aAAa,EAAE;MACtBlB,MAAM,CAACyC,KAAK,CACV,wBAAwB,EACxB,2BAA2B,EAC3BJ,KACF,CAAC;MACD;MACA;MACA,IAAI,CAACnB,aAAa,CAACwB,IAAI,CAAC;QACtBL,KAAK,EAAEA,KAAK;QAAE;QACdM,SAAS,EAAEN,KAAK,CAACO,IAAI;QACrBJ,SAAS,EAAEH,KAAK,CAACG,SAAS;QAC1BK,cAAc,EAAE,IAAI,CAACpC,SAAS;QAC9BqC,gBAAgB,EAAE,IAAI,CAACpC;MACzB,CAAC,CAAC;IACJ;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEqC,gBAAgBA,CACdC,CAAS,EACTC,CAAS,EACTC,MAAe,EACfC,QAAiB,EACX;IACN,IAAI,CAAC,IAAI,CAAC9C,WAAW,EAAE;MACrB;IACF;IAEA,IAAI,CAACS,eAAe,CAACiC,gBAAgB,CAACC,CAAC,EAAEC,CAAC,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EAC/D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,eAAeA,CACbJ,CAAS,EACTC,CAAS,EACTC,MAAe,EACfC,QAAiB,EACX;IACN,IAAI,CAAC,IAAI,CAAC9C,WAAW,EAAE;MACrB;IACF;IAEA,IAAI,CAACS,eAAe,CAACsC,eAAe,CAACJ,CAAC,EAAEC,CAAC,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EAC9D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,cAAcA,CACZL,CAAS,EACTC,CAAS,EACTC,MAAe,EACfC,QAAiB,EACX;IACN,IAAI,CAAC,IAAI,CAAC9C,WAAW,EAAE;MACrB;IACF;IAEA,IAAI,CAACS,eAAe,CAACuC,cAAc,CAACL,CAAC,EAAEC,CAAC,EAAEC,MAAM,EAAEC,QAAQ,CAAC;EAC7D;;EAEA;AACF;AACA;AACA;EACEG,iBAAiBA,CAAA,EAAoB;IACnC,OAAO,CAAC,GAAG,IAAI,CAAChD,cAAc,CAAC;EACjC;;EAEA;AACF;AACA;EACEiD,mBAAmBA,CAAA,EAAS;IAC1B,IAAI,CAACjD,cAAc,GAAG,EAAE;EAC1B;;EAEA;AACF;AACA;AACA;EACEkD,iBAAiBA,CAAA,EAAkD;IACjE,OAAO;MACLC,WAAW,EAAE,IAAI,CAACnD,cAAc,CAACoD,MAAM;MACvCrD,WAAW,EAAE,IAAI,CAACA;IACpB,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ApiService","baseUrl","constructor","config","apiKey","apiBaseUrl","exporterEndpoint","init","updateConfigs","setApiKey","createErrorSession","request","signal","makeRequest","updateSessionAttributes","sessionId","requestBody","exportEvents","path","method","body","url","params","JSON","stringify","headers","response","fetch","ok","Error","statusText","status","json","error","name","message","startSession","res","stopSession","cancelSession","startContinuousDebugSession","saveContinuousDebugSession","stopContinuousDebugSession","checkRemoteSession"],"sourceRoot":"../../../src","sources":["services/api.service.ts"],"mappings":";;AAiCA,OAAO,MAAMA,UAAU,CAAC;EAEdC,OAAO,GAAW,6BAA6B;EAEvDC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,MAAM,GAAG;MACZC,MAAM,EAAE,EAAE;MACVC,UAAU,EAAE,EAAE;MACdC,gBAAgB,EAAE;IACpB,CAAC;EACH;EAEAC,IAAIA,CAACJ,MAAwB,EAAQ;IACnC,IAAI,CAACA,MAAM,GAAG;MACZ,GAAG,IAAI,CAACA,MAAM;MACd,GAAGA;IACL,CAAC;IACD,IAAIA,MAAM,CAACE,UAAU,EAAE;MACrB,IAAI,CAACJ,OAAO,GAAGE,MAAM,CAACE,UAAU;IAClC;EACF;;EAEA;AACF;AACA;AACA;EACSG,aAAaA,CAACL,MAAiC,EAAE;IACtD,IAAI,IAAI,CAACA,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,GAAG;QAAE,GAAG,IAAI,CAACA,MAAM;QAAE,GAAGA;MAAO,CAAC;IAC7C;EACF;;EAEA;AACF;AACA;AACA;EACEM,SAASA,CAACL,MAAc,EAAQ;IAC9B,IAAI,IAAI,CAACD,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACC,MAAM,GAAGA,MAAM;IAC7B;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMM,kBAAkBA,CACtBC,OAAsC,EACtCC,MAAoB,EACN;IACd,OAAO,IAAI,CAACC,WAAW,CACrB,kCAAkC,EAClC,MAAM,EACNF,OAAO,EACPC,MACF,CAAC;EACH;EAEA,MAAME,uBAAuBA,CAC3BC,SAAiB,EACjBC,
|
|
1
|
+
{"version":3,"names":["ApiService","baseUrl","constructor","config","apiKey","apiBaseUrl","exporterEndpoint","init","updateConfigs","setApiKey","createErrorSession","request","signal","makeRequest","updateSessionAttributes","sessionId","requestBody","exportEvents","path","method","body","url","params","JSON","stringify","headers","response","fetch","ok","Error","statusText","status","json","error","name","message","startSession","res","stopSession","cancelSession","startContinuousDebugSession","saveContinuousDebugSession","stopContinuousDebugSession","checkRemoteSession"],"sourceRoot":"../../../src","sources":["services/api.service.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { Platform } from 'react-native';
|
|
4
|
+
import { EventType } from '@rrweb/types';
|
|
4
5
|
import { SpanStatusCode } from '@opentelemetry/api';
|
|
5
6
|
|
|
6
7
|
// Safe import for AsyncStorage with web fallback
|
|
@@ -32,7 +33,8 @@ export class CrashBufferService {
|
|
|
32
33
|
indexLoaded = false;
|
|
33
34
|
lastPruneAt = 0;
|
|
34
35
|
opChain = Promise.resolve();
|
|
35
|
-
defaultWindowMs =
|
|
36
|
+
defaultWindowMs = 0.5 * 60 * 1000;
|
|
37
|
+
lastSeenEventTs = 0;
|
|
36
38
|
listeners = new Map();
|
|
37
39
|
static getInstance() {
|
|
38
40
|
if (!CrashBufferService.instance) {
|
|
@@ -73,7 +75,16 @@ export class CrashBufferService {
|
|
|
73
75
|
});
|
|
74
76
|
}
|
|
75
77
|
async appendEvent(payload, windowMs) {
|
|
76
|
-
|
|
78
|
+
const ts = payload?.ts ?? Date.now();
|
|
79
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, ts);
|
|
80
|
+
const rawEventType = payload?.event?.eventType ?? payload?.event?.type;
|
|
81
|
+
const isFullSnapshot = Boolean(payload.isFullSnapshot) || rawEventType === EventType.FullSnapshot;
|
|
82
|
+
const record = {
|
|
83
|
+
...payload,
|
|
84
|
+
ts,
|
|
85
|
+
isFullSnapshot
|
|
86
|
+
};
|
|
87
|
+
return this.appendRecord('rrweb', record.ts, record, windowMs ?? this.defaultWindowMs);
|
|
77
88
|
}
|
|
78
89
|
async appendSpans(payload, windowMs) {
|
|
79
90
|
if (!payload.length) return;
|
|
@@ -113,7 +124,7 @@ export class CrashBufferService {
|
|
|
113
124
|
});
|
|
114
125
|
}
|
|
115
126
|
setDefaultWindowMs(windowMs) {
|
|
116
|
-
this.defaultWindowMs = Math.max(10_000, windowMs ||
|
|
127
|
+
this.defaultWindowMs = Math.max(10_000, windowMs || 0.5 * 60 * 1000);
|
|
117
128
|
}
|
|
118
129
|
on(event, listener) {
|
|
119
130
|
const set = this.listeners.get(event) || new Set();
|
|
@@ -205,29 +216,49 @@ export class CrashBufferService {
|
|
|
205
216
|
// ignore
|
|
206
217
|
}
|
|
207
218
|
}
|
|
208
|
-
const
|
|
209
|
-
const
|
|
219
|
+
const allEvents = [];
|
|
220
|
+
const allSpans = [];
|
|
210
221
|
for (const e of entries.sort((a, b) => a.ts - b.ts)) {
|
|
211
222
|
const key = `${RECORD_PREFIX}${e.id}`;
|
|
212
223
|
const payload = byKey.get(key);
|
|
213
224
|
if (!payload) continue;
|
|
214
|
-
if (e.kind === 'rrweb')
|
|
215
|
-
if (e.kind === 'span')
|
|
225
|
+
if (e.kind === 'rrweb') allEvents.push(payload);
|
|
226
|
+
if (e.kind === 'span') allSpans.push(payload);
|
|
216
227
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
228
|
+
|
|
229
|
+
// Mirror browser semantics:
|
|
230
|
+
// - Ensure the rrweb stream starts at Meta -> FullSnapshot (or is empty).
|
|
231
|
+
// - Only include spans from the replayable window onward.
|
|
232
|
+
const eventsSorted = allEvents.slice().sort((a, b) => a.ts - b.ts);
|
|
233
|
+
const firstSnapshotIdx = eventsSorted.findIndex(e => {
|
|
234
|
+
const t = e?.event?.eventType ?? e?.event?.type;
|
|
235
|
+
return t === EventType.FullSnapshot;
|
|
236
|
+
});
|
|
237
|
+
if (firstSnapshotIdx < 0) {
|
|
238
|
+
return {
|
|
239
|
+
events: [],
|
|
240
|
+
spans: [],
|
|
241
|
+
startedAt: fromTs,
|
|
242
|
+
stoppedAt: toTs
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
let startIdx = firstSnapshotIdx;
|
|
246
|
+
for (let i = firstSnapshotIdx - 1; i >= 0; i--) {
|
|
247
|
+
const t = eventsSorted[i]?.event?.eventType ?? eventsSorted[i]?.event?.type;
|
|
248
|
+
if (t === EventType.Meta) {
|
|
249
|
+
startIdx = i;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
223
252
|
}
|
|
253
|
+
const rrwebEvents = eventsSorted.slice(startIdx);
|
|
254
|
+
const firstEvent = rrwebEvents[0];
|
|
255
|
+
const replayStartedAt = typeof firstEvent?.ts === 'number' ? firstEvent.ts : fromTs;
|
|
256
|
+
const otelSpans = allSpans.filter(s => typeof s?.ts === 'number' && s.ts >= replayStartedAt).sort((a, b) => a.ts - b.ts);
|
|
224
257
|
return {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
fromTs,
|
|
230
|
-
toTs
|
|
258
|
+
spans: otelSpans,
|
|
259
|
+
events: rrwebEvents,
|
|
260
|
+
stoppedAt: toTs,
|
|
261
|
+
startedAt: replayStartedAt
|
|
231
262
|
};
|
|
232
263
|
});
|
|
233
264
|
}
|
|
@@ -237,6 +268,7 @@ export class CrashBufferService {
|
|
|
237
268
|
await this.ensureIndexLoaded();
|
|
238
269
|
const keys = this.index.map(e => `${RECORD_PREFIX}${e.id}`);
|
|
239
270
|
this.index = [];
|
|
271
|
+
this.lastSeenEventTs = 0;
|
|
240
272
|
try {
|
|
241
273
|
await AsyncStorage.multiRemove([INDEX_KEY, ATTRS_KEY, ...keys]);
|
|
242
274
|
} catch (_e) {
|