@multiplayer-app/session-recorder-browser 1.3.16 → 1.3.19
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 +1423 -288
- 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 +8 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/index.js +1411 -289
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +1411 -288
- package/dist/index.umd.js.map +1 -1
- package/dist/otel/CrashBufferSpanProcessor.d.ts +18 -0
- package/dist/otel/CrashBufferSpanProcessor.d.ts.map +1 -0
- package/dist/otel/CrashBufferSpanProcessor.js +42 -0
- package/dist/otel/CrashBufferSpanProcessor.js.map +1 -0
- package/dist/otel/index.d.ts +9 -1
- package/dist/otel/index.d.ts.map +1 -1
- package/dist/otel/index.js +45 -32
- 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 +162 -84
- package/dist/rrweb/index.js.map +1 -1
- package/dist/services/api.service.d.ts +22 -0
- package/dist/services/api.service.d.ts.map +1 -1
- package/dist/services/api.service.js +22 -5
- package/dist/services/api.service.js.map +1 -1
- package/dist/services/crashBuffer.service.d.ts +35 -0
- package/dist/services/crashBuffer.service.d.ts.map +1 -0
- package/dist/services/crashBuffer.service.js +207 -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 +338 -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 +13 -2
- package/dist/session-recorder.d.ts.map +1 -1
- package/dist/session-recorder.js +176 -31
- package/dist/session-recorder.js.map +1 -1
- package/dist/types/session-recorder.d.ts +19 -6
- 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.19" || 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
|
|
|
@@ -24784,6 +24798,62 @@ class NavigationRecorder {
|
|
|
24784
24798
|
|
|
24785
24799
|
|
|
24786
24800
|
|
|
24801
|
+
/***/ }),
|
|
24802
|
+
|
|
24803
|
+
/***/ "./src/otel/CrashBufferSpanProcessor.ts":
|
|
24804
|
+
/*!**********************************************!*\
|
|
24805
|
+
!*** ./src/otel/CrashBufferSpanProcessor.ts ***!
|
|
24806
|
+
\**********************************************/
|
|
24807
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
24808
|
+
|
|
24809
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
24810
|
+
/* harmony export */ CrashBufferSpanProcessor: () => (/* binding */ CrashBufferSpanProcessor)
|
|
24811
|
+
/* harmony export */ });
|
|
24812
|
+
/* harmony import */ var _opentelemetry_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @opentelemetry/api */ "../../node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js");
|
|
24813
|
+
/* 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");
|
|
24814
|
+
|
|
24815
|
+
|
|
24816
|
+
/**
|
|
24817
|
+
* Implementation of the {@link SpanProcessor} that batches spans exported by
|
|
24818
|
+
* the SDK then pushes them to the exporter pipeline.
|
|
24819
|
+
*/
|
|
24820
|
+
class CrashBufferSpanProcessor {
|
|
24821
|
+
constructor(_exporter, _crashBuffer, _serializeSpan) {
|
|
24822
|
+
this._exporter = _exporter;
|
|
24823
|
+
this._crashBuffer = _crashBuffer;
|
|
24824
|
+
this._serializeSpan = _serializeSpan;
|
|
24825
|
+
}
|
|
24826
|
+
forceFlush() {
|
|
24827
|
+
return this._exporter.forceFlush();
|
|
24828
|
+
}
|
|
24829
|
+
onStart(_span, _parentContext) {
|
|
24830
|
+
return this._exporter.onStart(_span, _parentContext);
|
|
24831
|
+
}
|
|
24832
|
+
onEnd(span) {
|
|
24833
|
+
const traceId = span.spanContext().traceId;
|
|
24834
|
+
if ((span.spanContext().traceFlags & _opentelemetry_api__WEBPACK_IMPORTED_MODULE_1__.TraceFlags.SAMPLED) === 0) {
|
|
24835
|
+
return;
|
|
24836
|
+
}
|
|
24837
|
+
if (traceId.startsWith(_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX) ||
|
|
24838
|
+
traceId.startsWith(_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)) {
|
|
24839
|
+
if (this._crashBuffer) {
|
|
24840
|
+
this._crashBuffer.appendSpans([
|
|
24841
|
+
{
|
|
24842
|
+
ts: span.startTime[0] * 1000 + span.startTime[1] / 1000000,
|
|
24843
|
+
span: this._serializeSpan(span)
|
|
24844
|
+
}
|
|
24845
|
+
]);
|
|
24846
|
+
}
|
|
24847
|
+
return;
|
|
24848
|
+
}
|
|
24849
|
+
this._exporter.onEnd(span);
|
|
24850
|
+
}
|
|
24851
|
+
shutdown() {
|
|
24852
|
+
return this._exporter.shutdown();
|
|
24853
|
+
}
|
|
24854
|
+
}
|
|
24855
|
+
|
|
24856
|
+
|
|
24787
24857
|
/***/ }),
|
|
24788
24858
|
|
|
24789
24859
|
/***/ "./src/otel/helpers.ts":
|
|
@@ -25022,19 +25092,21 @@ const getElementTextContent = (element) => {
|
|
|
25022
25092
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
25023
25093
|
/* harmony export */ TracerBrowserSDK: () => (/* binding */ TracerBrowserSDK)
|
|
25024
25094
|
/* harmony export */ });
|
|
25025
|
-
/* harmony import */ var
|
|
25026
|
-
/* harmony import */ var
|
|
25027
|
-
/* harmony import */ var
|
|
25028
|
-
/* harmony import */ var
|
|
25029
|
-
/* harmony import */ var
|
|
25030
|
-
/* harmony import */ var
|
|
25095
|
+
/* harmony import */ var _opentelemetry_resources__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @opentelemetry/resources */ "../../node_modules/@opentelemetry/resources/build/esm/ResourceImpl.js");
|
|
25096
|
+
/* harmony import */ var _opentelemetry_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @opentelemetry/core */ "../../node_modules/@opentelemetry/core/build/esm/trace/W3CTraceContextPropagator.js");
|
|
25097
|
+
/* harmony import */ var _opentelemetry_sdk_trace_web__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @opentelemetry/sdk-trace-web */ "../../node_modules/@opentelemetry/sdk-trace-web/build/esm/WebTracerProvider.js");
|
|
25098
|
+
/* harmony import */ var _opentelemetry_sdk_trace_base__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @opentelemetry/sdk-trace-base */ "../../node_modules/@opentelemetry/sdk-trace-base/build/esm/platform/browser/export/BatchSpanProcessor.js");
|
|
25099
|
+
/* harmony import */ var _opentelemetry_semantic_conventions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @opentelemetry/semantic-conventions */ "../../node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js");
|
|
25100
|
+
/* harmony import */ var _opentelemetry_instrumentation__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @opentelemetry/instrumentation */ "../../node_modules/@opentelemetry/instrumentation/build/esm/autoLoader.js");
|
|
25031
25101
|
/* harmony import */ var _opentelemetry_auto_instrumentations_web__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @opentelemetry/auto-instrumentations-web */ "../../node_modules/@opentelemetry/auto-instrumentations-web/build/esm/index.js");
|
|
25032
25102
|
/* harmony import */ var _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @multiplayer-app/session-recorder-common */ "../session-recorder-common/dist/esm/index-browser.js");
|
|
25033
|
-
/* harmony import */ var
|
|
25034
|
-
/* harmony import */ var
|
|
25035
|
-
/* harmony import */ var
|
|
25103
|
+
/* harmony import */ var _opentelemetry_api__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @opentelemetry/api */ "../../node_modules/@opentelemetry/api/build/esm/trace-api.js");
|
|
25104
|
+
/* harmony import */ var _opentelemetry_api__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @opentelemetry/api */ "../../node_modules/@opentelemetry/api/build/esm/context-api.js");
|
|
25105
|
+
/* harmony import */ var _opentelemetry_api__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @opentelemetry/api */ "../../node_modules/@opentelemetry/api/build/esm/trace/status.js");
|
|
25036
25106
|
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ "./src/config/index.ts");
|
|
25037
25107
|
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ "./src/otel/helpers.ts");
|
|
25108
|
+
/* harmony import */ var _CrashBufferSpanProcessor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./CrashBufferSpanProcessor */ "./src/otel/CrashBufferSpanProcessor.ts");
|
|
25109
|
+
|
|
25038
25110
|
|
|
25039
25111
|
|
|
25040
25112
|
|
|
@@ -25048,49 +25120,52 @@ const getElementTextContent = (element) => {
|
|
|
25048
25120
|
|
|
25049
25121
|
class TracerBrowserSDK {
|
|
25050
25122
|
constructor() {
|
|
25123
|
+
this.clientId = '';
|
|
25051
25124
|
this.sessionId = '';
|
|
25052
25125
|
this.globalErrorListenersRegistered = false;
|
|
25053
25126
|
}
|
|
25054
|
-
setSessionId(sessionId, sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.
|
|
25127
|
+
setSessionId(sessionId, sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL) {
|
|
25055
25128
|
this.sessionId = sessionId;
|
|
25056
|
-
this.idGenerator
|
|
25129
|
+
if (!this.idGenerator) {
|
|
25130
|
+
throw new Error('Id generator not initialized');
|
|
25131
|
+
}
|
|
25132
|
+
this.idGenerator.setSessionId(sessionId, sessionType, this.clientId);
|
|
25057
25133
|
}
|
|
25058
25134
|
init(options) {
|
|
25059
25135
|
this.config = options;
|
|
25136
|
+
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
25137
|
const { application, version, environment } = this.config;
|
|
25061
25138
|
this.idGenerator = new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderIdGenerator();
|
|
25062
25139
|
this.exporter = new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderBrowserTraceExporter({
|
|
25063
25140
|
apiKey: options.apiKey,
|
|
25064
25141
|
url: (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.getExporterEndpoint)(options.exporterEndpoint),
|
|
25065
|
-
usePostMessageFallback: options.usePostMessageFallback
|
|
25142
|
+
usePostMessageFallback: options.usePostMessageFallback
|
|
25066
25143
|
});
|
|
25067
|
-
this.
|
|
25068
|
-
|
|
25069
|
-
|
|
25070
|
-
[
|
|
25071
|
-
[
|
|
25144
|
+
this.batchSpanProcessor = new _opentelemetry_sdk_trace_base__WEBPACK_IMPORTED_MODULE_5__.BatchSpanProcessor(this.exporter);
|
|
25145
|
+
this.tracerProvider = new _opentelemetry_sdk_trace_web__WEBPACK_IMPORTED_MODULE_6__.WebTracerProvider({
|
|
25146
|
+
resource: (0,_opentelemetry_resources__WEBPACK_IMPORTED_MODULE_7__.resourceFromAttributes)({
|
|
25147
|
+
[_opentelemetry_semantic_conventions__WEBPACK_IMPORTED_MODULE_8__.SEMRESATTRS_SERVICE_NAME]: application,
|
|
25148
|
+
[_opentelemetry_semantic_conventions__WEBPACK_IMPORTED_MODULE_8__.SEMRESATTRS_SERVICE_VERSION]: version,
|
|
25149
|
+
[_opentelemetry_semantic_conventions__WEBPACK_IMPORTED_MODULE_8__.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment
|
|
25072
25150
|
}),
|
|
25073
25151
|
idGenerator: this.idGenerator,
|
|
25074
25152
|
sampler: new _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderTraceIdRatioBasedSampler(this.config.sampleTraceRatio),
|
|
25075
25153
|
spanProcessors: [
|
|
25076
25154
|
this._getSpanSessionIdProcessor(),
|
|
25077
|
-
new
|
|
25078
|
-
]
|
|
25155
|
+
new _CrashBufferSpanProcessor__WEBPACK_IMPORTED_MODULE_4__.CrashBufferSpanProcessor(this.batchSpanProcessor, this.crashBuffer, this.exporter.serializeSpan.bind(this.exporter))
|
|
25156
|
+
]
|
|
25079
25157
|
});
|
|
25080
25158
|
this.tracerProvider.register({
|
|
25081
25159
|
// contextManager: new ZoneContextManager(),
|
|
25082
|
-
propagator: new
|
|
25160
|
+
propagator: new _opentelemetry_core__WEBPACK_IMPORTED_MODULE_9__.W3CTraceContextPropagator()
|
|
25083
25161
|
});
|
|
25084
|
-
(0,
|
|
25162
|
+
(0,_opentelemetry_instrumentation__WEBPACK_IMPORTED_MODULE_10__.registerInstrumentations)({
|
|
25085
25163
|
tracerProvider: this.tracerProvider,
|
|
25086
25164
|
instrumentations: [
|
|
25087
25165
|
(0,_opentelemetry_auto_instrumentations_web__WEBPACK_IMPORTED_MODULE_0__.getWebAutoInstrumentations)({
|
|
25088
25166
|
'@opentelemetry/instrumentation-xml-http-request': {
|
|
25089
25167
|
clearTimingResources: true,
|
|
25090
|
-
ignoreUrls: [
|
|
25091
|
-
..._config__WEBPACK_IMPORTED_MODULE_2__.OTEL_IGNORE_URLS,
|
|
25092
|
-
...(this.config.ignoreUrls || []),
|
|
25093
|
-
],
|
|
25168
|
+
ignoreUrls: [..._config__WEBPACK_IMPORTED_MODULE_2__.OTEL_IGNORE_URLS, ...(this.config.ignoreUrls || [])],
|
|
25094
25169
|
propagateTraceHeaderCorsUrls: options.propagateTraceHeaderCorsUrls,
|
|
25095
25170
|
applyCustomAttributesOnSpan: (span, xhr) => {
|
|
25096
25171
|
if (!this.config)
|
|
@@ -25110,7 +25185,7 @@ class TracerBrowserSDK {
|
|
|
25110
25185
|
requestBody,
|
|
25111
25186
|
responseBody,
|
|
25112
25187
|
requestHeaders,
|
|
25113
|
-
responseHeaders
|
|
25188
|
+
responseHeaders
|
|
25114
25189
|
};
|
|
25115
25190
|
(0,_helpers__WEBPACK_IMPORTED_MODULE_3__.processHttpPayload)(payload, this.config, span);
|
|
25116
25191
|
}
|
|
@@ -25118,14 +25193,11 @@ class TracerBrowserSDK {
|
|
|
25118
25193
|
// eslint-disable-next-line
|
|
25119
25194
|
console.error('[MULTIPLAYER_SESSION_RECORDER] Failed to capture xml-http payload', error);
|
|
25120
25195
|
}
|
|
25121
|
-
}
|
|
25196
|
+
}
|
|
25122
25197
|
},
|
|
25123
25198
|
'@opentelemetry/instrumentation-fetch': {
|
|
25124
25199
|
clearTimingResources: true,
|
|
25125
|
-
ignoreUrls: [
|
|
25126
|
-
..._config__WEBPACK_IMPORTED_MODULE_2__.OTEL_IGNORE_URLS,
|
|
25127
|
-
...(this.config.ignoreUrls || []),
|
|
25128
|
-
],
|
|
25200
|
+
ignoreUrls: [..._config__WEBPACK_IMPORTED_MODULE_2__.OTEL_IGNORE_URLS, ...(this.config.ignoreUrls || [])],
|
|
25129
25201
|
propagateTraceHeaderCorsUrls: options.propagateTraceHeaderCorsUrls,
|
|
25130
25202
|
applyCustomAttributesOnSpan: async (span, request, response) => {
|
|
25131
25203
|
if (!this.config)
|
|
@@ -25162,7 +25234,7 @@ class TracerBrowserSDK {
|
|
|
25162
25234
|
requestBody,
|
|
25163
25235
|
responseBody,
|
|
25164
25236
|
requestHeaders,
|
|
25165
|
-
responseHeaders
|
|
25237
|
+
responseHeaders
|
|
25166
25238
|
};
|
|
25167
25239
|
(0,_helpers__WEBPACK_IMPORTED_MODULE_3__.processHttpPayload)(payload, this.config, span);
|
|
25168
25240
|
}
|
|
@@ -25170,7 +25242,7 @@ class TracerBrowserSDK {
|
|
|
25170
25242
|
// eslint-disable-next-line
|
|
25171
25243
|
console.error('[MULTIPLAYER_SESSION_RECORDER] Failed to capture fetch payload', error);
|
|
25172
25244
|
}
|
|
25173
|
-
}
|
|
25245
|
+
}
|
|
25174
25246
|
},
|
|
25175
25247
|
'@opentelemetry/instrumentation-user-interaction': {
|
|
25176
25248
|
shouldPreventSpanCreation: (_event, element, span) => {
|
|
@@ -25179,17 +25251,20 @@ class TracerBrowserSDK {
|
|
|
25179
25251
|
}
|
|
25180
25252
|
span.setAttribute('target.innerText', (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.getElementInnerText)(element));
|
|
25181
25253
|
span.setAttribute('target.textContent', (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.getElementTextContent)(element));
|
|
25182
|
-
Array.from(element.attributes).forEach(attribute => {
|
|
25254
|
+
Array.from(element.attributes).forEach((attribute) => {
|
|
25183
25255
|
span.setAttribute(`target.attribute.${attribute.name}`, attribute.value);
|
|
25184
25256
|
});
|
|
25185
25257
|
return false;
|
|
25186
|
-
}
|
|
25187
|
-
}
|
|
25188
|
-
})
|
|
25189
|
-
]
|
|
25258
|
+
}
|
|
25259
|
+
}
|
|
25260
|
+
})
|
|
25261
|
+
]
|
|
25190
25262
|
});
|
|
25191
25263
|
this._registerGlobalErrorListeners();
|
|
25192
25264
|
}
|
|
25265
|
+
setCrashBuffer(crashBuffer) {
|
|
25266
|
+
this.crashBuffer = crashBuffer;
|
|
25267
|
+
}
|
|
25193
25268
|
start(sessionId, sessionType) {
|
|
25194
25269
|
if (!this.tracerProvider) {
|
|
25195
25270
|
throw new Error('Configuration not initialized. Call init() before start().');
|
|
@@ -25214,13 +25289,15 @@ class TracerBrowserSDK {
|
|
|
25214
25289
|
* Otherwise, a short-lived span will be created to hold the exception event.
|
|
25215
25290
|
*/
|
|
25216
25291
|
captureException(error, errorInfo) {
|
|
25292
|
+
var _a, _b;
|
|
25217
25293
|
if (!error)
|
|
25218
25294
|
return;
|
|
25219
25295
|
// Prefer attaching to the active span to keep correlation intact
|
|
25220
25296
|
try {
|
|
25221
|
-
const activeSpan =
|
|
25297
|
+
const activeSpan = _opentelemetry_api__WEBPACK_IMPORTED_MODULE_11__.trace.getSpan(_opentelemetry_api__WEBPACK_IMPORTED_MODULE_12__.context.active());
|
|
25222
25298
|
if (activeSpan) {
|
|
25223
25299
|
this._recordException(activeSpan, error, errorInfo);
|
|
25300
|
+
(_a = this.tracerProvider) === null || _a === void 0 ? void 0 : _a.forceFlush();
|
|
25224
25301
|
return;
|
|
25225
25302
|
}
|
|
25226
25303
|
// eslint-disable-next-line
|
|
@@ -25228,17 +25305,26 @@ class TracerBrowserSDK {
|
|
|
25228
25305
|
catch (_ignored) { }
|
|
25229
25306
|
// Fallback: create a short-lived span to hold the exception details
|
|
25230
25307
|
try {
|
|
25231
|
-
const tracer =
|
|
25308
|
+
const tracer = _opentelemetry_api__WEBPACK_IMPORTED_MODULE_11__.trace.getTracer('exception');
|
|
25232
25309
|
const span = tracer.startSpan(error.name || 'Error');
|
|
25233
25310
|
this._recordException(span, error, errorInfo);
|
|
25234
25311
|
span.end();
|
|
25312
|
+
(_b = this.tracerProvider) === null || _b === void 0 ? void 0 : _b.forceFlush();
|
|
25235
25313
|
// eslint-disable-next-line
|
|
25236
25314
|
}
|
|
25237
25315
|
catch (_ignored) { }
|
|
25238
25316
|
}
|
|
25317
|
+
async exportTraces(spans) {
|
|
25318
|
+
var _a;
|
|
25319
|
+
if ((_a = this === null || this === void 0 ? void 0 : this.batchSpanProcessor) === null || _a === void 0 ? void 0 : _a.onEnd) {
|
|
25320
|
+
spans.map((span) => { var _a; return (_a = this === null || this === void 0 ? void 0 : this.batchSpanProcessor) === null || _a === void 0 ? void 0 : _a.onEnd(span); });
|
|
25321
|
+
// return this.batchSpanProcessor.onEnd()
|
|
25322
|
+
}
|
|
25323
|
+
throw new Error('Buffer span processor not initialized');
|
|
25324
|
+
}
|
|
25239
25325
|
_recordException(span, error, errorInfo) {
|
|
25240
25326
|
span.recordException(error);
|
|
25241
|
-
span.setStatus({ code:
|
|
25327
|
+
span.setStatus({ code: _opentelemetry_api__WEBPACK_IMPORTED_MODULE_13__.SpanStatusCode.ERROR, message: error.message });
|
|
25242
25328
|
span.setAttribute('exception.type', error.name || 'Error');
|
|
25243
25329
|
span.setAttribute('exception.message', error.message);
|
|
25244
25330
|
span.setAttribute('exception.stacktrace', error.stack || '');
|
|
@@ -25251,14 +25337,14 @@ class TracerBrowserSDK {
|
|
|
25251
25337
|
_getSpanSessionIdProcessor() {
|
|
25252
25338
|
return {
|
|
25253
25339
|
forceFlush: () => Promise.resolve(),
|
|
25254
|
-
onEnd: () =>
|
|
25340
|
+
onEnd: () => Promise.resolve(),
|
|
25255
25341
|
shutdown: () => Promise.resolve(),
|
|
25256
25342
|
onStart: (span) => {
|
|
25257
25343
|
var _a;
|
|
25258
25344
|
if ((_a = this.sessionId) === null || _a === void 0 ? void 0 : _a.length) {
|
|
25259
25345
|
span.setAttribute(_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.ATTR_MULTIPLAYER_SESSION_ID, this.sessionId);
|
|
25260
25346
|
}
|
|
25261
|
-
}
|
|
25347
|
+
}
|
|
25262
25348
|
};
|
|
25263
25349
|
}
|
|
25264
25350
|
_registerGlobalErrorListeners() {
|
|
@@ -25268,14 +25354,12 @@ class TracerBrowserSDK {
|
|
|
25268
25354
|
return;
|
|
25269
25355
|
// eslint-disable-next-line
|
|
25270
25356
|
const errorHandler = (event) => {
|
|
25271
|
-
const err = (event === null || event === void 0 ? void 0 : event.error) instanceof Error
|
|
25272
|
-
? event.error
|
|
25273
|
-
: new Error((event === null || event === void 0 ? void 0 : event.message) || 'Script error');
|
|
25357
|
+
const err = (event === null || event === void 0 ? void 0 : event.error) instanceof Error ? event.error : new Error((event === null || event === void 0 ? void 0 : event.message) || 'Script error');
|
|
25274
25358
|
this.captureException(err);
|
|
25275
25359
|
};
|
|
25276
25360
|
// eslint-disable-next-line
|
|
25277
25361
|
const rejectionHandler = (event) => {
|
|
25278
|
-
const reason =
|
|
25362
|
+
const reason = event && 'reason' in event ? event.reason : undefined;
|
|
25279
25363
|
const err = reason instanceof Error
|
|
25280
25364
|
? reason
|
|
25281
25365
|
: new Error(typeof reason === 'string' ? reason : 'Unhandled promise rejection');
|
|
@@ -25333,7 +25417,7 @@ const setShouldRecordHttpData = (shouldRecordBody, shouldRecordHeaders) => {
|
|
|
25333
25417
|
|
|
25334
25418
|
|
|
25335
25419
|
|
|
25336
|
-
function _tryReadFetchBody({ body, url }) {
|
|
25420
|
+
function _tryReadFetchBody({ body, url, }) {
|
|
25337
25421
|
if ((0,_utils_type_utils__WEBPACK_IMPORTED_MODULE_0__.isNullish)(body)) {
|
|
25338
25422
|
return null;
|
|
25339
25423
|
}
|
|
@@ -25506,7 +25590,7 @@ if (typeof window !== 'undefined' && typeof window.fetch !== 'undefined') {
|
|
|
25506
25590
|
if (!(0,_utils_type_utils__WEBPACK_IMPORTED_MODULE_0__.isNullish)(candidateBody)) {
|
|
25507
25591
|
const requestBody = _tryReadFetchBody({
|
|
25508
25592
|
body: candidateBody,
|
|
25509
|
-
url: urlStr
|
|
25593
|
+
url: urlStr,
|
|
25510
25594
|
});
|
|
25511
25595
|
if ((requestBody === null || requestBody === void 0 ? void 0 : requestBody.length) && new Blob([requestBody]).size <= _configs__WEBPACK_IMPORTED_MODULE_2__.configs.maxCapturingHttpPayloadSize) {
|
|
25512
25596
|
networkRequest.requestBody = requestBody;
|
|
@@ -25701,11 +25785,13 @@ if (typeof XMLHttpRequest !== 'undefined') {
|
|
|
25701
25785
|
/* harmony export */ RecorderBrowserSDK: () => (/* binding */ RecorderBrowserSDK)
|
|
25702
25786
|
/* harmony export */ });
|
|
25703
25787
|
/* 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
|
|
25788
|
+
/* harmony import */ var _rrweb_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rrweb/types */ "../../node_modules/@rrweb/types/dist/types.js");
|
|
25789
|
+
/* harmony import */ var rrweb__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rrweb */ "../../node_modules/rrweb/dist/rrweb.js");
|
|
25790
|
+
/* 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");
|
|
25791
|
+
/* 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");
|
|
25792
|
+
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./src/utils/index.ts");
|
|
25793
|
+
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../config */ "./src/config/index.ts");
|
|
25794
|
+
|
|
25709
25795
|
|
|
25710
25796
|
|
|
25711
25797
|
|
|
@@ -25713,129 +25799,206 @@ if (typeof XMLHttpRequest !== 'undefined') {
|
|
|
25713
25799
|
|
|
25714
25800
|
|
|
25715
25801
|
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
25802
|
constructor() {
|
|
25729
|
-
this.
|
|
25730
|
-
|
|
25731
|
-
|
|
25803
|
+
this.intervals = {
|
|
25804
|
+
restart: null,
|
|
25805
|
+
bufferSnapshot: null
|
|
25806
|
+
};
|
|
25807
|
+
this.startedAt = '';
|
|
25808
|
+
this.stoppedAt = '';
|
|
25809
|
+
}
|
|
25810
|
+
/**
|
|
25811
|
+
* Full snapshot.
|
|
25812
|
+
*/
|
|
25813
|
+
takeFullSnapshot() {
|
|
25814
|
+
if (!this.stopFn) {
|
|
25815
|
+
return;
|
|
25816
|
+
}
|
|
25817
|
+
rrweb__WEBPACK_IMPORTED_MODULE_6__.record.takeFullSnapshot();
|
|
25732
25818
|
}
|
|
25733
25819
|
/**
|
|
25734
|
-
* Initializes the recorder SDK
|
|
25735
|
-
* @param config - Configuration settings
|
|
25736
|
-
* @param socketService - Optional socket service
|
|
25820
|
+
* Initializes the recorder SDK.
|
|
25821
|
+
* @param config - Configuration settings.
|
|
25822
|
+
* @param socketService - Optional socket service.
|
|
25737
25823
|
*/
|
|
25738
25824
|
init(config, socketService) {
|
|
25739
25825
|
this.config = config;
|
|
25740
25826
|
this.socketService = socketService;
|
|
25741
25827
|
}
|
|
25742
25828
|
/**
|
|
25743
|
-
* Starts recording
|
|
25744
|
-
* @param sessionId -
|
|
25829
|
+
* Starts recording.
|
|
25830
|
+
* @param sessionId - Session ID or null for buffer-only mode.
|
|
25831
|
+
* @param sessionType - Session type.
|
|
25745
25832
|
*/
|
|
25746
25833
|
start(sessionId, sessionType) {
|
|
25747
|
-
var _a;
|
|
25748
25834
|
if (!this.config) {
|
|
25749
25835
|
throw new Error('Configuration not initialized. Call init() before start().');
|
|
25750
25836
|
}
|
|
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
25837
|
this.startedAt = new Date().toISOString();
|
|
25753
|
-
|
|
25754
|
-
|
|
25838
|
+
this.stopFn = (0,rrweb__WEBPACK_IMPORTED_MODULE_6__.record)({
|
|
25839
|
+
...this._buildRecordOptions(),
|
|
25840
|
+
emit: async (event) => {
|
|
25841
|
+
const ts = event.timestamp;
|
|
25842
|
+
if (!sessionId) {
|
|
25843
|
+
await this._handleBufferOnlyEvent(event, ts);
|
|
25844
|
+
return;
|
|
25845
|
+
}
|
|
25846
|
+
this._handleLiveSessionEvent(event, ts, sessionId, sessionType);
|
|
25847
|
+
}
|
|
25848
|
+
});
|
|
25849
|
+
this.takeFullSnapshot();
|
|
25850
|
+
this._setupPeriodicSnapshots(sessionId, sessionType);
|
|
25851
|
+
}
|
|
25852
|
+
/**
|
|
25853
|
+
* Restarts recording. Never throws - library mode constraint.
|
|
25854
|
+
*/
|
|
25855
|
+
async restart(sessionId, sessionType) {
|
|
25856
|
+
var _a;
|
|
25857
|
+
try {
|
|
25858
|
+
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25859
|
+
this.start(sessionId, sessionType);
|
|
25860
|
+
}
|
|
25861
|
+
catch (_e) {
|
|
25862
|
+
// Silent failure
|
|
25863
|
+
}
|
|
25864
|
+
}
|
|
25865
|
+
/**
|
|
25866
|
+
* Stops recording and cleans up resources.
|
|
25867
|
+
*/
|
|
25868
|
+
stop() {
|
|
25869
|
+
var _a, _b, _c;
|
|
25870
|
+
(_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
25871
|
+
this.stopFn = undefined;
|
|
25872
|
+
if (!((_b = this.config) === null || _b === void 0 ? void 0 : _b.useWebsocket)) {
|
|
25873
|
+
(_c = this.socketService) === null || _c === void 0 ? void 0 : _c.close();
|
|
25874
|
+
}
|
|
25875
|
+
this._clearAllIntervals();
|
|
25876
|
+
}
|
|
25877
|
+
_clearAllIntervals() {
|
|
25878
|
+
if (this.intervals.restart) {
|
|
25879
|
+
clearInterval(this.intervals.restart);
|
|
25880
|
+
this.intervals.restart = null;
|
|
25881
|
+
}
|
|
25882
|
+
if (this.intervals.bufferSnapshot) {
|
|
25883
|
+
clearInterval(this.intervals.bufferSnapshot);
|
|
25884
|
+
this.intervals.bufferSnapshot = null;
|
|
25885
|
+
}
|
|
25886
|
+
}
|
|
25887
|
+
/**
|
|
25888
|
+
* Sets the crash buffer.
|
|
25889
|
+
* @param crashBuffer - Crash buffer service.
|
|
25890
|
+
*/
|
|
25891
|
+
setCrashBuffer(crashBuffer) {
|
|
25892
|
+
this.crashBuffer = crashBuffer;
|
|
25893
|
+
}
|
|
25894
|
+
/**
|
|
25895
|
+
* Mutates event in-place for performance.
|
|
25896
|
+
*/
|
|
25897
|
+
_applyConsoleMasking(event) {
|
|
25898
|
+
var _a, _b;
|
|
25899
|
+
const maskFn = (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.masking) === null || _b === void 0 ? void 0 : _b.maskConsoleEvent;
|
|
25900
|
+
if (typeof maskFn === 'function' && (0,_utils__WEBPACK_IMPORTED_MODULE_4__.isConsoleEvent)(event)) {
|
|
25901
|
+
const pluginEvt = event;
|
|
25902
|
+
const maskedPayload = maskFn(pluginEvt.data.payload);
|
|
25903
|
+
pluginEvt.data = { ...pluginEvt.data, payload: maskedPayload };
|
|
25904
|
+
}
|
|
25905
|
+
}
|
|
25906
|
+
/**
|
|
25907
|
+
* Handles buffer-only event.
|
|
25908
|
+
* @param event - Event.
|
|
25909
|
+
* @param ts - Timestamp.
|
|
25910
|
+
*/
|
|
25911
|
+
async _handleBufferOnlyEvent(event, ts) {
|
|
25912
|
+
if (!this.crashBuffer)
|
|
25913
|
+
return;
|
|
25914
|
+
try {
|
|
25915
|
+
this._applyConsoleMasking(event);
|
|
25916
|
+
const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
|
|
25917
|
+
this.stoppedAt = new Date(ts).toISOString();
|
|
25918
|
+
await this.crashBuffer.appendEvent({
|
|
25919
|
+
ts,
|
|
25920
|
+
isFullSnapshot: event.type === _rrweb_types__WEBPACK_IMPORTED_MODULE_1__.EventType.FullSnapshot,
|
|
25921
|
+
event: {
|
|
25922
|
+
event: packedEvent,
|
|
25923
|
+
eventType: event.type,
|
|
25924
|
+
timestamp: ts
|
|
25925
|
+
}
|
|
25926
|
+
});
|
|
25927
|
+
}
|
|
25928
|
+
catch (error) {
|
|
25929
|
+
// Silent failure - library constraint
|
|
25930
|
+
}
|
|
25931
|
+
}
|
|
25932
|
+
/**
|
|
25933
|
+
* Handles live session event.
|
|
25934
|
+
* @param event - Event.
|
|
25935
|
+
* @param ts - Timestamp.
|
|
25936
|
+
* @param sessionId - Session ID.
|
|
25937
|
+
* @param sessionType - Session type.
|
|
25938
|
+
*/
|
|
25939
|
+
_handleLiveSessionEvent(event, ts, sessionId, sessionType) {
|
|
25940
|
+
if (!this.socketService)
|
|
25941
|
+
return;
|
|
25942
|
+
this._applyConsoleMasking(event);
|
|
25943
|
+
const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
|
|
25944
|
+
this.stoppedAt = new Date(ts).toISOString();
|
|
25945
|
+
this.socketService.send({
|
|
25946
|
+
event: packedEvent,
|
|
25947
|
+
eventType: event.type,
|
|
25948
|
+
timestamp: ts,
|
|
25949
|
+
debugSessionId: sessionId,
|
|
25950
|
+
debugSessionType: sessionType
|
|
25951
|
+
});
|
|
25952
|
+
}
|
|
25953
|
+
/**
|
|
25954
|
+
* Builds record options.
|
|
25955
|
+
*/
|
|
25956
|
+
_buildRecordOptions() {
|
|
25957
|
+
var _a, _b, _c;
|
|
25958
|
+
const maskingConfig = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.masking) || {};
|
|
25755
25959
|
const options = {
|
|
25756
|
-
maskAllInputs: (
|
|
25960
|
+
maskAllInputs: (_b = maskingConfig.maskAllInputs) !== null && _b !== void 0 ? _b : true,
|
|
25757
25961
|
sampling: { canvas: 5 },
|
|
25758
|
-
recordCanvas: this.config.recordCanvas,
|
|
25962
|
+
recordCanvas: (_c = this.config) === null || _c === void 0 ? void 0 : _c.recordCanvas,
|
|
25759
25963
|
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
|
-
],
|
|
25964
|
+
plugins: [(0,_rrweb_rrweb_plugin_console_record__WEBPACK_IMPORTED_MODULE_3__.getRecordConsolePlugin)({ level: ['log', 'error'] })]
|
|
25763
25965
|
};
|
|
25764
|
-
// Add mask input options if provided
|
|
25765
25966
|
if (maskingConfig.maskInputOptions) {
|
|
25766
25967
|
options.maskInputOptions = maskingConfig.maskInputOptions;
|
|
25767
25968
|
}
|
|
25768
|
-
// Add mask text class if provided
|
|
25769
25969
|
if (maskingConfig.maskTextClass) {
|
|
25770
25970
|
options.maskTextClass = maskingConfig.maskTextClass;
|
|
25771
25971
|
}
|
|
25772
|
-
// Add mask text selector if provided
|
|
25773
25972
|
if (maskingConfig.maskTextSelector) {
|
|
25774
25973
|
options.maskTextSelector = maskingConfig.maskTextSelector;
|
|
25775
25974
|
}
|
|
25776
|
-
// Add custom masking functions if provided
|
|
25777
25975
|
if (typeof maskingConfig.maskInput === 'function') {
|
|
25778
25976
|
options.maskInputFn = maskingConfig.maskInput;
|
|
25779
25977
|
}
|
|
25780
25978
|
if (typeof maskingConfig.maskText === 'function') {
|
|
25781
25979
|
options.maskTextFn = maskingConfig.maskText;
|
|
25782
25980
|
}
|
|
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
|
-
}
|
|
25981
|
+
return options;
|
|
25811
25982
|
}
|
|
25812
25983
|
/**
|
|
25813
|
-
*
|
|
25984
|
+
* Sets up periodic snapshots.
|
|
25985
|
+
* @param sessionId - Session ID.
|
|
25986
|
+
* @param sessionType - Session type.
|
|
25814
25987
|
*/
|
|
25815
|
-
|
|
25816
|
-
var _a;
|
|
25817
|
-
|
|
25818
|
-
|
|
25819
|
-
|
|
25820
|
-
|
|
25821
|
-
|
|
25822
|
-
*/
|
|
25823
|
-
clearRestartInterval() {
|
|
25824
|
-
if (this.restartInterval) {
|
|
25825
|
-
clearInterval(this.restartInterval);
|
|
25826
|
-
this.restartInterval = null;
|
|
25988
|
+
_setupPeriodicSnapshots(sessionId, sessionType) {
|
|
25989
|
+
var _a, _b;
|
|
25990
|
+
this._clearAllIntervals();
|
|
25991
|
+
if (sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_2__.SessionType.CONTINUOUS) {
|
|
25992
|
+
this.intervals.restart = setInterval(() => {
|
|
25993
|
+
this.takeFullSnapshot();
|
|
25994
|
+
}, _config__WEBPACK_IMPORTED_MODULE_5__.CONTINUOUS_DEBUGGING_TIMEOUT);
|
|
25827
25995
|
}
|
|
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();
|
|
25996
|
+
if (!sessionId && ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled)) {
|
|
25997
|
+
const interval = this.config.buffering.snapshotIntervalMs || 30000;
|
|
25998
|
+
this.intervals.bufferSnapshot = setInterval(() => {
|
|
25999
|
+
this.takeFullSnapshot();
|
|
26000
|
+
}, interval);
|
|
25837
26001
|
}
|
|
25838
|
-
this.clearRestartInterval();
|
|
25839
26002
|
}
|
|
25840
26003
|
}
|
|
25841
26004
|
|
|
@@ -25858,7 +26021,7 @@ class ApiService {
|
|
|
25858
26021
|
this.config = {
|
|
25859
26022
|
apiKey: '',
|
|
25860
26023
|
apiBaseUrl: '',
|
|
25861
|
-
exporterEndpoint: ''
|
|
26024
|
+
exporterEndpoint: ''
|
|
25862
26025
|
};
|
|
25863
26026
|
}
|
|
25864
26027
|
/**
|
|
@@ -25868,7 +26031,7 @@ class ApiService {
|
|
|
25868
26031
|
init(config) {
|
|
25869
26032
|
this.config = {
|
|
25870
26033
|
...this.config,
|
|
25871
|
-
...config
|
|
26034
|
+
...config
|
|
25872
26035
|
};
|
|
25873
26036
|
}
|
|
25874
26037
|
/**
|
|
@@ -25886,6 +26049,14 @@ class ApiService {
|
|
|
25886
26049
|
async startSession(request, signal) {
|
|
25887
26050
|
return this.makeRequest('/debug-sessions/start', 'POST', request, signal);
|
|
25888
26051
|
}
|
|
26052
|
+
/**
|
|
26053
|
+
* Create a new error span session
|
|
26054
|
+
* @param request - Session create error span request data
|
|
26055
|
+
* @param signal - Optional AbortSignal for request cancellation
|
|
26056
|
+
*/
|
|
26057
|
+
async createErrorSession(request, signal) {
|
|
26058
|
+
return this.makeRequest('/debug-sessions/error-span/start', 'POST', request, signal);
|
|
26059
|
+
}
|
|
25889
26060
|
/**
|
|
25890
26061
|
* Stop an active debug session
|
|
25891
26062
|
* @param sessionId - ID of the session to stop
|
|
@@ -25931,6 +26102,15 @@ class ApiService {
|
|
|
25931
26102
|
async checkRemoteSession(requestBody, signal) {
|
|
25932
26103
|
return this.makeRequest('/remote-debug-session/check', 'POST', requestBody, signal);
|
|
25933
26104
|
}
|
|
26105
|
+
updateSessionAttributes(sessionId, requestBody, signal) {
|
|
26106
|
+
return this.makeRequest(`/debug-sessions/${sessionId}`, 'PATCH', requestBody, signal);
|
|
26107
|
+
}
|
|
26108
|
+
/**
|
|
26109
|
+
* Export events to the session debugger API
|
|
26110
|
+
*/
|
|
26111
|
+
async exportEvents(sessionId, requestBody, signal) {
|
|
26112
|
+
return this.makeRequest(`/debug-sessions/${sessionId}/rrweb-events`, 'POST', requestBody, signal);
|
|
26113
|
+
}
|
|
25934
26114
|
/**
|
|
25935
26115
|
* Make a request to the session debugger API
|
|
25936
26116
|
* @param path - API endpoint path (relative to the base URL)
|
|
@@ -25945,14 +26125,14 @@ class ApiService {
|
|
|
25945
26125
|
body: body ? JSON.stringify(body) : null,
|
|
25946
26126
|
headers: {
|
|
25947
26127
|
'Content-Type': 'application/json',
|
|
25948
|
-
...(this.config.apiKey && { 'X-Api-Key': this.config.apiKey })
|
|
25949
|
-
}
|
|
26128
|
+
...(this.config.apiKey && { 'X-Api-Key': this.config.apiKey })
|
|
26129
|
+
}
|
|
25950
26130
|
};
|
|
25951
26131
|
try {
|
|
25952
26132
|
const response = await fetch(url, {
|
|
25953
26133
|
...params,
|
|
25954
26134
|
credentials: 'include',
|
|
25955
|
-
signal
|
|
26135
|
+
signal
|
|
25956
26136
|
});
|
|
25957
26137
|
if (!response.ok) {
|
|
25958
26138
|
throw new Error('Network response was not ok: ' + response.statusText);
|
|
@@ -25969,19 +26149,589 @@ class ApiService {
|
|
|
25969
26149
|
return this.handleRequestError(error, { url, params });
|
|
25970
26150
|
}
|
|
25971
26151
|
}
|
|
25972
|
-
async handleRequestError(error, payload) {
|
|
25973
|
-
if (this.config.usePostMessageFallback) {
|
|
25974
|
-
try {
|
|
25975
|
-
const response = await _messaging_service__WEBPACK_IMPORTED_MODULE_0__["default"].sendMessagePromise('request', payload);
|
|
25976
|
-
return response;
|
|
25977
|
-
}
|
|
25978
|
-
catch (error) {
|
|
25979
|
-
throw new Error('Error making request: ' + error.message);
|
|
25980
|
-
}
|
|
25981
|
-
}
|
|
25982
|
-
else {
|
|
25983
|
-
throw new Error('Error making request: ' + error.message);
|
|
25984
|
-
}
|
|
26152
|
+
async handleRequestError(error, payload) {
|
|
26153
|
+
if (this.config.usePostMessageFallback) {
|
|
26154
|
+
try {
|
|
26155
|
+
const response = await _messaging_service__WEBPACK_IMPORTED_MODULE_0__["default"].sendMessagePromise('request', payload);
|
|
26156
|
+
return response;
|
|
26157
|
+
}
|
|
26158
|
+
catch (error) {
|
|
26159
|
+
throw new Error('Error making request: ' + error.message);
|
|
26160
|
+
}
|
|
26161
|
+
}
|
|
26162
|
+
else {
|
|
26163
|
+
throw new Error('Error making request: ' + error.message);
|
|
26164
|
+
}
|
|
26165
|
+
}
|
|
26166
|
+
}
|
|
26167
|
+
|
|
26168
|
+
|
|
26169
|
+
/***/ }),
|
|
26170
|
+
|
|
26171
|
+
/***/ "./src/services/crashBuffer.service.ts":
|
|
26172
|
+
/*!*********************************************!*\
|
|
26173
|
+
!*** ./src/services/crashBuffer.service.ts ***!
|
|
26174
|
+
\*********************************************/
|
|
26175
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
26176
|
+
|
|
26177
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26178
|
+
/* harmony export */ CrashBufferService: () => (/* binding */ CrashBufferService)
|
|
26179
|
+
/* harmony export */ });
|
|
26180
|
+
/* harmony import */ var _opentelemetry_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @opentelemetry/api */ "../../node_modules/@opentelemetry/api/build/esm/trace/status.js");
|
|
26181
|
+
|
|
26182
|
+
class CrashBufferService {
|
|
26183
|
+
constructor(db, tabId, windowMs) {
|
|
26184
|
+
this.db = db;
|
|
26185
|
+
this.tabId = tabId;
|
|
26186
|
+
this.windowMs = windowMs;
|
|
26187
|
+
this.lastPruneAt = 0;
|
|
26188
|
+
this.pruneInFlight = null;
|
|
26189
|
+
this.isActive = true;
|
|
26190
|
+
this.frozenAtTs = null;
|
|
26191
|
+
this.lastSeenEventTs = 0;
|
|
26192
|
+
this.requiresFullSnapshot = true;
|
|
26193
|
+
this.lastTouchAt = 0;
|
|
26194
|
+
this.listeners = new Map();
|
|
26195
|
+
}
|
|
26196
|
+
async _safe(fn, fallback) {
|
|
26197
|
+
try {
|
|
26198
|
+
return await fn();
|
|
26199
|
+
}
|
|
26200
|
+
catch (_e) {
|
|
26201
|
+
return fallback;
|
|
26202
|
+
}
|
|
26203
|
+
}
|
|
26204
|
+
async setAttrs(attrs) {
|
|
26205
|
+
await this._safe(async () => {
|
|
26206
|
+
await this.db.setAttrs({
|
|
26207
|
+
tabId: this.tabId,
|
|
26208
|
+
...attrs
|
|
26209
|
+
});
|
|
26210
|
+
}, undefined);
|
|
26211
|
+
}
|
|
26212
|
+
async appendEvent(payload, _windowMs) {
|
|
26213
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, payload.ts || 0);
|
|
26214
|
+
if (!this.isActive)
|
|
26215
|
+
return;
|
|
26216
|
+
const isFullSnapshot = Boolean(payload.isFullSnapshot);
|
|
26217
|
+
if (this.requiresFullSnapshot && !isFullSnapshot) {
|
|
26218
|
+
// Buffer must always start with a full snapshot; drop incrementals until we see one.
|
|
26219
|
+
return;
|
|
26220
|
+
}
|
|
26221
|
+
await this._safe(async () => {
|
|
26222
|
+
await this.db.appendEvent({
|
|
26223
|
+
tabId: this.tabId,
|
|
26224
|
+
ts: payload.ts,
|
|
26225
|
+
isFullSnapshot: payload.isFullSnapshot,
|
|
26226
|
+
event: payload.event
|
|
26227
|
+
});
|
|
26228
|
+
}, undefined);
|
|
26229
|
+
if (isFullSnapshot && this.requiresFullSnapshot) {
|
|
26230
|
+
// Ensure this snapshot becomes the first replayable event.
|
|
26231
|
+
// We keep the snapshot itself and prune everything older.
|
|
26232
|
+
await this._safe(() => this.db.pruneOlderThan(this.tabId, Math.max(0, payload.ts - 1)), undefined);
|
|
26233
|
+
this.requiresFullSnapshot = false;
|
|
26234
|
+
}
|
|
26235
|
+
else if (isFullSnapshot) {
|
|
26236
|
+
this.requiresFullSnapshot = false;
|
|
26237
|
+
}
|
|
26238
|
+
this.pruneSoon();
|
|
26239
|
+
}
|
|
26240
|
+
async appendSpans(payload, _windowMs) {
|
|
26241
|
+
for (const p of payload) {
|
|
26242
|
+
this.lastSeenEventTs = Math.max(this.lastSeenEventTs, p.ts || 0);
|
|
26243
|
+
}
|
|
26244
|
+
if (!this.isActive)
|
|
26245
|
+
return;
|
|
26246
|
+
let errorEvent = null;
|
|
26247
|
+
await this._safe(async () => {
|
|
26248
|
+
const records = payload.map((p) => {
|
|
26249
|
+
var _a, _b;
|
|
26250
|
+
if (!errorEvent && ((_b = (_a = p === null || p === void 0 ? void 0 : p.span) === null || _a === void 0 ? void 0 : _a.status) === null || _b === void 0 ? void 0 : _b.code) === _opentelemetry_api__WEBPACK_IMPORTED_MODULE_0__.SpanStatusCode.ERROR) {
|
|
26251
|
+
errorEvent = { ts: p.ts, span: p.span };
|
|
26252
|
+
}
|
|
26253
|
+
return {
|
|
26254
|
+
tabId: this.tabId,
|
|
26255
|
+
ts: p.ts,
|
|
26256
|
+
span: p.span
|
|
26257
|
+
};
|
|
26258
|
+
});
|
|
26259
|
+
await this.db.appendSpans(records);
|
|
26260
|
+
}, undefined);
|
|
26261
|
+
this.pruneSoon();
|
|
26262
|
+
if (errorEvent) {
|
|
26263
|
+
this._emit('error-span-appended', errorEvent);
|
|
26264
|
+
}
|
|
26265
|
+
}
|
|
26266
|
+
on(event, listener) {
|
|
26267
|
+
const set = this.listeners.get(event) || new Set();
|
|
26268
|
+
set.add(listener);
|
|
26269
|
+
this.listeners.set(event, set);
|
|
26270
|
+
return () => this.off(event, listener);
|
|
26271
|
+
}
|
|
26272
|
+
off(event, listener) {
|
|
26273
|
+
const set = this.listeners.get(event);
|
|
26274
|
+
if (!set)
|
|
26275
|
+
return;
|
|
26276
|
+
set.delete(listener);
|
|
26277
|
+
if (set.size === 0)
|
|
26278
|
+
this.listeners.delete(event);
|
|
26279
|
+
}
|
|
26280
|
+
_emit(event, payload) {
|
|
26281
|
+
const set = this.listeners.get(event);
|
|
26282
|
+
if (!set || set.size === 0)
|
|
26283
|
+
return;
|
|
26284
|
+
for (const fn of Array.from(set)) {
|
|
26285
|
+
try {
|
|
26286
|
+
;
|
|
26287
|
+
fn(payload);
|
|
26288
|
+
}
|
|
26289
|
+
catch (_e) {
|
|
26290
|
+
// never throw into app code
|
|
26291
|
+
}
|
|
26292
|
+
}
|
|
26293
|
+
}
|
|
26294
|
+
async snapshot(_windowMs, now = Date.now()) {
|
|
26295
|
+
const toTs = now;
|
|
26296
|
+
const fromTs = Math.max(0, toTs - this.windowMs);
|
|
26297
|
+
// Always include a full snapshot "anchor" if one exists at/before the window start.
|
|
26298
|
+
const rrwebFromTs = await this._safe(async () => {
|
|
26299
|
+
const anchor = await this.db.getLastRrwebFullSnapshotBefore(this.tabId, fromTs);
|
|
26300
|
+
return typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? anchor.ts : fromTs;
|
|
26301
|
+
}, fromTs);
|
|
26302
|
+
const [rrweb, spans, attrs] = await Promise.all([
|
|
26303
|
+
this._safe(() => this.db.getRrwebEventsWindow(this.tabId, rrwebFromTs, toTs), []),
|
|
26304
|
+
this._safe(() => this.db.getOtelSpansWindow(this.tabId, fromTs, toTs), []),
|
|
26305
|
+
this._safe(() => this.db.getAttrs(this.tabId), null)
|
|
26306
|
+
]);
|
|
26307
|
+
const rrwebSorted = rrweb
|
|
26308
|
+
.sort((a, b) => a.ts - b.ts)
|
|
26309
|
+
.map((r) => ({ ts: r.ts, isFullSnapshot: r.isFullSnapshot, event: r.event }));
|
|
26310
|
+
// Hard guarantee: snapshot payload starts with a FullSnapshot (or is empty).
|
|
26311
|
+
const firstFullSnapshotIdx = rrwebSorted.findIndex((e) => Boolean(e.isFullSnapshot));
|
|
26312
|
+
const rrwebEvents = firstFullSnapshotIdx >= 0 ? rrwebSorted.slice(firstFullSnapshotIdx) : [];
|
|
26313
|
+
// Align spans with the rrweb replay start: spans must start from the FullSnapshot timestamp.
|
|
26314
|
+
const replayStartTs = rrwebEvents.length > 0 ? rrwebEvents[0].ts : fromTs;
|
|
26315
|
+
const otelSpans = spans
|
|
26316
|
+
.filter((s) => typeof (s === null || s === void 0 ? void 0 : s.ts) === 'number' && s.ts >= replayStartTs)
|
|
26317
|
+
.sort((a, b) => a.ts - b.ts)
|
|
26318
|
+
.map((r) => ({ ts: r.ts, span: r.span }));
|
|
26319
|
+
return {
|
|
26320
|
+
rrwebEvents,
|
|
26321
|
+
otelSpans,
|
|
26322
|
+
attrs: attrs
|
|
26323
|
+
? {
|
|
26324
|
+
sessionAttributes: attrs.sessionAttributes,
|
|
26325
|
+
resourceAttributes: attrs.resourceAttributes,
|
|
26326
|
+
userAttributes: attrs.userAttributes
|
|
26327
|
+
}
|
|
26328
|
+
: null,
|
|
26329
|
+
windowMs: this.windowMs,
|
|
26330
|
+
fromTs: replayStartTs,
|
|
26331
|
+
toTs
|
|
26332
|
+
};
|
|
26333
|
+
}
|
|
26334
|
+
async clear() {
|
|
26335
|
+
await this._safe(() => this.db.clearTab(this.tabId), undefined);
|
|
26336
|
+
this.requiresFullSnapshot = true;
|
|
26337
|
+
}
|
|
26338
|
+
needsFullSnapshot() {
|
|
26339
|
+
return this.requiresFullSnapshot;
|
|
26340
|
+
}
|
|
26341
|
+
/**
|
|
26342
|
+
* Mark the tab as active/inactive.
|
|
26343
|
+
*
|
|
26344
|
+
* - When inactive, we freeze the buffer and keep the last active `windowMs` indefinitely.
|
|
26345
|
+
* - When re-activated, we resume buffering but require a new FullSnapshot to start a replayable segment.
|
|
26346
|
+
*/
|
|
26347
|
+
setActive(active) {
|
|
26348
|
+
if (this.isActive === active)
|
|
26349
|
+
return;
|
|
26350
|
+
this.isActive = active;
|
|
26351
|
+
if (!active) {
|
|
26352
|
+
const freezeAt = this.lastSeenEventTs || Date.now();
|
|
26353
|
+
this.frozenAtTs = freezeAt;
|
|
26354
|
+
// Keep the last active window, but preserve rrweb replayability via snapshot anchor.
|
|
26355
|
+
const cutoff = Math.max(0, freezeAt - this.windowMs);
|
|
26356
|
+
void this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined);
|
|
26357
|
+
return;
|
|
26358
|
+
}
|
|
26359
|
+
const wasFrozen = this.frozenAtTs !== null;
|
|
26360
|
+
this.frozenAtTs = null;
|
|
26361
|
+
// New active segment must start with a full snapshot (don’t stitch segments together).
|
|
26362
|
+
if (wasFrozen)
|
|
26363
|
+
this.requiresFullSnapshot = true;
|
|
26364
|
+
this.pruneSoon();
|
|
26365
|
+
}
|
|
26366
|
+
pruneSoon() {
|
|
26367
|
+
if (!this.isActive)
|
|
26368
|
+
return;
|
|
26369
|
+
const now = Date.now();
|
|
26370
|
+
// Throttle pruning to avoid hammering IDB on high event rates
|
|
26371
|
+
if (now - this.lastPruneAt < 2000)
|
|
26372
|
+
return;
|
|
26373
|
+
if (this.pruneInFlight)
|
|
26374
|
+
return;
|
|
26375
|
+
this.lastPruneAt = now;
|
|
26376
|
+
const cutoff = Math.max(0, now - this.windowMs);
|
|
26377
|
+
// Heartbeat so the stale-tab sweeper never deletes active tabs.
|
|
26378
|
+
if (now - this.lastTouchAt > 30000) {
|
|
26379
|
+
this.lastTouchAt = now;
|
|
26380
|
+
void this._safe(() => this.db.touchTab(this.tabId, now), undefined);
|
|
26381
|
+
}
|
|
26382
|
+
this.pruneInFlight = this._safe(() => this.db.pruneOlderThanWithRrwebSnapshotAnchor(this.tabId, cutoff), undefined).finally(() => {
|
|
26383
|
+
this.pruneInFlight = null;
|
|
26384
|
+
});
|
|
26385
|
+
}
|
|
26386
|
+
}
|
|
26387
|
+
|
|
26388
|
+
|
|
26389
|
+
/***/ }),
|
|
26390
|
+
|
|
26391
|
+
/***/ "./src/services/indexedDb.service.ts":
|
|
26392
|
+
/*!*******************************************!*\
|
|
26393
|
+
!*** ./src/services/indexedDb.service.ts ***!
|
|
26394
|
+
\*******************************************/
|
|
26395
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
26396
|
+
|
|
26397
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26398
|
+
/* harmony export */ IndexedDBService: () => (/* binding */ IndexedDBService)
|
|
26399
|
+
/* harmony export */ });
|
|
26400
|
+
const dbName = 'mpEventsDB';
|
|
26401
|
+
const dbVersion = 2;
|
|
26402
|
+
const legacyStoreName = 'mpEventsStore';
|
|
26403
|
+
const rrwebEventsStore = 'rrwebEvents';
|
|
26404
|
+
const otelSpansStore = 'otelSpans';
|
|
26405
|
+
const attrsStore = 'crashBufferAttrs';
|
|
26406
|
+
class IndexedDBService {
|
|
26407
|
+
constructor() {
|
|
26408
|
+
this.dbPromise = this.openDB();
|
|
26409
|
+
}
|
|
26410
|
+
openDB() {
|
|
26411
|
+
return new Promise((resolve, reject) => {
|
|
26412
|
+
const request = indexedDB.open(dbName, dbVersion);
|
|
26413
|
+
request.onupgradeneeded = () => {
|
|
26414
|
+
const db = request.result;
|
|
26415
|
+
// Keep the legacy store if it exists to avoid breaking older versions.
|
|
26416
|
+
if (!db.objectStoreNames.contains(legacyStoreName)) {
|
|
26417
|
+
db.createObjectStore(legacyStoreName, { keyPath: 'id', autoIncrement: true });
|
|
26418
|
+
}
|
|
26419
|
+
if (!db.objectStoreNames.contains(rrwebEventsStore)) {
|
|
26420
|
+
const store = db.createObjectStore(rrwebEventsStore, { keyPath: 'id', autoIncrement: true });
|
|
26421
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
26422
|
+
}
|
|
26423
|
+
if (!db.objectStoreNames.contains(otelSpansStore)) {
|
|
26424
|
+
const store = db.createObjectStore(otelSpansStore, { keyPath: 'id', autoIncrement: true });
|
|
26425
|
+
store.createIndex('tabId_ts', ['tabId', 'ts'], { unique: false });
|
|
26426
|
+
}
|
|
26427
|
+
if (!db.objectStoreNames.contains(attrsStore)) {
|
|
26428
|
+
db.createObjectStore(attrsStore, { keyPath: 'tabId' });
|
|
26429
|
+
}
|
|
26430
|
+
};
|
|
26431
|
+
request.onsuccess = () => resolve(request.result);
|
|
26432
|
+
request.onerror = () => reject(request.error);
|
|
26433
|
+
});
|
|
26434
|
+
}
|
|
26435
|
+
/**
|
|
26436
|
+
* @deprecated Prefer `appendEvent(tabId, ...)` and `getRrwebEventsWindow(...)`.
|
|
26437
|
+
* This writes into the legacy store with no pruning semantics.
|
|
26438
|
+
*/
|
|
26439
|
+
async saveEvent(event) {
|
|
26440
|
+
const db = await this.dbPromise;
|
|
26441
|
+
return new Promise((resolve, reject) => {
|
|
26442
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
26443
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26444
|
+
store.add({ event });
|
|
26445
|
+
tx.oncomplete = () => resolve();
|
|
26446
|
+
tx.onerror = () => reject(tx.error);
|
|
26447
|
+
});
|
|
26448
|
+
}
|
|
26449
|
+
/**
|
|
26450
|
+
* @deprecated Prefer `getRrwebEventsWindow(...)`.
|
|
26451
|
+
*/
|
|
26452
|
+
async getAllEvents() {
|
|
26453
|
+
const db = await this.dbPromise;
|
|
26454
|
+
return new Promise((resolve, reject) => {
|
|
26455
|
+
const tx = db.transaction(legacyStoreName, 'readonly');
|
|
26456
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26457
|
+
const request = store.getAll();
|
|
26458
|
+
request.onsuccess = () => {
|
|
26459
|
+
const events = request.result.map((record) => record.event);
|
|
26460
|
+
resolve(events);
|
|
26461
|
+
};
|
|
26462
|
+
request.onerror = () => reject(request.error);
|
|
26463
|
+
});
|
|
26464
|
+
}
|
|
26465
|
+
/**
|
|
26466
|
+
* @deprecated Prefer `clearTab(tabId)`.
|
|
26467
|
+
*/
|
|
26468
|
+
async clearEvents() {
|
|
26469
|
+
const db = await this.dbPromise;
|
|
26470
|
+
return new Promise((resolve, reject) => {
|
|
26471
|
+
const tx = db.transaction(legacyStoreName, 'readwrite');
|
|
26472
|
+
const store = tx.objectStore(legacyStoreName);
|
|
26473
|
+
store.clear();
|
|
26474
|
+
tx.oncomplete = () => resolve();
|
|
26475
|
+
tx.onerror = () => reject(tx.error);
|
|
26476
|
+
});
|
|
26477
|
+
}
|
|
26478
|
+
async setAttrs(attrs) {
|
|
26479
|
+
var _a;
|
|
26480
|
+
const db = await this.dbPromise;
|
|
26481
|
+
const payload = {
|
|
26482
|
+
...attrs,
|
|
26483
|
+
updatedAt: (_a = attrs.updatedAt) !== null && _a !== void 0 ? _a : Date.now()
|
|
26484
|
+
};
|
|
26485
|
+
return new Promise((resolve, reject) => {
|
|
26486
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
26487
|
+
tx.objectStore(attrsStore).put(payload);
|
|
26488
|
+
tx.oncomplete = () => resolve();
|
|
26489
|
+
tx.onerror = () => reject(tx.error);
|
|
26490
|
+
});
|
|
26491
|
+
}
|
|
26492
|
+
async getAttrs(tabId) {
|
|
26493
|
+
const db = await this.dbPromise;
|
|
26494
|
+
return new Promise((resolve, reject) => {
|
|
26495
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
26496
|
+
const request = tx.objectStore(attrsStore).get(tabId);
|
|
26497
|
+
request.onsuccess = () => resolve(request.result || null);
|
|
26498
|
+
request.onerror = () => reject(request.error);
|
|
26499
|
+
});
|
|
26500
|
+
}
|
|
26501
|
+
async getAllAttrs() {
|
|
26502
|
+
const db = await this.dbPromise;
|
|
26503
|
+
return new Promise((resolve, reject) => {
|
|
26504
|
+
const tx = db.transaction(attrsStore, 'readonly');
|
|
26505
|
+
const request = tx.objectStore(attrsStore).getAll();
|
|
26506
|
+
request.onsuccess = () => resolve(request.result || []);
|
|
26507
|
+
request.onerror = () => reject(request.error);
|
|
26508
|
+
});
|
|
26509
|
+
}
|
|
26510
|
+
/**
|
|
26511
|
+
* Updates `updatedAt` for the tab without clobbering existing attributes.
|
|
26512
|
+
*/
|
|
26513
|
+
async touchTab(tabId, updatedAt = Date.now()) {
|
|
26514
|
+
const db = await this.dbPromise;
|
|
26515
|
+
return new Promise((resolve, reject) => {
|
|
26516
|
+
const tx = db.transaction(attrsStore, 'readwrite');
|
|
26517
|
+
const store = tx.objectStore(attrsStore);
|
|
26518
|
+
const getReq = store.get(tabId);
|
|
26519
|
+
getReq.onsuccess = () => {
|
|
26520
|
+
const existing = (getReq.result || null);
|
|
26521
|
+
const next = existing ? { ...existing, updatedAt } : { tabId, updatedAt };
|
|
26522
|
+
store.put(next);
|
|
26523
|
+
};
|
|
26524
|
+
getReq.onerror = () => reject(getReq.error);
|
|
26525
|
+
tx.oncomplete = () => resolve();
|
|
26526
|
+
tx.onerror = () => reject(tx.error);
|
|
26527
|
+
});
|
|
26528
|
+
}
|
|
26529
|
+
/**
|
|
26530
|
+
* Best-effort garbage collection for orphaned tabs.
|
|
26531
|
+
* Deletes all data for tabs whose `attrs.updatedAt` is older than `maxAgeMs`.
|
|
26532
|
+
*/
|
|
26533
|
+
async sweepStaleTabs(maxAgeMs, now = Date.now()) {
|
|
26534
|
+
const attrs = await this.getAllAttrs().catch(() => []);
|
|
26535
|
+
if (!attrs.length)
|
|
26536
|
+
return 0;
|
|
26537
|
+
const stale = attrs
|
|
26538
|
+
.filter((a) => typeof (a === null || a === void 0 ? void 0 : a.updatedAt) === 'number' && now - a.updatedAt > maxAgeMs)
|
|
26539
|
+
.map((a) => a.tabId);
|
|
26540
|
+
let cleared = 0;
|
|
26541
|
+
for (const tabId of stale) {
|
|
26542
|
+
try {
|
|
26543
|
+
await this.clearTab(tabId);
|
|
26544
|
+
cleared += 1;
|
|
26545
|
+
}
|
|
26546
|
+
catch (_e) {
|
|
26547
|
+
// best effort
|
|
26548
|
+
}
|
|
26549
|
+
}
|
|
26550
|
+
return cleared;
|
|
26551
|
+
}
|
|
26552
|
+
async appendEvent(record) {
|
|
26553
|
+
const db = await this.dbPromise;
|
|
26554
|
+
return new Promise((resolve, reject) => {
|
|
26555
|
+
const tx = db.transaction(rrwebEventsStore, 'readwrite');
|
|
26556
|
+
tx.objectStore(rrwebEventsStore).add(record);
|
|
26557
|
+
tx.oncomplete = () => resolve();
|
|
26558
|
+
tx.onerror = () => reject(tx.error);
|
|
26559
|
+
});
|
|
26560
|
+
}
|
|
26561
|
+
async appendSpans(records) {
|
|
26562
|
+
if (!records.length)
|
|
26563
|
+
return;
|
|
26564
|
+
const db = await this.dbPromise;
|
|
26565
|
+
return new Promise((resolve, reject) => {
|
|
26566
|
+
const tx = db.transaction(otelSpansStore, 'readwrite');
|
|
26567
|
+
const store = tx.objectStore(otelSpansStore);
|
|
26568
|
+
for (const record of records) {
|
|
26569
|
+
store.add(record);
|
|
26570
|
+
}
|
|
26571
|
+
tx.oncomplete = () => resolve();
|
|
26572
|
+
tx.onerror = () => reject(tx.error);
|
|
26573
|
+
});
|
|
26574
|
+
}
|
|
26575
|
+
async getRrwebEventsWindow(tabId, fromTs, toTs) {
|
|
26576
|
+
const db = await this.dbPromise;
|
|
26577
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
26578
|
+
return new Promise((resolve, reject) => {
|
|
26579
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
26580
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
26581
|
+
const req = idx.getAll(range);
|
|
26582
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
26583
|
+
req.onerror = () => reject(req.error);
|
|
26584
|
+
});
|
|
26585
|
+
}
|
|
26586
|
+
/**
|
|
26587
|
+
* Returns the last (highest-ts) FullSnapshot record at/before `cutoffTs`.
|
|
26588
|
+
* Used to keep a replayable anchor when pruning.
|
|
26589
|
+
*/
|
|
26590
|
+
async getLastRrwebFullSnapshotBefore(tabId, cutoffTs) {
|
|
26591
|
+
const db = await this.dbPromise;
|
|
26592
|
+
const range = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26593
|
+
return new Promise((resolve, reject) => {
|
|
26594
|
+
const tx = db.transaction(rrwebEventsStore, 'readonly');
|
|
26595
|
+
const idx = tx.objectStore(rrwebEventsStore).index('tabId_ts');
|
|
26596
|
+
const req = idx.openCursor(range, 'prev');
|
|
26597
|
+
req.onsuccess = () => {
|
|
26598
|
+
const cursor = req.result;
|
|
26599
|
+
if (!cursor) {
|
|
26600
|
+
resolve(null);
|
|
26601
|
+
return;
|
|
26602
|
+
}
|
|
26603
|
+
const value = cursor.value;
|
|
26604
|
+
if (value === null || value === void 0 ? void 0 : value.isFullSnapshot) {
|
|
26605
|
+
resolve(value);
|
|
26606
|
+
return;
|
|
26607
|
+
}
|
|
26608
|
+
cursor.continue();
|
|
26609
|
+
};
|
|
26610
|
+
req.onerror = () => reject(req.error);
|
|
26611
|
+
});
|
|
26612
|
+
}
|
|
26613
|
+
async getOtelSpansWindow(tabId, fromTs, toTs) {
|
|
26614
|
+
const db = await this.dbPromise;
|
|
26615
|
+
const range = IDBKeyRange.bound([tabId, fromTs], [tabId, toTs]);
|
|
26616
|
+
return new Promise((resolve, reject) => {
|
|
26617
|
+
const tx = db.transaction(otelSpansStore, 'readonly');
|
|
26618
|
+
const idx = tx.objectStore(otelSpansStore).index('tabId_ts');
|
|
26619
|
+
const req = idx.getAll(range);
|
|
26620
|
+
req.onsuccess = () => resolve(req.result || []);
|
|
26621
|
+
req.onerror = () => reject(req.error);
|
|
26622
|
+
});
|
|
26623
|
+
}
|
|
26624
|
+
async pruneOlderThan(tabId, cutoffTs) {
|
|
26625
|
+
const db = await this.dbPromise;
|
|
26626
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26627
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26628
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
26629
|
+
const idx = store.index('tabId_ts');
|
|
26630
|
+
const req = idx.openCursor(range);
|
|
26631
|
+
req.onsuccess = () => {
|
|
26632
|
+
const cursor = req.result;
|
|
26633
|
+
if (!cursor) {
|
|
26634
|
+
resolve();
|
|
26635
|
+
return;
|
|
26636
|
+
}
|
|
26637
|
+
cursor.delete();
|
|
26638
|
+
cursor.continue();
|
|
26639
|
+
};
|
|
26640
|
+
req.onerror = () => reject(req.error);
|
|
26641
|
+
});
|
|
26642
|
+
return new Promise((resolve, reject) => {
|
|
26643
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
26644
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26645
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26646
|
+
Promise.all([pruneStore(rrwebStore, rrwebRange), pruneStore(spanStore, spansRange)])
|
|
26647
|
+
.then(() => {
|
|
26648
|
+
// noop; completion is signaled by tx.oncomplete
|
|
26649
|
+
})
|
|
26650
|
+
.catch((e) => {
|
|
26651
|
+
reject(e);
|
|
26652
|
+
});
|
|
26653
|
+
tx.oncomplete = () => resolve();
|
|
26654
|
+
tx.onerror = () => reject(tx.error);
|
|
26655
|
+
});
|
|
26656
|
+
}
|
|
26657
|
+
/**
|
|
26658
|
+
* Prune older data while keeping rrweb replayability:
|
|
26659
|
+
* - rrweb: keep the last FullSnapshot at/before cutoff as an "anchor"
|
|
26660
|
+
* - spans: prune strictly by cutoff
|
|
26661
|
+
*/
|
|
26662
|
+
async pruneOlderThanWithRrwebSnapshotAnchor(tabId, cutoffTs) {
|
|
26663
|
+
const db = await this.dbPromise;
|
|
26664
|
+
const anchor = await this.getLastRrwebFullSnapshotBefore(tabId, cutoffTs);
|
|
26665
|
+
// rrweb: delete everything strictly older than the anchor snapshot (keep the anchor itself)
|
|
26666
|
+
// spans: delete everything older than cutoffTs
|
|
26667
|
+
const rrwebCutoffTs = typeof (anchor === null || anchor === void 0 ? void 0 : anchor.ts) === 'number' ? Math.max(0, anchor.ts - 1) : cutoffTs;
|
|
26668
|
+
const rrwebRange = IDBKeyRange.bound([tabId, 0], [tabId, rrwebCutoffTs]);
|
|
26669
|
+
const spansRange = IDBKeyRange.bound([tabId, 0], [tabId, cutoffTs]);
|
|
26670
|
+
const pruneStore = (store, range) => new Promise((resolve, reject) => {
|
|
26671
|
+
const idx = store.index('tabId_ts');
|
|
26672
|
+
const req = idx.openCursor(range);
|
|
26673
|
+
req.onsuccess = () => {
|
|
26674
|
+
const cursor = req.result;
|
|
26675
|
+
if (!cursor) {
|
|
26676
|
+
resolve();
|
|
26677
|
+
return;
|
|
26678
|
+
}
|
|
26679
|
+
cursor.delete();
|
|
26680
|
+
cursor.continue();
|
|
26681
|
+
};
|
|
26682
|
+
req.onerror = () => reject(req.error);
|
|
26683
|
+
});
|
|
26684
|
+
return new Promise((resolve, reject) => {
|
|
26685
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore], 'readwrite');
|
|
26686
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26687
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26688
|
+
Promise.all([pruneStore(rrwebStore, rrwebRange), pruneStore(spanStore, spansRange)])
|
|
26689
|
+
.then(() => {
|
|
26690
|
+
// noop
|
|
26691
|
+
})
|
|
26692
|
+
.catch((e) => reject(e));
|
|
26693
|
+
tx.oncomplete = () => resolve();
|
|
26694
|
+
tx.onerror = () => reject(tx.error);
|
|
26695
|
+
});
|
|
26696
|
+
}
|
|
26697
|
+
async clearTab(tabId) {
|
|
26698
|
+
const db = await this.dbPromise;
|
|
26699
|
+
const allRange = IDBKeyRange.bound([tabId, 0], [tabId, Number.MAX_SAFE_INTEGER]);
|
|
26700
|
+
const clearByTab = (store) => new Promise((resolve, reject) => {
|
|
26701
|
+
const idx = store.index('tabId_ts');
|
|
26702
|
+
const req = idx.openCursor(allRange);
|
|
26703
|
+
req.onsuccess = () => {
|
|
26704
|
+
const cursor = req.result;
|
|
26705
|
+
if (!cursor) {
|
|
26706
|
+
resolve();
|
|
26707
|
+
return;
|
|
26708
|
+
}
|
|
26709
|
+
cursor.delete();
|
|
26710
|
+
cursor.continue();
|
|
26711
|
+
};
|
|
26712
|
+
req.onerror = () => reject(req.error);
|
|
26713
|
+
});
|
|
26714
|
+
return new Promise((resolve, reject) => {
|
|
26715
|
+
const tx = db.transaction([rrwebEventsStore, otelSpansStore, attrsStore], 'readwrite');
|
|
26716
|
+
const rrwebStore = tx.objectStore(rrwebEventsStore);
|
|
26717
|
+
const spanStore = tx.objectStore(otelSpansStore);
|
|
26718
|
+
const attr = tx.objectStore(attrsStore);
|
|
26719
|
+
Promise.all([
|
|
26720
|
+
clearByTab(rrwebStore),
|
|
26721
|
+
clearByTab(spanStore),
|
|
26722
|
+
new Promise((res, rej) => {
|
|
26723
|
+
const r = attr.delete(tabId);
|
|
26724
|
+
r.onsuccess = () => res();
|
|
26725
|
+
r.onerror = () => rej(r.error);
|
|
26726
|
+
})
|
|
26727
|
+
])
|
|
26728
|
+
.then(() => {
|
|
26729
|
+
// noop
|
|
26730
|
+
})
|
|
26731
|
+
.catch((e) => reject(e));
|
|
26732
|
+
tx.oncomplete = () => resolve();
|
|
26733
|
+
tx.onerror = () => reject(tx.error);
|
|
26734
|
+
});
|
|
25985
26735
|
}
|
|
25986
26736
|
}
|
|
25987
26737
|
|
|
@@ -26104,15 +26854,17 @@ const messagingService = new MessagingService();
|
|
|
26104
26854
|
/* harmony export */ SocketService: () => (/* binding */ SocketService)
|
|
26105
26855
|
/* harmony export */ });
|
|
26106
26856
|
/* 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
|
|
26857
|
+
/* harmony import */ var lib0_observable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lib0/observable */ "../../node_modules/lib0/observable.js");
|
|
26108
26858
|
/* harmony import */ var _services_messaging_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/messaging.service */ "./src/services/messaging.service.ts");
|
|
26109
26859
|
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ "./src/config/index.ts");
|
|
26860
|
+
/* 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");
|
|
26861
|
+
|
|
26110
26862
|
|
|
26111
26863
|
|
|
26112
26864
|
|
|
26113
26865
|
|
|
26114
26866
|
const MAX_RECONNECTION_ATTEMPTS = 2;
|
|
26115
|
-
class SocketService extends
|
|
26867
|
+
class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observable {
|
|
26116
26868
|
constructor() {
|
|
26117
26869
|
super();
|
|
26118
26870
|
this.socket = null;
|
|
@@ -26179,6 +26931,9 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26179
26931
|
path: '/v0/radar/ws',
|
|
26180
26932
|
auth: {
|
|
26181
26933
|
'x-api-key': this.options.apiKey,
|
|
26934
|
+
...this.options.clientId
|
|
26935
|
+
? { [_multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_3__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID]: this.options.clientId }
|
|
26936
|
+
: {},
|
|
26182
26937
|
},
|
|
26183
26938
|
reconnectionAttempts: 2,
|
|
26184
26939
|
transports: ['websocket'],
|
|
@@ -26210,6 +26965,9 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26210
26965
|
this.socket.on(_config__WEBPACK_IMPORTED_MODULE_2__.REMOTE_SESSION_RECORDING_STOP, (data) => {
|
|
26211
26966
|
this.emit(_config__WEBPACK_IMPORTED_MODULE_2__.REMOTE_SESSION_RECORDING_STOP, [data]);
|
|
26212
26967
|
});
|
|
26968
|
+
this.socket.on(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SAVE_BUFFER_EVENT, (data) => {
|
|
26969
|
+
this.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SAVE_BUFFER_EVENT, [data]);
|
|
26970
|
+
});
|
|
26213
26971
|
}
|
|
26214
26972
|
checkReconnectionAttempts() {
|
|
26215
26973
|
if (this.attempts >= MAX_RECONNECTION_ATTEMPTS) {
|
|
@@ -26309,21 +27067,24 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26309
27067
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
26310
27068
|
/* harmony export */ SessionRecorder: () => (/* binding */ SessionRecorder)
|
|
26311
27069
|
/* harmony export */ });
|
|
26312
|
-
/* harmony import */ var
|
|
27070
|
+
/* harmony import */ var lib0_observable__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! lib0/observable */ "../../node_modules/lib0/observable.js");
|
|
26313
27071
|
/* 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
27072
|
/* harmony import */ var _otel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./otel */ "./src/otel/index.ts");
|
|
26315
27073
|
/* harmony import */ var _rrweb__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./rrweb */ "./src/rrweb/index.ts");
|
|
26316
27074
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils/index.ts");
|
|
26317
27075
|
/* 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
|
|
27076
|
+
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config */ "./src/config/index.ts");
|
|
27077
|
+
/* harmony import */ var _patch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./patch */ "./src/patch/index.ts");
|
|
27078
|
+
/* harmony import */ var _eventBus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./eventBus */ "./src/eventBus.ts");
|
|
27079
|
+
/* harmony import */ var _sessionWidget__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sessionWidget */ "./src/sessionWidget/index.ts");
|
|
27080
|
+
/* harmony import */ var _services_messaging_service__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./services/messaging.service */ "./src/services/messaging.service.ts");
|
|
27081
|
+
/* harmony import */ var _services_api_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./services/api.service */ "./src/services/api.service.ts");
|
|
27082
|
+
/* harmony import */ var _services_socket_service__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./services/socket.service */ "./src/services/socket.service.ts");
|
|
27083
|
+
/* harmony import */ var _services_indexedDb_service__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./services/indexedDb.service */ "./src/services/indexedDb.service.ts");
|
|
27084
|
+
/* harmony import */ var _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./services/crashBuffer.service */ "./src/services/crashBuffer.service.ts");
|
|
27085
|
+
/* harmony import */ var _sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sessionWidget/buttonStateConfigs */ "./src/sessionWidget/buttonStateConfigs.ts");
|
|
27086
|
+
/* harmony import */ var _navigation__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./navigation */ "./src/navigation/index.ts");
|
|
27087
|
+
|
|
26327
27088
|
|
|
26328
27089
|
|
|
26329
27090
|
|
|
@@ -26339,7 +27100,8 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_3__.Observa
|
|
|
26339
27100
|
|
|
26340
27101
|
|
|
26341
27102
|
|
|
26342
|
-
|
|
27103
|
+
|
|
27104
|
+
class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Observable {
|
|
26343
27105
|
get navigation() {
|
|
26344
27106
|
return this._navigationRecorder.api;
|
|
26345
27107
|
}
|
|
@@ -26351,7 +27113,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26351
27113
|
}
|
|
26352
27114
|
set sessionId(sessionId) {
|
|
26353
27115
|
this._sessionId = sessionId;
|
|
26354
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27116
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_ID_PROP_NAME, sessionId);
|
|
26355
27117
|
}
|
|
26356
27118
|
get sessionType() {
|
|
26357
27119
|
return this._sessionType;
|
|
@@ -26360,8 +27122,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26360
27122
|
this._sessionType = sessionType;
|
|
26361
27123
|
const continuousRecording = sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS;
|
|
26362
27124
|
this._sessionWidget.updateContinuousRecordingState(continuousRecording);
|
|
26363
|
-
|
|
26364
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27125
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('continuous-debugging', continuousRecording);
|
|
27126
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_TYPE_PROP_NAME, sessionType);
|
|
26365
27127
|
}
|
|
26366
27128
|
get continuousRecording() {
|
|
26367
27129
|
return this.sessionType === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS;
|
|
@@ -26372,8 +27134,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26372
27134
|
set sessionState(state) {
|
|
26373
27135
|
this._sessionState = state;
|
|
26374
27136
|
this._sessionWidget.updateState(this._sessionState, this.continuousRecording);
|
|
26375
|
-
|
|
26376
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27137
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('state-change', this._sessionState);
|
|
27138
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STATE_PROP_NAME, state);
|
|
26377
27139
|
// Emit observable event to support React wrapper
|
|
26378
27140
|
this.emit('state-change', [this._sessionState || _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped, this.sessionType]);
|
|
26379
27141
|
}
|
|
@@ -26382,7 +27144,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26382
27144
|
}
|
|
26383
27145
|
set session(session) {
|
|
26384
27146
|
this._session = session;
|
|
26385
|
-
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(
|
|
27147
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_PROP_NAME, this._session);
|
|
26386
27148
|
}
|
|
26387
27149
|
get sessionAttributes() {
|
|
26388
27150
|
return this._sessionAttributes || {};
|
|
@@ -26420,15 +27182,20 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26420
27182
|
constructor() {
|
|
26421
27183
|
var _a;
|
|
26422
27184
|
super();
|
|
26423
|
-
this._apiService = new
|
|
26424
|
-
this._socketService = new
|
|
27185
|
+
this._apiService = new _services_api_service__WEBPACK_IMPORTED_MODULE_10__.ApiService();
|
|
27186
|
+
this._socketService = new _services_socket_service__WEBPACK_IMPORTED_MODULE_11__.SocketService();
|
|
26425
27187
|
this._tracer = new _otel__WEBPACK_IMPORTED_MODULE_1__.TracerBrowserSDK();
|
|
26426
27188
|
this._recorder = new _rrweb__WEBPACK_IMPORTED_MODULE_2__.RecorderBrowserSDK();
|
|
26427
|
-
this._sessionWidget = new
|
|
26428
|
-
this._navigationRecorder = new
|
|
27189
|
+
this._sessionWidget = new _sessionWidget__WEBPACK_IMPORTED_MODULE_8__.SessionWidget();
|
|
27190
|
+
this._navigationRecorder = new _navigation__WEBPACK_IMPORTED_MODULE_15__.NavigationRecorder();
|
|
26429
27191
|
this._startRequestController = null;
|
|
27192
|
+
this._tabId = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getOrCreateTabId)();
|
|
27193
|
+
this._bufferDb = new _services_indexedDb_service__WEBPACK_IMPORTED_MODULE_12__.IndexedDBService();
|
|
27194
|
+
this._crashBuffer = null;
|
|
27195
|
+
this._isFlushingBuffer = false;
|
|
27196
|
+
this._bufferLifecycleHandlersRegistered = false;
|
|
26430
27197
|
this._isInitialized = false;
|
|
26431
|
-
// Session ID and state are stored in
|
|
27198
|
+
// Session ID and state are stored in sessionStorage (with fallback) to avoid multi-tab conflicts
|
|
26432
27199
|
this._sessionId = null;
|
|
26433
27200
|
this._sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
26434
27201
|
this._sessionState = null;
|
|
@@ -26441,10 +27208,10 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26441
27208
|
this._error = '';
|
|
26442
27209
|
// Safety: avoid accessing storage in SSR/non-browser environments
|
|
26443
27210
|
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)(
|
|
27211
|
+
const sessionLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_PROP_NAME, true) : null;
|
|
27212
|
+
const sessionIdLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_ID_PROP_NAME) : null;
|
|
27213
|
+
const sessionStateLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STATE_PROP_NAME) : null;
|
|
27214
|
+
const sessionTypeLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_TYPE_PROP_NAME) : null;
|
|
26448
27215
|
if ((0,_utils__WEBPACK_IMPORTED_MODULE_3__.isSessionActive)(sessionLocal, sessionTypeLocal)) {
|
|
26449
27216
|
this.session = sessionLocal;
|
|
26450
27217
|
this.sessionId = sessionIdLocal;
|
|
@@ -26458,8 +27225,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26458
27225
|
this.sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
26459
27226
|
}
|
|
26460
27227
|
this._configs = {
|
|
26461
|
-
...
|
|
26462
|
-
apiKey: ((_a = this.session) === null || _a === void 0 ? void 0 : _a.tempApiKey) || ''
|
|
27228
|
+
..._config__WEBPACK_IMPORTED_MODULE_5__.BASE_CONFIG,
|
|
27229
|
+
apiKey: ((_a = this.session) === null || _a === void 0 ? void 0 : _a.tempApiKey) || ''
|
|
26463
27230
|
};
|
|
26464
27231
|
}
|
|
26465
27232
|
/**
|
|
@@ -26470,40 +27237,118 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26470
27237
|
if (typeof window === 'undefined') {
|
|
26471
27238
|
return;
|
|
26472
27239
|
}
|
|
26473
|
-
this._configs = (0,
|
|
27240
|
+
this._configs = (0,_config__WEBPACK_IMPORTED_MODULE_5__.getSessionRecorderConfig)({ ...this._configs, ...configs });
|
|
26474
27241
|
this._isInitialized = true;
|
|
26475
27242
|
this._checkOperation('init');
|
|
26476
|
-
|
|
26477
|
-
|
|
27243
|
+
// GC: remove orphaned crash buffers from old tabs.
|
|
27244
|
+
// Keep TTL large to avoid any accidental data loss.
|
|
27245
|
+
void this._bufferDb.sweepStaleTabs(24 * 60 * 60 * 1000);
|
|
27246
|
+
(0,_patch__WEBPACK_IMPORTED_MODULE_6__.setMaxCapturingHttpPayloadSize)(this._configs.maxCapturingHttpPayloadSize || _config__WEBPACK_IMPORTED_MODULE_5__.DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE);
|
|
27247
|
+
(0,_patch__WEBPACK_IMPORTED_MODULE_6__.setShouldRecordHttpData)(this._configs.captureBody, this._configs.captureHeaders);
|
|
27248
|
+
this._setupCrashBuffer();
|
|
26478
27249
|
this._tracer.init(this._configs);
|
|
26479
27250
|
this._apiService.init(this._configs);
|
|
26480
27251
|
this._sessionWidget.init(this._configs);
|
|
26481
27252
|
this._socketService.init({
|
|
26482
27253
|
apiKey: this._configs.apiKey,
|
|
27254
|
+
clientId: this._tracer.clientId,
|
|
26483
27255
|
socketUrl: this._configs.apiBaseUrl || '',
|
|
26484
27256
|
keepAlive: Boolean(this._configs.useWebsocket),
|
|
26485
|
-
usePostMessageFallback: Boolean(this._configs.usePostMessageFallback)
|
|
27257
|
+
usePostMessageFallback: Boolean(this._configs.usePostMessageFallback)
|
|
26486
27258
|
});
|
|
26487
27259
|
this._navigationRecorder.init({
|
|
26488
27260
|
version: this._configs.version,
|
|
26489
27261
|
application: this._configs.application,
|
|
26490
27262
|
environment: this._configs.environment,
|
|
26491
|
-
enabled: this._configs.recordNavigation
|
|
27263
|
+
enabled: this._configs.recordNavigation
|
|
26492
27264
|
});
|
|
26493
27265
|
if (this._configs.apiKey) {
|
|
26494
27266
|
this._recorder.init(this._configs, this._socketService);
|
|
26495
27267
|
}
|
|
26496
|
-
if (this.sessionId
|
|
26497
|
-
&& (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started
|
|
26498
|
-
|| this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.paused)) {
|
|
27268
|
+
if (this.sessionId && (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started || this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.paused)) {
|
|
26499
27269
|
this._start();
|
|
26500
27270
|
}
|
|
27271
|
+
else {
|
|
27272
|
+
// Buffer-only recording when there is no active debug session.
|
|
27273
|
+
this._startBufferOnlyRecording();
|
|
27274
|
+
}
|
|
26501
27275
|
this._registerWidgetEvents();
|
|
26502
27276
|
this._registerSocketServiceListeners();
|
|
26503
|
-
|
|
27277
|
+
_services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('state-change', this.sessionState);
|
|
26504
27278
|
// Emit init observable event
|
|
26505
27279
|
this.emit('init', [this]);
|
|
26506
27280
|
}
|
|
27281
|
+
_setupCrashBuffer() {
|
|
27282
|
+
var _a;
|
|
27283
|
+
if ((_a = this._configs.buffering) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
27284
|
+
const windowMinutes = this._configs.buffering.windowMinutes || 1;
|
|
27285
|
+
const windowMs = Math.max(10000, windowMinutes * 60 * 1000);
|
|
27286
|
+
this._crashBuffer = new _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__.CrashBufferService(this._bufferDb, this._tabId, windowMs);
|
|
27287
|
+
this._recorder.setCrashBuffer(this._crashBuffer);
|
|
27288
|
+
this._tracer.setCrashBuffer(this._crashBuffer);
|
|
27289
|
+
this._crashBuffer.setAttrs({
|
|
27290
|
+
sessionAttributes: this.sessionAttributes,
|
|
27291
|
+
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
27292
|
+
userAttributes: this._userAttributes
|
|
27293
|
+
});
|
|
27294
|
+
this._crashBuffer.on('error-span-appended', (payload) => {
|
|
27295
|
+
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped || this.sessionId)
|
|
27296
|
+
return;
|
|
27297
|
+
if (!payload.span)
|
|
27298
|
+
return;
|
|
27299
|
+
this._createExceptionSession(payload.span);
|
|
27300
|
+
});
|
|
27301
|
+
this._registerCrashBufferLifecycleHandlers();
|
|
27302
|
+
}
|
|
27303
|
+
}
|
|
27304
|
+
_registerCrashBufferLifecycleHandlers() {
|
|
27305
|
+
if (this._bufferLifecycleHandlersRegistered)
|
|
27306
|
+
return;
|
|
27307
|
+
if (typeof window === 'undefined')
|
|
27308
|
+
return;
|
|
27309
|
+
if (typeof document === 'undefined')
|
|
27310
|
+
return;
|
|
27311
|
+
if (!this._crashBuffer)
|
|
27312
|
+
return;
|
|
27313
|
+
this._bufferLifecycleHandlersRegistered = true;
|
|
27314
|
+
const update = () => this._updateCrashBufferActiveState();
|
|
27315
|
+
window.addEventListener('focus', update, { passive: true });
|
|
27316
|
+
window.addEventListener('blur', update, { passive: true });
|
|
27317
|
+
document.addEventListener('visibilitychange', update, { passive: true });
|
|
27318
|
+
// Set initial state.
|
|
27319
|
+
update();
|
|
27320
|
+
}
|
|
27321
|
+
_updateCrashBufferActiveState() {
|
|
27322
|
+
if (!this._crashBuffer)
|
|
27323
|
+
return;
|
|
27324
|
+
if (typeof document === 'undefined')
|
|
27325
|
+
return;
|
|
27326
|
+
let hasFocus = true;
|
|
27327
|
+
try {
|
|
27328
|
+
hasFocus = typeof document.hasFocus === 'function' ? document.hasFocus() : true;
|
|
27329
|
+
}
|
|
27330
|
+
catch (_e) {
|
|
27331
|
+
hasFocus = true;
|
|
27332
|
+
}
|
|
27333
|
+
const isVisible = document.visibilityState === 'visible' && !document.hidden;
|
|
27334
|
+
const active = isVisible && hasFocus;
|
|
27335
|
+
this._crashBuffer.setActive(active);
|
|
27336
|
+
if (active && this._crashBuffer.needsFullSnapshot()) {
|
|
27337
|
+
// If the buffer was cleared while inactive, the next stored rrweb event must be a FullSnapshot.
|
|
27338
|
+
this._recorder.takeFullSnapshot();
|
|
27339
|
+
}
|
|
27340
|
+
}
|
|
27341
|
+
_startBufferOnlyRecording() {
|
|
27342
|
+
var _a, _b;
|
|
27343
|
+
if (!((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled))
|
|
27344
|
+
return;
|
|
27345
|
+
if (!this._crashBuffer)
|
|
27346
|
+
return;
|
|
27347
|
+
// Don’t start if a session is active.
|
|
27348
|
+
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped || this.sessionId)
|
|
27349
|
+
return;
|
|
27350
|
+
void this._recorder.restart(null, _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL);
|
|
27351
|
+
}
|
|
26507
27352
|
/**
|
|
26508
27353
|
* Save the continuous recording session
|
|
26509
27354
|
*/
|
|
@@ -26513,31 +27358,32 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26513
27358
|
if (!this.continuousRecording || !this._configs.showContinuousRecording) {
|
|
26514
27359
|
return;
|
|
26515
27360
|
}
|
|
26516
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27361
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.SAVING);
|
|
26517
27362
|
const res = await this._apiService.saveContinuousDebugSession(this.sessionId, {
|
|
26518
27363
|
sessionAttributes: this.sessionAttributes,
|
|
26519
27364
|
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
26520
27365
|
stoppedAt: this._recorder.stoppedAt,
|
|
26521
27366
|
name: this._getSessionName()
|
|
26522
27367
|
});
|
|
26523
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27368
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.SAVED);
|
|
26524
27369
|
const sessionUrl = res === null || res === void 0 ? void 0 : res.url;
|
|
26525
27370
|
this._sessionWidget.showToast({
|
|
26526
27371
|
type: 'success',
|
|
26527
27372
|
message: 'Your session was saved',
|
|
26528
27373
|
button: {
|
|
26529
|
-
text: 'Open session',
|
|
26530
|
-
|
|
27374
|
+
text: 'Open session',
|
|
27375
|
+
url: sessionUrl
|
|
27376
|
+
}
|
|
26531
27377
|
}, 5000);
|
|
26532
27378
|
return res;
|
|
26533
27379
|
}
|
|
26534
27380
|
catch (error) {
|
|
26535
27381
|
this.error = error.message;
|
|
26536
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27382
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.ERROR);
|
|
26537
27383
|
}
|
|
26538
27384
|
finally {
|
|
26539
27385
|
setTimeout(() => {
|
|
26540
|
-
this._sessionWidget.updateSaveContinuousDebugSessionState(
|
|
27386
|
+
this._sessionWidget.updateSaveContinuousDebugSessionState(_sessionWidget_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_14__.ContinuousRecordingSaveButtonState.IDLE);
|
|
26541
27387
|
}, 3000);
|
|
26542
27388
|
}
|
|
26543
27389
|
}
|
|
@@ -26576,10 +27422,10 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26576
27422
|
else {
|
|
26577
27423
|
const request = {
|
|
26578
27424
|
sessionAttributes: { comment },
|
|
26579
|
-
stoppedAt: this._recorder.stoppedAt
|
|
27425
|
+
stoppedAt: this._recorder.stoppedAt
|
|
26580
27426
|
};
|
|
26581
27427
|
const response = await this._apiService.stopSession(this.sessionId, request);
|
|
26582
|
-
|
|
27428
|
+
_eventBus__WEBPACK_IMPORTED_MODULE_7__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_RESPONSE, response);
|
|
26583
27429
|
}
|
|
26584
27430
|
this._clearSession();
|
|
26585
27431
|
}
|
|
@@ -26634,7 +27480,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26634
27480
|
/**
|
|
26635
27481
|
* Set the session attributes
|
|
26636
27482
|
* @param attributes - the attributes to set
|
|
26637
|
-
|
|
27483
|
+
*/
|
|
26638
27484
|
setSessionAttributes(attributes) {
|
|
26639
27485
|
this._sessionAttributes = attributes;
|
|
26640
27486
|
}
|
|
@@ -26672,6 +27518,51 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26672
27518
|
this.error = (e === null || e === void 0 ? void 0 : e.message) || 'Failed to capture exception';
|
|
26673
27519
|
}
|
|
26674
27520
|
}
|
|
27521
|
+
async _flushBuffer(sessionId) {
|
|
27522
|
+
var _a, _b;
|
|
27523
|
+
if (!((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled))
|
|
27524
|
+
return null;
|
|
27525
|
+
if (!this._crashBuffer)
|
|
27526
|
+
return null;
|
|
27527
|
+
if (this._isFlushingBuffer)
|
|
27528
|
+
return null;
|
|
27529
|
+
// Don’t flush while a live recording is active.
|
|
27530
|
+
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped)
|
|
27531
|
+
return null;
|
|
27532
|
+
this._isFlushingBuffer = true;
|
|
27533
|
+
try {
|
|
27534
|
+
// await this._crashBuffer.setAttrs({
|
|
27535
|
+
// sessionAttributes: this.sessionAttributes,
|
|
27536
|
+
// resourceAttributes: getNavigatorInfo(),
|
|
27537
|
+
// userAttributes: this._userAttributes
|
|
27538
|
+
// })
|
|
27539
|
+
const snapshot = await this._crashBuffer.snapshot();
|
|
27540
|
+
if (snapshot.rrwebEvents.length === 0 && snapshot.otelSpans.length === 0) {
|
|
27541
|
+
return null;
|
|
27542
|
+
}
|
|
27543
|
+
if (sessionId) {
|
|
27544
|
+
const spans = snapshot.otelSpans.map((s) => s.span);
|
|
27545
|
+
const events = snapshot.rrwebEvents.map((e) => e.event);
|
|
27546
|
+
await Promise.all([
|
|
27547
|
+
this._tracer.exportTraces(spans),
|
|
27548
|
+
this._apiService.exportEvents(sessionId, { events }),
|
|
27549
|
+
this._apiService.updateSessionAttributes(sessionId, {
|
|
27550
|
+
name: this._getSessionName(),
|
|
27551
|
+
sessionAttributes: this.sessionAttributes,
|
|
27552
|
+
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
27553
|
+
userAttributes: this._userAttributes || undefined
|
|
27554
|
+
})
|
|
27555
|
+
]);
|
|
27556
|
+
}
|
|
27557
|
+
}
|
|
27558
|
+
catch (_e) {
|
|
27559
|
+
// swallow: flush is best-effort; never throw into app code
|
|
27560
|
+
}
|
|
27561
|
+
finally {
|
|
27562
|
+
await this._crashBuffer.clear();
|
|
27563
|
+
this._isFlushingBuffer = false;
|
|
27564
|
+
}
|
|
27565
|
+
}
|
|
26675
27566
|
/**
|
|
26676
27567
|
* @description Check if session should be started/stopped automatically
|
|
26677
27568
|
* @param {ISession} [sessionPayload]
|
|
@@ -26685,11 +27576,11 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26685
27576
|
const payload = {
|
|
26686
27577
|
sessionAttributes: {
|
|
26687
27578
|
...this.sessionAttributes,
|
|
26688
|
-
...((sessionPayload === null || sessionPayload === void 0 ? void 0 : sessionPayload.sessionAttributes) || {})
|
|
27579
|
+
...((sessionPayload === null || sessionPayload === void 0 ? void 0 : sessionPayload.sessionAttributes) || {})
|
|
26689
27580
|
},
|
|
26690
27581
|
resourceAttributes: {
|
|
26691
27582
|
...(0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
26692
|
-
...((sessionPayload === null || sessionPayload === void 0 ? void 0 : sessionPayload.resourceAttributes) || {})
|
|
27583
|
+
...((sessionPayload === null || sessionPayload === void 0 ? void 0 : sessionPayload.resourceAttributes) || {})
|
|
26693
27584
|
},
|
|
26694
27585
|
userAttributes: this._userAttributes
|
|
26695
27586
|
};
|
|
@@ -26803,12 +27694,12 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26803
27694
|
* Register socket service event listeners
|
|
26804
27695
|
*/
|
|
26805
27696
|
_registerSocketServiceListeners() {
|
|
26806
|
-
this._socketService.on(
|
|
27697
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STOPPED_EVENT, () => {
|
|
26807
27698
|
this._stop();
|
|
26808
27699
|
this._clearSession();
|
|
26809
27700
|
this._sessionWidget.handleUIReseting();
|
|
26810
27701
|
});
|
|
26811
|
-
this._socketService.on(
|
|
27702
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_AUTO_CREATED, (payload) => {
|
|
26812
27703
|
var _a;
|
|
26813
27704
|
if (!(payload === null || payload === void 0 ? void 0 : payload.data))
|
|
26814
27705
|
return;
|
|
@@ -26817,22 +27708,37 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26817
27708
|
message: 'Your session was auto-saved due to an error',
|
|
26818
27709
|
button: {
|
|
26819
27710
|
text: 'Open session',
|
|
26820
|
-
url: (_a = payload === null || payload === void 0 ? void 0 : payload.data) === null || _a === void 0 ? void 0 : _a.url
|
|
26821
|
-
}
|
|
27711
|
+
url: (_a = payload === null || payload === void 0 ? void 0 : payload.data) === null || _a === void 0 ? void 0 : _a.url
|
|
27712
|
+
}
|
|
26822
27713
|
}, 5000);
|
|
26823
27714
|
});
|
|
26824
|
-
this._socketService.on(
|
|
27715
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.REMOTE_SESSION_RECORDING_START, (payload) => {
|
|
26825
27716
|
console.log('REMOTE_SESSION_RECORDING_START', payload);
|
|
26826
27717
|
if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
|
|
26827
27718
|
this.start();
|
|
26828
27719
|
}
|
|
26829
27720
|
});
|
|
26830
|
-
this._socketService.on(
|
|
27721
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.REMOTE_SESSION_RECORDING_STOP, (payload) => {
|
|
26831
27722
|
console.log('REMOTE_SESSION_RECORDING_STOP', payload);
|
|
26832
27723
|
if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
|
|
26833
27724
|
this.stop();
|
|
26834
27725
|
}
|
|
26835
27726
|
});
|
|
27727
|
+
this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_SAVE_BUFFER_EVENT, (payload) => {
|
|
27728
|
+
var _a;
|
|
27729
|
+
if (!((_a = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _a === void 0 ? void 0 : _a._id))
|
|
27730
|
+
return;
|
|
27731
|
+
void this._flushBuffer(payload.debugSession._id);
|
|
27732
|
+
});
|
|
27733
|
+
}
|
|
27734
|
+
async _createExceptionSession(span) {
|
|
27735
|
+
try {
|
|
27736
|
+
const session = await this._apiService.createErrorSession({ span });
|
|
27737
|
+
if (session) {
|
|
27738
|
+
void this._flushBuffer(session._id);
|
|
27739
|
+
}
|
|
27740
|
+
}
|
|
27741
|
+
catch (_ignored) { }
|
|
26836
27742
|
}
|
|
26837
27743
|
/**
|
|
26838
27744
|
* Create a new session and start it
|
|
@@ -26845,17 +27751,14 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26845
27751
|
sessionAttributes: this.sessionAttributes,
|
|
26846
27752
|
resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getNavigatorInfo)(),
|
|
26847
27753
|
name: this._getSessionName(),
|
|
26848
|
-
...(this._userAttributes ? { userAttributes: this._userAttributes } : {})
|
|
27754
|
+
...(this._userAttributes ? { userAttributes: this._userAttributes } : {})
|
|
26849
27755
|
};
|
|
26850
|
-
const request = !this.continuousRecording ?
|
|
26851
|
-
payload : { debugSessionData: payload };
|
|
27756
|
+
const request = !this.continuousRecording ? payload : { debugSessionData: payload };
|
|
26852
27757
|
const session = this.continuousRecording
|
|
26853
27758
|
? await this._apiService.startContinuousDebugSession(request, signal)
|
|
26854
27759
|
: await this._apiService.startSession(request, signal);
|
|
26855
27760
|
if (session) {
|
|
26856
|
-
session.sessionType = this.continuousRecording
|
|
26857
|
-
? _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS
|
|
26858
|
-
: _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
27761
|
+
session.sessionType = this.continuousRecording ? _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS : _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
26859
27762
|
this._setupSessionAndStart(session, false);
|
|
26860
27763
|
}
|
|
26861
27764
|
}
|
|
@@ -26875,10 +27778,11 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26875
27778
|
this.sessionState = _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started;
|
|
26876
27779
|
this.sessionType = this.sessionType;
|
|
26877
27780
|
this._tracer.start(this.sessionId, this.sessionType);
|
|
26878
|
-
|
|
26879
|
-
this.
|
|
27781
|
+
// Ensure we switch from buffer-only recording to session recording cleanly.
|
|
27782
|
+
void this._recorder.restart(this.sessionId, this.sessionType);
|
|
27783
|
+
this._navigationRecorder.start({ sessionId: this.sessionId, sessionType: this.sessionType });
|
|
26880
27784
|
if (this.session) {
|
|
26881
|
-
|
|
27785
|
+
_eventBus__WEBPACK_IMPORTED_MODULE_7__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_STARTED_EVENT, this.session);
|
|
26882
27786
|
this._socketService.subscribeToSession(this.session);
|
|
26883
27787
|
this._sessionWidget.seconds = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getTimeDifferenceInSeconds)((_a = this.session) === null || _a === void 0 ? void 0 : _a.startedAt);
|
|
26884
27788
|
}
|
|
@@ -26892,6 +27796,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26892
27796
|
this._tracer.stop();
|
|
26893
27797
|
this._recorder.stop();
|
|
26894
27798
|
this._navigationRecorder.stop();
|
|
27799
|
+
this._startBufferOnlyRecording();
|
|
26895
27800
|
}
|
|
26896
27801
|
/**
|
|
26897
27802
|
* Pause the session tracing and recording
|
|
@@ -26907,7 +27812,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26907
27812
|
*/
|
|
26908
27813
|
_resume() {
|
|
26909
27814
|
this._tracer.start(this.sessionId, this.sessionType);
|
|
26910
|
-
this._recorder.
|
|
27815
|
+
void this._recorder.restart(this.sessionId, this.sessionType);
|
|
26911
27816
|
this._navigationRecorder.resume();
|
|
26912
27817
|
this.sessionState = _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.started;
|
|
26913
27818
|
}
|
|
@@ -26923,7 +27828,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_14__.Obse
|
|
|
26923
27828
|
this._start();
|
|
26924
27829
|
}
|
|
26925
27830
|
/**
|
|
26926
|
-
* Set the session ID in
|
|
27831
|
+
* Set the session ID in sessionStorage (with fallback)
|
|
26927
27832
|
* @param sessionId - the session ID to set or clear
|
|
26928
27833
|
*/
|
|
26929
27834
|
_setSession(session) {
|
|
@@ -28566,6 +29471,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28566
29471
|
/* harmony export */ formatTimeForSessionTimer: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.formatTimeForSessionTimer),
|
|
28567
29472
|
/* harmony export */ getFormattedDate: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.getFormattedDate),
|
|
28568
29473
|
/* harmony export */ getNavigatorInfo: () => (/* reexport safe */ _navigator__WEBPACK_IMPORTED_MODULE_0__.getNavigatorInfo),
|
|
29474
|
+
/* harmony export */ getOrCreateTabId: () => (/* reexport safe */ _tabId__WEBPACK_IMPORTED_MODULE_8__.getOrCreateTabId),
|
|
28569
29475
|
/* harmony export */ getStoredItem: () => (/* reexport safe */ _storage__WEBPACK_IMPORTED_MODULE_1__.getStoredItem),
|
|
28570
29476
|
/* harmony export */ getTimeDifferenceInSeconds: () => (/* reexport safe */ _time__WEBPACK_IMPORTED_MODULE_2__.getTimeDifferenceInSeconds),
|
|
28571
29477
|
/* harmony export */ injectStylesIntoShadowRoot: () => (/* reexport safe */ _dom__WEBPACK_IMPORTED_MODULE_4__.injectStylesIntoShadowRoot),
|
|
@@ -28583,6 +29489,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28583
29489
|
/* harmony import */ var _array__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./array */ "./src/utils/array.ts");
|
|
28584
29490
|
/* harmony import */ var _type_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./type-utils */ "./src/utils/type-utils.ts");
|
|
28585
29491
|
/* harmony import */ var _globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./globals */ "./src/utils/globals.ts");
|
|
29492
|
+
/* harmony import */ var _tabId__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tabId */ "./src/utils/tabId.ts");
|
|
28586
29493
|
// Export all utility functions
|
|
28587
29494
|
|
|
28588
29495
|
|
|
@@ -28594,6 +29501,7 @@ const userAgent = navigator === null || navigator === void 0 ? void 0 : navigato
|
|
|
28594
29501
|
|
|
28595
29502
|
|
|
28596
29503
|
|
|
29504
|
+
|
|
28597
29505
|
/***/ }),
|
|
28598
29506
|
|
|
28599
29507
|
/***/ "./src/utils/navigator.ts":
|
|
@@ -28826,32 +29734,88 @@ const isConsoleEvent = (event) => {
|
|
|
28826
29734
|
/* harmony export */ });
|
|
28827
29735
|
/* unused harmony export removeStoredItem */
|
|
28828
29736
|
/**
|
|
28829
|
-
*
|
|
29737
|
+
* Storage utility functions.
|
|
29738
|
+
*
|
|
29739
|
+
* Session state must be isolated per-tab to avoid conflicts across multiple tabs.
|
|
29740
|
+
* We therefore prefer `sessionStorage` and fall back to `localStorage` if needed.
|
|
28830
29741
|
*/
|
|
28831
|
-
const
|
|
28832
|
-
const
|
|
28833
|
-
if (!
|
|
28834
|
-
return
|
|
29742
|
+
const hasWindow = typeof window !== 'undefined';
|
|
29743
|
+
const getStorage = () => {
|
|
29744
|
+
if (!hasWindow)
|
|
29745
|
+
return null;
|
|
29746
|
+
try {
|
|
29747
|
+
if (window.sessionStorage)
|
|
29748
|
+
return window.sessionStorage;
|
|
29749
|
+
}
|
|
29750
|
+
catch (_e) {
|
|
29751
|
+
// sessionStorage can throw (e.g. blocked in some environments)
|
|
29752
|
+
}
|
|
29753
|
+
try {
|
|
29754
|
+
if (window.localStorage)
|
|
29755
|
+
return window.localStorage;
|
|
29756
|
+
}
|
|
29757
|
+
catch (_e) {
|
|
29758
|
+
// localStorage can throw (e.g. blocked in some environments)
|
|
28835
29759
|
}
|
|
28836
|
-
|
|
29760
|
+
return null;
|
|
29761
|
+
};
|
|
29762
|
+
const getStoredItem = (key, parse) => {
|
|
29763
|
+
const storage = getStorage();
|
|
29764
|
+
if (!storage)
|
|
29765
|
+
return null;
|
|
29766
|
+
const item = storage.getItem(key);
|
|
28837
29767
|
return parse ? (item ? JSON.parse(item) : null) : item;
|
|
28838
29768
|
};
|
|
28839
29769
|
const setStoredItem = (key, value) => {
|
|
28840
|
-
|
|
29770
|
+
const storage = getStorage();
|
|
29771
|
+
if (!storage)
|
|
28841
29772
|
return;
|
|
28842
|
-
}
|
|
28843
29773
|
if (value === null || value === undefined) {
|
|
28844
|
-
|
|
29774
|
+
storage.removeItem(key);
|
|
28845
29775
|
}
|
|
28846
29776
|
else {
|
|
28847
|
-
|
|
29777
|
+
storage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
|
|
28848
29778
|
}
|
|
28849
29779
|
};
|
|
28850
29780
|
const removeStoredItem = (key) => {
|
|
28851
|
-
|
|
29781
|
+
const storage = getStorage();
|
|
29782
|
+
if (!storage)
|
|
28852
29783
|
return;
|
|
29784
|
+
storage.removeItem(key);
|
|
29785
|
+
};
|
|
29786
|
+
|
|
29787
|
+
|
|
29788
|
+
/***/ }),
|
|
29789
|
+
|
|
29790
|
+
/***/ "./src/utils/tabId.ts":
|
|
29791
|
+
/*!****************************!*\
|
|
29792
|
+
!*** ./src/utils/tabId.ts ***!
|
|
29793
|
+
\****************************/
|
|
29794
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
29795
|
+
|
|
29796
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
29797
|
+
/* harmony export */ getOrCreateTabId: () => (/* binding */ getOrCreateTabId)
|
|
29798
|
+
/* harmony export */ });
|
|
29799
|
+
const TAB_ID_KEY = 'multiplayer-tab-id';
|
|
29800
|
+
const randomId = () => {
|
|
29801
|
+
// Avoid crypto dependency for older browsers; good enough for per-tab isolation
|
|
29802
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
29803
|
+
};
|
|
29804
|
+
const getOrCreateTabId = () => {
|
|
29805
|
+
if (typeof window === 'undefined')
|
|
29806
|
+
return 'ssr';
|
|
29807
|
+
try {
|
|
29808
|
+
const existing = window.sessionStorage.getItem(TAB_ID_KEY);
|
|
29809
|
+
if (existing)
|
|
29810
|
+
return existing;
|
|
29811
|
+
const id = randomId();
|
|
29812
|
+
window.sessionStorage.setItem(TAB_ID_KEY, id);
|
|
29813
|
+
return id;
|
|
29814
|
+
}
|
|
29815
|
+
catch (_e) {
|
|
29816
|
+
// If sessionStorage is blocked, fall back to a runtime-only id.
|
|
29817
|
+
return randomId();
|
|
28853
29818
|
}
|
|
28854
|
-
window.localStorage.removeItem(key);
|
|
28855
29819
|
};
|
|
28856
29820
|
|
|
28857
29821
|
|
|
@@ -28997,42 +29961,48 @@ const isFile = (x) => {
|
|
|
28997
29961
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* binding */ SessionRecorderIdGenerator)
|
|
28998
29962
|
/* harmony export */ });
|
|
28999
29963
|
/* 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
|
|
29964
|
+
/* harmony import */ var _sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdk */ "../session-recorder-common/dist/esm/sdk/index.js");
|
|
29965
|
+
/* 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
29966
|
|
|
29003
29967
|
|
|
29004
29968
|
|
|
29005
29969
|
var SessionRecorderIdGenerator = /** @class */ (function () {
|
|
29006
29970
|
function SessionRecorderIdGenerator() {
|
|
29007
|
-
this.generateLongId = (0,
|
|
29008
|
-
this.generateShortId = (0,
|
|
29971
|
+
this.generateLongId = (0,_sdk__WEBPACK_IMPORTED_MODULE_1__.getIdGenerator)(16);
|
|
29972
|
+
this.generateShortId = (0,_sdk__WEBPACK_IMPORTED_MODULE_1__.getIdGenerator)(8);
|
|
29009
29973
|
this.sessionShortId = '';
|
|
29974
|
+
this.clientId = '';
|
|
29010
29975
|
this.sessionType = _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
|
|
29011
29976
|
}
|
|
29012
29977
|
SessionRecorderIdGenerator.prototype.generateTraceId = function () {
|
|
29013
29978
|
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;
|
|
29979
|
+
if (!this.sessionShortId && !this.sessionType) {
|
|
29980
|
+
return traceId;
|
|
29026
29981
|
}
|
|
29027
|
-
|
|
29982
|
+
var sessionTypePrefix = _constants_constants_base__WEBPACK_IMPORTED_MODULE_2__.MULTIPLAYER_TRACE_PREFIX_MAP[this.sessionType];
|
|
29983
|
+
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);
|
|
29984
|
+
var sessionTraceId = "".concat(prefix).concat(traceId.substring(prefix.length, traceId.length));
|
|
29985
|
+
return sessionTraceId;
|
|
29028
29986
|
};
|
|
29029
29987
|
SessionRecorderIdGenerator.prototype.generateSpanId = function () {
|
|
29030
29988
|
return this.generateShortId();
|
|
29031
29989
|
};
|
|
29032
|
-
SessionRecorderIdGenerator.prototype.setSessionId = function (sessionShortId, sessionType) {
|
|
29990
|
+
SessionRecorderIdGenerator.prototype.setSessionId = function (sessionShortId, sessionType, clientId) {
|
|
29033
29991
|
if (sessionType === void 0) { sessionType = _type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL; }
|
|
29992
|
+
if (clientId === void 0) { clientId = ''; }
|
|
29993
|
+
if (!clientId &&
|
|
29994
|
+
[
|
|
29995
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE,
|
|
29996
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE,
|
|
29997
|
+
].includes(sessionType)) {
|
|
29998
|
+
throw new Error("Client ID is required for ".concat([
|
|
29999
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE,
|
|
30000
|
+
_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE,
|
|
30001
|
+
].join(', '), " session types"));
|
|
30002
|
+
}
|
|
29034
30003
|
this.sessionShortId = sessionShortId;
|
|
29035
30004
|
this.sessionType = sessionType;
|
|
30005
|
+
this.clientId = clientId;
|
|
29036
30006
|
};
|
|
29037
30007
|
return SessionRecorderIdGenerator;
|
|
29038
30008
|
}());
|
|
@@ -29065,7 +30035,10 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
|
|
|
29065
30035
|
}
|
|
29066
30036
|
SessionRecorderTraceIdRatioBasedSampler.prototype.shouldSample = function (context, traceId) {
|
|
29067
30037
|
if (traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX)
|
|
29068
|
-
|| traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
30038
|
+
|| traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
|
|
30039
|
+
// || traceId.startsWith(MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
|
|
30040
|
+
// || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX)
|
|
30041
|
+
) {
|
|
29069
30042
|
return {
|
|
29070
30043
|
decision: _opentelemetry_sdk_trace_base__WEBPACK_IMPORTED_MODULE_1__.SamplingDecision.RECORD_AND_SAMPLED,
|
|
29071
30044
|
};
|
|
@@ -29133,6 +30106,7 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
|
|
|
29133
30106
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* binding */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29134
30107
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* binding */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29135
30108
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* binding */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30109
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29136
30110
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_ID),
|
|
29137
30111
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* binding */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29138
30112
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* binding */ ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29146,18 +30120,34 @@ var SessionRecorderTraceIdRatioBasedSampler = /** @class */ (function () {
|
|
|
29146
30120
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL),
|
|
29147
30121
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL),
|
|
29148
30122
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* binding */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30123
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* binding */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29149
30124
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30125
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX),
|
|
29150
30126
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29151
30127
|
/* 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)
|
|
30128
|
+
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30129
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* binding */ MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30130
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* binding */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
|
|
29153
30131
|
/* harmony export */ });
|
|
30132
|
+
/* harmony import */ var _type__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../type */ "../session-recorder-common/dist/esm/type/index.js");
|
|
30133
|
+
var _a;
|
|
30134
|
+
|
|
29154
30135
|
/**
|
|
29155
30136
|
* @deprecated
|
|
29156
30137
|
*/
|
|
29157
30138
|
var MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c';
|
|
29158
30139
|
var MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb';
|
|
29159
30140
|
var MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb';
|
|
29160
|
-
var
|
|
30141
|
+
var MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = 'cdbcac';
|
|
30142
|
+
var MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX = 'debcdb';
|
|
30143
|
+
var MULTIPLAYER_TRACE_PREFIX_MAP = (_a = {},
|
|
30144
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS] = MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
|
|
30145
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.SESSION_CACHE] = MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX,
|
|
30146
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.CONTINUOUS_SESSION_CACHE] = MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX,
|
|
30147
|
+
_a[_type__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL] = MULTIPLAYER_TRACE_DEBUG_PREFIX,
|
|
30148
|
+
_a);
|
|
30149
|
+
var MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 8;
|
|
30150
|
+
var MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = 8;
|
|
29161
30151
|
/**
|
|
29162
30152
|
* @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead
|
|
29163
30153
|
*/
|
|
@@ -29181,6 +30171,7 @@ var ATTR_MULTIPLAYER_PLATFORM_NAME = 'multiplayer.platform.name';
|
|
|
29181
30171
|
var ATTR_MULTIPLAYER_CLIENT_ID = 'multiplayer.client.id';
|
|
29182
30172
|
var ATTR_MULTIPLAYER_INTEGRATION_ID = 'multiplayer.integration.id';
|
|
29183
30173
|
var ATTR_MULTIPLAYER_SESSION_ID = 'multiplayer.session.id';
|
|
30174
|
+
var ATTR_MULTIPLAYER_SESSION_CLIENT_ID = 'multiplayer.session.client.id';
|
|
29184
30175
|
var ATTR_MULTIPLAYER_HTTP_PROXY = 'multiplayer.http.proxy';
|
|
29185
30176
|
var ATTR_MULTIPLAYER_HTTP_PROXY_TYPE = 'multiplayer.http.proxy.type';
|
|
29186
30177
|
var ATTR_MULTIPLAYER_HTTP_REQUEST_BODY = 'multiplayer.http.request.body';
|
|
@@ -29238,6 +30229,7 @@ var MASK_PLACEHOLDER = '***MASKED***';
|
|
|
29238
30229
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29239
30230
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29240
30231
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30232
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29241
30233
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
29242
30234
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29243
30235
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29251,10 +30243,14 @@ var MASK_PLACEHOLDER = '***MASKED***';
|
|
|
29251
30243
|
/* 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
30244
|
/* 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
30245
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30246
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29254
30247
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30248
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX),
|
|
29255
30249
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29256
30250
|
/* 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)
|
|
30251
|
+
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30252
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30253
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX)
|
|
29258
30254
|
/* harmony export */ });
|
|
29259
30255
|
/* harmony import */ var _constants_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.base */ "../session-recorder-common/dist/esm/constants/constants.base.js");
|
|
29260
30256
|
|
|
@@ -29296,7 +30292,7 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29296
30292
|
if (config === void 0) { config = {}; }
|
|
29297
30293
|
this.usePostMessage = false;
|
|
29298
30294
|
var _a = config.url, url = _a === void 0 ? _constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL : _a, apiKey = config.apiKey, _b = config.headers, headers = _b === void 0 ? {} : _b, _c = config.timeoutMillis, timeoutMillis = _c === void 0 ? 30000 : _c, _d = config.keepAlive, keepAlive = _d === void 0 ? true : _d, _e = config.concurrencyLimit, concurrencyLimit = _e === void 0 ? 20 : _e, _f = config.postMessageType, postMessageType = _f === void 0 ? 'MULTIPLAYER_SESSION_DEBUGGER_LIB' : _f, _g = config.postMessageTargetOrigin, postMessageTargetOrigin = _g === void 0 ? '*' : _g;
|
|
29299
|
-
this.config = __assign(__assign({}, config), { url: url, apiKey: apiKey, headers: headers,
|
|
30295
|
+
this.config = __assign(__assign({}, config), { url: url, apiKey: apiKey, headers: headers, keepAlive: keepAlive, timeoutMillis: timeoutMillis, concurrencyLimit: concurrencyLimit });
|
|
29300
30296
|
this.postMessageType = postMessageType;
|
|
29301
30297
|
this.postMessageTargetOrigin = postMessageTargetOrigin;
|
|
29302
30298
|
this.exporter = this._createExporter();
|
|
@@ -29306,8 +30302,8 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29306
30302
|
// Filter spans to only include those with Multiplayer trace prefixes
|
|
29307
30303
|
var filteredSpans = spans.filter(function (span) {
|
|
29308
30304
|
var traceId = span.spanContext().traceId;
|
|
29309
|
-
return traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
29310
|
-
traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX);
|
|
30305
|
+
return (traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
|
|
30306
|
+
traceId.startsWith(_constants_constants_base__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX));
|
|
29311
30307
|
});
|
|
29312
30308
|
// Only proceed if there are filtered spans
|
|
29313
30309
|
if (filteredSpans.length === 0) {
|
|
@@ -29334,6 +30330,14 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29334
30330
|
SessionRecorderBrowserTraceExporter.prototype.shutdown = function () {
|
|
29335
30331
|
return this.exporter.shutdown();
|
|
29336
30332
|
};
|
|
30333
|
+
SessionRecorderBrowserTraceExporter.prototype.exportBuffer = function (spans) {
|
|
30334
|
+
var _this = this;
|
|
30335
|
+
return new Promise(function (resolve) {
|
|
30336
|
+
_this.exporter.export(spans, function (result) {
|
|
30337
|
+
resolve(result);
|
|
30338
|
+
});
|
|
30339
|
+
});
|
|
30340
|
+
};
|
|
29337
30341
|
SessionRecorderBrowserTraceExporter.prototype.exportViaPostMessage = function (spans, resultCallback) {
|
|
29338
30342
|
var _this = this;
|
|
29339
30343
|
if (typeof window === 'undefined') {
|
|
@@ -29344,7 +30348,7 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29344
30348
|
window.postMessage({
|
|
29345
30349
|
action: 'traces',
|
|
29346
30350
|
type: this.postMessageType,
|
|
29347
|
-
payload: spans.map(function (span) { return _this.
|
|
30351
|
+
payload: spans.map(function (span) { return _this.serializeSpan(span); })
|
|
29348
30352
|
}, this.postMessageTargetOrigin);
|
|
29349
30353
|
resultCallback({ code: 0 });
|
|
29350
30354
|
}
|
|
@@ -29352,38 +30356,17 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29352
30356
|
resultCallback({ code: 1 });
|
|
29353
30357
|
}
|
|
29354
30358
|
};
|
|
29355
|
-
SessionRecorderBrowserTraceExporter.prototype.
|
|
29356
|
-
var _a;
|
|
30359
|
+
SessionRecorderBrowserTraceExporter.prototype.serializeSpan = function (span) {
|
|
29357
30360
|
var spanContext = span.spanContext();
|
|
29358
|
-
return {
|
|
29359
|
-
_spanContext: spanContext,
|
|
29360
|
-
name: span.name,
|
|
29361
|
-
kind: span.kind,
|
|
29362
|
-
links: span.links,
|
|
29363
|
-
ended: span.ended,
|
|
29364
|
-
events: span.events,
|
|
29365
|
-
status: span.status,
|
|
29366
|
-
endTime: span.endTime,
|
|
29367
|
-
startTime: span.startTime,
|
|
29368
|
-
duration: span.duration,
|
|
29369
|
-
attributes: span.attributes,
|
|
29370
|
-
parentSpanId: (_a = span.parentSpanContext) === null || _a === void 0 ? void 0 : _a.spanId,
|
|
29371
|
-
droppedAttributesCount: span.droppedAttributesCount,
|
|
29372
|
-
droppedEventsCount: span.droppedEventsCount,
|
|
29373
|
-
droppedLinksCount: span.droppedLinksCount,
|
|
29374
|
-
resource: {
|
|
29375
|
-
attributes: span.resource.attributes,
|
|
29376
|
-
asyncAttributesPending: span.resource.asyncAttributesPending,
|
|
29377
|
-
},
|
|
29378
|
-
};
|
|
30361
|
+
return __assign(__assign({}, span), { _spanContext: spanContext });
|
|
29379
30362
|
};
|
|
29380
30363
|
SessionRecorderBrowserTraceExporter.prototype._createExporter = function () {
|
|
29381
30364
|
return new _opentelemetry_exporter_trace_otlp_http__WEBPACK_IMPORTED_MODULE_1__.OTLPTraceExporter({
|
|
29382
30365
|
url: this.config.url,
|
|
29383
|
-
headers: __assign(__assign({ 'Content-Type': 'application/json' }, (this.config.apiKey ? {
|
|
30366
|
+
headers: __assign(__assign({ 'Content-Type': 'application/json' }, (this.config.apiKey ? { Authorization: this.config.apiKey } : {})), (this.config.headers || {})),
|
|
29384
30367
|
timeoutMillis: this.config.timeoutMillis,
|
|
29385
30368
|
keepAlive: this.config.keepAlive,
|
|
29386
|
-
concurrencyLimit: this.config.concurrencyLimit
|
|
30369
|
+
concurrencyLimit: this.config.concurrencyLimit
|
|
29387
30370
|
});
|
|
29388
30371
|
};
|
|
29389
30372
|
SessionRecorderBrowserTraceExporter.prototype.setApiKey = function (apiKey) {
|
|
@@ -29444,6 +30427,7 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29444
30427
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
29445
30428
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING),
|
|
29446
30429
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
30430
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
29447
30431
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
29448
30432
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
29449
30433
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -29458,10 +30442,14 @@ var SessionRecorderBrowserTraceExporter = /** @class */ (function () {
|
|
|
29458
30442
|
/* 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
30443
|
/* 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
30444
|
/* harmony export */ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL),
|
|
30445
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
29461
30446
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
30447
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX),
|
|
29462
30448
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
29463
30449
|
/* 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
30450
|
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
30451
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
30452
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _constants_constants_browser__WEBPACK_IMPORTED_MODULE_0__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX),
|
|
29465
30453
|
/* harmony export */ SessionRecorderBrowserTraceExporter: () => (/* reexport safe */ _exporters_index_browser__WEBPACK_IMPORTED_MODULE_5__.SessionRecorderBrowserTraceExporter),
|
|
29466
30454
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* reexport safe */ _SessionRecorderIdGenerator__WEBPACK_IMPORTED_MODULE_1__.SessionRecorderIdGenerator),
|
|
29467
30455
|
/* harmony export */ SessionRecorderSdk: () => (/* reexport module object */ _sdk__WEBPACK_IMPORTED_MODULE_3__),
|
|
@@ -30058,6 +31046,17 @@ var setGrpcResponseMessage = function (body, options) {
|
|
|
30058
31046
|
|
|
30059
31047
|
/***/ }),
|
|
30060
31048
|
|
|
31049
|
+
/***/ "../session-recorder-common/dist/esm/type/crash-buffer.js":
|
|
31050
|
+
/*!****************************************************************!*\
|
|
31051
|
+
!*** ../session-recorder-common/dist/esm/type/crash-buffer.js ***!
|
|
31052
|
+
\****************************************************************/
|
|
31053
|
+
/***/ (() => {
|
|
31054
|
+
|
|
31055
|
+
|
|
31056
|
+
//# sourceMappingURL=crash-buffer.js.map
|
|
31057
|
+
|
|
31058
|
+
/***/ }),
|
|
31059
|
+
|
|
30061
31060
|
/***/ "../session-recorder-common/dist/esm/type/index.js":
|
|
30062
31061
|
/*!*********************************************************!*\
|
|
30063
31062
|
!*** ../session-recorder-common/dist/esm/type/index.js ***!
|
|
@@ -30072,6 +31071,8 @@ var setGrpcResponseMessage = function (body, options) {
|
|
|
30072
31071
|
/* harmony import */ var _session_type_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./session-type.enum */ "../session-recorder-common/dist/esm/type/session-type.enum.js");
|
|
30073
31072
|
/* harmony import */ var _user_type_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-type.enum */ "../session-recorder-common/dist/esm/type/user-type.enum.js");
|
|
30074
31073
|
/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./session */ "../session-recorder-common/dist/esm/type/session.js");
|
|
31074
|
+
/* harmony import */ var _crash_buffer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./crash-buffer */ "../session-recorder-common/dist/esm/type/crash-buffer.js");
|
|
31075
|
+
|
|
30075
31076
|
|
|
30076
31077
|
|
|
30077
31078
|
|
|
@@ -30096,6 +31097,8 @@ var SessionType;
|
|
|
30096
31097
|
*/
|
|
30097
31098
|
SessionType["PLAIN"] = "MANUAL";
|
|
30098
31099
|
SessionType["MANUAL"] = "MANUAL";
|
|
31100
|
+
SessionType["CONTINUOUS_SESSION_CACHE"] = "CONTINUOUS_SESSION_CACHE";
|
|
31101
|
+
SessionType["SESSION_CACHE"] = "SESSION_CACHE";
|
|
30099
31102
|
})(SessionType || (SessionType = {}));
|
|
30100
31103
|
//# sourceMappingURL=session-type.enum.js.map
|
|
30101
31104
|
|
|
@@ -31947,6 +32950,115 @@ const getRecordConsolePlugin = (options) => ({
|
|
|
31947
32950
|
//# sourceMappingURL=rrweb-plugin-console-record.js.map
|
|
31948
32951
|
|
|
31949
32952
|
|
|
32953
|
+
/***/ }),
|
|
32954
|
+
|
|
32955
|
+
/***/ "../../node_modules/@rrweb/types/dist/types.js":
|
|
32956
|
+
/*!*****************************************************!*\
|
|
32957
|
+
!*** ../../node_modules/@rrweb/types/dist/types.js ***!
|
|
32958
|
+
\*****************************************************/
|
|
32959
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
32960
|
+
|
|
32961
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
32962
|
+
/* harmony export */ EventType: () => (/* binding */ EventType)
|
|
32963
|
+
/* harmony export */ });
|
|
32964
|
+
/* unused harmony exports CanvasContext, IncrementalSource, MediaInteractions, MouseInteractions, NodeType, PointerTypes, ReplayerEvents */
|
|
32965
|
+
var EventType = /* @__PURE__ */ ((EventType2) => {
|
|
32966
|
+
EventType2[EventType2["DomContentLoaded"] = 0] = "DomContentLoaded";
|
|
32967
|
+
EventType2[EventType2["Load"] = 1] = "Load";
|
|
32968
|
+
EventType2[EventType2["FullSnapshot"] = 2] = "FullSnapshot";
|
|
32969
|
+
EventType2[EventType2["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
|
|
32970
|
+
EventType2[EventType2["Meta"] = 4] = "Meta";
|
|
32971
|
+
EventType2[EventType2["Custom"] = 5] = "Custom";
|
|
32972
|
+
EventType2[EventType2["Plugin"] = 6] = "Plugin";
|
|
32973
|
+
return EventType2;
|
|
32974
|
+
})(EventType || {});
|
|
32975
|
+
var IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {
|
|
32976
|
+
IncrementalSource2[IncrementalSource2["Mutation"] = 0] = "Mutation";
|
|
32977
|
+
IncrementalSource2[IncrementalSource2["MouseMove"] = 1] = "MouseMove";
|
|
32978
|
+
IncrementalSource2[IncrementalSource2["MouseInteraction"] = 2] = "MouseInteraction";
|
|
32979
|
+
IncrementalSource2[IncrementalSource2["Scroll"] = 3] = "Scroll";
|
|
32980
|
+
IncrementalSource2[IncrementalSource2["ViewportResize"] = 4] = "ViewportResize";
|
|
32981
|
+
IncrementalSource2[IncrementalSource2["Input"] = 5] = "Input";
|
|
32982
|
+
IncrementalSource2[IncrementalSource2["TouchMove"] = 6] = "TouchMove";
|
|
32983
|
+
IncrementalSource2[IncrementalSource2["MediaInteraction"] = 7] = "MediaInteraction";
|
|
32984
|
+
IncrementalSource2[IncrementalSource2["StyleSheetRule"] = 8] = "StyleSheetRule";
|
|
32985
|
+
IncrementalSource2[IncrementalSource2["CanvasMutation"] = 9] = "CanvasMutation";
|
|
32986
|
+
IncrementalSource2[IncrementalSource2["Font"] = 10] = "Font";
|
|
32987
|
+
IncrementalSource2[IncrementalSource2["Log"] = 11] = "Log";
|
|
32988
|
+
IncrementalSource2[IncrementalSource2["Drag"] = 12] = "Drag";
|
|
32989
|
+
IncrementalSource2[IncrementalSource2["StyleDeclaration"] = 13] = "StyleDeclaration";
|
|
32990
|
+
IncrementalSource2[IncrementalSource2["Selection"] = 14] = "Selection";
|
|
32991
|
+
IncrementalSource2[IncrementalSource2["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet";
|
|
32992
|
+
IncrementalSource2[IncrementalSource2["CustomElement"] = 16] = "CustomElement";
|
|
32993
|
+
return IncrementalSource2;
|
|
32994
|
+
})(IncrementalSource || {});
|
|
32995
|
+
var MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {
|
|
32996
|
+
MouseInteractions2[MouseInteractions2["MouseUp"] = 0] = "MouseUp";
|
|
32997
|
+
MouseInteractions2[MouseInteractions2["MouseDown"] = 1] = "MouseDown";
|
|
32998
|
+
MouseInteractions2[MouseInteractions2["Click"] = 2] = "Click";
|
|
32999
|
+
MouseInteractions2[MouseInteractions2["ContextMenu"] = 3] = "ContextMenu";
|
|
33000
|
+
MouseInteractions2[MouseInteractions2["DblClick"] = 4] = "DblClick";
|
|
33001
|
+
MouseInteractions2[MouseInteractions2["Focus"] = 5] = "Focus";
|
|
33002
|
+
MouseInteractions2[MouseInteractions2["Blur"] = 6] = "Blur";
|
|
33003
|
+
MouseInteractions2[MouseInteractions2["TouchStart"] = 7] = "TouchStart";
|
|
33004
|
+
MouseInteractions2[MouseInteractions2["TouchMove_Departed"] = 8] = "TouchMove_Departed";
|
|
33005
|
+
MouseInteractions2[MouseInteractions2["TouchEnd"] = 9] = "TouchEnd";
|
|
33006
|
+
MouseInteractions2[MouseInteractions2["TouchCancel"] = 10] = "TouchCancel";
|
|
33007
|
+
return MouseInteractions2;
|
|
33008
|
+
})(MouseInteractions || {});
|
|
33009
|
+
var PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {
|
|
33010
|
+
PointerTypes2[PointerTypes2["Mouse"] = 0] = "Mouse";
|
|
33011
|
+
PointerTypes2[PointerTypes2["Pen"] = 1] = "Pen";
|
|
33012
|
+
PointerTypes2[PointerTypes2["Touch"] = 2] = "Touch";
|
|
33013
|
+
return PointerTypes2;
|
|
33014
|
+
})(PointerTypes || {});
|
|
33015
|
+
var CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {
|
|
33016
|
+
CanvasContext2[CanvasContext2["2D"] = 0] = "2D";
|
|
33017
|
+
CanvasContext2[CanvasContext2["WebGL"] = 1] = "WebGL";
|
|
33018
|
+
CanvasContext2[CanvasContext2["WebGL2"] = 2] = "WebGL2";
|
|
33019
|
+
return CanvasContext2;
|
|
33020
|
+
})(CanvasContext || {});
|
|
33021
|
+
var MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {
|
|
33022
|
+
MediaInteractions2[MediaInteractions2["Play"] = 0] = "Play";
|
|
33023
|
+
MediaInteractions2[MediaInteractions2["Pause"] = 1] = "Pause";
|
|
33024
|
+
MediaInteractions2[MediaInteractions2["Seeked"] = 2] = "Seeked";
|
|
33025
|
+
MediaInteractions2[MediaInteractions2["VolumeChange"] = 3] = "VolumeChange";
|
|
33026
|
+
MediaInteractions2[MediaInteractions2["RateChange"] = 4] = "RateChange";
|
|
33027
|
+
return MediaInteractions2;
|
|
33028
|
+
})(MediaInteractions || {});
|
|
33029
|
+
var ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {
|
|
33030
|
+
ReplayerEvents2["Start"] = "start";
|
|
33031
|
+
ReplayerEvents2["Pause"] = "pause";
|
|
33032
|
+
ReplayerEvents2["Resume"] = "resume";
|
|
33033
|
+
ReplayerEvents2["Resize"] = "resize";
|
|
33034
|
+
ReplayerEvents2["Finish"] = "finish";
|
|
33035
|
+
ReplayerEvents2["FullsnapshotRebuilded"] = "fullsnapshot-rebuilded";
|
|
33036
|
+
ReplayerEvents2["LoadStylesheetStart"] = "load-stylesheet-start";
|
|
33037
|
+
ReplayerEvents2["LoadStylesheetEnd"] = "load-stylesheet-end";
|
|
33038
|
+
ReplayerEvents2["SkipStart"] = "skip-start";
|
|
33039
|
+
ReplayerEvents2["SkipEnd"] = "skip-end";
|
|
33040
|
+
ReplayerEvents2["MouseInteraction"] = "mouse-interaction";
|
|
33041
|
+
ReplayerEvents2["EventCast"] = "event-cast";
|
|
33042
|
+
ReplayerEvents2["CustomEvent"] = "custom-event";
|
|
33043
|
+
ReplayerEvents2["Flush"] = "flush";
|
|
33044
|
+
ReplayerEvents2["StateChange"] = "state-change";
|
|
33045
|
+
ReplayerEvents2["PlayBack"] = "play-back";
|
|
33046
|
+
ReplayerEvents2["Destroy"] = "destroy";
|
|
33047
|
+
return ReplayerEvents2;
|
|
33048
|
+
})(ReplayerEvents || {});
|
|
33049
|
+
var NodeType = /* @__PURE__ */ ((NodeType2) => {
|
|
33050
|
+
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
33051
|
+
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
33052
|
+
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
33053
|
+
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
33054
|
+
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
33055
|
+
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
33056
|
+
return NodeType2;
|
|
33057
|
+
})(NodeType || {});
|
|
33058
|
+
|
|
33059
|
+
//# sourceMappingURL=types.js.map
|
|
33060
|
+
|
|
33061
|
+
|
|
31950
33062
|
/***/ }),
|
|
31951
33063
|
|
|
31952
33064
|
/***/ "../../node_modules/@socket.io/component-emitter/lib/esm/index.js":
|
|
@@ -48362,6 +49474,7 @@ var __webpack_exports__ = {};
|
|
|
48362
49474
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE),
|
|
48363
49475
|
/* 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
49476
|
/* harmony export */ ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE),
|
|
49477
|
+
/* harmony export */ ATTR_MULTIPLAYER_SESSION_CLIENT_ID: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID),
|
|
48365
49478
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_ID: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_ID),
|
|
48366
49479
|
/* harmony export */ ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION),
|
|
48367
49480
|
/* harmony export */ ATTR_MULTIPLAYER_USER_HASH: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.ATTR_MULTIPLAYER_USER_HASH),
|
|
@@ -48376,10 +49489,14 @@ var __webpack_exports__ = {};
|
|
|
48376
49489
|
/* 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
49490
|
/* 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
49491
|
/* 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),
|
|
49492
|
+
/* harmony export */ MULTIPLAYER_TRACE_CLIENT_ID_LENGTH: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH),
|
|
48379
49493
|
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX),
|
|
49494
|
+
/* harmony export */ MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX),
|
|
48380
49495
|
/* harmony export */ MULTIPLAYER_TRACE_DEBUG_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_DEBUG_PREFIX),
|
|
48381
49496
|
/* 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
49497
|
/* harmony export */ MULTIPLAYER_TRACE_DOC_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_DOC_PREFIX),
|
|
49498
|
+
/* harmony export */ MULTIPLAYER_TRACE_PREFIX_MAP: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_PREFIX_MAP),
|
|
49499
|
+
/* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX),
|
|
48383
49500
|
/* harmony export */ NavigationRecorder: () => (/* reexport safe */ _navigation__WEBPACK_IMPORTED_MODULE_6__.NavigationRecorder),
|
|
48384
49501
|
/* harmony export */ SessionRecorderBrowserTraceExporter: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderBrowserTraceExporter),
|
|
48385
49502
|
/* harmony export */ SessionRecorderIdGenerator: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderIdGenerator),
|
|
@@ -48457,6 +49574,7 @@ var __webpack_exports__ATTR_MULTIPLAYER_PROJECT_ID = __webpack_exports__.ATTR_MU
|
|
|
48457
49574
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE = __webpack_exports__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE;
|
|
48458
49575
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING = __webpack_exports__.ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE_ENCODING;
|
|
48459
49576
|
var __webpack_exports__ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE = __webpack_exports__.ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE;
|
|
49577
|
+
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_CLIENT_ID = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_CLIENT_ID;
|
|
48460
49578
|
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_ID = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_ID;
|
|
48461
49579
|
var __webpack_exports__ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION = __webpack_exports__.ATTR_MULTIPLAYER_SESSION_RECORDER_VERSION;
|
|
48462
49580
|
var __webpack_exports__ATTR_MULTIPLAYER_USER_HASH = __webpack_exports__.ATTR_MULTIPLAYER_USER_HASH;
|
|
@@ -48471,10 +49589,14 @@ var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL = __webpack_ex
|
|
|
48471
49589
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL;
|
|
48472
49590
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL;
|
|
48473
49591
|
var __webpack_exports__MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL = __webpack_exports__.MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL;
|
|
49592
|
+
var __webpack_exports__MULTIPLAYER_TRACE_CLIENT_ID_LENGTH = __webpack_exports__.MULTIPLAYER_TRACE_CLIENT_ID_LENGTH;
|
|
48474
49593
|
var __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX;
|
|
49594
|
+
var __webpack_exports__MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_PREFIX;
|
|
48475
49595
|
var __webpack_exports__MULTIPLAYER_TRACE_DEBUG_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_DEBUG_PREFIX;
|
|
48476
49596
|
var __webpack_exports__MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = __webpack_exports__.MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH;
|
|
48477
49597
|
var __webpack_exports__MULTIPLAYER_TRACE_DOC_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_DOC_PREFIX;
|
|
49598
|
+
var __webpack_exports__MULTIPLAYER_TRACE_PREFIX_MAP = __webpack_exports__.MULTIPLAYER_TRACE_PREFIX_MAP;
|
|
49599
|
+
var __webpack_exports__MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX;
|
|
48478
49600
|
var __webpack_exports__NavigationRecorder = __webpack_exports__.NavigationRecorder;
|
|
48479
49601
|
var __webpack_exports__SessionRecorderBrowserTraceExporter = __webpack_exports__.SessionRecorderBrowserTraceExporter;
|
|
48480
49602
|
var __webpack_exports__SessionRecorderIdGenerator = __webpack_exports__.SessionRecorderIdGenerator;
|
|
@@ -48486,6 +49608,6 @@ var __webpack_exports__UserType = __webpack_exports__.UserType;
|
|
|
48486
49608
|
var __webpack_exports__WidgetButtonPlacement = __webpack_exports__.WidgetButtonPlacement;
|
|
48487
49609
|
var __webpack_exports__default = __webpack_exports__["default"];
|
|
48488
49610
|
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 };
|
|
49611
|
+
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_CACHE_PREFIX as MULTIPLAYER_TRACE_CONTINUOUS_SESSION_CACHE_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
49612
|
|
|
48491
49613
|
//# sourceMappingURL=index.js.map
|