@cloudcare/browser-rum-slim 3.3.3
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/LICENSE +21 -0
- package/README.md +15 -0
- package/bundle/dataflux-rum-slim.js +1 -0
- package/cjs/boot/buildEnv.js +11 -0
- package/cjs/boot/buildEnv.js.map +1 -0
- package/cjs/boot/perStartRum.js +227 -0
- package/cjs/boot/perStartRum.js.map +1 -0
- package/cjs/boot/rum.js +180 -0
- package/cjs/boot/rum.js.map +1 -0
- package/cjs/boot/rum.slim.entry.js +13 -0
- package/cjs/boot/rum.slim.entry.js.map +1 -0
- package/cjs/boot/rumEntryFactory.js +15 -0
- package/cjs/boot/rumEntryFactory.js.map +1 -0
- package/cjs/boot/rumPublicApi.js +285 -0
- package/cjs/boot/rumPublicApi.js.map +1 -0
- package/cjs/boot/rumRecorderApiStub.js +19 -0
- package/cjs/boot/rumRecorderApiStub.js.map +1 -0
- package/cjs/boot/rumSlimConfiguration.js +16 -0
- package/cjs/boot/rumSlimConfiguration.js.map +1 -0
- package/cjs/constants.js +41 -0
- package/cjs/constants.js.map +1 -0
- package/cjs/domain/assembly.js +172 -0
- package/cjs/domain/assembly.js.map +1 -0
- package/cjs/domain/configuration.js +272 -0
- package/cjs/domain/configuration.js.map +1 -0
- package/cjs/domain/contexts/commonContext.js +14 -0
- package/cjs/domain/contexts/commonContext.js.map +1 -0
- package/cjs/domain/contexts/displayContext.js +22 -0
- package/cjs/domain/contexts/displayContext.js.map +1 -0
- package/cjs/domain/contexts/foregroundContexts.js +111 -0
- package/cjs/domain/contexts/foregroundContexts.js.map +1 -0
- package/cjs/domain/contexts/internalContext.js +47 -0
- package/cjs/domain/contexts/internalContext.js.map +1 -0
- package/cjs/domain/contexts/pageStateHistory.js +111 -0
- package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
- package/cjs/domain/contexts/urlContexts.js +73 -0
- package/cjs/domain/contexts/urlContexts.js.map +1 -0
- package/cjs/domain/contexts/viewContexts.js +51 -0
- package/cjs/domain/contexts/viewContexts.js.map +1 -0
- package/cjs/domain/domMutationObservable.js +69 -0
- package/cjs/domain/domMutationObservable.js.map +1 -0
- package/cjs/domain/encoderStreamId.js +11 -0
- package/cjs/domain/encoderStreamId.js.map +1 -0
- package/cjs/domain/firstInputPolyfill.js +83 -0
- package/cjs/domain/firstInputPolyfill.js.map +1 -0
- package/cjs/domain/initViewportObservable.js +44 -0
- package/cjs/domain/initViewportObservable.js.map +1 -0
- package/cjs/domain/locationChangeObservable.js +57 -0
- package/cjs/domain/locationChangeObservable.js.map +1 -0
- package/cjs/domain/performanceObservable.js +124 -0
- package/cjs/domain/performanceObservable.js.map +1 -0
- package/cjs/domain/performanceUtils.js +47 -0
- package/cjs/domain/performanceUtils.js.map +1 -0
- package/cjs/domain/requestCollection.js +127 -0
- package/cjs/domain/requestCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js +89 -0
- package/cjs/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js +69 -0
- package/cjs/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js +75 -0
- package/cjs/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js +232 -0
- package/cjs/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js +220 -0
- package/cjs/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js +28 -0
- package/cjs/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js +73 -0
- package/cjs/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js +253 -0
- package/cjs/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js +90 -0
- package/cjs/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js +18 -0
- package/cjs/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js +25 -0
- package/cjs/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +61 -0
- package/cjs/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js +44 -0
- package/cjs/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +74 -0
- package/cjs/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js +239 -0
- package/cjs/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js +237 -0
- package/cjs/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js +240 -0
- package/cjs/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +25 -0
- package/cjs/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js +54 -0
- package/cjs/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js +48 -0
- package/cjs/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +125 -0
- package/cjs/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +27 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js +55 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js +47 -0
- package/cjs/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +162 -0
- package/cjs/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +61 -0
- package/cjs/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js +51 -0
- package/cjs/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js +57 -0
- package/cjs/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js +92 -0
- package/cjs/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js +21 -0
- package/cjs/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js +269 -0
- package/cjs/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js +131 -0
- package/cjs/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/cjs/domain/rumSessionManager.js +187 -0
- package/cjs/domain/rumSessionManager.js.map +1 -0
- package/cjs/domain/tracing/ddtraceTracer.js +46 -0
- package/cjs/domain/tracing/ddtraceTracer.js.map +1 -0
- package/cjs/domain/tracing/getDocumentTraceId.js +80 -0
- package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/cjs/domain/tracing/jaegerTracer.js +48 -0
- package/cjs/domain/tracing/jaegerTracer.js.map +1 -0
- package/cjs/domain/tracing/sampler.js +69 -0
- package/cjs/domain/tracing/sampler.js.map +1 -0
- package/cjs/domain/tracing/skywalkingTracer.js +96 -0
- package/cjs/domain/tracing/skywalkingTracer.js.map +1 -0
- package/cjs/domain/tracing/traceIdentifier.js +66 -0
- package/cjs/domain/tracing/traceIdentifier.js.map +1 -0
- package/cjs/domain/tracing/tracer.js +133 -0
- package/cjs/domain/tracing/tracer.js.map +1 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js +74 -0
- package/cjs/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js +48 -0
- package/cjs/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js +47 -0
- package/cjs/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/cjs/domain/trackEventCounts.js +55 -0
- package/cjs/domain/trackEventCounts.js.map +1 -0
- package/cjs/domain/usr/index.js +44 -0
- package/cjs/domain/usr/index.js.map +1 -0
- package/cjs/domain/waitPageActivityEnd.js +151 -0
- package/cjs/domain/waitPageActivityEnd.js.map +1 -0
- package/cjs/index.js +13 -0
- package/cjs/index.js.map +1 -0
- package/cjs/transport/startRumBatch.js +26 -0
- package/cjs/transport/startRumBatch.js.map +1 -0
- package/cjs/transport/startRumEventBridge.js +15 -0
- package/cjs/transport/startRumEventBridge.js.map +1 -0
- package/esm/boot/buildEnv.js +5 -0
- package/esm/boot/buildEnv.js.map +1 -0
- package/esm/boot/perStartRum.js +221 -0
- package/esm/boot/perStartRum.js.map +1 -0
- package/esm/boot/rum.js +173 -0
- package/esm/boot/rum.js.map +1 -0
- package/esm/boot/rum.slim.entry.js +7 -0
- package/esm/boot/rum.slim.entry.js.map +1 -0
- package/esm/boot/rumEntryFactory.js +9 -0
- package/esm/boot/rumEntryFactory.js.map +1 -0
- package/esm/boot/rumPublicApi.js +279 -0
- package/esm/boot/rumPublicApi.js.map +1 -0
- package/esm/boot/rumRecorderApiStub.js +13 -0
- package/esm/boot/rumRecorderApiStub.js.map +1 -0
- package/esm/boot/rumSlimConfiguration.js +10 -0
- package/esm/boot/rumSlimConfiguration.js.map +1 -0
- package/esm/constants.js +35 -0
- package/esm/constants.js.map +1 -0
- package/esm/domain/assembly.js +166 -0
- package/esm/domain/assembly.js.map +1 -0
- package/esm/domain/configuration.js +266 -0
- package/esm/domain/configuration.js.map +1 -0
- package/esm/domain/contexts/commonContext.js +8 -0
- package/esm/domain/contexts/commonContext.js.map +1 -0
- package/esm/domain/contexts/displayContext.js +16 -0
- package/esm/domain/contexts/displayContext.js.map +1 -0
- package/esm/domain/contexts/foregroundContexts.js +103 -0
- package/esm/domain/contexts/foregroundContexts.js.map +1 -0
- package/esm/domain/contexts/internalContext.js +41 -0
- package/esm/domain/contexts/internalContext.js.map +1 -0
- package/esm/domain/contexts/pageStateHistory.js +104 -0
- package/esm/domain/contexts/pageStateHistory.js.map +1 -0
- package/esm/domain/contexts/urlContexts.js +67 -0
- package/esm/domain/contexts/urlContexts.js.map +1 -0
- package/esm/domain/contexts/viewContexts.js +44 -0
- package/esm/domain/contexts/viewContexts.js.map +1 -0
- package/esm/domain/domMutationObservable.js +62 -0
- package/esm/domain/domMutationObservable.js.map +1 -0
- package/esm/domain/encoderStreamId.js +5 -0
- package/esm/domain/encoderStreamId.js.map +1 -0
- package/esm/domain/firstInputPolyfill.js +77 -0
- package/esm/domain/firstInputPolyfill.js.map +1 -0
- package/esm/domain/initViewportObservable.js +36 -0
- package/esm/domain/initViewportObservable.js.map +1 -0
- package/esm/domain/locationChangeObservable.js +51 -0
- package/esm/domain/locationChangeObservable.js.map +1 -0
- package/esm/domain/performanceObservable.js +116 -0
- package/esm/domain/performanceObservable.js.map +1 -0
- package/esm/domain/performanceUtils.js +40 -0
- package/esm/domain/performanceUtils.js.map +1 -0
- package/esm/domain/requestCollection.js +119 -0
- package/esm/domain/requestCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js +83 -0
- package/esm/domain/rumEventsCollection/actions/actionCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js +62 -0
- package/esm/domain/rumEventsCollection/actions/clickChain.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js +67 -0
- package/esm/domain/rumEventsCollection/actions/computeFrustration.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js +225 -0
- package/esm/domain/rumEventsCollection/actions/getActionNameFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js +212 -0
- package/esm/domain/rumEventsCollection/actions/getSelectorsFromElement.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js +20 -0
- package/esm/domain/rumEventsCollection/actions/interactionSelectorCache.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js +67 -0
- package/esm/domain/rumEventsCollection/actions/listenActionEvents.js.map +1 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js +244 -0
- package/esm/domain/rumEventsCollection/actions/trackClickActions.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js +83 -0
- package/esm/domain/rumEventsCollection/error/errorCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js +12 -0
- package/esm/domain/rumEventsCollection/error/trackConsoleError.js.map +1 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js +19 -0
- package/esm/domain/rumEventsCollection/error/trackReportError.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js +55 -0
- package/esm/domain/rumEventsCollection/longTask/longAnimationFrameCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js +38 -0
- package/esm/domain/rumEventsCollection/longTask/longTaskCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js +69 -0
- package/esm/domain/rumEventsCollection/resource/matchRequestResourceEntry.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js +233 -0
- package/esm/domain/rumEventsCollection/resource/resourceCollection.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js +231 -0
- package/esm/domain/rumEventsCollection/resource/resourceTrackerManager.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js +218 -0
- package/esm/domain/rumEventsCollection/resource/resourceUtils.js.map +1 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js +19 -0
- package/esm/domain/rumEventsCollection/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js +47 -0
- package/esm/domain/rumEventsCollection/view/interactionCountPolyfill.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js +42 -0
- package/esm/domain/rumEventsCollection/view/trackCommonViewMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js +117 -0
- package/esm/domain/rumEventsCollection/view/trackCumulativeLayoutShift.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js +20 -0
- package/esm/domain/rumEventsCollection/view/trackFirstContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js +49 -0
- package/esm/domain/rumEventsCollection/view/trackFirstHidden.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js +41 -0
- package/esm/domain/rumEventsCollection/view/trackFirstInput.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js +44 -0
- package/esm/domain/rumEventsCollection/view/trackInitialViewTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js +153 -0
- package/esm/domain/rumEventsCollection/view/trackInteractionToNextPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js +54 -0
- package/esm/domain/rumEventsCollection/view/trackLargestContentfulPaint.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js +45 -0
- package/esm/domain/rumEventsCollection/view/trackLoadingTime.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js +51 -0
- package/esm/domain/rumEventsCollection/view/trackNavigationTimings.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js +84 -0
- package/esm/domain/rumEventsCollection/view/trackScrollMetrics.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js +15 -0
- package/esm/domain/rumEventsCollection/view/trackViewEventCounts.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js +262 -0
- package/esm/domain/rumEventsCollection/view/trackViews.js.map +1 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js +125 -0
- package/esm/domain/rumEventsCollection/view/viewCollection.js.map +1 -0
- package/esm/domain/rumSessionManager.js +179 -0
- package/esm/domain/rumSessionManager.js.map +1 -0
- package/esm/domain/tracing/ddtraceTracer.js +40 -0
- package/esm/domain/tracing/ddtraceTracer.js.map +1 -0
- package/esm/domain/tracing/getDocumentTraceId.js +69 -0
- package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/esm/domain/tracing/jaegerTracer.js +42 -0
- package/esm/domain/tracing/jaegerTracer.js.map +1 -0
- package/esm/domain/tracing/sampler.js +61 -0
- package/esm/domain/tracing/sampler.js.map +1 -0
- package/esm/domain/tracing/skywalkingTracer.js +90 -0
- package/esm/domain/tracing/skywalkingTracer.js.map +1 -0
- package/esm/domain/tracing/traceIdentifier.js +57 -0
- package/esm/domain/tracing/traceIdentifier.js.map +1 -0
- package/esm/domain/tracing/tracer.js +124 -0
- package/esm/domain/tracing/tracer.js.map +1 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js +69 -0
- package/esm/domain/tracing/w3cTraceParentTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinMultiTracer.js +42 -0
- package/esm/domain/tracing/zipkinMultiTracer.js.map +1 -0
- package/esm/domain/tracing/zipkinSingleTracer.js +41 -0
- package/esm/domain/tracing/zipkinSingleTracer.js.map +1 -0
- package/esm/domain/trackEventCounts.js +49 -0
- package/esm/domain/trackEventCounts.js.map +1 -0
- package/esm/domain/usr/index.js +38 -0
- package/esm/domain/usr/index.js.map +1 -0
- package/esm/domain/waitPageActivityEnd.js +142 -0
- package/esm/domain/waitPageActivityEnd.js.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/transport/startRumBatch.js +20 -0
- package/esm/transport/startRumBatch.js.map +1 -0
- package/esm/transport/startRumEventBridge.js +9 -0
- package/esm/transport/startRumEventBridge.js.map +1 -0
- package/package.json +39 -0
- package/types/index.d.ts +134 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RumPerformanceEntryType = void 0;
|
|
7
|
+
exports.createPerformanceObservable = createPerformanceObservable;
|
|
8
|
+
exports.supportPerformanceTimingEvent = supportPerformanceTimingEvent;
|
|
9
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
10
|
+
var _resourceUtils = require("./rumEventsCollection/resource/resourceUtils");
|
|
11
|
+
var _firstInputPolyfill = require("./firstInputPolyfill");
|
|
12
|
+
// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary
|
|
13
|
+
// string is an expected performance entry
|
|
14
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
15
|
+
var RumPerformanceEntryType = exports.RumPerformanceEntryType = {
|
|
16
|
+
EVENT: 'event',
|
|
17
|
+
FIRST_INPUT: 'first-input',
|
|
18
|
+
LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',
|
|
19
|
+
LAYOUT_SHIFT: 'layout-shift',
|
|
20
|
+
LONG_TASK: 'longtask',
|
|
21
|
+
LONG_ANIMATION_FRAME: 'long-animation-frame',
|
|
22
|
+
NAVIGATION: 'navigation',
|
|
23
|
+
PAINT: 'paint',
|
|
24
|
+
RESOURCE: 'resource',
|
|
25
|
+
VISIBILITY_STATE: 'visibility-state'
|
|
26
|
+
};
|
|
27
|
+
function createPerformanceObservable(configuration, options) {
|
|
28
|
+
return new _browserCore.Observable(function (observable) {
|
|
29
|
+
if (!window.PerformanceObserver) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
var handlePerformanceEntries = function handlePerformanceEntries(entries) {
|
|
33
|
+
var rumPerformanceEntries = filterRumPerformanceEntries(configuration, entries);
|
|
34
|
+
if (rumPerformanceEntries.length > 0) {
|
|
35
|
+
observable.notify(rumPerformanceEntries);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var timeoutId;
|
|
39
|
+
var isObserverInitializing = true;
|
|
40
|
+
var observer = new PerformanceObserver((0, _browserCore.monitor)(function (entries) {
|
|
41
|
+
// In Safari the performance observer callback is synchronous.
|
|
42
|
+
// Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init
|
|
43
|
+
if (isObserverInitializing) {
|
|
44
|
+
timeoutId = (0, _browserCore.setTimeout)(function () {
|
|
45
|
+
handlePerformanceEntries(entries.getEntries());
|
|
46
|
+
});
|
|
47
|
+
} else {
|
|
48
|
+
handlePerformanceEntries(entries.getEntries());
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
try {
|
|
52
|
+
observer.observe(options);
|
|
53
|
+
} catch (_unused) {
|
|
54
|
+
// Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options
|
|
55
|
+
// In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes
|
|
56
|
+
// TODO: remove this fallback in the next major version
|
|
57
|
+
var fallbackSupportedEntryTypes = [RumPerformanceEntryType.RESOURCE, RumPerformanceEntryType.NAVIGATION, RumPerformanceEntryType.LONG_TASK, RumPerformanceEntryType.PAINT];
|
|
58
|
+
if ((0, _browserCore.includes)(fallbackSupportedEntryTypes, options.type)) {
|
|
59
|
+
if (options.buffered) {
|
|
60
|
+
timeoutId = (0, _browserCore.setTimeout)(function () {
|
|
61
|
+
handlePerformanceEntries(performance.getEntriesByType(options.type));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
observer.observe({
|
|
66
|
+
entryTypes: [options.type]
|
|
67
|
+
});
|
|
68
|
+
} catch (_unused2) {
|
|
69
|
+
// Old versions of Safari are throwing "entryTypes contained only unsupported types"
|
|
70
|
+
// errors when observing only unsupported entry types.
|
|
71
|
+
//
|
|
72
|
+
// We could use `supportPerformanceTimingEvent` to make sure we don't invoke
|
|
73
|
+
// `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support
|
|
74
|
+
// `Performance.supportedEntryTypes`, so doing so would lose support for these versions
|
|
75
|
+
// even if they do support the entry type.
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
isObserverInitializing = false;
|
|
81
|
+
manageResourceTimingBufferFull(configuration);
|
|
82
|
+
var stopFirstInputTiming;
|
|
83
|
+
if (!supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) && options.type === RumPerformanceEntryType.FIRST_INPUT) {
|
|
84
|
+
var _retrieveFirstInputTiming = (0, _firstInputPolyfill.retrieveFirstInputTiming)(configuration, function (timing) {
|
|
85
|
+
handlePerformanceEntries([timing]);
|
|
86
|
+
});
|
|
87
|
+
stopFirstInputTiming = _retrieveFirstInputTiming.stop;
|
|
88
|
+
}
|
|
89
|
+
return function () {
|
|
90
|
+
observer.disconnect();
|
|
91
|
+
if (stopFirstInputTiming) {
|
|
92
|
+
stopFirstInputTiming();
|
|
93
|
+
}
|
|
94
|
+
(0, _browserCore.clearTimeout)(timeoutId);
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
var resourceTimingBufferFullListener;
|
|
99
|
+
function manageResourceTimingBufferFull(configuration) {
|
|
100
|
+
if (!resourceTimingBufferFullListener && supportPerformanceObject() && 'addEventListener' in performance) {
|
|
101
|
+
// https://bugzilla.mozilla.org/show_bug.cgi?id=1559377
|
|
102
|
+
resourceTimingBufferFullListener = (0, _browserCore.addEventListener)(performance, 'resourcetimingbufferfull', function () {
|
|
103
|
+
performance.clearResourceTimings();
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return function () {
|
|
107
|
+
resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop();
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function supportPerformanceObject() {
|
|
111
|
+
return window.performance !== undefined && 'getEntries' in performance;
|
|
112
|
+
}
|
|
113
|
+
function supportPerformanceTimingEvent(entryType) {
|
|
114
|
+
return window.PerformanceObserver && PerformanceObserver.supportedEntryTypes !== undefined && PerformanceObserver.supportedEntryTypes.includes(entryType);
|
|
115
|
+
}
|
|
116
|
+
function filterRumPerformanceEntries(configuration, entries) {
|
|
117
|
+
return entries.filter(function (entry) {
|
|
118
|
+
return !isForbiddenResource(configuration, entry);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function isForbiddenResource(configuration, entry) {
|
|
122
|
+
return entry.entryType === RumPerformanceEntryType.RESOURCE && (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, entry.name) || !(0, _resourceUtils.hasValidResourceEntryDuration)(entry));
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=performanceObservable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceObservable.js","names":["_browserCore","require","_resourceUtils","_firstInputPolyfill","RumPerformanceEntryType","exports","EVENT","FIRST_INPUT","LARGEST_CONTENTFUL_PAINT","LAYOUT_SHIFT","LONG_TASK","LONG_ANIMATION_FRAME","NAVIGATION","PAINT","RESOURCE","VISIBILITY_STATE","createPerformanceObservable","configuration","options","Observable","observable","window","PerformanceObserver","handlePerformanceEntries","entries","rumPerformanceEntries","filterRumPerformanceEntries","length","notify","timeoutId","isObserverInitializing","observer","monitor","setTimeout","getEntries","observe","_unused","fallbackSupportedEntryTypes","includes","type","buffered","performance","getEntriesByType","entryTypes","_unused2","manageResourceTimingBufferFull","stopFirstInputTiming","supportPerformanceTimingEvent","_retrieveFirstInputTiming","retrieveFirstInputTiming","timing","stop","disconnect","clearTimeout","resourceTimingBufferFullListener","supportPerformanceObject","addEventListener","clearResourceTimings","undefined","entryType","supportedEntryTypes","filter","entry","isForbiddenResource","isAllowedRequestUrl","name","hasValidResourceEntryDuration"],"sources":["../../../rum/src/domain/performanceObservable.js"],"sourcesContent":["import {\n addEventListener,\n Observable,\n setTimeout,\n clearTimeout,\n monitor,\n includes\n} from '@cloudcare/browser-core'\nimport {\n isAllowedRequestUrl,\n hasValidResourceEntryDuration\n} from './rumEventsCollection/resource/resourceUtils'\nimport { retrieveFirstInputTiming } from './firstInputPolyfill'\n// We want to use a real enum (i.e. not a const enum) here, to be able to check whether an arbitrary\n// string is an expected performance entry\n// eslint-disable-next-line no-restricted-syntax\nexport var RumPerformanceEntryType = {\n EVENT: 'event',\n FIRST_INPUT: 'first-input',\n LARGEST_CONTENTFUL_PAINT: 'largest-contentful-paint',\n LAYOUT_SHIFT: 'layout-shift',\n LONG_TASK: 'longtask',\n LONG_ANIMATION_FRAME: 'long-animation-frame',\n NAVIGATION: 'navigation',\n PAINT: 'paint',\n RESOURCE: 'resource',\n VISIBILITY_STATE: 'visibility-state'\n}\n\nexport function createPerformanceObservable(configuration, options) {\n return new Observable(function (observable) {\n if (!window.PerformanceObserver) {\n return\n }\n var handlePerformanceEntries = function (entries) {\n var rumPerformanceEntries = filterRumPerformanceEntries(\n configuration,\n entries\n )\n if (rumPerformanceEntries.length > 0) {\n observable.notify(rumPerformanceEntries)\n }\n }\n\n var timeoutId\n var isObserverInitializing = true\n\n const observer = new PerformanceObserver(\n monitor(function (entries) {\n // In Safari the performance observer callback is synchronous.\n // Because the buffered performance entry list can be quite large we delay the computation to prevent the SDK from blocking the main thread on init\n if (isObserverInitializing) {\n timeoutId = setTimeout(function () {\n handlePerformanceEntries(entries.getEntries())\n })\n } else {\n handlePerformanceEntries(entries.getEntries())\n }\n })\n )\n\n try {\n observer.observe(options)\n } catch {\n // Some old browser versions (<= chrome 74 ) don't support the PerformanceObserver type and buffered options\n // In these cases, fallback to getEntriesByType and PerformanceObserver with entryTypes\n // TODO: remove this fallback in the next major version\n var fallbackSupportedEntryTypes = [\n RumPerformanceEntryType.RESOURCE,\n RumPerformanceEntryType.NAVIGATION,\n RumPerformanceEntryType.LONG_TASK,\n RumPerformanceEntryType.PAINT\n ]\n if (includes(fallbackSupportedEntryTypes, options.type)) {\n if (options.buffered) {\n timeoutId = setTimeout(function () {\n handlePerformanceEntries(performance.getEntriesByType(options.type))\n })\n }\n try {\n observer.observe({ entryTypes: [options.type] })\n } catch {\n // Old versions of Safari are throwing \"entryTypes contained only unsupported types\"\n // errors when observing only unsupported entry types.\n //\n // We could use `supportPerformanceTimingEvent` to make sure we don't invoke\n // `observer.observe` with an unsupported entry type, but Safari 11 and 12 don't support\n // `Performance.supportedEntryTypes`, so doing so would lose support for these versions\n // even if they do support the entry type.\n return\n }\n }\n }\n isObserverInitializing = false\n\n manageResourceTimingBufferFull(configuration)\n var stopFirstInputTiming\n if (\n !supportPerformanceTimingEvent(RumPerformanceEntryType.FIRST_INPUT) &&\n options.type === RumPerformanceEntryType.FIRST_INPUT\n ) {\n var _retrieveFirstInputTiming = retrieveFirstInputTiming(\n configuration,\n function (timing) {\n handlePerformanceEntries([timing])\n }\n )\n stopFirstInputTiming = _retrieveFirstInputTiming.stop\n }\n return function () {\n observer.disconnect()\n if (stopFirstInputTiming) {\n stopFirstInputTiming()\n }\n clearTimeout(timeoutId)\n }\n })\n}\n\nvar resourceTimingBufferFullListener\nfunction manageResourceTimingBufferFull(configuration) {\n if (\n !resourceTimingBufferFullListener &&\n supportPerformanceObject() &&\n 'addEventListener' in performance\n ) {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1559377\n resourceTimingBufferFullListener = addEventListener(\n performance,\n 'resourcetimingbufferfull',\n function () {\n performance.clearResourceTimings()\n }\n )\n }\n return function () {\n resourceTimingBufferFullListener && resourceTimingBufferFullListener.stop()\n }\n}\n\nfunction supportPerformanceObject() {\n return window.performance !== undefined && 'getEntries' in performance\n}\n\nexport function supportPerformanceTimingEvent(entryType) {\n return (\n window.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes !== undefined &&\n PerformanceObserver.supportedEntryTypes.includes(entryType)\n )\n}\n\nfunction filterRumPerformanceEntries(configuration, entries) {\n return entries.filter(function (entry) {\n return !isForbiddenResource(configuration, entry)\n })\n}\n\nfunction isForbiddenResource(configuration, entry) {\n return (\n entry.entryType === RumPerformanceEntryType.RESOURCE &&\n (!isAllowedRequestUrl(configuration, entry.name) ||\n !hasValidResourceEntryDuration(entry))\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.computeTimingsFromDeprecatedPerformanceTiming = computeTimingsFromDeprecatedPerformanceTiming;
|
|
7
|
+
exports.getNavigationEntry = getNavigationEntry;
|
|
8
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
9
|
+
var _performanceObservable = require("./performanceObservable");
|
|
10
|
+
function getNavigationEntry() {
|
|
11
|
+
if ((0, _performanceObservable.supportPerformanceTimingEvent)(_performanceObservable.RumPerformanceEntryType.NAVIGATION)) {
|
|
12
|
+
var navigationEntry = performance.getEntriesByType(_performanceObservable.RumPerformanceEntryType.NAVIGATION)[0];
|
|
13
|
+
if (navigationEntry) {
|
|
14
|
+
return navigationEntry;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
var timings = computeTimingsFromDeprecatedPerformanceTiming();
|
|
18
|
+
var entry = (0, _browserCore.assign)({
|
|
19
|
+
entryType: _performanceObservable.RumPerformanceEntryType.NAVIGATION,
|
|
20
|
+
initiatorType: 'navigation',
|
|
21
|
+
name: window.location.href,
|
|
22
|
+
startTime: 0,
|
|
23
|
+
duration: timings.responseEnd,
|
|
24
|
+
decodedBodySize: 0,
|
|
25
|
+
encodedBodySize: 0,
|
|
26
|
+
transferSize: 0,
|
|
27
|
+
toJSON: function toJSON() {
|
|
28
|
+
return (0, _browserCore.assign)({}, entry, {
|
|
29
|
+
toJSON: undefined
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}, timings);
|
|
33
|
+
return entry;
|
|
34
|
+
}
|
|
35
|
+
function computeTimingsFromDeprecatedPerformanceTiming() {
|
|
36
|
+
var result = {};
|
|
37
|
+
var timing = performance.timing;
|
|
38
|
+
for (var key in timing) {
|
|
39
|
+
if ((0, _browserCore.isNumber)(timing[key])) {
|
|
40
|
+
var numberKey = key;
|
|
41
|
+
var timingElement = timing[numberKey];
|
|
42
|
+
result[numberKey] = timingElement === 0 ? 0 : (0, _browserCore.getRelativeTime)(timingElement);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=performanceUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performanceUtils.js","names":["_browserCore","require","_performanceObservable","getNavigationEntry","supportPerformanceTimingEvent","RumPerformanceEntryType","NAVIGATION","navigationEntry","performance","getEntriesByType","timings","computeTimingsFromDeprecatedPerformanceTiming","entry","assign","entryType","initiatorType","name","window","location","href","startTime","duration","responseEnd","decodedBodySize","encodedBodySize","transferSize","toJSON","undefined","result","timing","key","isNumber","numberKey","timingElement","getRelativeTime"],"sources":["../../../rum/src/domain/performanceUtils.js"],"sourcesContent":["import { getRelativeTime, isNumber, assign } from '@cloudcare/browser-core'\nimport {\n supportPerformanceTimingEvent,\n RumPerformanceEntryType\n} from './performanceObservable'\n\nexport function getNavigationEntry() {\n if (supportPerformanceTimingEvent(RumPerformanceEntryType.NAVIGATION)) {\n var navigationEntry = performance.getEntriesByType(\n RumPerformanceEntryType.NAVIGATION\n )[0]\n if (navigationEntry) {\n return navigationEntry\n }\n }\n\n var timings = computeTimingsFromDeprecatedPerformanceTiming()\n var entry = assign(\n {\n entryType: RumPerformanceEntryType.NAVIGATION,\n initiatorType: 'navigation',\n name: window.location.href,\n startTime: 0,\n duration: timings.responseEnd,\n decodedBodySize: 0,\n encodedBodySize: 0,\n transferSize: 0,\n toJSON: function () {\n return assign({}, entry, { toJSON: undefined })\n }\n },\n timings\n )\n return entry\n}\n\nexport function computeTimingsFromDeprecatedPerformanceTiming() {\n var result = {}\n var timing = performance.timing\n\n for (var key in timing) {\n if (isNumber(timing[key])) {\n var numberKey = key\n var timingElement = timing[numberKey]\n result[numberKey] =\n timingElement === 0 ? 0 : getRelativeTime(timingElement)\n }\n }\n return result\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AAKO,SAASE,kBAAkBA,CAAA,EAAG;EACnC,IAAI,IAAAC,oDAA6B,EAACC,8CAAuB,CAACC,UAAU,CAAC,EAAE;IACrE,IAAIC,eAAe,GAAGC,WAAW,CAACC,gBAAgB,CAChDJ,8CAAuB,CAACC,UAC1B,CAAC,CAAC,CAAC,CAAC;IACJ,IAAIC,eAAe,EAAE;MACnB,OAAOA,eAAe;IACxB;EACF;EAEA,IAAIG,OAAO,GAAGC,6CAA6C,CAAC,CAAC;EAC7D,IAAIC,KAAK,GAAG,IAAAC,mBAAM,EAChB;IACEC,SAAS,EAAET,8CAAuB,CAACC,UAAU;IAC7CS,aAAa,EAAE,YAAY;IAC3BC,IAAI,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI;IAC1BC,SAAS,EAAE,CAAC;IACZC,QAAQ,EAAEX,OAAO,CAACY,WAAW;IAC7BC,eAAe,EAAE,CAAC;IAClBC,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;MAClB,OAAO,IAAAb,mBAAM,EAAC,CAAC,CAAC,EAAED,KAAK,EAAE;QAAEc,MAAM,EAAEC;MAAU,CAAC,CAAC;IACjD;EACF,CAAC,EACDjB,OACF,CAAC;EACD,OAAOE,KAAK;AACd;AAEO,SAASD,6CAA6CA,CAAA,EAAG;EAC9D,IAAIiB,MAAM,GAAG,CAAC,CAAC;EACf,IAAIC,MAAM,GAAGrB,WAAW,CAACqB,MAAM;EAE/B,KAAK,IAAIC,GAAG,IAAID,MAAM,EAAE;IACtB,IAAI,IAAAE,qBAAQ,EAACF,MAAM,CAACC,GAAG,CAAC,CAAC,EAAE;MACzB,IAAIE,SAAS,GAAGF,GAAG;MACnB,IAAIG,aAAa,GAAGJ,MAAM,CAACG,SAAS,CAAC;MACrCJ,MAAM,CAACI,SAAS,CAAC,GACfC,aAAa,KAAK,CAAC,GAAG,CAAC,GAAG,IAAAC,4BAAe,EAACD,aAAa,CAAC;IAC5D;EACF;EACA,OAAOL,MAAM;AACf","ignoreList":[]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startRequestCollection = startRequestCollection;
|
|
7
|
+
exports.trackFetch = trackFetch;
|
|
8
|
+
exports.trackXhr = trackXhr;
|
|
9
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
10
|
+
var _resourceUtils = require("./rumEventsCollection/resource/resourceUtils");
|
|
11
|
+
var _tracer = require("./tracing/tracer");
|
|
12
|
+
var nextRequestIndex = 1;
|
|
13
|
+
function startRequestCollection(lifeCycle, configuration, sessionManager) {
|
|
14
|
+
var tracer = (0, _tracer.startTracer)(configuration, sessionManager);
|
|
15
|
+
trackXhr(lifeCycle, configuration, tracer);
|
|
16
|
+
trackFetch(lifeCycle, configuration, tracer);
|
|
17
|
+
}
|
|
18
|
+
function trackXhr(lifeCycle, configuration, tracer) {
|
|
19
|
+
var subscription = (0, _browserCore.initXhrObservable)().subscribe(function (rawContext) {
|
|
20
|
+
var context = rawContext;
|
|
21
|
+
if (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, context.url)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
switch (context.state) {
|
|
25
|
+
case 'start':
|
|
26
|
+
tracer.traceXhr(context, context.xhr);
|
|
27
|
+
context.requestIndex = getNextRequestIndex();
|
|
28
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_STARTED, {
|
|
29
|
+
requestIndex: context.requestIndex,
|
|
30
|
+
url: context.url
|
|
31
|
+
});
|
|
32
|
+
break;
|
|
33
|
+
case 'complete':
|
|
34
|
+
tracer.clearTracingIfNeeded(context);
|
|
35
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, {
|
|
36
|
+
duration: context.duration,
|
|
37
|
+
method: context.method,
|
|
38
|
+
requestIndex: context.requestIndex,
|
|
39
|
+
spanId: context.spanId,
|
|
40
|
+
startClocks: context.startClocks,
|
|
41
|
+
status: context.status,
|
|
42
|
+
traceId: context.traceId,
|
|
43
|
+
traceSampled: context.traceSampled,
|
|
44
|
+
type: _browserCore.RequestType.XHR,
|
|
45
|
+
url: context.url,
|
|
46
|
+
xhr: context.xhr,
|
|
47
|
+
isAborted: context.isAborted,
|
|
48
|
+
requestHeaderContexts: context.requestHeaderContexts,
|
|
49
|
+
handlingStack: context.handlingStack
|
|
50
|
+
});
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
stop: function stop() {
|
|
56
|
+
return subscription.unsubscribe();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function trackFetch(lifeCycle, configuration, tracer) {
|
|
61
|
+
var subscription = (0, _browserCore.initFetchObservable)().subscribe(function (rawContext) {
|
|
62
|
+
var context = rawContext;
|
|
63
|
+
if (!(0, _resourceUtils.isAllowedRequestUrl)(configuration, context.url)) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
switch (context.state) {
|
|
67
|
+
case 'start':
|
|
68
|
+
tracer.traceFetch(context);
|
|
69
|
+
context.requestIndex = getNextRequestIndex();
|
|
70
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_STARTED, {
|
|
71
|
+
requestIndex: context.requestIndex,
|
|
72
|
+
url: context.url
|
|
73
|
+
});
|
|
74
|
+
break;
|
|
75
|
+
case 'resolve':
|
|
76
|
+
waitForResponseToComplete(context, function (duration) {
|
|
77
|
+
var _context$init;
|
|
78
|
+
tracer.clearTracingIfNeeded(context);
|
|
79
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.REQUEST_COMPLETED, {
|
|
80
|
+
duration: duration,
|
|
81
|
+
method: context.method,
|
|
82
|
+
requestIndex: context.requestIndex,
|
|
83
|
+
responseType: context.responseType,
|
|
84
|
+
spanId: context.spanId,
|
|
85
|
+
startClocks: context.startClocks,
|
|
86
|
+
status: context.status,
|
|
87
|
+
traceId: context.traceId,
|
|
88
|
+
traceSampled: context.traceSampled,
|
|
89
|
+
requestHeaderContexts: ((_context$init = context.init) === null || _context$init === void 0 ? void 0 : _context$init.headers) || (context.input instanceof Request ? context.input.headers : undefined),
|
|
90
|
+
type: _browserCore.RequestType.FETCH,
|
|
91
|
+
url: context.url,
|
|
92
|
+
response: context.response,
|
|
93
|
+
init: context.init,
|
|
94
|
+
input: context.input,
|
|
95
|
+
isAborted: context.isAborted,
|
|
96
|
+
handlingStack: context.handlingStack
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
stop: function stop() {
|
|
104
|
+
return subscription.unsubscribe();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function getNextRequestIndex() {
|
|
109
|
+
var result = nextRequestIndex;
|
|
110
|
+
nextRequestIndex += 1;
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
function waitForResponseToComplete(context, callback) {
|
|
114
|
+
var clonedResponse = context.response && (0, _browserCore.tryToClone)(context.response);
|
|
115
|
+
if (!clonedResponse || !clonedResponse.body) {
|
|
116
|
+
// do not try to wait for the response if the clone failed, fetch error or null body
|
|
117
|
+
callback((0, _browserCore.elapsed)(context.startClocks.timeStamp, (0, _browserCore.timeStampNow)()));
|
|
118
|
+
} else {
|
|
119
|
+
(0, _browserCore.readBytesFromStream)(clonedResponse.body, function () {
|
|
120
|
+
callback((0, _browserCore.elapsed)(context.startClocks.timeStamp, (0, _browserCore.timeStampNow)()));
|
|
121
|
+
}, {
|
|
122
|
+
bytesLimit: Number.POSITIVE_INFINITY,
|
|
123
|
+
collectStreamBody: false
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=requestCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCollection.js","names":["_browserCore","require","_resourceUtils","_tracer","nextRequestIndex","startRequestCollection","lifeCycle","configuration","sessionManager","tracer","startTracer","trackXhr","trackFetch","subscription","initXhrObservable","subscribe","rawContext","context","isAllowedRequestUrl","url","state","traceXhr","xhr","requestIndex","getNextRequestIndex","notify","LifeCycleEventType","REQUEST_STARTED","clearTracingIfNeeded","REQUEST_COMPLETED","duration","method","spanId","startClocks","status","traceId","traceSampled","type","RequestType","XHR","isAborted","requestHeaderContexts","handlingStack","stop","unsubscribe","initFetchObservable","traceFetch","waitForResponseToComplete","_context$init","responseType","init","headers","input","Request","undefined","FETCH","response","result","callback","clonedResponse","tryToClone","body","elapsed","timeStamp","timeStampNow","readBytesFromStream","bytesLimit","Number","POSITIVE_INFINITY","collectStreamBody"],"sources":["../../../rum/src/domain/requestCollection.js"],"sourcesContent":["import {\n RequestType,\n initFetchObservable,\n initXhrObservable,\n LifeCycleEventType,\n tryToClone,\n readBytesFromStream,\n elapsed,\n timeStampNow\n} from '@cloudcare/browser-core'\nimport { isAllowedRequestUrl } from './rumEventsCollection/resource/resourceUtils'\nimport { startTracer } from './tracing/tracer'\n\nvar nextRequestIndex = 1\n\nexport function startRequestCollection(\n lifeCycle,\n configuration,\n sessionManager\n) {\n var tracer = startTracer(configuration, sessionManager)\n trackXhr(lifeCycle, configuration, tracer)\n trackFetch(lifeCycle, configuration, tracer)\n}\n\nexport function trackXhr(lifeCycle, configuration, tracer) {\n var subscription = initXhrObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceXhr(context, context.xhr)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'complete':\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: context.duration,\n method: context.method,\n requestIndex: context.requestIndex,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n type: RequestType.XHR,\n url: context.url,\n xhr: context.xhr,\n isAborted: context.isAborted,\n requestHeaderContexts: context.requestHeaderContexts,\n handlingStack: context.handlingStack\n })\n break\n }\n })\n\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nexport function trackFetch(lifeCycle, configuration, tracer) {\n var subscription = initFetchObservable().subscribe(function (rawContext) {\n var context = rawContext\n if (!isAllowedRequestUrl(configuration, context.url)) {\n return\n }\n\n switch (context.state) {\n case 'start':\n tracer.traceFetch(context)\n context.requestIndex = getNextRequestIndex()\n\n lifeCycle.notify(LifeCycleEventType.REQUEST_STARTED, {\n requestIndex: context.requestIndex,\n url: context.url\n })\n break\n case 'resolve':\n waitForResponseToComplete(context, function (duration) {\n tracer.clearTracingIfNeeded(context)\n lifeCycle.notify(LifeCycleEventType.REQUEST_COMPLETED, {\n duration: duration,\n method: context.method,\n requestIndex: context.requestIndex,\n responseType: context.responseType,\n spanId: context.spanId,\n startClocks: context.startClocks,\n status: context.status,\n traceId: context.traceId,\n traceSampled: context.traceSampled,\n requestHeaderContexts:\n context.init?.headers ||\n (context.input instanceof Request\n ? context.input.headers\n : undefined),\n type: RequestType.FETCH,\n url: context.url,\n response: context.response,\n init: context.init,\n input: context.input,\n isAborted: context.isAborted,\n handlingStack: context.handlingStack\n })\n })\n break\n }\n })\n return {\n stop: function () {\n return subscription.unsubscribe()\n }\n }\n}\n\nfunction getNextRequestIndex() {\n var result = nextRequestIndex\n nextRequestIndex += 1\n return result\n}\n\nfunction waitForResponseToComplete(context, callback) {\n var clonedResponse = context.response && tryToClone(context.response)\n if (!clonedResponse || !clonedResponse.body) {\n // do not try to wait for the response if the clone failed, fetch error or null body\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n } else {\n readBytesFromStream(\n clonedResponse.body,\n function () {\n callback(elapsed(context.startClocks.timeStamp, timeStampNow()))\n },\n {\n bytesLimit: Number.POSITIVE_INFINITY,\n collectStreamBody: false\n }\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.startActionCollection = startActionCollection;
|
|
7
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
8
|
+
var _trackClickActions = require("./trackClickActions");
|
|
9
|
+
var _pageStateHistory = require("../../contexts/pageStateHistory");
|
|
10
|
+
function startActionCollection(lifeCycle, domMutationObservable, configuration, pageStateHistory) {
|
|
11
|
+
lifeCycle.subscribe(_browserCore.LifeCycleEventType.AUTO_ACTION_COMPLETED, function (action) {
|
|
12
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, processAction(action, pageStateHistory));
|
|
13
|
+
});
|
|
14
|
+
var actionContexts = {
|
|
15
|
+
findActionId: _browserCore.noop,
|
|
16
|
+
findAllActionId: _browserCore.noop
|
|
17
|
+
};
|
|
18
|
+
if (configuration.trackUserInteractions) {
|
|
19
|
+
actionContexts = (0, _trackClickActions.trackClickActions)(lifeCycle, domMutationObservable, configuration).actionContexts;
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
actionContexts: actionContexts,
|
|
23
|
+
addAction: function addAction(action, savedCommonContext) {
|
|
24
|
+
lifeCycle.notify(_browserCore.LifeCycleEventType.RAW_RUM_EVENT_COLLECTED, (0, _browserCore.extend)({
|
|
25
|
+
savedCommonContext: savedCommonContext
|
|
26
|
+
}, processAction(action, pageStateHistory)));
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function processAction(action, pageStateHistory) {
|
|
31
|
+
var _action$context;
|
|
32
|
+
var autoActionProperties = isAutoAction(action) ? {
|
|
33
|
+
action: {
|
|
34
|
+
error: {
|
|
35
|
+
count: action.counts.errorCount
|
|
36
|
+
},
|
|
37
|
+
id: action.id,
|
|
38
|
+
loadingTime: (0, _browserCore.discardNegativeDuration)((0, _browserCore.toServerDuration)(action.duration)),
|
|
39
|
+
frustration: {
|
|
40
|
+
type: action.frustrationTypes
|
|
41
|
+
},
|
|
42
|
+
long_task: {
|
|
43
|
+
count: action.counts.longTaskCount
|
|
44
|
+
},
|
|
45
|
+
resource: {
|
|
46
|
+
count: action.counts.resourceCount
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
_gc: {
|
|
50
|
+
action: {
|
|
51
|
+
target: action.target,
|
|
52
|
+
position: action.position
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} : {
|
|
56
|
+
action: {
|
|
57
|
+
loadingTime: ((_action$context = action.context) === null || _action$context === void 0 ? void 0 : _action$context.duration) || 0
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
var customerContext = !isAutoAction(action) ? action.context : undefined;
|
|
61
|
+
var actionEvent = (0, _browserCore.extend2Lev)({
|
|
62
|
+
action: {
|
|
63
|
+
id: (0, _browserCore.UUID)(),
|
|
64
|
+
target: {
|
|
65
|
+
name: action.name
|
|
66
|
+
},
|
|
67
|
+
type: action.type
|
|
68
|
+
},
|
|
69
|
+
date: action.startClocks.timeStamp,
|
|
70
|
+
type: _browserCore.RumEventType.ACTION,
|
|
71
|
+
view: {
|
|
72
|
+
in_foreground: pageStateHistory.wasInPageStateAt(_pageStateHistory.PageState.ACTIVE, action.startClocks.relative)
|
|
73
|
+
}
|
|
74
|
+
}, autoActionProperties);
|
|
75
|
+
return {
|
|
76
|
+
customerContext: customerContext,
|
|
77
|
+
rawRumEvent: actionEvent,
|
|
78
|
+
startTime: action.startClocks.relative,
|
|
79
|
+
domainContext: isAutoAction(action) ? {
|
|
80
|
+
event: action.event,
|
|
81
|
+
events: action.events
|
|
82
|
+
} : {}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function isAutoAction(action) {
|
|
86
|
+
return action.type === _browserCore.ActionType.CLICK;
|
|
87
|
+
// return action.type !== ActionType.CUSTOM
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=actionCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionCollection.js","names":["_browserCore","require","_trackClickActions","_pageStateHistory","startActionCollection","lifeCycle","domMutationObservable","configuration","pageStateHistory","subscribe","LifeCycleEventType","AUTO_ACTION_COMPLETED","action","notify","RAW_RUM_EVENT_COLLECTED","processAction","actionContexts","findActionId","noop","findAllActionId","trackUserInteractions","trackClickActions","addAction","savedCommonContext","extend","_action$context","autoActionProperties","isAutoAction","error","count","counts","errorCount","id","loadingTime","discardNegativeDuration","toServerDuration","duration","frustration","type","frustrationTypes","long_task","longTaskCount","resource","resourceCount","_gc","target","position","context","customerContext","undefined","actionEvent","extend2Lev","UUID","name","date","startClocks","timeStamp","RumEventType","ACTION","view","in_foreground","wasInPageStateAt","PageState","ACTIVE","relative","rawRumEvent","startTime","domainContext","event","events","ActionType","CLICK"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/actionCollection.js"],"sourcesContent":["import {\n toServerDuration,\n extend,\n extend2Lev,\n ActionType,\n RumEventType,\n LifeCycleEventType,\n UUID,\n noop,\n discardNegativeDuration\n} from '@cloudcare/browser-core'\nimport { trackClickActions } from './trackClickActions'\nimport { PageState } from '../../contexts/pageStateHistory'\nexport function startActionCollection(\n lifeCycle,\n domMutationObservable,\n configuration,\n pageStateHistory\n) {\n lifeCycle.subscribe(\n LifeCycleEventType.AUTO_ACTION_COMPLETED,\n function (action) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n processAction(action, pageStateHistory)\n )\n }\n )\n\n var actionContexts = { findActionId: noop, findAllActionId: noop }\n if (configuration.trackUserInteractions) {\n actionContexts = trackClickActions(\n lifeCycle,\n domMutationObservable,\n configuration\n ).actionContexts\n }\n return {\n actionContexts: actionContexts,\n addAction: function (action, savedCommonContext) {\n lifeCycle.notify(\n LifeCycleEventType.RAW_RUM_EVENT_COLLECTED,\n extend(\n { savedCommonContext: savedCommonContext },\n processAction(action, pageStateHistory)\n )\n )\n }\n }\n}\n\nfunction processAction(action, pageStateHistory) {\n var autoActionProperties = isAutoAction(action)\n ? {\n action: {\n error: {\n count: action.counts.errorCount\n },\n id: action.id,\n loadingTime: discardNegativeDuration(\n toServerDuration(action.duration)\n ),\n frustration: {\n type: action.frustrationTypes\n },\n long_task: {\n count: action.counts.longTaskCount\n },\n resource: {\n count: action.counts.resourceCount\n }\n },\n _gc: {\n action: {\n target: action.target,\n position: action.position\n }\n }\n }\n : {\n action: {\n loadingTime: action.context?.duration || 0\n }\n }\n var customerContext = !isAutoAction(action) ? action.context : undefined\n var actionEvent = extend2Lev(\n {\n action: {\n id: UUID(),\n target: {\n name: action.name\n },\n type: action.type\n },\n date: action.startClocks.timeStamp,\n type: RumEventType.ACTION,\n view: {\n in_foreground: pageStateHistory.wasInPageStateAt(\n PageState.ACTIVE,\n action.startClocks.relative\n )\n }\n },\n autoActionProperties\n )\n\n return {\n customerContext: customerContext,\n rawRumEvent: actionEvent,\n startTime: action.startClocks.relative,\n domainContext: isAutoAction(action)\n ? { event: action.event, events: action.events }\n : {}\n }\n}\n\nfunction isAutoAction(action) {\n return action.type === ActionType.CLICK\n // return action.type !== ActionType.CUSTOM\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MAX_DURATION_BETWEEN_CLICKS = exports.MAX_DISTANCE_BETWEEN_CLICKS = void 0;
|
|
7
|
+
exports.createClickChain = createClickChain;
|
|
8
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
9
|
+
var MAX_DURATION_BETWEEN_CLICKS = exports.MAX_DURATION_BETWEEN_CLICKS = _browserCore.ONE_SECOND;
|
|
10
|
+
var MAX_DISTANCE_BETWEEN_CLICKS = exports.MAX_DISTANCE_BETWEEN_CLICKS = 100;
|
|
11
|
+
var ClickChainStatus = {
|
|
12
|
+
WaitingForMoreClicks: 0,
|
|
13
|
+
WaitingForClicksToStop: 1,
|
|
14
|
+
Finalized: 2
|
|
15
|
+
};
|
|
16
|
+
function createClickChain(firstClick, onFinalize) {
|
|
17
|
+
var bufferedClicks = [];
|
|
18
|
+
var status = ClickChainStatus.WaitingForMoreClicks;
|
|
19
|
+
var maxDurationBetweenClicksTimeout;
|
|
20
|
+
appendClick(firstClick);
|
|
21
|
+
function appendClick(click) {
|
|
22
|
+
click.stopObservable.subscribe(tryFinalize);
|
|
23
|
+
bufferedClicks.push(click);
|
|
24
|
+
(0, _browserCore.clearTimeout)(maxDurationBetweenClicksTimeout);
|
|
25
|
+
maxDurationBetweenClicksTimeout = (0, _browserCore.setTimeout)(dontAcceptMoreClick, MAX_DURATION_BETWEEN_CLICKS);
|
|
26
|
+
}
|
|
27
|
+
function tryFinalize() {
|
|
28
|
+
if (status === ClickChainStatus.WaitingForClicksToStop && (0, _browserCore.every)(bufferedClicks, function (click) {
|
|
29
|
+
return click.isStopped();
|
|
30
|
+
})) {
|
|
31
|
+
status = ClickChainStatus.Finalized;
|
|
32
|
+
onFinalize(bufferedClicks);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function dontAcceptMoreClick() {
|
|
36
|
+
(0, _browserCore.clearTimeout)(maxDurationBetweenClicksTimeout);
|
|
37
|
+
if (status === ClickChainStatus.WaitingForMoreClicks) {
|
|
38
|
+
status = ClickChainStatus.WaitingForClicksToStop;
|
|
39
|
+
tryFinalize();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
tryAppend: function tryAppend(click) {
|
|
44
|
+
if (status !== ClickChainStatus.WaitingForMoreClicks) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
if (bufferedClicks.length > 0 && !areEventsSimilar(bufferedClicks[bufferedClicks.length - 1].event, click.event)) {
|
|
48
|
+
dontAcceptMoreClick();
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
appendClick(click);
|
|
52
|
+
return true;
|
|
53
|
+
},
|
|
54
|
+
stop: function stop() {
|
|
55
|
+
dontAcceptMoreClick();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Checks whether two events are similar by comparing their target, position and timestamp
|
|
62
|
+
*/
|
|
63
|
+
function areEventsSimilar(first, second) {
|
|
64
|
+
return first.target === second.target && mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS && second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS;
|
|
65
|
+
}
|
|
66
|
+
function mouseEventDistance(origin, other) {
|
|
67
|
+
return Math.sqrt(Math.pow(origin.clientX - other.clientX, 2) + Math.pow(origin.clientY - other.clientY, 2));
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=clickChain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickChain.js","names":["_browserCore","require","MAX_DURATION_BETWEEN_CLICKS","exports","ONE_SECOND","MAX_DISTANCE_BETWEEN_CLICKS","ClickChainStatus","WaitingForMoreClicks","WaitingForClicksToStop","Finalized","createClickChain","firstClick","onFinalize","bufferedClicks","status","maxDurationBetweenClicksTimeout","appendClick","click","stopObservable","subscribe","tryFinalize","push","clearTimeout","setTimeout","dontAcceptMoreClick","every","isStopped","tryAppend","length","areEventsSimilar","event","stop","first","second","target","mouseEventDistance","timeStamp","origin","other","Math","sqrt","pow","clientX","clientY"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/clickChain.js"],"sourcesContent":["import {\n ONE_SECOND,\n every,\n setTimeout,\n clearTimeout\n} from '@cloudcare/browser-core'\n\nexport var MAX_DURATION_BETWEEN_CLICKS = ONE_SECOND\nexport var MAX_DISTANCE_BETWEEN_CLICKS = 100\n\nvar ClickChainStatus = {\n WaitingForMoreClicks: 0,\n WaitingForClicksToStop: 1,\n Finalized: 2\n}\n\nexport function createClickChain(firstClick, onFinalize) {\n var bufferedClicks = []\n var status = ClickChainStatus.WaitingForMoreClicks\n var maxDurationBetweenClicksTimeout\n appendClick(firstClick)\n\n function appendClick(click) {\n click.stopObservable.subscribe(tryFinalize)\n bufferedClicks.push(click)\n clearTimeout(maxDurationBetweenClicksTimeout)\n maxDurationBetweenClicksTimeout = setTimeout(\n dontAcceptMoreClick,\n MAX_DURATION_BETWEEN_CLICKS\n )\n }\n\n function tryFinalize() {\n if (\n status === ClickChainStatus.WaitingForClicksToStop &&\n every(bufferedClicks, function (click) {\n return click.isStopped()\n })\n ) {\n status = ClickChainStatus.Finalized\n onFinalize(bufferedClicks)\n }\n }\n\n function dontAcceptMoreClick() {\n clearTimeout(maxDurationBetweenClicksTimeout)\n if (status === ClickChainStatus.WaitingForMoreClicks) {\n status = ClickChainStatus.WaitingForClicksToStop\n tryFinalize()\n }\n }\n\n return {\n tryAppend: function (click) {\n if (status !== ClickChainStatus.WaitingForMoreClicks) {\n return false\n }\n\n if (\n bufferedClicks.length > 0 &&\n !areEventsSimilar(\n bufferedClicks[bufferedClicks.length - 1].event,\n click.event\n )\n ) {\n dontAcceptMoreClick()\n return false\n }\n\n appendClick(click)\n return true\n },\n stop: function () {\n dontAcceptMoreClick()\n }\n }\n}\n\n/**\n * Checks whether two events are similar by comparing their target, position and timestamp\n */\nfunction areEventsSimilar(first, second) {\n return (\n first.target === second.target &&\n mouseEventDistance(first, second) <= MAX_DISTANCE_BETWEEN_CLICKS &&\n second.timeStamp - first.timeStamp <= MAX_DURATION_BETWEEN_CLICKS\n )\n}\n\nfunction mouseEventDistance(origin, other) {\n return Math.sqrt(\n Math.pow(origin.clientX - other.clientX, 2) +\n Math.pow(origin.clientY - other.clientY, 2)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.computeFrustration = computeFrustration;
|
|
7
|
+
exports.isDead = isDead;
|
|
8
|
+
exports.isRage = isRage;
|
|
9
|
+
var _browserCore = require("@cloudcare/browser-core");
|
|
10
|
+
var MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3;
|
|
11
|
+
function computeFrustration(clicks, rageClick) {
|
|
12
|
+
if (isRage(clicks)) {
|
|
13
|
+
rageClick.addFrustration(_browserCore.FrustrationType.RAGE_CLICK);
|
|
14
|
+
if ((0, _browserCore.some)(clicks, isDead)) {
|
|
15
|
+
rageClick.addFrustration(_browserCore.FrustrationType.DEAD_CLICK);
|
|
16
|
+
}
|
|
17
|
+
if (rageClick.hasError()) {
|
|
18
|
+
rageClick.addFrustration(_browserCore.FrustrationType.ERROR_CLICK);
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
isRage: true
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
var hasSelectionChanged = (0, _browserCore.some)(clicks, function (click) {
|
|
25
|
+
return click.getUserActivity().selection;
|
|
26
|
+
});
|
|
27
|
+
(0, _browserCore.each)(clicks, function (click) {
|
|
28
|
+
if (click.hasError()) {
|
|
29
|
+
click.addFrustration(_browserCore.FrustrationType.ERROR_CLICK);
|
|
30
|
+
}
|
|
31
|
+
if (isDead(click) &&
|
|
32
|
+
// Avoid considering clicks part of a double-click or triple-click selections as dead clicks
|
|
33
|
+
!hasSelectionChanged) {
|
|
34
|
+
click.addFrustration(_browserCore.FrustrationType.DEAD_CLICK);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
isRage: false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function isRage(clicks) {
|
|
42
|
+
if ((0, _browserCore.some)(clicks, function (click) {
|
|
43
|
+
return click.getUserActivity().selection || click.getUserActivity().scroll;
|
|
44
|
+
})) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
for (var i = 0; i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1); i += 1) {
|
|
48
|
+
if (clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp - clicks[i].event.timeStamp <= _browserCore.ONE_SECOND) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
var DEAD_CLICK_EXCLUDE_SELECTOR =
|
|
55
|
+
// inputs that don't trigger a meaningful event like "input" when clicked, including textual
|
|
56
|
+
// inputs (using a negative selector is shorter here)
|
|
57
|
+
'input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="range"]),' + 'textarea,' + 'select,' +
|
|
58
|
+
// contenteditable and their descendants don't always trigger meaningful changes when manipulated
|
|
59
|
+
'[contenteditable],' + '[contenteditable] *,' +
|
|
60
|
+
// canvas, as there is no good way to detect activity occurring on them
|
|
61
|
+
'canvas,' +
|
|
62
|
+
// links that are interactive (have an href attribute) or any of their descendants, as they can
|
|
63
|
+
// open a new tab or navigate to a hash without triggering a meaningful event
|
|
64
|
+
'a[href],' + 'a[href] *';
|
|
65
|
+
function isDead(click) {
|
|
66
|
+
if (click.hasPageActivity() || click.getUserActivity().input || click.getUserActivity().scroll) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
var target = click.event.target;
|
|
70
|
+
if (target.tagName === 'LABEL' && target.hasAttribute('for')) {
|
|
71
|
+
target = document.getElementById(target.getAttribute('for'));
|
|
72
|
+
}
|
|
73
|
+
return !target || !(0, _browserCore.elementMatches)(target, DEAD_CLICK_EXCLUDE_SELECTOR);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=computeFrustration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeFrustration.js","names":["_browserCore","require","MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE","computeFrustration","clicks","rageClick","isRage","addFrustration","FrustrationType","RAGE_CLICK","some","isDead","DEAD_CLICK","hasError","ERROR_CLICK","hasSelectionChanged","click","getUserActivity","selection","each","scroll","i","length","event","timeStamp","ONE_SECOND","DEAD_CLICK_EXCLUDE_SELECTOR","hasPageActivity","input","target","tagName","hasAttribute","document","getElementById","getAttribute","elementMatches"],"sources":["../../../../../rum/src/domain/rumEventsCollection/actions/computeFrustration.js"],"sourcesContent":["import {\n elementMatches,\n ONE_SECOND,\n FrustrationType,\n some,\n each\n} from '@cloudcare/browser-core'\n\nvar MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE = 3\n\nexport function computeFrustration(clicks, rageClick) {\n if (isRage(clicks)) {\n rageClick.addFrustration(FrustrationType.RAGE_CLICK)\n if (some(clicks, isDead)) {\n rageClick.addFrustration(FrustrationType.DEAD_CLICK)\n }\n if (rageClick.hasError()) {\n rageClick.addFrustration(FrustrationType.ERROR_CLICK)\n }\n return { isRage: true }\n }\n\n var hasSelectionChanged = some(clicks, function (click) {\n return click.getUserActivity().selection\n })\n each(clicks, function (click) {\n if (click.hasError()) {\n click.addFrustration(FrustrationType.ERROR_CLICK)\n }\n if (\n isDead(click) &&\n // Avoid considering clicks part of a double-click or triple-click selections as dead clicks\n !hasSelectionChanged\n ) {\n click.addFrustration(FrustrationType.DEAD_CLICK)\n }\n })\n\n return { isRage: false }\n}\n\nexport function isRage(clicks) {\n if (\n some(clicks, function (click) {\n return click.getUserActivity().selection || click.getUserActivity().scroll\n })\n ) {\n return false\n }\n for (\n var i = 0;\n i < clicks.length - (MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1);\n i += 1\n ) {\n if (\n clicks[i + MIN_CLICKS_PER_SECOND_TO_CONSIDER_RAGE - 1].event.timeStamp -\n clicks[i].event.timeStamp <=\n ONE_SECOND\n ) {\n return true\n }\n }\n return false\n}\n\nvar DEAD_CLICK_EXCLUDE_SELECTOR =\n // inputs that don't trigger a meaningful event like \"input\" when clicked, including textual\n // inputs (using a negative selector is shorter here)\n 'input:not([type=\"checkbox\"]):not([type=\"radio\"]):not([type=\"button\"]):not([type=\"submit\"]):not([type=\"reset\"]):not([type=\"range\"]),' +\n 'textarea,' +\n 'select,' +\n // contenteditable and their descendants don't always trigger meaningful changes when manipulated\n '[contenteditable],' +\n '[contenteditable] *,' +\n // canvas, as there is no good way to detect activity occurring on them\n 'canvas,' +\n // links that are interactive (have an href attribute) or any of their descendants, as they can\n // open a new tab or navigate to a hash without triggering a meaningful event\n 'a[href],' +\n 'a[href] *'\n\nexport function isDead(click) {\n if (\n click.hasPageActivity() ||\n click.getUserActivity().input ||\n click.getUserActivity().scroll\n ) {\n return false\n }\n let target = click.event.target\n\n if (target.tagName === 'LABEL' && target.hasAttribute('for')) {\n target = document.getElementById(target.getAttribute('for'))\n }\n\n return !target || !elementMatches(target, DEAD_CLICK_EXCLUDE_SELECTOR)\n}\n"],"mappings":"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","ignoreList":[]}
|