@multiplayer-app/session-recorder-react-native 1.2.36 → 1.3.1
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/config/constants.js +3 -0
- package/lib/module/config/constants.js.map +1 -1
- package/lib/module/config/defaults.js +2 -1
- package/lib/module/config/defaults.js.map +1 -1
- package/lib/module/config/session-recorder.js +2 -1
- package/lib/module/config/session-recorder.js.map +1 -1
- package/lib/module/recorder/index.js +7 -18
- package/lib/module/recorder/index.js.map +1 -1
- package/lib/module/services/api.service.js +2 -2
- package/lib/module/services/api.service.js.map +1 -1
- package/lib/module/services/socket.service.js +176 -0
- package/lib/module/services/socket.service.js.map +1 -0
- package/lib/module/session-recorder.js +67 -11
- package/lib/module/session-recorder.js.map +1 -1
- package/lib/module/types/session-recorder.js.map +1 -1
- package/lib/module/types/session.js.map +1 -1
- package/lib/module/utils/logger.js +1 -1
- package/lib/typescript/src/config/constants.d.ts +3 -0
- package/lib/typescript/src/config/constants.d.ts.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/recorder/index.d.ts +3 -4
- package/lib/typescript/src/recorder/index.d.ts.map +1 -1
- package/lib/typescript/src/services/api.service.d.ts +10 -4
- package/lib/typescript/src/services/api.service.d.ts.map +1 -1
- package/lib/typescript/src/services/socket.service.d.ts +39 -0
- package/lib/typescript/src/services/socket.service.d.ts.map +1 -0
- package/lib/typescript/src/session-recorder.d.ts +17 -1
- package/lib/typescript/src/session-recorder.d.ts.map +1 -1
- package/lib/typescript/src/types/session-recorder.d.ts +12 -1
- package/lib/typescript/src/types/session-recorder.d.ts.map +1 -1
- package/lib/typescript/src/types/session.d.ts +1 -2
- package/lib/typescript/src/types/session.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/config/constants.ts +6 -0
- package/src/config/defaults.ts +29 -27
- package/src/config/session-recorder.ts +2 -0
- package/src/recorder/index.ts +8 -21
- package/src/services/api.service.ts +15 -6
- package/src/services/socket.service.ts +225 -0
- package/src/session-recorder.ts +71 -11
- package/src/types/session-recorder.ts +14 -1
- package/src/types/session.ts +3 -2
- package/src/utils/logger.ts +1 -1
- package/lib/module/recorder/eventExporter.js +0 -130
- package/lib/module/recorder/eventExporter.js.map +0 -1
- package/lib/module/types/client-type.enum.js +0 -9
- package/lib/module/types/client-type.enum.js.map +0 -1
- package/lib/typescript/src/recorder/eventExporter.d.ts +0 -25
- package/lib/typescript/src/recorder/eventExporter.d.ts.map +0 -1
- package/lib/typescript/src/types/client-type.enum.d.ts +0 -6
- package/lib/typescript/src/types/client-type.enum.d.ts.map +0 -1
- package/src/recorder/eventExporter.ts +0 -150
- package/src/types/client-type.enum.ts +0 -5
|
@@ -14,6 +14,9 @@ export const SESSION_AUTO_CREATED = 'debug-session:auto-created';
|
|
|
14
14
|
export const SESSION_ADD_EVENT = 'debug-session:rrweb:add-event';
|
|
15
15
|
export const DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE = 100000;
|
|
16
16
|
export const SESSION_RESPONSE = 'multiplayer-debug-session-response';
|
|
17
|
+
export const REMOTE_SESSION_RECORDING_START = 'remote-session-recording:start';
|
|
18
|
+
export const REMOTE_SESSION_RECORDING_STOP = 'remote-session-recording:stop';
|
|
19
|
+
export const SOCKET_SET_USER_EVENT = 'socket:set-user';
|
|
17
20
|
export const CONTINUOUS_DEBUGGING_TIMEOUT = 60000; // 1 minutes
|
|
18
21
|
|
|
19
22
|
export const DEBUG_SESSION_MAX_DURATION_SECONDS = 10 * 60 + 30; // TODO: move to shared config otel core
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["OTEL_MP_SAMPLE_TRACE_RATIO","SESSION_ID_PROP_NAME","SESSION_SHORT_ID_PROP_NAME","SESSION_STATE_PROP_NAME","SESSION_TYPE_PROP_NAME","SESSION_PROP_NAME","SESSION_STARTED_EVENT","SESSION_STOPPED_EVENT","SESSION_SUBSCRIBE_EVENT","SESSION_UNSUBSCRIBE_EVENT","SESSION_AUTO_CREATED","SESSION_ADD_EVENT","DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE","SESSION_RESPONSE","CONTINUOUS_DEBUGGING_TIMEOUT","DEBUG_SESSION_MAX_DURATION_SECONDS","OTEL_IGNORE_URLS"],"sourceRoot":"../../../src","sources":["config/constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,0BAA0B,GAAG,IAAI;AAE9C,OAAO,MAAMC,oBAAoB,GAAG,wBAAwB;AAE5D,OAAO,MAAMC,0BAA0B,GAAG,8BAA8B;AAExE,OAAO,MAAMC,uBAAuB,GAAG,2BAA2B;AAElE,OAAO,MAAMC,sBAAsB,GAAG,0BAA0B;AAEhE,OAAO,MAAMC,iBAAiB,GAAG,0BAA0B;AAE3D,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAE5D,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAE5D,OAAO,MAAMC,uBAAuB,GAAG,yBAAyB;AAEhE,OAAO,MAAMC,yBAAyB,GAAG,2BAA2B;AAEpE,OAAO,MAAMC,oBAAoB,GAAG,4BAA4B;AAEhE,OAAO,MAAMC,iBAAiB,GAAG,+BAA+B;AAEhE,OAAO,MAAMC,uCAAuC,GAAG,MAAM;AAE7D,OAAO,MAAMC,gBAAgB,GAAG,oCAAoC;AAEpE,OAAO,MAAMC,4BAA4B,GAAG,KAAK,CAAC,CAAC;;AAEnD,OAAO,MAAMC,kCAAkC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;AAEhE;AACA;AACA;;AAEA;AACA,OAAO,MAAMC,gBAAgB,GAAG;AAC9B;AACA,gBAAgB;AAChB;AACA,0CAA0C,EAC1C,gDAAgD,EAChD,kDAAkD;AAElD;AACA,qDAAqD,EACrD,2DAA2D,EAC3D,6DAA6D;AAE7D;AACA,gDAAgD;AAEhD;AACA,+CAA+C,EAC/C,8CAA8C,EAC9C,6CAA6C,EAC7C,4DAA4D,EAC5D,4DAA4D,EAC5D;;AAEA;AACA;AAAA,CACD","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["OTEL_MP_SAMPLE_TRACE_RATIO","SESSION_ID_PROP_NAME","SESSION_SHORT_ID_PROP_NAME","SESSION_STATE_PROP_NAME","SESSION_TYPE_PROP_NAME","SESSION_PROP_NAME","SESSION_STARTED_EVENT","SESSION_STOPPED_EVENT","SESSION_SUBSCRIBE_EVENT","SESSION_UNSUBSCRIBE_EVENT","SESSION_AUTO_CREATED","SESSION_ADD_EVENT","DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE","SESSION_RESPONSE","REMOTE_SESSION_RECORDING_START","REMOTE_SESSION_RECORDING_STOP","SOCKET_SET_USER_EVENT","CONTINUOUS_DEBUGGING_TIMEOUT","DEBUG_SESSION_MAX_DURATION_SECONDS","OTEL_IGNORE_URLS"],"sourceRoot":"../../../src","sources":["config/constants.ts"],"mappings":";;AAAA,OAAO,MAAMA,0BAA0B,GAAG,IAAI;AAE9C,OAAO,MAAMC,oBAAoB,GAAG,wBAAwB;AAE5D,OAAO,MAAMC,0BAA0B,GAAG,8BAA8B;AAExE,OAAO,MAAMC,uBAAuB,GAAG,2BAA2B;AAElE,OAAO,MAAMC,sBAAsB,GAAG,0BAA0B;AAEhE,OAAO,MAAMC,iBAAiB,GAAG,0BAA0B;AAE3D,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAE5D,OAAO,MAAMC,qBAAqB,GAAG,uBAAuB;AAE5D,OAAO,MAAMC,uBAAuB,GAAG,yBAAyB;AAEhE,OAAO,MAAMC,yBAAyB,GAAG,2BAA2B;AAEpE,OAAO,MAAMC,oBAAoB,GAAG,4BAA4B;AAEhE,OAAO,MAAMC,iBAAiB,GAAG,+BAA+B;AAEhE,OAAO,MAAMC,uCAAuC,GAAG,MAAM;AAE7D,OAAO,MAAMC,gBAAgB,GAAG,oCAAoC;AAEpE,OAAO,MAAMC,8BAA8B,GAAG,gCAAgC;AAE9E,OAAO,MAAMC,6BAA6B,GAAG,+BAA+B;AAE5E,OAAO,MAAMC,qBAAqB,GAAG,iBAAiB;AAEtD,OAAO,MAAMC,4BAA4B,GAAG,KAAK,CAAC,CAAC;;AAEnD,OAAO,MAAMC,kCAAkC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;AAEhE;AACA;AACA;;AAEA;AACA,OAAO,MAAMC,gBAAgB,GAAG;AAC9B;AACA,gBAAgB;AAChB;AACA,0CAA0C,EAC1C,gDAAgD,EAChD,kDAAkD;AAElD;AACA,qDAAqD,EACrD,2DAA2D,EAC3D,6DAA6D;AAE7D;AACA,gDAAgD;AAEhD;AACA,+CAA+C,EAC/C,8CAA8C,EAC9C,6CAA6C,EAC7C,4DAA4D,EAC5D,4DAA4D,EAC5D;;AAEA;AACA;AAAA,CACD","ignoreList":[]}
|
|
@@ -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"],"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,IAAI;EACpBC,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"],"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,IAAI;EACpBC,kBAAkB,EAAE;AACtB,CAAC;AAED,OAAO,MAAMC,0BAA6E,GAC1F;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;AAED,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;AAChB,CAAC","ignoreList":[]}
|
|
@@ -38,7 +38,8 @@ export const getSessionRecorderConfig = c => {
|
|
|
38
38
|
recordNavigation: isValidBoolean(c.recordNavigation, BASE_CONFIG.recordNavigation),
|
|
39
39
|
masking: getMaskingConfig(c.masking),
|
|
40
40
|
widget: getWidgetConfig(c.widget),
|
|
41
|
-
logger: getLoggerConfig(c.logger)
|
|
41
|
+
logger: getLoggerConfig(c.logger),
|
|
42
|
+
useWebsocket: isValidBoolean(c.useWebsocket, BASE_CONFIG.useWebsocket)
|
|
42
43
|
};
|
|
43
44
|
};
|
|
44
45
|
//# sourceMappingURL=session-recorder.js.map
|
|
@@ -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"],"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"],"sourceRoot":"../../../src","sources":["config/session-recorder.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { SessionType } from '@multiplayer-app/session-recorder-common';
|
|
4
4
|
// import { pack } from '@rrweb/packer' // Removed to avoid blob creation issues in Hermes
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
import { logger } from "../utils/index.js";
|
|
7
7
|
import { ScreenRecorder } from "./screenRecorder.js";
|
|
8
8
|
import { GestureRecorder } from "./gestureRecorder.js";
|
|
@@ -16,24 +16,13 @@ export class RecorderReactNativeSDK {
|
|
|
16
16
|
this.screenRecorder = new ScreenRecorder();
|
|
17
17
|
this.gestureRecorder = new GestureRecorder();
|
|
18
18
|
this.navigationTracker = new NavigationTracker();
|
|
19
|
-
this.exporter = new EventExporter({
|
|
20
|
-
socketUrl: '',
|
|
21
|
-
apiKey: ''
|
|
22
|
-
});
|
|
23
19
|
}
|
|
24
|
-
init(config) {
|
|
20
|
+
init(config, socketService) {
|
|
25
21
|
this.config = config;
|
|
22
|
+
this.socketService = socketService;
|
|
26
23
|
this.screenRecorder.init(config, this);
|
|
27
24
|
this.navigationTracker.init(config, this.screenRecorder);
|
|
28
25
|
this.gestureRecorder.init(config, this, this.screenRecorder);
|
|
29
|
-
this.exporter.setApiKey(config.apiKey);
|
|
30
|
-
this.exporter.setSocketUrl(config.apiBaseUrl);
|
|
31
|
-
}
|
|
32
|
-
setApiKey(apiKey) {
|
|
33
|
-
this.exporter.setApiKey(apiKey);
|
|
34
|
-
}
|
|
35
|
-
setSocketUrl(socketUrl) {
|
|
36
|
-
this.exporter.setSocketUrl(socketUrl);
|
|
37
26
|
}
|
|
38
27
|
start(sessionId, sessionType) {
|
|
39
28
|
if (!this.config) {
|
|
@@ -60,7 +49,7 @@ export class RecorderReactNativeSDK {
|
|
|
60
49
|
this.gestureRecorder.stop();
|
|
61
50
|
this.navigationTracker.stop();
|
|
62
51
|
this.screenRecorder.stop();
|
|
63
|
-
this.
|
|
52
|
+
this.socketService?.close();
|
|
64
53
|
}
|
|
65
54
|
setNavigationRef(ref) {
|
|
66
55
|
this.navigationTracker.setNavigationRef(ref);
|
|
@@ -82,11 +71,11 @@ export class RecorderReactNativeSDK {
|
|
|
82
71
|
if (!this.isRecording) {
|
|
83
72
|
return;
|
|
84
73
|
}
|
|
85
|
-
if (this.
|
|
86
|
-
logger.debug('RecorderReactNativeSDK', 'Sending to
|
|
74
|
+
if (this.socketService) {
|
|
75
|
+
logger.debug('RecorderReactNativeSDK', 'Sending to socket service', event);
|
|
87
76
|
// Skip packing to avoid blob creation issues in Hermes
|
|
88
77
|
// const packedEvent = pack(event)
|
|
89
|
-
this.
|
|
78
|
+
this.socketService.send({
|
|
90
79
|
event: event,
|
|
91
80
|
// Send raw event instead of packed
|
|
92
81
|
eventType: event.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SessionType","
|
|
1
|
+
{"version":3,"names":["SessionType","logger","ScreenRecorder","GestureRecorder","NavigationTracker","RecorderReactNativeSDK","isRecording","recordedEvents","sessionId","sessionType","MANUAL","constructor","screenRecorder","gestureRecorder","navigationTracker","init","config","socketService","start","Error","recordScreen","recordGestures","recordNavigation","stop","close","setNavigationRef","ref","setViewShotRef","recordEvent","event","debug","send","eventType","type","timestamp","debugSessionId","debugSessionType","recordTouchStart","x","y","target","pressure","recordTouchMove","recordTouchEnd","getRecordedEvents","clearRecordedEvents","getRecordingStats","totalEvents","length"],"sourceRoot":"../../../src","sources":["recorder/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -140,8 +140,8 @@ export class ApiService {
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
/**
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
* Check debug session should be started remotely
|
|
144
|
+
*/
|
|
145
145
|
async checkRemoteSession(requestBody, signal) {
|
|
146
146
|
return this.makeRequest('/remote-debug-session/check', 'POST', requestBody, signal);
|
|
147
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ApiService","baseUrl","constructor","config","apiKey","apiBaseUrl","exporterEndpoint","init","updateConfigs","setApiKey","makeRequest","path","method","body","signal","url","params","JSON","stringify","headers","response","fetch","ok","Error","statusText","status","json","error","name","message","startSession","request","res","stopSession","sessionId","cancelSession","startContinuousDebugSession","saveContinuousDebugSession","stopContinuousDebugSession","checkRemoteSession","requestBody"],"sourceRoot":"../../../src","sources":["services/api.service.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"names":["ApiService","baseUrl","constructor","config","apiKey","apiBaseUrl","exporterEndpoint","init","updateConfigs","setApiKey","makeRequest","path","method","body","signal","url","params","JSON","stringify","headers","response","fetch","ok","Error","statusText","status","json","error","name","message","startSession","request","res","stopSession","sessionId","cancelSession","startContinuousDebugSession","saveContinuousDebugSession","stopContinuousDebugSession","checkRemoteSession","requestBody"],"sourceRoot":"../../../src","sources":["services/api.service.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import io from 'socket.io-client';
|
|
4
|
+
import { Observable } from 'lib0/observable';
|
|
5
|
+
import { logger } from "../utils/index.js";
|
|
6
|
+
import { SESSION_ADD_EVENT, SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, SESSION_SUBSCRIBE_EVENT, SESSION_UNSUBSCRIBE_EVENT, SOCKET_SET_USER_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP, SESSION_STARTED_EVENT } from "../config/index.js";
|
|
7
|
+
const MAX_RECONNECTION_ATTEMPTS = 2;
|
|
8
|
+
export class SocketService extends Observable {
|
|
9
|
+
socket = null;
|
|
10
|
+
queue = [];
|
|
11
|
+
isConnecting = false;
|
|
12
|
+
isConnected = false;
|
|
13
|
+
attempts = 0;
|
|
14
|
+
sessionId = null;
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
this.options = {
|
|
18
|
+
apiKey: '',
|
|
19
|
+
socketUrl: '',
|
|
20
|
+
keepAlive: false
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the socket service
|
|
26
|
+
* @param config - Socket service configuration
|
|
27
|
+
*/
|
|
28
|
+
init(config) {
|
|
29
|
+
this.options = {
|
|
30
|
+
...this.options,
|
|
31
|
+
...config
|
|
32
|
+
};
|
|
33
|
+
if (this.options.keepAlive && this.options.socketUrl && this.options.apiKey) {
|
|
34
|
+
this._initConnection();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Update the socket service configuration
|
|
40
|
+
* @param config - Partial configuration to update
|
|
41
|
+
*/
|
|
42
|
+
updateConfigs(config) {
|
|
43
|
+
// If any config changed, reconnect if connected
|
|
44
|
+
const hasChanges = Object.keys(config).some(key => {
|
|
45
|
+
const typedKey = key;
|
|
46
|
+
return config[typedKey] !== undefined && config[typedKey] !== this.options[typedKey];
|
|
47
|
+
});
|
|
48
|
+
if (hasChanges) {
|
|
49
|
+
this.options = {
|
|
50
|
+
...this.options,
|
|
51
|
+
...config
|
|
52
|
+
};
|
|
53
|
+
if (this.socket?.connected) {
|
|
54
|
+
this.close().then(() => {
|
|
55
|
+
if (this.options.keepAlive && this.options.socketUrl && this.options.apiKey) {
|
|
56
|
+
this._initConnection();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
_initConnection() {
|
|
63
|
+
if (this.isConnecting || this.isConnected) return;
|
|
64
|
+
this.attempts++;
|
|
65
|
+
this.isConnecting = true;
|
|
66
|
+
this.socket = io(this.options.socketUrl, {
|
|
67
|
+
path: '/v0/radar/ws',
|
|
68
|
+
auth: {
|
|
69
|
+
'x-api-key': this.options.apiKey
|
|
70
|
+
},
|
|
71
|
+
reconnectionAttempts: 2,
|
|
72
|
+
transports: ['websocket']
|
|
73
|
+
});
|
|
74
|
+
this.socket.on('ready', () => {
|
|
75
|
+
this.isConnecting = false;
|
|
76
|
+
this.isConnected = true;
|
|
77
|
+
logger.info('SocketService', 'Connected to server');
|
|
78
|
+
this.flushQueue();
|
|
79
|
+
});
|
|
80
|
+
this.socket.on('disconnect', _err => {
|
|
81
|
+
this.isConnecting = false;
|
|
82
|
+
this.isConnected = false;
|
|
83
|
+
logger.info('SocketService', 'Disconnected from server');
|
|
84
|
+
});
|
|
85
|
+
this.socket.on('connect_error', err => {
|
|
86
|
+
this.isConnecting = false;
|
|
87
|
+
this.isConnected = false;
|
|
88
|
+
this.checkReconnectionAttempts();
|
|
89
|
+
logger.error('SocketService', 'Error connecting to server', err);
|
|
90
|
+
});
|
|
91
|
+
this.socket.on(SESSION_STOPPED_EVENT, data => {
|
|
92
|
+
this.emit(SESSION_STOPPED_EVENT, [data]);
|
|
93
|
+
});
|
|
94
|
+
this.socket.on(SESSION_AUTO_CREATED, data => {
|
|
95
|
+
this.emit(SESSION_AUTO_CREATED, [data]);
|
|
96
|
+
});
|
|
97
|
+
this.socket.on(REMOTE_SESSION_RECORDING_START, data => {
|
|
98
|
+
this.emit(REMOTE_SESSION_RECORDING_START, [data]);
|
|
99
|
+
});
|
|
100
|
+
this.socket.on(REMOTE_SESSION_RECORDING_STOP, data => {
|
|
101
|
+
this.emit(REMOTE_SESSION_RECORDING_STOP, [data]);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
checkReconnectionAttempts() {
|
|
105
|
+
if (this.attempts >= MAX_RECONNECTION_ATTEMPTS) {
|
|
106
|
+
this.flushQueue();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
emitSocketEvent(name, data) {
|
|
110
|
+
if (this.socket?.connected) {
|
|
111
|
+
this.socket.emit(name, data);
|
|
112
|
+
} else {
|
|
113
|
+
this.queue.push({
|
|
114
|
+
data,
|
|
115
|
+
name
|
|
116
|
+
});
|
|
117
|
+
this._initConnection();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
flushQueue() {
|
|
121
|
+
while (this.queue.length > 0 && this.socket?.connected) {
|
|
122
|
+
const event = this.queue.shift();
|
|
123
|
+
if (!event) continue;
|
|
124
|
+
if (this.socket?.connected) {
|
|
125
|
+
this.socket.emit(event.name, event.data);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
send(event) {
|
|
130
|
+
this.emitSocketEvent(SESSION_ADD_EVENT, event);
|
|
131
|
+
}
|
|
132
|
+
subscribeToSession(session) {
|
|
133
|
+
this.sessionId = session.shortId || session._id;
|
|
134
|
+
const payload = {
|
|
135
|
+
projectId: session.project,
|
|
136
|
+
workspaceId: session.workspace,
|
|
137
|
+
debugSessionId: this.sessionId,
|
|
138
|
+
sessionType: session.creationType
|
|
139
|
+
};
|
|
140
|
+
this.emitSocketEvent(SESSION_SUBSCRIBE_EVENT, payload);
|
|
141
|
+
this.emitSocketEvent(SESSION_STARTED_EVENT, {
|
|
142
|
+
debugSessionId: this.sessionId
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
unsubscribeFromSession(stopSession) {
|
|
146
|
+
if (this.sessionId) {
|
|
147
|
+
this.emitSocketEvent(SESSION_UNSUBSCRIBE_EVENT, {
|
|
148
|
+
debugSessionId: this.sessionId
|
|
149
|
+
});
|
|
150
|
+
if (stopSession) {
|
|
151
|
+
this.emitSocketEvent(SESSION_STOPPED_EVENT, {});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
setUser(userAttributes) {
|
|
156
|
+
this.emitSocketEvent(SOCKET_SET_USER_EVENT, userAttributes);
|
|
157
|
+
}
|
|
158
|
+
close() {
|
|
159
|
+
return new Promise(resolve => {
|
|
160
|
+
if (this.socket?.connected) {
|
|
161
|
+
setTimeout(() => {
|
|
162
|
+
this.unsubscribeFromSession();
|
|
163
|
+
this.attempts = 0;
|
|
164
|
+
this.isConnected = false;
|
|
165
|
+
this.isConnecting = false;
|
|
166
|
+
this.socket?.disconnect();
|
|
167
|
+
this.socket = null;
|
|
168
|
+
resolve();
|
|
169
|
+
}, 500);
|
|
170
|
+
} else {
|
|
171
|
+
resolve();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=socket.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["io","Observable","logger","SESSION_ADD_EVENT","SESSION_AUTO_CREATED","SESSION_STOPPED_EVENT","SESSION_SUBSCRIBE_EVENT","SESSION_UNSUBSCRIBE_EVENT","SOCKET_SET_USER_EVENT","REMOTE_SESSION_RECORDING_START","REMOTE_SESSION_RECORDING_STOP","SESSION_STARTED_EVENT","MAX_RECONNECTION_ATTEMPTS","SocketService","socket","queue","isConnecting","isConnected","attempts","sessionId","constructor","options","apiKey","socketUrl","keepAlive","init","config","_initConnection","updateConfigs","hasChanges","Object","keys","some","key","typedKey","undefined","connected","close","then","path","auth","reconnectionAttempts","transports","on","info","flushQueue","_err","err","checkReconnectionAttempts","error","data","emit","emitSocketEvent","name","push","length","event","shift","send","subscribeToSession","session","shortId","_id","payload","projectId","project","workspaceId","workspace","debugSessionId","sessionType","creationType","unsubscribeFromSession","stopSession","setUser","userAttributes","Promise","resolve","setTimeout","disconnect"],"sourceRoot":"../../../src","sources":["services/socket.service.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,14 +6,17 @@ import { TracerReactNativeSDK } from "./otel/index.js";
|
|
|
6
6
|
import { RecorderReactNativeSDK } from "./recorder/index.js";
|
|
7
7
|
import { logger } from "./utils/index.js";
|
|
8
8
|
import { SessionState } from "./types/index.js";
|
|
9
|
+
import { SESSION_STOPPED_EVENT, REMOTE_SESSION_RECORDING_START, REMOTE_SESSION_RECORDING_STOP } from "./config/index.js";
|
|
9
10
|
import { getFormattedDate, isSessionActive, getNavigatorInfo } from "./utils/index.js";
|
|
10
11
|
import { setShouldRecordHttpData, setMaxCapturingHttpPayloadSize } from "./patch/index.js";
|
|
11
12
|
import { BASE_CONFIG, getSessionRecorderConfig } from "./config/index.js";
|
|
12
13
|
import { StorageService } from "./services/storage.service.js";
|
|
13
14
|
import { NetworkService } from "./services/network.service.js";
|
|
14
15
|
import { ApiService } from "./services/api.service.js";
|
|
16
|
+
import { SocketService } from "./services/socket.service.js";
|
|
15
17
|
class SessionRecorder extends Observable {
|
|
16
18
|
_apiService = new ApiService();
|
|
19
|
+
_socketService = new SocketService();
|
|
17
20
|
_tracer = new TracerReactNativeSDK();
|
|
18
21
|
_recorder = new RecorderReactNativeSDK();
|
|
19
22
|
_storageService = StorageService.getInstance();
|
|
@@ -79,6 +82,7 @@ class SessionRecorder extends Observable {
|
|
|
79
82
|
set sessionAttributes(attributes) {
|
|
80
83
|
this._sessionAttributes = attributes;
|
|
81
84
|
}
|
|
85
|
+
_userAttributes = undefined;
|
|
82
86
|
|
|
83
87
|
/**
|
|
84
88
|
* Error message getter and setter
|
|
@@ -162,16 +166,44 @@ class SessionRecorder extends Observable {
|
|
|
162
166
|
setMaxCapturingHttpPayloadSize(this._configs.maxCapturingHttpPayloadSize);
|
|
163
167
|
setShouldRecordHttpData(this._configs.captureBody, this._configs.captureHeaders);
|
|
164
168
|
this._tracer.init(this._configs);
|
|
165
|
-
this._recorder.init(this._configs);
|
|
166
169
|
this._apiService.init(this._configs);
|
|
170
|
+
this._socketService.init({
|
|
171
|
+
apiKey: this._configs.apiKey,
|
|
172
|
+
socketUrl: this._configs.apiBaseUrl,
|
|
173
|
+
keepAlive: this._configs.useWebsocket
|
|
174
|
+
});
|
|
175
|
+
this._recorder.init(this._configs, this._socketService);
|
|
167
176
|
await this._networkService.init();
|
|
168
177
|
this._setupNetworkCallbacks();
|
|
178
|
+
this._registerSocketServiceListeners();
|
|
169
179
|
if (this.sessionId && (this.sessionState === SessionState.started || this.sessionState === SessionState.paused)) {
|
|
170
180
|
this._start();
|
|
171
181
|
}
|
|
172
182
|
this.emit('init', []);
|
|
173
183
|
}
|
|
174
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Register socket service event listeners
|
|
187
|
+
*/
|
|
188
|
+
_registerSocketServiceListeners() {
|
|
189
|
+
this._socketService.on(SESSION_STOPPED_EVENT, () => {
|
|
190
|
+
this._stop();
|
|
191
|
+
this._clearSession();
|
|
192
|
+
});
|
|
193
|
+
this._socketService.on(REMOTE_SESSION_RECORDING_START, payload => {
|
|
194
|
+
logger.info('SessionRecorder', 'Remote session recording started', payload);
|
|
195
|
+
if (this.sessionState === SessionState.stopped) {
|
|
196
|
+
this.start();
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
this._socketService.on(REMOTE_SESSION_RECORDING_STOP, payload => {
|
|
200
|
+
logger.info('SessionRecorder', 'Remote session recording stopped', payload);
|
|
201
|
+
if (this.sessionState !== SessionState.stopped) {
|
|
202
|
+
this.stop();
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
175
207
|
/**
|
|
176
208
|
* Setup network state change callbacks
|
|
177
209
|
*/
|
|
@@ -296,11 +328,9 @@ class SessionRecorder extends Observable {
|
|
|
296
328
|
const res = await this._apiService.saveContinuousDebugSession(this.sessionId, {
|
|
297
329
|
sessionAttributes: this.sessionAttributes,
|
|
298
330
|
resourceAttributes: getNavigatorInfo(),
|
|
331
|
+
userAttributes: this._userAttributes,
|
|
299
332
|
stoppedAt: Date.now(),
|
|
300
|
-
name: this.
|
|
301
|
-
month: 'short',
|
|
302
|
-
day: 'numeric'
|
|
303
|
-
})}` : `Session on ${getFormattedDate(Date.now())}`
|
|
333
|
+
name: this._getSessionName()
|
|
304
334
|
});
|
|
305
335
|
return res;
|
|
306
336
|
} catch (error) {
|
|
@@ -316,6 +346,15 @@ class SessionRecorder extends Observable {
|
|
|
316
346
|
this._sessionAttributes = attributes;
|
|
317
347
|
}
|
|
318
348
|
|
|
349
|
+
/**
|
|
350
|
+
* Set the user attributes
|
|
351
|
+
* @param userAttributes - the user attributes to set
|
|
352
|
+
*/
|
|
353
|
+
setUserAttributes(userAttributes) {
|
|
354
|
+
this._userAttributes = userAttributes;
|
|
355
|
+
this._socketService.setUser(this._userAttributes);
|
|
356
|
+
}
|
|
357
|
+
|
|
319
358
|
/**
|
|
320
359
|
* @description Check if session should be started/stopped automatically
|
|
321
360
|
* @param {ISession} [sessionPayload]
|
|
@@ -334,7 +373,8 @@ class SessionRecorder extends Observable {
|
|
|
334
373
|
resourceAttributes: {
|
|
335
374
|
...getNavigatorInfo(),
|
|
336
375
|
...(sessionPayload?.resourceAttributes || {})
|
|
337
|
-
}
|
|
376
|
+
},
|
|
377
|
+
userAttributes: this._userAttributes
|
|
338
378
|
};
|
|
339
379
|
const {
|
|
340
380
|
state
|
|
@@ -359,10 +399,8 @@ class SessionRecorder extends Observable {
|
|
|
359
399
|
const payload = {
|
|
360
400
|
sessionAttributes: this.sessionAttributes,
|
|
361
401
|
resourceAttributes: getNavigatorInfo(),
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
day: 'numeric'
|
|
365
|
-
})}` : `Session on ${getFormattedDate(Date.now())}`
|
|
402
|
+
userAttributes: this._userAttributes,
|
|
403
|
+
name: this._getSessionName()
|
|
366
404
|
};
|
|
367
405
|
const request = !this.continuousRecording ? payload : {
|
|
368
406
|
debugSessionData: payload
|
|
@@ -390,6 +428,9 @@ class SessionRecorder extends Observable {
|
|
|
390
428
|
if (this.sessionId) {
|
|
391
429
|
this._tracer.start(this.sessionId, this.sessionType);
|
|
392
430
|
this._recorder.start(this.sessionId, this.sessionType);
|
|
431
|
+
if (this.session) {
|
|
432
|
+
this._socketService.subscribeToSession(this.session);
|
|
433
|
+
}
|
|
393
434
|
}
|
|
394
435
|
}
|
|
395
436
|
|
|
@@ -398,6 +439,7 @@ class SessionRecorder extends Observable {
|
|
|
398
439
|
*/
|
|
399
440
|
_stop() {
|
|
400
441
|
this.sessionState = SessionState.stopped;
|
|
442
|
+
this._socketService.unsubscribeFromSession(true);
|
|
401
443
|
this._tracer.shutdown();
|
|
402
444
|
this._recorder.stop();
|
|
403
445
|
}
|
|
@@ -425,8 +467,10 @@ class SessionRecorder extends Observable {
|
|
|
425
467
|
if (configureExporters && session.tempApiKey) {
|
|
426
468
|
this._configs.apiKey = session.tempApiKey;
|
|
427
469
|
this._tracer.setApiKey(session.tempApiKey);
|
|
428
|
-
this._recorder.setApiKey(session.tempApiKey);
|
|
429
470
|
this._apiService.setApiKey(session.tempApiKey);
|
|
471
|
+
this._socketService.updateConfigs({
|
|
472
|
+
apiKey: session.tempApiKey
|
|
473
|
+
});
|
|
430
474
|
}
|
|
431
475
|
this._setSession(session);
|
|
432
476
|
this._start();
|
|
@@ -581,6 +625,18 @@ class SessionRecorder extends Observable {
|
|
|
581
625
|
};
|
|
582
626
|
}
|
|
583
627
|
}
|
|
628
|
+
|
|
629
|
+
/**
|
|
630
|
+
* Get the session name
|
|
631
|
+
* @returns the session name
|
|
632
|
+
*/
|
|
633
|
+
_getSessionName(date = new Date()) {
|
|
634
|
+
const userName = this.sessionAttributes?.userName || this._userAttributes?.userName || this._userAttributes?.name || '';
|
|
635
|
+
return userName ? `${userName}'s session on ${getFormattedDate(date, {
|
|
636
|
+
month: 'short',
|
|
637
|
+
day: 'numeric'
|
|
638
|
+
})}` : `Session on ${getFormattedDate(date)}`;
|
|
639
|
+
}
|
|
584
640
|
}
|
|
585
641
|
export default new SessionRecorder();
|
|
586
642
|
//# sourceMappingURL=session-recorder.js.map
|