@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
|
@@ -34,7 +34,10 @@ export declare class SocketService extends Observable<SocketServiceEvents> {
|
|
|
34
34
|
send(event: any): void;
|
|
35
35
|
subscribeToSession(session: ISession): void;
|
|
36
36
|
unsubscribeFromSession(stopSession?: boolean): void;
|
|
37
|
-
setUser(
|
|
37
|
+
setUser(data: {
|
|
38
|
+
userAttributes: IUserAttributes | null;
|
|
39
|
+
clientId?: string;
|
|
40
|
+
}): void;
|
|
38
41
|
close(): Promise<void>;
|
|
39
42
|
}
|
|
40
43
|
//# sourceMappingURL=socket.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../../../src/services/socket.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EAIrB,8BAA8B,EAC9B,6BAA6B,EAE7B,yBAAyB,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EAErB,MAAM,0CAA0C,CAAC;AAIlD,MAAM,MAAM,mBAAmB,GAC3B,OAAO,qBAAqB,GAC5B,OAAO,oBAAoB,GAC3B,OAAO,8BAA8B,GACrC,OAAO,6BAA6B,GACpC,OAAO,yBAAyB,CAAC;AAErC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,mBAAmB,CAAC;IAChE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;;IAWtC;;;OAGG;IACI,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAc/C;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IA0BjE,OAAO,CAAC,eAAe;IAyDvB,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;IAWX,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAItB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAe3C,sBAAsB,CAAC,WAAW,CAAC,EAAE,OAAO;IAW5C,OAAO,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"socket.service.d.ts","sourceRoot":"","sources":["../../../../src/services/socket.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EAIrB,8BAA8B,EAC9B,6BAA6B,EAE7B,yBAAyB,EAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EAErB,MAAM,0CAA0C,CAAC;AAIlD,MAAM,MAAM,mBAAmB,GAC3B,OAAO,qBAAqB,GAC5B,OAAO,oBAAoB,GAC3B,OAAO,8BAA8B,GACrC,OAAO,6BAA6B,GACpC,OAAO,yBAAyB,CAAC;AAErC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,SAAQ,UAAU,CAAC,mBAAmB,CAAC;IAChE,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAuB;;IAWtC;;;OAGG;IACI,IAAI,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAc/C;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IA0BjE,OAAO,CAAC,eAAe;IAyDvB,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,UAAU;IAWX,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAItB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAe3C,sBAAsB,CAAC,WAAW,CAAC,EAAE,OAAO;IAW5C,OAAO,CAAC,IAAI,EAAE;QACnB,cAAc,EAAE,eAAe,GAAG,IAAI,CAAC;QACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAID,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB9B"}
|
|
@@ -55,9 +55,6 @@ declare class SessionRecorder extends Observable<SessionRecorderEvents> implemen
|
|
|
55
55
|
* Capture an exception manually and send it as an error trace.
|
|
56
56
|
*/
|
|
57
57
|
captureException(error: unknown, errorInfo?: Record<string, any>): void;
|
|
58
|
-
flushBuffer(payload?: {
|
|
59
|
-
reason?: string;
|
|
60
|
-
}): Promise<any>;
|
|
61
58
|
private _flushBuffer;
|
|
62
59
|
private _createExceptionSession;
|
|
63
60
|
private _loadStoredSessionData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../../../src/session-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,eAAe,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EACnB,MAAM,SAAS,CAAC;AAwBjB,KAAK,qBAAqB,GAAG,cAAc,GAAG,MAAM,CAAC;AAErD,cAAM,eACJ,SAAQ,UAAU,CAAC,qBAAqB,CACxC,YAAW,gBAAgB,EAAE,aAAa;IAE1C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,uBAAuB,CAAgC;IAG/D,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAI,aAAa,IAAI,OAAO,CAE3B;IACD,IAAI,aAAa,CAAC,aAAa,EAAE,OAAO,EAEvC;IAGD,OAAO,CAAC,UAAU,CAAuB;IACzC,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAKrC;IAED,OAAO,CAAC,YAAY,CAAmC;IACvD,IAAI,WAAW,IAAI,WAAW,CAE7B;IACD,IAAI,WAAW,CAAC,WAAW,EAAE,WAAW,EAGvC;IAED,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED,OAAO,CAAC,aAAa,CAA6B;IAClD,IAAI,YAAY,IAAI,YAAY,GAAG,IAAI,CAEtC;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,EAS1C;IAED,OAAO,CAAC,QAAQ,CAAyB;IACzC,IAAI,OAAO,IAAI,QAAQ,GAAG,IAAI,CAE7B;IACD,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,EAKnC;IAED,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,IAAI,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAE3C;IACD,IAAI,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAE3D;IAED,OAAO,CAAC,eAAe,CAAgC;IACvD,IAAI,cAAc,IAAI,eAAe,GAAG,IAAI,CAE3C;IACD,IAAI,cAAc,CAAC,cAAc,EAAE,eAAe,GAAG,IAAI,EAExD;IACD;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,KAAK,CAAC,CAAC,EAAE,MAAM,EAEzB;IACD,OAAO,CAAC,MAAM,CAAc;IAE5B;;OAEG;IACH,IAAW,0BAA0B,IAAI,GAAG,CAE3C;IAED,IAAW,MAAM,IAAI,sBAAsB,CAE1C;IACD;;OAEG;;IAQH;;OAEG;IACI,gBAAgB,CACrB,KAAK,EAAE,OAAO,EACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC9B,IAAI;
|
|
1
|
+
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../../../src/session-recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,10 +135,10 @@ export interface SessionRecorderOptions {
|
|
|
135
135
|
enabled?: boolean;
|
|
136
136
|
};
|
|
137
137
|
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
138
|
+
* @description
|
|
139
|
+
* If true, webSocket will be used to manage remote recording sessions.
|
|
140
|
+
* @default true
|
|
141
|
+
*/
|
|
142
142
|
useWebsocket?: boolean;
|
|
143
143
|
/**
|
|
144
144
|
* (Optional) Client-side crash buffer configuration.
|
|
@@ -146,9 +146,9 @@ export interface SessionRecorderOptions {
|
|
|
146
146
|
* even if the user did not start a manual/continuous recording.
|
|
147
147
|
*/
|
|
148
148
|
buffering?: {
|
|
149
|
-
/** Enable/disable buffering. @default
|
|
149
|
+
/** Enable/disable buffering. @default false */
|
|
150
150
|
enabled?: boolean;
|
|
151
|
-
/** Rolling window size (minutes). @default
|
|
151
|
+
/** Rolling window size (minutes). @default 0.5 */
|
|
152
152
|
windowMinutes?: number;
|
|
153
153
|
};
|
|
154
154
|
}
|
|
@@ -314,13 +314,6 @@ export interface ISessionRecorder {
|
|
|
314
314
|
* Capture an exception and send it as an error trace
|
|
315
315
|
*/
|
|
316
316
|
captureException(error: unknown, errorInfo?: Record<string, any>): void;
|
|
317
|
-
/**
|
|
318
|
-
* Flush the local crash buffer by creating a debug session and uploading buffered data.
|
|
319
|
-
* No-op if a live recording is currently active.
|
|
320
|
-
*/
|
|
321
|
-
flushBuffer(payload?: {
|
|
322
|
-
reason?: string;
|
|
323
|
-
}): Promise<any>;
|
|
324
317
|
}
|
|
325
318
|
/**
|
|
326
319
|
* Interface representing screen capture events
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../../../../src/types/session-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"session-recorder.d.ts","sourceRoot":"","sources":["../../../../src/types/session-recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrweb-events.d.ts","sourceRoot":"","sources":["../../../../src/utils/rrweb-events.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"rrweb-events.d.ts","sourceRoot":"","sources":["../../../../src/utils/rrweb-events.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AAGtB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,aAAa,CAcxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,YAAQ,EAC7B,aAAa,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAClC,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CA2Ff;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,MAAc,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAqBf;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,YAAQ,EAC7B,MAAM,EAAE,MAAM,GACb,oBAAoB,CAatB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC,oBAAoB,CAkEtB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,MAAY,GACvB,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ9C"}
|
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.32",
|
|
4
4
|
"description": "Multiplayer Fullstack Session Recorder for React Native",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Multiplayer Software, Inc.",
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
"typescript": "^5.9.2"
|
|
109
109
|
},
|
|
110
110
|
"dependencies": {
|
|
111
|
-
"@multiplayer-app/session-recorder-common": "1.3.
|
|
111
|
+
"@multiplayer-app/session-recorder-common": "1.3.32",
|
|
112
112
|
"@opentelemetry/core": "2.0.1",
|
|
113
113
|
"@opentelemetry/exporter-trace-otlp-http": "0.203.0",
|
|
114
114
|
"@opentelemetry/instrumentation": "0.203.0",
|
package/src/config/defaults.ts
CHANGED
|
@@ -33,33 +33,33 @@ export const DEFAULT_MASKING_CONFIG: SessionRecorderConfigs['masking'] = {
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
export const DEFAULT_WIDGET_TEXT_CONFIG: SessionRecorderConfigs['widget']['textOverrides'] =
|
|
36
|
-
{
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
};
|
|
36
|
+
{
|
|
37
|
+
initialTitleWithContinuous: 'Encountered an issue?',
|
|
38
|
+
initialTitleWithoutContinuous: 'Encountered an issue?',
|
|
39
|
+
initialDescriptionWithContinuous:
|
|
40
|
+
'Record your session so we can see the problem and fix it faster.',
|
|
41
|
+
initialDescriptionWithoutContinuous:
|
|
42
|
+
'Record your session so we can see the problem and fix it faster.',
|
|
43
|
+
continuousRecordingLabel: 'Continuous recording',
|
|
44
|
+
startRecordingButtonText: 'Start recording',
|
|
45
|
+
finalTitle: 'Done recording?',
|
|
46
|
+
finalDescription:
|
|
47
|
+
'You can also add a quick note with extra context, expectations, or questions. Thank you!',
|
|
48
|
+
commentPlaceholder: 'Add a message...',
|
|
49
|
+
saveButtonText: 'Submit recording',
|
|
50
|
+
cancelButtonText: 'Cancel recording',
|
|
51
|
+
continuousOverlayTitle: 'Save time, skip the reproductions',
|
|
52
|
+
continuousOverlayDescription:
|
|
53
|
+
'We keep a rolling record of your recent activity. If something doesn’t work as expected, just save the recording and continue working. No need to worry about exceptions and errors - we automatically save recordings for those!',
|
|
54
|
+
saveLastSnapshotButtonText: 'Save recording',
|
|
55
|
+
submitDialogTitle: 'Save recording',
|
|
56
|
+
submitDialogSubtitle:
|
|
57
|
+
'This full-stack session recording will be saved directly to your selected Multiplayer project. All data is automatically correlated end-to-end.',
|
|
58
|
+
submitDialogCommentLabel: 'You can also add context, comments, or notes.',
|
|
59
|
+
submitDialogCommentPlaceholder: 'Add a message...',
|
|
60
|
+
submitDialogSubmitText: 'Save',
|
|
61
|
+
submitDialogCancelText: 'Cancel',
|
|
62
|
+
};
|
|
63
63
|
|
|
64
64
|
export const BASE_CONFIG: SessionRecorderConfigs = {
|
|
65
65
|
apiKey: '',
|
|
@@ -106,7 +106,7 @@ export const BASE_CONFIG: SessionRecorderConfigs = {
|
|
|
106
106
|
useWebsocket: true,
|
|
107
107
|
|
|
108
108
|
buffering: {
|
|
109
|
-
enabled:
|
|
110
|
-
windowMinutes:
|
|
109
|
+
enabled: false,
|
|
110
|
+
windowMinutes: 0.5,
|
|
111
111
|
},
|
|
112
112
|
};
|
|
@@ -87,8 +87,14 @@ export const getSessionRecorderConfig = (
|
|
|
87
87
|
useWebsocket: isValidBoolean(c.useWebsocket, BASE_CONFIG.useWebsocket),
|
|
88
88
|
|
|
89
89
|
buffering: {
|
|
90
|
-
enabled: isValidBoolean(
|
|
91
|
-
|
|
90
|
+
enabled: isValidBoolean(
|
|
91
|
+
c.buffering?.enabled,
|
|
92
|
+
BASE_CONFIG.buffering.enabled
|
|
93
|
+
),
|
|
94
|
+
windowMinutes: isValidNumber(
|
|
95
|
+
c.buffering?.windowMinutes,
|
|
96
|
+
BASE_CONFIG.buffering.windowMinutes
|
|
97
|
+
),
|
|
92
98
|
},
|
|
93
99
|
};
|
|
94
100
|
};
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
+
import { type Context } from '@opentelemetry/api';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import type { CrashBuffer } from '@multiplayer-app/session-recorder-common';
|
|
6
|
-
import { type Context, TraceFlags } from '@opentelemetry/api';
|
|
7
|
-
import type {
|
|
8
|
-
Span,
|
|
9
|
-
SpanProcessor,
|
|
10
|
-
BatchSpanProcessor,
|
|
11
|
-
ReadableSpan,
|
|
3
|
+
type ReadableSpan,
|
|
4
|
+
type SpanProcessor,
|
|
5
|
+
type Span,
|
|
12
6
|
} from '@opentelemetry/sdk-trace-base';
|
|
7
|
+
import { MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX } from '@multiplayer-app/session-recorder-common';
|
|
8
|
+
import type { CrashBuffer } from '@multiplayer-app/session-recorder-common';
|
|
13
9
|
|
|
14
10
|
/**
|
|
15
11
|
* Implementation of the {@link SpanProcessor} that batches spans exported by
|
|
@@ -17,30 +13,29 @@ import type {
|
|
|
17
13
|
*/
|
|
18
14
|
export class CrashBufferSpanProcessor implements SpanProcessor {
|
|
19
15
|
constructor(
|
|
20
|
-
private readonly _exporter: BatchSpanProcessor,
|
|
21
16
|
private readonly _crashBuffer: CrashBuffer | undefined,
|
|
22
17
|
private readonly _serializeSpan: (span: ReadableSpan) => any
|
|
23
18
|
) {}
|
|
24
19
|
|
|
25
20
|
forceFlush(): Promise<void> {
|
|
26
|
-
return
|
|
21
|
+
return Promise.resolve();
|
|
27
22
|
}
|
|
28
23
|
|
|
29
24
|
onStart(_span: Span, _parentContext: Context): void {
|
|
30
|
-
return
|
|
25
|
+
return;
|
|
31
26
|
}
|
|
32
27
|
|
|
33
28
|
onEnd(span: ReadableSpan): void {
|
|
34
|
-
const
|
|
29
|
+
const _spanContext = span.spanContext();
|
|
35
30
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
const traceId = _spanContext.traceId;
|
|
32
|
+
|
|
33
|
+
// // Never buffer/export unsampled spans.
|
|
34
|
+
// if ((_spanContext.traceFlags & TraceFlags.SAMPLED) === 0) {
|
|
35
|
+
// return
|
|
36
|
+
// }
|
|
39
37
|
|
|
40
|
-
if (
|
|
41
|
-
traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX) ||
|
|
42
|
-
traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)
|
|
43
|
-
) {
|
|
38
|
+
if (traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)) {
|
|
44
39
|
if (this._crashBuffer) {
|
|
45
40
|
this._crashBuffer.appendSpans([
|
|
46
41
|
{
|
|
@@ -51,11 +46,9 @@ export class CrashBufferSpanProcessor implements SpanProcessor {
|
|
|
51
46
|
}
|
|
52
47
|
return;
|
|
53
48
|
}
|
|
54
|
-
|
|
55
|
-
this._exporter.onEnd(span);
|
|
56
49
|
}
|
|
57
50
|
|
|
58
51
|
shutdown(): Promise<void> {
|
|
59
|
-
return
|
|
52
|
+
return Promise.resolve();
|
|
60
53
|
}
|
|
61
54
|
}
|
package/src/otel/index.ts
CHANGED
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
type ExportResult,
|
|
5
5
|
} from '@opentelemetry/core';
|
|
6
6
|
import {
|
|
7
|
-
AlwaysOnSampler,
|
|
8
7
|
BatchSpanProcessor,
|
|
9
8
|
type ReadableSpan,
|
|
10
9
|
} from '@opentelemetry/sdk-trace-base';
|
|
@@ -17,11 +16,11 @@ import {
|
|
|
17
16
|
SessionRecorderBrowserTraceExporter,
|
|
18
17
|
ATTR_MULTIPLAYER_SESSION_ID,
|
|
19
18
|
MULTIPLAYER_TRACE_CLIENT_ID_LENGTH,
|
|
19
|
+
SessionRecorderTraceIdRatioBasedSampler,
|
|
20
20
|
} from '@multiplayer-app/session-recorder-common';
|
|
21
21
|
import { type TracerReactNativeConfig } from '../types';
|
|
22
22
|
import { getInstrumentations } from './instrumentations';
|
|
23
23
|
import { getExporterEndpoint } from './helpers';
|
|
24
|
-
import { trace, SpanStatusCode, context, type Span } from '@opentelemetry/api';
|
|
25
24
|
|
|
26
25
|
import { getPlatformAttributes } from '../utils/platform';
|
|
27
26
|
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
|
|
@@ -40,7 +39,6 @@ export class TracerReactNativeSDK {
|
|
|
40
39
|
private sessionId = '';
|
|
41
40
|
private idGenerator?: SessionRecorderIdGenerator;
|
|
42
41
|
private exporter?: SessionRecorderBrowserTraceExporter;
|
|
43
|
-
private batchSpanProcessor?: BatchSpanProcessor;
|
|
44
42
|
private globalErrorHandlerRegistered = false;
|
|
45
43
|
private crashBuffer?: CrashBufferService;
|
|
46
44
|
|
|
@@ -74,23 +72,27 @@ export class TracerReactNativeSDK {
|
|
|
74
72
|
url: getExporterEndpoint(options.exporterEndpoint),
|
|
75
73
|
});
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
const resourceAttributes = resourceFromAttributes({
|
|
76
|
+
[SemanticAttributes.SEMRESATTRS_SERVICE_NAME]: application,
|
|
77
|
+
[SemanticAttributes.SEMRESATTRS_SERVICE_VERSION]: version,
|
|
78
|
+
[SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
|
|
79
|
+
...getPlatformAttributes(),
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
SessionRecorderSdk.setResourceAttributes(resourceAttributes.attributes);
|
|
78
83
|
|
|
79
84
|
this.tracerProvider = new WebTracerProvider({
|
|
80
|
-
resource:
|
|
81
|
-
[SemanticAttributes.SEMRESATTRS_SERVICE_NAME]: application,
|
|
82
|
-
[SemanticAttributes.SEMRESATTRS_SERVICE_VERSION]: version,
|
|
83
|
-
[SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
|
|
84
|
-
...getPlatformAttributes(),
|
|
85
|
-
}),
|
|
85
|
+
resource: resourceAttributes,
|
|
86
86
|
idGenerator: this.idGenerator,
|
|
87
|
-
sampler: new
|
|
87
|
+
sampler: new SessionRecorderTraceIdRatioBasedSampler(
|
|
88
|
+
this.config.sampleTraceRatio
|
|
89
|
+
),
|
|
88
90
|
spanProcessors: [
|
|
89
91
|
this._getSpanSessionIdProcessor(),
|
|
92
|
+
new BatchSpanProcessor(this.exporter),
|
|
90
93
|
new CrashBufferSpanProcessor(
|
|
91
|
-
this.batchSpanProcessor,
|
|
92
94
|
this.crashBuffer,
|
|
93
|
-
this.exporter.serializeSpan
|
|
95
|
+
this.exporter.serializeSpan
|
|
94
96
|
),
|
|
95
97
|
],
|
|
96
98
|
});
|
|
@@ -125,27 +127,22 @@ export class TracerReactNativeSDK {
|
|
|
125
127
|
async exportTraces(
|
|
126
128
|
spans: ReadableSpan[]
|
|
127
129
|
): Promise<ExportResult | undefined | void> {
|
|
128
|
-
if (this.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
130
|
+
if (!this.exporter) {
|
|
131
|
+
throw new Error('Trace exporter not initialized');
|
|
132
|
+
}
|
|
133
|
+
if (!spans || spans.length === 0) {
|
|
132
134
|
return Promise.resolve();
|
|
133
135
|
}
|
|
134
136
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
const readableSpans = spans.map((s: any) =>
|
|
138
|
+
TracerReactNativeSDK._toReadableSpanLike(s)
|
|
139
|
+
);
|
|
137
140
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
onEnd: () => {},
|
|
146
|
-
shutdown: () => Promise.resolve(),
|
|
147
|
-
forceFlush: () => Promise.resolve(),
|
|
148
|
-
};
|
|
141
|
+
return new Promise((resolve) => {
|
|
142
|
+
this.exporter?.exportBuffer(readableSpans, (result) => {
|
|
143
|
+
resolve(result);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
149
146
|
}
|
|
150
147
|
|
|
151
148
|
start(sessionId: string, sessionType: SessionType): void {
|
|
@@ -185,39 +182,20 @@ export class TracerReactNativeSDK {
|
|
|
185
182
|
*/
|
|
186
183
|
captureException(error: Error, errorInfo?: Record<string, any>): void {
|
|
187
184
|
if (!error) return;
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
const activeSpan = trace.getSpan(context.active());
|
|
191
|
-
if (activeSpan) {
|
|
192
|
-
this._recordException(activeSpan, error, errorInfo);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
} catch (_ignored) {}
|
|
196
|
-
|
|
197
|
-
// Fallback: create a short-lived span to hold the exception details
|
|
198
|
-
try {
|
|
199
|
-
const tracer = trace.getTracer('exception');
|
|
200
|
-
const span = tracer.startSpan(error.name || 'Error');
|
|
201
|
-
this._recordException(span, error, errorInfo);
|
|
202
|
-
span.end();
|
|
203
|
-
} catch (_ignored) {}
|
|
185
|
+
SessionRecorderSdk.captureException(error, errorInfo);
|
|
204
186
|
}
|
|
205
187
|
|
|
206
|
-
private
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
Object.entries(errorInfo).forEach(([key, value]) => {
|
|
218
|
-
span.setAttribute(`error_info.${key}`, value);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
188
|
+
private _getSpanSessionIdProcessor() {
|
|
189
|
+
return {
|
|
190
|
+
onStart: (span: any) => {
|
|
191
|
+
if (this.sessionId) {
|
|
192
|
+
span.setAttribute(ATTR_MULTIPLAYER_SESSION_ID, this.sessionId);
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
onEnd: () => {},
|
|
196
|
+
shutdown: () => Promise.resolve(),
|
|
197
|
+
forceFlush: () => Promise.resolve(),
|
|
198
|
+
};
|
|
221
199
|
}
|
|
222
200
|
|
|
223
201
|
private _registerGlobalErrorHandlers(): void {
|
|
@@ -248,4 +226,75 @@ export class TracerReactNativeSDK {
|
|
|
248
226
|
this.globalErrorHandlerRegistered = true;
|
|
249
227
|
}
|
|
250
228
|
}
|
|
229
|
+
|
|
230
|
+
private static _toReadableSpanLike(span: any): ReadableSpan {
|
|
231
|
+
if (
|
|
232
|
+
span &&
|
|
233
|
+
typeof span.spanContext === 'function' &&
|
|
234
|
+
span.instrumentationScope
|
|
235
|
+
) {
|
|
236
|
+
return span as ReadableSpan;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const spanContext =
|
|
240
|
+
typeof span?.spanContext === 'function'
|
|
241
|
+
? span.spanContext()
|
|
242
|
+
: span?._spanContext;
|
|
243
|
+
const normalizedCtx =
|
|
244
|
+
spanContext ||
|
|
245
|
+
({
|
|
246
|
+
traceId: span?.traceId,
|
|
247
|
+
spanId: span?.spanId,
|
|
248
|
+
traceFlags: span?.traceFlags,
|
|
249
|
+
traceState: span?.traceState,
|
|
250
|
+
} as any);
|
|
251
|
+
|
|
252
|
+
const instrumentationScope =
|
|
253
|
+
span?.instrumentationScope ||
|
|
254
|
+
span?.instrumentationLibrary ||
|
|
255
|
+
({
|
|
256
|
+
name: 'multiplayer-buffer',
|
|
257
|
+
version: undefined,
|
|
258
|
+
schemaUrl: undefined,
|
|
259
|
+
} as any);
|
|
260
|
+
|
|
261
|
+
const normalizedScope = {
|
|
262
|
+
name: instrumentationScope?.name || 'multiplayer-buffer',
|
|
263
|
+
version: instrumentationScope?.version,
|
|
264
|
+
schemaUrl: instrumentationScope?.schemaUrl,
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const resource = span?.resource || {
|
|
268
|
+
attributes: {},
|
|
269
|
+
asyncAttributesPending: false,
|
|
270
|
+
};
|
|
271
|
+
const parentSpanId = span?.parentSpanId;
|
|
272
|
+
|
|
273
|
+
return {
|
|
274
|
+
name: span?.name || '',
|
|
275
|
+
kind: span?.kind,
|
|
276
|
+
spanContext: () => normalizedCtx,
|
|
277
|
+
parentSpanContext: parentSpanId
|
|
278
|
+
? ({
|
|
279
|
+
traceId: normalizedCtx?.traceId,
|
|
280
|
+
spanId: parentSpanId,
|
|
281
|
+
traceFlags: normalizedCtx?.traceFlags,
|
|
282
|
+
traceState: normalizedCtx?.traceState,
|
|
283
|
+
} as any)
|
|
284
|
+
: undefined,
|
|
285
|
+
startTime: span?.startTime,
|
|
286
|
+
endTime: span?.endTime ?? span?.startTime,
|
|
287
|
+
duration: span?.duration,
|
|
288
|
+
status: span?.status,
|
|
289
|
+
attributes: span?.attributes || {},
|
|
290
|
+
links: span?.links || [],
|
|
291
|
+
events: span?.events || [],
|
|
292
|
+
ended: typeof span?.ended === 'boolean' ? span.ended : true,
|
|
293
|
+
droppedAttributesCount: span?.droppedAttributesCount || 0,
|
|
294
|
+
droppedEventsCount: span?.droppedEventsCount || 0,
|
|
295
|
+
droppedLinksCount: span?.droppedLinksCount || 0,
|
|
296
|
+
resource,
|
|
297
|
+
instrumentationScope: normalizedScope as any,
|
|
298
|
+
} as any;
|
|
299
|
+
}
|
|
251
300
|
}
|
package/src/recorder/index.ts
CHANGED
|
@@ -40,7 +40,7 @@ export class RecorderReactNativeSDK implements EventRecorder {
|
|
|
40
40
|
this.bufferingEnabled = Boolean(buffering?.enabled);
|
|
41
41
|
this.bufferWindowMs = Math.max(
|
|
42
42
|
10_000,
|
|
43
|
-
buffering?.windowMs ||
|
|
43
|
+
buffering?.windowMs || 0.5 * 60 * 1000
|
|
44
44
|
);
|
|
45
45
|
this.screenRecorder.init(config, this);
|
|
46
46
|
this.navigationTracker.init(config, this.screenRecorder);
|
|
@@ -93,7 +93,8 @@ export class ApiService {
|
|
|
93
93
|
async updateSessionAttributes(
|
|
94
94
|
sessionId: string,
|
|
95
95
|
requestBody: {
|
|
96
|
-
|
|
96
|
+
startedAt?: string;
|
|
97
|
+
stoppedAt?: string;
|
|
97
98
|
userAttributes?: IUserAttributes;
|
|
98
99
|
sessionAttributes?: ISessionAttributes;
|
|
99
100
|
resourceAttributes?: IResourceAttributes;
|