@coralogix/browser 3.23.5 → 3.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/README.md +32 -1
- package/index.esm.js +1 -1
- package/index.esm2.js +815 -151
- package/package.json +1 -1
- package/sessionRecorder.esm.js +9 -78
- package/src/constants.d.ts +4 -1
- package/src/helpers.d.ts +2 -0
- package/src/instrumentations/screenshot/dom-change-screenshot-trigger.d.ts +28 -0
- package/src/instrumentations/screenshot/dom-change-screenshot.consts.d.ts +23 -0
- package/src/instrumentations/screenshot/screenshot-gate.d.ts +1 -0
- package/src/instrumentations/screenshot/screenshot.utils.d.ts +2 -0
- package/src/instrumentations/user-interaction/user-interaction.utils.d.ts +2 -2
- package/src/session/session.model.d.ts +1 -0
- package/src/session/sessionRecorder.d.ts +1 -0
- package/src/tools/sdk-store.d.ts +6 -0
- package/src/types.d.ts +1 -0
- package/src/version.d.ts +1 -1
package/index.esm2.js
CHANGED
|
@@ -268,32 +268,68 @@ function getCxGlobal() {
|
|
|
268
268
|
}
|
|
269
269
|
var CxGlobal = getCxGlobal();
|
|
270
270
|
|
|
271
|
+
var SDK_STORE_KEY = '__cx_store__';
|
|
272
|
+
var CACHED_LOGS_KEY = 'cachedLogs';
|
|
273
|
+
var globalWithStore = CxGlobal;
|
|
274
|
+
var sdkStore = globalWithStore[SDK_STORE_KEY] || (globalWithStore[SDK_STORE_KEY] = {});
|
|
275
|
+
var globalMirror = CxGlobal;
|
|
276
|
+
function setSdkState(key, value) {
|
|
277
|
+
sdkStore[key] = value;
|
|
278
|
+
globalMirror[key] = value;
|
|
279
|
+
}
|
|
280
|
+
function deleteSdkState(key) {
|
|
281
|
+
delete sdkStore[key];
|
|
282
|
+
delete globalMirror[key];
|
|
283
|
+
}
|
|
284
|
+
|
|
271
285
|
var CLICK_SCREENSHOT_MANAGER_KEY = 'rumClickScreenshotManager';
|
|
272
286
|
|
|
287
|
+
var DOM_CHANGE_SCREENSHOT_TRIGGER_KEY = 'rumDomChangeScreenshotTrigger';
|
|
288
|
+
var SETTLE_QUIET_MS = 500;
|
|
289
|
+
var CONTENT_ELEMENT_FLOOR = 50;
|
|
290
|
+
var CHANGE_DEBOUNCE_MS = 400;
|
|
291
|
+
var INTERACTION_TIGHT_MS = 150;
|
|
292
|
+
var INTERACTION_TIGHT_MIN_ELEMENTS = 1;
|
|
293
|
+
var INTERACTION_LOOSE_MS = 1500;
|
|
294
|
+
var INTERACTION_LOOSE_MIN_ELEMENTS = 3;
|
|
295
|
+
var OVERLAY_MAX_DEPTH = 3;
|
|
296
|
+
var MAX_DEPTH_WALK = 40;
|
|
297
|
+
var OVERLAY_MAX_REMOVES_ABSOLUTE = 2;
|
|
298
|
+
var OVERLAY_MAX_REMOVES_FRACTION = 0.1;
|
|
299
|
+
var VIEW_CHANGE_FRACTION = 0.02;
|
|
300
|
+
var VIEW_CHANGE_MIN_WEIGHT = 25;
|
|
301
|
+
var NODE_COUNT_REFRESH_MS = 2000;
|
|
302
|
+
var MIN_CAPTURE_INTERVAL_MS = 2000;
|
|
303
|
+
var MAX_CAPTURES_PER_VIEW = 10;
|
|
304
|
+
var MAX_NODES_FOR_CAPTURE = 20000;
|
|
305
|
+
|
|
273
306
|
function getSnapshotManager() {
|
|
274
|
-
return
|
|
307
|
+
return sdkStore[SNAPSHOT_MANAGER_KEY];
|
|
275
308
|
}
|
|
276
309
|
function getSessionManager() {
|
|
277
|
-
return
|
|
310
|
+
return sdkStore[SESSION_MANAGER_KEY];
|
|
278
311
|
}
|
|
279
312
|
function getSessionRecorder() {
|
|
280
|
-
return
|
|
313
|
+
return sdkStore[SESSION_RECORDER_KEY];
|
|
281
314
|
}
|
|
282
315
|
function getClickScreenshotManager() {
|
|
283
|
-
return
|
|
316
|
+
return sdkStore[CLICK_SCREENSHOT_MANAGER_KEY];
|
|
317
|
+
}
|
|
318
|
+
function getDomChangeScreenshotTrigger() {
|
|
319
|
+
return sdkStore[DOM_CHANGE_SCREENSHOT_TRIGGER_KEY];
|
|
284
320
|
}
|
|
285
321
|
function getSdkConfig() {
|
|
286
|
-
return
|
|
322
|
+
return sdkStore[SDK_CONFIG_KEY];
|
|
287
323
|
}
|
|
288
324
|
function getUserAgentData() {
|
|
289
|
-
return
|
|
325
|
+
return sdkStore[USER_AGENT_KEY];
|
|
290
326
|
}
|
|
291
327
|
var TRACER_PROVIDER_KEY = '__cx_tracer_provider__';
|
|
292
328
|
function setTracerProvider(provider) {
|
|
293
|
-
|
|
329
|
+
setSdkState(TRACER_PROVIDER_KEY, provider);
|
|
294
330
|
}
|
|
295
331
|
function getTracerProvider() {
|
|
296
|
-
return
|
|
332
|
+
return sdkStore[TRACER_PROVIDER_KEY];
|
|
297
333
|
}
|
|
298
334
|
function flush() {
|
|
299
335
|
var tracerProvider = getTracerProvider();
|
|
@@ -309,40 +345,40 @@ var CUSTOM_TRACER_IGNORED_INSTRUMENTS = '__customTracerIgnoredInstruments__';
|
|
|
309
345
|
|
|
310
346
|
function addGlobalSpanByTraceId(traceId, globalSpan) {
|
|
311
347
|
var _a;
|
|
312
|
-
|
|
348
|
+
setSdkState(GLOBAL_SPAN_MAP_KEY, __assign(__assign({}, (sdkStore[GLOBAL_SPAN_MAP_KEY] || {})), (_a = {}, _a[traceId] = globalSpan, _a)));
|
|
313
349
|
}
|
|
314
350
|
function getGlobalSpanByTraceId(traceId) {
|
|
315
351
|
var _a;
|
|
316
|
-
return (_a =
|
|
352
|
+
return (_a = sdkStore[GLOBAL_SPAN_MAP_KEY]) === null || _a === void 0 ? void 0 : _a[traceId];
|
|
317
353
|
}
|
|
318
354
|
function clearGlobalSpanMap() {
|
|
319
|
-
var globalSpanMap =
|
|
355
|
+
var globalSpanMap = sdkStore[GLOBAL_SPAN_MAP_KEY];
|
|
320
356
|
Object.keys(globalSpanMap || {}).forEach(function (traceId) {
|
|
321
357
|
var globalSpan = globalSpanMap[traceId];
|
|
322
358
|
globalSpan === null || globalSpan === void 0 ? void 0 : globalSpan.endSpan();
|
|
323
359
|
});
|
|
324
|
-
|
|
360
|
+
deleteSdkState(GLOBAL_SPAN_MAP_KEY);
|
|
325
361
|
}
|
|
326
362
|
function setGlobalSpan(globalSpan) {
|
|
327
|
-
|
|
363
|
+
setSdkState(GLOBAL_SPAN_KEY, globalSpan);
|
|
328
364
|
}
|
|
329
365
|
function getGlobalSpan() {
|
|
330
|
-
return
|
|
366
|
+
return sdkStore[GLOBAL_SPAN_KEY];
|
|
331
367
|
}
|
|
332
368
|
function clearGlobalSpan() {
|
|
333
|
-
|
|
369
|
+
deleteSdkState(GLOBAL_SPAN_KEY);
|
|
334
370
|
}
|
|
335
371
|
function setCustomTracer(customTracer) {
|
|
336
|
-
|
|
372
|
+
setSdkState(CUSTOM_TRACER_KEY, customTracer);
|
|
337
373
|
}
|
|
338
374
|
function getActiveCustomTracer() {
|
|
339
|
-
return
|
|
375
|
+
return sdkStore[CUSTOM_TRACER_KEY];
|
|
340
376
|
}
|
|
341
377
|
function setCustomTracerIgnoredInstruments(ignoredInstruments) {
|
|
342
|
-
|
|
378
|
+
setSdkState(CUSTOM_TRACER_IGNORED_INSTRUMENTS, ignoredInstruments);
|
|
343
379
|
}
|
|
344
380
|
function getCustomTracerIgnoredInstruments() {
|
|
345
|
-
return
|
|
381
|
+
return sdkStore[CUSTOM_TRACER_IGNORED_INSTRUMENTS];
|
|
346
382
|
}
|
|
347
383
|
function shouldAttachSpanToGlobalSpan(instrumentationType) {
|
|
348
384
|
return getGlobalSpan() && !isInstrumentationIgnored(instrumentationType);
|
|
@@ -373,15 +409,15 @@ function shouldAddOtelAttr(span) {
|
|
|
373
409
|
return !!span[IS_OTEL_READY];
|
|
374
410
|
}
|
|
375
411
|
function setAttrProcessor(processor) {
|
|
376
|
-
|
|
412
|
+
setSdkState(ATTR_PROCESSOR_KEY, processor);
|
|
377
413
|
}
|
|
378
414
|
function getAttrProcessor() {
|
|
379
|
-
return
|
|
415
|
+
return sdkStore[ATTR_PROCESSOR_KEY];
|
|
380
416
|
}
|
|
381
417
|
|
|
382
418
|
function setCustomLabelsForSpan(span, labels) {
|
|
383
419
|
if (labels === void 0) { labels = {}; }
|
|
384
|
-
span.setAttribute(CoralogixAttributes.CUSTOM_LABELS, JSON.stringify(getCustomMergedLabels(labels)));
|
|
420
|
+
span.setAttribute(CoralogixAttributes.CUSTOM_LABELS, JSON.stringify(getCustomMergedLabels(labels), getCircularReplacer()));
|
|
385
421
|
}
|
|
386
422
|
function getCustomMergedLabels(labels) {
|
|
387
423
|
var _a;
|
|
@@ -427,6 +463,12 @@ var STACK_FRAME_LIMIT = 50;
|
|
|
427
463
|
var STACK_LINE_LIMIT = 1024;
|
|
428
464
|
var MESSAGE_LIMIT = 1024;
|
|
429
465
|
var MFE_PATH_PATTERN = /https?:\/\/.*\//;
|
|
466
|
+
function reportFailed(e) {
|
|
467
|
+
var _a;
|
|
468
|
+
if ((_a = getSdkConfig()) === null || _a === void 0 ? void 0 : _a.debug) {
|
|
469
|
+
console.warn('Coralogix Browser SDK - Error report failed', e);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
430
472
|
var V8_HEADER_PATTERN = /^Error\b/;
|
|
431
473
|
function sanitizeConsoleErrorStack(stack) {
|
|
432
474
|
var _a;
|
|
@@ -483,23 +525,29 @@ function parseStackFrames(err) {
|
|
|
483
525
|
}
|
|
484
526
|
function buildStacktrace(span, err) {
|
|
485
527
|
return __awaiter(this, void 0, void 0, function () {
|
|
486
|
-
var stackFrames,
|
|
487
|
-
|
|
488
|
-
|
|
528
|
+
var stackFrames, e_1;
|
|
529
|
+
var _a;
|
|
530
|
+
return __generator(this, function (_b) {
|
|
531
|
+
switch (_b.label) {
|
|
489
532
|
case 0:
|
|
533
|
+
_b.trys.push([0, 3, , 4]);
|
|
490
534
|
stackFrames = parseStackFrames(err);
|
|
491
535
|
if (stackFrames.length === 0) {
|
|
492
536
|
return [2];
|
|
493
537
|
}
|
|
494
|
-
|
|
495
|
-
if (!supportMfe) return [3, 2];
|
|
538
|
+
if (!((_a = getSdkConfig()) === null || _a === void 0 ? void 0 : _a.supportMfe)) return [3, 2];
|
|
496
539
|
return [4, handleMFE(stackFrames, span)];
|
|
497
540
|
case 1:
|
|
498
|
-
|
|
499
|
-
|
|
541
|
+
_b.sent();
|
|
542
|
+
_b.label = 2;
|
|
500
543
|
case 2:
|
|
501
544
|
span[ErrorAttributes.STACK] = stackFrames;
|
|
502
|
-
return [
|
|
545
|
+
return [3, 4];
|
|
546
|
+
case 3:
|
|
547
|
+
e_1 = _b.sent();
|
|
548
|
+
reportFailed(e_1);
|
|
549
|
+
return [3, 4];
|
|
550
|
+
case 4: return [2];
|
|
503
551
|
}
|
|
504
552
|
});
|
|
505
553
|
});
|
|
@@ -538,7 +586,7 @@ function addLabelForMFE(span, lastFrame) {
|
|
|
538
586
|
}
|
|
539
587
|
function fetchMfeMetadata(mfePath) {
|
|
540
588
|
return __awaiter(this, void 0, void 0, function () {
|
|
541
|
-
var response, _a,
|
|
589
|
+
var response, _a, e_2;
|
|
542
590
|
var _b;
|
|
543
591
|
return __generator(this, function (_c) {
|
|
544
592
|
switch (_c.label) {
|
|
@@ -556,9 +604,9 @@ function fetchMfeMetadata(mfePath) {
|
|
|
556
604
|
return [4, response.json()];
|
|
557
605
|
case 2: return [2, __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { mfePath: mfePath }])];
|
|
558
606
|
case 3:
|
|
559
|
-
|
|
607
|
+
e_2 = _c.sent();
|
|
560
608
|
if ((_b = getSdkConfig()) === null || _b === void 0 ? void 0 : _b.debug) {
|
|
561
|
-
console.warn('Coralogix Browser SDK - Error fetching metadata',
|
|
609
|
+
console.warn('Coralogix Browser SDK - Error fetching metadata', e_2);
|
|
562
610
|
}
|
|
563
611
|
return [2, undefined];
|
|
564
612
|
case 4: return [2];
|
|
@@ -571,7 +619,7 @@ function extractMetadataFromMfeStacktrace() {
|
|
|
571
619
|
var cachedMetadata, mfePath, pending;
|
|
572
620
|
if (fileName === void 0) { fileName = ''; }
|
|
573
621
|
return __generator(this, function (_a) {
|
|
574
|
-
cachedMetadata =
|
|
622
|
+
cachedMetadata = sdkStore[CACHED_METADATA_KEY];
|
|
575
623
|
mfePath = extractMfePath(fileName);
|
|
576
624
|
if (mfePath) {
|
|
577
625
|
pending = cachedMetadata === null || cachedMetadata === void 0 ? void 0 : cachedMetadata.get(mfePath);
|
|
@@ -621,6 +669,7 @@ function addErrorDefaultAttributes(span) {
|
|
|
621
669
|
var CoralogixErrorInstrumentation = (function (_super) {
|
|
622
670
|
__extends(CoralogixErrorInstrumentation, _super);
|
|
623
671
|
function CoralogixErrorInstrumentation(config) {
|
|
672
|
+
var _a;
|
|
624
673
|
var _this = _super.call(this, ERROR_INSTRUMENTATION_NAME, ERROR_INSTRUMENTATION_VERSION, config) || this;
|
|
625
674
|
_this.parseErrorObject = function (obj) {
|
|
626
675
|
var _a;
|
|
@@ -631,14 +680,15 @@ var CoralogixErrorInstrumentation = (function (_super) {
|
|
|
631
680
|
return obj === null || obj === void 0 ? void 0 : obj.toString();
|
|
632
681
|
}
|
|
633
682
|
};
|
|
634
|
-
if (getSdkConfig().supportMfe) {
|
|
635
|
-
|
|
683
|
+
if ((_a = getSdkConfig()) === null || _a === void 0 ? void 0 : _a.supportMfe) {
|
|
684
|
+
setSdkState(CACHED_METADATA_KEY, new Map());
|
|
636
685
|
}
|
|
637
686
|
return _this;
|
|
638
687
|
}
|
|
639
688
|
CoralogixErrorInstrumentation.prototype.init = function () { };
|
|
640
689
|
CoralogixErrorInstrumentation.prototype.enable = function () {
|
|
641
|
-
var
|
|
690
|
+
var _a;
|
|
691
|
+
var stackTraceLimit = ((_a = getSdkConfig()) !== null && _a !== void 0 ? _a : {}).stackTraceLimit;
|
|
642
692
|
if (stackTraceLimit) {
|
|
643
693
|
Error.stackTraceLimit = stackTraceLimit;
|
|
644
694
|
}
|
|
@@ -662,94 +712,115 @@ var CoralogixErrorInstrumentation = (function (_super) {
|
|
|
662
712
|
return;
|
|
663
713
|
}
|
|
664
714
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
715
|
+
try {
|
|
716
|
+
switch (true) {
|
|
717
|
+
case arg instanceof Error:
|
|
718
|
+
this.reportError(source, arg);
|
|
719
|
+
break;
|
|
720
|
+
case arg instanceof ErrorEvent:
|
|
721
|
+
this.reportErrorEvent(source, arg);
|
|
722
|
+
break;
|
|
723
|
+
case arg instanceof Event:
|
|
724
|
+
this.reportEvent(source, arg);
|
|
725
|
+
break;
|
|
726
|
+
case typeof arg === 'string':
|
|
727
|
+
this.reportString(source, arg, stackContextError);
|
|
728
|
+
break;
|
|
729
|
+
case arg instanceof Array: {
|
|
730
|
+
var firstError = arg.find(function (x) { return x instanceof Error; });
|
|
731
|
+
var message = arg
|
|
732
|
+
.map(function (msg) {
|
|
733
|
+
return typeof msg === 'string' ? msg : _this.parseErrorObject(msg);
|
|
734
|
+
})
|
|
735
|
+
.join(' ');
|
|
736
|
+
var stackSourceError = firstError !== null && firstError !== void 0 ? firstError : stackContextError;
|
|
737
|
+
this.reportString(source, message, stackSourceError);
|
|
738
|
+
break;
|
|
739
|
+
}
|
|
740
|
+
default:
|
|
741
|
+
this.reportString(source, typeof arg === 'string' ? arg : this.getPossibleEventMessage(arg));
|
|
688
742
|
}
|
|
689
|
-
|
|
690
|
-
|
|
743
|
+
}
|
|
744
|
+
catch (e) {
|
|
745
|
+
reportFailed(e);
|
|
691
746
|
}
|
|
692
747
|
};
|
|
693
748
|
CoralogixErrorInstrumentation.prototype.reportError = function (source, err, customData, labels) {
|
|
694
749
|
return __awaiter(this, void 0, void 0, function () {
|
|
695
|
-
var message,
|
|
696
|
-
|
|
697
|
-
|
|
750
|
+
var message, name_1, cleanMessage, data, span, e_3;
|
|
751
|
+
var _b;
|
|
752
|
+
return __generator(this, function (_c) {
|
|
753
|
+
switch (_c.label) {
|
|
698
754
|
case 0:
|
|
699
|
-
|
|
700
|
-
|
|
755
|
+
_c.trys.push([0, 4, , 5]);
|
|
756
|
+
message = err.message, name_1 = err.name;
|
|
701
757
|
cleanMessage = message.split('\n')[0];
|
|
758
|
+
data = customData
|
|
759
|
+
? JSON.stringify(customData, getCircularReplacer())
|
|
760
|
+
: undefined;
|
|
761
|
+
span = this.createSpan('error');
|
|
702
762
|
addErrorDefaultAttributes(span);
|
|
703
763
|
span.setAttribute(CoralogixAttributes.SOURCE, source);
|
|
704
|
-
span.setAttribute(ErrorAttributes.TYPE,
|
|
764
|
+
span.setAttribute(ErrorAttributes.TYPE, name_1);
|
|
705
765
|
span.setAttribute(ErrorAttributes.MESSAGE, cleanMessage);
|
|
706
|
-
if (
|
|
707
|
-
span[ErrorAttributes.DATA] =
|
|
766
|
+
if (data) {
|
|
767
|
+
span[ErrorAttributes.DATA] = data;
|
|
708
768
|
}
|
|
709
769
|
if (labels) {
|
|
710
770
|
setCustomLabelsForSpan(span, labels);
|
|
711
771
|
}
|
|
712
|
-
|
|
713
|
-
if (!supportMfe) return [3, 2];
|
|
772
|
+
if (!((_b = getSdkConfig()) === null || _b === void 0 ? void 0 : _b.supportMfe)) return [3, 2];
|
|
714
773
|
return [4, buildStacktrace(span, err)];
|
|
715
774
|
case 1:
|
|
716
|
-
|
|
775
|
+
_c.sent();
|
|
717
776
|
return [3, 3];
|
|
718
777
|
case 2:
|
|
719
778
|
void buildStacktrace(span, err);
|
|
720
|
-
|
|
779
|
+
_c.label = 3;
|
|
721
780
|
case 3:
|
|
722
781
|
span.end();
|
|
723
|
-
return [
|
|
782
|
+
return [3, 5];
|
|
783
|
+
case 4:
|
|
784
|
+
e_3 = _c.sent();
|
|
785
|
+
reportFailed(e_3);
|
|
786
|
+
return [3, 5];
|
|
787
|
+
case 5: return [2];
|
|
724
788
|
}
|
|
725
789
|
});
|
|
726
790
|
});
|
|
727
791
|
};
|
|
728
792
|
CoralogixErrorInstrumentation.prototype.reportString = function (source, message, stackError) {
|
|
729
793
|
return __awaiter(this, void 0, void 0, function () {
|
|
730
|
-
var span,
|
|
731
|
-
|
|
732
|
-
|
|
794
|
+
var cleanMessage, span, e_4;
|
|
795
|
+
var _b;
|
|
796
|
+
return __generator(this, function (_c) {
|
|
797
|
+
switch (_c.label) {
|
|
733
798
|
case 0:
|
|
799
|
+
_c.trys.push([0, 5, , 6]);
|
|
800
|
+
cleanMessage = message === null || message === void 0 ? void 0 : message.substring(0, MESSAGE_LIMIT);
|
|
734
801
|
span = this.createSpan(source);
|
|
735
802
|
addErrorDefaultAttributes(span);
|
|
736
803
|
span.setAttribute(CoralogixAttributes.SOURCE, source);
|
|
737
|
-
span.setAttribute(ErrorAttributes.MESSAGE,
|
|
738
|
-
supportMfe = getSdkConfig().supportMfe;
|
|
804
|
+
span.setAttribute(ErrorAttributes.MESSAGE, cleanMessage);
|
|
739
805
|
if (!stackError) return [3, 4];
|
|
740
|
-
if (!supportMfe) return [3, 2];
|
|
806
|
+
if (!((_b = getSdkConfig()) === null || _b === void 0 ? void 0 : _b.supportMfe)) return [3, 2];
|
|
741
807
|
return [4, buildStacktrace(span, stackError)];
|
|
742
808
|
case 1:
|
|
743
|
-
|
|
809
|
+
_c.sent();
|
|
744
810
|
return [3, 3];
|
|
745
811
|
case 2:
|
|
746
812
|
void buildStacktrace(span, stackError);
|
|
747
|
-
|
|
813
|
+
_c.label = 3;
|
|
748
814
|
case 3:
|
|
749
|
-
|
|
815
|
+
_c.label = 4;
|
|
750
816
|
case 4:
|
|
751
817
|
span.end();
|
|
752
|
-
return [
|
|
818
|
+
return [3, 6];
|
|
819
|
+
case 5:
|
|
820
|
+
e_4 = _c.sent();
|
|
821
|
+
reportFailed(e_4);
|
|
822
|
+
return [3, 6];
|
|
823
|
+
case 6: return [2];
|
|
753
824
|
}
|
|
754
825
|
});
|
|
755
826
|
});
|
|
@@ -2264,6 +2335,29 @@ var ANCESTOR_SEARCH_DEPTH = 5;
|
|
|
2264
2335
|
var POINTER_CURSOR = 'pointer';
|
|
2265
2336
|
var TEXT_CURSOR = 'text';
|
|
2266
2337
|
var BODY_NODE_NAME = 'BODY';
|
|
2338
|
+
var INPUT_BUTTON_TYPES = ['button', 'submit', 'reset'];
|
|
2339
|
+
var LINE_BREAK_NODE_NAMES = ['BR', 'P'];
|
|
2340
|
+
var BLOCK_DISPLAY_VALUES = [
|
|
2341
|
+
'block',
|
|
2342
|
+
'flex',
|
|
2343
|
+
'grid',
|
|
2344
|
+
'list-item',
|
|
2345
|
+
'table',
|
|
2346
|
+
'table-caption',
|
|
2347
|
+
];
|
|
2348
|
+
var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
|
|
2349
|
+
var SVG_ROOT_LOCAL_NAME = 'svg';
|
|
2350
|
+
var NON_RENDERED_SVG_LOCAL_NAMES = [
|
|
2351
|
+
'title',
|
|
2352
|
+
'desc',
|
|
2353
|
+
'metadata',
|
|
2354
|
+
'defs',
|
|
2355
|
+
'symbol',
|
|
2356
|
+
'clipPath',
|
|
2357
|
+
'mask',
|
|
2358
|
+
'pattern',
|
|
2359
|
+
'marker',
|
|
2360
|
+
];
|
|
2267
2361
|
var CLICKABLE_SELECTOR = 'a, button, input, select, textarea, label, summary, option, li, ' +
|
|
2268
2362
|
'[role="button"], [role="link"], [role="tab"], ' +
|
|
2269
2363
|
'[role="menuitem"], [role="menuitemcheckbox"], [role="menuitemradio"], ' +
|
|
@@ -2290,39 +2384,125 @@ function extractActionName(el) {
|
|
|
2290
2384
|
function extractAriaLabel(el) {
|
|
2291
2385
|
return getAttributeFromAncestors(el, ARIA_LABEL_ATTRIBUTE);
|
|
2292
2386
|
}
|
|
2387
|
+
function getOwnAriaLabel(element) {
|
|
2388
|
+
return getOwnAttribute(element, ARIA_LABEL_ATTRIBUTE);
|
|
2389
|
+
}
|
|
2293
2390
|
function extractTestId(el) {
|
|
2294
2391
|
return (el === null || el === void 0 ? void 0 : el.getAttribute(DATA_TEST_ATTRIBUTE)) || '';
|
|
2295
2392
|
}
|
|
2296
2393
|
function extractResolvedName(_a) {
|
|
2297
|
-
var isDeadClick = _a.isDeadClick, element = _a.element, config = _a.config, actionName = _a.actionName
|
|
2394
|
+
var isDeadClick = _a.isDeadClick, element = _a.element, config = _a.config, actionName = _a.actionName;
|
|
2298
2395
|
if (!element)
|
|
2299
2396
|
return '';
|
|
2300
2397
|
if (isDeadClick)
|
|
2301
2398
|
return '';
|
|
2302
2399
|
var resolveName = actionName ||
|
|
2303
2400
|
maskedTextIfMasked(element, config) ||
|
|
2304
|
-
resolveFallbackName(element,
|
|
2401
|
+
resolveFallbackName(element, config, ANCESTOR_SEARCH_DEPTH);
|
|
2305
2402
|
return normalizeInteractionText(resolveName);
|
|
2306
2403
|
}
|
|
2307
2404
|
function maskedTextIfMasked(element, config) {
|
|
2308
2405
|
return isElementMasked(element, config) ? MASKED_TEXT : '';
|
|
2309
2406
|
}
|
|
2310
|
-
function resolveFallbackName(element,
|
|
2407
|
+
function resolveFallbackName(element, config, depth) {
|
|
2311
2408
|
var _a;
|
|
2312
2409
|
if (!element || element.nodeName === BODY_NODE_NAME)
|
|
2313
2410
|
return '';
|
|
2411
|
+
var isSvgRoot = isSvgRootElement(element);
|
|
2412
|
+
var readText = !isSvgRoot && !isControlContainer(element);
|
|
2314
2413
|
var resolvedName = getLabelText(element) ||
|
|
2315
|
-
|
|
2414
|
+
getOwnAriaLabel(element) ||
|
|
2415
|
+
getInputButtonValue(element) ||
|
|
2416
|
+
getOwnAttribute(element, ALT_ATTRIBUTE) ||
|
|
2316
2417
|
getPlaceholder(element) ||
|
|
2317
|
-
|
|
2418
|
+
getSelectFirstOptionText(element) ||
|
|
2419
|
+
(readText ? getUnmaskedInnerText(element, config) : '') ||
|
|
2420
|
+
getOwnAttribute(element, TITLE_ATTRIBUTE);
|
|
2318
2421
|
if (resolvedName)
|
|
2319
2422
|
return resolvedName;
|
|
2320
2423
|
if ((_a = element.matches) === null || _a === void 0 ? void 0 : _a.call(element, CLICKABLE_SELECTOR))
|
|
2321
2424
|
return '';
|
|
2425
|
+
if (isSvgRoot && !hasClickableAncestor(element))
|
|
2426
|
+
return '';
|
|
2322
2427
|
var parent = element.parentElement;
|
|
2323
2428
|
if (depth <= 0 || !parent || parent.nodeName === BODY_NODE_NAME)
|
|
2324
2429
|
return '';
|
|
2325
|
-
return resolveFallbackName(parent,
|
|
2430
|
+
return resolveFallbackName(parent, config, depth - 1);
|
|
2431
|
+
}
|
|
2432
|
+
function isControlContainer(element) {
|
|
2433
|
+
var _a, _b;
|
|
2434
|
+
if ((_a = element.matches) === null || _a === void 0 ? void 0 : _a.call(element, CLICKABLE_SELECTOR))
|
|
2435
|
+
return false;
|
|
2436
|
+
return !!((_b = element.querySelector) === null || _b === void 0 ? void 0 : _b.call(element, CLICKABLE_SELECTOR));
|
|
2437
|
+
}
|
|
2438
|
+
function getOwnAttribute(element, attribute) {
|
|
2439
|
+
return element.getAttribute(attribute) || '';
|
|
2440
|
+
}
|
|
2441
|
+
function isSvgElement(element) {
|
|
2442
|
+
return element.namespaceURI === SVG_NAMESPACE;
|
|
2443
|
+
}
|
|
2444
|
+
function isSvgRootElement(element) {
|
|
2445
|
+
return isSvgElement(element) && element.localName === SVG_ROOT_LOCAL_NAME;
|
|
2446
|
+
}
|
|
2447
|
+
function hasClickableAncestor(element) {
|
|
2448
|
+
var _a, _b;
|
|
2449
|
+
return !!((_b = (_a = element.parentElement) === null || _a === void 0 ? void 0 : _a.closest) === null || _b === void 0 ? void 0 : _b.call(_a, CLICKABLE_SELECTOR));
|
|
2450
|
+
}
|
|
2451
|
+
function getInputButtonValue(element) {
|
|
2452
|
+
if (!(element instanceof HTMLInputElement))
|
|
2453
|
+
return '';
|
|
2454
|
+
return INPUT_BUTTON_TYPES.includes(element.type) ? element.value || '' : '';
|
|
2455
|
+
}
|
|
2456
|
+
function getSelectFirstOptionText(element) {
|
|
2457
|
+
var _a;
|
|
2458
|
+
if (!(element instanceof HTMLSelectElement))
|
|
2459
|
+
return '';
|
|
2460
|
+
return ((_a = element.options[0]) === null || _a === void 0 ? void 0 : _a.text) || '';
|
|
2461
|
+
}
|
|
2462
|
+
function getUnmaskedInnerText(element, config) {
|
|
2463
|
+
var maskClass = config.maskClass;
|
|
2464
|
+
if (isSvgElement(element)) {
|
|
2465
|
+
return normalizeInteractionText(collectUnmaskedText(element, maskClass));
|
|
2466
|
+
}
|
|
2467
|
+
if (!(element instanceof HTMLElement))
|
|
2468
|
+
return '';
|
|
2469
|
+
if (!hasMaskedDescendant(element, maskClass))
|
|
2470
|
+
return getInnerText(element);
|
|
2471
|
+
return normalizeInteractionText(collectUnmaskedText(element, maskClass));
|
|
2472
|
+
}
|
|
2473
|
+
function hasMaskedDescendant(element, maskClass) {
|
|
2474
|
+
var descendants = element.getElementsByTagName('*');
|
|
2475
|
+
for (var i = 0; i < descendants.length; i++) {
|
|
2476
|
+
if (isMaskedByClass(getClassName(descendants[i]), maskClass))
|
|
2477
|
+
return true;
|
|
2478
|
+
}
|
|
2479
|
+
return false;
|
|
2480
|
+
}
|
|
2481
|
+
function collectUnmaskedText(node, maskClass) {
|
|
2482
|
+
if (node.nodeType === Node.TEXT_NODE)
|
|
2483
|
+
return node.textContent || '';
|
|
2484
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
2485
|
+
return '';
|
|
2486
|
+
var element = node;
|
|
2487
|
+
if (isMaskedByClass(getClassName(element), maskClass))
|
|
2488
|
+
return '';
|
|
2489
|
+
if (isSvgElement(element) &&
|
|
2490
|
+
NON_RENDERED_SVG_LOCAL_NAMES.includes(element.localName)) {
|
|
2491
|
+
return '';
|
|
2492
|
+
}
|
|
2493
|
+
var style = CxGlobal.getComputedStyle(element);
|
|
2494
|
+
if (style.display === 'none' || style.visibility === 'hidden')
|
|
2495
|
+
return '';
|
|
2496
|
+
var text = isBlockBoundary(element, style.display) ? ' ' : '';
|
|
2497
|
+
var children = element.childNodes;
|
|
2498
|
+
for (var i = 0; i < children.length; i++) {
|
|
2499
|
+
text += collectUnmaskedText(children[i], maskClass);
|
|
2500
|
+
}
|
|
2501
|
+
return text;
|
|
2502
|
+
}
|
|
2503
|
+
function isBlockBoundary(element, display) {
|
|
2504
|
+
return (LINE_BREAK_NODE_NAMES.includes(element.nodeName) ||
|
|
2505
|
+
BLOCK_DISPLAY_VALUES.includes(display));
|
|
2326
2506
|
}
|
|
2327
2507
|
function getLabelText(element) {
|
|
2328
2508
|
var _a;
|
|
@@ -2349,10 +2529,15 @@ function getInnerText(element) {
|
|
|
2349
2529
|
: '';
|
|
2350
2530
|
}
|
|
2351
2531
|
function normalizeInteractionText(text) {
|
|
2352
|
-
|
|
2353
|
-
.slice(0, MAX_INTERACTION_ELEMENT_SIZE)
|
|
2532
|
+
var normalized = text
|
|
2533
|
+
.slice(0, MAX_INTERACTION_ELEMENT_SIZE + 1)
|
|
2354
2534
|
.replace(/\s+/g, ' ')
|
|
2355
2535
|
.trim();
|
|
2536
|
+
if (normalized.length <= MAX_INTERACTION_ELEMENT_SIZE)
|
|
2537
|
+
return normalized;
|
|
2538
|
+
var maxTextBeforeMarker = MAX_INTERACTION_ELEMENT_SIZE - INTERACTION_TEXT_TRUNCATION_MARKER.length;
|
|
2539
|
+
return (normalized.slice(0, maxTextBeforeMarker).trim() +
|
|
2540
|
+
INTERACTION_TEXT_TRUNCATION_MARKER);
|
|
2356
2541
|
}
|
|
2357
2542
|
function extractMaskedOrTextContent(clickableElement, config) {
|
|
2358
2543
|
if (!clickableElement)
|
|
@@ -2414,6 +2599,7 @@ function wasPasswordInput(element) {
|
|
|
2414
2599
|
}
|
|
2415
2600
|
function isMaskedByClass(className, maskClass) {
|
|
2416
2601
|
if (maskClass instanceof RegExp) {
|
|
2602
|
+
maskClass.lastIndex = 0;
|
|
2417
2603
|
return maskClass.test(className);
|
|
2418
2604
|
}
|
|
2419
2605
|
return className.includes(maskClass);
|
|
@@ -2714,7 +2900,6 @@ var CoralogixUserInteractionInstrumentation = (function (_super) {
|
|
|
2714
2900
|
element: eventTarget,
|
|
2715
2901
|
config: config,
|
|
2716
2902
|
actionName: cxActionName,
|
|
2717
|
-
ariaLabel: ariaLabel,
|
|
2718
2903
|
});
|
|
2719
2904
|
span.setAttribute(CoralogixAttributes.IS_DEAD_CLICK, isDeadClick);
|
|
2720
2905
|
var _b = eventTarget.getBoundingClientRect(), width = _b.width, height = _b.height;
|
|
@@ -2911,6 +3096,162 @@ var CoralogixMemoryUsageInstrumentation = (function (_super) {
|
|
|
2911
3096
|
|
|
2912
3097
|
var SCREENSHOT_INSTRUMENTATION_NAME = 'screenshot';
|
|
2913
3098
|
var SCREENSHOT_INSTRUMENTATION_VERSION = '1.0.0';
|
|
3099
|
+
var MAX_SCREENSHOT_ACTIONS = 100;
|
|
3100
|
+
var FILL_ATTEMPTS_PER_SLOT = 2;
|
|
3101
|
+
var LABELLED_SELECTOR = '[aria-label], [data-testid], [data-test], [data-test-id], [role]';
|
|
3102
|
+
var NON_INTERACTIVE_TAGS = new Set([
|
|
3103
|
+
'html', 'body', 'main', 'header', 'footer', 'nav', 'aside', 'section', 'article', 'form',
|
|
3104
|
+
'table', 'thead', 'tbody', 'tr', 'ul', 'ol', 'dl', 'p', 'hr', 'br',
|
|
3105
|
+
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img', 'picture', 'svg', 'video', 'audio', 'iframe',
|
|
3106
|
+
]);
|
|
3107
|
+
var NON_INTERACTIVE_ROLES = new Set([
|
|
3108
|
+
'dialog', 'alertdialog', 'navigation', 'region', 'main', 'banner', 'contentinfo',
|
|
3109
|
+
'complementary', 'search', 'form', 'application', 'document', 'article', 'group', 'toolbar',
|
|
3110
|
+
'tabpanel', 'tablist', 'list', 'listitem', 'table', 'row', 'rowgroup', 'cell', 'gridcell',
|
|
3111
|
+
'columnheader', 'rowheader', 'heading', 'img', 'figure', 'presentation', 'none', 'status',
|
|
3112
|
+
'alert', 'log', 'marquee', 'timer', 'tooltip', 'progressbar', 'separator', 'note', 'definition',
|
|
3113
|
+
'term', 'directory', 'feed', 'math', 'meter', 'scrollbar',
|
|
3114
|
+
]);
|
|
3115
|
+
var MAX_CANDIDATE_DESCENDANTS = 50;
|
|
3116
|
+
function collectDomActionNames(limit) {
|
|
3117
|
+
if (limit === void 0) { limit = MAX_SCREENSHOT_ACTIONS; }
|
|
3118
|
+
try {
|
|
3119
|
+
var doc = CxGlobal.document;
|
|
3120
|
+
if (!(doc === null || doc === void 0 ? void 0 : doc.querySelectorAll)) {
|
|
3121
|
+
return [];
|
|
3122
|
+
}
|
|
3123
|
+
var actions = collectExplicitActionNames(doc, limit);
|
|
3124
|
+
if (actions.length >= limit) {
|
|
3125
|
+
return actions;
|
|
3126
|
+
}
|
|
3127
|
+
var config = getSdkConfig();
|
|
3128
|
+
if (!config) {
|
|
3129
|
+
return actions;
|
|
3130
|
+
}
|
|
3131
|
+
fillFromCandidates(doc, LABELLED_SELECTOR, isLabelledCandidate, actions, limit, config);
|
|
3132
|
+
if (actions.length < limit) {
|
|
3133
|
+
fillFromCandidates(doc, CLICKABLE_SELECTOR, isSemanticCandidate, actions, limit, config);
|
|
3134
|
+
}
|
|
3135
|
+
return actions;
|
|
3136
|
+
}
|
|
3137
|
+
catch (_a) {
|
|
3138
|
+
return [];
|
|
3139
|
+
}
|
|
3140
|
+
}
|
|
3141
|
+
function collectExplicitActionNames(doc, limit) {
|
|
3142
|
+
var elements = doc.querySelectorAll("[".concat(CX_ACTION_NAME_ATTRIBUTE, "]"));
|
|
3143
|
+
var seen = new Set();
|
|
3144
|
+
var names = [];
|
|
3145
|
+
for (var i = 0; i < elements.length; i++) {
|
|
3146
|
+
var value = elements[i].getAttribute(CX_ACTION_NAME_ATTRIBUTE);
|
|
3147
|
+
if (value && !seen.has(value)) {
|
|
3148
|
+
seen.add(value);
|
|
3149
|
+
names.push(value);
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
return names.length > limit ? takeRun(names, limit) : names;
|
|
3153
|
+
}
|
|
3154
|
+
function fillFromCandidates(doc, selector, isCandidate, actions, limit, config) {
|
|
3155
|
+
var candidates = usableCandidates(doc, selector, isCandidate);
|
|
3156
|
+
var total = candidates.length;
|
|
3157
|
+
if (total === 0) {
|
|
3158
|
+
return;
|
|
3159
|
+
}
|
|
3160
|
+
var attempts = Math.min(total, (limit - actions.length) * FILL_ATTEMPTS_PER_SLOT);
|
|
3161
|
+
var start = randomIndex(total);
|
|
3162
|
+
var seen = new Set(actions);
|
|
3163
|
+
for (var step = 0; step < attempts && actions.length < limit; step++) {
|
|
3164
|
+
var name_1 = resolveClickableName(candidates[(start + step) % total], config);
|
|
3165
|
+
if (name_1 && !seen.has(name_1)) {
|
|
3166
|
+
seen.add(name_1);
|
|
3167
|
+
actions.push(name_1);
|
|
3168
|
+
}
|
|
3169
|
+
}
|
|
3170
|
+
}
|
|
3171
|
+
function usableCandidates(doc, selector, isCandidate) {
|
|
3172
|
+
var matches = doc.querySelectorAll(selector);
|
|
3173
|
+
var usable = [];
|
|
3174
|
+
for (var i = 0; i < matches.length; i++) {
|
|
3175
|
+
var element = matches[i];
|
|
3176
|
+
if (!isUnderExplicitActionName(element) &&
|
|
3177
|
+
(!isCandidate || isCandidate(element)) &&
|
|
3178
|
+
isRendered(element)) {
|
|
3179
|
+
usable.push(element);
|
|
3180
|
+
}
|
|
3181
|
+
}
|
|
3182
|
+
return usable;
|
|
3183
|
+
}
|
|
3184
|
+
function isContentRegion(element) {
|
|
3185
|
+
return element.getElementsByTagName('*').length > MAX_CANDIDATE_DESCENDANTS;
|
|
3186
|
+
}
|
|
3187
|
+
function isUnderExplicitActionName(element) {
|
|
3188
|
+
return typeof element.closest === 'function'
|
|
3189
|
+
? !!element.closest("[".concat(CX_ACTION_NAME_ATTRIBUTE, "]"))
|
|
3190
|
+
: !!extractActionName(element);
|
|
3191
|
+
}
|
|
3192
|
+
function isSemanticCandidate(element) {
|
|
3193
|
+
switch (element.localName) {
|
|
3194
|
+
case 'label':
|
|
3195
|
+
return hasAssociatedControl(element);
|
|
3196
|
+
case 'li':
|
|
3197
|
+
case 'option': {
|
|
3198
|
+
var role = element.getAttribute('role');
|
|
3199
|
+
return !!role && !NON_INTERACTIVE_ROLES.has(role);
|
|
3200
|
+
}
|
|
3201
|
+
case 'input':
|
|
3202
|
+
return element.type !== 'hidden';
|
|
3203
|
+
default:
|
|
3204
|
+
return true;
|
|
3205
|
+
}
|
|
3206
|
+
}
|
|
3207
|
+
function hasAssociatedControl(label) {
|
|
3208
|
+
if (label.control) {
|
|
3209
|
+
return true;
|
|
3210
|
+
}
|
|
3211
|
+
if (label.htmlFor) {
|
|
3212
|
+
return !!label.ownerDocument.getElementById(label.htmlFor);
|
|
3213
|
+
}
|
|
3214
|
+
return !!label.querySelector('input, select, textarea, button, meter, output, progress');
|
|
3215
|
+
}
|
|
3216
|
+
function isLabelledCandidate(element) {
|
|
3217
|
+
var _a;
|
|
3218
|
+
if (NON_INTERACTIVE_TAGS.has(element.localName)) {
|
|
3219
|
+
return false;
|
|
3220
|
+
}
|
|
3221
|
+
var role = element.getAttribute('role');
|
|
3222
|
+
if (role && NON_INTERACTIVE_ROLES.has(role)) {
|
|
3223
|
+
return false;
|
|
3224
|
+
}
|
|
3225
|
+
return !((_a = element.matches) === null || _a === void 0 ? void 0 : _a.call(element, CLICKABLE_SELECTOR));
|
|
3226
|
+
}
|
|
3227
|
+
function resolveClickableName(element, config) {
|
|
3228
|
+
if (isContentRegion(element)) {
|
|
3229
|
+
return '';
|
|
3230
|
+
}
|
|
3231
|
+
var name = extractResolvedName({
|
|
3232
|
+
isDeadClick: false,
|
|
3233
|
+
element: element,
|
|
3234
|
+
config: config,
|
|
3235
|
+
actionName: '',
|
|
3236
|
+
});
|
|
3237
|
+
return name === MASKED_TEXT ? '' : name;
|
|
3238
|
+
}
|
|
3239
|
+
function isRendered(element) {
|
|
3240
|
+
return typeof element.checkVisibility === 'function'
|
|
3241
|
+
? element.checkVisibility()
|
|
3242
|
+
: true;
|
|
3243
|
+
}
|
|
3244
|
+
function takeRun(items, count) {
|
|
3245
|
+
var start = randomIndex(items.length);
|
|
3246
|
+
var run = [];
|
|
3247
|
+
for (var step = 0; step < count; step++) {
|
|
3248
|
+
run.push(items[(start + step) % items.length]);
|
|
3249
|
+
}
|
|
3250
|
+
return run;
|
|
3251
|
+
}
|
|
3252
|
+
function randomIndex(length) {
|
|
3253
|
+
return Math.floor(Math.random() * length);
|
|
3254
|
+
}
|
|
2914
3255
|
|
|
2915
3256
|
var CoralogixScreenshotInstrumentation = (function (_super) {
|
|
2916
3257
|
__extends(CoralogixScreenshotInstrumentation, _super);
|
|
@@ -2930,6 +3271,7 @@ var CoralogixScreenshotInstrumentation = (function (_super) {
|
|
|
2930
3271
|
span[CoralogixAttributes.SCREENSHOT_CONTEXT] = {
|
|
2931
3272
|
id: id,
|
|
2932
3273
|
description: description,
|
|
3274
|
+
actions: collectDomActionNames(),
|
|
2933
3275
|
};
|
|
2934
3276
|
span.end();
|
|
2935
3277
|
};
|
|
@@ -3159,7 +3501,8 @@ var CORALOGIX_LOGS_URL_SUFFIX = '/browser/v1beta/logs';
|
|
|
3159
3501
|
var CORALOGIX_RECORDING_URL_SUFFIX = '/sessionrecording';
|
|
3160
3502
|
var MFE_METADATA_FILE = 'cx-metadata.json';
|
|
3161
3503
|
var MFE_METADATA_URL_PATTERN = /cx-metadata\.json$/;
|
|
3162
|
-
var MAX_INTERACTION_ELEMENT_SIZE =
|
|
3504
|
+
var MAX_INTERACTION_ELEMENT_SIZE = 100;
|
|
3505
|
+
var INTERACTION_TEXT_TRUNCATION_MARKER = ' [...]';
|
|
3163
3506
|
var MAX_CHARACTERS = 1024;
|
|
3164
3507
|
var REQUIRED_CONFIG_KEYS = [
|
|
3165
3508
|
'application',
|
|
@@ -3175,6 +3518,8 @@ var MASKED_TEXT = '***';
|
|
|
3175
3518
|
var MASK_CLASS_DEFAULT = 'cx-mask';
|
|
3176
3519
|
var CX_PREFIX = 'cx';
|
|
3177
3520
|
var ARIA_LABEL_ATTRIBUTE = 'aria-label';
|
|
3521
|
+
var TITLE_ATTRIBUTE = 'title';
|
|
3522
|
+
var ALT_ATTRIBUTE = 'alt';
|
|
3178
3523
|
var PASSWORD_INPUT_TYPE = 'password';
|
|
3179
3524
|
var MASK_INPUT_TYPES_DEFAULT = [PASSWORD_INPUT_TYPE];
|
|
3180
3525
|
var FINGER_PRINT_KEY = 'cx-fingerprint';
|
|
@@ -3189,7 +3534,7 @@ var idPatterns = [
|
|
|
3189
3534
|
},
|
|
3190
3535
|
];
|
|
3191
3536
|
var PATH_ID_PLACEHOLDER = '/{id}';
|
|
3192
|
-
var NUMERIC_PATH_SEGMENT_REGEX =
|
|
3537
|
+
var NUMERIC_PATH_SEGMENT_REGEX = /\/\d+(?=$|[/?#])/g;
|
|
3193
3538
|
function replaceNumericPathSegments(url) {
|
|
3194
3539
|
var replacePath = function (s) {
|
|
3195
3540
|
return s.replace(NUMERIC_PATH_SEGMENT_REGEX, PATH_ID_PLACEHOLDER);
|
|
@@ -3363,14 +3708,14 @@ var PAGE_URL_PARTS_KEY = 'rum_page_url_parts';
|
|
|
3363
3708
|
var REFERRER_URL_PARTS_KEY = 'rum_referrer_url_parts';
|
|
3364
3709
|
|
|
3365
3710
|
function saveInternalRumData(key, value) {
|
|
3366
|
-
if (!
|
|
3367
|
-
|
|
3711
|
+
if (!sdkStore[RUM_INTERNAL_DATA_KEY]) {
|
|
3712
|
+
setSdkState(RUM_INTERNAL_DATA_KEY, {});
|
|
3368
3713
|
}
|
|
3369
|
-
|
|
3714
|
+
sdkStore[RUM_INTERNAL_DATA_KEY][key] = value;
|
|
3370
3715
|
}
|
|
3371
3716
|
function getInternalRumData(key) {
|
|
3372
3717
|
var _a;
|
|
3373
|
-
return (_a =
|
|
3718
|
+
return (_a = sdkStore[RUM_INTERNAL_DATA_KEY]) === null || _a === void 0 ? void 0 : _a[key];
|
|
3374
3719
|
}
|
|
3375
3720
|
|
|
3376
3721
|
var _a$2;
|
|
@@ -3613,14 +3958,14 @@ function applyUrlBluePrinters(_a) {
|
|
|
3613
3958
|
return blueprintedUrl;
|
|
3614
3959
|
}
|
|
3615
3960
|
function resolvePageContext(url) {
|
|
3616
|
-
var _a;
|
|
3961
|
+
var _a, _b, _c, _d;
|
|
3617
3962
|
var page_url_blueprint = applyUrlBluePrinters({
|
|
3618
3963
|
url: url,
|
|
3619
|
-
blueprinters: (_a = getSdkConfig()
|
|
3964
|
+
blueprinters: (_b = (_a = getSdkConfig()) === null || _a === void 0 ? void 0 : _a.urlBlueprinters) === null || _b === void 0 ? void 0 : _b.pageUrlBlueprinters,
|
|
3620
3965
|
});
|
|
3621
3966
|
var page_fragments = getUrlFragments(page_url_blueprint);
|
|
3622
3967
|
var urlParts = getCachedUrlParts(PAGE_URL_PARTS_KEY, url);
|
|
3623
|
-
var referrerParts = getCachedUrlParts(REFERRER_URL_PARTS_KEY, document === null ||
|
|
3968
|
+
var referrerParts = getCachedUrlParts(REFERRER_URL_PARTS_KEY, (_c = CxGlobal.document) === null || _c === void 0 ? void 0 : _c.referrer);
|
|
3624
3969
|
return {
|
|
3625
3970
|
page_url: url.slice(0, MAX_CHARACTERS),
|
|
3626
3971
|
page_url_blueprint: page_url_blueprint,
|
|
@@ -3629,7 +3974,7 @@ function resolvePageContext(url) {
|
|
|
3629
3974
|
subdomain: urlParts === null || urlParts === void 0 ? void 0 : urlParts.subdomain,
|
|
3630
3975
|
domain: urlParts === null || urlParts === void 0 ? void 0 : urlParts.domain,
|
|
3631
3976
|
host: urlParts === null || urlParts === void 0 ? void 0 : urlParts.host,
|
|
3632
|
-
referrer: document.referrer,
|
|
3977
|
+
referrer: (_d = CxGlobal.document) === null || _d === void 0 ? void 0 : _d.referrer,
|
|
3633
3978
|
referrer_path: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.path,
|
|
3634
3979
|
referrer_schema: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.schema,
|
|
3635
3980
|
referrer_subdomain: referrerParts === null || referrerParts === void 0 ? void 0 : referrerParts.subdomain,
|
|
@@ -4161,9 +4506,9 @@ function resolveSessionConfig(config) {
|
|
|
4161
4506
|
return __assign(__assign({}, config), { sessionSampleRate: (_a = config.sessionSampleRate) !== null && _a !== void 0 ? _a : 100, onlyWithErrorConfig: resolveSessionWithErrorsConfig(config.onlyWithErrorConfig) });
|
|
4162
4507
|
}
|
|
4163
4508
|
function resolveSessionRecordingConfig(config) {
|
|
4164
|
-
var _a;
|
|
4509
|
+
var _a, _b;
|
|
4165
4510
|
if (config) {
|
|
4166
|
-
return __assign(__assign({}, config), { sessionRecordingSampleRate: (_a = config.sessionRecordingSampleRate) !== null && _a !== void 0 ? _a : 100 });
|
|
4511
|
+
return __assign(__assign({}, config), { sessionRecordingSampleRate: (_a = config.sessionRecordingSampleRate) !== null && _a !== void 0 ? _a : 100, captureScreenshotOnDomChange: (_b = config.captureScreenshotOnDomChange) !== null && _b !== void 0 ? _b : true });
|
|
4167
4512
|
}
|
|
4168
4513
|
return;
|
|
4169
4514
|
}
|
|
@@ -4449,7 +4794,8 @@ var CoralogixExporter = (function () {
|
|
|
4449
4794
|
return cxSpans;
|
|
4450
4795
|
}, []);
|
|
4451
4796
|
this.invokeLogRequest(instrumentationLogs);
|
|
4452
|
-
var cachedLogs =
|
|
4797
|
+
var cachedLogs = __spreadArray(__spreadArray([], __read$1((sdkStore[CACHED_LOGS_KEY] || [])), false), __read$1(currentSpans), false);
|
|
4798
|
+
setSdkState(CACHED_LOGS_KEY, cachedLogs);
|
|
4453
4799
|
var logsCounter = cachedLogs.length;
|
|
4454
4800
|
if (logsCounter > maxRumEventsForSessionWithError && !sessionHasError) {
|
|
4455
4801
|
this.clearCachedDataForSessionWithError();
|
|
@@ -4481,7 +4827,7 @@ var CoralogixExporter = (function () {
|
|
|
4481
4827
|
return strippedLogs;
|
|
4482
4828
|
};
|
|
4483
4829
|
CoralogixExporter.prototype.clearCachedDataForSessionWithError = function () {
|
|
4484
|
-
|
|
4830
|
+
setSdkState(CACHED_LOGS_KEY, []);
|
|
4485
4831
|
this.batchTimeDelay = BATCH_TIME_DELAY;
|
|
4486
4832
|
};
|
|
4487
4833
|
CoralogixExporter.prototype.shutdown = function () {
|
|
@@ -4575,7 +4921,7 @@ var SnapshotManager = (function () {
|
|
|
4575
4921
|
_this._isSnapshotSentDueToRecording = false;
|
|
4576
4922
|
clearStoredSnapshotState();
|
|
4577
4923
|
};
|
|
4578
|
-
|
|
4924
|
+
setSdkState(SNAPSHOT_MANAGER_KEY, this);
|
|
4579
4925
|
if (!this.restoreSnapshot()) {
|
|
4580
4926
|
this.resetSnapshot();
|
|
4581
4927
|
}
|
|
@@ -4905,7 +5251,7 @@ var SessionManager = (function (_super) {
|
|
|
4905
5251
|
return __generator(this, function (_a) {
|
|
4906
5252
|
switch (_a.label) {
|
|
4907
5253
|
case 0:
|
|
4908
|
-
|
|
5254
|
+
setSdkState(SESSION_MANAGER_KEY, this);
|
|
4909
5255
|
this.sessionRecorderConfig = recordConfig;
|
|
4910
5256
|
if (!(recordConfig === null || recordConfig === void 0 ? void 0 : recordConfig.enable)) return [3, 3];
|
|
4911
5257
|
recordingSamplingEnabled = isSamplingOn(recordConfig.sessionRecordingSampleRate);
|
|
@@ -4938,7 +5284,7 @@ var SessionManager = (function (_super) {
|
|
|
4938
5284
|
(_a = CxGlobal.sessionStorage) === null || _a === void 0 ? void 0 : _a.removeItem(PREV_SESSION_KEY);
|
|
4939
5285
|
};
|
|
4940
5286
|
SessionManager.prototype.clearSession = function () {
|
|
4941
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
5287
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
4942
5288
|
if (this.debugMode) {
|
|
4943
5289
|
console.debug('Coralogix Browser SDK - Session expired, clearing session');
|
|
4944
5290
|
}
|
|
@@ -4948,10 +5294,11 @@ var SessionManager = (function (_super) {
|
|
|
4948
5294
|
(_d = getSnapshotManager()) === null || _d === void 0 ? void 0 : _d.resetSnapshot();
|
|
4949
5295
|
clearStoredSnapshotState();
|
|
4950
5296
|
(_e = getClickScreenshotManager()) === null || _e === void 0 ? void 0 : _e.reset();
|
|
5297
|
+
(_f = getDomChangeScreenshotTrigger()) === null || _f === void 0 ? void 0 : _f.reset();
|
|
4951
5298
|
this.resetCurrentPageFragment();
|
|
4952
5299
|
this.resetViewNumber();
|
|
4953
|
-
(
|
|
4954
|
-
(
|
|
5300
|
+
(_g = this.sessionRecorder) === null || _g === void 0 ? void 0 : _g.stopRecording();
|
|
5301
|
+
(_h = CxGlobal.sessionStorage) === null || _h === void 0 ? void 0 : _h.removeItem(SESSION_KEY);
|
|
4955
5302
|
};
|
|
4956
5303
|
SessionManager.prototype.clearGlobalSpans = function () {
|
|
4957
5304
|
var _a;
|
|
@@ -5203,28 +5550,14 @@ function resolveUrlBlueprinters(urlBlueprinters) {
|
|
|
5203
5550
|
if (!urlBlueprinters) {
|
|
5204
5551
|
return OPTIONS_DEFAULTS.urlBlueprinters;
|
|
5205
5552
|
}
|
|
5206
|
-
var
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
var concatBlueprinters = function (urlBlueprinters) {
|
|
5211
|
-
var _a, _b;
|
|
5212
|
-
var _c = urlBlueprinters || {}, pageUrlBlueprinters = _c.pageUrlBlueprinters, networkUrlBlueprinters = _c.networkUrlBlueprinters;
|
|
5213
|
-
if (pageUrlBlueprinters) {
|
|
5214
|
-
(_a = resolvedUrlBlueprinters.pageUrlBlueprinters).push.apply(_a, __spreadArray([], __read$1(pageUrlBlueprinters), false));
|
|
5215
|
-
}
|
|
5216
|
-
if (networkUrlBlueprinters) {
|
|
5217
|
-
(_b = resolvedUrlBlueprinters.networkUrlBlueprinters).push.apply(_b, __spreadArray([], __read$1(networkUrlBlueprinters), false));
|
|
5218
|
-
}
|
|
5553
|
+
var defaults = OPTIONS_DEFAULTS.urlBlueprinters || {};
|
|
5554
|
+
return {
|
|
5555
|
+
pageUrlBlueprinters: __spreadArray(__spreadArray([], __read$1((defaults.pageUrlBlueprinters || [])), false), __read$1((urlBlueprinters.pageUrlBlueprinters || [])), false),
|
|
5556
|
+
networkUrlBlueprinters: __spreadArray(__spreadArray([], __read$1((defaults.networkUrlBlueprinters || [])), false), __read$1((urlBlueprinters.networkUrlBlueprinters || [])), false),
|
|
5219
5557
|
};
|
|
5220
|
-
concatBlueprinters(urlBlueprinters);
|
|
5221
|
-
if (OPTIONS_DEFAULTS.urlBlueprinters) {
|
|
5222
|
-
concatBlueprinters(OPTIONS_DEFAULTS.urlBlueprinters);
|
|
5223
|
-
}
|
|
5224
|
-
return resolvedUrlBlueprinters;
|
|
5225
5558
|
}
|
|
5226
5559
|
|
|
5227
|
-
var SDK_VERSION = '3.
|
|
5560
|
+
var SDK_VERSION = '3.24.0';
|
|
5228
5561
|
|
|
5229
5562
|
function shouldDropEvent(cxRumEvent, options) {
|
|
5230
5563
|
if (isDocumentErrorWithoutMessage(cxRumEvent)) {
|
|
@@ -5747,24 +6080,26 @@ var CoralogixNavigationProcessor = (function () {
|
|
|
5747
6080
|
};
|
|
5748
6081
|
CoralogixNavigationProcessor.prototype.onEnd = function (span) { };
|
|
5749
6082
|
CoralogixNavigationProcessor.prototype.onStart = function (span) {
|
|
5750
|
-
var _a;
|
|
6083
|
+
var _a, _b;
|
|
5751
6084
|
if (this.isResolving) {
|
|
5752
6085
|
return;
|
|
5753
6086
|
}
|
|
5754
6087
|
this.isResolving = true;
|
|
5755
6088
|
try {
|
|
5756
6089
|
var pageContext = resolvePageContext(location.href);
|
|
5757
|
-
|
|
6090
|
+
var sessionManager = getSessionManager();
|
|
6091
|
+
if (pageContext && sessionManager) {
|
|
5758
6092
|
span[CoralogixAttributes.PAGE_CONTEXT] = pageContext;
|
|
5759
|
-
var previousPageFragment =
|
|
6093
|
+
var previousPageFragment = sessionManager.currentPageFragment;
|
|
5760
6094
|
var page_fragments = pageContext.page_fragments;
|
|
5761
6095
|
if (previousPageFragment !== page_fragments) {
|
|
5762
|
-
|
|
6096
|
+
sessionManager.updateCurrentPage(page_fragments);
|
|
5763
6097
|
span[CoralogixAttributes.IS_NAVIGATION_EVENT] = true;
|
|
5764
6098
|
this.handlePageNavigation(previousPageFragment);
|
|
5765
6099
|
(_a = getClickScreenshotManager()) === null || _a === void 0 ? void 0 : _a.onNavigation();
|
|
6100
|
+
(_b = getDomChangeScreenshotTrigger()) === null || _b === void 0 ? void 0 : _b.onNavigation();
|
|
5766
6101
|
}
|
|
5767
|
-
span[CoralogixAttributes.VIEW_NUMBER] =
|
|
6102
|
+
span[CoralogixAttributes.VIEW_NUMBER] = sessionManager.viewNumber;
|
|
5768
6103
|
}
|
|
5769
6104
|
}
|
|
5770
6105
|
finally {
|
|
@@ -5772,8 +6107,9 @@ var CoralogixNavigationProcessor = (function () {
|
|
|
5772
6107
|
}
|
|
5773
6108
|
};
|
|
5774
6109
|
CoralogixNavigationProcessor.prototype.handlePageNavigation = function (previousPageFragment) {
|
|
6110
|
+
var _a;
|
|
5775
6111
|
if (previousPageFragment) {
|
|
5776
|
-
getSessionManager().incrementViewNumber();
|
|
6112
|
+
(_a = getSessionManager()) === null || _a === void 0 ? void 0 : _a.incrementViewNumber();
|
|
5777
6113
|
}
|
|
5778
6114
|
};
|
|
5779
6115
|
CoralogixNavigationProcessor.prototype.shutdown = function () {
|
|
@@ -5789,6 +6125,14 @@ function getTiming(duration) {
|
|
|
5789
6125
|
return getNowTime() - getSessionManager().currentPageTimestamp;
|
|
5790
6126
|
}
|
|
5791
6127
|
|
|
6128
|
+
function canCaptureAutomaticScreenshot() {
|
|
6129
|
+
var sessionManager = getSessionManager();
|
|
6130
|
+
if (!(sessionManager === null || sessionManager === void 0 ? void 0 : sessionManager.onlySessionWithErrorMode)) {
|
|
6131
|
+
return true;
|
|
6132
|
+
}
|
|
6133
|
+
return sessionManager.sessionHasError;
|
|
6134
|
+
}
|
|
6135
|
+
|
|
5792
6136
|
var FIRST_CAPTURE_CLICK = 1;
|
|
5793
6137
|
var MIN_SECOND_CAPTURE_CLICK = 2;
|
|
5794
6138
|
var TOTAL_CAPTURE_OPTIONS = 9;
|
|
@@ -5808,23 +6152,333 @@ var ClickScreenshotManager = (function () {
|
|
|
5808
6152
|
_this.clickCount = 0;
|
|
5809
6153
|
};
|
|
5810
6154
|
this.handleClick = function () {
|
|
5811
|
-
|
|
6155
|
+
var _a;
|
|
6156
|
+
if (!((_a = getSessionRecorder()) === null || _a === void 0 ? void 0 : _a.isRecordingActive())) {
|
|
5812
6157
|
return;
|
|
5813
6158
|
}
|
|
5814
6159
|
_this.clickCount += 1;
|
|
5815
6160
|
if (_this.clickCount === FIRST_CAPTURE_CLICK ||
|
|
5816
6161
|
_this.clickCount === _this.secondCaptureClick) {
|
|
6162
|
+
if (!canCaptureAutomaticScreenshot()) {
|
|
6163
|
+
return;
|
|
6164
|
+
}
|
|
5817
6165
|
CoralogixRum.screenshot(CX_PREFIX);
|
|
5818
6166
|
}
|
|
5819
6167
|
};
|
|
5820
|
-
|
|
6168
|
+
setSdkState(CLICK_SCREENSHOT_MANAGER_KEY, this);
|
|
5821
6169
|
}
|
|
5822
6170
|
ClickScreenshotManager.unregister = function () {
|
|
5823
|
-
|
|
6171
|
+
deleteSdkState(CLICK_SCREENSHOT_MANAGER_KEY);
|
|
5824
6172
|
};
|
|
5825
6173
|
return ClickScreenshotManager;
|
|
5826
6174
|
}());
|
|
5827
6175
|
|
|
6176
|
+
var EventType;
|
|
6177
|
+
(function (EventType) {
|
|
6178
|
+
EventType[EventType["DomContentLoaded"] = 0] = "DomContentLoaded";
|
|
6179
|
+
EventType[EventType["Load"] = 1] = "Load";
|
|
6180
|
+
EventType[EventType["FullSnapshot"] = 2] = "FullSnapshot";
|
|
6181
|
+
EventType[EventType["IncrementalSnapshot"] = 3] = "IncrementalSnapshot";
|
|
6182
|
+
EventType[EventType["Meta"] = 4] = "Meta";
|
|
6183
|
+
EventType[EventType["Custom"] = 5] = "Custom";
|
|
6184
|
+
EventType[EventType["Plugin"] = 6] = "Plugin";
|
|
6185
|
+
EventType[EventType["Asset"] = 7] = "Asset";
|
|
6186
|
+
})(EventType || (EventType = {}));
|
|
6187
|
+
var IncrementalSource;
|
|
6188
|
+
(function (IncrementalSource) {
|
|
6189
|
+
IncrementalSource[IncrementalSource["Mutation"] = 0] = "Mutation";
|
|
6190
|
+
IncrementalSource[IncrementalSource["MouseMove"] = 1] = "MouseMove";
|
|
6191
|
+
IncrementalSource[IncrementalSource["MouseInteraction"] = 2] = "MouseInteraction";
|
|
6192
|
+
IncrementalSource[IncrementalSource["Scroll"] = 3] = "Scroll";
|
|
6193
|
+
IncrementalSource[IncrementalSource["ViewportResize"] = 4] = "ViewportResize";
|
|
6194
|
+
IncrementalSource[IncrementalSource["Input"] = 5] = "Input";
|
|
6195
|
+
IncrementalSource[IncrementalSource["TouchMove"] = 6] = "TouchMove";
|
|
6196
|
+
IncrementalSource[IncrementalSource["MediaInteraction"] = 7] = "MediaInteraction";
|
|
6197
|
+
IncrementalSource[IncrementalSource["StyleSheetRule"] = 8] = "StyleSheetRule";
|
|
6198
|
+
IncrementalSource[IncrementalSource["CanvasMutation"] = 9] = "CanvasMutation";
|
|
6199
|
+
IncrementalSource[IncrementalSource["Font"] = 10] = "Font";
|
|
6200
|
+
IncrementalSource[IncrementalSource["Log"] = 11] = "Log";
|
|
6201
|
+
IncrementalSource[IncrementalSource["Drag"] = 12] = "Drag";
|
|
6202
|
+
IncrementalSource[IncrementalSource["StyleDeclaration"] = 13] = "StyleDeclaration";
|
|
6203
|
+
IncrementalSource[IncrementalSource["Selection"] = 14] = "Selection";
|
|
6204
|
+
IncrementalSource[IncrementalSource["AdoptedStyleSheet"] = 15] = "AdoptedStyleSheet";
|
|
6205
|
+
IncrementalSource[IncrementalSource["CustomElement"] = 16] = "CustomElement";
|
|
6206
|
+
})(IncrementalSource || (IncrementalSource = {}));
|
|
6207
|
+
var MouseInteractions;
|
|
6208
|
+
(function (MouseInteractions) {
|
|
6209
|
+
MouseInteractions[MouseInteractions["MouseUp"] = 0] = "MouseUp";
|
|
6210
|
+
MouseInteractions[MouseInteractions["MouseDown"] = 1] = "MouseDown";
|
|
6211
|
+
MouseInteractions[MouseInteractions["Click"] = 2] = "Click";
|
|
6212
|
+
MouseInteractions[MouseInteractions["ContextMenu"] = 3] = "ContextMenu";
|
|
6213
|
+
MouseInteractions[MouseInteractions["DblClick"] = 4] = "DblClick";
|
|
6214
|
+
MouseInteractions[MouseInteractions["Focus"] = 5] = "Focus";
|
|
6215
|
+
MouseInteractions[MouseInteractions["Blur"] = 6] = "Blur";
|
|
6216
|
+
MouseInteractions[MouseInteractions["TouchStart"] = 7] = "TouchStart";
|
|
6217
|
+
MouseInteractions[MouseInteractions["TouchMove_Departed"] = 8] = "TouchMove_Departed";
|
|
6218
|
+
MouseInteractions[MouseInteractions["TouchEnd"] = 9] = "TouchEnd";
|
|
6219
|
+
MouseInteractions[MouseInteractions["TouchCancel"] = 10] = "TouchCancel";
|
|
6220
|
+
})(MouseInteractions || (MouseInteractions = {}));
|
|
6221
|
+
var PointerTypes;
|
|
6222
|
+
(function (PointerTypes) {
|
|
6223
|
+
PointerTypes[PointerTypes["Mouse"] = 0] = "Mouse";
|
|
6224
|
+
PointerTypes[PointerTypes["Pen"] = 1] = "Pen";
|
|
6225
|
+
PointerTypes[PointerTypes["Touch"] = 2] = "Touch";
|
|
6226
|
+
})(PointerTypes || (PointerTypes = {}));
|
|
6227
|
+
var CanvasContext;
|
|
6228
|
+
(function (CanvasContext) {
|
|
6229
|
+
CanvasContext[CanvasContext["2D"] = 0] = "2D";
|
|
6230
|
+
CanvasContext[CanvasContext["WebGL"] = 1] = "WebGL";
|
|
6231
|
+
CanvasContext[CanvasContext["WebGL2"] = 2] = "WebGL2";
|
|
6232
|
+
})(CanvasContext || (CanvasContext = {}));
|
|
6233
|
+
var MediaInteractions;
|
|
6234
|
+
(function (MediaInteractions) {
|
|
6235
|
+
MediaInteractions[MediaInteractions["Play"] = 0] = "Play";
|
|
6236
|
+
MediaInteractions[MediaInteractions["Pause"] = 1] = "Pause";
|
|
6237
|
+
MediaInteractions[MediaInteractions["Seeked"] = 2] = "Seeked";
|
|
6238
|
+
MediaInteractions[MediaInteractions["VolumeChange"] = 3] = "VolumeChange";
|
|
6239
|
+
MediaInteractions[MediaInteractions["RateChange"] = 4] = "RateChange";
|
|
6240
|
+
})(MediaInteractions || (MediaInteractions = {}));
|
|
6241
|
+
var NodeType;
|
|
6242
|
+
(function (NodeType) {
|
|
6243
|
+
NodeType[NodeType["Document"] = 0] = "Document";
|
|
6244
|
+
NodeType[NodeType["DocumentType"] = 1] = "DocumentType";
|
|
6245
|
+
NodeType[NodeType["Element"] = 2] = "Element";
|
|
6246
|
+
NodeType[NodeType["Text"] = 3] = "Text";
|
|
6247
|
+
NodeType[NodeType["CDATA"] = 4] = "CDATA";
|
|
6248
|
+
NodeType[NodeType["Comment"] = 5] = "Comment";
|
|
6249
|
+
})(NodeType || (NodeType = {}));
|
|
6250
|
+
|
|
6251
|
+
var NEVER = 0;
|
|
6252
|
+
var UNRESOLVED_DEPTH = MAX_DEPTH_WALK + 1;
|
|
6253
|
+
var DomChangeScreenshotTrigger = (function () {
|
|
6254
|
+
function DomChangeScreenshotTrigger() {
|
|
6255
|
+
var _this = this;
|
|
6256
|
+
this.settled = false;
|
|
6257
|
+
this.lastInteractionAt = NEVER;
|
|
6258
|
+
this.cachedElementCount = 0;
|
|
6259
|
+
this.elementCountRefreshedAt = NEVER;
|
|
6260
|
+
this.lastCaptureAt = NEVER;
|
|
6261
|
+
this.capturesThisView = 0;
|
|
6262
|
+
this.reset = function () {
|
|
6263
|
+
_this.clearTimers();
|
|
6264
|
+
_this.settled = false;
|
|
6265
|
+
_this.lastInteractionAt = NEVER;
|
|
6266
|
+
_this.lastCaptureAt = NEVER;
|
|
6267
|
+
_this.onNavigation();
|
|
6268
|
+
};
|
|
6269
|
+
this.onNavigation = function () {
|
|
6270
|
+
_this.clearTimers();
|
|
6271
|
+
_this.settled = false;
|
|
6272
|
+
_this.pendingReason = undefined;
|
|
6273
|
+
_this.capturesThisView = 0;
|
|
6274
|
+
_this.elementCountRefreshedAt = NEVER;
|
|
6275
|
+
};
|
|
6276
|
+
this.handleRecordEvent = function (event, resolveNode) {
|
|
6277
|
+
var _a;
|
|
6278
|
+
try {
|
|
6279
|
+
if ((event === null || event === void 0 ? void 0 : event.type) === EventType.FullSnapshot) {
|
|
6280
|
+
_this.armSettleTimer();
|
|
6281
|
+
return;
|
|
6282
|
+
}
|
|
6283
|
+
if ((event === null || event === void 0 ? void 0 : event.type) !== EventType.IncrementalSnapshot) {
|
|
6284
|
+
return;
|
|
6285
|
+
}
|
|
6286
|
+
var source = (_a = event.data) === null || _a === void 0 ? void 0 : _a.source;
|
|
6287
|
+
if (_this.isUserInteraction(event)) {
|
|
6288
|
+
_this.lastInteractionAt = event.timestamp;
|
|
6289
|
+
return;
|
|
6290
|
+
}
|
|
6291
|
+
if (source !== IncrementalSource.Mutation) {
|
|
6292
|
+
return;
|
|
6293
|
+
}
|
|
6294
|
+
if (!_this.settled) {
|
|
6295
|
+
_this.armSettleTimer();
|
|
6296
|
+
return;
|
|
6297
|
+
}
|
|
6298
|
+
_this.handleMutation(event.data, event.timestamp, resolveNode);
|
|
6299
|
+
}
|
|
6300
|
+
catch (_b) {
|
|
6301
|
+
}
|
|
6302
|
+
};
|
|
6303
|
+
this.capture = function () {
|
|
6304
|
+
var reason = _this.pendingReason;
|
|
6305
|
+
_this.pendingReason = undefined;
|
|
6306
|
+
if (!reason) {
|
|
6307
|
+
return;
|
|
6308
|
+
}
|
|
6309
|
+
var now = Date.now();
|
|
6310
|
+
if (_this.capturesThisView >= MAX_CAPTURES_PER_VIEW ||
|
|
6311
|
+
now - _this.lastCaptureAt < MIN_CAPTURE_INTERVAL_MS ||
|
|
6312
|
+
_this.cachedElementCount > MAX_NODES_FOR_CAPTURE ||
|
|
6313
|
+
!canCaptureAutomaticScreenshot()) {
|
|
6314
|
+
return;
|
|
6315
|
+
}
|
|
6316
|
+
_this.lastCaptureAt = now;
|
|
6317
|
+
_this.capturesThisView += 1;
|
|
6318
|
+
_this.lastInteractionAt = NEVER;
|
|
6319
|
+
CoralogixRum.screenshot(reason);
|
|
6320
|
+
};
|
|
6321
|
+
this.markSettled = function () {
|
|
6322
|
+
var _a;
|
|
6323
|
+
var elementCount = ((_a = CxGlobal.document) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('*').length) || 0;
|
|
6324
|
+
if (elementCount < CONTENT_ELEMENT_FLOOR) {
|
|
6325
|
+
return;
|
|
6326
|
+
}
|
|
6327
|
+
_this.settled = true;
|
|
6328
|
+
_this.cachedElementCount = elementCount;
|
|
6329
|
+
_this.elementCountRefreshedAt = Date.now();
|
|
6330
|
+
};
|
|
6331
|
+
setSdkState(DOM_CHANGE_SCREENSHOT_TRIGGER_KEY, this);
|
|
6332
|
+
}
|
|
6333
|
+
DomChangeScreenshotTrigger.unregister = function () {
|
|
6334
|
+
var instance = sdkStore[DOM_CHANGE_SCREENSHOT_TRIGGER_KEY];
|
|
6335
|
+
instance === null || instance === void 0 ? void 0 : instance.clearTimers();
|
|
6336
|
+
deleteSdkState(DOM_CHANGE_SCREENSHOT_TRIGGER_KEY);
|
|
6337
|
+
};
|
|
6338
|
+
DomChangeScreenshotTrigger.prototype.isUserInteraction = function (event) {
|
|
6339
|
+
var data = event.data;
|
|
6340
|
+
if ((data === null || data === void 0 ? void 0 : data.source) === IncrementalSource.Input) {
|
|
6341
|
+
return true;
|
|
6342
|
+
}
|
|
6343
|
+
if ((data === null || data === void 0 ? void 0 : data.source) !== IncrementalSource.MouseInteraction) {
|
|
6344
|
+
return false;
|
|
6345
|
+
}
|
|
6346
|
+
return (data.type === MouseInteractions.MouseDown ||
|
|
6347
|
+
data.type === MouseInteractions.Click ||
|
|
6348
|
+
data.type === MouseInteractions.DblClick ||
|
|
6349
|
+
data.type === MouseInteractions.TouchStart);
|
|
6350
|
+
};
|
|
6351
|
+
DomChangeScreenshotTrigger.prototype.handleMutation = function (data, timestamp, resolveNode) {
|
|
6352
|
+
var _a;
|
|
6353
|
+
var adds = data.adds || [];
|
|
6354
|
+
var removes = data.removes || [];
|
|
6355
|
+
var weight = adds.length + removes.length + (((_a = data.texts) === null || _a === void 0 ? void 0 : _a.length) || 0);
|
|
6356
|
+
if (!weight) {
|
|
6357
|
+
return;
|
|
6358
|
+
}
|
|
6359
|
+
var elementCount = this.getElementCount(timestamp);
|
|
6360
|
+
var reason = this.classify(adds, removes, weight, elementCount, timestamp, resolveNode);
|
|
6361
|
+
if (!reason) {
|
|
6362
|
+
return;
|
|
6363
|
+
}
|
|
6364
|
+
this.pendingReason = reason;
|
|
6365
|
+
this.clearDebounceTimer();
|
|
6366
|
+
this.debounceTimer = cxSetTimeout(this.capture, CHANGE_DEBOUNCE_MS);
|
|
6367
|
+
};
|
|
6368
|
+
DomChangeScreenshotTrigger.prototype.classify = function (adds, removes, weight, elementCount, timestamp, resolveNode) {
|
|
6369
|
+
var sinceInteraction = timestamp - this.lastInteractionAt;
|
|
6370
|
+
var withinTightWindow = sinceInteraction <= INTERACTION_TIGHT_MS;
|
|
6371
|
+
var withinLooseWindow = sinceInteraction <= INTERACTION_LOOSE_MS;
|
|
6372
|
+
if (withinLooseWindow && removesTolerable(adds.length, removes.length)) {
|
|
6373
|
+
var addedElements_1 = adds.filter(function (add) { return containsElement(add.node); }).length;
|
|
6374
|
+
var looksLikeOverlay = function () {
|
|
6375
|
+
return addedElements_1 > 0 &&
|
|
6376
|
+
shallowestDepth(adds, resolveNode) <= OVERLAY_MAX_DEPTH;
|
|
6377
|
+
};
|
|
6378
|
+
var bigEnough = withinTightWindow
|
|
6379
|
+
? addedElements_1 >= INTERACTION_TIGHT_MIN_ELEMENTS
|
|
6380
|
+
: addedElements_1 >= INTERACTION_LOOSE_MIN_ELEMENTS;
|
|
6381
|
+
if (bigEnough && looksLikeOverlay()) {
|
|
6382
|
+
return "dom-overlay";
|
|
6383
|
+
}
|
|
6384
|
+
}
|
|
6385
|
+
if (withinLooseWindow &&
|
|
6386
|
+
weight >= threshold(VIEW_CHANGE_MIN_WEIGHT, VIEW_CHANGE_FRACTION, elementCount)) {
|
|
6387
|
+
return "dom-view-change";
|
|
6388
|
+
}
|
|
6389
|
+
return undefined;
|
|
6390
|
+
};
|
|
6391
|
+
DomChangeScreenshotTrigger.prototype.getElementCount = function (timestamp) {
|
|
6392
|
+
var _a;
|
|
6393
|
+
if (timestamp - this.elementCountRefreshedAt < NODE_COUNT_REFRESH_MS) {
|
|
6394
|
+
return this.cachedElementCount;
|
|
6395
|
+
}
|
|
6396
|
+
this.cachedElementCount =
|
|
6397
|
+
((_a = CxGlobal.document) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('*').length) || 0;
|
|
6398
|
+
this.elementCountRefreshedAt = timestamp;
|
|
6399
|
+
return this.cachedElementCount;
|
|
6400
|
+
};
|
|
6401
|
+
DomChangeScreenshotTrigger.prototype.armSettleTimer = function () {
|
|
6402
|
+
this.clearSettleTimer();
|
|
6403
|
+
this.quietTimer = cxSetTimeout(this.markSettled, SETTLE_QUIET_MS);
|
|
6404
|
+
};
|
|
6405
|
+
DomChangeScreenshotTrigger.prototype.clearTimers = function () {
|
|
6406
|
+
this.clearSettleTimer();
|
|
6407
|
+
this.clearDebounceTimer();
|
|
6408
|
+
};
|
|
6409
|
+
DomChangeScreenshotTrigger.prototype.clearSettleTimer = function () {
|
|
6410
|
+
if (this.quietTimer) {
|
|
6411
|
+
cxClearTimeout(this.quietTimer);
|
|
6412
|
+
this.quietTimer = undefined;
|
|
6413
|
+
}
|
|
6414
|
+
};
|
|
6415
|
+
DomChangeScreenshotTrigger.prototype.clearDebounceTimer = function () {
|
|
6416
|
+
if (this.debounceTimer) {
|
|
6417
|
+
cxClearTimeout(this.debounceTimer);
|
|
6418
|
+
this.debounceTimer = undefined;
|
|
6419
|
+
}
|
|
6420
|
+
};
|
|
6421
|
+
return DomChangeScreenshotTrigger;
|
|
6422
|
+
}());
|
|
6423
|
+
function shallowestDepth(adds, resolveNode) {
|
|
6424
|
+
var e_1, _a;
|
|
6425
|
+
if (!resolveNode) {
|
|
6426
|
+
return UNRESOLVED_DEPTH;
|
|
6427
|
+
}
|
|
6428
|
+
var shallowest = UNRESOLVED_DEPTH;
|
|
6429
|
+
try {
|
|
6430
|
+
for (var adds_1 = __values$1(adds), adds_1_1 = adds_1.next(); !adds_1_1.done; adds_1_1 = adds_1.next()) {
|
|
6431
|
+
var add = adds_1_1.value;
|
|
6432
|
+
var parent_1 = resolveNode(add.parentId);
|
|
6433
|
+
if (parent_1) {
|
|
6434
|
+
shallowest = Math.min(shallowest, depthFromBody(parent_1));
|
|
6435
|
+
}
|
|
6436
|
+
if (shallowest <= OVERLAY_MAX_DEPTH) {
|
|
6437
|
+
break;
|
|
6438
|
+
}
|
|
6439
|
+
}
|
|
6440
|
+
}
|
|
6441
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
6442
|
+
finally {
|
|
6443
|
+
try {
|
|
6444
|
+
if (adds_1_1 && !adds_1_1.done && (_a = adds_1.return)) _a.call(adds_1);
|
|
6445
|
+
}
|
|
6446
|
+
finally { if (e_1) throw e_1.error; }
|
|
6447
|
+
}
|
|
6448
|
+
return shallowest;
|
|
6449
|
+
}
|
|
6450
|
+
function removesTolerable(added, removed) {
|
|
6451
|
+
return (removed <=
|
|
6452
|
+
Math.max(OVERLAY_MAX_REMOVES_ABSOLUTE, added * OVERLAY_MAX_REMOVES_FRACTION));
|
|
6453
|
+
}
|
|
6454
|
+
function threshold(minimum, fraction, elementCount) {
|
|
6455
|
+
return Math.max(minimum, elementCount * fraction);
|
|
6456
|
+
}
|
|
6457
|
+
function containsElement(node) {
|
|
6458
|
+
if (!node) {
|
|
6459
|
+
return false;
|
|
6460
|
+
}
|
|
6461
|
+
if (node.type === NodeType.Element) {
|
|
6462
|
+
return true;
|
|
6463
|
+
}
|
|
6464
|
+
var children = node.childNodes;
|
|
6465
|
+
return !!(children === null || children === void 0 ? void 0 : children.some(containsElement));
|
|
6466
|
+
}
|
|
6467
|
+
function depthFromBody(node) {
|
|
6468
|
+
var _a;
|
|
6469
|
+
var body = (_a = CxGlobal.document) === null || _a === void 0 ? void 0 : _a.body;
|
|
6470
|
+
var depth = 0;
|
|
6471
|
+
var current = node;
|
|
6472
|
+
while (current && current !== body) {
|
|
6473
|
+
current = current.parentElement;
|
|
6474
|
+
depth += 1;
|
|
6475
|
+
if (depth > MAX_DEPTH_WALK) {
|
|
6476
|
+
return UNRESOLVED_DEPTH;
|
|
6477
|
+
}
|
|
6478
|
+
}
|
|
6479
|
+
return current ? depth : UNRESOLVED_DEPTH;
|
|
6480
|
+
}
|
|
6481
|
+
|
|
5828
6482
|
if (supportedPerformanceTypes === null || supportedPerformanceTypes === void 0 ? void 0 : supportedPerformanceTypes.has(PerformanceTypes.LongTask)) {
|
|
5829
6483
|
var ttiHandler_1 = (CxGlobal.__tti = {
|
|
5830
6484
|
e: [],
|
|
@@ -5863,7 +6517,6 @@ function getResolvedName(element, fullData) {
|
|
|
5863
6517
|
element: element,
|
|
5864
6518
|
config: getSdkConfig(),
|
|
5865
6519
|
actionName: actionName,
|
|
5866
|
-
ariaLabel: ariaLabel,
|
|
5867
6520
|
});
|
|
5868
6521
|
return fullData
|
|
5869
6522
|
? { resolvedName: resolvedName, isDeadClick: isDeadClick, actionName: actionName, ariaLabel: ariaLabel }
|
|
@@ -5880,9 +6533,14 @@ var CoralogixRum = {
|
|
|
5880
6533
|
init: function (options) {
|
|
5881
6534
|
var _a, _b;
|
|
5882
6535
|
var _this = this;
|
|
5883
|
-
var _c
|
|
6536
|
+
var _c;
|
|
5884
6537
|
try {
|
|
5885
|
-
|
|
6538
|
+
var owner = CxGlobal === null || CxGlobal === void 0 ? void 0 : CxGlobal.CoralogixRum;
|
|
6539
|
+
if (owner && owner !== CoralogixRum) {
|
|
6540
|
+
console.debug('CoralogixRum: another SDK copy on this page owns the global, ignoring init');
|
|
6541
|
+
return;
|
|
6542
|
+
}
|
|
6543
|
+
if (isInited) {
|
|
5886
6544
|
if (options === null || options === void 0 ? void 0 : options.debug) {
|
|
5887
6545
|
console.debug('CoralogixRum already initialized, skipping init');
|
|
5888
6546
|
}
|
|
@@ -5900,8 +6558,8 @@ var CoralogixRum = {
|
|
|
5900
6558
|
if (!resolvedOptions_1) {
|
|
5901
6559
|
return;
|
|
5902
6560
|
}
|
|
5903
|
-
|
|
5904
|
-
|
|
6561
|
+
setSdkState(USER_AGENT_KEY, parseUserAgent(navigator.userAgent));
|
|
6562
|
+
setSdkState(SDK_CONFIG_KEY, resolvedOptions_1);
|
|
5905
6563
|
var sampler = getResolvedSampler();
|
|
5906
6564
|
if (!resolvedOptions_1.debug && !resolvedOptions_1.public_key) {
|
|
5907
6565
|
console.warn('rumAuth will be required in the future');
|
|
@@ -5998,8 +6656,11 @@ var CoralogixRum = {
|
|
|
5998
6656
|
spanMapProcessor = new CoralogixSpanMapProcessor();
|
|
5999
6657
|
tracerProvider.addSpanProcessor(spanMapProcessor);
|
|
6000
6658
|
new SnapshotManager();
|
|
6001
|
-
if ((
|
|
6659
|
+
if ((_c = resolvedOptions_1.sessionRecordingConfig) === null || _c === void 0 ? void 0 : _c.enable) {
|
|
6002
6660
|
new ClickScreenshotManager();
|
|
6661
|
+
if (resolvedOptions_1.sessionRecordingConfig.captureScreenshotOnDomChange) {
|
|
6662
|
+
new DomChangeScreenshotTrigger();
|
|
6663
|
+
}
|
|
6003
6664
|
}
|
|
6004
6665
|
snapshotProcessor = new CoralogixSnapshotSpanProcessor();
|
|
6005
6666
|
tracerProvider.addSpanProcessor(snapshotProcessor);
|
|
@@ -6009,10 +6670,10 @@ var CoralogixRum = {
|
|
|
6009
6670
|
tracerProvider: tracerProvider,
|
|
6010
6671
|
instrumentations: instrumentations,
|
|
6011
6672
|
});
|
|
6012
|
-
var
|
|
6673
|
+
var _d = __read$1(partition(resolvedOptions_1.labelProviders || [], function (_a) {
|
|
6013
6674
|
var urlType = _a.urlType;
|
|
6014
6675
|
return urlType === UrlType.PAGE || !urlType;
|
|
6015
|
-
}), 2), pageUrlLabelProviders =
|
|
6676
|
+
}), 2), pageUrlLabelProviders = _d[0], networkUrlLabelProviders = _d[1];
|
|
6016
6677
|
saveInternalRumData(PAGE_URL_LABEL_PROVIDERS_KEY, pageUrlLabelProviders);
|
|
6017
6678
|
saveInternalRumData(NETWORK_URL_LABEL_PROVIDERS_KEY, networkUrlLabelProviders);
|
|
6018
6679
|
isInited = true;
|
|
@@ -6099,6 +6760,7 @@ var CoralogixRum = {
|
|
|
6099
6760
|
this.stopSessionRecording();
|
|
6100
6761
|
(_a = getSessionManager()) === null || _a === void 0 ? void 0 : _a.stop();
|
|
6101
6762
|
ClickScreenshotManager.unregister();
|
|
6763
|
+
DomChangeScreenshotTrigger.unregister();
|
|
6102
6764
|
attributesProcessor === null || attributesProcessor === void 0 ? void 0 : attributesProcessor.shutdown();
|
|
6103
6765
|
navigationProcessor === null || navigationProcessor === void 0 ? void 0 : navigationProcessor.shutdown();
|
|
6104
6766
|
spanMapProcessor === null || spanMapProcessor === void 0 ? void 0 : spanMapProcessor.shutdown();
|
|
@@ -6275,7 +6937,9 @@ var CoralogixRum = {
|
|
|
6275
6937
|
}
|
|
6276
6938
|
},
|
|
6277
6939
|
};
|
|
6278
|
-
CxGlobal.CoralogixRum
|
|
6940
|
+
if (!CxGlobal.CoralogixRum) {
|
|
6941
|
+
CxGlobal.CoralogixRum = CoralogixRum;
|
|
6942
|
+
}
|
|
6279
6943
|
|
|
6280
6944
|
var UrlBasedLabelProvider = (function () {
|
|
6281
6945
|
function UrlBasedLabelProvider(config) {
|
|
@@ -6326,4 +6990,4 @@ var SessionRecordingEventType;
|
|
|
6326
6990
|
SessionRecordingEventType[SessionRecordingEventType["Plugin"] = 6] = "Plugin";
|
|
6327
6991
|
})(SessionRecordingEventType || (SessionRecordingEventType = {}));
|
|
6328
6992
|
|
|
6329
|
-
export { BATCH_TIME_DELAY as B,
|
|
6993
|
+
export { BATCH_TIME_DELAY as B, CanvasContext as C, EventType as E, IncrementalSource as I, MouseInteractions as M, NodeType as N, OtelNetworkAttrs as O, PointerTypes as P, Request as R, SESSION_RECORDER_SEGMENTS_MAP as S, UrlBasedLabelProvider as U, cxClearTimeout as a, createCxMutationObserver as b, cxSetTimeout as c, MediaInteractions as d, cxRequestAnimationFrame as e, cxCancelAnimationFrame as f, getZoneJsOriginalDom as g, CxGlobal as h, getSdkConfig as i, cxClearInterval as j, getNowTime as k, SESSION_RECORDING_NETWORK_ERR0R_MESSAGE as l, cxSetInterval as m, SESSION_RECORDING_DEFAULT_HEADERS as n, SESSION_RECORDING_POSTFIX_URL as o, getDomChangeScreenshotTrigger as p, SESSION_RECORDER_KEY as q, SESSION_RECORDING_DEFAULT_ERROR_MESSAGE as r, setSdkState as s, MAX_BATCH_TIME_MS as t, CoralogixRum as u, CoralogixLogSeverity as v, SessionRecordingEventType as w, CoralogixEventType as x, PerformanceTypes as y, UrlType as z };
|