@multiplayer-app/session-recorder-browser 2.0.85 → 2.0.88

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.umd.js CHANGED
@@ -21463,6 +21463,7 @@ module.exports = {
21463
21463
  /* harmony export */ SESSION_ID_PROP_NAME: () => (/* binding */ SESSION_ID_PROP_NAME),
21464
21464
  /* harmony export */ SESSION_PROP_NAME: () => (/* binding */ SESSION_PROP_NAME),
21465
21465
  /* harmony export */ SESSION_READY_EVENT: () => (/* binding */ SESSION_READY_EVENT),
21466
+ /* harmony export */ SESSION_READY_EVENT_LEGACY: () => (/* binding */ SESSION_READY_EVENT_LEGACY),
21466
21467
  /* harmony export */ SESSION_SAVE_BUFFER_EVENT: () => (/* binding */ SESSION_SAVE_BUFFER_EVENT),
21467
21468
  /* harmony export */ SESSION_STARTED_EVENT: () => (/* binding */ SESSION_STARTED_EVENT),
21468
21469
  /* harmony export */ SESSION_STATE_PROP_NAME: () => (/* binding */ SESSION_STATE_PROP_NAME),
@@ -21487,14 +21488,16 @@ const SESSION_AUTO_CREATED = 'debug-session:auto-created';
21487
21488
  const SESSION_ADD_EVENT = 'debug-session:rrweb:add-event';
21488
21489
  // Backend-triggered flush of client-side crash buffer
21489
21490
  const SESSION_SAVE_BUFFER_EVENT = 'debug-session:save-buffer';
21491
+ const SESSION_READY_EVENT = 'debug-session:ready';
21492
+ // Deprecated event name for backwards compatibility
21493
+ const SESSION_READY_EVENT_LEGACY = 'debug-session-ready';
21490
21494
  const SOCKET_SET_USER_EVENT = 'socket:set-user';
21491
21495
  const DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE = 100000;
21492
- const SESSION_READY_EVENT = 'debug-session-ready';
21493
21496
  const CONTINUOUS_DEBUGGING_TIMEOUT = 60000; // 1 minutes
21494
21497
  const DEBUG_SESSION_MAX_DURATION_SECONDS = 10 * 60 + 30; // TODO: move to shared config otel core
21495
21498
  const REMOTE_SESSION_RECORDING_START = 'remote-session-recording:start';
21496
21499
  const REMOTE_SESSION_RECORDING_STOP = 'remote-session-recording:stop';
21497
- const PACKAGE_VERSION_EXPORT = "2.0.85" || 0;
21500
+ const PACKAGE_VERSION_EXPORT = "2.0.88" || 0;
21498
21501
  // Regex patterns for OpenTelemetry ignore URLs
21499
21502
  const OTEL_IGNORE_URLS = [
21500
21503
  // Traces endpoint
@@ -21566,6 +21569,15 @@ const DEFAULT_WIDGET_TEXT_CONFIG = {
21566
21569
  submitDialogCommentPlaceholder: 'Add a message...',
21567
21570
  submitDialogSubmitText: 'Save',
21568
21571
  submitDialogCancelText: 'Cancel',
21572
+ buttonTooltipIdle: 'Record an issue',
21573
+ buttonTooltipRecording: 'The session is recording. Click to end.',
21574
+ buttonTooltipCancel: 'Click to cancel',
21575
+ buttonTooltipSent: 'We\'ve sent it over! Thanks!',
21576
+ buttonTooltipLoading: 'Starting to record...',
21577
+ buttonTooltipContinuousDebugging: 'You’re continuously recording.',
21578
+ saveContinuousRecordingSavingText: 'Saving recording...',
21579
+ saveContinuousRecordingSavedText: 'Saved',
21580
+ saveContinuousRecordingErrorText: 'Error saving the recording',
21569
21581
  };
21570
21582
  const BASE_CONFIG = {
21571
21583
  apiKey: '',
@@ -21625,6 +21637,7 @@ const BASE_CONFIG = {
21625
21637
  /* harmony export */ SESSION_ID_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_ID_PROP_NAME),
21626
21638
  /* harmony export */ SESSION_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_PROP_NAME),
21627
21639
  /* harmony export */ SESSION_READY_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_READY_EVENT),
21640
+ /* harmony export */ SESSION_READY_EVENT_LEGACY: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_READY_EVENT_LEGACY),
21628
21641
  /* harmony export */ SESSION_SAVE_BUFFER_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_SAVE_BUFFER_EVENT),
21629
21642
  /* harmony export */ SESSION_STARTED_EVENT: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_STARTED_EVENT),
21630
21643
  /* harmony export */ SESSION_STATE_PROP_NAME: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.SESSION_STATE_PROP_NAME),
@@ -21739,6 +21752,15 @@ const getWidgetTextOverridesConfig = (config, defaultConfig) => {
21739
21752
  submitDialogCommentPlaceholder: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.submitDialogCommentPlaceholder, defaultConfig.submitDialogCommentPlaceholder),
21740
21753
  submitDialogSubmitText: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.submitDialogSubmitText, defaultConfig.submitDialogSubmitText),
21741
21754
  submitDialogCancelText: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.submitDialogCancelText, defaultConfig.submitDialogCancelText),
21755
+ buttonTooltipIdle: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipIdle, defaultConfig.buttonTooltipIdle),
21756
+ buttonTooltipRecording: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipRecording, defaultConfig.buttonTooltipRecording),
21757
+ buttonTooltipCancel: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipCancel, defaultConfig.buttonTooltipCancel),
21758
+ buttonTooltipSent: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipSent, defaultConfig.buttonTooltipSent),
21759
+ buttonTooltipLoading: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipLoading, defaultConfig.buttonTooltipLoading),
21760
+ buttonTooltipContinuousDebugging: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.buttonTooltipContinuousDebugging, defaultConfig.buttonTooltipContinuousDebugging),
21761
+ saveContinuousRecordingSavingText: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.saveContinuousRecordingSavingText, defaultConfig.saveContinuousRecordingSavingText),
21762
+ saveContinuousRecordingSavedText: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.saveContinuousRecordingSavedText, defaultConfig.saveContinuousRecordingSavedText),
21763
+ saveContinuousRecordingErrorText: (0,_validators__WEBPACK_IMPORTED_MODULE_3__.isValidString)(config.saveContinuousRecordingErrorText, defaultConfig.saveContinuousRecordingErrorText),
21742
21764
  };
21743
21765
  };
21744
21766
  const getSessionRecorderConfig = (c) => {
@@ -24721,7 +24743,10 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24721
24743
  _services_messaging_service__WEBPACK_IMPORTED_MODULE_10__["default"].sendMessage('state-change', this._sessionState);
24722
24744
  (0,_utils__WEBPACK_IMPORTED_MODULE_4__.setStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_STATE_PROP_NAME, state);
24723
24745
  // Emit observable event to support React wrapper
24724
- this.emit('state-change', [this._sessionState || _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.stopped, this.sessionType]);
24746
+ this.emit('state-change', [
24747
+ this._sessionState || _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.stopped,
24748
+ this.sessionType,
24749
+ ]);
24725
24750
  }
24726
24751
  get session() {
24727
24752
  return this._session;
@@ -24792,10 +24817,18 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24792
24817
  this._error = '';
24793
24818
  // Safety: avoid accessing storage in SSR/non-browser environments
24794
24819
  const isBrowser = typeof window !== 'undefined';
24795
- const sessionLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_PROP_NAME, true) : null;
24796
- const sessionIdLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_ID_PROP_NAME) : null;
24797
- const sessionStateLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_STATE_PROP_NAME) : null;
24798
- const sessionTypeLocal = isBrowser ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_TYPE_PROP_NAME) : null;
24820
+ const sessionLocal = isBrowser
24821
+ ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_PROP_NAME, true)
24822
+ : null;
24823
+ const sessionIdLocal = isBrowser
24824
+ ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_ID_PROP_NAME)
24825
+ : null;
24826
+ const sessionStateLocal = isBrowser
24827
+ ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_STATE_PROP_NAME)
24828
+ : null;
24829
+ const sessionTypeLocal = isBrowser
24830
+ ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getStoredItem)(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_TYPE_PROP_NAME)
24831
+ : null;
24799
24832
  if ((0,_utils__WEBPACK_IMPORTED_MODULE_4__.isSessionActive)(sessionLocal, sessionTypeLocal)) {
24800
24833
  this.session = sessionLocal;
24801
24834
  this.sessionId = sessionIdLocal;
@@ -24827,7 +24860,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24827
24860
  // GC: remove orphaned crash buffers from old tabs.
24828
24861
  // Keep TTL large to avoid any accidental data loss.
24829
24862
  void this._bufferDb.sweepStaleTabs(10 * 60 * 60 * 1000);
24830
- (0,_patch__WEBPACK_IMPORTED_MODULE_7__.setMaxCapturingHttpPayloadSize)(this._configs.maxCapturingHttpPayloadSize || _config__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE);
24863
+ (0,_patch__WEBPACK_IMPORTED_MODULE_7__.setMaxCapturingHttpPayloadSize)(this._configs.maxCapturingHttpPayloadSize ||
24864
+ _config__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE);
24831
24865
  (0,_patch__WEBPACK_IMPORTED_MODULE_7__.setShouldRecordHttpData)(this._configs.captureBody, this._configs.captureHeaders);
24832
24866
  this._setupCrashBuffer();
24833
24867
  this._tracer.init(this._configs);
@@ -24849,7 +24883,9 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24849
24883
  if (this._configs.apiKey) {
24850
24884
  this._recorder.init(this._configs, this._socketService);
24851
24885
  }
24852
- if (this.sessionId && (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started || this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused)) {
24886
+ if (this.sessionId &&
24887
+ (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started ||
24888
+ this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused)) {
24853
24889
  this._start();
24854
24890
  }
24855
24891
  else {
@@ -24903,7 +24939,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24903
24939
  return;
24904
24940
  let hasFocus = true;
24905
24941
  try {
24906
- hasFocus = typeof document.hasFocus === 'function' ? document.hasFocus() : true;
24942
+ hasFocus =
24943
+ typeof document.hasFocus === 'function' ? document.hasFocus() : true;
24907
24944
  }
24908
24945
  catch (_e) {
24909
24946
  hasFocus = true;
@@ -24925,7 +24962,9 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24925
24962
  // stop, leaving the buffer with no FullSnapshot and silently breaking
24926
24963
  // exception-triggered flushBuffer. `_recorder.restart(null, ...)` passes
24927
24964
  // null explicitly, so it's safe regardless of `this.sessionId`.
24928
- 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_5__.SessionState.stopped) {
24965
+ if (!this._crashBuffer ||
24966
+ !((_b = (_a = this._configs) === null || _a === void 0 ? void 0 : _a.buffering) === null || _b === void 0 ? void 0 : _b.enabled) ||
24967
+ this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.stopped) {
24929
24968
  return;
24930
24969
  }
24931
24970
  void this._recorder.restart(null, _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL);
@@ -24976,7 +25015,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
24976
25015
  start(type = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL, session) {
24977
25016
  this._checkOperation('start');
24978
25017
  // If continuous recording is disabled, force plain mode
24979
- if (type === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.CONTINUOUS && !this._configs.showContinuousRecording) {
25018
+ if (type === _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.CONTINUOUS &&
25019
+ !this._configs.showContinuousRecording) {
24980
25020
  type = _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL;
24981
25021
  }
24982
25022
  this.sessionType = type;
@@ -25007,7 +25047,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25007
25047
  stoppedAt: this._recorder.stoppedAt,
25008
25048
  };
25009
25049
  const response = await this._apiService.stopSession(sid, request);
25010
- _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT, response._id);
25050
+ _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT_LEGACY, response._id);
25051
+ _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT, response);
25011
25052
  }
25012
25053
  }
25013
25054
  catch (error) {
@@ -25103,8 +25144,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25103
25144
  this.error = (e === null || e === void 0 ? void 0 : e.message) || 'Failed to capture exception';
25104
25145
  }
25105
25146
  }
25106
- async _flushBuffer(sessionId, force = false) {
25107
- if (!sessionId || !this._crashBuffer || this._isFlushingBuffer) {
25147
+ async _flushBuffer(session, force = false) {
25148
+ if (!session || !this._crashBuffer || this._isFlushingBuffer) {
25108
25149
  return null;
25109
25150
  }
25110
25151
  this._isFlushingBuffer = true;
@@ -25115,8 +25156,10 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25115
25156
  }
25116
25157
  await Promise.all([
25117
25158
  this._tracer.exportTraces(spans.map((s) => s.span)),
25118
- this._apiService.exportEvents(sessionId, { events: events.map((e) => e.event) }),
25119
- this._apiService.updateSessionAttributes(sessionId, {
25159
+ this._apiService.exportEvents(session._id, {
25160
+ events: events.map((e) => e.event),
25161
+ }),
25162
+ this._apiService.updateSessionAttributes(session._id, {
25120
25163
  startedAt: this._toCrashBufferSessionIso(startedAt),
25121
25164
  stoppedAt: this._toCrashBufferSessionIso(stoppedAt),
25122
25165
  sessionAttributes: this.sessionAttributes,
@@ -25131,7 +25174,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25131
25174
  finally {
25132
25175
  await this._crashBuffer.clear();
25133
25176
  this._isFlushingBuffer = false;
25134
- _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT, sessionId);
25177
+ _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT_LEGACY, session._id);
25178
+ _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_READY_EVENT, session);
25135
25179
  }
25136
25180
  }
25137
25181
  _toCrashBufferSessionIso(ts) {
@@ -25220,7 +25264,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25220
25264
  * Handle the safe stop event
25221
25265
  */
25222
25266
  _handleStop(comment) {
25223
- if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started || this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused) {
25267
+ if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started ||
25268
+ this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused) {
25224
25269
  this.stop(comment);
25225
25270
  }
25226
25271
  }
@@ -25244,7 +25289,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25244
25289
  * Handle the safe cancel event
25245
25290
  */
25246
25291
  _handleCancel() {
25247
- if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started || this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused) {
25292
+ if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started ||
25293
+ this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused) {
25248
25294
  this.cancel();
25249
25295
  }
25250
25296
  }
@@ -25252,7 +25298,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25252
25298
  * Handle the safe save event
25253
25299
  */
25254
25300
  _handleSave() {
25255
- if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started && this.continuousRecording) {
25301
+ if (this.sessionState === _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started &&
25302
+ this.continuousRecording) {
25256
25303
  this.save();
25257
25304
  }
25258
25305
  }
@@ -25297,12 +25344,12 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25297
25344
  }
25298
25345
  });
25299
25346
  this._socketService.on(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_SAVE_BUFFER_EVENT, (payload) => {
25300
- var _a, _b, _c;
25347
+ var _a, _b;
25301
25348
  if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.stopped)
25302
25349
  return;
25303
- this._flushBuffer((_a = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _a === void 0 ? void 0 : _a._id, true);
25304
- if ((_b = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _b === void 0 ? void 0 : _b.url) {
25305
- _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_AUTO_CREATED, (_c = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _c === void 0 ? void 0 : _c.url);
25350
+ this._flushBuffer(payload === null || payload === void 0 ? void 0 : payload.debugSession, true);
25351
+ if ((_a = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _a === void 0 ? void 0 : _a.url) {
25352
+ _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_AUTO_CREATED, (_b = payload === null || payload === void 0 ? void 0 : payload.debugSession) === null || _b === void 0 ? void 0 : _b.url);
25306
25353
  }
25307
25354
  });
25308
25355
  }
@@ -25310,7 +25357,7 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25310
25357
  try {
25311
25358
  const session = await this._apiService.createErrorSession({ span });
25312
25359
  if (session === null || session === void 0 ? void 0 : session._id) {
25313
- this._flushBuffer(session._id);
25360
+ this._flushBuffer(session);
25314
25361
  }
25315
25362
  if (session === null || session === void 0 ? void 0 : session.url) {
25316
25363
  _eventBus__WEBPACK_IMPORTED_MODULE_8__.recorderEventBus.emit(_config__WEBPACK_IMPORTED_MODULE_6__.SESSION_AUTO_CREATED, session.url);
@@ -25330,14 +25377,20 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25330
25377
  sessionAttributes: this.sessionAttributes,
25331
25378
  resourceAttributes: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getNavigatorInfo)(),
25332
25379
  name: this._getSessionName(),
25333
- ...(this._userAttributes ? { userAttributes: this._userAttributes } : {}),
25380
+ ...(this._userAttributes
25381
+ ? { userAttributes: this._userAttributes }
25382
+ : {}),
25334
25383
  };
25335
- const request = !this.continuousRecording ? payload : { debugSessionData: payload };
25384
+ const request = !this.continuousRecording
25385
+ ? payload
25386
+ : { debugSessionData: payload };
25336
25387
  const session = this.continuousRecording
25337
25388
  ? await this._apiService.startContinuousDebugSession(request, signal)
25338
25389
  : await this._apiService.startSession(request, signal);
25339
25390
  if (session) {
25340
- session.sessionType = this.continuousRecording ? _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.CONTINUOUS : _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL;
25391
+ session.sessionType = this.continuousRecording
25392
+ ? _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.CONTINUOUS
25393
+ : _multiplayer_app_session_recorder_common__WEBPACK_IMPORTED_MODULE_1__.SessionType.MANUAL;
25341
25394
  this._setupSessionAndStart(session, false);
25342
25395
  }
25343
25396
  }
@@ -25360,7 +25413,10 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25360
25413
  this._tracer.start(this.sessionId, this.sessionType);
25361
25414
  // Ensure we switch from buffer-only recording to session recording cleanly.
25362
25415
  void this._recorder.restart(this.sessionId, this.sessionType);
25363
- this._navigationRecorder.start({ sessionId: this.sessionId, sessionType: this.sessionType });
25416
+ this._navigationRecorder.start({
25417
+ sessionId: this.sessionId,
25418
+ sessionType: this.sessionType,
25419
+ });
25364
25420
  if (this.session) {
25365
25421
  this._socketService.subscribeToSession(this.session);
25366
25422
  this._sessionWidget.seconds = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.getTimeDifferenceInSeconds)((_a = this.session) === null || _a === void 0 ? void 0 : _a.startedAt);
@@ -25388,8 +25444,12 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25388
25444
  // rrweb assigns new node IDs on each record() call, so the next buffer
25389
25445
  // segment must not carry events from the previous generation. Await the
25390
25446
  // clear so its IDB tx can't race past the fresh FullSnapshot.
25391
- const cleared = this._crashBuffer ? this._crashBuffer.clear() : Promise.resolve();
25392
- void cleared.catch(() => undefined).then(() => this._startBufferOnlyRecording());
25447
+ const cleared = this._crashBuffer
25448
+ ? this._crashBuffer.clear()
25449
+ : Promise.resolve();
25450
+ void cleared
25451
+ .catch(() => undefined)
25452
+ .then(() => this._startBufferOnlyRecording());
25393
25453
  }
25394
25454
  /**
25395
25455
  * Pause the session tracing and recording
@@ -25425,7 +25485,10 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25425
25485
  * @param sessionId - the session ID to set or clear
25426
25486
  */
25427
25487
  _setSession(session) {
25428
- this.session = { ...session, startedAt: session.startedAt || new Date().toISOString() };
25488
+ this.session = {
25489
+ ...session,
25490
+ startedAt: session.startedAt || new Date().toISOString(),
25491
+ };
25429
25492
  this.sessionId = (session === null || session === void 0 ? void 0 : session.shortId) || (session === null || session === void 0 ? void 0 : session._id);
25430
25493
  }
25431
25494
  _clearSession() {
@@ -25448,7 +25511,8 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25448
25511
  }
25449
25512
  break;
25450
25513
  case 'stop':
25451
- if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused && this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started) {
25514
+ if (this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.paused &&
25515
+ this.sessionState !== _types__WEBPACK_IMPORTED_MODULE_5__.SessionState.started) {
25452
25516
  throw new Error('Cannot stop. Session is not currently started.');
25453
25517
  }
25454
25518
  break;
@@ -25526,7 +25590,10 @@ class SessionRecorder extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observabl
25526
25590
  */
25527
25591
  _getSessionName(date = new Date()) {
25528
25592
  var _a, _b, _c;
25529
- const userName = ((_a = this.sessionAttributes) === null || _a === void 0 ? void 0 : _a.userName) || ((_b = this._userAttributes) === null || _b === void 0 ? void 0 : _b.userName) || ((_c = this._userAttributes) === null || _c === void 0 ? void 0 : _c.name) || '';
25593
+ const userName = ((_a = this.sessionAttributes) === null || _a === void 0 ? void 0 : _a.userName) ||
25594
+ ((_b = this._userAttributes) === null || _b === void 0 ? void 0 : _b.userName) ||
25595
+ ((_c = this._userAttributes) === null || _c === void 0 ? void 0 : _c.name) ||
25596
+ '';
25530
25597
  return userName
25531
25598
  ? `${userName}'s session on ${(0,_utils__WEBPACK_IMPORTED_MODULE_4__.getFormattedDate)(date, { month: 'short', day: 'numeric' })}`
25532
25599
  : `Session on ${(0,_utils__WEBPACK_IMPORTED_MODULE_4__.getFormattedDate)(date)}`;
@@ -25589,8 +25656,9 @@ class UIManager {
25589
25656
  * tooltip, and inner HTML content (Record icon)
25590
25657
  */
25591
25658
  setRecorderButtonProps() {
25659
+ var _a;
25592
25660
  this.recorderButton.className = 'mp-session-debugger-button';
25593
- this.recorderButton.dataset.tooltip = 'Record an issue';
25661
+ this.recorderButton.dataset.tooltip = (_a = this.widgetTextOverrides.buttonTooltipIdle) !== null && _a !== void 0 ? _a : 'Record an issue';
25594
25662
  (0,_utils__WEBPACK_IMPORTED_MODULE_0__.insertTrustedHTML)(this.recorderButton, `${_templates_icons__WEBPACK_IMPORTED_MODULE_1__.RecordIcon}`);
25595
25663
  }
25596
25664
  /**
@@ -25615,8 +25683,7 @@ class UIManager {
25615
25683
  * The popover includes a logo, heading, and start recording button.
25616
25684
  */
25617
25685
  setInitialPopoverProps() {
25618
- this.initialPopover.className =
25619
- 'mp-session-debugger-popover mp-initial-popover hidden';
25686
+ this.initialPopover.className = 'mp-session-debugger-popover mp-initial-popover hidden';
25620
25687
  (0,_utils__WEBPACK_IMPORTED_MODULE_0__.insertTrustedHTML)(this.initialPopover, (0,_templates_initialPopover__WEBPACK_IMPORTED_MODULE_3__.initialPopoverTemplate)(this.widgetTextOverrides, this.showContinuousRecording));
25621
25688
  }
25622
25689
  /**
@@ -25636,12 +25703,15 @@ class UIManager {
25636
25703
  * @param isLoading - Whether the popover button should show a loading state.
25637
25704
  */
25638
25705
  setPopoverLoadingState(isLoading) {
25706
+ var _a, _b;
25639
25707
  const button = this.initialPopover.querySelector('.mp-session-debugger-popover-button');
25640
25708
  if (!button) {
25641
25709
  return;
25642
25710
  }
25643
25711
  button.classList.toggle('disabled', isLoading);
25644
- button.textContent = isLoading ? 'Starting to record...' : 'Start recording';
25712
+ button.textContent = isLoading
25713
+ ? ((_a = this.widgetTextOverrides.buttonTooltipLoading) !== null && _a !== void 0 ? _a : 'Starting to record...')
25714
+ : ((_b = this.widgetTextOverrides.startRecordingButtonText) !== null && _b !== void 0 ? _b : 'Start recording');
25645
25715
  }
25646
25716
  setTimerValue(time) {
25647
25717
  const timerElement = this.recordingOverlay.querySelector('.timer');
@@ -25701,9 +25771,10 @@ class UIManager {
25701
25771
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
25702
25772
  /* harmony export */ ButtonState: () => (/* binding */ ButtonState),
25703
25773
  /* harmony export */ ContinuousRecordingSaveButtonState: () => (/* binding */ ContinuousRecordingSaveButtonState),
25704
- /* harmony export */ buttonStates: () => (/* binding */ buttonStates),
25705
- /* harmony export */ continuousRecordingSaveButtonStates: () => (/* binding */ continuousRecordingSaveButtonStates)
25774
+ /* harmony export */ getButtonStates: () => (/* binding */ getButtonStates),
25775
+ /* harmony export */ getContinuousRecordingSaveButtonStates: () => (/* binding */ getContinuousRecordingSaveButtonStates)
25706
25776
  /* harmony export */ });
25777
+ /* unused harmony exports buttonStates, continuousRecordingSaveButtonStates */
25707
25778
  /* harmony import */ var _templates_icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./templates/icons */ "./src/sessionWidget/templates/icons.ts");
25708
25779
 
25709
25780
  /**
@@ -25790,6 +25861,46 @@ const continuousRecordingSaveButtonStates = {
25790
25861
  classes: [],
25791
25862
  },
25792
25863
  };
25864
+ const buttonTooltipOverrideKeys = {
25865
+ [ButtonState.IDLE]: 'buttonTooltipIdle',
25866
+ [ButtonState.RECORDING]: 'buttonTooltipRecording',
25867
+ [ButtonState.CANCEL]: 'buttonTooltipCancel',
25868
+ [ButtonState.SENT]: 'buttonTooltipSent',
25869
+ [ButtonState.LOADING]: 'buttonTooltipLoading',
25870
+ [ButtonState.CONTINUOUS_DEBUGGING]: 'buttonTooltipContinuousDebugging',
25871
+ };
25872
+ const continuousSaveTextOverrideKeys = {
25873
+ [ContinuousRecordingSaveButtonState.IDLE]: 'saveLastSnapshotButtonText',
25874
+ [ContinuousRecordingSaveButtonState.SAVING]: 'saveContinuousRecordingSavingText',
25875
+ [ContinuousRecordingSaveButtonState.SAVED]: 'saveContinuousRecordingSavedText',
25876
+ [ContinuousRecordingSaveButtonState.ERROR]: 'saveContinuousRecordingErrorText',
25877
+ };
25878
+ function getButtonStates(overrides) {
25879
+ var _a;
25880
+ const resolved = { ...buttonStates };
25881
+ for (const state of Object.keys(buttonStates)) {
25882
+ const overrideKey = buttonTooltipOverrideKeys[state];
25883
+ resolved[state] = {
25884
+ ...buttonStates[state],
25885
+ tooltip: (_a = overrides[overrideKey]) !== null && _a !== void 0 ? _a : buttonStates[state].tooltip,
25886
+ };
25887
+ }
25888
+ return resolved;
25889
+ }
25890
+ function getContinuousRecordingSaveButtonStates(overrides) {
25891
+ var _a;
25892
+ const resolved = {
25893
+ ...continuousRecordingSaveButtonStates,
25894
+ };
25895
+ for (const state of Object.keys(continuousRecordingSaveButtonStates)) {
25896
+ const overrideKey = continuousSaveTextOverrideKeys[state];
25897
+ resolved[state] = {
25898
+ ...continuousRecordingSaveButtonStates[state],
25899
+ textContent: (_a = overrides[overrideKey]) !== null && _a !== void 0 ? _a : continuousRecordingSaveButtonStates[state].textContent,
25900
+ };
25901
+ }
25902
+ return resolved;
25903
+ }
25793
25904
 
25794
25905
 
25795
25906
  /***/ },
@@ -25991,7 +26102,7 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
25991
26102
  this._buttonState = newState;
25992
26103
  if (!this.isBrowser)
25993
26104
  return;
25994
- const { icon, tooltip, classes, excludeClasses } = _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.buttonStates[newState];
26105
+ const { icon, tooltip, classes, excludeClasses } = (0,_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.getButtonStates)(this._widgetTextOverrides)[newState];
25995
26106
  if (newState === _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.CANCEL) {
25996
26107
  (_a = this.buttonDraggabilityObserver) === null || _a === void 0 ? void 0 : _a.observe(this.recorderButton, {
25997
26108
  attributes: true,
@@ -26029,7 +26140,8 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26029
26140
  type: 'error',
26030
26141
  message: this._error,
26031
26142
  button: {
26032
- text: 'Close', onClick: () => this.hideToast(),
26143
+ text: 'Close',
26144
+ onClick: () => this.hideToast(),
26033
26145
  },
26034
26146
  });
26035
26147
  }
@@ -26176,7 +26288,7 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26176
26288
  return;
26177
26289
  const saveButton = this.initialPopover.querySelector('#mp-save-continuous-debug-session');
26178
26290
  if (saveButton) {
26179
- const { textContent, disabled } = _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.continuousRecordingSaveButtonStates[state];
26291
+ const { textContent, disabled } = (0,_buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.getContinuousRecordingSaveButtonStates)(this._widgetTextOverrides)[state];
26180
26292
  saveButton.disabled = disabled;
26181
26293
  saveButton.textContent = textContent;
26182
26294
  }
@@ -26204,14 +26316,11 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26204
26316
  return;
26205
26317
  this.buttonDraggabilityObserver = new MutationObserver((mutationsList) => {
26206
26318
  for (const mutation of mutationsList) {
26207
- if (mutation.type === 'attributes' &&
26208
- mutation.attributeName === 'class') {
26319
+ if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
26209
26320
  const oldClassName = mutation.oldValue;
26210
26321
  const newClassName = mutation.target['className'];
26211
- if (((oldClassName === null || oldClassName === void 0 ? void 0 : oldClassName.includes('no-draggable')) &&
26212
- !newClassName.includes('no-draggable')) ||
26213
- ((newClassName === null || newClassName === void 0 ? void 0 : newClassName.includes('no-draggable')) &&
26214
- !(oldClassName === null || oldClassName === void 0 ? void 0 : oldClassName.includes('no-draggable')))) {
26322
+ if (((oldClassName === null || oldClassName === void 0 ? void 0 : oldClassName.includes('no-draggable')) && !newClassName.includes('no-draggable')) ||
26323
+ ((newClassName === null || newClassName === void 0 ? void 0 : newClassName.includes('no-draggable')) && !(oldClassName === null || oldClassName === void 0 ? void 0 : oldClassName.includes('no-draggable')))) {
26215
26324
  // draggable mode was changed
26216
26325
  this.initialPopoverVisible = false;
26217
26326
  this.finalPopoverVisible = false;
@@ -26305,7 +26414,12 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26305
26414
  popoverBottom = VIEWPORT_HEIGHT - top + _constants__WEBPACK_IMPORTED_MODULE_3__.POPOVER_DISTANCE_FROM_BUTTON + (isDraggable ? 0 : _constants__WEBPACK_IMPORTED_MODULE_3__.NON_DRAGGABLE_OFFSET);
26306
26415
  popoverRight = VIEWPORT_WIDTH - right;
26307
26416
  if (popoverBottom + POPOVER_HEIGHT > VIEWPORT_HEIGHT) {
26308
- popoverBottom = VIEWPORT_HEIGHT - bottom - POPOVER_HEIGHT - _constants__WEBPACK_IMPORTED_MODULE_3__.POPOVER_DISTANCE_FROM_BUTTON - (isDraggable ? 0 : _constants__WEBPACK_IMPORTED_MODULE_3__.NON_DRAGGABLE_OFFSET);
26417
+ popoverBottom =
26418
+ VIEWPORT_HEIGHT -
26419
+ bottom -
26420
+ POPOVER_HEIGHT -
26421
+ _constants__WEBPACK_IMPORTED_MODULE_3__.POPOVER_DISTANCE_FROM_BUTTON -
26422
+ (isDraggable ? 0 : _constants__WEBPACK_IMPORTED_MODULE_3__.NON_DRAGGABLE_OFFSET);
26309
26423
  }
26310
26424
  if (popoverRight + _constants__WEBPACK_IMPORTED_MODULE_3__.POPOVER_WIDTH > VIEWPORT_WIDTH) {
26311
26425
  popoverRight = VIEWPORT_WIDTH - left - _constants__WEBPACK_IMPORTED_MODULE_3__.POPOVER_WIDTH;
@@ -26408,9 +26522,7 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26408
26522
  this.onCancel();
26409
26523
  }
26410
26524
  this.initialPopoverVisible = false;
26411
- this.buttonState = this._continuousRecording
26412
- ? _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.CONTINUOUS_DEBUGGING
26413
- : _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.IDLE;
26525
+ this.buttonState = this._continuousRecording ? _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.CONTINUOUS_DEBUGGING : _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.IDLE;
26414
26526
  if (typeof document !== 'undefined') {
26415
26527
  document.removeEventListener('click', this.handleClickOutside);
26416
26528
  }
@@ -26477,9 +26589,7 @@ class SessionWidget extends _observable__WEBPACK_IMPORTED_MODULE_0__.Observable
26477
26589
  }
26478
26590
  }
26479
26591
  else {
26480
- this.buttonState = this._initialPopoverVisible
26481
- ? _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.IDLE
26482
- : _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.CANCEL;
26592
+ this.buttonState = this._initialPopoverVisible ? _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.IDLE : _buttonStateConfigs__WEBPACK_IMPORTED_MODULE_8__.ButtonState.CANCEL;
26483
26593
  this.initialPopoverVisible = !this._initialPopoverVisible;
26484
26594
  }
26485
26595
  if (typeof document !== 'undefined') {