@multiplayer-app/session-recorder-browser 2.0.23 → 2.0.24

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/index.d.ts CHANGED
@@ -6,5 +6,6 @@ export * from './navigation';
6
6
  export * from '@multiplayer-app/session-recorder-common';
7
7
  declare let SessionRecorderInstance: SessionRecorder;
8
8
  export { recorderEventBus };
9
+ export { SessionRecorderInstance as SessionRecorder };
9
10
  export default SessionRecorderInstance;
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,0CAA0C,CAAA;AAIxD,QAAA,IAAI,uBAAuB,EAAE,eAAe,CAAA;AAoB5C,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B,eAAe,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAA;AAEhB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,0CAA0C,CAAA;AAIxD,QAAA,IAAI,uBAAuB,EAAE,eAAe,CAAA;AAoB5C,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,uBAAuB,IAAI,eAAe,EAAE,CAAA;AAErD,eAAe,uBAAuB,CAAA"}
package/dist/index.js CHANGED
@@ -24263,7 +24263,7 @@ const CONTINUOUS_DEBUGGING_TIMEOUT = 60000; // 1 minutes
24263
24263
  const DEBUG_SESSION_MAX_DURATION_SECONDS = 10 * 60 + 30; // TODO: move to shared config otel core
24264
24264
  const REMOTE_SESSION_RECORDING_START = 'remote-session-recording:start';
24265
24265
  const REMOTE_SESSION_RECORDING_STOP = 'remote-session-recording:stop';
24266
- const PACKAGE_VERSION_EXPORT = "2.0.23" || 0;
24266
+ const PACKAGE_VERSION_EXPORT = "2.0.24" || 0;
24267
24267
  // Regex patterns for OpenTelemetry ignore URLs
24268
24268
  const OTEL_IGNORE_URLS = [
24269
24269
  // Traces endpoint
@@ -24364,7 +24364,7 @@ const BASE_CONFIG = {
24364
24364
  widgetTextOverrides: DEFAULT_WIDGET_TEXT_CONFIG,
24365
24365
  useWebsocket: true,
24366
24366
  buffering: {
24367
- enabled: false,
24367
+ enabled: true,
24368
24368
  windowMinutes: 0.5,
24369
24369
  snapshotIntervalMs: 20000,
24370
24370
  },
@@ -25951,6 +25951,7 @@ if (typeof XMLHttpRequest !== 'undefined') {
25951
25951
 
25952
25952
  class RecorderBrowserSDK {
25953
25953
  constructor() {
25954
+ this.generation = 0;
25954
25955
  this.intervals = {
25955
25956
  restart: null,
25956
25957
  bufferSnapshot: null,
@@ -25986,12 +25987,15 @@ class RecorderBrowserSDK {
25986
25987
  throw new Error('Configuration not initialized. Call init() before start().');
25987
25988
  }
25988
25989
  this.startedAt = new Date().toISOString();
25990
+ const gen = ++this.generation;
25989
25991
  this.stopFn = (0,rrweb__WEBPACK_IMPORTED_MODULE_6__.record)({
25990
25992
  ...this._buildRecordOptions(),
25991
25993
  emit: async (event) => {
25994
+ if (gen !== this.generation)
25995
+ return;
25992
25996
  const ts = event.timestamp;
25993
25997
  if (!sessionId) {
25994
- await this._handleBufferOnlyEvent(event, ts);
25998
+ await this._handleBufferOnlyEvent(event, ts, gen);
25995
25999
  return;
25996
26000
  }
25997
26001
  this._handleLiveSessionEvent(event, ts, sessionId, sessionType);
@@ -26007,6 +26011,7 @@ class RecorderBrowserSDK {
26007
26011
  var _a;
26008
26012
  try {
26009
26013
  (_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
26014
+ this.stopFn = undefined;
26010
26015
  this.start(sessionId, sessionType);
26011
26016
  }
26012
26017
  catch (_e) {
@@ -26020,6 +26025,7 @@ class RecorderBrowserSDK {
26020
26025
  var _a, _b, _c;
26021
26026
  (_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
26022
26027
  this.stopFn = undefined;
26028
+ this.generation++;
26023
26029
  if (!((_b = this.config) === null || _b === void 0 ? void 0 : _b.useWebsocket)) {
26024
26030
  (_c = this.socketService) === null || _c === void 0 ? void 0 : _c.close();
26025
26031
  }
@@ -26059,13 +26065,15 @@ class RecorderBrowserSDK {
26059
26065
  * @param event - Event.
26060
26066
  * @param ts - Timestamp.
26061
26067
  */
26062
- async _handleBufferOnlyEvent(event, ts) {
26068
+ async _handleBufferOnlyEvent(event, ts, gen) {
26063
26069
  if (!this.crashBuffer)
26064
26070
  return;
26065
26071
  try {
26066
26072
  this._applyConsoleMasking(event);
26067
26073
  const packedEvent = (0,_rrweb_packer__WEBPACK_IMPORTED_MODULE_0__.pack)(event);
26068
26074
  this.stoppedAt = new Date(ts).toISOString();
26075
+ if (gen !== this.generation)
26076
+ return;
26069
26077
  await this.crashBuffer.appendEvent({
26070
26078
  ts,
26071
26079
  isFullSnapshot: event.type === _rrweb_types__WEBPACK_IMPORTED_MODULE_1__.EventType.FullSnapshot,
@@ -26335,10 +26343,11 @@ class ApiService {
26335
26343
 
26336
26344
 
26337
26345
  class CrashBufferService {
26338
- constructor(db, tabId, windowMs) {
26346
+ constructor(db, tabId, windowMs, ready = Promise.resolve()) {
26339
26347
  this.db = db;
26340
26348
  this.tabId = tabId;
26341
26349
  this.windowMs = windowMs;
26350
+ this.ready = ready;
26342
26351
  this.lastPruneAt = 0;
26343
26352
  this.pruneInFlight = null;
26344
26353
  this.isActive = true;
@@ -26361,6 +26370,7 @@ class CrashBufferService {
26361
26370
  if (!this.isActive)
26362
26371
  return;
26363
26372
  const isFullSnapshot = Boolean(payload.isFullSnapshot);
26373
+ await this.ready;
26364
26374
  await this._safe(async () => {
26365
26375
  await this.db.appendEvent({
26366
26376
  tabId: this.tabId,
@@ -26381,6 +26391,7 @@ class CrashBufferService {
26381
26391
  if (!this.isActive)
26382
26392
  return;
26383
26393
  let errorEvent = null;
26394
+ await this.ready;
26384
26395
  await this._safe(async () => {
26385
26396
  const records = payload.map((p) => {
26386
26397
  var _a, _b;
@@ -26429,6 +26440,7 @@ class CrashBufferService {
26429
26440
  }
26430
26441
  async snapshot(_windowMs, now = Date.now()) {
26431
26442
  var _a, _b;
26443
+ await this.ready;
26432
26444
  const stoppedAt = now;
26433
26445
  const startedAt = Math.max(0, stoppedAt - this.windowMs);
26434
26446
  // Always include a full snapshot "anchor" if one exists at/before the window start.
@@ -27063,6 +27075,8 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observa
27063
27075
  this.sessionId = null;
27064
27076
  this.usePostMessage = false;
27065
27077
  this.isInitialized = false;
27078
+ this.lastUserPayload = null;
27079
+ this.lastSubscribeSession = null;
27066
27080
  this.options = {
27067
27081
  apiKey: '',
27068
27082
  socketUrl: '',
@@ -27125,6 +27139,15 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observa
27125
27139
  this.isConnecting = false;
27126
27140
  this.isConnected = true;
27127
27141
  this.usePostMessage = false;
27142
+ // Re-establish identity and session on every (re)connect: socket.io's auto-reconnect
27143
+ // fires 'ready' again after a drop, but the server has no memory of the previous
27144
+ // setUser/subscribe calls — the client must replay them.
27145
+ if (this.lastUserPayload && this.socket) {
27146
+ this.socket.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SOCKET_SET_USER_EVENT, this.lastUserPayload);
27147
+ }
27148
+ if (this.lastSubscribeSession) {
27149
+ this._emitSubscribe(this.lastSubscribeSession);
27150
+ }
27128
27151
  this.flushQueue();
27129
27152
  });
27130
27153
  this.socket.on('disconnect', (err) => {
@@ -27191,16 +27214,33 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observa
27191
27214
  this.emitSocketEvent(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_ADD_EVENT, event);
27192
27215
  }
27193
27216
  subscribeToSession(session) {
27217
+ // Remember the session so reconnects replay subscribe + started.
27218
+ this.lastSubscribeSession = session;
27219
+ this._emitSubscribe(session);
27220
+ }
27221
+ _emitSubscribe(session) {
27194
27222
  this.sessionId = session.shortId || session._id;
27195
- const payload = {
27223
+ const subscribePayload = {
27196
27224
  projectId: session.project,
27197
27225
  workspaceId: session.workspace,
27198
27226
  debugSessionId: this.sessionId,
27199
27227
  sessionType: session.creationType,
27200
27228
  };
27201
- this.emitSocketEvent(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SUBSCRIBE_EVENT, payload);
27202
- // use long id instead of short id
27203
- this.emitSocketEvent(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_STARTED_EVENT, { debugSessionId: session._id });
27229
+ const startedPayload = { debugSessionId: session._id };
27230
+ // Send directly (not via the queue). The queue would cause a duplicate emit on
27231
+ // the next 'ready' alongside the replay, since 'ready' also replays lastSubscribeSession.
27232
+ if (this.usePostMessage) {
27233
+ this.sendViaPostMessage(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SUBSCRIBE_EVENT, subscribePayload);
27234
+ this.sendViaPostMessage(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_STARTED_EVENT, startedPayload);
27235
+ }
27236
+ else if (this.socket && this.isConnected) {
27237
+ this.socket.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_SUBSCRIBE_EVENT, subscribePayload);
27238
+ this.socket.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_STARTED_EVENT, startedPayload);
27239
+ }
27240
+ else {
27241
+ // Not connected: 'ready' will replay via lastSubscribeSession once the socket is up.
27242
+ this._initConnection();
27243
+ }
27204
27244
  }
27205
27245
  unsubscribeFromSession(stopSession) {
27206
27246
  if (this.sessionId) {
@@ -27209,9 +27249,23 @@ class SocketService extends lib0_observable__WEBPACK_IMPORTED_MODULE_4__.Observa
27209
27249
  this.emitSocketEvent(_config__WEBPACK_IMPORTED_MODULE_2__.SESSION_STOPPED_EVENT, {});
27210
27250
  }
27211
27251
  }
27252
+ this.lastSubscribeSession = null;
27212
27253
  }
27213
27254
  setUser(data) {
27214
- this.emitSocketEvent(_config__WEBPACK_IMPORTED_MODULE_2__.SOCKET_SET_USER_EVENT, data);
27255
+ // Remember the last identity so 'ready' (initial connect + every reconnect) can replay it.
27256
+ // Send directly here rather than queuing: the queue would cause a duplicate emit on the
27257
+ // next 'ready' alongside the replay.
27258
+ this.lastUserPayload = data;
27259
+ if (this.usePostMessage) {
27260
+ this.sendViaPostMessage(_config__WEBPACK_IMPORTED_MODULE_2__.SOCKET_SET_USER_EVENT, data);
27261
+ }
27262
+ else if (this.socket && this.isConnected) {
27263
+ this.socket.emit(_config__WEBPACK_IMPORTED_MODULE_2__.SOCKET_SET_USER_EVENT, data);
27264
+ }
27265
+ else {
27266
+ // Not connected yet: 'ready' will replay lastUserPayload once the socket is up.
27267
+ this._initConnection();
27268
+ }
27215
27269
  }
27216
27270
  close() {
27217
27271
  return new Promise((resolve) => {
@@ -27452,13 +27506,11 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27452
27506
  this._start();
27453
27507
  }
27454
27508
  else {
27455
- // Buffer-only recording when there is no active debug session.
27456
27509
  this._startBufferOnlyRecording();
27457
27510
  }
27458
27511
  this._registerWidgetEvents();
27459
27512
  this._registerSocketServiceListeners();
27460
27513
  _services_messaging_service__WEBPACK_IMPORTED_MODULE_9__["default"].sendMessage('state-change', this.sessionState);
27461
- // Emit init observable event
27462
27514
  this.emit('init', [this]);
27463
27515
  }
27464
27516
  _setupCrashBuffer() {
@@ -27466,7 +27518,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27466
27518
  if ((_a = this._configs.buffering) === null || _a === void 0 ? void 0 : _a.enabled) {
27467
27519
  const windowMinutes = this._configs.buffering.windowMinutes || 0.5;
27468
27520
  const windowMs = Math.max(10000, windowMinutes * 60 * 1000);
27469
- this._crashBuffer = new _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__.CrashBufferService(this._bufferDb, this._tabId, windowMs);
27521
+ const ready = this._bufferDb.clearTab(this._tabId).catch(() => undefined);
27522
+ this._crashBuffer = new _services_crashBuffer_service__WEBPACK_IMPORTED_MODULE_13__.CrashBufferService(this._bufferDb, this._tabId, windowMs, ready);
27470
27523
  this._recorder.setCrashBuffer(this._crashBuffer);
27471
27524
  this._tracer.setCrashBuffer(this._crashBuffer);
27472
27525
  this._crashBuffer.on('error-span-appended', (payload) => {
@@ -27518,10 +27571,14 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27518
27571
  }
27519
27572
  _startBufferOnlyRecording() {
27520
27573
  var _a, _b;
27521
- if (this.sessionId ||
27522
- !this._crashBuffer ||
27523
- !((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled) ||
27524
- this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
27574
+ // NOTE: `this.sessionId` is intentionally NOT checked. `_stop()` runs
27575
+ // before `_clearSession()` (the stopSession API call sits between them),
27576
+ // so the clear().then() chain fires while sessionId is still set.
27577
+ // Bailing on sessionId here meant rrweb never restarted after manual
27578
+ // stop, leaving the buffer with no FullSnapshot and silently breaking
27579
+ // exception-triggered flushBuffer. `_recorder.restart(null, ...)` passes
27580
+ // null explicitly, so it's safe regardless of `this.sessionId`.
27581
+ if (!this._crashBuffer || !((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled) || this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
27525
27582
  return;
27526
27583
  }
27527
27584
  void this._recorder.restart(null, _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL);
@@ -27591,9 +27648,10 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27591
27648
  async stop(comment) {
27592
27649
  try {
27593
27650
  this._checkOperation('stop');
27651
+ const sid = this.sessionId;
27594
27652
  this._stop();
27595
27653
  if (this.continuousRecording) {
27596
- await this._apiService.stopContinuousDebugSession(this.sessionId);
27654
+ await this._apiService.stopContinuousDebugSession(sid);
27597
27655
  this.sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
27598
27656
  }
27599
27657
  else {
@@ -27601,10 +27659,9 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27601
27659
  sessionAttributes: { comment },
27602
27660
  stoppedAt: this._recorder.stoppedAt,
27603
27661
  };
27604
- const response = await this._apiService.stopSession(this.sessionId, request);
27662
+ const response = await this._apiService.stopSession(sid, request);
27605
27663
  _eventBus__WEBPACK_IMPORTED_MODULE_7__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_RESPONSE, response);
27606
27664
  }
27607
- this._clearSession();
27608
27665
  }
27609
27666
  catch (error) {
27610
27667
  this.error = error.message;
@@ -27640,15 +27697,15 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27640
27697
  async cancel() {
27641
27698
  try {
27642
27699
  this._checkOperation('cancel');
27700
+ const sid = this.sessionId;
27643
27701
  this._stop();
27644
27702
  if (this.continuousRecording) {
27645
- await this._apiService.stopContinuousDebugSession(this.sessionId);
27703
+ await this._apiService.stopContinuousDebugSession(sid);
27646
27704
  this.sessionType = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_0__.SessionType.MANUAL;
27647
27705
  }
27648
27706
  else {
27649
- await this._apiService.cancelSession(this.sessionId);
27707
+ await this._apiService.cancelSession(sid);
27650
27708
  }
27651
- this._clearSession();
27652
27709
  }
27653
27710
  catch (error) {
27654
27711
  this.error = error.message;
@@ -27700,12 +27757,7 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27700
27757
  }
27701
27758
  }
27702
27759
  async _flushBuffer(sessionId) {
27703
- var _a, _b;
27704
- if (!sessionId ||
27705
- !this._crashBuffer ||
27706
- this._isFlushingBuffer ||
27707
- !((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled) ||
27708
- this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped) {
27760
+ if (!sessionId || !this._crashBuffer || this._isFlushingBuffer) {
27709
27761
  return null;
27710
27762
  }
27711
27763
  this._isFlushingBuffer = true;
@@ -27895,6 +27947,8 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27895
27947
  });
27896
27948
  this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_5__.SESSION_SAVE_BUFFER_EVENT, (payload) => {
27897
27949
  var _a;
27950
+ if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_4__.SessionState.stopped)
27951
+ return;
27898
27952
  this._flushBuffer((_a = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _a === void 0 ? void 0 : _a._id);
27899
27953
  });
27900
27954
  }
@@ -27965,7 +28019,18 @@ class SessionRecorder extends lib0_observable__WEBPACK_IMPORTED_MODULE_16__.Obse
27965
28019
  this._tracer.stop();
27966
28020
  this._recorder.stop();
27967
28021
  this._navigationRecorder.stop();
27968
- this._startBufferOnlyRecording();
28022
+ // Clear session identity synchronously. The buffer-restart chain and the
28023
+ // error-span-appended listener both gate on `this.sessionId === null`;
28024
+ // deferring this to `_clearSession()` (after the network stopSession
28025
+ // call) left them seeing a stale id and silently no-oping. Callers that
28026
+ // need the id for the stop/cancel API must capture it before _stop().
28027
+ this.session = null;
28028
+ this.sessionId = null;
28029
+ // rrweb assigns new node IDs on each record() call, so the next buffer
28030
+ // segment must not carry events from the previous generation. Await the
28031
+ // clear so its IDB tx can't race past the fresh FullSnapshot.
28032
+ const cleared = this._crashBuffer ? this._crashBuffer.clear() : Promise.resolve();
28033
+ void cleared.catch(() => undefined).then(() => this._startBufferOnlyRecording());
27969
28034
  }
27970
28035
  /**
27971
28036
  * Pause the session tracing and recording
@@ -56531,6 +56596,7 @@ var __webpack_exports__ = {};
56531
56596
  /* harmony export */ MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX),
56532
56597
  /* harmony export */ MULTIPLAYER_TRACE_SESSION_PREFIX: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.MULTIPLAYER_TRACE_SESSION_PREFIX),
56533
56598
  /* harmony export */ NavigationRecorder: () => (/* reexport safe */ _navigation__WEBPACK_IMPORTED_MODULE_6__.NavigationRecorder),
56599
+ /* harmony export */ SessionRecorder: () => (/* binding */ SessionRecorderInstance),
56534
56600
  /* harmony export */ SessionRecorderBrowserTraceExporter: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderBrowserTraceExporter),
56535
56601
  /* harmony export */ SessionRecorderIdGenerator: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderIdGenerator),
56536
56602
  /* harmony export */ SessionRecorderSdk: () => (/* reexport safe */ _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_7__.SessionRecorderSdk),
@@ -56578,6 +56644,7 @@ else {
56578
56644
  SessionRecorderInstance = new _session_recorder__WEBPACK_IMPORTED_MODULE_3__.SessionRecorder();
56579
56645
  }
56580
56646
 
56647
+
56581
56648
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SessionRecorderInstance);
56582
56649
 
56583
56650
  })();
@@ -56632,6 +56699,7 @@ var __webpack_exports__MULTIPLAYER_TRACE_PREFIX_MAP = __webpack_exports__.MULTIP
56632
56699
  var __webpack_exports__MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_SESSION_CACHE_PREFIX;
56633
56700
  var __webpack_exports__MULTIPLAYER_TRACE_SESSION_PREFIX = __webpack_exports__.MULTIPLAYER_TRACE_SESSION_PREFIX;
56634
56701
  var __webpack_exports__NavigationRecorder = __webpack_exports__.NavigationRecorder;
56702
+ var __webpack_exports__SessionRecorder = __webpack_exports__.SessionRecorder;
56635
56703
  var __webpack_exports__SessionRecorderBrowserTraceExporter = __webpack_exports__.SessionRecorderBrowserTraceExporter;
56636
56704
  var __webpack_exports__SessionRecorderIdGenerator = __webpack_exports__.SessionRecorderIdGenerator;
56637
56705
  var __webpack_exports__SessionRecorderSdk = __webpack_exports__.SessionRecorderSdk;
@@ -56642,6 +56710,6 @@ var __webpack_exports__UserType = __webpack_exports__.UserType;
56642
56710
  var __webpack_exports__WidgetButtonPlacement = __webpack_exports__.WidgetButtonPlacement;
56643
56711
  var __webpack_exports__default = __webpack_exports__["default"];
56644
56712
  var __webpack_exports__recorderEventBus = __webpack_exports__.recorderEventBus;
56645
- 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_ISSUE_TITLE_HASH as ATTR_MULTIPLAYER_ISSUE_TITLE_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_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__MULTIPLAYER_TRACE_SESSION_PREFIX as MULTIPLAYER_TRACE_SESSION_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 };
56713
+ 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_ISSUE_TITLE_HASH as ATTR_MULTIPLAYER_ISSUE_TITLE_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_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__MULTIPLAYER_TRACE_SESSION_PREFIX as MULTIPLAYER_TRACE_SESSION_PREFIX, __webpack_exports__NavigationRecorder as NavigationRecorder, __webpack_exports__SessionRecorder as SessionRecorder, __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 };
56646
56714
 
56647
56715
  //# sourceMappingURL=index.js.map