@multiplayer-app/session-recorder-browser 1.3.16 → 1.3.17-session-buffering.0
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/dist/browser/index.js +1224 -174
- package/dist/config/constants.d.ts +1 -0
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/session-recorder.d.ts.map +1 -1
- package/dist/config/session-recorder.js +6 -1
- package/dist/config/session-recorder.js.map +1 -1
- package/dist/exporters/index.js +1 -1
- package/dist/exporters/index.js.LICENSE.txt +2 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/index.js +1216 -175
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1214 -174
- package/dist/index.umd.js.map +1 -1
- package/dist/otel/index.d.ts +7 -1
- package/dist/otel/index.d.ts.map +1 -1
- package/dist/otel/index.js +63 -3
- package/dist/otel/index.js.map +1 -1
- package/dist/patch/fetch.js +2 -2
- package/dist/patch/fetch.js.map +1 -1
- package/dist/rrweb/index.d.ts +50 -17
- package/dist/rrweb/index.d.ts.map +1 -1
- package/dist/rrweb/index.js +158 -84
- package/dist/rrweb/index.js.map +1 -1
- package/dist/services/crashBuffer.service.d.ts +60 -0
- package/dist/services/crashBuffer.service.d.ts.map +1 -0
- package/dist/services/crashBuffer.service.js +161 -0
- package/dist/services/crashBuffer.service.js.map +1 -0
- package/dist/services/indexedDb.service.d.ts +72 -0
- package/dist/services/indexedDb.service.d.ts.map +1 -0
- package/dist/services/indexedDb.service.js +335 -0
- package/dist/services/indexedDb.service.js.map +1 -0
- package/dist/services/socket.service.d.ts +3 -2
- package/dist/services/socket.service.d.ts.map +1 -1
- package/dist/services/socket.service.js +8 -1
- package/dist/services/socket.service.js.map +1 -1
- package/dist/session-recorder.d.ts +12 -1
- package/dist/session-recorder.d.ts.map +1 -1
- package/dist/session-recorder.js +155 -7
- package/dist/session-recorder.js.map +1 -1
- package/dist/types/session-recorder.d.ts +20 -0
- package/dist/types/session-recorder.d.ts.map +1 -1
- package/dist/types/session-recorder.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/storage.d.ts +4 -1
- package/dist/utils/storage.d.ts.map +1 -1
- package/dist/utils/storage.js +35 -13
- package/dist/utils/storage.js.map +1 -1
- package/dist/utils/tabId.d.ts +2 -0
- package/dist/utils/tabId.d.ts.map +1 -0
- package/dist/utils/tabId.js +22 -0
- package/dist/utils/tabId.js.map +1 -0
- package/package.json +2 -2
- package/dist/rrweb/indexedDbService.d.ts +0 -9
- package/dist/rrweb/indexedDbService.d.ts.map +0 -1
- package/dist/rrweb/indexedDbService.js +0 -54
- package/dist/rrweb/indexedDbService.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -24121,6 +24121,7 @@ module.exports = {
|
|
|
24121
24121
|
/* harmony export */ SESSION_ID_PROP_NAME: () => (/* binding */ SESSION_ID_PROP_NAME),
|
|
24122
24122
|
/* harmony export */ SESSION_PROP_NAME: () => (/* binding */ SESSION_PROP_NAME),
|
|
24123
24123
|
/* harmony export */ SESSION_RESPONSE: () => (/* binding */ SESSION_RESPONSE),
|
|
24124
|
+
/* harmony export */ SESSION_SAVE_BUFFER_EVENT: () => (/* binding */ SESSION_SAVE_BUFFER_EVENT),
|
|
24124
24125
|
/* harmony export */ SESSION_STARTED_EVENT: () => (/* binding */ SESSION_STARTED_EVENT),
|
|
24125
24126
|
/* harmony export */ SESSION_STATE_PROP_NAME: () => (/* binding */ SESSION_STATE_PROP_NAME),
|
|
24126
24127
|
/* harmony export */ SESSION_STOPPED_EVENT: () => (/* binding */ SESSION_STOPPED_EVENT),
|
|
@@ -24142,6 +24143,8 @@ const SESSION_SUBSCRIBE_EVENT = 'debug-session:subscribe';
|
|
|
24142
24143
|
const SESSION_UNSUBSCRIBE_EVENT = 'debug-session:unsubscribe';
|
|
24143
24144
|
const SESSION_AUTO_CREATED = 'debug-session:auto-created';
|
|
24144
24145
|
const SESSION_ADD_EVENT = 'debug-session:rrweb:add-event';
|
|
24146
|
+
// Backend-triggered flush of client-side crash buffer
|
|
24147
|
+
const SESSION_SAVE_BUFFER_EVENT = 'debug-session:save-buffer';
|
|
24145
24148
|
const SOCKET_SET_USER_EVENT = 'socket:set-user';
|
|
24146
24149
|
const DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE = 100000;
|
|
24147
24150
|
const SESSION_RESPONSE = 'multiplayer-debug-session-response';
|
|
@@ -24149,7 +24152,7 @@ const CONTINUOUS_DEBUGGING_TIMEOUT = 60000; // 1 minutes
|
|
|
24149
24152
|
const DEBUG_SESSION_MAX_DURATION_SECONDS = 10 * 60 + 30; // TODO: move to shared config otel core
|
|
24150
24153
|
const REMOTE_SESSION_RECORDING_START = 'remote-session-recording:start';
|
|
24151
24154
|
const REMOTE_SESSION_RECORDING_STOP = 'remote-session-recording:stop';
|
|
24152
|
-
const PACKAGE_VERSION_EXPORT = "1.3.
|
|
24155
|
+
const PACKAGE_VERSION_EXPORT = "1.3.17-session-buffering.0" || 0;
|
|
24153
24156
|
// Regex patterns for OpenTelemetry ignore URLs
|
|
24154
24157
|
const OTEL_IGNORE_URLS = [
|
|
24155
24158
|
// Traces endpoint
|
|
@@ -24244,6 +24247,11 @@ const BASE_CONFIG = {
|
|
|
24244
24247
|
masking: DEFAULT_MASKING_CONFIG,
|
|
24245
24248
|
widgetTextOverrides: DEFAULT_WIDGET_TEXT_CONFIG,
|
|
24246
24249
|
useWebsocket: true,
|
|
24250
|
+
buffering: {
|
|
24251
|
+
enabled: true,
|
|
24252
|
+
windowMinutes: 1,
|
|
24253
|
+
snapshotIntervalMs: 30000,
|
|
24254
|
+
},
|
|
24247
24255
|
};
|
|
24248
24256
|
|
|
24249
24257
|
|
|
@@ -24268,6 +24276,7 @@ const BASE_CONFIG = {
|
|
|
24268
24276
|
/* harmony export */ SESSION_ID_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_ID_PROP_NAME),
|
|
24269
24277
|
/* harmony export */ SESSION_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_PROP_NAME),
|
|
24270
24278
|
/* harmony export */ SESSION_RESPONSE: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_RESPONSE),
|
|
24279
|
+
/* harmony export */ SESSION_SAVE_BUFFER_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_SAVE_BUFFER_EVENT),
|
|
24271
24280
|
/* harmony export */ SESSION_STARTED_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_STARTED_EVENT),
|
|
24272
24281
|
/* harmony export */ SESSION_STATE_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_STATE_PROP_NAME),
|
|
24273
24282
|
/* harmony export */ SESSION_STOPPED_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_STOPPED_EVENT),
|
|
@@ -24382,7 +24391,7 @@ const getWidgetTextOverridesConfig = (config, defaultConfig) => {
|
|
|
24382
24391
|
};
|
|
24383
24392
|
};
|
|
24384
24393
|
const getSessionRecorderConfig = (c) => {
|
|
24385
|
-
var _a;
|
|
24394
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
24386
24395
|
if (!c) {
|
|
24387
24396
|
return _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG;
|
|
24388
24397
|
}
|
|
@@ -24409,6 +24418,11 @@ const getSessionRecorderConfig = (c) => {
|
|
|
24409
24418
|
masking: (0,_masking__WEBPACK_IMPORTED_MODULE_2__.getMaskingConfig)(c.masking),
|
|
24410
24419
|
widgetTextOverrides: getWidgetTextOverridesConfig(c.widgetTextOverrides, _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG.widgetTextOverrides),
|
|
24411
24420
|
useWebsocket: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidBoolean)(c.useWebsocket, (_a = _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG.useWebsocket) !== null && _a !== void 0 ? _a : false),
|
|
24421
|
+
buffering: {
|
|
24422
|
+
enabled: (_c = (_b = c.buffering) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG.buffering.enabled,
|
|
24423
|
+
windowMinutes: (_e = (_d = c.buffering) === null || _d === void 0 ? void 0 : _d.windowMinutes) !== null && _e !== void 0 ? _e : _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG.buffering.windowMinutes,
|
|
24424
|
+
snapshotIntervalMs: (_g = (_f = c.buffering) === null || _f === void 0 ? void 0 : _f.snapshotIntervalMs) !== null && _g !== void 0 ? _g : _defaults__WEBPACK_IMPORTED_MODULE_1__.BASE_CONFIG.buffering.snapshotIntervalMs,
|
|
24425
|
+
},
|
|
24412
24426
|
};
|
|
24413
24427
|
};
|
|
24414
24428
|
|
|
@@ -25049,14 +25063,19 @@ const getElementTextContent = (element) => {
|
|
|
25049
25063
|
class TracerBrowserSDK {
|
|
25050
25064
|
constructor() {
|
|
25051
25065
|
this.sessionId = '';
|
|
25066
|
+
this.clientId = '';
|
|
25052
25067
|
this.globalErrorListenersRegistered = false;
|
|
25053
25068
|
}
|
|
25054
|
-
setSessionId(sessionId, sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.
|
|
25069
|
+
setSessionId(sessionId, sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL) {
|
|
25055
25070
|
this.sessionId = sessionId;
|
|
25056
|
-
this.idGenerator
|
|
25071
|
+
if (!this.idGenerator) {
|
|
25072
|
+
throw new Error('Id generator not initialized');
|
|
25073
|
+
}
|
|
25074
|
+
this.idGenerator.setSessionId(sessionId, sessionType, this.clientId);
|
|
25057
25075
|
}
|
|
25058
25076
|
init(options) {
|
|
25059
25077
|
this.config = options;
|
|
25078
|
+
this.clientId = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderSdk.getIdGenerator(_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH)();
|
|
25060
25079
|
const { application, version, environment } = this.config;
|
|
25061
25080
|
this.idGenerator = new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderIdGenerator();
|
|
25062
25081
|
this.exporter = new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderBrowserTraceExporter({
|
|
@@ -25074,6 +25093,7 @@ class TracerBrowserSDK {
|
|
|
25074
25093
|
sampler: new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderTraceIdRatioBasedSampler(this.config.sampleTraceRatio),
|
|
25075
25094
|
spanProcessors: [
|
|
25076
25095
|
this._getSpanSessionIdProcessor(),
|
|
25096
|
+
this._getCrashBufferSpanProcessor(),
|
|
25077
25097
|
new _opentelemetry_sdk_trace_base__WEBPACK_IMPORTED_MODULE_7__.BatchSpanProcessor(this.exporter),
|
|
25078
25098
|
],
|
|
25079
25099
|
});
|
|
@@ -25190,6 +25210,60 @@ class TracerBrowserSDK {
|
|
|
25190
25210
|
});
|
|
25191
25211
|
this._registerGlobalErrorListeners();
|
|
25192
25212
|
}
|
|
25213
|
+
setCrashBuffer(crashBuffer) {
|
|
25214
|
+
this.crashBuffer = crashBuffer;
|
|
25215
|
+
}
|
|
25216
|
+
_getCrashBufferSpanProcessor() {
|
|
25217
|
+
return {
|
|
25218
|
+
onStart: () => { },
|
|
25219
|
+
onEnd: (span) => {
|
|
25220
|
+
// Only buffer spans when we don't have an active debug session.
|
|
25221
|
+
if (this.sessionId)
|
|
25222
|
+
return;
|
|
25223
|
+
if (!this.crashBuffer)
|
|
25224
|
+
return;
|
|
25225
|
+
try {
|
|
25226
|
+
const now = Date.now();
|
|
25227
|
+
this.crashBuffer.appendOtelSpan({
|
|
25228
|
+
ts: now,
|
|
25229
|
+
span: this._serializeSpan(span),
|
|
25230
|
+
});
|
|
25231
|
+
}
|
|
25232
|
+
catch (_e) {
|
|
25233
|
+
// ignore
|
|
25234
|
+
}
|
|
25235
|
+
},
|
|
25236
|
+
shutdown: () => Promise.resolve(),
|
|
25237
|
+
forceFlush: () => Promise.resolve(),
|
|
25238
|
+
};
|
|
25239
|
+
}
|
|
25240
|
+
_serializeSpan(span) {
|
|
25241
|
+
var _a, _b;
|
|
25242
|
+
const spanContext = ((_a = span === null || span === void 0 ? void 0 : span.spanContext) === null || _a === void 0 ? void 0 : _a.call(span))
|
|
25243
|
+
? span.spanContext()
|
|
25244
|
+
: span === null || span === void 0 ? void 0 : span._spanContext;
|
|
25245
|
+
return {
|
|
25246
|
+
_spanContext: spanContext,
|
|
25247
|
+
name: span === null || span === void 0 ? void 0 : span.name,
|
|
25248
|
+
kind: span === null || span === void 0 ? void 0 : span.kind,
|
|
25249
|
+
links: span === null || span === void 0 ? void 0 : span.links,
|
|
25250
|
+
ended: span === null || span === void 0 ? void 0 : span.ended,
|
|
25251
|
+
events: span === null || span === void 0 ? void 0 : span.events,
|
|
25252
|
+
status: span === null || span === void 0 ? void 0 : span.status,
|
|
25253
|
+
endTime: span === null || span === void 0 ? void 0 : span.endTime,
|
|
25254
|
+
startTime: span === null || span === void 0 ? void 0 : span.startTime,
|
|
25255
|
+
duration: span === null || span === void 0 ? void 0 : span.duration,
|
|
25256
|
+
attributes: span === null || span === void 0 ? void 0 : span.attributes,
|
|
25257
|
+
parentSpanId: (_b = span === null || span === void 0 ? void 0 : span.parentSpanContext) === null || _b === void 0 ? void 0 : _b.spanId,
|
|
25258
|
+
droppedAttributesCount: span === null || span === void 0 ? void 0 : span.droppedAttributesCount,
|
|
25259
|
+
droppedEventsCount: span === null || span === void 0 ? void 0 : span.droppedEventsCount,
|
|
25260
|
+
droppedLinksCount: span === null || span === void 0 ? void 0 : span.droppedLinksCount,
|
|
25261
|
+
resource: (span === null || span === void 0 ? void 0 : span.resource) ? {
|
|
25262
|
+
attributes: span.resource.attributes,
|
|
25263
|
+
asyncAttributesPending: span.resource.asyncAttributesPending,
|
|
25264
|
+
} : undefined,
|
|
25265
|
+
};
|
|
25266
|
+
}
|
|
25193
25267
|
start(sessionId, sessionType) {
|
|
25194
25268
|
if (!this.tracerProvider) {
|
|
25195
25269
|
throw new Error('Configuration not initialized. Call init() before start().');
|
|
@@ -25333,7 +25407,7 @@ const setShouldRecordHttpData = (shouldRecordBody, shouldRecordHeaders) => {
|
|
|
25333
25407
|
|
|
25334
25408
|
|
|
25335
25409
|
|
|
25336
|
-
function _tryReadFetchBody({ body, url }) {
|
|
25410
|
+
function _tryReadFetchBody({ body, url, }) {
|
|
25337
25411
|
if ((0,_utils_type_utils__WEBPACK_IMPORTED_MODULE_0__.isNullish)(body)) {
|
|
25338
25412
|
return null;
|
|
25339
25413
|
}
|
|
@@ -25506,7 +25580,7 @@ if (typeof window !== 'undefined' && typeof window.fetch !== 'undefined') {
|
|
|
25506
25580
|
if (!(0,_utils_type_utils__WEBPACK_IMPORTED_MODULE_0__.isNullish)(candidateBody)) {
|
|
25507
25581
|
const requestBody = _tryReadFetchBody({
|
|
25508
25582
|
body: candidateBody,
|
|
25509
|
-
url: urlStr
|
|
25583
|
+
url: urlStr,
|
|
25510
25584
|
});
|
|
25511
25585
|
if ((requestBody === null || requestBody === void 0 ? void 0 : requestBody.length) && new Blob([requestBody]).size <= _configs__WEBPACK_IMPORTED_MODULE_2__.configs.maxCapturingHttpPayloadSize) {
|
|
25512
25586
|
networkRequest.requestBody = requestBody;
|
|
@@ -25701,11 +25775,13 @@ if (typeof XMLHttpRequest !== 'undefined') {
|
|
|
25701
25775
|
/* harmony export */ RecorderBrowserSDK: () => (/* binding */ RecorderBrowserSDK)
|
|
25702
25776
|
/* harmony export */ });
|
|
25703
25777
|
/* harmony import */ var _rrweb_packer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rrweb/packer */ "../../node_modules/@rrweb/packer/dist/packer.js");
|
|
25704
|
-
/* harmony import */ var
|
|
25705
|
-
/* harmony import */ var
|
|
25706
|
-
/* harmony import */ var
|
|
25707
|
-
/* harmony import */ var
|
|
25708
|
-
/* harmony import */ var
|
|
25778
|
+
/* harmony import */ var _rrweb_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rrweb/types */ "../../node_modules/@rrweb/types/dist/types.js");
|
|
25779
|
+
/* harmony import */ var rrweb__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rrweb */ "../../node_modules/rrweb/dist/rrweb.js");
|
|
25780
|
+
/* harmony import */ var _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @multiplayer-app/session-recorder-common */ "../session-recorder-common/dist/esm/index-browser.js");
|
|
25781
|
+
/* harmony import */ var _rrweb_rrweb_plugin_console_record__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @rrweb/rrweb-plugin-console-record */ "../../node_modules/@rrweb/rrweb-plugin-console-record/dist/rrweb-plugin-console-record.js");
|
|
25782
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
|
|
25783
|
+
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../config */ "./src/config/index.ts");
|
|
25784
|
+
|
|
25709
25785
|
|
|
25710
25786
|
|
|
25711
25787
|
|
|
@@ -25713,129 +25789,202 @@ if (typeof XMLHttpRequest !== 'undefined') {
|
|
|
25713
25789
|
|
|
25714
25790
|
|
|
25715
25791
|
class RecorderBrowserSDK {
|
|
25716
|
-
get startedAt() {
|
|
25717
|
-
return this._startedAt;
|
|
25718
|
-
}
|
|
25719
|
-
set startedAt(v) {
|
|
25720
|
-
this._startedAt = v;
|
|
25721
|
-
}
|
|
25722
|
-
get stoppedAt() {
|
|
25723
|
-
return this._stoppedAt;
|
|
25724
|
-
}
|
|
25725
|
-
set stoppedAt(v) {
|
|
25726
|
-
this._stoppedAt = v;
|
|
25727
|
-
}
|
|
25728
25792
|
constructor() {
|
|
25729
|
-
this.
|
|
25730
|
-
|
|
25731
|
-
|
|
25793
|
+
this.intervals = {
|
|
25794
|
+
restart: null,
|
|
25795
|
+
bufferSnapshot: null,
|
|
25796
|
+
};
|
|
25797
|
+
this.startedAt = '';
|
|
25798
|
+
this.stoppedAt = '';
|
|
25799
|
+
}
|
|
25800
|
+
/**
|
|
25801
|
+
* Full snapshot.
|
|
25802
|
+
*/
|
|
25803
|
+
takeFullSnapshot() {
|
|
25804
|
+
rrweb__WEBPACK_IMPORTED_MODULE_6__.record.takeFullSnapshot();
|
|
25732
25805
|
}
|
|
25733
25806
|
/**
|
|
25734
|
-
* Initializes the recorder SDK
|
|
25735
|
-
* @param config - Configuration settings
|
|
25736
|
-
* @param socketService - Optional socket service
|
|
25807
|
+
* Initializes the recorder SDK.
|
|
25808
|
+
* @param config - Configuration settings.
|
|
25809
|
+
* @param socketService - Optional socket service.
|
|
25737
25810
|
*/
|
|
25738
25811
|
init(config, socketService) {
|
|
25739
25812
|
this.config = config;
|
|
25740
25813
|
this.socketService = socketService;
|
|
25741
25814
|
}
|
|
25742
25815
|
/**
|
|
25743
|
-
* Starts recording
|
|
25744
|
-
* @param sessionId -
|
|
25816
|
+
* Starts recording.
|
|
25817
|
+
* @param sessionId - Session ID or null for buffer-only mode.
|
|
25818
|
+
* @param sessionType - Session type.
|
|
25745
25819
|
*/
|
|
25746
25820
|
start(sessionId, sessionType) {
|
|
25747
|
-
var _a;
|
|
25748
25821
|
if (!this.config) {
|
|
25749
25822
|
throw new Error('Configuration not initialized. Call init() before start().');
|
|
25750
25823
|
}
|
|
25751
|
-
const restartInterval = sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.CONTINUOUS ? _config__WEBPACK_IMPORTED_MODULE_4__.CONTINUOUS_DEBUGGING_TIMEOUT : 0;
|
|
25752
25824
|
this.startedAt = new Date().toISOString();
|
|
25753
|
-
|
|
25754
|
-
|
|
25825
|
+
this.stopFn = (0,rrweb__WEBPACK_IMPORTED_MODULE_6__.record)({
|
|
25826
|
+
...this._buildRecordOptions(),
|
|
25827
|
+
emit: async (event) => {
|
|
25828
|
+
const ts = event.timestamp;
|
|
25829
|
+
if (!sessionId) {
|
|
25830
|
+
await this._handleBufferOnlyEvent(event, ts);
|
|
25831
|
+
return;
|
|
25832
|
+
}
|
|
25833
|
+
this._handleLiveSessionEvent(event, ts, sessionId, sessionType);
|
|
25834
|
+
},
|
|
25835
|
+
});
|
|
25836
|
+
this.takeFullSnapshot();
|
|
25837
|
+
this._setupPeriodicSnapshots(sessionId, sessionType);
|
|
25838
|
+
}
|
|
25839
|
+
/**
|
|
25840
|
+
* Restarts recording. Never throws - library mode constraint.
|
|
25841
|
+
*/
|
|
25842
|
+
async restart(sessionId, sessionType) {
|
|
25843
|
+
var _a;
|
|
25844
|
+
try {
|
|
25845
|
+
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25846
|
+
this.start(sessionId, sessionType);
|
|
25847
|
+
}
|
|
25848
|
+
catch (_e) {
|
|
25849
|
+
// Silent failure
|
|
25850
|
+
}
|
|
25851
|
+
}
|
|
25852
|
+
/**
|
|
25853
|
+
* Stops recording and cleans up resources.
|
|
25854
|
+
*/
|
|
25855
|
+
stop() {
|
|
25856
|
+
var _a, _b, _c;
|
|
25857
|
+
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25858
|
+
if (!((_b = this.config) === null || _b === void 0 ? void 0 : _b.useWebsocket)) {
|
|
25859
|
+
(_c = this.socketService) === null || _c === void 0 ? void 0 : _c.close();
|
|
25860
|
+
}
|
|
25861
|
+
this._clearAllIntervals();
|
|
25862
|
+
}
|
|
25863
|
+
_clearAllIntervals() {
|
|
25864
|
+
if (this.intervals.restart) {
|
|
25865
|
+
clearInterval(this.intervals.restart);
|
|
25866
|
+
this.intervals.restart = null;
|
|
25867
|
+
}
|
|
25868
|
+
if (this.intervals.bufferSnapshot) {
|
|
25869
|
+
clearInterval(this.intervals.bufferSnapshot);
|
|
25870
|
+
this.intervals.bufferSnapshot = null;
|
|
25871
|
+
}
|
|
25872
|
+
}
|
|
25873
|
+
/**
|
|
25874
|
+
* Sets the crash buffer.
|
|
25875
|
+
* @param crashBuffer - Crash buffer service.
|
|
25876
|
+
*/
|
|
25877
|
+
setCrashBuffer(crashBuffer) {
|
|
25878
|
+
this.crashBuffer = crashBuffer;
|
|
25879
|
+
}
|
|
25880
|
+
/**
|
|
25881
|
+
* Mutates event in-place for performance.
|
|
25882
|
+
*/
|
|
25883
|
+
_applyConsoleMasking(event) {
|
|
25884
|
+
var _a, _b;
|
|
25885
|
+
const maskFn = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.masking) === null || _b === void 0 ? void 0 : _b.maskConsoleEvent;
|
|
25886
|
+
if (typeof maskFn === 'function' && (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isConsoleEvent)(event)) {
|
|
25887
|
+
const pluginEvt = event;
|
|
25888
|
+
const maskedPayload = maskFn(pluginEvt.data.payload);
|
|
25889
|
+
pluginEvt.data = { ...pluginEvt.data, payload: maskedPayload };
|
|
25890
|
+
}
|
|
25891
|
+
}
|
|
25892
|
+
/**
|
|
25893
|
+
* Handles buffer-only event.
|
|
25894
|
+
* @param event - Event.
|
|
25895
|
+
* @param ts - Timestamp.
|
|
25896
|
+
*/
|
|
25897
|
+
async _handleBufferOnlyEvent(event, ts) {
|
|
25898
|
+
if (!this.crashBuffer)
|
|
25899
|
+
return;
|
|
25900
|
+
try {
|
|
25901
|
+
this._applyConsoleMasking(event);
|
|
25902
|
+
const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
|
|
25903
|
+
this.stoppedAt = new Date(ts).toISOString();
|
|
25904
|
+
await this.crashBuffer.appendRrwebEvent({
|
|
25905
|
+
ts,
|
|
25906
|
+
isFullSnapshot: event.type === _rrweb_types__WEBPACK_IMPORTED_MODULE_1__.EventType.FullSnapshot,
|
|
25907
|
+
event: {
|
|
25908
|
+
event: packedEvent,
|
|
25909
|
+
eventType: event.type,
|
|
25910
|
+
timestamp: ts,
|
|
25911
|
+
},
|
|
25912
|
+
});
|
|
25913
|
+
}
|
|
25914
|
+
catch (error) {
|
|
25915
|
+
// Silent failure - library constraint
|
|
25916
|
+
}
|
|
25917
|
+
}
|
|
25918
|
+
/**
|
|
25919
|
+
* Handles live session event.
|
|
25920
|
+
* @param event - Event.
|
|
25921
|
+
* @param ts - Timestamp.
|
|
25922
|
+
* @param sessionId - Session ID.
|
|
25923
|
+
* @param sessionType - Session type.
|
|
25924
|
+
*/
|
|
25925
|
+
_handleLiveSessionEvent(event, ts, sessionId, sessionType) {
|
|
25926
|
+
if (!this.socketService)
|
|
25927
|
+
return;
|
|
25928
|
+
this._applyConsoleMasking(event);
|
|
25929
|
+
const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
|
|
25930
|
+
this.stoppedAt = new Date(ts).toISOString();
|
|
25931
|
+
this.socketService.send({
|
|
25932
|
+
event: packedEvent,
|
|
25933
|
+
eventType: event.type,
|
|
25934
|
+
timestamp: ts,
|
|
25935
|
+
debugSessionId: sessionId,
|
|
25936
|
+
debugSessionType: sessionType,
|
|
25937
|
+
});
|
|
25938
|
+
}
|
|
25939
|
+
/**
|
|
25940
|
+
* Builds record options.
|
|
25941
|
+
*/
|
|
25942
|
+
_buildRecordOptions() {
|
|
25943
|
+
var _a, _b, _c;
|
|
25944
|
+
const maskingConfig = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.masking) || {};
|
|
25755
25945
|
const options = {
|
|
25756
|
-
maskAllInputs: (
|
|
25946
|
+
maskAllInputs: (_b = maskingConfig.maskAllInputs) !== null && _b !== void 0 ? _b : true,
|
|
25757
25947
|
sampling: { canvas: 5 },
|
|
25758
|
-
recordCanvas: this.config.recordCanvas,
|
|
25948
|
+
recordCanvas: (_c = this.config) === null || _c === void 0 ? void 0 : _c.recordCanvas,
|
|
25759
25949
|
dataURLOptions: { type: 'image/webp', quality: 0.1 },
|
|
25760
|
-
plugins: [
|
|
25761
|
-
(0,_rrweb_rrweb_plugin_console_record__WEBPACK_IMPORTED_MODULE_2__.getRecordConsolePlugin)({ level: ['log', 'error'] }),
|
|
25762
|
-
],
|
|
25950
|
+
plugins: [(0,_rrweb_rrweb_plugin_console_record__WEBPACK_IMPORTED_MODULE_3__.getRecordConsolePlugin)({ level: ['log', 'error'] })],
|
|
25763
25951
|
};
|
|
25764
|
-
// Add mask input options if provided
|
|
25765
25952
|
if (maskingConfig.maskInputOptions) {
|
|
25766
25953
|
options.maskInputOptions = maskingConfig.maskInputOptions;
|
|
25767
25954
|
}
|
|
25768
|
-
// Add mask text class if provided
|
|
25769
25955
|
if (maskingConfig.maskTextClass) {
|
|
25770
25956
|
options.maskTextClass = maskingConfig.maskTextClass;
|
|
25771
25957
|
}
|
|
25772
|
-
// Add mask text selector if provided
|
|
25773
25958
|
if (maskingConfig.maskTextSelector) {
|
|
25774
25959
|
options.maskTextSelector = maskingConfig.maskTextSelector;
|
|
25775
25960
|
}
|
|
25776
|
-
// Add custom masking functions if provided
|
|
25777
25961
|
if (typeof maskingConfig.maskInput === 'function') {
|
|
25778
25962
|
options.maskInputFn = maskingConfig.maskInput;
|
|
25779
25963
|
}
|
|
25780
25964
|
if (typeof maskingConfig.maskText === 'function') {
|
|
25781
25965
|
options.maskTextFn = maskingConfig.maskText;
|
|
25782
25966
|
}
|
|
25783
|
-
|
|
25784
|
-
...options,
|
|
25785
|
-
emit: async (event) => {
|
|
25786
|
-
if (this.socketService) {
|
|
25787
|
-
if (typeof maskingConfig.maskConsoleEvent === 'function' && (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isConsoleEvent)(event)) {
|
|
25788
|
-
const { data } = event;
|
|
25789
|
-
const maskedPayload = maskingConfig.maskConsoleEvent(data.payload);
|
|
25790
|
-
event.data = { ...data, payload: maskedPayload };
|
|
25791
|
-
}
|
|
25792
|
-
const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
|
|
25793
|
-
this.stoppedAt = new Date(event.timestamp).toISOString();
|
|
25794
|
-
this.socketService.send({
|
|
25795
|
-
event: packedEvent,
|
|
25796
|
-
eventType: event.type,
|
|
25797
|
-
timestamp: event.timestamp,
|
|
25798
|
-
debugSessionId: sessionId,
|
|
25799
|
-
debugSessionType: sessionType,
|
|
25800
|
-
});
|
|
25801
|
-
}
|
|
25802
|
-
},
|
|
25803
|
-
});
|
|
25804
|
-
// It will sent full snapshot again but it will fix missing first snapshot issue
|
|
25805
|
-
rrweb__WEBPACK_IMPORTED_MODULE_5__.record.takeFullSnapshot();
|
|
25806
|
-
if (restartInterval > 0) {
|
|
25807
|
-
this.restartInterval = setInterval(() => {
|
|
25808
|
-
rrweb__WEBPACK_IMPORTED_MODULE_5__.record.takeFullSnapshot();
|
|
25809
|
-
}, restartInterval);
|
|
25810
|
-
}
|
|
25811
|
-
}
|
|
25812
|
-
/**
|
|
25813
|
-
* Restarts the recording of events.
|
|
25814
|
-
*/
|
|
25815
|
-
async restart(sessionId, sessionType) {
|
|
25816
|
-
var _a;
|
|
25817
|
-
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25818
|
-
this.start(sessionId, sessionType);
|
|
25967
|
+
return options;
|
|
25819
25968
|
}
|
|
25820
25969
|
/**
|
|
25821
|
-
*
|
|
25970
|
+
* Sets up periodic snapshots.
|
|
25971
|
+
* @param sessionId - Session ID.
|
|
25972
|
+
* @param sessionType - Session type.
|
|
25822
25973
|
*/
|
|
25823
|
-
|
|
25824
|
-
|
|
25825
|
-
|
|
25826
|
-
|
|
25974
|
+
_setupPeriodicSnapshots(sessionId, sessionType) {
|
|
25975
|
+
var _a, _b;
|
|
25976
|
+
this._clearAllIntervals();
|
|
25977
|
+
if (sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_2__.SessionType.CONTINUOUS) {
|
|
25978
|
+
this.intervals.restart = setInterval(() => {
|
|
25979
|
+
this.takeFullSnapshot();
|
|
25980
|
+
}, _config__WEBPACK_IMPORTED_MODULE_5__.CONTINUOUS_DEBUGGING_TIMEOUT);
|
|
25827
25981
|
}
|
|
25828
|
-
|
|
25829
|
-
|
|
25830
|
-
|
|
25831
|
-
|
|
25832
|
-
|
|
25833
|
-
var _a, _b, _c;
|
|
25834
|
-
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25835
|
-
if (!((_b = this.config) === null || _b === void 0 ? void 0 : _b.useWebsocket)) {
|
|
25836
|
-
(_c = this.socketService) === null || _c === void 0 ? void 0 : _c.close();
|
|
25982
|
+
if (!sessionId && ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled)) {
|
|
25983
|
+
const interval = this.config.buffering.snapshotIntervalMs || 30000;
|
|
25984
|
+
this.intervals.bufferSnapshot = setInterval(() => {
|
|
25985
|
+
this.takeFullSnapshot();
|
|
25986
|
+
}, interval);
|
|
25837
25987
|
}
|
|
25838
|
-
this.clearRestartInterval();
|
|
25839
25988
|
}
|
|
25840
25989
|
}
|
|
25841
25990
|
|
|
@@ -25986,6 +26135,526 @@ class ApiService {
|
|
|
25986
26135
|
}
|
|
25987
26136
|
|
|
25988
26137
|
|
|
26138
|
+
/***/ }),
|
|
26139
|
+
|
|
26140
|
+
/***/ "./src/services/crashBuffer.service.ts":
|
|
26141
|
+
/*!*********************************************!*\
|
|
26142
|
+
!*** ./src/services/crashBuffer.service.ts ***!
|
|
26143
|
+
\*********************************************/
|
|
26144
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
26145
|
+
|
|
26146
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26147
|
+
/* harmony export */ CrashBufferService: () => (/* binding */ CrashBufferService)
|
|
26148
|
+
/* harmony export */ });
|
|
26149
|
+
class CrashBufferService {
|
|
26150
|
+
constructor(db, tabId, windowMs) {
|
|
26151
|
+
this.db = db;
|
|
26152
|
+
this.tabId = tabId;
|
|
26153
|
+
this.windowMs = windowMs;
|
|
26154
|
+
this.lastPruneAt = 0;
|
|
26155
|
+
this.pruneInFlight = null;
|
|
26156
|
+
this.isActive = true;
|
|
26157
|
+
this.frozenAtTs = null;
|
|
26158
|
+
this.lastSeenEventTs = 0;
|
|
26159
|
+
this.requiresFullSnapshot = true;
|
|
26160
|
+
this.lastTouchAt = 0;
|
|
26161
|
+
}
|
|
26162
|
+
async _safe(fn, fallback) {
|
|
26163
|
+
try {
|
|
26164
|
+
return await fn();
|
|
26165
|
+
}
|
|
26166
|
+
catch (_e) {
|
|
26167
|
+
return fallback;
|
|
26168
|
+
}
|
|
26169
|
+
}
|
|
26170
|
+
async setAttrs(attrs) {
|
|
26171
|
+
await this._safe(async () => {
|
|
26172
|
+
await this.db.setAttrs({
|
|
26173
|
+
tabId: this.tabId,
|
|
26174
|
+
...attrs,
|
|
26175
|
+
});
|
|
26176
|
+
}, undefined);
|
|
26177
|
+
}
|
|
26178
|
+
async appendRrwebEvent(payload) {
|
|
26179
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, payload.ts || 0);
|
|
26180
|
+
if (!this.isActive)
|
|
26181
|
+
return;
|
|
26182
|
+
const isFullSnapshot = Boolean(payload.isFullSnapshot);
|
|
26183
|
+
if (this.requiresFullSnapshot && !isFullSnapshot) {
|
|
26184
|
+
// Buffer must always start with a full snapshot; drop incrementals until we see one.
|
|
26185
|
+
return;
|
|
26186
|
+
}
|
|
26187
|
+
await this._safe(async () => {
|
|
26188
|
+
await this.db.appendRrwebEvent({
|
|
26189
|
+
tabId: this.tabId,
|
|
26190
|
+
ts: payload.ts,
|
|
26191
|
+
isFullSnapshot: payload.isFullSnapshot,
|
|
26192
|
+
event: payload.event,
|
|
26193
|
+
});
|
|
26194
|
+
}, undefined);
|
|
26195
|
+
if (isFullSnapshot && this.requiresFullSnapshot) {
|
|
26196
|
+
// Ensure this snapshot becomes the first replayable event.
|
|
26197
|
+
// We keep the snapshot itself and prune everything older.
|
|
26198
|
+
await this._safe(() => this.db.pruneOlderThan(this.tabId, Math.max(0, payload.ts - 1)), undefined);
|
|
26199
|
+
this.requiresFullSnapshot = false;
|
|
26200
|
+
}
|
|
26201
|
+
else if (isFullSnapshot) {
|
|
26202
|
+
this.requiresFullSnapshot = false;
|
|
26203
|
+
}
|
|
26204
|
+
this.pruneSoon();
|
|
26205
|
+
}
|
|
26206
|
+
async appendOtelSpan(payload) {
|
|
26207
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, payload.ts || 0);
|
|
26208
|
+
if (!this.isActive)
|
|
26209
|
+
return;
|
|
26210
|
+
await this._safe(async () => {
|
|
26211
|
+
await this.db.appendOtelSpan({
|
|
26212
|
+
tabId: this.tabId,
|
|
26213
|
+
ts: payload.ts,
|
|
26214
|
+
span: payload.span,
|
|
26215
|
+
});
|
|
26216
|
+
}, undefined);
|
|
26217
|
+
this.pruneSoon();
|
|
26218
|
+
}
|
|
26219
|
+
async snapshot(now = Date.now()) {
|
|
26220
|
+
const toTs = now;
|
|
26221
|
+
const fromTs = Math.max(0, toTs - this.windowMs);
|
|
26222
|
+
// Always include a full snapshot "anchor" if one exists at/before the window start.
|
|
26223
|
+
const rrwebFromTs = await this._safe(async () => {
|
|
26224
|
+
const anchor = await this.db.getLastRrwebFullSnapshotBefore(this.tabId, fromTs);
|
|
26225
|
+
return typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? anchor.ts : fromTs;
|
|
26226
|
+
}, fromTs);
|
|
26227
|
+
const [rrweb, spans, attrs] = await Promise.all([
|
|
26228
|
+
this._safe(() => this.db.getRrwebEventsWindow(this.tabId, rrwebFromTs, toTs), []),
|
|
26229
|
+
this._safe(() => this.db.getOtelSpansWindow(this.tabId, fromTs, toTs), []),
|
|
26230
|
+
this._safe(() => this.db.getAttrs(this.tabId), null),
|
|
26231
|
+
]);
|
|
26232
|
+
const rrwebSorted = rrweb
|
|
26233
|
+
.sort((a, b) => a.ts - b.ts)
|
|
26234
|
+
.map((r) => ({ ts: r.ts, isFullSnapshot: r.isFullSnapshot, event: r.event }));
|
|
26235
|
+
// Hard guarantee: snapshot payload starts with a FullSnapshot (or is empty).
|
|
26236
|
+
const firstFullSnapshotIdx = rrwebSorted.findIndex((e) => Boolean(e.isFullSnapshot));
|
|
26237
|
+
const rrwebEvents = firstFullSnapshotIdx >= 0 ? rrwebSorted.slice(firstFullSnapshotIdx) : [];
|
|
26238
|
+
// Align spans with the rrweb replay start: spans must start from the FullSnapshot timestamp.
|
|
26239
|
+
const replayStartTs = rrwebEvents.length > 0 ? rrwebEvents[0].ts : fromTs;
|
|
26240
|
+
const otelSpans = spans
|
|
26241
|
+
.filter((s) => typeof (s === null || s === void 0 ? void 0 : s.ts) === 'number' && s.ts >= replayStartTs)
|
|
26242
|
+
.sort((a, b) => a.ts - b.ts)
|
|
26243
|
+
.map((r) => ({ ts: r.ts, span: r.span }));
|
|
26244
|
+
return {
|
|
26245
|
+
rrwebEvents,
|
|
26246
|
+
otelSpans,
|
|
26247
|
+
attrs: attrs ? {
|
|
26248
|
+
sessionAttributes: attrs.sessionAttributes,
|
|
26249
|
+
resourceAttributes: attrs.resourceAttributes,
|
|
26250
|
+
userAttributes: attrs.userAttributes,
|
|
26251
|
+
} : null,
|
|
26252
|
+
windowMs: this.windowMs,
|
|
26253
|
+
fromTs: replayStartTs,
|
|
26254
|
+
toTs,
|
|
26255
|
+
};
|
|
26256
|
+
}
|
|
26257
|
+
async clear() {
|
|
26258
|
+
await this._safe(() => this.db.clearTab(this.tabId), undefined);
|
|
26259
|
+
this.requiresFullSnapshot = true;
|
|
26260
|
+
}
|
|
26261
|
+
needsFullSnapshot() {
|
|
26262
|
+
return this.requiresFullSnapshot;
|
|
26263
|
+
}
|
|
26264
|
+
/**
|
|
26265
|
+
* Mark the tab as active/inactive.
|
|
26266
|
+
*
|
|
26267
|
+
* - When inactive, we freeze the buffer and keep the last active `windowMs` indefinitely.
|
|
26268
|
+
* - When re-activated, we resume buffering but require a new FullSnapshot to start a replayable segment.
|
|
26269
|
+
*/
|
|
26270
|
+
setActive(active) {
|
|
26271
|
+
if (this.isActive === active)
|
|
26272
|
+
return;
|
|
26273
|
+
this.isActive = active;
|
|
26274
|
+
if (!active) {
|
|
26275
|
+
const freezeAt = this.lastSeenEventTs || Date.now();
|
|
26276
|
+
this.frozenAtTs = freezeAt;
|
|
26277
|
+
// Keep the last active window, but preserve rrweb replayability via snapshot anchor.
|
|
26278
|
+
const cutoff = Math.max(0, freezeAt - this.windowMs);
|
|
26279
|
+
void this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined);
|
|
26280
|
+
return;
|
|
26281
|
+
}
|
|
26282
|
+
const wasFrozen = this.frozenAtTs !== null;
|
|
26283
|
+
this.frozenAtTs = null;
|
|
26284
|
+
// New active segment must start with a full snapshot (don’t stitch segments together).
|
|
26285
|
+
if (wasFrozen)
|
|
26286
|
+
this.requiresFullSnapshot = true;
|
|
26287
|
+
this.pruneSoon();
|
|
26288
|
+
}
|
|
26289
|
+
pruneSoon() {
|
|
26290
|
+
if (!this.isActive)
|
|
26291
|
+
return;
|
|
26292
|
+
const now = Date.now();
|
|
26293
|
+
// Throttle pruning to avoid hammering IDB on high event rates
|
|
26294
|
+
if (now - this.lastPruneAt < 2000)
|
|
26295
|
+
return;
|
|
26296
|
+
if (this.pruneInFlight)
|
|
26297
|
+
return;
|
|
26298
|
+
this.lastPruneAt = now;
|
|
26299
|
+
const cutoff = Math.max(0, now - this.windowMs);
|
|
26300
|
+
// Heartbeat so the stale-tab sweeper never deletes active tabs.
|
|
26301
|
+
if (now - this.lastTouchAt > 30000) {
|
|
26302
|
+
this.lastTouchAt = now;
|
|
26303
|
+
void this._safe(() => this.db.touchTab(this.tabId, now), undefined);
|
|
26304
|
+
}
|
|
26305
|
+
this.pruneInFlight = this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined)
|
|
26306
|
+
.finally(() => { this.pruneInFlight = null; });
|
|
26307
|
+
}
|
|
26308
|
+
}
|
|
26309
|
+
|
|
26310
|
+
|
|
26311
|
+
/***/ }),
|
|
26312
|
+
|
|
26313
|
+
/***/ "./src/services/indexedDb.service.ts":
|
|
26314
|
+
/*!*******************************************!*\
|
|
26315
|
+
!*** ./src/services/indexedDb.service.ts ***!
|
|
26316
|
+
\*******************************************/
|
|
26317
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
26318
|
+
|
|
26319
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26320
|
+
/* harmony export */ IndexedDBService: () => (/* binding */ IndexedDBService)
|
|
26321
|
+
/* harmony export */ });
|
|
26322
|
+
const dbName = 'mpEventsDB';
|
|
26323
|
+
const dbVersion = 2;
|
|
26324
|
+
const legacyStoreName = 'mpEventsStore';
|
|
26325
|
+
const rrwebEventsStore = 'rrwebEvents';
|
|
26326
|
+
const otelSpansStore = 'otelSpans';
|
|
26327
|
+
const attrsStore = 'crashBufferAttrs';
|
|
26328
|
+
class IndexedDBService {
|
|
26329
|
+
constructor() {
|
|
26330
|
+
this.dbPromise = this.openDB();
|
|
26331
|
+
}
|
|
26332
|
+
openDB() {
|
|
26333
|
+
return new Promise((resolve, reject) => {
|
|
26334
|
+
const request = indexedDB.open(dbName, dbVersion);
|
|
26335
|
+
request.onupgradeneeded = () => {
|
|
26336
|
+
const db = request.result;
|
|
26337
|
+
// Keep the legacy store if it exists to avoid breaking older versions.
|
|
26338
|
+
if (!db.objectStoreNames.contains(legacyStoreName)) {
|
|
26339
|
+
db.createObjectStore(legacyStoreName, { keyPath: 'id', autoIncrement: true });
|
|
26340
|
+
}
|
|
26341
|
+
if (!db.objectStoreNames.contains(rrwebEventsStore)) {
|
|
26342
|
+
const store = db.createObjectStore(rrwebEventsStore, { keyPath: 'id', autoIncrement: true });
|
|
26343
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
26344
|
+
}
|
|
26345
|
+
if (!db.objectStoreNames.contains(otelSpansStore)) {
|
|
26346
|
+
const store = db.createObjectStore(otelSpansStore, { keyPath: 'id', autoIncrement: true });
|
|
26347
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
26348
|
+
}
|
|
26349
|
+
if (!db.objectStoreNames.contains(attrsStore)) {
|
|
26350
|
+
db.createObjectStore(attrsStore, { keyPath: 'tabId' });
|
|
26351
|
+
}
|
|
26352
|
+
};
|
|
26353
|
+
request.onsuccess = () => resolve(request.result);
|
|
26354
|
+
request.onerror = () => reject(request.error);
|
|
26355
|
+
});
|
|
26356
|
+
}
|
|
26357
|
+
/**
|
|
26358
|
+
* @deprecated Prefer `appendRrwebEvent(tabId, ...)` and `getRrwebEventsWindow(...)`.
|
|
26359
|
+
* This writes into the legacy store with no pruning semantics.
|
|
26360
|
+
*/
|
|
26361
|
+
async saveEvent(event) {
|
|
26362
|
+
const db = await this.dbPromise;
|
|
26363
|
+
return new Promise((resolve, reject) => {
|
|
26364
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
26365
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26366
|
+
store.add({ event });
|
|
26367
|
+
tx.oncomplete = () => resolve();
|
|
26368
|
+
tx.onerror = () => reject(tx.error);
|
|
26369
|
+
});
|
|
26370
|
+
}
|
|
26371
|
+
/**
|
|
26372
|
+
* @deprecated Prefer `getRrwebEventsWindow(...)`.
|
|
26373
|
+
*/
|
|
26374
|
+
async getAllEvents() {
|
|
26375
|
+
const db = await this.dbPromise;
|
|
26376
|
+
return new Promise((resolve, reject) => {
|
|
26377
|
+
const tx = db.transaction(legacyStoreName, 'readonly');
|
|
26378
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26379
|
+
const request = store.getAll();
|
|
26380
|
+
request.onsuccess = () => {
|
|
26381
|
+
const events = request.result.map((record) => record.event);
|
|
26382
|
+
resolve(events);
|
|
26383
|
+
};
|
|
26384
|
+
request.onerror = () => reject(request.error);
|
|
26385
|
+
});
|
|
26386
|
+
}
|
|
26387
|
+
/**
|
|
26388
|
+
* @deprecated Prefer `clearTab(tabId)`.
|
|
26389
|
+
*/
|
|
26390
|
+
async clearEvents() {
|
|
26391
|
+
const db = await this.dbPromise;
|
|
26392
|
+
return new Promise((resolve, reject) => {
|
|
26393
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
26394
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26395
|
+
store.clear();
|
|
26396
|
+
tx.oncomplete = () => resolve();
|
|
26397
|
+
tx.onerror = () => reject(tx.error);
|
|
26398
|
+
});
|
|
26399
|
+
}
|
|
26400
|
+
async setAttrs(attrs) {
|
|
26401
|
+
var _a;
|
|
26402
|
+
const db = await this.dbPromise;
|
|
26403
|
+
const payload = {
|
|
26404
|
+
...attrs,
|
|
26405
|
+
updatedAt: (_a = attrs.updatedAt) !== null && _a !== void 0 ? _a : Date.now(),
|
|
26406
|
+
};
|
|
26407
|
+
return new Promise((resolve, reject) => {
|
|
26408
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
26409
|
+
tx.objectStore(attrsStore).put(payload);
|
|
26410
|
+
tx.oncomplete = () => resolve();
|
|
26411
|
+
tx.onerror = () => reject(tx.error);
|
|
26412
|
+
});
|
|
26413
|
+
}
|
|
26414
|
+
async getAttrs(tabId) {
|
|
26415
|
+
const db = await this.dbPromise;
|
|
26416
|
+
return new Promise((resolve, reject) => {
|
|
26417
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
26418
|
+
const request = tx.objectStore(attrsStore).get(tabId);
|
|
26419
|
+
request.onsuccess = () => resolve(request.result || null);
|
|
26420
|
+
request.onerror = () => reject(request.error);
|
|
26421
|
+
});
|
|
26422
|
+
}
|
|
26423
|
+
async getAllAttrs() {
|
|
26424
|
+
const db = await this.dbPromise;
|
|
26425
|
+
return new Promise((resolve, reject) => {
|
|
26426
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
26427
|
+
const request = tx.objectStore(attrsStore).getAll();
|
|
26428
|
+
request.onsuccess = () => resolve(request.result || []);
|
|
26429
|
+
request.onerror = () => reject(request.error);
|
|
26430
|
+
});
|
|
26431
|
+
}
|
|
26432
|
+
/**
|
|
26433
|
+
* Updates `updatedAt` for the tab without clobbering existing attributes.
|
|
26434
|
+
*/
|
|
26435
|
+
async touchTab(tabId, updatedAt = Date.now()) {
|
|
26436
|
+
const db = await this.dbPromise;
|
|
26437
|
+
return new Promise((resolve, reject) => {
|
|
26438
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
26439
|
+
const store = tx.objectStore(attrsStore);
|
|
26440
|
+
const getReq = store.get(tabId);
|
|
26441
|
+
getReq.onsuccess = () => {
|
|
26442
|
+
const existing = (getReq.result || null);
|
|
26443
|
+
const next = existing
|
|
26444
|
+
? { ...existing, updatedAt }
|
|
26445
|
+
: { tabId, updatedAt };
|
|
26446
|
+
store.put(next);
|
|
26447
|
+
};
|
|
26448
|
+
getReq.onerror = () => reject(getReq.error);
|
|
26449
|
+
tx.oncomplete = () => resolve();
|
|
26450
|
+
tx.onerror = () => reject(tx.error);
|
|
26451
|
+
});
|
|
26452
|
+
}
|
|
26453
|
+
/**
|
|
26454
|
+
* Best-effort garbage collection for orphaned tabs.
|
|
26455
|
+
* Deletes all data for tabs whose `attrs.updatedAt` is older than `maxAgeMs`.
|
|
26456
|
+
*/
|
|
26457
|
+
async sweepStaleTabs(maxAgeMs, now = Date.now()) {
|
|
26458
|
+
const attrs = await this.getAllAttrs().catch(() => []);
|
|
26459
|
+
if (!attrs.length)
|
|
26460
|
+
return 0;
|
|
26461
|
+
const stale = attrs
|
|
26462
|
+
.filter((a) => typeof (a === null || a === void 0 ? void 0 : a.updatedAt) === 'number' && now - a.updatedAt > maxAgeMs)
|
|
26463
|
+
.map((a) => a.tabId);
|
|
26464
|
+
let cleared = 0;
|
|
26465
|
+
for (const tabId of stale) {
|
|
26466
|
+
try {
|
|
26467
|
+
await this.clearTab(tabId);
|
|
26468
|
+
cleared += 1;
|
|
26469
|
+
}
|
|
26470
|
+
catch (_e) {
|
|
26471
|
+
// best effort
|
|
26472
|
+
}
|
|
26473
|
+
}
|
|
26474
|
+
return cleared;
|
|
26475
|
+
}
|
|
26476
|
+
async appendRrwebEvent(record) {
|
|
26477
|
+
const db = await this.dbPromise;
|
|
26478
|
+
return new Promise((resolve, reject) => {
|
|
26479
|
+
const tx = db.transaction(rrwebEventsStore, 'readwrite');
|
|
26480
|
+
tx.objectStore(rrwebEventsStore).add(record);
|
|
26481
|
+
tx.oncomplete = () => resolve();
|
|
26482
|
+
tx.onerror = () => reject(tx.error);
|
|
26483
|
+
});
|
|
26484
|
+
}
|
|
26485
|
+
async appendOtelSpan(record) {
|
|
26486
|
+
const db = await this.dbPromise;
|
|
26487
|
+
return new Promise((resolve, reject) => {
|
|
26488
|
+
const tx = db.transaction(otelSpansStore, 'readwrite');
|
|
26489
|
+
tx.objectStore(otelSpansStore).add(record);
|
|
26490
|
+
tx.oncomplete = () => resolve();
|
|
26491
|
+
tx.onerror = () => reject(tx.error);
|
|
26492
|
+
});
|
|
26493
|
+
}
|
|
26494
|
+
async getRrwebEventsWindow(tabId, fromTs, toTs) {
|
|
26495
|
+
const db = await this.dbPromise;
|
|
26496
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
26497
|
+
return new Promise((resolve, reject) => {
|
|
26498
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
26499
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
26500
|
+
const req = idx.getAll(range);
|
|
26501
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
26502
|
+
req.onerror = () => reject(req.error);
|
|
26503
|
+
});
|
|
26504
|
+
}
|
|
26505
|
+
/**
|
|
26506
|
+
* Returns the last (highest-ts) FullSnapshot record at/before `cutoffTs`.
|
|
26507
|
+
* Used to keep a replayable anchor when pruning.
|
|
26508
|
+
*/
|
|
26509
|
+
async getLastRrwebFullSnapshotBefore(tabId, cutoffTs) {
|
|
26510
|
+
const db = await this.dbPromise;
|
|
26511
|
+
const range = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26512
|
+
return new Promise((resolve, reject) => {
|
|
26513
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
26514
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
26515
|
+
const req = idx.openCursor(range, 'prev');
|
|
26516
|
+
req.onsuccess = () => {
|
|
26517
|
+
const cursor = req.result;
|
|
26518
|
+
if (!cursor) {
|
|
26519
|
+
resolve(null);
|
|
26520
|
+
return;
|
|
26521
|
+
}
|
|
26522
|
+
const value = cursor.value;
|
|
26523
|
+
if (value === null || value === void 0 ? void 0 : value.isFullSnapshot) {
|
|
26524
|
+
resolve(value);
|
|
26525
|
+
return;
|
|
26526
|
+
}
|
|
26527
|
+
cursor.continue();
|
|
26528
|
+
};
|
|
26529
|
+
req.onerror = () => reject(req.error);
|
|
26530
|
+
});
|
|
26531
|
+
}
|
|
26532
|
+
async getOtelSpansWindow(tabId, fromTs, toTs) {
|
|
26533
|
+
const db = await this.dbPromise;
|
|
26534
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
26535
|
+
return new Promise((resolve, reject) => {
|
|
26536
|
+
const tx = db.transaction(otelSpansStore, 'readonly');
|
|
26537
|
+
const idx = tx.objectStore(otelSpansStore).index('tabId_ts');
|
|
26538
|
+
const req = idx.getAll(range);
|
|
26539
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
26540
|
+
req.onerror = () => reject(req.error);
|
|
26541
|
+
});
|
|
26542
|
+
}
|
|
26543
|
+
async pruneOlderThan(tabId, cutoffTs) {
|
|
26544
|
+
const db = await this.dbPromise;
|
|
26545
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26546
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26547
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
26548
|
+
const idx = store.index('tabId_ts');
|
|
26549
|
+
const req = idx.openCursor(range);
|
|
26550
|
+
req.onsuccess = () => {
|
|
26551
|
+
const cursor = req.result;
|
|
26552
|
+
if (!cursor) {
|
|
26553
|
+
resolve();
|
|
26554
|
+
return;
|
|
26555
|
+
}
|
|
26556
|
+
cursor.delete();
|
|
26557
|
+
cursor.continue();
|
|
26558
|
+
};
|
|
26559
|
+
req.onerror = () => reject(req.error);
|
|
26560
|
+
});
|
|
26561
|
+
return new Promise((resolve, reject) => {
|
|
26562
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
26563
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26564
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26565
|
+
Promise.all([
|
|
26566
|
+
pruneStore(rrwebStore, rrwebRange),
|
|
26567
|
+
pruneStore(spanStore, spansRange),
|
|
26568
|
+
]).then(() => {
|
|
26569
|
+
// noop; completion is signaled by tx.oncomplete
|
|
26570
|
+
}).catch((e) => {
|
|
26571
|
+
reject(e);
|
|
26572
|
+
});
|
|
26573
|
+
tx.oncomplete = () => resolve();
|
|
26574
|
+
tx.onerror = () => reject(tx.error);
|
|
26575
|
+
});
|
|
26576
|
+
}
|
|
26577
|
+
/**
|
|
26578
|
+
* Prune older data while keeping rrweb replayability:
|
|
26579
|
+
* - rrweb: keep the last FullSnapshot at/before cutoff as an "anchor"
|
|
26580
|
+
* - spans: prune strictly by cutoff
|
|
26581
|
+
*/
|
|
26582
|
+
async pruneOlderThanWithRrwebSnapshotAnchor(tabId, cutoffTs) {
|
|
26583
|
+
const db = await this.dbPromise;
|
|
26584
|
+
const anchor = await this.getLastRrwebFullSnapshotBefore(tabId, cutoffTs);
|
|
26585
|
+
// rrweb: delete everything strictly older than the anchor snapshot (keep the anchor itself)
|
|
26586
|
+
// spans: delete everything older than cutoffTs
|
|
26587
|
+
const rrwebCutoffTs = typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? Math.max(0, anchor.ts - 1) : cutoffTs;
|
|
26588
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, rrwebCutoffTs]);
|
|
26589
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26590
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
26591
|
+
const idx = store.index('tabId_ts');
|
|
26592
|
+
const req = idx.openCursor(range);
|
|
26593
|
+
req.onsuccess = () => {
|
|
26594
|
+
const cursor = req.result;
|
|
26595
|
+
if (!cursor) {
|
|
26596
|
+
resolve();
|
|
26597
|
+
return;
|
|
26598
|
+
}
|
|
26599
|
+
cursor.delete();
|
|
26600
|
+
cursor.continue();
|
|
26601
|
+
};
|
|
26602
|
+
req.onerror = () => reject(req.error);
|
|
26603
|
+
});
|
|
26604
|
+
return new Promise((resolve, reject) => {
|
|
26605
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
26606
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26607
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26608
|
+
Promise.all([
|
|
26609
|
+
pruneStore(rrwebStore, rrwebRange),
|
|
26610
|
+
pruneStore(spanStore, spansRange),
|
|
26611
|
+
]).then(() => {
|
|
26612
|
+
// noop
|
|
26613
|
+
}).catch((e) => reject(e));
|
|
26614
|
+
tx.oncomplete = () => resolve();
|
|
26615
|
+
tx.onerror = () => reject(tx.error);
|
|
26616
|
+
});
|
|
26617
|
+
}
|
|
26618
|
+
async clearTab(tabId) {
|
|
26619
|
+
const db = await this.dbPromise;
|
|
26620
|
+
const allRange = IDBKeyRange.bound([tabId, 0], [tabId, Number.MAX_SAFE_INTEGER]);
|
|
26621
|
+
const clearByTab = (store) => new Promise((resolve, reject) => {
|
|
26622
|
+
const idx = store.index('tabId_ts');
|
|
26623
|
+
const req = idx.openCursor(allRange);
|
|
26624
|
+
req.onsuccess = () => {
|
|
26625
|
+
const cursor = req.result;
|
|
26626
|
+
if (!cursor) {
|
|
26627
|
+
resolve();
|
|
26628
|
+
return;
|
|
26629
|
+
}
|
|
26630
|
+
cursor.delete();
|
|
26631
|
+
cursor.continue();
|
|
26632
|
+
};
|
|
26633
|
+
req.onerror = () => reject(req.error);
|
|
26634
|
+
});
|
|
26635
|
+
return new Promise((resolve, reject) => {
|
|
26636
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore, attrsStore], 'readwrite');
|
|
26637
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26638
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26639
|
+
const attr = tx.objectStore(attrsStore);
|
|
26640
|
+
Promise.all([
|
|
26641
|
+
clearByTab(rrwebStore),
|
|
26642
|
+
clearByTab(spanStore),
|
|
26643
|
+
new Promise((res, rej) => {
|
|
26644
|
+
const r = attr.delete(tabId);
|
|
26645
|
+
r.onsuccess = () => res();
|
|
26646
|
+
r.onerror = () => rej(r.error);
|
|
26647
|
+
}),
|
|
26648
|
+
]).then(() => {
|
|
26649
|
+
// noop
|
|
26650
|
+
}).catch((e) => reject(e));
|
|
26651
|
+
tx.oncomplete = () => resolve();
|
|
26652
|
+
tx.onerror = () => reject(tx.error);
|
|
26653
|
+
});
|
|
26654
|
+
}
|
|
26655
|
+
}
|
|
26656
|
+
|
|
26657
|
+
|
|
25989
26658
|
/***/ }),
|
|
25990
26659
|
|
|
25991
26660
|
/***/ "./src/services/messaging.service.ts":
|
|
@@ -26104,15 +26773,17 @@ const messagingService = new MessagingService();
|
|
|
26104
26773
|
/* harmony export */ SocketService: () => (/* binding */ SocketService)
|
|
26105
26774
|
/* harmony export */ });
|
|
26106
26775
|
/* harmony import */ var socket_io_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! socket.io-client */ "../../node_modules/socket.io-client/build/esm/index.js");
|
|
26107
|
-
/* harmony import */ var
|
|
26776
|
+
/* harmony import */ var lib0_observable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lib0/observable */ "../../node_modules/lib0/observable.js");
|
|
26108
26777
|
/* harmony import */ var _services_messaging_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/messaging.service */ "./src/services/messaging.service.ts");
|
|
26109
26778
|
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ "./src/config/index.ts");
|
|
26779
|
+
/* harmony import */ var _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @multiplayer-app/session-recorder-common */ "../session-recorder-common/dist/esm/index-browser.js");
|
|
26780
|
+
|
|
26110
26781
|
|
|
26111
26782
|
|
|
26112
26783
|
|
|
26113
26784
|
|
|
26114
26785
|
const MAX_RECONNECTION_ATTEMPTS = 2;
|
|
26115
|
-
class SocketService extends
|
|
26786
|
+
class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observable {
|
|
26116
26787
|
constructor() {
|
|
26117
26788
|
super();
|
|
26118
26789
|
this.socket = null;
|
|
@@ -26179,6 +26850,9 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26179
26850
|
path: '/v0/radar/ws',
|
|
26180
26851
|
auth: {
|
|
26181
26852
|
'x-api-key': this.options.apiKey,
|
|
26853
|
+
...this.options.clientId
|
|
26854
|
+
? { [_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_3__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID]: this.options.clientId }
|
|
26855
|
+
: {},
|
|
26182
26856
|
},
|
|
26183
26857
|
reconnectionAttempts: 2,
|
|
26184
26858
|
transports: ['websocket'],
|
|
@@ -26210,6 +26884,9 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26210
26884
|
this.socket.on(_config__WEBPACK_IMPORTED_MODULE_2__.REMOTE_SESSION_RECORDING_STOP, (data) => {
|
|
26211
26885
|
this.emit(_config__WEBPACK_IMPORTED_MODULE_2__.REMOTE_SESSION_RECORDING_STOP, [data]);
|
|
26212
26886
|
});
|
|
26887
|
+
this.socket.on(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SAVE_BUFFER_EVENT, (data) => {
|
|
26888
|
+
this.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SAVE_BUFFER_EVENT, [data]);
|
|
26889
|
+
});
|
|
26213
26890
|
}
|
|
26214
26891
|
checkReconnectionAttempts() {
|
|
26215
26892
|
if (this.attempts >= MAX_RECONNECTION_ATTEMPTS) {
|
|
@@ -26309,21 +26986,23 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26309
26986
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26310
26987
|
/* harmony export */ SessionRecorder: () => (/* binding */ SessionRecorder)
|
|
26311
26988
|
/* harmony export */ });
|
|
26312
|
-
/* harmony import */ var
|
|
26989
|
+
/* harmony import */ var lib0_observable__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! lib0/observable */ "../../node_modules/lib0/observable.js");
|
|
26313
26990
|
/* harmony import */ var _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @multiplayer-app/session-recorder-common */ "../session-recorder-common/dist/esm/index-browser.js");
|
|
26314
26991
|
/* harmony import */ var _otel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./otel */ "./src/otel/index.ts");
|
|
26315
26992
|
/* harmony import */ var _rrweb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rrweb */ "./src/rrweb/index.ts");
|
|
26316
26993
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils/index.ts");
|
|
26317
26994
|
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./types */ "./src/types/index.ts");
|
|
26318
|
-
/* harmony import */ var
|
|
26319
|
-
/* harmony import */ var
|
|
26320
|
-
/* harmony import */ var
|
|
26321
|
-
/* harmony import */ var
|
|
26322
|
-
/* harmony import */ var
|
|
26323
|
-
/* harmony import */ var
|
|
26324
|
-
/* harmony import */ var
|
|
26325
|
-
/* harmony import */ var
|
|
26326
|
-
/* harmony import */ var
|
|
26995
|
+
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ "./src/config/index.ts");
|
|
26996
|
+
/* harmony import */ var _patch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./patch */ "./src/patch/index.ts");
|
|
26997
|
+
/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./eventBus */ "./src/eventBus.ts");
|
|
26998
|
+
/* harmony import */ var _sessionWidget__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sessionWidget */ "./src/sessionWidget/index.ts");
|
|
26999
|
+
/* harmony import */ var _services_messaging_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./services/messaging.service */ "./src/services/messaging.service.ts");
|
|
27000
|
+
/* harmony import */ var _services_api_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./services/api.service */ "./src/services/api.service.ts");
|
|
27001
|
+
/* harmony import */ var _services_socket_service__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./services/socket.service */ "./src/services/socket.service.ts");
|
|
27002
|
+
/* harmony import */ var _services_indexedDb_service__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./services/indexedDb.service */ "./src/services/indexedDb.service.ts");
|
|
27003
|
+
/* harmony import */ var _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./services/crashBuffer.service */ "./src/services/crashBuffer.service.ts");
|
|
27004
|
+
/* harmony import */ var _sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sessionWidget/buttonStateConfigs */ "./src/sessionWidget/buttonStateConfigs.ts");
|
|
27005
|
+
/* harmony import */ var _navigation__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./navigation */ "./src/navigation/index.ts");
|
|
26327
27006
|
|
|
26328
27007
|
|
|
26329
27008
|
|
|
@@ -26339,7 +27018,9 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26339
27018
|
|
|
26340
27019
|
|
|
26341
27020
|
|
|
26342
|
-
|
|
27021
|
+
|
|
27022
|
+
|
|
27023
|
+
class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Observable {
|
|
26343
27024
|
get navigation() {
|
|
26344
27025
|
return this._navigationRecorder.api;
|
|
26345
27026
|
}
|
|
@@ -26351,7 +27032,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26351
27032
|
}
|
|
26352
27033
|
set sessionId(sessionId) {
|
|
26353
27034
|
this._sessionId = sessionId;
|
|
26354
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27035
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_ID_PROP_NAME, sessionId);
|
|
26355
27036
|
}
|
|
26356
27037
|
get sessionType() {
|
|
26357
27038
|
return this._sessionType;
|
|
@@ -26360,8 +27041,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26360
27041
|
this._sessionType = sessionType;
|
|
26361
27042
|
const continuousRecording = sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS;
|
|
26362
27043
|
this._sessionWidget.updateContinuousRecordingState(continuousRecording);
|
|
26363
|
-
|
|
26364
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27044
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('continuous-debugging', continuousRecording);
|
|
27045
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_TYPE_PROP_NAME, sessionType);
|
|
26365
27046
|
}
|
|
26366
27047
|
get continuousRecording() {
|
|
26367
27048
|
return this.sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS;
|
|
@@ -26372,8 +27053,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26372
27053
|
set sessionState(state) {
|
|
26373
27054
|
this._sessionState = state;
|
|
26374
27055
|
this._sessionWidget.updateState(this._sessionState, this.continuousRecording);
|
|
26375
|
-
|
|
26376
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27056
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('state-change', this._sessionState);
|
|
27057
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STATE_PROP_NAME, state);
|
|
26377
27058
|
// Emit observable event to support React wrapper
|
|
26378
27059
|
this.emit('state-change', [this._sessionState || _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped, this.sessionType]);
|
|
26379
27060
|
}
|
|
@@ -26382,19 +27063,23 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26382
27063
|
}
|
|
26383
27064
|
set session(session) {
|
|
26384
27065
|
this._session = session;
|
|
26385
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27066
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_PROP_NAME, this._session);
|
|
26386
27067
|
}
|
|
26387
27068
|
get sessionAttributes() {
|
|
26388
27069
|
return this._sessionAttributes || {};
|
|
26389
27070
|
}
|
|
26390
27071
|
set sessionAttributes(attributes) {
|
|
27072
|
+
var _a;
|
|
26391
27073
|
this._sessionAttributes = attributes;
|
|
27074
|
+
(_a = this._crashBuffer) === null || _a === void 0 ? void 0 : _a.setAttrs({ sessionAttributes: this.sessionAttributes });
|
|
26392
27075
|
}
|
|
26393
27076
|
get userAttributes() {
|
|
26394
27077
|
return this._userAttributes;
|
|
26395
27078
|
}
|
|
26396
27079
|
set userAttributes(userAttributes) {
|
|
27080
|
+
var _a;
|
|
26397
27081
|
this._userAttributes = userAttributes;
|
|
27082
|
+
(_a = this._crashBuffer) === null || _a === void 0 ? void 0 : _a.setAttrs({ userAttributes: this._userAttributes });
|
|
26398
27083
|
}
|
|
26399
27084
|
get error() {
|
|
26400
27085
|
return this._error;
|
|
@@ -26420,15 +27105,20 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26420
27105
|
constructor() {
|
|
26421
27106
|
var _a;
|
|
26422
27107
|
super();
|
|
26423
|
-
this._apiService = new
|
|
26424
|
-
this._socketService = new
|
|
27108
|
+
this._apiService = new _services_api_service__WEBPACK_IMPORTED_MODULE_10__.ApiService();
|
|
27109
|
+
this._socketService = new _services_socket_service__WEBPACK_IMPORTED_MODULE_11__.SocketService();
|
|
26425
27110
|
this._tracer = new _otel__WEBPACK_IMPORTED_MODULE_1__.TracerBrowserSDK();
|
|
26426
27111
|
this._recorder = new _rrweb__WEBPACK_IMPORTED_MODULE_2__.RecorderBrowserSDK();
|
|
26427
|
-
this._sessionWidget = new
|
|
26428
|
-
this._navigationRecorder = new
|
|
27112
|
+
this._sessionWidget = new _sessionWidget__WEBPACK_IMPORTED_MODULE_8__.SessionWidget();
|
|
27113
|
+
this._navigationRecorder = new _navigation__WEBPACK_IMPORTED_MODULE_15__.NavigationRecorder();
|
|
26429
27114
|
this._startRequestController = null;
|
|
27115
|
+
this._tabId = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getOrCreateTabId)();
|
|
27116
|
+
this._bufferDb = new _services_indexedDb_service__WEBPACK_IMPORTED_MODULE_12__.IndexedDBService();
|
|
27117
|
+
this._crashBuffer = null;
|
|
27118
|
+
this._isFlushingBuffer = false;
|
|
27119
|
+
this._bufferLifecycleHandlersRegistered = false;
|
|
26430
27120
|
this._isInitialized = false;
|
|
26431
|
-
// Session ID and state are stored in
|
|
27121
|
+
// Session ID and state are stored in sessionStorage (with fallback) to avoid multi-tab conflicts
|
|
26432
27122
|
this._sessionId = null;
|
|
26433
27123
|
this._sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
26434
27124
|
this._sessionState = null;
|
|
@@ -26441,10 +27131,10 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26441
27131
|
this._error = '';
|
|
26442
27132
|
// Safety: avoid accessing storage in SSR/non-browser environments
|
|
26443
27133
|
const isBrowser = typeof window !== 'undefined';
|
|
26444
|
-
const sessionLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(
|
|
26445
|
-
const sessionIdLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(
|
|
26446
|
-
const sessionStateLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(
|
|
26447
|
-
const sessionTypeLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(
|
|
27134
|
+
const sessionLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_PROP_NAME, true) : null;
|
|
27135
|
+
const sessionIdLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_ID_PROP_NAME) : null;
|
|
27136
|
+
const sessionStateLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STATE_PROP_NAME) : null;
|
|
27137
|
+
const sessionTypeLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_TYPE_PROP_NAME) : null;
|
|
26448
27138
|
if ((0,_utils__WEBPACK_IMPORTED_MODULE_3__.isSessionActive)(sessionLocal, sessionTypeLocal)) {
|
|
26449
27139
|
this.session = sessionLocal;
|
|
26450
27140
|
this.sessionId = sessionIdLocal;
|
|
@@ -26458,7 +27148,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26458
27148
|
this.sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
26459
27149
|
}
|
|
26460
27150
|
this._configs = {
|
|
26461
|
-
...
|
|
27151
|
+
..._config__WEBPACK_IMPORTED_MODULE_5__.BASE_CONFIG,
|
|
26462
27152
|
apiKey: ((_a = this.session) === null || _a === void 0 ? void 0 : _a.tempApiKey) || '',
|
|
26463
27153
|
};
|
|
26464
27154
|
}
|
|
@@ -26467,18 +27157,23 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26467
27157
|
* @param configs - custom configurations for session debugger
|
|
26468
27158
|
*/
|
|
26469
27159
|
init(configs) {
|
|
27160
|
+
var _a;
|
|
26470
27161
|
if (typeof window === 'undefined') {
|
|
26471
27162
|
return;
|
|
26472
27163
|
}
|
|
26473
|
-
this._configs = (0,
|
|
27164
|
+
this._configs = (0,_config__WEBPACK_IMPORTED_MODULE_5__.getSessionRecorderConfig)({ ...this._configs, ...configs });
|
|
26474
27165
|
this._isInitialized = true;
|
|
26475
27166
|
this._checkOperation('init');
|
|
26476
|
-
|
|
26477
|
-
|
|
27167
|
+
// GC: remove orphaned crash buffers from old tabs.
|
|
27168
|
+
// Keep TTL large to avoid any accidental data loss.
|
|
27169
|
+
void this._bufferDb.sweepStaleTabs(24 * 60 * 60 * 1000);
|
|
27170
|
+
(0,_patch__WEBPACK_IMPORTED_MODULE_6__.setMaxCapturingHttpPayloadSize)(this._configs.maxCapturingHttpPayloadSize || _config__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE);
|
|
27171
|
+
(0,_patch__WEBPACK_IMPORTED_MODULE_6__.setShouldRecordHttpData)(this._configs.captureBody, this._configs.captureHeaders);
|
|
26478
27172
|
this._tracer.init(this._configs);
|
|
26479
27173
|
this._apiService.init(this._configs);
|
|
26480
27174
|
this._sessionWidget.init(this._configs);
|
|
26481
27175
|
this._socketService.init({
|
|
27176
|
+
clientId: this._tracer.clientId,
|
|
26482
27177
|
apiKey: this._configs.apiKey,
|
|
26483
27178
|
socketUrl: this._configs.apiBaseUrl || '',
|
|
26484
27179
|
keepAlive: Boolean(this._configs.useWebsocket),
|
|
@@ -26493,17 +27188,83 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26493
27188
|
if (this._configs.apiKey) {
|
|
26494
27189
|
this._recorder.init(this._configs, this._socketService);
|
|
26495
27190
|
}
|
|
27191
|
+
// Crash buffer (browser): keep a short rolling window when not actively recording.
|
|
27192
|
+
if ((_a = this._configs.buffering) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
27193
|
+
const windowMinutes = this._configs.buffering.windowMinutes || 1;
|
|
27194
|
+
const windowMs = Math.max(10000, windowMinutes * 60 * 1000);
|
|
27195
|
+
this._crashBuffer = new _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__.CrashBufferService(this._bufferDb, this._tabId, windowMs);
|
|
27196
|
+
this._recorder.setCrashBuffer(this._crashBuffer);
|
|
27197
|
+
this._tracer.setCrashBuffer(this._crashBuffer);
|
|
27198
|
+
this._crashBuffer.setAttrs({
|
|
27199
|
+
sessionAttributes: this.sessionAttributes,
|
|
27200
|
+
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
27201
|
+
userAttributes: this._userAttributes,
|
|
27202
|
+
});
|
|
27203
|
+
this._registerCrashBufferLifecycleHandlers();
|
|
27204
|
+
}
|
|
26496
27205
|
if (this.sessionId
|
|
26497
27206
|
&& (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started
|
|
26498
27207
|
|| this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.paused)) {
|
|
26499
27208
|
this._start();
|
|
26500
27209
|
}
|
|
27210
|
+
else {
|
|
27211
|
+
// Buffer-only recording when there is no active debug session.
|
|
27212
|
+
this._startBufferOnlyRecording();
|
|
27213
|
+
}
|
|
26501
27214
|
this._registerWidgetEvents();
|
|
26502
27215
|
this._registerSocketServiceListeners();
|
|
26503
|
-
|
|
27216
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('state-change', this.sessionState);
|
|
26504
27217
|
// Emit init observable event
|
|
26505
27218
|
this.emit('init', [this]);
|
|
26506
27219
|
}
|
|
27220
|
+
_registerCrashBufferLifecycleHandlers() {
|
|
27221
|
+
if (this._bufferLifecycleHandlersRegistered)
|
|
27222
|
+
return;
|
|
27223
|
+
if (typeof window === 'undefined')
|
|
27224
|
+
return;
|
|
27225
|
+
if (typeof document === 'undefined')
|
|
27226
|
+
return;
|
|
27227
|
+
if (!this._crashBuffer)
|
|
27228
|
+
return;
|
|
27229
|
+
this._bufferLifecycleHandlersRegistered = true;
|
|
27230
|
+
const update = () => this._updateCrashBufferActiveState();
|
|
27231
|
+
window.addEventListener('focus', update, { passive: true });
|
|
27232
|
+
window.addEventListener('blur', update, { passive: true });
|
|
27233
|
+
document.addEventListener('visibilitychange', update, { passive: true });
|
|
27234
|
+
// Set initial state.
|
|
27235
|
+
update();
|
|
27236
|
+
}
|
|
27237
|
+
_updateCrashBufferActiveState() {
|
|
27238
|
+
if (!this._crashBuffer)
|
|
27239
|
+
return;
|
|
27240
|
+
if (typeof document === 'undefined')
|
|
27241
|
+
return;
|
|
27242
|
+
let hasFocus = true;
|
|
27243
|
+
try {
|
|
27244
|
+
hasFocus = typeof document.hasFocus === 'function' ? document.hasFocus() : true;
|
|
27245
|
+
}
|
|
27246
|
+
catch (_e) {
|
|
27247
|
+
hasFocus = true;
|
|
27248
|
+
}
|
|
27249
|
+
const isVisible = document.visibilityState === 'visible' && !document.hidden;
|
|
27250
|
+
const active = isVisible && hasFocus;
|
|
27251
|
+
this._crashBuffer.setActive(active);
|
|
27252
|
+
if (active && this._crashBuffer.needsFullSnapshot()) {
|
|
27253
|
+
// If the buffer was cleared while inactive, the next stored rrweb event must be a FullSnapshot.
|
|
27254
|
+
this._recorder.takeFullSnapshot();
|
|
27255
|
+
}
|
|
27256
|
+
}
|
|
27257
|
+
_startBufferOnlyRecording() {
|
|
27258
|
+
var _a, _b;
|
|
27259
|
+
if (!((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled))
|
|
27260
|
+
return;
|
|
27261
|
+
if (!this._crashBuffer)
|
|
27262
|
+
return;
|
|
27263
|
+
// Don’t start if a session is active.
|
|
27264
|
+
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped || this.sessionId)
|
|
27265
|
+
return;
|
|
27266
|
+
void this._recorder.restart(null, _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL);
|
|
27267
|
+
}
|
|
26507
27268
|
/**
|
|
26508
27269
|
* Save the continuous recording session
|
|
26509
27270
|
*/
|
|
@@ -26513,14 +27274,14 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26513
27274
|
if (!this.continuousRecording || !this._configs.showContinuousRecording) {
|
|
26514
27275
|
return;
|
|
26515
27276
|
}
|
|
26516
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27277
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.SAVING);
|
|
26517
27278
|
const res = await this._apiService.saveContinuousDebugSession(this.sessionId, {
|
|
26518
27279
|
sessionAttributes: this.sessionAttributes,
|
|
26519
27280
|
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
26520
27281
|
stoppedAt: this._recorder.stoppedAt,
|
|
26521
27282
|
name: this._getSessionName()
|
|
26522
27283
|
});
|
|
26523
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27284
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.SAVED);
|
|
26524
27285
|
const sessionUrl = res === null || res === void 0 ? void 0 : res.url;
|
|
26525
27286
|
this._sessionWidget.showToast({
|
|
26526
27287
|
type: 'success',
|
|
@@ -26533,11 +27294,11 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26533
27294
|
}
|
|
26534
27295
|
catch (error) {
|
|
26535
27296
|
this.error = error.message;
|
|
26536
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27297
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.ERROR);
|
|
26537
27298
|
}
|
|
26538
27299
|
finally {
|
|
26539
27300
|
setTimeout(() => {
|
|
26540
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27301
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.IDLE);
|
|
26541
27302
|
}, 3000);
|
|
26542
27303
|
}
|
|
26543
27304
|
}
|
|
@@ -26579,7 +27340,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26579
27340
|
stoppedAt: this._recorder.stoppedAt,
|
|
26580
27341
|
};
|
|
26581
27342
|
const response = await this._apiService.stopSession(this.sessionId, request);
|
|
26582
|
-
|
|
27343
|
+
_eventBus__WEBPACK_IMPORTED_MODULE_7__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_RESPONSE, response);
|
|
26583
27344
|
}
|
|
26584
27345
|
this._clearSession();
|
|
26585
27346
|
}
|
|
@@ -26667,11 +27428,70 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26667
27428
|
const normalizedError = this._normalizeError(error);
|
|
26668
27429
|
const normalizedErrorInfo = this._normalizeErrorInfo(errorInfo);
|
|
26669
27430
|
this._tracer.captureException(normalizedError, normalizedErrorInfo);
|
|
27431
|
+
// If user isn't actively recording, auto-flush the crash buffer.
|
|
27432
|
+
if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped && !this.sessionId) {
|
|
27433
|
+
void this.flushBuffer({ reason: 'exception' });
|
|
27434
|
+
}
|
|
26670
27435
|
}
|
|
26671
27436
|
catch (e) {
|
|
26672
27437
|
this.error = (e === null || e === void 0 ? void 0 : e.message) || 'Failed to capture exception';
|
|
26673
27438
|
}
|
|
26674
27439
|
}
|
|
27440
|
+
async flushBuffer(payload) {
|
|
27441
|
+
var _a, _b;
|
|
27442
|
+
if (!((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled))
|
|
27443
|
+
return null;
|
|
27444
|
+
if (!this._crashBuffer)
|
|
27445
|
+
return null;
|
|
27446
|
+
if (this._isFlushingBuffer)
|
|
27447
|
+
return null;
|
|
27448
|
+
// Don’t flush while a live recording is active.
|
|
27449
|
+
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped || this.sessionId)
|
|
27450
|
+
return null;
|
|
27451
|
+
this._isFlushingBuffer = true;
|
|
27452
|
+
try {
|
|
27453
|
+
const reason = (payload === null || payload === void 0 ? void 0 : payload.reason) || 'manual';
|
|
27454
|
+
await this._crashBuffer.setAttrs({
|
|
27455
|
+
sessionAttributes: this.sessionAttributes,
|
|
27456
|
+
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
27457
|
+
userAttributes: this._userAttributes,
|
|
27458
|
+
});
|
|
27459
|
+
const snapshot = await this._crashBuffer.snapshot();
|
|
27460
|
+
if (snapshot.rrwebEvents.length === 0 && snapshot.otelSpans.length === 0) {
|
|
27461
|
+
return null;
|
|
27462
|
+
}
|
|
27463
|
+
const request = {
|
|
27464
|
+
name: this._getSessionName(),
|
|
27465
|
+
stoppedAt: new Date().toISOString(),
|
|
27466
|
+
sessionAttributes: this.sessionAttributes,
|
|
27467
|
+
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
27468
|
+
...(this._userAttributes ? { userAttributes: this._userAttributes } : {}),
|
|
27469
|
+
debugSessionData: {
|
|
27470
|
+
meta: {
|
|
27471
|
+
reason,
|
|
27472
|
+
windowMs: snapshot.windowMs,
|
|
27473
|
+
fromTs: snapshot.fromTs,
|
|
27474
|
+
toTs: snapshot.toTs,
|
|
27475
|
+
},
|
|
27476
|
+
events: snapshot.rrwebEvents.map((e) => e.event),
|
|
27477
|
+
spans: snapshot.otelSpans.map((s) => s.span),
|
|
27478
|
+
attrs: snapshot.attrs,
|
|
27479
|
+
},
|
|
27480
|
+
};
|
|
27481
|
+
try {
|
|
27482
|
+
const res = await this._apiService.startSession(request);
|
|
27483
|
+
await this._crashBuffer.clear();
|
|
27484
|
+
return res;
|
|
27485
|
+
}
|
|
27486
|
+
catch (_e) {
|
|
27487
|
+
// swallow: flush is best-effort; never throw into app code
|
|
27488
|
+
return null;
|
|
27489
|
+
}
|
|
27490
|
+
}
|
|
27491
|
+
finally {
|
|
27492
|
+
this._isFlushingBuffer = false;
|
|
27493
|
+
}
|
|
27494
|
+
}
|
|
26675
27495
|
/**
|
|
26676
27496
|
* @description Check if session should be started/stopped automatically
|
|
26677
27497
|
* @param {ISession} [sessionPayload]
|
|
@@ -26803,12 +27623,12 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26803
27623
|
* Register socket service event listeners
|
|
26804
27624
|
*/
|
|
26805
27625
|
_registerSocketServiceListeners() {
|
|
26806
|
-
this._socketService.on(
|
|
27626
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STOPPED_EVENT, () => {
|
|
26807
27627
|
this._stop();
|
|
26808
27628
|
this._clearSession();
|
|
26809
27629
|
this._sessionWidget.handleUIReseting();
|
|
26810
27630
|
});
|
|
26811
|
-
this._socketService.on(
|
|
27631
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_AUTO_CREATED, (payload) => {
|
|
26812
27632
|
var _a;
|
|
26813
27633
|
if (!(payload === null || payload === void 0 ? void 0 : payload.data))
|
|
26814
27634
|
return;
|
|
@@ -26821,18 +27641,23 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26821
27641
|
},
|
|
26822
27642
|
}, 5000);
|
|
26823
27643
|
});
|
|
26824
|
-
this._socketService.on(
|
|
27644
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.REMOTE_SESSION_RECORDING_START, (payload) => {
|
|
26825
27645
|
console.log('REMOTE_SESSION_RECORDING_START', payload);
|
|
26826
27646
|
if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
|
|
26827
27647
|
this.start();
|
|
26828
27648
|
}
|
|
26829
27649
|
});
|
|
26830
|
-
this._socketService.on(
|
|
27650
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.REMOTE_SESSION_RECORDING_STOP, (payload) => {
|
|
26831
27651
|
console.log('REMOTE_SESSION_RECORDING_STOP', payload);
|
|
26832
27652
|
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
|
|
26833
27653
|
this.stop();
|
|
26834
27654
|
}
|
|
26835
27655
|
});
|
|
27656
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_SAVE_BUFFER_EVENT, (payload) => {
|
|
27657
|
+
// Backend asks the client to flush its crash buffer as a debug session.
|
|
27658
|
+
const reason = (payload === null || payload === void 0 ? void 0 : payload.reason) || 'remote';
|
|
27659
|
+
void this.flushBuffer({ reason });
|
|
27660
|
+
});
|
|
26836
27661
|
}
|
|
26837
27662
|
/**
|
|
26838
27663
|
* Create a new session and start it
|
|
@@ -26875,10 +27700,11 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26875
27700
|
this.sessionState = _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started;
|
|
26876
27701
|
this.sessionType = this.sessionType;
|
|
26877
27702
|
this._tracer.start(this.sessionId, this.sessionType);
|
|
26878
|
-
|
|
27703
|
+
// Ensure we switch from buffer-only recording to session recording cleanly.
|
|
27704
|
+
void this._recorder.restart(this.sessionId, this.sessionType);
|
|
26879
27705
|
this._navigationRecorder.start({ sessionId: this.sessionId, sessionType: this.sessionType, });
|
|
26880
27706
|
if (this.session) {
|
|
26881
|
-
|
|
27707
|
+
_eventBus__WEBPACK_IMPORTED_MODULE_7__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STARTED_EVENT, this.session);
|
|
26882
27708
|
this._socketService.subscribeToSession(this.session);
|
|
26883
27709
|
this._sessionWidget.seconds = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getTimeDifferenceInSeconds)((_a = this.session) === null || _a === void 0 ? void 0 : _a.startedAt);
|
|
26884
27710
|
}
|
|
@@ -26892,6 +27718,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26892
27718
|
this._tracer.stop();
|
|
26893
27719
|
this._recorder.stop();
|
|
26894
27720
|
this._navigationRecorder.stop();
|
|
27721
|
+
this._startBufferOnlyRecording();
|
|
26895
27722
|
}
|
|
26896
27723
|
/**
|
|
26897
27724
|
* Pause the session tracing and recording
|
|
@@ -26907,7 +27734,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26907
27734
|
*/
|
|
26908
27735
|
_resume() {
|
|
26909
27736
|
this._tracer.start(this.sessionId, this.sessionType);
|
|
26910
|
-
this._recorder.
|
|
27737
|
+
void this._recorder.restart(this.sessionId, this.sessionType);
|
|
26911
27738
|
this._navigationRecorder.resume();
|
|
26912
27739
|
this.sessionState = _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started;
|
|
26913
27740
|
}
|
|
@@ -26923,7 +27750,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26923
27750
|
this._start();
|
|
26924
27751
|
}
|
|
26925
27752
|
/**
|
|
26926
|
-
* Set the session ID in
|
|
27753
|
+
* Set the session ID in sessionStorage (with fallback)
|
|
26927
27754
|
* @param sessionId - the session ID to set or clear
|
|
26928
27755
|
*/
|
|
26929
27756
|
_setSession(session) {
|
|
@@ -28566,6 +29393,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28566
29393
|
/* harmony export */ formatTimeForSessionTimer: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.formatTimeForSessionTimer),
|
|
28567
29394
|
/* harmony export */ getFormattedDate: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.getFormattedDate),
|
|
28568
29395
|
/* harmony export */ getNavigatorInfo: () => (/* reexport safe */ _navigator__WEBPACK_IMPORTED_MODULE_0__.getNavigatorInfo),
|
|
29396
|
+
/* harmony export */ getOrCreateTabId: () => (/* reexport safe */ _tabId__WEBPACK_IMPORTED_MODULE_8__.getOrCreateTabId),
|
|
28569
29397
|
/* harmony export */ getStoredItem: () => (/* reexport safe */ _storage__WEBPACK_IMPORTED_MODULE_1__.getStoredItem),
|
|
28570
29398
|
/* harmony export */ getTimeDifferenceInSeconds: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.getTimeDifferenceInSeconds),
|
|
28571
29399
|
/* harmony export */ injectStylesIntoShadowRoot: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_4__.injectStylesIntoShadowRoot),
|
|
@@ -28583,6 +29411,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28583
29411
|
/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./array */ "./src/utils/array.ts");
|
|
28584
29412
|
/* harmony import */ var _type_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./type-utils */ "./src/utils/type-utils.ts");
|
|
28585
29413
|
/* harmony import */ var _globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./globals */ "./src/utils/globals.ts");
|
|
29414
|
+
/* harmony import */ var _tabId__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tabId */ "./src/utils/tabId.ts");
|
|
28586
29415
|
// Export all utility functions
|
|
28587
29416
|
|
|
28588
29417
|
|
|
@@ -28594,6 +29423,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28594
29423
|
|
|
28595
29424
|
|
|
28596
29425
|
|
|
29426
|
+
|
|
28597
29427
|
/***/ }),
|
|
28598
29428
|
|
|
28599
29429
|
/***/ "./src/utils/navigator.ts":
|
|
@@ -28826,32 +29656,88 @@ const isConsoleEvent = (event) => {
|
|
|
28826
29656
|
/* harmony export */ });
|
|
28827
29657
|
/* unused harmony export removeStoredItem */
|
|
28828
29658
|
/**
|
|
28829
|
-
*
|
|
29659
|
+
* Storage utility functions.
|
|
29660
|
+
*
|
|
29661
|
+
* Session state must be isolated per-tab to avoid conflicts across multiple tabs.
|
|
29662
|
+
* We therefore prefer `sessionStorage` and fall back to `localStorage` if needed.
|
|
28830
29663
|
*/
|
|
28831
|
-
const
|
|
28832
|
-
const
|
|
28833
|
-
if (!
|
|
28834
|
-
return
|
|
29664
|
+
const hasWindow = typeof window !== 'undefined';
|
|
29665
|
+
const getStorage = () => {
|
|
29666
|
+
if (!hasWindow)
|
|
29667
|
+
return null;
|
|
29668
|
+
try {
|
|
29669
|
+
if (window.sessionStorage)
|
|
29670
|
+
return window.sessionStorage;
|
|
29671
|
+
}
|
|
29672
|
+
catch (_e) {
|
|
29673
|
+
// sessionStorage can throw (e.g. blocked in some environments)
|
|
29674
|
+
}
|
|
29675
|
+
try {
|
|
29676
|
+
if (window.localStorage)
|
|
29677
|
+
return window.localStorage;
|
|
28835
29678
|
}
|
|
28836
|
-
|
|
29679
|
+
catch (_e) {
|
|
29680
|
+
// localStorage can throw (e.g. blocked in some environments)
|
|
29681
|
+
}
|
|
29682
|
+
return null;
|
|
29683
|
+
};
|
|
29684
|
+
const getStoredItem = (key, parse) => {
|
|
29685
|
+
const storage = getStorage();
|
|
29686
|
+
if (!storage)
|
|
29687
|
+
return null;
|
|
29688
|
+
const item = storage.getItem(key);
|
|
28837
29689
|
return parse ? (item ? JSON.parse(item) : null) : item;
|
|
28838
29690
|
};
|
|
28839
29691
|
const setStoredItem = (key, value) => {
|
|
28840
|
-
|
|
29692
|
+
const storage = getStorage();
|
|
29693
|
+
if (!storage)
|
|
28841
29694
|
return;
|
|
28842
|
-
}
|
|
28843
29695
|
if (value === null || value === undefined) {
|
|
28844
|
-
|
|
29696
|
+
storage.removeItem(key);
|
|
28845
29697
|
}
|
|
28846
29698
|
else {
|
|
28847
|
-
|
|
29699
|
+
storage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
|
|
28848
29700
|
}
|
|
28849
29701
|
};
|
|
28850
29702
|
const removeStoredItem = (key) => {
|
|
28851
|
-
|
|
29703
|
+
const storage = getStorage();
|
|
29704
|
+
if (!storage)
|
|
28852
29705
|
return;
|
|
29706
|
+
storage.removeItem(key);
|
|
29707
|
+
};
|
|
29708
|
+
|
|
29709
|
+
|
|
29710
|
+
/***/ }),
|
|
29711
|
+
|
|
29712
|
+
/***/ "./src/utils/tabId.ts":
|
|
29713
|
+
/*!****************************!*\
|
|
29714
|
+
!*** ./src/utils/tabId.ts ***!
|
|
29715
|
+
\****************************/
|
|
29716
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
29717
|
+
|
|
29718
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
29719
|
+
/* harmony export */ getOrCreateTabId: () => (/* binding */ getOrCreateTabId)
|
|
29720
|
+
/* harmony export */ });
|
|
29721
|
+
const TAB_ID_KEY = 'multiplayer-tab-id';
|
|
29722
|
+
const randomId = () => {
|
|
29723
|
+
// Avoid crypto dependency for older browsers; good enough for per-tab isolation
|
|
29724
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
29725
|
+
};
|
|
29726
|
+
const getOrCreateTabId = () => {
|
|
29727
|
+
if (typeof window === 'undefined')
|
|
29728
|
+
return 'ssr';
|
|
29729
|
+
try {
|
|
29730
|
+
const existing = window.sessionStorage.getItem(TAB_ID_KEY);
|
|
29731
|
+
if (existing)
|
|
29732
|
+
return existing;
|
|
29733
|
+
const id = randomId();
|
|
29734
|
+
window.sessionStorage.setItem(TAB_ID_KEY, id);
|
|
29735
|
+
return id;
|
|
29736
|
+
}
|
|
29737
|
+
catch (_e) {
|
|
29738
|
+
// If sessionStorage is blocked, fall back to a runtime-only id.
|
|
29739
|
+
return randomId();
|
|
28853
29740
|
}
|
|
28854
|
-
window.localStorage.removeItem(key);
|
|
28855
29741
|
};
|
|
28856
29742
|
|
|
28857
29743
|
|
|
@@ -28997,42 +29883,48 @@ const isFile = (x) => {
|
|
|
28997
29883
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* binding */ SessionRecorderIdGenerator)
|
|
28998
29884
|
/* harmony export */ });
|
|
28999
29885
|
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./type */ "../session-recorder-common/dist/esm/type/index.js");
|
|
29000
|
-
/* harmony import */ var
|
|
29001
|
-
/* harmony import */ var
|
|
29886
|
+
/* harmony import */ var _sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdk */ "../session-recorder-common/dist/esm/sdk/index.js");
|
|
29887
|
+
/* harmony import */ var _constants_constants_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants/constants.base */ "../session-recorder-common/dist/esm/constants/constants.base.js");
|
|
29002
29888
|
|
|
29003
29889
|
|
|
29004
29890
|
|
|
29005
29891
|
var SessionRecorderIdGenerator = /** @class */ (function () {
|
|
29006
29892
|
function SessionRecorderIdGenerator() {
|
|
29007
|
-
this.generateLongId = (0,
|
|
29008
|
-
this.generateShortId = (0,
|
|
29893
|
+
this.generateLongId = (0,_sdk__WEBPACK_IMPORTED_MODULE_1__.getIdGenerator)(16);
|
|
29894
|
+
this.generateShortId = (0,_sdk__WEBPACK_IMPORTED_MODULE_1__.getIdGenerator)(8);
|
|
29009
29895
|
this.sessionShortId = '';
|
|
29896
|
+
this.clientId = '';
|
|
29010
29897
|
this.sessionType = _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
29011
29898
|
}
|
|
29012
29899
|
SessionRecorderIdGenerator.prototype.generateTraceId = function () {
|
|
29013
29900
|
var traceId = this.generateLongId();
|
|
29014
|
-
if (this.sessionShortId) {
|
|
29015
|
-
|
|
29016
|
-
switch (this.sessionType) {
|
|
29017
|
-
case _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS:
|
|
29018
|
-
sessionTypePrefix = _constants_constants_base__WEBPACK_IMPORTED_MODULE_1__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX;
|
|
29019
|
-
break;
|
|
29020
|
-
default:
|
|
29021
|
-
sessionTypePrefix = _constants_constants_base__WEBPACK_IMPORTED_MODULE_1__.MULTIPLAYER_TRACE_DEBUG_PREFIX;
|
|
29022
|
-
}
|
|
29023
|
-
var prefix = "".concat(sessionTypePrefix).concat(this.sessionShortId);
|
|
29024
|
-
var sessionTraceId = "".concat(prefix).concat(traceId.substring(prefix.length, traceId.length));
|
|
29025
|
-
return sessionTraceId;
|
|
29901
|
+
if (!this.sessionShortId && !this.sessionType) {
|
|
29902
|
+
return traceId;
|
|
29026
29903
|
}
|
|
29027
|
-
|
|
29904
|
+
var sessionTypePrefix = _constants_constants_base__WEBPACK_IMPORTED_MODULE_2__.MULTIPLAYER_TRACE_PREFIX_MAP[this.sessionType];
|
|
29905
|
+
var prefix = "".concat(sessionTypePrefix).concat([_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE, _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE].includes(this.sessionType) ? this.clientId : '').concat(this.sessionShortId);
|
|
29906
|
+
var sessionTraceId = "".concat(prefix).concat(traceId.substring(prefix.length, traceId.length));
|
|
29907
|
+
return sessionTraceId;
|
|
29028
29908
|
};
|
|
29029
29909
|
SessionRecorderIdGenerator.prototype.generateSpanId = function () {
|
|
29030
29910
|
return this.generateShortId();
|
|
29031
29911
|
};
|
|
29032
|
-
SessionRecorderIdGenerator.prototype.setSessionId = function (sessionShortId, sessionType) {
|
|
29912
|
+
SessionRecorderIdGenerator.prototype.setSessionId = function (sessionShortId, sessionType, clientId) {
|
|
29033
29913
|
if (sessionType === void 0) { sessionType = _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL; }
|
|
29914
|
+
if (clientId === void 0) { clientId = ''; }
|
|
29915
|
+
if (!clientId &&
|
|
29916
|
+
[
|
|
29917
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE,
|
|
29918
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE,
|
|
29919
|
+
].includes(sessionType)) {
|
|
29920
|
+
throw new Error("Client ID is required for ".concat([
|
|
29921
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE,
|
|
29922
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE,
|
|
29923
|
+
].join(', '), " session types"));
|
|
29924
|
+
}
|
|
29034
29925
|
this.sessionShortId = sessionShortId;
|
|
29035
29926
|
this.sessionType = sessionType;
|
|
29927
|
+
this.clientId = clientId;
|
|
29036
29928
|
};
|
|
29037
29929
|
return SessionRecorderIdGenerator;
|
|
29038
29930
|
}());
|
|
@@ -29133,6 +30025,7 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
|
|
|
29133
30025
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* binding */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29134
30026
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* binding */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29135
30027
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* binding */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30028
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29136
30029
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_ID),
|
|
29137
30030
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29138
30031
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* binding */ ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29146,18 +30039,34 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
|
|
|
29146
30039
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL),
|
|
29147
30040
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL),
|
|
29148
30041
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30042
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* binding */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29149
30043
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30044
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX),
|
|
29150
30045
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29151
30046
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH: () => (/* binding */ MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH),
|
|
29152
|
-
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_DOC_PREFIX)
|
|
30047
|
+
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30048
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* binding */ MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30049
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
|
|
29153
30050
|
/* harmony export */ });
|
|
30051
|
+
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../type */ "../session-recorder-common/dist/esm/type/index.js");
|
|
30052
|
+
var _a;
|
|
30053
|
+
|
|
29154
30054
|
/**
|
|
29155
30055
|
* @deprecated
|
|
29156
30056
|
*/
|
|
29157
30057
|
var MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c';
|
|
29158
30058
|
var MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb';
|
|
29159
30059
|
var MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb';
|
|
29160
|
-
var
|
|
30060
|
+
var MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = 'cdbcac';
|
|
30061
|
+
var MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX = 'debcdb';
|
|
30062
|
+
var MULTIPLAYER_TRACE_PREFIX_MAP = (_a = {},
|
|
30063
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS] = MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
30064
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE] = MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
|
|
30065
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE] = MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX,
|
|
30066
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL] = MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
30067
|
+
_a);
|
|
30068
|
+
var MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 8;
|
|
30069
|
+
var MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = 8;
|
|
29161
30070
|
/**
|
|
29162
30071
|
* @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead
|
|
29163
30072
|
*/
|
|
@@ -29181,6 +30090,7 @@ var ATTR_MULTIPLAYER_PLATFORM_NAME = 'multiplayer.platform.name';
|
|
|
29181
30090
|
var ATTR_MULTIPLAYER_CLIENT_ID = 'multiplayer.client.id';
|
|
29182
30091
|
var ATTR_MULTIPLAYER_INTEGRATION_ID = 'multiplayer.integration.id';
|
|
29183
30092
|
var ATTR_MULTIPLAYER_SESSION_ID = 'multiplayer.session.id';
|
|
30093
|
+
var ATTR_MULTIPLAYER_SESSION_CLIENT_ID = 'multiplayer.session.client.id';
|
|
29184
30094
|
var ATTR_MULTIPLAYER_HTTP_PROXY = 'multiplayer.http.proxy';
|
|
29185
30095
|
var ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = 'multiplayer.http.proxy.type';
|
|
29186
30096
|
var ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = 'multiplayer.http.request.body';
|
|
@@ -29238,6 +30148,7 @@ var MASK_PLACEHOLDER = '***MASKED***';
|
|
|
29238
30148
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29239
30149
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29240
30150
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30151
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29241
30152
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
29242
30153
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29243
30154
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29251,10 +30162,14 @@ var MASK_PLACEHOLDER = '***MASKED***';
|
|
|
29251
30162
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL),
|
|
29252
30163
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL),
|
|
29253
30164
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30165
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29254
30166
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30167
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX),
|
|
29255
30168
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29256
30169
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH),
|
|
29257
|
-
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DOC_PREFIX)
|
|
30170
|
+
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30171
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30172
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
|
|
29258
30173
|
/* harmony export */ });
|
|
29259
30174
|
/* harmony import */ var _constants_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.base */ "../session-recorder-common/dist/esm/constants/constants.base.js");
|
|
29260
30175
|
|
|
@@ -29444,6 +30359,7 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29444
30359
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29445
30360
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29446
30361
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30362
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29447
30363
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
29448
30364
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29449
30365
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29458,10 +30374,14 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29458
30374
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL),
|
|
29459
30375
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL),
|
|
29460
30376
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30377
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29461
30378
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30379
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX),
|
|
29462
30380
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29463
30381
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH),
|
|
29464
30382
|
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30383
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30384
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX),
|
|
29465
30385
|
/* harmony export */ SessionRecorderBrowserTraceExporter: () => (/* reexport safe */ _exporters_index_browser__WEBPACK_IMPORTED_MODULE_5__.SessionRecorderBrowserTraceExporter),
|
|
29466
30386
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* reexport safe */ _SessionRecorderIdGenerator__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderIdGenerator),
|
|
29467
30387
|
/* harmony export */ SessionRecorderSdk: () => (/* reexport module object */ _sdk__WEBPACK_IMPORTED_MODULE_3__),
|
|
@@ -30096,6 +31016,8 @@ var SessionType;
|
|
|
30096
31016
|
*/
|
|
30097
31017
|
SessionType["PLAIN"] = "MANUAL";
|
|
30098
31018
|
SessionType["MANUAL"] = "MANUAL";
|
|
31019
|
+
SessionType["CONTINUOUS_SESSION_CACHE"] = "CONTINUOUS_SESSION_CACHE";
|
|
31020
|
+
SessionType["SESSION_CACHE"] = "SESSION_CACHE";
|
|
30099
31021
|
})(SessionType || (SessionType = {}));
|
|
30100
31022
|
//# sourceMappingURL=session-type.enum.js.map
|
|
30101
31023
|
|
|
@@ -31947,6 +32869,115 @@ const getRecordConsolePlugin = (options) => ({
|
|
|
31947
32869
|
//# sourceMappingURL=rrweb-plugin-console-record.js.map
|
|
31948
32870
|
|
|
31949
32871
|
|
|
32872
|
+
/***/ }),
|
|
32873
|
+
|
|
32874
|
+
/***/ "../../node_modules/@rrweb/types/dist/types.js":
|
|
32875
|
+
/*!*****************************************************!*\
|
|
32876
|
+
!*** ../../node_modules/@rrweb/types/dist/types.js ***!
|
|
32877
|
+
\*****************************************************/
|
|
32878
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
32879
|
+
|
|
32880
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
32881
|
+
/* harmony export */ EventType: () => (/* binding */ EventType)
|
|
32882
|
+
/* harmony export */ });
|
|
32883
|
+
/* unused harmony exports CanvasContext, IncrementalSource, MediaInteractions, MouseInteractions, NodeType, PointerTypes, ReplayerEvents */
|
|
32884
|
+
var EventType = /* @__PURE__ */ ((EventType2) => {
|
|
32885
|
+
EventType2[EventType2["DomContentLoaded"] = 0] = "DomContentLoaded";
|
|
32886
|
+
EventType2[EventType2["Load"] = 1] = "Load";
|
|
32887
|
+
EventType2[EventType2["FullSnapshot"] = 2] = "FullSnapshot";
|
|
32888
|
+
EventType2[EventType2["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
|
|
32889
|
+
EventType2[EventType2["Meta"] = 4] = "Meta";
|
|
32890
|
+
EventType2[EventType2["Custom"] = 5] = "Custom";
|
|
32891
|
+
EventType2[EventType2["Plugin"] = 6] = "Plugin";
|
|
32892
|
+
return EventType2;
|
|
32893
|
+
})(EventType || {});
|
|
32894
|
+
var IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {
|
|
32895
|
+
IncrementalSource2[IncrementalSource2["Mutation"] = 0] = "Mutation";
|
|
32896
|
+
IncrementalSource2[IncrementalSource2["MouseMove"] = 1] = "MouseMove";
|
|
32897
|
+
IncrementalSource2[IncrementalSource2["MouseInteraction"] = 2] = "MouseInteraction";
|
|
32898
|
+
IncrementalSource2[IncrementalSource2["Scroll"] = 3] = "Scroll";
|
|
32899
|
+
IncrementalSource2[IncrementalSource2["ViewportResize"] = 4] = "ViewportResize";
|
|
32900
|
+
IncrementalSource2[IncrementalSource2["Input"] = 5] = "Input";
|
|
32901
|
+
IncrementalSource2[IncrementalSource2["TouchMove"] = 6] = "TouchMove";
|
|
32902
|
+
IncrementalSource2[IncrementalSource2["MediaInteraction"] = 7] = "MediaInteraction";
|
|
32903
|
+
IncrementalSource2[IncrementalSource2["StyleSheetRule"] = 8] = "StyleSheetRule";
|
|
32904
|
+
IncrementalSource2[IncrementalSource2["CanvasMutation"] = 9] = "CanvasMutation";
|
|
32905
|
+
IncrementalSource2[IncrementalSource2["Font"] = 10] = "Font";
|
|
32906
|
+
IncrementalSource2[IncrementalSource2["Log"] = 11] = "Log";
|
|
32907
|
+
IncrementalSource2[IncrementalSource2["Drag"] = 12] = "Drag";
|
|
32908
|
+
IncrementalSource2[IncrementalSource2["StyleDeclaration"] = 13] = "StyleDeclaration";
|
|
32909
|
+
IncrementalSource2[IncrementalSource2["Selection"] = 14] = "Selection";
|
|
32910
|
+
IncrementalSource2[IncrementalSource2["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet";
|
|
32911
|
+
IncrementalSource2[IncrementalSource2["CustomElement"] = 16] = "CustomElement";
|
|
32912
|
+
return IncrementalSource2;
|
|
32913
|
+
})(IncrementalSource || {});
|
|
32914
|
+
var MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {
|
|
32915
|
+
MouseInteractions2[MouseInteractions2["MouseUp"] = 0] = "MouseUp";
|
|
32916
|
+
MouseInteractions2[MouseInteractions2["MouseDown"] = 1] = "MouseDown";
|
|
32917
|
+
MouseInteractions2[MouseInteractions2["Click"] = 2] = "Click";
|
|
32918
|
+
MouseInteractions2[MouseInteractions2["ContextMenu"] = 3] = "ContextMenu";
|
|
32919
|
+
MouseInteractions2[MouseInteractions2["DblClick"] = 4] = "DblClick";
|
|
32920
|
+
MouseInteractions2[MouseInteractions2["Focus"] = 5] = "Focus";
|
|
32921
|
+
MouseInteractions2[MouseInteractions2["Blur"] = 6] = "Blur";
|
|
32922
|
+
MouseInteractions2[MouseInteractions2["TouchStart"] = 7] = "TouchStart";
|
|
32923
|
+
MouseInteractions2[MouseInteractions2["TouchMove_Departed"] = 8] = "TouchMove_Departed";
|
|
32924
|
+
MouseInteractions2[MouseInteractions2["TouchEnd"] = 9] = "TouchEnd";
|
|
32925
|
+
MouseInteractions2[MouseInteractions2["TouchCancel"] = 10] = "TouchCancel";
|
|
32926
|
+
return MouseInteractions2;
|
|
32927
|
+
})(MouseInteractions || {});
|
|
32928
|
+
var PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {
|
|
32929
|
+
PointerTypes2[PointerTypes2["Mouse"] = 0] = "Mouse";
|
|
32930
|
+
PointerTypes2[PointerTypes2["Pen"] = 1] = "Pen";
|
|
32931
|
+
PointerTypes2[PointerTypes2["Touch"] = 2] = "Touch";
|
|
32932
|
+
return PointerTypes2;
|
|
32933
|
+
})(PointerTypes || {});
|
|
32934
|
+
var CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {
|
|
32935
|
+
CanvasContext2[CanvasContext2["2D"] = 0] = "2D";
|
|
32936
|
+
CanvasContext2[CanvasContext2["WebGL"] = 1] = "WebGL";
|
|
32937
|
+
CanvasContext2[CanvasContext2["WebGL2"] = 2] = "WebGL2";
|
|
32938
|
+
return CanvasContext2;
|
|
32939
|
+
})(CanvasContext || {});
|
|
32940
|
+
var MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {
|
|
32941
|
+
MediaInteractions2[MediaInteractions2["Play"] = 0] = "Play";
|
|
32942
|
+
MediaInteractions2[MediaInteractions2["Pause"] = 1] = "Pause";
|
|
32943
|
+
MediaInteractions2[MediaInteractions2["Seeked"] = 2] = "Seeked";
|
|
32944
|
+
MediaInteractions2[MediaInteractions2["VolumeChange"] = 3] = "VolumeChange";
|
|
32945
|
+
MediaInteractions2[MediaInteractions2["RateChange"] = 4] = "RateChange";
|
|
32946
|
+
return MediaInteractions2;
|
|
32947
|
+
})(MediaInteractions || {});
|
|
32948
|
+
var ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {
|
|
32949
|
+
ReplayerEvents2["Start"] = "start";
|
|
32950
|
+
ReplayerEvents2["Pause"] = "pause";
|
|
32951
|
+
ReplayerEvents2["Resume"] = "resume";
|
|
32952
|
+
ReplayerEvents2["Resize"] = "resize";
|
|
32953
|
+
ReplayerEvents2["Finish"] = "finish";
|
|
32954
|
+
ReplayerEvents2["FullsnapshotRebuilded"] = "fullsnapshot-rebuilded";
|
|
32955
|
+
ReplayerEvents2["LoadStylesheetStart"] = "load-stylesheet-start";
|
|
32956
|
+
ReplayerEvents2["LoadStylesheetEnd"] = "load-stylesheet-end";
|
|
32957
|
+
ReplayerEvents2["SkipStart"] = "skip-start";
|
|
32958
|
+
ReplayerEvents2["SkipEnd"] = "skip-end";
|
|
32959
|
+
ReplayerEvents2["MouseInteraction"] = "mouse-interaction";
|
|
32960
|
+
ReplayerEvents2["EventCast"] = "event-cast";
|
|
32961
|
+
ReplayerEvents2["CustomEvent"] = "custom-event";
|
|
32962
|
+
ReplayerEvents2["Flush"] = "flush";
|
|
32963
|
+
ReplayerEvents2["StateChange"] = "state-change";
|
|
32964
|
+
ReplayerEvents2["PlayBack"] = "play-back";
|
|
32965
|
+
ReplayerEvents2["Destroy"] = "destroy";
|
|
32966
|
+
return ReplayerEvents2;
|
|
32967
|
+
})(ReplayerEvents || {});
|
|
32968
|
+
var NodeType = /* @__PURE__ */ ((NodeType2) => {
|
|
32969
|
+
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
32970
|
+
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
32971
|
+
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
32972
|
+
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
32973
|
+
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
32974
|
+
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
32975
|
+
return NodeType2;
|
|
32976
|
+
})(NodeType || {});
|
|
32977
|
+
|
|
32978
|
+
//# sourceMappingURL=types.js.map
|
|
32979
|
+
|
|
32980
|
+
|
|
31950
32981
|
/***/ }),
|
|
31951
32982
|
|
|
31952
32983
|
/***/ "../../node_modules/@socket.io/component-emitter/lib/esm/index.js":
|
|
@@ -48362,6 +49393,7 @@ var __webpack_exports__ = {};
|
|
|
48362
49393
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
48363
49394
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
48364
49395
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
49396
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
48365
49397
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
48366
49398
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
48367
49399
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -48376,10 +49408,14 @@ var __webpack_exports__ = {};
|
|
|
48376
49408
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL),
|
|
48377
49409
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL),
|
|
48378
49410
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
49411
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
48379
49412
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
49413
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX),
|
|
48380
49414
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
48381
49415
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH),
|
|
48382
49416
|
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
49417
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
49418
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX),
|
|
48383
49419
|
/* harmony export */ NavigationRecorder: () => (/* reexport safe */ _navigation__WEBPACK_IMPORTED_MODULE_6__.NavigationRecorder),
|
|
48384
49420
|
/* harmony export */ SessionRecorderBrowserTraceExporter: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderBrowserTraceExporter),
|
|
48385
49421
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderIdGenerator),
|
|
@@ -48457,6 +49493,7 @@ var __webpack_exports__ATTR_MULTIPLAYER_PROJECT_ID = __webpack_exports__.ATTR_MU
|
|
|
48457
49493
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE = __webpack_exports__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE;
|
|
48458
49494
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING = __webpack_exports__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING;
|
|
48459
49495
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE = __webpack_exports__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE;
|
|
49496
|
+
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_CLIENT_ID = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID;
|
|
48460
49497
|
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_ID = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_ID;
|
|
48461
49498
|
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION;
|
|
48462
49499
|
var __webpack_exports__ATTR_MULTIPLAYER_USER_HASH = __webpack_exports__.ATTR_MULTIPLAYER_USER_HASH;
|
|
@@ -48471,10 +49508,14 @@ var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL = __webpack_ex
|
|
|
48471
49508
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL;
|
|
48472
49509
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL;
|
|
48473
49510
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL;
|
|
49511
|
+
var __webpack_exports__MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = __webpack_exports__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH;
|
|
48474
49512
|
var __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX;
|
|
49513
|
+
var __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX;
|
|
48475
49514
|
var __webpack_exports__MULTIPLAYER_TRACE_DEBUG_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_DEBUG_PREFIX;
|
|
48476
49515
|
var __webpack_exports__MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = __webpack_exports__.MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH;
|
|
48477
49516
|
var __webpack_exports__MULTIPLAYER_TRACE_DOC_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_DOC_PREFIX;
|
|
49517
|
+
var __webpack_exports__MULTIPLAYER_TRACE_PREFIX_MAP = __webpack_exports__.MULTIPLAYER_TRACE_PREFIX_MAP;
|
|
49518
|
+
var __webpack_exports__MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX;
|
|
48478
49519
|
var __webpack_exports__NavigationRecorder = __webpack_exports__.NavigationRecorder;
|
|
48479
49520
|
var __webpack_exports__SessionRecorderBrowserTraceExporter = __webpack_exports__.SessionRecorderBrowserTraceExporter;
|
|
48480
49521
|
var __webpack_exports__SessionRecorderIdGenerator = __webpack_exports__.SessionRecorderIdGenerator;
|
|
@@ -48486,6 +49527,6 @@ var __webpack_exports__UserType = __webpack_exports__.UserType;
|
|
|
48486
49527
|
var __webpack_exports__WidgetButtonPlacement = __webpack_exports__.WidgetButtonPlacement;
|
|
48487
49528
|
var __webpack_exports__default = __webpack_exports__["default"];
|
|
48488
49529
|
var __webpack_exports__recorderEventBus = __webpack_exports__.recorderEventBus;
|
|
48489
|
-
export { __webpack_exports__ATTR_MULTIPLAYER_CLIENT_ID as ATTR_MULTIPLAYER_CLIENT_ID, __webpack_exports__ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE as ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE, __webpack_exports__ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON as ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON, __webpack_exports__ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE as ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING as ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE as ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_HTTP_PROXY as ATTR_MULTIPLAYER_HTTP_PROXY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_PROXY_TYPE as ATTR_MULTIPLAYER_HTTP_PROXY_TYPE, __webpack_exports__ATTR_MULTIPLAYER_HTTP_REQUEST_BODY as ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS as ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY as ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING as ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS as ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, __webpack_exports__ATTR_MULTIPLAYER_INTEGRATION_ID as ATTR_MULTIPLAYER_INTEGRATION_ID, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH as ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH as ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_HASH as ATTR_MULTIPLAYER_ISSUE_HASH, __webpack_exports__ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY as ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY, __webpack_exports__ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING as ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_PLATFORM_ID as ATTR_MULTIPLAYER_PLATFORM_ID, __webpack_exports__ATTR_MULTIPLAYER_PLATFORM_NAME as ATTR_MULTIPLAYER_PLATFORM_NAME, __webpack_exports__ATTR_MULTIPLAYER_PROJECT_ID as ATTR_MULTIPLAYER_PROJECT_ID, __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE as ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING as ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE as ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_SESSION_ID as ATTR_MULTIPLAYER_SESSION_ID, __webpack_exports__ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION as ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION, __webpack_exports__ATTR_MULTIPLAYER_USER_HASH as ATTR_MULTIPLAYER_USER_HASH, __webpack_exports__ATTR_MULTIPLAYER_WORKSPACE_ID as ATTR_MULTIPLAYER_WORKSPACE_ID, __webpack_exports__DebugSessionDataType as DebugSessionDataType, __webpack_exports__MASK_PLACEHOLDER as MASK_PLACEHOLDER, __webpack_exports__MULTIPLAYER_ATTRIBUTE_PREFIX as MULTIPLAYER_ATTRIBUTE_PREFIX, __webpack_exports__MULTIPLAYER_BASE_API_URL as MULTIPLAYER_BASE_API_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL, __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX as MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_DEBUG_PREFIX as MULTIPLAYER_TRACE_DEBUG_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH as MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH, __webpack_exports__MULTIPLAYER_TRACE_DOC_PREFIX as MULTIPLAYER_TRACE_DOC_PREFIX, __webpack_exports__NavigationRecorder as NavigationRecorder, __webpack_exports__SessionRecorderBrowserTraceExporter as SessionRecorderBrowserTraceExporter, __webpack_exports__SessionRecorderIdGenerator as SessionRecorderIdGenerator, __webpack_exports__SessionRecorderSdk as SessionRecorderSdk, __webpack_exports__SessionRecorderTraceIdRatioBasedSampler as SessionRecorderTraceIdRatioBasedSampler, __webpack_exports__SessionState as SessionState, __webpack_exports__SessionType as SessionType, __webpack_exports__UserType as UserType, __webpack_exports__WidgetButtonPlacement as WidgetButtonPlacement, __webpack_exports__default as default, __webpack_exports__recorderEventBus as recorderEventBus };
|
|
49530
|
+
export { __webpack_exports__ATTR_MULTIPLAYER_CLIENT_ID as ATTR_MULTIPLAYER_CLIENT_ID, __webpack_exports__ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE as ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE, __webpack_exports__ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON as ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON, __webpack_exports__ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE as ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING as ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE as ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_HTTP_PROXY as ATTR_MULTIPLAYER_HTTP_PROXY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_PROXY_TYPE as ATTR_MULTIPLAYER_HTTP_PROXY_TYPE, __webpack_exports__ATTR_MULTIPLAYER_HTTP_REQUEST_BODY as ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS as ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY as ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING as ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS as ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, __webpack_exports__ATTR_MULTIPLAYER_INTEGRATION_ID as ATTR_MULTIPLAYER_INTEGRATION_ID, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH as ATTR_MULTIPLAYER_ISSUE_COMPONENT_HASH, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH as ATTR_MULTIPLAYER_ISSUE_CUSTOM_HASH, __webpack_exports__ATTR_MULTIPLAYER_ISSUE_HASH as ATTR_MULTIPLAYER_ISSUE_HASH, __webpack_exports__ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY as ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY, __webpack_exports__ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING as ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_PLATFORM_ID as ATTR_MULTIPLAYER_PLATFORM_ID, __webpack_exports__ATTR_MULTIPLAYER_PLATFORM_NAME as ATTR_MULTIPLAYER_PLATFORM_NAME, __webpack_exports__ATTR_MULTIPLAYER_PROJECT_ID as ATTR_MULTIPLAYER_PROJECT_ID, __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE as ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING as ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING, __webpack_exports__ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE as ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE, __webpack_exports__ATTR_MULTIPLAYER_SESSION_CLIENT_ID as ATTR_MULTIPLAYER_SESSION_CLIENT_ID, __webpack_exports__ATTR_MULTIPLAYER_SESSION_ID as ATTR_MULTIPLAYER_SESSION_ID, __webpack_exports__ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION as ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION, __webpack_exports__ATTR_MULTIPLAYER_USER_HASH as ATTR_MULTIPLAYER_USER_HASH, __webpack_exports__ATTR_MULTIPLAYER_WORKSPACE_ID as ATTR_MULTIPLAYER_WORKSPACE_ID, __webpack_exports__DebugSessionDataType as DebugSessionDataType, __webpack_exports__MASK_PLACEHOLDER as MASK_PLACEHOLDER, __webpack_exports__MULTIPLAYER_ATTRIBUTE_PREFIX as MULTIPLAYER_ATTRIBUTE_PREFIX, __webpack_exports__MULTIPLAYER_BASE_API_URL as MULTIPLAYER_BASE_API_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL as MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL, __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL as MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL, __webpack_exports__MULTIPLAYER_TRACE_CLIENT_ID_LENGTH as MULTIPLAYER_TRACE_CLIENT_ID_LENGTH, __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX as MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX as MULTIPLAYER_TRACE_CONTINUOUS_SESSION_DEBUG_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_DEBUG_PREFIX as MULTIPLAYER_TRACE_DEBUG_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH as MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH, __webpack_exports__MULTIPLAYER_TRACE_DOC_PREFIX as MULTIPLAYER_TRACE_DOC_PREFIX, __webpack_exports__MULTIPLAYER_TRACE_PREFIX_MAP as MULTIPLAYER_TRACE_PREFIX_MAP, __webpack_exports__MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX as MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX, __webpack_exports__NavigationRecorder as NavigationRecorder, __webpack_exports__SessionRecorderBrowserTraceExporter as SessionRecorderBrowserTraceExporter, __webpack_exports__SessionRecorderIdGenerator as SessionRecorderIdGenerator, __webpack_exports__SessionRecorderSdk as SessionRecorderSdk, __webpack_exports__SessionRecorderTraceIdRatioBasedSampler as SessionRecorderTraceIdRatioBasedSampler, __webpack_exports__SessionState as SessionState, __webpack_exports__SessionType as SessionType, __webpack_exports__UserType as UserType, __webpack_exports__WidgetButtonPlacement as WidgetButtonPlacement, __webpack_exports__default as default, __webpack_exports__recorderEventBus as recorderEventBus };
|
|
48490
49531
|
|
|
48491
49532
|
//# sourceMappingURL=index.js.map
|