@kubesense/kubesense-browser-rum-core 1.8.0 → 2.0.0-beta.1
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 +1 -1
- package/cjs/boot/preStartRum.d.ts +4 -3
- package/cjs/boot/preStartRum.js +229 -204
- package/cjs/boot/preStartRum.js.map +1 -1
- package/cjs/boot/rumPublicApi.d.ts +190 -51
- package/cjs/boot/rumPublicApi.js +267 -164
- package/cjs/boot/rumPublicApi.js.map +1 -1
- package/cjs/boot/startRum.d.ts +42 -31
- package/cjs/boot/startRum.js +157 -150
- package/cjs/boot/startRum.js.map +1 -1
- package/cjs/browser/cookieObservable.d.ts +1 -5
- package/cjs/browser/cookieObservable.js +30 -34
- package/cjs/browser/cookieObservable.js.map +1 -1
- package/cjs/browser/domMutationObservable.d.ts +3 -3
- package/cjs/browser/domMutationObservable.js +29 -53
- package/cjs/browser/domMutationObservable.js.map +1 -1
- package/cjs/browser/htmlDomUtils.d.ts +5 -0
- package/cjs/browser/htmlDomUtils.js +38 -28
- package/cjs/browser/htmlDomUtils.js.map +1 -1
- package/cjs/browser/locationChangeObservable.d.ts +1 -2
- package/cjs/browser/locationChangeObservable.js +44 -45
- package/cjs/browser/locationChangeObservable.js.map +1 -1
- package/cjs/browser/performanceObservable.d.ts +4 -4
- package/cjs/browser/performanceObservable.js +50 -114
- package/cjs/browser/performanceObservable.js.map +1 -1
- package/cjs/browser/performanceUtils.d.ts +13 -1
- package/cjs/browser/performanceUtils.js +63 -37
- package/cjs/browser/performanceUtils.js.map +1 -1
- package/cjs/browser/scroll.js +17 -28
- package/cjs/browser/scroll.js.map +1 -1
- package/cjs/browser/viewportObservable.d.ts +2 -3
- package/cjs/browser/viewportObservable.js +29 -31
- package/cjs/browser/viewportObservable.js.map +1 -1
- package/cjs/browser/windowOpenObservable.js +11 -7
- package/cjs/browser/windowOpenObservable.js.map +1 -1
- package/cjs/domain/action/actionCollection.d.ts +11 -12
- package/cjs/domain/action/actionCollection.js +82 -89
- package/cjs/domain/action/actionCollection.js.map +1 -1
- package/cjs/domain/action/actionNameConstants.js +10 -9
- package/cjs/domain/action/actionNameConstants.js.map +1 -1
- package/cjs/domain/action/clickChain.js +51 -54
- package/cjs/domain/action/clickChain.js.map +1 -1
- package/cjs/domain/action/computeFrustration.js +30 -62
- package/cjs/domain/action/computeFrustration.js.map +1 -1
- package/cjs/domain/action/frustrationIgnore.d.ts +9 -0
- package/cjs/domain/action/frustrationIgnore.js +32 -0
- package/cjs/domain/action/frustrationIgnore.js.map +1 -0
- package/cjs/domain/action/getActionNameFromElement.js +141 -217
- package/cjs/domain/action/getActionNameFromElement.js.map +1 -1
- package/cjs/domain/action/interactionSelectorCache.d.ts +1 -1
- package/cjs/domain/action/interactionSelectorCache.js +17 -18
- package/cjs/domain/action/interactionSelectorCache.js.map +1 -1
- package/cjs/domain/action/isActionChildEvent.d.ts +2 -0
- package/cjs/domain/action/isActionChildEvent.js +8 -0
- package/cjs/domain/action/isActionChildEvent.js.map +1 -0
- package/cjs/domain/action/listenActionEvents.d.ts +2 -3
- package/cjs/domain/action/listenActionEvents.js +51 -55
- package/cjs/domain/action/listenActionEvents.js.map +1 -1
- package/cjs/domain/action/trackClickActions.d.ts +15 -21
- package/cjs/domain/action/trackClickActions.js +188 -226
- package/cjs/domain/action/trackClickActions.js.map +1 -1
- package/cjs/domain/action/trackManualActions.d.ts +45 -0
- package/cjs/domain/action/trackManualActions.js +48 -0
- package/cjs/domain/action/trackManualActions.js.map +1 -0
- package/cjs/domain/assembly.d.ts +1 -2
- package/cjs/domain/assembly.js +80 -95
- package/cjs/domain/assembly.js.map +1 -1
- package/cjs/domain/configuration/configuration.d.ts +575 -81
- package/cjs/domain/configuration/configuration.js +464 -199
- package/cjs/domain/configuration/configuration.js.map +1 -1
- package/cjs/domain/configuration/index.d.ts +1 -0
- package/cjs/domain/configuration/index.js +27 -21
- package/cjs/domain/configuration/jsonPathParser.js +125 -139
- package/cjs/domain/configuration/jsonPathParser.js.map +1 -1
- package/cjs/domain/configuration/remoteConfiguration.d.ts +18 -5
- package/cjs/domain/configuration/remoteConfiguration.js +268 -226
- package/cjs/domain/configuration/remoteConfiguration.js.map +1 -1
- package/cjs/domain/configuration/remoteConfiguration.types.d.ts +49 -0
- package/cjs/domain/configuration/remoteConfigurationCache.d.ts +42 -0
- package/cjs/domain/configuration/remoteConfigurationCache.js +95 -0
- package/cjs/domain/configuration/remoteConfigurationCache.js.map +1 -0
- package/cjs/domain/configuration/remoteSdkConfiguration.d.ts +11 -2
- package/cjs/domain/configuration/remoteSdkConfiguration.js +185 -117
- package/cjs/domain/configuration/remoteSdkConfiguration.js.map +1 -1
- package/cjs/domain/configuration/sessionReplayRoutes.d.ts +1 -6
- package/cjs/domain/configuration/sessionReplayRoutes.js +20 -63
- package/cjs/domain/configuration/sessionReplayRoutes.js.map +1 -1
- package/cjs/domain/contexts/ciVisibilityContext.d.ts +2 -4
- package/cjs/domain/contexts/ciVisibilityContext.js +36 -32
- package/cjs/domain/contexts/ciVisibilityContext.js.map +1 -1
- package/cjs/domain/contexts/connectivityContext.d.ts +2 -2
- package/cjs/domain/contexts/connectivityContext.js +10 -9
- package/cjs/domain/contexts/connectivityContext.js.map +1 -1
- package/cjs/domain/contexts/defaultContext.d.ts +3 -3
- package/cjs/domain/contexts/defaultContext.js +28 -32
- package/cjs/domain/contexts/defaultContext.js.map +1 -1
- package/cjs/domain/contexts/displayContext.d.ts +2 -3
- package/cjs/domain/contexts/displayContext.js +22 -26
- package/cjs/domain/contexts/displayContext.js.map +1 -1
- package/cjs/domain/contexts/featureFlagContext.d.ts +2 -2
- package/cjs/domain/contexts/featureFlagContext.js +38 -50
- package/cjs/domain/contexts/featureFlagContext.js.map +1 -1
- package/cjs/domain/contexts/internalContext.d.ts +2 -3
- package/cjs/domain/contexts/internalContext.js +26 -22
- package/cjs/domain/contexts/internalContext.js.map +1 -1
- package/cjs/domain/contexts/pageStateHistory.d.ts +3 -4
- package/cjs/domain/contexts/pageStateHistory.js +76 -96
- package/cjs/domain/contexts/pageStateHistory.js.map +1 -1
- package/cjs/domain/contexts/sessionContext.d.ts +9 -3
- package/cjs/domain/contexts/sessionContext.js +31 -45
- package/cjs/domain/contexts/sessionContext.js.map +1 -1
- package/cjs/domain/contexts/sourceCodeMfeContext.d.ts +10 -0
- package/cjs/domain/contexts/sourceCodeMfeContext.js +35 -0
- package/cjs/domain/contexts/sourceCodeMfeContext.js.map +1 -0
- package/cjs/domain/contexts/syntheticsContext.d.ts +2 -2
- package/cjs/domain/contexts/syntheticsContext.js +19 -23
- package/cjs/domain/contexts/syntheticsContext.js.map +1 -1
- package/cjs/domain/contexts/trackingConsentContext.d.ts +2 -2
- package/cjs/domain/contexts/trackingConsentContext.js +10 -12
- package/cjs/domain/contexts/trackingConsentContext.js.map +1 -1
- package/cjs/domain/contexts/urlContexts.d.ts +4 -3
- package/cjs/domain/contexts/urlContexts.js +65 -61
- package/cjs/domain/contexts/urlContexts.js.map +1 -1
- package/cjs/domain/contexts/userAgentDataContext.d.ts +2 -2
- package/cjs/domain/contexts/userAgentDataContext.js +20 -29
- package/cjs/domain/contexts/userAgentDataContext.js.map +1 -1
- package/cjs/domain/contexts/viewHistory.d.ts +5 -2
- package/cjs/domain/contexts/viewHistory.js +41 -45
- package/cjs/domain/contexts/viewHistory.js.map +1 -1
- package/cjs/domain/discardNegativeDuration.d.ts +1 -1
- package/cjs/domain/discardNegativeDuration.js +6 -5
- package/cjs/domain/discardNegativeDuration.js.map +1 -1
- package/cjs/domain/error/errorCollection.d.ts +3 -3
- package/cjs/domain/error/errorCollection.js +67 -68
- package/cjs/domain/error/errorCollection.js.map +1 -1
- package/cjs/domain/error/trackReportError.d.ts +1 -2
- package/cjs/domain/error/trackReportError.js +10 -14
- package/cjs/domain/error/trackReportError.js.map +1 -1
- package/cjs/domain/event/eventCollection.d.ts +2 -1
- package/cjs/domain/event/eventCollection.js +21 -22
- package/cjs/domain/event/eventCollection.js.map +1 -1
- package/cjs/domain/eventTracker.d.ts +37 -0
- package/cjs/domain/eventTracker.js +94 -0
- package/cjs/domain/eventTracker.js.map +1 -0
- package/cjs/domain/extractRegexMatch.d.ts +5 -0
- package/cjs/domain/extractRegexMatch.js +16 -0
- package/cjs/domain/extractRegexMatch.js.map +1 -0
- package/cjs/domain/getComposedPathSelector.d.ts +22 -0
- package/cjs/domain/getComposedPathSelector.js +95 -0
- package/cjs/domain/getComposedPathSelector.js.map +1 -0
- package/cjs/domain/getSelectorFromElement.d.ts +18 -6
- package/cjs/domain/getSelectorFromElement.js +199 -191
- package/cjs/domain/getSelectorFromElement.js.map +1 -1
- package/cjs/domain/getSessionReplayUrl.d.ts +2 -2
- package/cjs/domain/getSessionReplayUrl.js +17 -30
- package/cjs/domain/getSessionReplayUrl.js.map +1 -1
- package/cjs/domain/hooks.d.ts +26 -17
- package/cjs/domain/hooks.js +12 -5
- package/cjs/domain/hooks.js.map +1 -1
- package/cjs/domain/lifeCycle.d.ts +26 -12
- package/cjs/domain/lifeCycle.js +28 -5
- package/cjs/domain/lifeCycle.js.map +1 -1
- package/cjs/domain/limitModification.d.ts +5 -1
- package/cjs/domain/limitModification.js +32 -36
- package/cjs/domain/limitModification.js.map +1 -1
- package/cjs/domain/longTask/longTaskCollection.d.ts +0 -13
- package/cjs/domain/longTask/longTaskCollection.js +75 -87
- package/cjs/domain/longTask/longTaskCollection.js.map +1 -1
- package/cjs/domain/plugins.d.ts +37 -14
- package/cjs/domain/plugins.js +22 -13
- package/cjs/domain/plugins.js.map +1 -1
- package/cjs/domain/privacy.d.ts +6 -1
- package/cjs/domain/privacy.js +143 -286
- package/cjs/domain/privacy.js.map +1 -1
- package/cjs/domain/privacyConstants.js +43 -34
- package/cjs/domain/privacyConstants.js.map +1 -1
- package/cjs/domain/requestCollection.d.ts +6 -5
- package/cjs/domain/requestCollection.js +82 -105
- package/cjs/domain/requestCollection.js.map +1 -1
- package/cjs/domain/resource/graphql.d.ts +1 -1
- package/cjs/domain/resource/graphql.js +85 -86
- package/cjs/domain/resource/graphql.js.map +1 -1
- package/cjs/domain/resource/requestRegistry.js +30 -38
- package/cjs/domain/resource/requestRegistry.js.map +1 -1
- package/cjs/domain/resource/resourceCollection.d.ts +5 -3
- package/cjs/domain/resource/resourceCollection.js +241 -175
- package/cjs/domain/resource/resourceCollection.js.map +1 -1
- package/cjs/domain/resource/resourceUtils.d.ts +13 -13
- package/cjs/domain/resource/resourceUtils.js +323 -221
- package/cjs/domain/resource/resourceUtils.js.map +1 -1
- package/cjs/domain/resource/trackManualResources.d.ts +55 -0
- package/cjs/domain/resource/trackManualResources.js +53 -0
- package/cjs/domain/resource/trackManualResources.js.map +1 -0
- package/cjs/domain/resource/webSocketCollection.d.ts +46 -0
- package/cjs/domain/resource/webSocketCollection.js +163 -0
- package/cjs/domain/resource/webSocketCollection.js.map +1 -0
- package/cjs/domain/session/session.types.d.ts +4 -0
- package/cjs/domain/sessionReplayState.d.ts +8 -0
- package/cjs/domain/sessionReplayState.js +19 -0
- package/cjs/domain/sessionReplayState.js.map +1 -0
- package/cjs/domain/startCustomerDataTelemetry.js +39 -43
- package/cjs/domain/startCustomerDataTelemetry.js.map +1 -1
- package/cjs/domain/tracing/getDocumentTraceId.d.ts +1 -1
- package/cjs/domain/tracing/getDocumentTraceId.js +42 -63
- package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -1
- package/cjs/domain/tracing/identifier.js +13 -46
- package/cjs/domain/tracing/identifier.js.map +1 -1
- package/cjs/domain/tracing/tracer.d.ts +2 -5
- package/cjs/domain/tracing/tracer.js +110 -150
- package/cjs/domain/tracing/tracer.js.map +1 -1
- package/cjs/domain/trackEventCounts.js +43 -48
- package/cjs/domain/trackEventCounts.js.map +1 -1
- package/cjs/domain/view/bfCacheSupport.d.ts +1 -2
- package/cjs/domain/view/bfCacheSupport.js +10 -11
- package/cjs/domain/view/bfCacheSupport.js.map +1 -1
- package/cjs/domain/view/trackViewEventCounts.js +14 -13
- package/cjs/domain/view/trackViewEventCounts.js.map +1 -1
- package/cjs/domain/view/trackViews.d.ts +8 -2
- package/cjs/domain/view/trackViews.js +221 -270
- package/cjs/domain/view/trackViews.js.map +1 -1
- package/cjs/domain/view/viewCollection.d.ts +4 -3
- package/cjs/domain/view/viewCollection.js +124 -148
- package/cjs/domain/view/viewCollection.js.map +1 -1
- package/cjs/domain/view/viewDiff.d.ts +22 -0
- package/cjs/domain/view/viewDiff.js +62 -0
- package/cjs/domain/view/viewDiff.js.map +1 -0
- package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js +20 -22
- package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -1
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.d.ts +1 -0
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js +35 -33
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +1 -1
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js +14 -13
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +4 -2
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js +51 -34
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +1 -1
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js +106 -122
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +2 -3
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js +26 -34
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackFirstHidden.d.ts +2 -3
- package/cjs/domain/view/viewMetrics/trackFirstHidden.js +31 -31
- package/cjs/domain/view/viewMetrics/trackFirstHidden.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +1 -3
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js +33 -38
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +10 -1
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js +202 -144
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +6 -1
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js +65 -55
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackLoadingTime.d.ts +2 -1
- package/cjs/domain/view/viewMetrics/trackLoadingTime.js +42 -46
- package/cjs/domain/view/viewMetrics/trackLoadingTime.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.d.ts +2 -3
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.js +28 -36
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -1
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.d.ts +3 -4
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.js +63 -72
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -1
- package/cjs/domain/vital/vitalCollection.d.ts +44 -20
- package/cjs/domain/vital/vitalCollection.js +81 -109
- package/cjs/domain/vital/vitalCollection.js.map +1 -1
- package/cjs/domain/waitPageActivityEnd.d.ts +1 -4
- package/cjs/domain/waitPageActivityEnd.js +99 -119
- package/cjs/domain/waitPageActivityEnd.js.map +1 -1
- package/cjs/domainContext.types.d.ts +21 -13
- package/cjs/index.d.ts +11 -10
- package/cjs/index.js +84 -62
- package/cjs/rawRumEvent.types.d.ts +79 -13
- package/cjs/rawRumEvent.types.js +40 -27
- package/cjs/rawRumEvent.types.js.map +1 -1
- package/cjs/rumEvent.types.d.ts +906 -669
- package/cjs/transport/formDataTransport.js +43 -41
- package/cjs/transport/formDataTransport.js.map +1 -1
- package/cjs/transport/startRumBatch.d.ts +27 -3
- package/cjs/transport/startRumBatch.js +132 -31
- package/cjs/transport/startRumBatch.js.map +1 -1
- package/cjs/transport/startRumEventBridge.js +10 -8
- package/cjs/transport/startRumEventBridge.js.map +1 -1
- package/esm/boot/preStartRum.mjs +233 -0
- package/esm/boot/preStartRum.mjs.map +1 -0
- package/esm/boot/rumPublicApi.mjs +271 -0
- package/esm/boot/rumPublicApi.mjs.map +1 -0
- package/esm/boot/startRum.mjs +159 -0
- package/esm/boot/startRum.mjs.map +1 -0
- package/esm/browser/cookieObservable.mjs +34 -0
- package/esm/browser/cookieObservable.mjs.map +1 -0
- package/esm/browser/domMutationObservable.mjs +33 -0
- package/esm/browser/domMutationObservable.mjs.map +1 -0
- package/esm/browser/htmlDomUtils.mjs +48 -0
- package/esm/browser/htmlDomUtils.mjs.map +1 -0
- package/esm/browser/locationChangeObservable.mjs +50 -0
- package/esm/browser/locationChangeObservable.mjs.map +1 -0
- package/esm/browser/performanceObservable.mjs +60 -0
- package/esm/browser/performanceObservable.mjs.map +1 -0
- package/esm/browser/performanceUtils.mjs +64 -0
- package/esm/browser/performanceUtils.mjs.map +1 -0
- package/esm/browser/scroll.mjs +21 -0
- package/esm/browser/scroll.mjs.map +1 -0
- package/esm/browser/viewportObservable.mjs +33 -0
- package/esm/browser/viewportObservable.mjs.map +1 -0
- package/esm/browser/windowOpenObservable.mjs +14 -0
- package/esm/browser/windowOpenObservable.mjs.map +1 -0
- package/esm/domain/action/actionCollection.mjs +89 -0
- package/esm/domain/action/actionCollection.mjs.map +1 -0
- package/esm/domain/action/actionNameConstants.mjs +11 -0
- package/esm/domain/action/actionNameConstants.mjs.map +1 -0
- package/esm/domain/action/clickChain.mjs +57 -0
- package/esm/domain/action/clickChain.mjs.map +1 -0
- package/esm/domain/action/computeFrustration.mjs +36 -0
- package/esm/domain/action/computeFrustration.mjs.map +1 -0
- package/esm/domain/action/frustrationIgnore.mjs +31 -0
- package/esm/domain/action/frustrationIgnore.mjs.map +1 -0
- package/esm/domain/action/getActionNameFromElement.mjs +163 -0
- package/esm/domain/action/getActionNameFromElement.mjs.map +1 -0
- package/esm/domain/action/interactionSelectorCache.mjs +19 -0
- package/esm/domain/action/interactionSelectorCache.mjs.map +1 -0
- package/esm/domain/action/isActionChildEvent.mjs +8 -0
- package/esm/domain/action/isActionChildEvent.mjs.map +1 -0
- package/esm/domain/action/listenActionEvents.mjs +57 -0
- package/esm/domain/action/listenActionEvents.mjs.map +1 -0
- package/esm/domain/action/trackClickActions.mjs +198 -0
- package/esm/domain/action/trackClickActions.mjs.map +1 -0
- package/esm/domain/action/trackManualActions.mjs +48 -0
- package/esm/domain/action/trackManualActions.mjs.map +1 -0
- package/esm/domain/assembly.mjs +87 -0
- package/esm/domain/assembly.mjs.map +1 -0
- package/esm/domain/configuration/configuration.mjs +474 -0
- package/esm/domain/configuration/configuration.mjs.map +1 -0
- package/esm/domain/configuration/index.mjs +6 -0
- package/esm/domain/configuration/jsonPathParser.mjs +145 -0
- package/esm/domain/configuration/jsonPathParser.mjs.map +1 -0
- package/esm/domain/configuration/remoteConfiguration.mjs +279 -0
- package/esm/domain/configuration/remoteConfiguration.mjs.map +1 -0
- package/esm/domain/configuration/remoteConfigurationCache.mjs +92 -0
- package/esm/domain/configuration/remoteConfigurationCache.mjs.map +1 -0
- package/esm/domain/configuration/remoteSdkConfiguration.mjs +208 -0
- package/esm/domain/configuration/remoteSdkConfiguration.mjs.map +1 -0
- package/esm/domain/configuration/sessionReplayRoutes.mjs +26 -0
- package/esm/domain/configuration/sessionReplayRoutes.mjs.map +1 -0
- package/esm/domain/contexts/ciVisibilityContext.mjs +37 -0
- package/esm/domain/contexts/ciVisibilityContext.mjs.map +1 -0
- package/esm/domain/contexts/connectivityContext.mjs +12 -0
- package/esm/domain/contexts/connectivityContext.mjs.map +1 -0
- package/esm/domain/contexts/defaultContext.mjs +30 -0
- package/esm/domain/contexts/defaultContext.mjs.map +1 -0
- package/esm/domain/contexts/displayContext.mjs +24 -0
- package/esm/domain/contexts/displayContext.mjs.map +1 -0
- package/esm/domain/contexts/featureFlagContext.mjs +40 -0
- package/esm/domain/contexts/featureFlagContext.mjs.map +1 -0
- package/esm/domain/contexts/internalContext.mjs +30 -0
- package/esm/domain/contexts/internalContext.mjs.map +1 -0
- package/esm/domain/contexts/pageStateHistory.mjs +82 -0
- package/esm/domain/contexts/pageStateHistory.mjs.map +1 -0
- package/esm/domain/contexts/sessionContext.mjs +33 -0
- package/esm/domain/contexts/sessionContext.mjs.map +1 -0
- package/esm/domain/contexts/sourceCodeMfeContext.mjs +35 -0
- package/esm/domain/contexts/sourceCodeMfeContext.mjs.map +1 -0
- package/esm/domain/contexts/syntheticsContext.mjs +21 -0
- package/esm/domain/contexts/syntheticsContext.mjs.map +1 -0
- package/esm/domain/contexts/trackingConsentContext.mjs +12 -0
- package/esm/domain/contexts/trackingConsentContext.mjs.map +1 -0
- package/esm/domain/contexts/urlContexts.mjs +67 -0
- package/esm/domain/contexts/urlContexts.mjs.map +1 -0
- package/esm/domain/contexts/userAgentDataContext.mjs +22 -0
- package/esm/domain/contexts/userAgentDataContext.mjs.map +1 -0
- package/esm/domain/contexts/viewHistory.mjs +43 -0
- package/esm/domain/contexts/viewHistory.mjs.map +1 -0
- package/esm/domain/discardNegativeDuration.mjs +9 -0
- package/esm/domain/discardNegativeDuration.mjs.map +1 -0
- package/esm/domain/error/errorCollection.mjs +72 -0
- package/esm/domain/error/errorCollection.mjs.map +1 -0
- package/esm/domain/error/trackReportError.mjs +12 -0
- package/esm/domain/error/trackReportError.mjs.map +1 -0
- package/esm/domain/event/eventCollection.mjs +26 -0
- package/esm/domain/event/eventCollection.mjs.map +1 -0
- package/esm/domain/eventTracker.mjs +93 -0
- package/esm/domain/eventTracker.mjs.map +1 -0
- package/esm/domain/extractRegexMatch.mjs +16 -0
- package/esm/domain/extractRegexMatch.mjs.map +1 -0
- package/esm/domain/getComposedPathSelector.mjs +93 -0
- package/esm/domain/getComposedPathSelector.mjs.map +1 -0
- package/esm/domain/getSelectorFromElement.mjs +218 -0
- package/esm/domain/getSelectorFromElement.mjs.map +1 -0
- package/esm/domain/getSessionReplayUrl.mjs +20 -0
- package/esm/domain/getSessionReplayUrl.mjs.map +1 -0
- package/esm/domain/hooks.mjs +13 -0
- package/esm/domain/hooks.mjs.map +1 -0
- package/esm/domain/lifeCycle.mjs +28 -0
- package/esm/domain/lifeCycle.mjs.map +1 -0
- package/esm/domain/limitModification.mjs +42 -0
- package/esm/domain/limitModification.mjs.map +1 -0
- package/esm/domain/longTask/longTaskCollection.mjs +79 -0
- package/esm/domain/longTask/longTaskCollection.mjs.map +1 -0
- package/esm/domain/plugins.mjs +23 -0
- package/esm/domain/plugins.mjs.map +1 -0
- package/esm/domain/privacy.mjs +161 -0
- package/esm/domain/privacy.mjs.map +1 -0
- package/esm/domain/privacyConstants.mjs +36 -0
- package/esm/domain/privacyConstants.mjs.map +1 -0
- package/esm/domain/requestCollection.mjs +86 -0
- package/esm/domain/requestCollection.mjs.map +1 -0
- package/esm/domain/resource/graphql.mjs +93 -0
- package/esm/domain/resource/graphql.mjs.map +1 -0
- package/esm/domain/resource/requestRegistry.mjs +32 -0
- package/esm/domain/resource/requestRegistry.mjs.map +1 -0
- package/esm/domain/resource/resourceCollection.mjs +256 -0
- package/esm/domain/resource/resourceCollection.mjs.map +1 -0
- package/esm/domain/resource/resourceUtils.mjs +349 -0
- package/esm/domain/resource/resourceUtils.mjs.map +1 -0
- package/esm/domain/resource/trackManualResources.mjs +53 -0
- package/esm/domain/resource/trackManualResources.mjs.map +1 -0
- package/esm/domain/resource/webSocketCollection.mjs +160 -0
- package/esm/domain/resource/webSocketCollection.mjs.map +1 -0
- package/esm/domain/sessionReplayState.mjs +18 -0
- package/esm/domain/sessionReplayState.mjs.map +1 -0
- package/esm/domain/startCustomerDataTelemetry.mjs +51 -0
- package/esm/domain/startCustomerDataTelemetry.mjs.map +1 -0
- package/esm/domain/tracing/getDocumentTraceId.mjs +50 -0
- package/esm/domain/tracing/getDocumentTraceId.mjs.map +1 -0
- package/esm/domain/tracing/identifier.mjs +20 -0
- package/esm/domain/tracing/identifier.mjs.map +1 -0
- package/esm/domain/tracing/tracer.mjs +120 -0
- package/esm/domain/tracing/tracer.mjs.map +1 -0
- package/esm/domain/trackEventCounts.mjs +45 -0
- package/esm/domain/trackEventCounts.mjs.map +1 -0
- package/esm/domain/view/bfCacheSupport.mjs +12 -0
- package/esm/domain/view/bfCacheSupport.mjs.map +1 -0
- package/esm/domain/view/trackViewEventCounts.mjs +17 -0
- package/esm/domain/view/trackViewEventCounts.mjs.map +1 -0
- package/esm/domain/view/trackViews.mjs +230 -0
- package/esm/domain/view/trackViews.mjs.map +1 -0
- package/esm/domain/view/viewCollection.mjs +129 -0
- package/esm/domain/view/viewCollection.mjs.map +1 -0
- package/esm/domain/view/viewDiff.mjs +61 -0
- package/esm/domain/view/viewDiff.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs +30 -0
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs +45 -0
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs +18 -0
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs +54 -0
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs +117 -0
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs +29 -0
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackFirstHidden.mjs +33 -0
- package/esm/domain/view/viewMetrics/trackFirstHidden.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs +36 -0
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs +210 -0
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs +70 -0
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackLoadingTime.mjs +46 -0
- package/esm/domain/view/viewMetrics/trackLoadingTime.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs +35 -0
- package/esm/domain/view/viewMetrics/trackNavigationTimings.mjs.map +1 -0
- package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs +66 -0
- package/esm/domain/view/viewMetrics/trackScrollMetrics.mjs.map +1 -0
- package/esm/domain/vital/vitalCollection.mjs +85 -0
- package/esm/domain/vital/vitalCollection.mjs.map +1 -0
- package/esm/domain/waitPageActivityEnd.mjs +107 -0
- package/esm/domain/waitPageActivityEnd.mjs.map +1 -0
- package/esm/index.mjs +23 -0
- package/esm/rawRumEvent.types.mjs +42 -0
- package/esm/rawRumEvent.types.mjs.map +1 -0
- package/esm/transport/formDataTransport.mjs +48 -0
- package/esm/transport/formDataTransport.mjs.map +1 -0
- package/esm/transport/startRumBatch.mjs +132 -0
- package/esm/transport/startRumBatch.mjs.map +1 -0
- package/esm/transport/startRumEventBridge.mjs +13 -0
- package/esm/transport/startRumEventBridge.mjs.map +1 -0
- package/package.json +19 -11
- package/src/boot/preStartRum.ts +216 -88
- package/src/boot/rumPublicApi.ts +358 -119
- package/src/boot/startRum.ts +88 -84
- package/src/browser/cookieObservable.ts +19 -28
- package/src/browser/domMutationObservable.ts +7 -12
- package/src/browser/htmlDomUtils.ts +15 -0
- package/src/browser/locationChangeObservable.ts +23 -12
- package/src/browser/performanceObservable.ts +23 -73
- package/src/browser/performanceUtils.ts +52 -4
- package/src/browser/viewportObservable.ts +4 -6
- package/src/domain/action/actionCollection.ts +94 -87
- package/src/domain/action/clickChain.ts +11 -10
- package/src/domain/action/computeFrustration.ts +19 -5
- package/src/domain/action/frustrationIgnore.ts +54 -0
- package/src/domain/action/getActionNameFromElement.ts +27 -61
- package/src/domain/action/interactionSelectorCache.ts +2 -2
- package/src/domain/action/isActionChildEvent.ts +6 -0
- package/src/domain/action/listenActionEvents.ts +2 -11
- package/src/domain/action/trackClickActions.ts +92 -82
- package/src/domain/action/trackManualActions.ts +104 -0
- package/src/domain/assembly.ts +57 -70
- package/src/domain/configuration/configuration.ts +587 -208
- package/src/domain/configuration/index.ts +1 -0
- package/src/domain/configuration/remoteConfiguration.ts +152 -29
- package/src/domain/configuration/remoteConfiguration.types.ts +51 -1
- package/src/domain/configuration/remoteConfigurationCache.ts +153 -0
- package/src/domain/configuration/remoteSdkConfiguration.ts +131 -13
- package/src/domain/configuration/sessionReplayRoutes.ts +2 -47
- package/src/domain/contexts/ciVisibilityContext.ts +23 -12
- package/src/domain/contexts/connectivityContext.ts +7 -10
- package/src/domain/contexts/defaultContext.ts +11 -14
- package/src/domain/contexts/displayContext.ts +8 -12
- package/src/domain/contexts/featureFlagContext.ts +5 -4
- package/src/domain/contexts/internalContext.ts +3 -3
- package/src/domain/contexts/pageStateHistory.ts +20 -31
- package/src/domain/contexts/sessionContext.ts +16 -22
- package/src/domain/contexts/sourceCodeMfeContext.ts +53 -0
- package/src/domain/contexts/syntheticsContext.ts +7 -17
- package/src/domain/contexts/trackingConsentContext.ts +7 -4
- package/src/domain/contexts/urlContexts.ts +13 -9
- package/src/domain/contexts/userAgentDataContext.ts +12 -13
- package/src/domain/contexts/viewHistory.ts +4 -3
- package/src/domain/discardNegativeDuration.ts +1 -1
- package/src/domain/error/errorCollection.ts +12 -22
- package/src/domain/error/trackReportError.ts +4 -7
- package/src/domain/event/eventCollection.ts +4 -2
- package/src/domain/eventTracker.ts +169 -0
- package/src/domain/extractRegexMatch.ts +15 -0
- package/src/domain/getComposedPathSelector.ts +130 -0
- package/src/domain/getSelectorFromElement.ts +125 -31
- package/src/domain/getSessionReplayUrl.ts +4 -13
- package/src/domain/hooks.ts +34 -21
- package/src/domain/lifeCycle.ts +21 -8
- package/src/domain/limitModification.ts +20 -4
- package/src/domain/longTask/longTaskCollection.ts +18 -47
- package/src/domain/plugins.ts +54 -25
- package/src/domain/privacy.ts +16 -24
- package/src/domain/requestCollection.ts +108 -97
- package/src/domain/resource/graphql.ts +71 -25
- package/src/domain/resource/requestRegistry.ts +1 -3
- package/src/domain/resource/resourceCollection.ts +319 -137
- package/src/domain/resource/resourceUtils.ts +24 -26
- package/src/domain/resource/trackManualResources.ts +121 -0
- package/src/domain/resource/webSocketCollection.ts +281 -0
- package/src/domain/session/session.types.ts +5 -0
- package/src/domain/sessionReplayState.ts +36 -0
- package/src/domain/startCustomerDataTelemetry.ts +2 -2
- package/src/domain/tracing/getDocumentTraceId.ts +5 -4
- package/src/domain/tracing/identifier.ts +6 -37
- package/src/domain/tracing/tracer.ts +22 -21
- package/src/domain/tracing/tracer.types.ts +3 -3
- package/src/domain/view/bfCacheSupport.ts +1 -6
- package/src/domain/view/trackViews.ts +40 -37
- package/src/domain/view/viewCollection.ts +29 -23
- package/src/domain/view/viewDiff.ts +115 -0
- package/src/domain/view/viewMetrics/interactionCountPolyfill.ts +13 -2
- package/src/domain/view/viewMetrics/trackBfcacheMetrics.ts +1 -1
- package/src/domain/view/viewMetrics/trackCommonViewMetrics.ts +27 -6
- package/src/domain/view/viewMetrics/trackCumulativeLayoutShift.ts +5 -3
- package/src/domain/view/viewMetrics/trackFirstContentfulPaint.ts +4 -9
- package/src/domain/view/viewMetrics/trackFirstHidden.ts +2 -8
- package/src/domain/view/viewMetrics/trackInitialViewMetrics.ts +4 -13
- package/src/domain/view/viewMetrics/trackInteractionToNextPaint.ts +180 -35
- package/src/domain/view/viewMetrics/trackLargestContentfulPaint.ts +47 -6
- package/src/domain/view/viewMetrics/trackLoadingTime.ts +4 -3
- package/src/domain/view/viewMetrics/trackNavigationTimings.ts +10 -18
- package/src/domain/view/viewMetrics/trackScrollMetrics.ts +23 -37
- package/src/domain/vital/vitalCollection.ts +83 -102
- package/src/domain/waitPageActivityEnd.ts +7 -11
- package/src/domainContext.types.ts +23 -15
- package/src/index.ts +17 -11
- package/src/rawRumEvent.types.ts +80 -26
- package/src/rumEvent.types.ts +730 -505
- package/src/transport/formDataTransport.ts +16 -6
- package/src/transport/startRumBatch.ts +181 -24
- package/cjs/browser/firstInputPolyfill.d.ts +0 -8
- package/cjs/browser/firstInputPolyfill.js +0 -68
- package/cjs/browser/firstInputPolyfill.js.map +0 -1
- package/cjs/domain/configuration/index.js.map +0 -1
- package/cjs/domain/configuration/remoteConfiguration.types.js +0 -7
- package/cjs/domain/configuration/remoteConfiguration.types.js.map +0 -1
- package/cjs/domain/error/trackConsoleError.d.ts +0 -4
- package/cjs/domain/error/trackConsoleError.js +0 -13
- package/cjs/domain/error/trackConsoleError.js.map +0 -1
- package/cjs/domain/resource/matchRequestResourceEntry.d.ts +0 -16
- package/cjs/domain/resource/matchRequestResourceEntry.js +0 -49
- package/cjs/domain/resource/matchRequestResourceEntry.js.map +0 -1
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -24
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
- package/cjs/domain/rumSessionManager.d.ts +0 -36
- package/cjs/domain/rumSessionManager.js +0 -77
- package/cjs/domain/rumSessionManager.js.map +0 -1
- package/cjs/domain/sampler/sampler.d.ts +0 -10
- package/cjs/domain/sampler/sampler.js +0 -63
- package/cjs/domain/sampler/sampler.js.map +0 -1
- package/cjs/domain/tracing/sampler.d.ts +0 -10
- package/cjs/domain/tracing/sampler.js +0 -69
- package/cjs/domain/tracing/sampler.js.map +0 -1
- package/cjs/domain/tracing/tracer.types.js +0 -3
- package/cjs/domain/tracing/tracer.types.js.map +0 -1
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -44
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
- package/cjs/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
- package/cjs/domain/view/viewMetrics/trackFirstInput.js +0 -43
- package/cjs/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
- package/cjs/domainContext.types.js +0 -6
- package/cjs/domainContext.types.js.map +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/rumEvent.types.js +0 -7
- package/cjs/rumEvent.types.js.map +0 -1
- package/esm/boot/preStartRum.d.ts +0 -7
- package/esm/boot/preStartRum.js +0 -205
- package/esm/boot/preStartRum.js.map +0 -1
- package/esm/boot/rumPublicApi.d.ts +0 -409
- package/esm/boot/rumPublicApi.js +0 -165
- package/esm/boot/rumPublicApi.js.map +0 -1
- package/esm/boot/startRum.d.ts +0 -109
- package/esm/boot/startRum.js +0 -149
- package/esm/boot/startRum.js.map +0 -1
- package/esm/browser/cookieObservable.d.ts +0 -8
- package/esm/browser/cookieObservable.js +0 -35
- package/esm/browser/cookieObservable.js.map +0 -1
- package/esm/browser/domMutationObservable.d.ts +0 -27
- package/esm/browser/domMutationObservable.js +0 -54
- package/esm/browser/domMutationObservable.js.map +0 -1
- package/esm/browser/firstInputPolyfill.d.ts +0 -8
- package/esm/browser/firstInputPolyfill.js +0 -65
- package/esm/browser/firstInputPolyfill.js.map +0 -1
- package/esm/browser/htmlDomUtils.d.ts +0 -13
- package/esm/browser/htmlDomUtils.js +0 -36
- package/esm/browser/htmlDomUtils.js.map +0 -1
- package/esm/browser/locationChangeObservable.d.ts +0 -7
- package/esm/browser/locationChangeObservable.js +0 -48
- package/esm/browser/locationChangeObservable.js.map +0 -1
- package/esm/browser/performanceObservable.d.ts +0 -174
- package/esm/browser/performanceObservable.js +0 -121
- package/esm/browser/performanceObservable.js.map +0 -1
- package/esm/browser/performanceUtils.d.ts +0 -7
- package/esm/browser/performanceUtils.js +0 -38
- package/esm/browser/performanceUtils.js.map +0 -1
- package/esm/browser/scroll.d.ts +0 -2
- package/esm/browser/scroll.js +0 -29
- package/esm/browser/scroll.js.map +0 -1
- package/esm/browser/viewportObservable.d.ts +0 -10
- package/esm/browser/viewportObservable.js +0 -32
- package/esm/browser/viewportObservable.js.map +0 -1
- package/esm/browser/windowOpenObservable.d.ts +0 -5
- package/esm/browser/windowOpenObservable.js +0 -7
- package/esm/browser/windowOpenObservable.js.map +0 -1
- package/esm/domain/action/actionCollection.d.ts +0 -21
- package/esm/domain/action/actionCollection.js +0 -93
- package/esm/domain/action/actionCollection.js.map +0 -1
- package/esm/domain/action/actionNameConstants.d.ts +0 -18
- package/esm/domain/action/actionNameConstants.js +0 -8
- package/esm/domain/action/actionNameConstants.js.map +0 -1
- package/esm/domain/action/clickChain.d.ts +0 -8
- package/esm/domain/action/clickChain.js +0 -57
- package/esm/domain/action/clickChain.js.map +0 -1
- package/esm/domain/action/computeFrustration.d.ts +0 -6
- package/esm/domain/action/computeFrustration.js +0 -65
- package/esm/domain/action/computeFrustration.js.map +0 -1
- package/esm/domain/action/getActionNameFromElement.d.ts +0 -4
- package/esm/domain/action/getActionNameFromElement.js +0 -236
- package/esm/domain/action/getActionNameFromElement.js.map +0 -1
- package/esm/domain/action/interactionSelectorCache.d.ts +0 -5
- package/esm/domain/action/interactionSelectorCache.js +0 -18
- package/esm/domain/action/interactionSelectorCache.js.map +0 -1
- package/esm/domain/action/listenActionEvents.d.ts +0 -19
- package/esm/domain/action/listenActionEvents.js +0 -58
- package/esm/domain/action/listenActionEvents.js.map +0 -1
- package/esm/domain/action/trackClickActions.d.ts +0 -81
- package/esm/domain/action/trackClickActions.js +0 -232
- package/esm/domain/action/trackClickActions.js.map +0 -1
- package/esm/domain/assembly.d.ts +0 -5
- package/esm/domain/assembly.js +0 -99
- package/esm/domain/assembly.js.map +0 -1
- package/esm/domain/configuration/configuration.d.ts +0 -358
- package/esm/domain/configuration/configuration.js +0 -209
- package/esm/domain/configuration/configuration.js.map +0 -1
- package/esm/domain/configuration/index.d.ts +0 -4
- package/esm/domain/configuration/index.js +0 -5
- package/esm/domain/configuration/index.js.map +0 -1
- package/esm/domain/configuration/jsonPathParser.d.ts +0 -28
- package/esm/domain/configuration/jsonPathParser.js +0 -156
- package/esm/domain/configuration/jsonPathParser.js.map +0 -1
- package/esm/domain/configuration/remoteConfiguration.d.ts +0 -39
- package/esm/domain/configuration/remoteConfiguration.js +0 -236
- package/esm/domain/configuration/remoteConfiguration.js.map +0 -1
- package/esm/domain/configuration/remoteConfiguration.types.d.ts +0 -138
- package/esm/domain/configuration/remoteConfiguration.types.js +0 -6
- package/esm/domain/configuration/remoteConfiguration.types.js.map +0 -1
- package/esm/domain/configuration/remoteSdkConfiguration.d.ts +0 -18
- package/esm/domain/configuration/remoteSdkConfiguration.js +0 -137
- package/esm/domain/configuration/remoteSdkConfiguration.js.map +0 -1
- package/esm/domain/configuration/sessionReplayRoutes.d.ts +0 -35
- package/esm/domain/configuration/sessionReplayRoutes.js +0 -65
- package/esm/domain/configuration/sessionReplayRoutes.js.map +0 -1
- package/esm/domain/contexts/ciVisibilityContext.d.ts +0 -12
- package/esm/domain/contexts/ciVisibilityContext.js +0 -30
- package/esm/domain/contexts/ciVisibilityContext.js.map +0 -1
- package/esm/domain/contexts/connectivityContext.d.ts +0 -2
- package/esm/domain/contexts/connectivityContext.js +0 -8
- package/esm/domain/contexts/connectivityContext.js.map +0 -1
- package/esm/domain/contexts/defaultContext.d.ts +0 -4
- package/esm/domain/contexts/defaultContext.js +0 -31
- package/esm/domain/contexts/defaultContext.js.map +0 -1
- package/esm/domain/contexts/displayContext.d.ts +0 -6
- package/esm/domain/contexts/displayContext.js +0 -25
- package/esm/domain/contexts/displayContext.js.map +0 -1
- package/esm/domain/contexts/featureFlagContext.d.ts +0 -19
- package/esm/domain/contexts/featureFlagContext.js +0 -49
- package/esm/domain/contexts/featureFlagContext.js.map +0 -1
- package/esm/domain/contexts/internalContext.d.ts +0 -12
- package/esm/domain/contexts/internalContext.js +0 -23
- package/esm/domain/contexts/internalContext.js.map +0 -1
- package/esm/domain/contexts/pageStateHistory.d.ts +0 -23
- package/esm/domain/contexts/pageStateHistory.js +0 -100
- package/esm/domain/contexts/pageStateHistory.js.map +0 -1
- package/esm/domain/contexts/sessionContext.d.ts +0 -5
- package/esm/domain/contexts/sessionContext.js +0 -44
- package/esm/domain/contexts/sessionContext.js.map +0 -1
- package/esm/domain/contexts/syntheticsContext.d.ts +0 -2
- package/esm/domain/contexts/syntheticsContext.js +0 -22
- package/esm/domain/contexts/syntheticsContext.js.map +0 -1
- package/esm/domain/contexts/trackingConsentContext.d.ts +0 -3
- package/esm/domain/contexts/trackingConsentContext.js +0 -11
- package/esm/domain/contexts/trackingConsentContext.js.map +0 -1
- package/esm/domain/contexts/urlContexts.d.ts +0 -22
- package/esm/domain/contexts/urlContexts.js +0 -60
- package/esm/domain/contexts/urlContexts.js.map +0 -1
- package/esm/domain/contexts/userAgentDataContext.d.ts +0 -2
- package/esm/domain/contexts/userAgentDataContext.js +0 -28
- package/esm/domain/contexts/userAgentDataContext.js.map +0 -1
- package/esm/domain/contexts/viewHistory.d.ts +0 -17
- package/esm/domain/contexts/viewHistory.js +0 -44
- package/esm/domain/contexts/viewHistory.js.map +0 -1
- package/esm/domain/discardNegativeDuration.d.ts +0 -2
- package/esm/domain/discardNegativeDuration.js +0 -5
- package/esm/domain/discardNegativeDuration.js.map +0 -1
- package/esm/domain/error/errorCollection.d.ts +0 -17
- package/esm/domain/error/errorCollection.js +0 -70
- package/esm/domain/error/errorCollection.js.map +0 -1
- package/esm/domain/error/trackConsoleError.d.ts +0 -4
- package/esm/domain/error/trackConsoleError.js +0 -10
- package/esm/domain/error/trackConsoleError.js.map +0 -1
- package/esm/domain/error/trackReportError.d.ts +0 -5
- package/esm/domain/error/trackReportError.js +0 -13
- package/esm/domain/error/trackReportError.js.map +0 -1
- package/esm/domain/event/eventCollection.d.ts +0 -10
- package/esm/domain/event/eventCollection.js +0 -24
- package/esm/domain/event/eventCollection.js.map +0 -1
- package/esm/domain/getSelectorFromElement.d.ts +0 -64
- package/esm/domain/getSelectorFromElement.js +0 -213
- package/esm/domain/getSelectorFromElement.js.map +0 -1
- package/esm/domain/getSessionReplayUrl.d.ts +0 -9
- package/esm/domain/getSessionReplayUrl.js +0 -30
- package/esm/domain/getSessionReplayUrl.js.map +0 -1
- package/esm/domain/hooks.d.ts +0 -23
- package/esm/domain/hooks.js +0 -3
- package/esm/domain/hooks.js.map +0 -1
- package/esm/domain/lifeCycle.d.ts +0 -73
- package/esm/domain/lifeCycle.js +0 -3
- package/esm/domain/lifeCycle.js.map +0 -1
- package/esm/domain/limitModification.d.ts +0 -8
- package/esm/domain/limitModification.js +0 -43
- package/esm/domain/limitModification.js.map +0 -1
- package/esm/domain/longTask/longTaskCollection.d.ts +0 -18
- package/esm/domain/longTask/longTaskCollection.js +0 -87
- package/esm/domain/longTask/longTaskCollection.js.map +0 -1
- package/esm/domain/plugins.d.ts +0 -40
- package/esm/domain/plugins.js +0 -12
- package/esm/domain/plugins.js.map +0 -1
- package/esm/domain/privacy.d.ts +0 -44
- package/esm/domain/privacy.js +0 -302
- package/esm/domain/privacy.js.map +0 -1
- package/esm/domain/privacyConstants.d.ts +0 -23
- package/esm/domain/privacyConstants.js +0 -35
- package/esm/domain/privacyConstants.js.map +0 -1
- package/esm/domain/requestCollection.d.ts +0 -54
- package/esm/domain/requestCollection.js +0 -106
- package/esm/domain/requestCollection.js.map +0 -1
- package/esm/domain/resource/graphql.d.ts +0 -23
- package/esm/domain/resource/graphql.js +0 -91
- package/esm/domain/resource/graphql.js.map +0 -1
- package/esm/domain/resource/matchRequestResourceEntry.d.ts +0 -16
- package/esm/domain/resource/matchRequestResourceEntry.js +0 -46
- package/esm/domain/resource/matchRequestResourceEntry.js.map +0 -1
- package/esm/domain/resource/requestRegistry.d.ts +0 -9
- package/esm/domain/resource/requestRegistry.js +0 -37
- package/esm/domain/resource/requestRegistry.js.map +0 -1
- package/esm/domain/resource/resourceCollection.d.ts +0 -7
- package/esm/domain/resource/resourceCollection.js +0 -187
- package/esm/domain/resource/resourceCollection.js.map +0 -1
- package/esm/domain/resource/resourceUtils.d.ts +0 -55
- package/esm/domain/resource/resourceUtils.js +0 -244
- package/esm/domain/resource/resourceUtils.js.map +0 -1
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +0 -4
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js +0 -21
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js.map +0 -1
- package/esm/domain/rumSessionManager.d.ts +0 -36
- package/esm/domain/rumSessionManager.js +0 -72
- package/esm/domain/rumSessionManager.js.map +0 -1
- package/esm/domain/sampler/sampler.d.ts +0 -10
- package/esm/domain/sampler/sampler.js +0 -58
- package/esm/domain/sampler/sampler.js.map +0 -1
- package/esm/domain/startCustomerDataTelemetry.d.ts +0 -4
- package/esm/domain/startCustomerDataTelemetry.js +0 -52
- package/esm/domain/startCustomerDataTelemetry.js.map +0 -1
- package/esm/domain/tracing/getDocumentTraceId.d.ts +0 -12
- package/esm/domain/tracing/getDocumentTraceId.js +0 -68
- package/esm/domain/tracing/getDocumentTraceId.js.map +0 -1
- package/esm/domain/tracing/identifier.d.ts +0 -13
- package/esm/domain/tracing/identifier.js +0 -50
- package/esm/domain/tracing/identifier.js.map +0 -1
- package/esm/domain/tracing/sampler.d.ts +0 -10
- package/esm/domain/tracing/sampler.js +0 -64
- package/esm/domain/tracing/sampler.js.map +0 -1
- package/esm/domain/tracing/tracer.d.ts +0 -30
- package/esm/domain/tracing/tracer.js +0 -156
- package/esm/domain/tracing/tracer.js.map +0 -1
- package/esm/domain/tracing/tracer.types.d.ts +0 -12
- package/esm/domain/tracing/tracer.types.js +0 -2
- package/esm/domain/tracing/tracer.types.js.map +0 -1
- package/esm/domain/trackEventCounts.d.ts +0 -17
- package/esm/domain/trackEventCounts.js +0 -47
- package/esm/domain/trackEventCounts.js.map +0 -1
- package/esm/domain/view/bfCacheSupport.d.ts +0 -2
- package/esm/domain/view/bfCacheSupport.js +0 -10
- package/esm/domain/view/bfCacheSupport.js.map +0 -1
- package/esm/domain/view/trackViewEventCounts.d.ts +0 -5
- package/esm/domain/view/trackViewEventCounts.js +0 -13
- package/esm/domain/view/trackViewEventCounts.js.map +0 -1
- package/esm/domain/view/trackViews.d.ts +0 -65
- package/esm/domain/view/trackViews.js +0 -278
- package/esm/domain/view/trackViews.js.map +0 -1
- package/esm/domain/view/viewCollection.d.ts +0 -18
- package/esm/domain/view/viewCollection.js +0 -150
- package/esm/domain/view/viewCollection.js.map +0 -1
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +0 -6
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js +0 -28
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +0 -1
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.d.ts +0 -18
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.js +0 -39
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.js.map +0 -1
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +0 -6
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +0 -41
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +0 -8
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js +0 -14
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +0 -21
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js +0 -34
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +0 -37
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js +0 -130
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +0 -13
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js +0 -34
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackFirstHidden.d.ts +0 -10
- package/esm/domain/view/viewMetrics/trackFirstHidden.js +0 -30
- package/esm/domain/view/viewMetrics/trackFirstHidden.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackFirstInput.d.ts +0 -19
- package/esm/domain/view/viewMetrics/trackFirstInput.js +0 -40
- package/esm/domain/view/viewMetrics/trackFirstInput.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +0 -15
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js +0 -38
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +0 -25
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js +0 -149
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +0 -18
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js +0 -57
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackLoadingTime.d.ts +0 -14
- package/esm/domain/view/viewMetrics/trackLoadingTime.js +0 -47
- package/esm/domain/view/viewMetrics/trackLoadingTime.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackNavigationTimings.d.ts +0 -14
- package/esm/domain/view/viewMetrics/trackNavigationTimings.js +0 -40
- package/esm/domain/view/viewMetrics/trackNavigationTimings.js.map +0 -1
- package/esm/domain/view/viewMetrics/trackScrollMetrics.d.ts +0 -25
- package/esm/domain/view/viewMetrics/trackScrollMetrics.js +0 -72
- package/esm/domain/view/viewMetrics/trackScrollMetrics.js.map +0 -1
- package/esm/domain/vital/vitalCollection.d.ts +0 -55
- package/esm/domain/vital/vitalCollection.js +0 -107
- package/esm/domain/vital/vitalCollection.js.map +0 -1
- package/esm/domain/waitPageActivityEnd.d.ts +0 -54
- package/esm/domain/waitPageActivityEnd.js +0 -123
- package/esm/domain/waitPageActivityEnd.js.map +0 -1
- package/esm/domainContext.types.d.ts +0 -39
- package/esm/domainContext.types.js +0 -5
- package/esm/domainContext.types.js.map +0 -1
- package/esm/index.d.ts +0 -42
- package/esm/index.js +0 -22
- package/esm/index.js.map +0 -1
- package/esm/rawRumEvent.types.d.ts +0 -326
- package/esm/rawRumEvent.types.js +0 -31
- package/esm/rawRumEvent.types.js.map +0 -1
- package/esm/rumEvent.types.d.ts +0 -2038
- package/esm/rumEvent.types.js +0 -6
- package/esm/rumEvent.types.js.map +0 -1
- package/esm/transport/formDataTransport.d.ts +0 -16
- package/esm/transport/formDataTransport.js +0 -43
- package/esm/transport/formDataTransport.js.map +0 -1
- package/esm/transport/startRumBatch.d.ts +0 -5
- package/esm/transport/startRumBatch.js +0 -30
- package/esm/transport/startRumBatch.js.map +0 -1
- package/esm/transport/startRumEventBridge.d.ts +0 -2
- package/esm/transport/startRumEventBridge.js +0 -8
- package/esm/transport/startRumEventBridge.js.map +0 -1
- package/src/browser/firstInputPolyfill.ts +0 -87
- package/src/domain/error/trackConsoleError.ts +0 -14
- package/src/domain/resource/matchRequestResourceEntry.ts +0 -68
- package/src/domain/resource/retrieveInitialDocumentResourceTiming.ts +0 -27
- package/src/domain/rumSessionManager.ts +0 -134
- package/src/domain/sampler/sampler.ts +0 -63
- package/src/domain/tracing/sampler.ts +0 -69
- package/src/domain/view/viewMetrics/startInitialViewMetricsTelemetry.ts +0 -70
- package/src/domain/view/viewMetrics/trackFirstInput.ts +0 -59
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preStartRum.mjs","names":[],"sources":["../../src/boot/preStartRum.ts"],"sourcesContent":["import { isWorkerEnvironment } from '@kubesense/kubesense-js-core/util'\nimport { timeStampNow, clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { monitorError } from '@kubesense/kubesense-js-core/monitor'\nimport type { TimeStamp } from '@kubesense/kubesense-js-core/time'\nimport type {\n TrackingConsentState,\n DeflateWorker,\n Context,\n Telemetry,\n SessionManager,\n} from '@kubesense/kubesense-browser-core'\nimport {\n BufferedObservable,\n display,\n canUseEventBridge,\n displayAlreadyInitializedError,\n willSyntheticsInjectRum,\n noop,\n getEventBridge,\n initFeatureFlags,\n addTelemetryConfiguration,\n CustomerContextKey,\n buildAccountContextManager,\n buildGlobalContextManager,\n buildUserContextManager,\n bufferContextCalls,\n sanitize,\n startSessionManager,\n startSessionManagerStub,\n startTelemetry,\n TelemetryService,\n mockable,\n startTelemetrySessionContext,\n addTelemetryDebug,\n setAllowUntrustedEvents,\n isAllowedTrackingOrigins,\n} from '@kubesense/kubesense-browser-core'\nimport type { Hooks } from '../domain/hooks'\nimport { createHooks } from '../domain/hooks'\nimport type { RemoteConfigurationMetadata, RumConfiguration, RumInitConfiguration } from '../domain/configuration'\n\nimport {\n fetchAndApplyRemoteConfiguration,\n getRemoteConfiguration,\n getRemoteConfigurationId,\n validateAndBuildRumConfiguration,\n serializeRumConfiguration,\n applyCachedSdkConfiguration,\n scheduleSdkConfigurationRefresh,\n} from '../domain/configuration'\nimport type { ViewOptions } from '../domain/view/trackViews'\nimport type { OperationOptions, FailureReason } from '../domain/vital/vitalCollection'\nimport { callPluginsOnInit } from '../domain/plugins'\nimport { startTrackingConsentContext } from '../domain/contexts/trackingConsentContext'\nimport type { StartRumResult } from './startRum'\nimport type { RumPublicApiOptions, Strategy } from './rumPublicApi'\n\nexport type DoStartRum = (\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n deflateWorker: DeflateWorker | undefined,\n initialViewOptions: ViewOptions | undefined,\n telemetry: Telemetry,\n hooks: Hooks\n) => StartRumResult\n\nexport function createPreStartStrategy(\n { ignoreInitIfSyntheticsWillInjectRum = true, startDeflateWorker, sdkName }: RumPublicApiOptions,\n trackingConsentState: TrackingConsentState,\n doStartRum: DoStartRum\n): Strategy {\n const BUFFER_LIMIT = 500\n const bufferApiCalls = new BufferedObservable<(startRumResult: StartRumResult) => void>(BUFFER_LIMIT, (count) => {\n // monitor-until: 2026-10-14\n addTelemetryDebug('preStartRum buffer data lost', { count })\n })\n\n // TODO next major: remove the globalContextManager, userContextManager and accountContextManager from preStartStrategy and use an empty context instead\n const globalContext = buildGlobalContextManager()\n bufferContextCalls(globalContext, CustomerContextKey.globalContext, bufferApiCalls)\n\n const userContext = buildUserContextManager()\n bufferContextCalls(userContext, CustomerContextKey.userContext, bufferApiCalls)\n\n const accountContext = buildAccountContextManager()\n bufferContextCalls(accountContext, CustomerContextKey.accountContext, bufferApiCalls)\n\n let firstStartViewCall:\n { options: ViewOptions | undefined; callback: (startRumResult: StartRumResult) => void } | undefined\n let deflateWorker: DeflateWorker | undefined\n\n let cachedInitConfiguration: RumInitConfiguration | undefined\n let cachedConfiguration: RumConfiguration | undefined\n let sessionManager: SessionManager | undefined\n let telemetry: Telemetry | undefined\n const hooks = createHooks()\n\n const trackingConsentStateSubscription = trackingConsentState.observable.subscribe(tryStartRum)\n\n const emptyContext: Context = {}\n\n let started = false\n\n function tryStartRum() {\n if (started || !cachedInitConfiguration || !cachedConfiguration || !sessionManager || !telemetry) {\n return\n }\n\n trackingConsentStateSubscription.unsubscribe()\n\n let initialViewOptions: ViewOptions | undefined\n\n if (cachedConfiguration.trackViewsManually) {\n if (!firstStartViewCall) {\n return\n }\n // An initial view is always created when starting RUM.\n // When tracking views automatically, any startView call before RUM start creates an extra\n // view.\n // When tracking views manually, we use the ViewOptions from the first startView call as the\n // initial view options, and we skip the actual startView callback so we don't create an extra\n // view.\n initialViewOptions = firstStartViewCall.options\n }\n\n const callbackToSkip = cachedConfiguration.trackViewsManually ? firstStartViewCall?.callback : undefined\n\n const startRumResult = doStartRum(\n cachedConfiguration,\n sessionManager,\n deflateWorker,\n initialViewOptions,\n telemetry,\n hooks\n )\n\n started = true\n\n bufferApiCalls.subscribe((callback) => {\n if (callback !== callbackToSkip) {\n callback(startRumResult)\n }\n })\n bufferApiCalls.unbuffer()\n }\n\n function doInit(\n initConfiguration: RumInitConfiguration,\n errorStack?: string,\n remoteConfigurationMetadata?: RemoteConfigurationMetadata\n ) {\n const eventBridgeAvailable = canUseEventBridge()\n if (eventBridgeAvailable) {\n initConfiguration = overrideInitConfigurationForBridge(initConfiguration)\n }\n\n const remoteSdkConfigurationEnabled = !!initConfiguration.enableRemoteSdkConfiguration\n\n // A cached document that stops the SDK from starting must never be a one-way door: without a\n // refresh on those paths the browser replays the same bad document on every load and can never\n // learn about a corrected one. This covers a `features.rum: false` switch, an\n // `allowedTrackingOrigins` list that no longer matches this origin, and settings that fail\n // validation.\n const refreshRemoteSdkConfiguration = () => {\n if (remoteSdkConfigurationEnabled) {\n scheduleSdkConfigurationRefresh(initConfiguration).catch(monitorError)\n }\n }\n\n if (remoteSdkConfigurationEnabled) {\n // Reading the cached document is synchronous and network-free, so it does not delay\n // initialization. The document fetched below only applies from the next page load.\n const cachedSdkConfiguration = applyCachedSdkConfiguration(initConfiguration, { globalContext, userContext })\n initConfiguration = cachedSdkConfiguration.initConfiguration\n\n if (!cachedSdkConfiguration.rumEnabled) {\n // RUM is switched off from the dashboard. Still refresh the document, otherwise the\n // switch would be one-way: the SDK could never learn that it has been turned back on.\n cachedInitConfiguration = initConfiguration\n refreshRemoteSdkConfiguration()\n return\n }\n }\n\n // Update the exposed initConfiguration to reflect the bridge and remote configuration overrides\n cachedInitConfiguration = initConfiguration\n\n if (cachedConfiguration) {\n displayAlreadyInitializedError('KUBESENSE_SDK', initConfiguration)\n return\n }\n\n const configuration = validateAndBuildRumConfiguration(initConfiguration, sdkName)\n if (!configuration || !isAllowedTrackingOrigins(configuration, errorStack ?? '')) {\n refreshRemoteSdkConfiguration()\n return\n }\n\n if (configuration.compressIntakeRequests && !eventBridgeAvailable && startDeflateWorker) {\n deflateWorker = startDeflateWorker(\n configuration,\n 'KubeSense RUM',\n // Worker initialization can fail asynchronously, especially in Firefox where even CSP\n // issues are reported asynchronously. For now, the SDK will continue its execution even if\n // data won't be sent to KubeSense. We could improve this behavior in the future.\n noop\n )\n if (!deflateWorker) {\n // `startDeflateWorker` should have logged an error message explaining the issue\n refreshRemoteSdkConfiguration()\n return\n }\n }\n\n cachedConfiguration = configuration\n\n trackingConsentState.tryToInit(configuration.trackingConsent)\n\n trackingConsentState.onGrantedOnce(() => {\n const { assembleTelemetry: assembleTelemetryHook } = hooks\n startTrackingConsentContext(assembleTelemetryHook, trackingConsentState)\n telemetry = mockable(startTelemetry)(TelemetryService.RUM, configuration, assembleTelemetryHook, sdkName)\n\n if (isWorkerEnvironment) {\n display.warn('The RUM SDK is not supported in a web or service worker environment.')\n return\n }\n\n const sessionManagerPromise = canUseEventBridge()\n ? startSessionManagerStub()\n : mockable(startSessionManager)(configuration, trackingConsentState)\n\n void sessionManagerPromise\n .then((newSessionManager) => {\n if (!newSessionManager) {\n return\n }\n sessionManager = newSessionManager\n startTelemetrySessionContext(assembleTelemetryHook, sessionManager, {\n application: { id: configuration.applicationId },\n })\n addTelemetryConfiguration(serializeRumConfiguration(initConfiguration, sdkName, remoteConfigurationMetadata))\n\n tryStartRum()\n\n // Fire-and-forget, after the SDK is running: refreshes the cache for the next page load.\n refreshRemoteSdkConfiguration()\n })\n .catch(monitorError)\n })\n }\n\n const addOperationStepVital = (\n name: string,\n stepType: 'start' | 'end',\n options?: OperationOptions,\n failureReason?: FailureReason\n ) => {\n bufferApiCalls.notify((startRumResult) =>\n startRumResult.addOperationStepVital(\n sanitize(name)!,\n stepType,\n sanitize(options) as OperationOptions,\n sanitize(failureReason) as FailureReason | undefined\n )\n )\n }\n\n const strategy: Strategy = {\n init(initConfiguration, publicApi, errorStack) {\n if (!initConfiguration) {\n display.error('Missing configuration')\n return\n }\n // Set the experimental feature flags as early as possible, so we can use them in most places\n initFeatureFlags(initConfiguration.enableExperimentalFeatures)\n setAllowUntrustedEvents(initConfiguration.allowUntrustedEvents)\n\n // Expose the initial configuration regardless of initialization success.\n cachedInitConfiguration = initConfiguration\n\n // If we are in a Synthetics test configured to automatically inject a RUM instance, we want\n // to completely discard the customer application RUM instance by ignoring their init() call.\n // But, we should not ignore the init() call from the Synthetics-injected RUM instance, so the\n // internal `ignoreInitIfSyntheticsWillInjectRum` option is here to bypass this condition.\n if (ignoreInitIfSyntheticsWillInjectRum && willSyntheticsInjectRum()) {\n return\n }\n\n const shouldContinue = callPluginsOnInit(initConfiguration.plugins, {\n initConfiguration,\n publicApi,\n registerAssembleEventHook: hooks.assembleEvent.register,\n })\n\n if (typeof shouldContinue === 'boolean') {\n if (shouldContinue) {\n proceedWithInit()\n }\n } else {\n shouldContinue\n .then((result) => {\n if (result) {\n proceedWithInit()\n }\n })\n .catch(monitorError)\n }\n\n function proceedWithInit() {\n const hasRemoteConfiguration = getRemoteConfigurationId(initConfiguration)\n\n if (hasRemoteConfiguration) {\n const supportedContextManagers = { user: userContext, context: globalContext }\n const isSyncLoading =\n !!initConfiguration.remoteConfigurationId || !!initConfiguration.remoteConfiguration?.sync\n\n if (isSyncLoading) {\n fetchAndApplyRemoteConfiguration(initConfiguration, supportedContextManagers)\n .then((resolvedInitConfiguration) => {\n if (resolvedInitConfiguration) {\n doInit(resolvedInitConfiguration, errorStack)\n }\n })\n .catch(monitorError)\n } else {\n const resolvedRemoteConfiguration = getRemoteConfiguration(initConfiguration, supportedContextManagers)\n\n if (resolvedRemoteConfiguration) {\n doInit(resolvedRemoteConfiguration.initConfiguration, errorStack, resolvedRemoteConfiguration.metadata)\n }\n }\n } else {\n doInit(initConfiguration, errorStack)\n }\n }\n },\n\n get initConfiguration() {\n return cachedInitConfiguration\n },\n\n getInternalContext: noop as () => undefined,\n\n stopSession: noop,\n\n addTiming(name, time = timeStampNow()) {\n bufferApiCalls.notify((startRumResult) => startRumResult.addTiming(name, time))\n },\n\n setLoadingTime: ((callTimestamp: TimeStamp) => {\n bufferApiCalls.notify((startRumResult) => startRumResult.setLoadingTime(callTimestamp))\n }) as Strategy['setLoadingTime'],\n\n startView(options, startClocks = clocksNow()) {\n const callback = (startRumResult: StartRumResult) => {\n startRumResult.startView(options, startClocks)\n }\n bufferApiCalls.notify(callback)\n\n if (!firstStartViewCall) {\n firstStartViewCall = { options, callback }\n tryStartRum()\n }\n },\n\n setViewName(name) {\n bufferApiCalls.notify((startRumResult) => startRumResult.setViewName(name))\n },\n\n // View context APIs\n\n setViewContext(context) {\n bufferApiCalls.notify((startRumResult) => startRumResult.setViewContext(context))\n },\n\n setViewContextProperty(key, value) {\n bufferApiCalls.notify((startRumResult) => startRumResult.setViewContextProperty(key, value))\n },\n\n getViewContext: () => emptyContext,\n\n globalContext,\n userContext,\n accountContext,\n\n addAction(action) {\n bufferApiCalls.notify((startRumResult) => startRumResult.addAction(action))\n },\n\n startAction(name, options) {\n const startClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.startAction(name, options, startClocks))\n },\n\n stopAction(name, options) {\n const stopClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.stopAction(name, options, stopClocks))\n },\n\n startResource(url, options) {\n const startClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.startResource(url, options, startClocks))\n },\n\n stopResource(url, options) {\n const stopClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.stopResource(url, options, stopClocks))\n },\n\n addError(providedError) {\n bufferApiCalls.notify((startRumResult) => startRumResult.addError(providedError))\n },\n\n addFeatureFlagEvaluation(key, value) {\n bufferApiCalls.notify((startRumResult) => startRumResult.addFeatureFlagEvaluation(key, value))\n },\n\n startDurationVital(name, options) {\n const startClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.startDurationVital(name, options, startClocks))\n },\n\n stopDurationVital(name, options) {\n const stopClocks = clocksNow()\n bufferApiCalls.notify((startRumResult) => startRumResult.stopDurationVital(name, options, stopClocks))\n },\n\n addDurationVital(vital) {\n bufferApiCalls.notify((startRumResult) => startRumResult.addDurationVital(vital))\n },\n addOperationStepVital,\n }\n\n return strategy\n}\n\nfunction overrideInitConfigurationForBridge(initConfiguration: RumInitConfiguration): RumInitConfiguration {\n return {\n ...initConfiguration,\n // Resolve the service default here, while the web application id is still available: the\n // placeholder below would otherwise be used, and it is shared by every bridge session.\n service: initConfiguration.service || initConfiguration.applicationId,\n applicationId: '00000000-aaaa-0000-aaaa-000000000000',\n clientToken: 'empty',\n sessionSampleRate: 100,\n defaultPrivacyLevel: initConfiguration.defaultPrivacyLevel ?? getEventBridge()?.getPrivacyLevel(),\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { ActionType, VitalType } from "../rawRumEvent.types.mjs";
|
|
2
|
+
import { DEFAULT_TRACKED_RESOURCE_HEADERS } from "../domain/configuration/configuration.mjs";
|
|
3
|
+
import "../domain/configuration/index.mjs";
|
|
4
|
+
import { callPluginsOnRumStart } from "../domain/plugins.mjs";
|
|
5
|
+
import { createPreStartStrategy } from "./preStartRum.mjs";
|
|
6
|
+
import { startRum } from "./startRum.mjs";
|
|
7
|
+
import { clocksNow, timeStampNow, timeStampToClocks } from "@kubesense/kubesense-js-core/time";
|
|
8
|
+
import { deepClone } from "@kubesense/kubesense-js-core/util";
|
|
9
|
+
import { ContextManagerMethod, CustomerContextKey, addTelemetryUsage, createHandlingStack, createIdentityEncoder, createTrackingConsentState, defineContextMethod, display, displayAlreadyInitializedError, generateUUID, makePublicApi, mockable, sanitize, startBufferingData } from "@kubesense/kubesense-browser-core";
|
|
10
|
+
import { callMonitored, monitor } from "@kubesense/kubesense-js-core/monitor";
|
|
11
|
+
//#region src/boot/rumPublicApi.ts
|
|
12
|
+
function makeRumPublicApi(recorderApi, profilerApi, options = {}) {
|
|
13
|
+
const trackingConsentState = createTrackingConsentState();
|
|
14
|
+
const bufferedData = startBufferingData();
|
|
15
|
+
let strategy = createPreStartStrategy(options, trackingConsentState, (configuration, sessionManager, deflateWorker, initialViewOptions, telemetry, hooks) => {
|
|
16
|
+
const createEncoder = deflateWorker && options.createDeflateEncoder ? (streamId) => options.createDeflateEncoder(deflateWorker, streamId) : createIdentityEncoder;
|
|
17
|
+
const startRumResult = mockable(startRum)(configuration, sessionManager, recorderApi, profilerApi, initialViewOptions, createEncoder, bufferedData.observable, telemetry, hooks, options.sdkName);
|
|
18
|
+
recorderApi.onRumStart(startRumResult.lifeCycle, configuration, sessionManager, startRumResult.viewHistory, deflateWorker, startRumResult.telemetry);
|
|
19
|
+
profilerApi.onRumStart(startRumResult.lifeCycle, startRumResult.hooks, configuration, sessionManager, startRumResult.viewHistory, createEncoder);
|
|
20
|
+
strategy = createPostStartStrategy(strategy, startRumResult);
|
|
21
|
+
callPluginsOnRumStart(configuration.plugins, {
|
|
22
|
+
addEvent: startRumResult.addEvent,
|
|
23
|
+
addError: startRumResult.addError
|
|
24
|
+
});
|
|
25
|
+
return startRumResult;
|
|
26
|
+
});
|
|
27
|
+
const getStrategy = () => strategy;
|
|
28
|
+
const startView = (options) => {
|
|
29
|
+
const handlingStack = createHandlingStack("view");
|
|
30
|
+
callMonitored(() => {
|
|
31
|
+
const sanitizedOptions = typeof options === "object" ? options : { name: options };
|
|
32
|
+
strategy.startView({
|
|
33
|
+
...sanitizedOptions,
|
|
34
|
+
name: sanitizeStringOption(sanitizedOptions.name, "view name"),
|
|
35
|
+
service: sanitizeStringOption(sanitizedOptions.service, "view service"),
|
|
36
|
+
version: sanitizeStringOption(sanitizedOptions.version, "view version"),
|
|
37
|
+
handlingStack
|
|
38
|
+
});
|
|
39
|
+
addTelemetryUsage({ feature: "start-view" });
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const startOperation = (name, options) => {
|
|
43
|
+
const handlingStack = createHandlingStack("vital");
|
|
44
|
+
callMonitored(() => {
|
|
45
|
+
addTelemetryUsage({
|
|
46
|
+
feature: "add-operation-step-vital",
|
|
47
|
+
action_type: "start"
|
|
48
|
+
});
|
|
49
|
+
strategy.addOperationStepVital(name, "start", {
|
|
50
|
+
...options,
|
|
51
|
+
handlingStack
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const succeedOperation = monitor((name, options) => {
|
|
56
|
+
addTelemetryUsage({
|
|
57
|
+
feature: "add-operation-step-vital",
|
|
58
|
+
action_type: "succeed"
|
|
59
|
+
});
|
|
60
|
+
strategy.addOperationStepVital(name, "end", options);
|
|
61
|
+
});
|
|
62
|
+
const failOperation = monitor((name, failureReason, options) => {
|
|
63
|
+
addTelemetryUsage({
|
|
64
|
+
feature: "add-operation-step-vital",
|
|
65
|
+
action_type: "fail"
|
|
66
|
+
});
|
|
67
|
+
strategy.addOperationStepVital(name, "end", options, failureReason);
|
|
68
|
+
});
|
|
69
|
+
const rumPublicApi = makePublicApi({
|
|
70
|
+
init: (initConfiguration) => {
|
|
71
|
+
const errorStack = (/* @__PURE__ */ new Error()).stack;
|
|
72
|
+
callMonitored(() => strategy.init(initConfiguration, rumPublicApi, errorStack));
|
|
73
|
+
},
|
|
74
|
+
setTrackingConsent: monitor((trackingConsent) => {
|
|
75
|
+
trackingConsentState.update(trackingConsent);
|
|
76
|
+
addTelemetryUsage({
|
|
77
|
+
feature: "set-tracking-consent",
|
|
78
|
+
tracking_consent: trackingConsent
|
|
79
|
+
});
|
|
80
|
+
}),
|
|
81
|
+
setViewName: monitor((name) => {
|
|
82
|
+
strategy.setViewName(sanitizeStringOption(name, "view name"));
|
|
83
|
+
addTelemetryUsage({ feature: "set-view-name" });
|
|
84
|
+
}),
|
|
85
|
+
setViewContext: monitor((context) => {
|
|
86
|
+
strategy.setViewContext(context);
|
|
87
|
+
addTelemetryUsage({ feature: "set-view-context" });
|
|
88
|
+
}),
|
|
89
|
+
setViewContextProperty: monitor((key, value) => {
|
|
90
|
+
strategy.setViewContextProperty(key, value);
|
|
91
|
+
addTelemetryUsage({ feature: "set-view-context-property" });
|
|
92
|
+
}),
|
|
93
|
+
getViewContext: monitor(() => {
|
|
94
|
+
addTelemetryUsage({ feature: "set-view-context-property" });
|
|
95
|
+
return strategy.getViewContext();
|
|
96
|
+
}),
|
|
97
|
+
getInternalContext: monitor((startTime) => strategy.getInternalContext(startTime)),
|
|
98
|
+
getInitConfiguration: monitor(() => deepClone(strategy.initConfiguration)),
|
|
99
|
+
addAction: (name, context) => {
|
|
100
|
+
const handlingStack = createHandlingStack("action");
|
|
101
|
+
callMonitored(() => {
|
|
102
|
+
strategy.addAction({
|
|
103
|
+
name: sanitize(name),
|
|
104
|
+
context: sanitize(context),
|
|
105
|
+
startClocks: clocksNow(),
|
|
106
|
+
type: ActionType.CUSTOM,
|
|
107
|
+
handlingStack
|
|
108
|
+
});
|
|
109
|
+
addTelemetryUsage({ feature: "add-action" });
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
startAction: monitor((name, options) => {
|
|
113
|
+
addTelemetryUsage({ feature: "start-action" });
|
|
114
|
+
strategy.startAction(sanitize(name), {
|
|
115
|
+
type: sanitize(options?.type),
|
|
116
|
+
context: sanitize(options?.context),
|
|
117
|
+
actionKey: options?.actionKey
|
|
118
|
+
});
|
|
119
|
+
}),
|
|
120
|
+
stopAction: monitor((name, options) => {
|
|
121
|
+
addTelemetryUsage({ feature: "stop-action" });
|
|
122
|
+
strategy.stopAction(sanitize(name), {
|
|
123
|
+
type: sanitize(options?.type),
|
|
124
|
+
context: sanitize(options?.context),
|
|
125
|
+
actionKey: options?.actionKey
|
|
126
|
+
});
|
|
127
|
+
}),
|
|
128
|
+
startResource: monitor((url, options) => {
|
|
129
|
+
addTelemetryUsage({ feature: "start-resource" });
|
|
130
|
+
strategy.startResource(sanitize(url), {
|
|
131
|
+
type: sanitize(options?.type),
|
|
132
|
+
method: sanitize(options?.method),
|
|
133
|
+
context: sanitize(options?.context),
|
|
134
|
+
resourceKey: options?.resourceKey
|
|
135
|
+
});
|
|
136
|
+
}),
|
|
137
|
+
stopResource: monitor((url, options) => {
|
|
138
|
+
addTelemetryUsage({ feature: "stop-resource" });
|
|
139
|
+
strategy.stopResource(sanitize(url), {
|
|
140
|
+
type: sanitize(options?.type),
|
|
141
|
+
statusCode: options?.statusCode,
|
|
142
|
+
size: options?.size,
|
|
143
|
+
context: sanitize(options?.context),
|
|
144
|
+
resourceKey: options?.resourceKey
|
|
145
|
+
});
|
|
146
|
+
}),
|
|
147
|
+
addError: (error, context) => {
|
|
148
|
+
const handlingStack = createHandlingStack("error");
|
|
149
|
+
callMonitored(() => {
|
|
150
|
+
strategy.addError({
|
|
151
|
+
error,
|
|
152
|
+
handlingStack,
|
|
153
|
+
context: sanitize(context),
|
|
154
|
+
startClocks: clocksNow()
|
|
155
|
+
});
|
|
156
|
+
addTelemetryUsage({ feature: "add-error" });
|
|
157
|
+
});
|
|
158
|
+
},
|
|
159
|
+
addTiming: monitor((name, time) => {
|
|
160
|
+
strategy.addTiming(sanitize(name), time);
|
|
161
|
+
}),
|
|
162
|
+
setViewLoadingTime: monitor(() => {
|
|
163
|
+
const callTimestamp = timeStampNow();
|
|
164
|
+
strategy.setLoadingTime(callTimestamp);
|
|
165
|
+
addTelemetryUsage({ feature: "addViewLoadingTime" });
|
|
166
|
+
}),
|
|
167
|
+
setGlobalContext: defineContextMethod(getStrategy, CustomerContextKey.globalContext, ContextManagerMethod.setContext, "set-global-context"),
|
|
168
|
+
getGlobalContext: defineContextMethod(getStrategy, CustomerContextKey.globalContext, ContextManagerMethod.getContext, "get-global-context"),
|
|
169
|
+
setGlobalContextProperty: defineContextMethod(getStrategy, CustomerContextKey.globalContext, ContextManagerMethod.setContextProperty, "set-global-context-property"),
|
|
170
|
+
removeGlobalContextProperty: defineContextMethod(getStrategy, CustomerContextKey.globalContext, ContextManagerMethod.removeContextProperty, "remove-global-context-property"),
|
|
171
|
+
clearGlobalContext: defineContextMethod(getStrategy, CustomerContextKey.globalContext, ContextManagerMethod.clearContext, "clear-global-context"),
|
|
172
|
+
setUser: defineContextMethod(getStrategy, CustomerContextKey.userContext, ContextManagerMethod.setContext, "set-user"),
|
|
173
|
+
getUser: defineContextMethod(getStrategy, CustomerContextKey.userContext, ContextManagerMethod.getContext, "get-user"),
|
|
174
|
+
setUserProperty: defineContextMethod(getStrategy, CustomerContextKey.userContext, ContextManagerMethod.setContextProperty, "set-user-property"),
|
|
175
|
+
removeUserProperty: defineContextMethod(getStrategy, CustomerContextKey.userContext, ContextManagerMethod.removeContextProperty, "remove-user-property"),
|
|
176
|
+
clearUser: defineContextMethod(getStrategy, CustomerContextKey.userContext, ContextManagerMethod.clearContext, "clear-user"),
|
|
177
|
+
setAccount: defineContextMethod(getStrategy, CustomerContextKey.accountContext, ContextManagerMethod.setContext, "set-account"),
|
|
178
|
+
getAccount: defineContextMethod(getStrategy, CustomerContextKey.accountContext, ContextManagerMethod.getContext, "get-account"),
|
|
179
|
+
setAccountProperty: defineContextMethod(getStrategy, CustomerContextKey.accountContext, ContextManagerMethod.setContextProperty, "set-account-property"),
|
|
180
|
+
removeAccountProperty: defineContextMethod(getStrategy, CustomerContextKey.accountContext, ContextManagerMethod.removeContextProperty, "remove-account-property"),
|
|
181
|
+
clearAccount: defineContextMethod(getStrategy, CustomerContextKey.accountContext, ContextManagerMethod.clearContext, "clear-account"),
|
|
182
|
+
startView,
|
|
183
|
+
stopSession: monitor(() => {
|
|
184
|
+
strategy.stopSession();
|
|
185
|
+
addTelemetryUsage({ feature: "stop-session" });
|
|
186
|
+
}),
|
|
187
|
+
addFeatureFlagEvaluation: monitor((key, value) => {
|
|
188
|
+
strategy.addFeatureFlagEvaluation(sanitize(key), sanitize(value));
|
|
189
|
+
addTelemetryUsage({ feature: "add-feature-flag-evaluation" });
|
|
190
|
+
}),
|
|
191
|
+
getSessionReplayLink: monitor(() => recorderApi.getSessionReplayLink()),
|
|
192
|
+
startSessionReplayRecording: monitor((options) => {
|
|
193
|
+
recorderApi.start(options);
|
|
194
|
+
addTelemetryUsage({
|
|
195
|
+
feature: "start-session-replay-recording",
|
|
196
|
+
force: options?.force
|
|
197
|
+
});
|
|
198
|
+
}),
|
|
199
|
+
stopSessionReplayRecording: monitor(() => recorderApi.stop()),
|
|
200
|
+
addDurationVital: (name, options) => {
|
|
201
|
+
const handlingStack = createHandlingStack("vital");
|
|
202
|
+
callMonitored(() => {
|
|
203
|
+
addTelemetryUsage({ feature: "add-duration-vital" });
|
|
204
|
+
strategy.addDurationVital({
|
|
205
|
+
id: generateUUID(),
|
|
206
|
+
name: sanitize(name),
|
|
207
|
+
type: VitalType.DURATION,
|
|
208
|
+
startClocks: timeStampToClocks(options.startTime),
|
|
209
|
+
duration: options.duration,
|
|
210
|
+
context: sanitize(options?.context),
|
|
211
|
+
description: sanitize(options?.description),
|
|
212
|
+
handlingStack
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
},
|
|
216
|
+
startDurationVital: (name, options) => {
|
|
217
|
+
const handlingStack = createHandlingStack("vital");
|
|
218
|
+
callMonitored(() => {
|
|
219
|
+
addTelemetryUsage({ feature: "start-duration-vital" });
|
|
220
|
+
strategy.startDurationVital(sanitize(name), {
|
|
221
|
+
vitalKey: options?.vitalKey,
|
|
222
|
+
context: sanitize(options?.context),
|
|
223
|
+
description: sanitize(options?.description),
|
|
224
|
+
handlingStack
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
},
|
|
228
|
+
stopDurationVital: monitor((name, options) => {
|
|
229
|
+
addTelemetryUsage({ feature: "stop-duration-vital" });
|
|
230
|
+
strategy.stopDurationVital(sanitize(name), {
|
|
231
|
+
vitalKey: options?.vitalKey,
|
|
232
|
+
context: sanitize(options?.context),
|
|
233
|
+
description: sanitize(options?.description)
|
|
234
|
+
});
|
|
235
|
+
}),
|
|
236
|
+
startOperation,
|
|
237
|
+
succeedOperation,
|
|
238
|
+
failOperation,
|
|
239
|
+
startFeatureOperation: startOperation,
|
|
240
|
+
succeedFeatureOperation: succeedOperation,
|
|
241
|
+
failFeatureOperation: failOperation,
|
|
242
|
+
DEFAULT_TRACKED_RESOURCE_HEADERS
|
|
243
|
+
});
|
|
244
|
+
return rumPublicApi;
|
|
245
|
+
}
|
|
246
|
+
function sanitizeStringOption(value, label) {
|
|
247
|
+
if (value === void 0) return;
|
|
248
|
+
if (typeof value !== "string") {
|
|
249
|
+
display.warn(`Invalid ${label} provided (expected a string, got ${typeof value}). Ignoring.`);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
return sanitize(value);
|
|
253
|
+
}
|
|
254
|
+
function createPostStartStrategy(preStartStrategy, startRumResult) {
|
|
255
|
+
return {
|
|
256
|
+
...preStartStrategy,
|
|
257
|
+
init: (initConfiguration) => {
|
|
258
|
+
displayAlreadyInitializedError("KUBESENSE_SDK", initConfiguration);
|
|
259
|
+
},
|
|
260
|
+
getInternalContext: startRumResult.getInternalContext,
|
|
261
|
+
stopSession: startRumResult.stopSession,
|
|
262
|
+
getViewContext: startRumResult.getViewContext,
|
|
263
|
+
globalContext: startRumResult.globalContext,
|
|
264
|
+
userContext: startRumResult.userContext,
|
|
265
|
+
accountContext: startRumResult.accountContext
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
//#endregion
|
|
269
|
+
export { makeRumPublicApi };
|
|
270
|
+
|
|
271
|
+
//# sourceMappingURL=rumPublicApi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rumPublicApi.mjs","names":[],"sources":["../../src/boot/rumPublicApi.ts"],"sourcesContent":["import { timeStampNow, clocksNow, timeStampToClocks } from '@kubesense/kubesense-js-core/time'\nimport { deepClone } from '@kubesense/kubesense-js-core/util'\nimport type { Duration, TimeStamp, RelativeTime } from '@kubesense/kubesense-js-core/time'\nimport type {\n Context,\n DeflateWorker,\n DeflateEncoderStreamId,\n DeflateEncoder,\n PublicApi,\n ContextManager,\n TrackingConsent,\n User,\n Account,\n RumInternalContext,\n Telemetry,\n Encoder,\n ResourceType,\n SessionManager,\n} from '@kubesense/kubesense-browser-core'\nimport {\n ContextManagerMethod,\n addTelemetryUsage,\n makePublicApi,\n createHandlingStack,\n sanitize,\n createIdentityEncoder,\n displayAlreadyInitializedError,\n createTrackingConsentState,\n CustomerContextKey,\n defineContextMethod,\n startBufferingData,\n mockable,\n generateUUID,\n display,\n} from '@kubesense/kubesense-browser-core'\nimport { monitor, callMonitored } from '@kubesense/kubesense-js-core/monitor'\n\nimport type { LifeCycle } from '../domain/lifeCycle'\nimport type { ViewHistory } from '../domain/contexts/viewHistory'\nimport type { ReplayStats } from '../rawRumEvent.types'\nimport { ActionType, VitalType } from '../rawRumEvent.types'\nimport { DEFAULT_TRACKED_RESOURCE_HEADERS } from '../domain/configuration'\nimport type { RumConfiguration, RumInitConfiguration } from '../domain/configuration'\nimport type { ViewOptions } from '../domain/view/trackViews'\nimport type {\n AddDurationVitalOptions,\n DurationVitalOptions,\n OperationOptions,\n FeatureOperationOptions,\n FailureReason,\n} from '../domain/vital/vitalCollection'\nimport { callPluginsOnRumStart } from '../domain/plugins'\nimport type { Hooks } from '../domain/hooks'\nimport type { SdkName } from '../domain/contexts/defaultContext'\nimport type { ActionOptions } from '../domain/action/trackManualActions'\nimport type { ResourceOptions, ResourceStopOptions } from '../domain/resource/trackManualResources'\nimport { createPreStartStrategy } from './preStartRum'\nimport type { StartRumResult } from './startRum'\nimport { startRum } from './startRum'\n\nexport interface StartRecordingOptions {\n force: boolean\n}\n\n/**\n * Public API for the RUM browser SDK.\n *\n * See [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser) for further information.\n *\n * @category Main\n */\nexport interface RumPublicApi extends PublicApi {\n /**\n * Init the RUM browser SDK.\n *\n * See [RUM Browser Monitoring Setup](https://docs.kubesense.ai/real_user_monitoring/browser) for further information.\n *\n * @category Init\n * @param initConfiguration - Configuration options of the SDK\n * @example\n * ```ts\n * kubesenseSdk.init({\n * applicationId: '<KUBESENSE_APPLICATION_ID>',\n * clientToken: '<KUBESENSE_CLIENT_TOKEN>',\n * kubesenseRumEndpoint: '<KUBESENSE_RUM_ENDPOINT>',\n * // ...\n * })\n * ```\n */\n init: (initConfiguration: RumInitConfiguration) => void\n\n /**\n * Set the tracking consent of the current user.\n *\n * Data will be sent only if it is set to \"granted\". This value won't be stored by the library\n * across page loads: you will need to call this method or set the appropriate `trackingConsent`\n * field in the init() method at each page load.\n *\n * If this method is called before the init() method, the provided value will take precedence\n * over the one provided as initialization parameter.\n *\n * See [User tracking consent](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-tracking-consent) for further information.\n *\n * @category Privacy\n * @param trackingConsent - The user tracking consent\n */\n setTrackingConsent: (trackingConsent: TrackingConsent) => void\n\n /**\n * Set View Name.\n *\n * Enable to manually change the name of the current view.\n * See [Override default RUM view names](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#override-default-rum-view-names) for further information.\n *\n * @category Context - View\n * @param name - Name of the view\n */\n setViewName: (name: string) => void\n\n /**\n * Set View Context.\n *\n * Enable to manually set the context of the current view.\n *\n * @category Context - View\n * @param context - Context of the view\n */\n setViewContext: (context: Context) => void\n /**\n * Set View Context Property.\n *\n * Enable to manually set a property of the context of the current view.\n *\n * @category Context - View\n * @param key - key of the property\n * @param value - value of the property\n */\n setViewContextProperty: (key: string, value: any) => void\n\n /**\n * Get View Context.\n *\n * @category Context - View\n */\n getViewContext(): Context\n\n /**\n * [Internal API] Get the internal SDK context\n *\n * @internal\n */\n getInternalContext: (startTime?: number) => RumInternalContext | undefined\n\n /**\n * Get the init configuration\n *\n * @category Init\n * @returns RumInitConfiguration | undefined\n */\n getInitConfiguration: () => RumInitConfiguration | undefined\n\n /**\n * Add a custom action, stored in `@action`\n *\n * See [Send RUM Custom Actions](https://docs.kubesense.ai/real_user_monitoring/guide/send-rum-custom-actions) for further information.\n *\n * @category Data Collection\n * @param name - Name of the action\n * @param context - Context of the action\n */\n addAction: (name: string, context?: object) => void\n\n /**\n * Start tracking a custom action.\n *\n * Call {@link stopAction} with the same name (and optional `actionKey`) to send a RUM action event\n * with the elapsed duration. Errors and resources triggered between start and stop are associated\n * with the action.\n *\n * @category Data Collection\n * @param name - Name of the action\n * @param options - Options of the action (@default type: 'custom')\n * @example\n * ```ts\n * kubesenseSdk.startAction('checkout', { context: { cartId: 'abc' } })\n * // ... user completes checkout\n * kubesenseSdk.stopAction('checkout')\n * ```\n */\n startAction: (name: string, options?: ActionOptions) => void\n\n /**\n * Stop tracking a custom action started with {@link startAction}.\n *\n * Sends a RUM action event with the elapsed duration since the matching start call. Context from\n * start and stop calls is merged into the event.\n *\n * @category Data Collection\n * @param name - Name of the action\n * @param options - Options of the action\n */\n stopAction: (name: string, options?: ActionOptions) => void\n\n /**\n * Start tracking a resource manually.\n *\n * Use this for network activity that the SDK cannot automatically instrument. Call {@link stopResource}\n * with the same URL (and optional `resourceKey`) to send a RUM resource event with the elapsed duration.\n *\n * @category Data Collection\n * @param url - URL of the resource\n * @param options - Options of the resource (@default type: 'other')\n * @example\n * ```ts\n * kubesenseSdk.startResource('https://api.example.com/users', { type: 'fetch', method: 'POST' })\n * // ... perform the request\n * kubesenseSdk.stopResource('https://api.example.com/users', { statusCode: 201 })\n * ```\n */\n startResource: (url: string, options?: ResourceOptions) => void\n\n /**\n * Stop tracking a resource started with {@link startResource}.\n *\n * Sends a RUM resource event with the elapsed duration since the matching start call. Context from\n * start and stop calls is merged into the event.\n *\n * @category Data Collection\n * @param url - URL of the resource\n * @param options - Options of the resource\n */\n stopResource: (url: string, options?: ResourceStopOptions) => void\n\n /**\n * Add a custom error, stored in `@error`.\n *\n * See [Send RUM Custom Actions](https://docs.kubesense.ai/real_user_monitoring/guide/send-rum-custom-actions) for further information.\n *\n * @category Data Collection\n * @param error - Error. Favor sending a [Javascript Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) to have a stack trace attached to the error event.\n * @param context - Context of the error\n */\n addError: (error: unknown, context?: object) => void\n\n /**\n * Add a custom timing relative to the start of the current view,\n * stored in `@view.custom_timings.<timing_name>`\n *\n * Note: passing a relative time is discouraged since it is actually used as-is but displayed relative to the view start.\n * We currently don't provide a way to retrieve the view start time, so it can be challenging to provide a timing relative to the view start.\n *\n * @category Data Collection\n * @param name - Name of the custom timing\n * @param [time] - Epoch timestamp of the custom timing (if not set, will use current time)\n */\n addTiming: (name: string, time?: number) => void\n\n /**\n * [Experimental] Manually set the current view's loading time.\n *\n * Call this method when the view has finished loading. The loading time is computed as the\n * elapsed time since the view started. Each call replaces any previously set value (last-call-wins).\n *\n * @category Data Collection\n */\n setViewLoadingTime: () => void\n\n /**\n * Set the global context information to all events, stored in `@context`\n * See [Global context](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#global-context) for further information.\n *\n * @category Context - Global Context\n * @param context - Global context\n */\n setGlobalContext: (context: Context) => void\n\n /**\n * Get the global Context\n *\n * See [Global context](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#global-context) for further information.\n *\n * @category Context - Global Context\n */\n getGlobalContext: () => Context\n\n /**\n * Set or update a global context property, stored in `@context.<key>`\n *\n * See [Global context](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#global-context) for further information.\n *\n * @category Context - Global Context\n * @param key - Key of the property\n * @param value - Value of the property\n */\n setGlobalContextProperty: (key: any, value: any) => void\n\n /**\n * Remove a global context property\n *\n * See [Global context](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#global-context) for further information.\n *\n * @category Context - Global Context\n */\n removeGlobalContextProperty: (key: any) => void\n\n /**\n * Clear the global context\n *\n * See [Global context](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#global-context) for further information.\n *\n * @category Context - Global Context\n */\n clearGlobalContext(): void\n\n /**\n * Set user information to all events, stored in `@usr`\n *\n * See [User session](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-session) for further information.\n *\n * @category Context - User\n * @param newUser - User information\n */\n setUser(newUser: User & { id: string }): void\n\n /**\n * Set user information to all events, stored in `@usr`\n *\n * @category Context - User\n * @deprecated You must specify a user id, favor using {@link setUser} instead\n * @param newUser - User information with optional id\n */\n setUser(newUser: User): void\n\n /**\n * Get user information\n *\n * See [User session](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-session) for further information.\n *\n * @category Context - User\n * @returns User information\n */\n getUser: () => Context\n\n /**\n * Set or update the user property, stored in `@usr.<key>`\n *\n * See [User session](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-session) for further information.\n *\n * @category Context - User\n * @param key - Key of the property\n * @param property - Value of the property\n */\n setUserProperty: (key: any, property: any) => void\n\n /**\n * Remove a user property\n *\n * @category Context - User\n * @param key - Key of the property to remove\n * @see [User session](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-session) for further information.\n */\n removeUserProperty: (key: any) => void\n\n /**\n * Clear all user information\n *\n * See [User session](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#user-session) for further information.\n *\n * @category Context - User\n */\n clearUser: () => void\n\n /**\n * Set account information to all events, stored in `@account`\n *\n * @category Context - Account\n * @param newAccount - Account information\n */\n setAccount: (newAccount: Account) => void\n\n /**\n * Get account information\n *\n * @category Context - Account\n * @returns Account information\n */\n getAccount: () => Context\n\n /**\n * Set or update the account property, stored in `@account.<key>`\n *\n * @category Context - Account\n * @param key - Key of the property\n * @param property - Value of the property\n */\n setAccountProperty: (key: string, property: any) => void\n\n /**\n * Remove an account property\n *\n * @category Context - Account\n * @param key - Key of the property to remove\n */\n removeAccountProperty: (key: string) => void\n\n /**\n * Clear all account information\n *\n * @category Context - Account\n * @returns Clear all account information\n */\n clearAccount: () => void\n /**\n * Start a view manually.\n * Enable to manual start a view, use `trackViewsManually: true` init parameter and call `startView()` to create RUM views and be aligned with how you’ve defined them in your SPA application routing.\n *\n * See [Override default RUM view names](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/#override-default-rum-view-names) for further information.\n *\n * Context - @category Data Collection\n *\n * @param nameOrOptions - The view name, or a {@link ViewOptions} object to configure the view\n */\n startView(nameOrOptions?: string | ViewOptions): void\n\n /**\n * Stop the session. A new session will start at the next user interaction with the page.\n *\n * @category Session\n */\n stopSession(): void\n\n /**\n * Add a feature flag evaluation,\n * stored in `@feature_flags.<feature_flag_key>`\n *\n * We recommend enabling the intake request compression when using feature flags `compressIntakeRequests: true`.\n *\n * See [Feature Flag Tracking](https://docs.kubesense.ai/real_user_monitoring/feature_flag_tracking/) for further information.\n *\n * @category Data Collection\n * @param key - The key of the feature flag.\n * @param value - The value of the feature flag.\n */\n addFeatureFlagEvaluation: (key: string, value: any) => void\n\n /**\n * Get the Session Replay Link.\n *\n * See [Connect Session Replay To Your Third-Party Tools](https://docs.kubesense.ai/real_user_monitoring/guide/connect-session-replay-to-your-third-party-tools) for further information.\n *\n * @category Session Replay\n */\n getSessionReplayLink: () => string | undefined\n\n /**\n * Start Session Replay recording.\n * Enable to conditionally start the recording, use the `startSessionReplayRecordingManually:true` init parameter and call `startSessionReplayRecording()`\n *\n * See [Browser Session Replay](https://docs.kubesense.ai/real_user_monitoring/session_replay/browser) for further information.\n *\n * @category Session Replay\n */\n startSessionReplayRecording: (options?: StartRecordingOptions) => void\n\n /**\n * Stop Session Replay recording.\n *\n * See [Browser Session Replay](https://docs.kubesense.ai/real_user_monitoring/session_replay/browser) for further information.\n *\n * @category Session Replay\n */\n stopSessionReplayRecording: () => void\n\n /**\n * Add a custom duration vital\n *\n * @category Vital - Duration\n * @param name - Name of the custom vital\n * @param options - Options for the custom vital (startTime, duration, context, description)\n */\n addDurationVital: (name: string, options: AddDurationVitalOptions) => void\n\n /**\n * Start a custom duration vital.\n *\n * If you plan to have multiple durations for the same vital, use the `vitalKey` option to\n * differentiate them. Provide the same key when calling `stopDurationVital`.\n *\n * @category Vital - Duration\n * @param name - Name of the custom vital\n * @param options - Options for the custom vital (vitalKey, context, description)\n * @example\n * ```ts\n * // Simple usage\n * kubesenseSdk.startDurationVital('my-vital')\n * kubesenseSdk.stopDurationVital('my-vital')\n *\n * // Multiple simultaneous vitals with the same name\n * const key = crypto.randomUUID()\n * kubesenseSdk.startDurationVital('my-vital', { vitalKey: key })\n * kubesenseSdk.stopDurationVital('my-vital', { vitalKey: key })\n * ```\n */\n startDurationVital: (name: string, options?: DurationVitalOptions) => void\n\n /**\n * Stop a custom duration vital\n *\n * @category Vital - Duration\n * @param name - Name of the custom vital\n * @param options - Options for the custom vital (vitalKey, context, description)\n */\n stopDurationVital: (name: string, options?: DurationVitalOptions) => void\n\n /**\n * Start an operation.\n *\n * Call {@link succeedOperation} or {@link failOperation} with the same name (and optional\n * `operationKey`) to send a RUM vital event marking the end of the operation.\n *\n * @category Vital - Operation\n * @param name - Name of the operation\n * @param options - Options for the operation (operationKey, context, description)\n * @example\n * ```ts\n * kubesenseSdk.startOperation('checkout')\n * // ... perform the operation\n * kubesenseSdk.succeedOperation('checkout')\n * ```\n */\n startOperation: (name: string, options?: OperationOptions) => void\n\n /**\n * Mark an operation as successful.\n *\n * Sends a RUM vital event marking the end of the operation started with {@link startOperation}.\n *\n * @category Vital - Operation\n * @param name - Name of the operation\n * @param options - Options for the operation (operationKey, context, description)\n */\n succeedOperation: (name: string, options?: OperationOptions) => void\n\n /**\n * Mark an operation as failed.\n *\n * Sends a RUM vital event marking the end of the operation started with {@link startOperation}.\n *\n * @category Vital - Operation\n * @param name - Name of the operation\n * @param failureReason - Reason for the failure\n * @param options - Options for the operation (operationKey, context, description)\n */\n failOperation: (name: string, failureReason: FailureReason, options?: OperationOptions) => void\n\n /**\n * Start a feature operation.\n *\n * @category Vital - Feature Operation\n * @deprecated Use {@link startOperation} instead.\n * @param name - Name of the operation\n * @param options - Options for the operation (operationKey, context, description)\n */\n startFeatureOperation: (name: string, options?: FeatureOperationOptions) => void\n\n /**\n * Mark a feature operation as successful.\n *\n * @category Vital - Feature Operation\n * @deprecated Use {@link succeedOperation} instead.\n * @param name - Name of the operation\n * @param options - Options for the operation (operationKey, context, description)\n */\n succeedFeatureOperation: (name: string, options?: FeatureOperationOptions) => void\n\n /**\n * Mark a feature operation as failed.\n *\n * @category Vital - Feature Operation\n * @deprecated Use {@link failOperation} instead.\n * @param name - Name of the operation\n * @param failureReason - Reason for the failure\n * @param options - Options for the operation (operationKey, context, description)\n */\n failFeatureOperation: (name: string, failureReason: FailureReason, options?: FeatureOperationOptions) => void\n\n /**\n * List of default headers used by the {@link RumInitConfiguration.trackResourceHeaders | trackResourceHeaders} option.\n *\n * @deprecated You can now omit `name` from a MatchHeader entry to include default headers.\n */\n DEFAULT_TRACKED_RESOURCE_HEADERS: typeof DEFAULT_TRACKED_RESOURCE_HEADERS\n}\n\nexport interface RecorderApi {\n start: (options?: StartRecordingOptions) => void\n stop: () => void\n onRumStart: (\n lifeCycle: LifeCycle,\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n viewHistory: ViewHistory,\n deflateWorker: DeflateWorker | undefined,\n telemetry: Telemetry\n ) => void\n isRecording: () => boolean\n getReplayStats: (viewId: string) => ReplayStats | undefined\n getSessionReplayLink: () => string | undefined\n}\n\nexport interface ProfilerApi {\n stop: () => void\n onRumStart: (\n lifeCycle: LifeCycle,\n hooks: Hooks,\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n viewHistory: ViewHistory,\n createEncoder: (streamId: DeflateEncoderStreamId) => Encoder\n ) => void\n}\n\nexport interface RumPublicApiOptions {\n ignoreInitIfSyntheticsWillInjectRum?: boolean\n startDeflateWorker?: (\n configuration: RumConfiguration,\n source: string,\n onInitializationFailure: () => void\n ) => DeflateWorker | undefined\n createDeflateEncoder?: (worker: DeflateWorker, streamId: DeflateEncoderStreamId) => DeflateEncoder\n sdkName?: SdkName\n}\n\nexport interface Strategy {\n init: (initConfiguration: RumInitConfiguration, publicApi: RumPublicApi, errorStack?: string) => void\n initConfiguration: RumInitConfiguration | undefined\n getInternalContext: StartRumResult['getInternalContext']\n stopSession: StartRumResult['stopSession']\n addTiming: StartRumResult['addTiming']\n setLoadingTime: StartRumResult['setLoadingTime']\n startView: StartRumResult['startView']\n setViewName: StartRumResult['setViewName']\n\n setViewContext: StartRumResult['setViewContext']\n setViewContextProperty: StartRumResult['setViewContextProperty']\n getViewContext: StartRumResult['getViewContext']\n\n globalContext: ContextManager\n userContext: ContextManager\n accountContext: ContextManager\n\n addAction: StartRumResult['addAction']\n startAction: StartRumResult['startAction']\n stopAction: StartRumResult['stopAction']\n startResource: StartRumResult['startResource']\n stopResource: StartRumResult['stopResource']\n addError: StartRumResult['addError']\n addFeatureFlagEvaluation: StartRumResult['addFeatureFlagEvaluation']\n startDurationVital: StartRumResult['startDurationVital']\n stopDurationVital: StartRumResult['stopDurationVital']\n addDurationVital: StartRumResult['addDurationVital']\n addOperationStepVital: StartRumResult['addOperationStepVital']\n}\n\nexport function makeRumPublicApi(\n recorderApi: RecorderApi,\n profilerApi: ProfilerApi,\n options: RumPublicApiOptions = {}\n): RumPublicApi {\n const trackingConsentState = createTrackingConsentState()\n const bufferedData = startBufferingData()\n\n let strategy = createPreStartStrategy(\n options,\n trackingConsentState,\n (configuration, sessionManager, deflateWorker, initialViewOptions, telemetry, hooks) => {\n const createEncoder =\n deflateWorker && options.createDeflateEncoder\n ? (streamId: DeflateEncoderStreamId) => options.createDeflateEncoder!(deflateWorker, streamId)\n : createIdentityEncoder\n\n const startRumResult = mockable(startRum)(\n configuration,\n sessionManager,\n recorderApi,\n profilerApi,\n initialViewOptions,\n createEncoder,\n bufferedData.observable,\n telemetry,\n hooks,\n options.sdkName\n )\n\n recorderApi.onRumStart(\n startRumResult.lifeCycle,\n configuration,\n sessionManager,\n startRumResult.viewHistory,\n deflateWorker,\n startRumResult.telemetry\n )\n\n profilerApi.onRumStart(\n startRumResult.lifeCycle,\n startRumResult.hooks,\n configuration,\n sessionManager,\n startRumResult.viewHistory,\n createEncoder\n )\n\n strategy = createPostStartStrategy(strategy, startRumResult)\n\n callPluginsOnRumStart(configuration.plugins, {\n addEvent: startRumResult.addEvent,\n addError: startRumResult.addError,\n })\n\n return startRumResult\n }\n )\n const getStrategy = () => strategy\n\n const startView: {\n (name?: string): void\n (options: ViewOptions): void\n } = (options?: string | ViewOptions) => {\n const handlingStack = createHandlingStack('view')\n callMonitored(() => {\n const sanitizedOptions = typeof options === 'object' ? options : { name: options }\n strategy.startView({\n ...sanitizedOptions,\n name: sanitizeStringOption(sanitizedOptions.name, 'view name'),\n service: sanitizeStringOption(sanitizedOptions.service, 'view service'),\n version: sanitizeStringOption(sanitizedOptions.version, 'view version'),\n handlingStack,\n })\n addTelemetryUsage({ feature: 'start-view' })\n })\n }\n\n const startOperation: RumPublicApi['startOperation'] = (name, options) => {\n const handlingStack = createHandlingStack('vital')\n callMonitored(() => {\n addTelemetryUsage({ feature: 'add-operation-step-vital', action_type: 'start' })\n strategy.addOperationStepVital(name, 'start', { ...options, handlingStack })\n })\n }\n\n const succeedOperation: RumPublicApi['succeedOperation'] = monitor((name, options) => {\n addTelemetryUsage({ feature: 'add-operation-step-vital', action_type: 'succeed' })\n strategy.addOperationStepVital(name, 'end', options)\n })\n\n const failOperation: RumPublicApi['failOperation'] = monitor((name, failureReason, options) => {\n addTelemetryUsage({ feature: 'add-operation-step-vital', action_type: 'fail' })\n strategy.addOperationStepVital(name, 'end', options, failureReason)\n })\n\n const rumPublicApi: RumPublicApi = makePublicApi<RumPublicApi>({\n init: (initConfiguration) => {\n const errorStack = new Error().stack\n callMonitored(() => strategy.init(initConfiguration, rumPublicApi, errorStack))\n },\n\n setTrackingConsent: monitor((trackingConsent) => {\n trackingConsentState.update(trackingConsent)\n addTelemetryUsage({ feature: 'set-tracking-consent', tracking_consent: trackingConsent })\n }),\n\n setViewName: monitor((name: string) => {\n strategy.setViewName(sanitizeStringOption(name, 'view name')!)\n addTelemetryUsage({ feature: 'set-view-name' })\n }),\n\n setViewContext: monitor((context: Context) => {\n strategy.setViewContext(context)\n addTelemetryUsage({ feature: 'set-view-context' })\n }),\n\n setViewContextProperty: monitor((key: string, value: any) => {\n strategy.setViewContextProperty(key, value)\n addTelemetryUsage({ feature: 'set-view-context-property' })\n }),\n\n getViewContext: monitor(() => {\n addTelemetryUsage({ feature: 'set-view-context-property' })\n return strategy.getViewContext()\n }),\n\n getInternalContext: monitor((startTime) => strategy.getInternalContext(startTime)),\n\n getInitConfiguration: monitor(() => deepClone(strategy.initConfiguration)),\n\n addAction: (name, context) => {\n const handlingStack = createHandlingStack('action')\n\n callMonitored(() => {\n strategy.addAction({\n name: sanitize(name)!,\n context: sanitize(context) as Context,\n startClocks: clocksNow(),\n type: ActionType.CUSTOM,\n handlingStack,\n })\n addTelemetryUsage({ feature: 'add-action' })\n })\n },\n\n startAction: monitor((name, options) => {\n addTelemetryUsage({ feature: 'start-action' })\n strategy.startAction(sanitize(name)!, {\n type: sanitize(options?.type) as ActionType | undefined,\n context: sanitize(options?.context) as Context,\n actionKey: options?.actionKey,\n })\n }),\n\n stopAction: monitor((name, options) => {\n addTelemetryUsage({ feature: 'stop-action' })\n strategy.stopAction(sanitize(name)!, {\n type: sanitize(options?.type) as ActionType | undefined,\n context: sanitize(options?.context) as Context,\n actionKey: options?.actionKey,\n })\n }),\n\n startResource: monitor((url, options) => {\n addTelemetryUsage({ feature: 'start-resource' })\n strategy.startResource(sanitize(url)!, {\n type: sanitize(options?.type) as ResourceType | undefined,\n method: sanitize(options?.method) as string | undefined,\n context: sanitize(options?.context) as Context,\n resourceKey: options?.resourceKey,\n })\n }),\n\n stopResource: monitor((url, options) => {\n addTelemetryUsage({ feature: 'stop-resource' })\n strategy.stopResource(sanitize(url)!, {\n type: sanitize(options?.type) as ResourceType | undefined,\n statusCode: options?.statusCode,\n size: options?.size,\n context: sanitize(options?.context) as Context,\n resourceKey: options?.resourceKey,\n })\n }),\n\n addError: (error, context) => {\n const handlingStack = createHandlingStack('error')\n callMonitored(() => {\n strategy.addError({\n error, // Do not sanitize error here, it is needed unserialized by computeRawError()\n handlingStack,\n context: sanitize(context) as Context,\n startClocks: clocksNow(),\n })\n addTelemetryUsage({ feature: 'add-error' })\n })\n },\n\n addTiming: monitor((name, time) => {\n // TODO: next major decide to drop relative time support or update its behaviour\n strategy.addTiming(sanitize(name)!, time as RelativeTime | TimeStamp | undefined)\n }),\n\n setViewLoadingTime: monitor(() => {\n const callTimestamp = timeStampNow()\n strategy.setLoadingTime(callTimestamp)\n addTelemetryUsage({\n feature: 'addViewLoadingTime',\n })\n }),\n\n setGlobalContext: defineContextMethod(\n getStrategy,\n CustomerContextKey.globalContext,\n ContextManagerMethod.setContext,\n 'set-global-context'\n ),\n getGlobalContext: defineContextMethod(\n getStrategy,\n CustomerContextKey.globalContext,\n ContextManagerMethod.getContext,\n 'get-global-context'\n ),\n setGlobalContextProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.globalContext,\n ContextManagerMethod.setContextProperty,\n 'set-global-context-property'\n ),\n removeGlobalContextProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.globalContext,\n ContextManagerMethod.removeContextProperty,\n 'remove-global-context-property'\n ),\n clearGlobalContext: defineContextMethod(\n getStrategy,\n CustomerContextKey.globalContext,\n ContextManagerMethod.clearContext,\n 'clear-global-context'\n ),\n\n setUser: defineContextMethod(\n getStrategy,\n CustomerContextKey.userContext,\n ContextManagerMethod.setContext,\n 'set-user'\n ),\n getUser: defineContextMethod(\n getStrategy,\n CustomerContextKey.userContext,\n ContextManagerMethod.getContext,\n 'get-user'\n ),\n setUserProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.userContext,\n ContextManagerMethod.setContextProperty,\n 'set-user-property'\n ),\n removeUserProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.userContext,\n ContextManagerMethod.removeContextProperty,\n 'remove-user-property'\n ),\n clearUser: defineContextMethod(\n getStrategy,\n CustomerContextKey.userContext,\n ContextManagerMethod.clearContext,\n 'clear-user'\n ),\n\n setAccount: defineContextMethod(\n getStrategy,\n CustomerContextKey.accountContext,\n ContextManagerMethod.setContext,\n 'set-account'\n ),\n getAccount: defineContextMethod(\n getStrategy,\n CustomerContextKey.accountContext,\n ContextManagerMethod.getContext,\n 'get-account'\n ),\n setAccountProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.accountContext,\n ContextManagerMethod.setContextProperty,\n 'set-account-property'\n ),\n removeAccountProperty: defineContextMethod(\n getStrategy,\n CustomerContextKey.accountContext,\n ContextManagerMethod.removeContextProperty,\n 'remove-account-property'\n ),\n clearAccount: defineContextMethod(\n getStrategy,\n CustomerContextKey.accountContext,\n ContextManagerMethod.clearContext,\n 'clear-account'\n ),\n\n startView,\n\n stopSession: monitor(() => {\n strategy.stopSession()\n addTelemetryUsage({ feature: 'stop-session' })\n }),\n\n addFeatureFlagEvaluation: monitor((key, value) => {\n strategy.addFeatureFlagEvaluation(sanitize(key)!, sanitize(value))\n addTelemetryUsage({ feature: 'add-feature-flag-evaluation' })\n }),\n\n getSessionReplayLink: monitor(() => recorderApi.getSessionReplayLink()),\n\n startSessionReplayRecording: monitor((options?: StartRecordingOptions) => {\n recorderApi.start(options)\n addTelemetryUsage({ feature: 'start-session-replay-recording', force: options?.force })\n }),\n\n stopSessionReplayRecording: monitor(() => recorderApi.stop()),\n\n addDurationVital: (name, options) => {\n const handlingStack = createHandlingStack('vital')\n callMonitored(() => {\n addTelemetryUsage({ feature: 'add-duration-vital' })\n strategy.addDurationVital({\n id: generateUUID(),\n name: sanitize(name)!,\n type: VitalType.DURATION,\n startClocks: timeStampToClocks(options.startTime as TimeStamp),\n duration: options.duration as Duration,\n context: sanitize(options?.context) as Context,\n description: sanitize(options?.description) as string | undefined,\n handlingStack,\n })\n })\n },\n\n startDurationVital: (name, options) => {\n const handlingStack = createHandlingStack('vital')\n callMonitored(() => {\n addTelemetryUsage({ feature: 'start-duration-vital' })\n strategy.startDurationVital(sanitize(name)!, {\n vitalKey: options?.vitalKey,\n context: sanitize(options?.context) as Context,\n description: sanitize(options?.description) as string | undefined,\n handlingStack,\n })\n })\n },\n\n stopDurationVital: monitor((name, options) => {\n addTelemetryUsage({ feature: 'stop-duration-vital' })\n strategy.stopDurationVital(sanitize(name)!, {\n vitalKey: options?.vitalKey,\n context: sanitize(options?.context) as Context,\n description: sanitize(options?.description) as string | undefined,\n })\n }),\n\n startOperation,\n succeedOperation,\n failOperation,\n\n // Deprecated aliases — kept for backwards compatibility, forward to the renamed APIs above.\n // TODO: remove in the next major version (RUM-16921).\n startFeatureOperation: startOperation,\n succeedFeatureOperation: succeedOperation,\n failFeatureOperation: failOperation,\n\n DEFAULT_TRACKED_RESOURCE_HEADERS,\n })\n\n return rumPublicApi\n}\n\nfunction sanitizeStringOption(value: unknown, label: string): string | undefined {\n if (value === undefined) {\n return undefined\n }\n if (typeof value !== 'string') {\n display.warn(`Invalid ${label} provided (expected a string, got ${typeof value}). Ignoring.`)\n return undefined\n }\n return sanitize(value)\n}\n\nfunction createPostStartStrategy(preStartStrategy: Strategy, startRumResult: StartRumResult): Strategy {\n return {\n ...preStartStrategy,\n init: (initConfiguration: RumInitConfiguration) => {\n displayAlreadyInitializedError('KUBESENSE_SDK', initConfiguration)\n },\n getInternalContext: startRumResult.getInternalContext,\n stopSession: startRumResult.stopSession,\n getViewContext: startRumResult.getViewContext,\n globalContext: startRumResult.globalContext,\n userContext: startRumResult.userContext,\n accountContext: startRumResult.accountContext,\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createDOMMutationObservable } from "../browser/domMutationObservable.mjs";
|
|
2
|
+
import { createWindowOpenObservable } from "../browser/windowOpenObservable.mjs";
|
|
3
|
+
import { startInternalContext } from "../domain/contexts/internalContext.mjs";
|
|
4
|
+
import { LifeCycle } from "../domain/lifeCycle.mjs";
|
|
5
|
+
import { startViewHistory } from "../domain/contexts/viewHistory.mjs";
|
|
6
|
+
import { startRequestCollection } from "../domain/requestCollection.mjs";
|
|
7
|
+
import { startWebSocketCollection } from "../domain/resource/webSocketCollection.mjs";
|
|
8
|
+
import { startActionCollection } from "../domain/action/actionCollection.mjs";
|
|
9
|
+
import { startErrorCollection } from "../domain/error/errorCollection.mjs";
|
|
10
|
+
import { startResourceCollection } from "../domain/resource/resourceCollection.mjs";
|
|
11
|
+
import { startViewCollection } from "../domain/view/viewCollection.mjs";
|
|
12
|
+
import { startRumBatch } from "../transport/startRumBatch.mjs";
|
|
13
|
+
import { startRumEventBridge } from "../transport/startRumEventBridge.mjs";
|
|
14
|
+
import { startUrlContexts } from "../domain/contexts/urlContexts.mjs";
|
|
15
|
+
import { createLocationChangeObservable } from "../browser/locationChangeObservable.mjs";
|
|
16
|
+
import { startFeatureFlagContexts } from "../domain/contexts/featureFlagContext.mjs";
|
|
17
|
+
import { startCustomerDataTelemetry } from "../domain/startCustomerDataTelemetry.mjs";
|
|
18
|
+
import { startPageStateHistory } from "../domain/contexts/pageStateHistory.mjs";
|
|
19
|
+
import { startDisplayContext } from "../domain/contexts/displayContext.mjs";
|
|
20
|
+
import { startVitalCollection } from "../domain/vital/vitalCollection.mjs";
|
|
21
|
+
import { startSessionContext } from "../domain/contexts/sessionContext.mjs";
|
|
22
|
+
import { startCiVisibilityContext } from "../domain/contexts/ciVisibilityContext.mjs";
|
|
23
|
+
import { startLongTaskCollection } from "../domain/longTask/longTaskCollection.mjs";
|
|
24
|
+
import { startSyntheticsContext } from "../domain/contexts/syntheticsContext.mjs";
|
|
25
|
+
import { startRumAssembly } from "../domain/assembly.mjs";
|
|
26
|
+
import { startConnectivityContext } from "../domain/contexts/connectivityContext.mjs";
|
|
27
|
+
import { startUserAgentDataContext } from "../domain/contexts/userAgentDataContext.mjs";
|
|
28
|
+
import { startDefaultContext } from "../domain/contexts/defaultContext.mjs";
|
|
29
|
+
import { startEventCollection } from "../domain/event/eventCollection.mjs";
|
|
30
|
+
import { startSourceCodeMfeContext } from "../domain/contexts/sourceCodeMfeContext.mjs";
|
|
31
|
+
import { clocksNow } from "@kubesense/kubesense-js-core/time";
|
|
32
|
+
import { DEFAULT_ERROR_TYPE, ErrorSource, ExperimentalFeature, addTelemetryDebug, canUseEventBridge, createPageMayExitObservable, getSessionEndClocks, isExperimentalFeatureEnabled, sendToExtension, startAccountContext, startGlobalContext, startTabContext, startUserContext } from "@kubesense/kubesense-browser-core";
|
|
33
|
+
//#region src/boot/startRum.ts
|
|
34
|
+
function startRum(configuration, sessionManager, recorderApi, profilerApi, initialViewOptions, createEncoder, bufferedDataObservable, telemetry, hooks, sdkName) {
|
|
35
|
+
const cleanupTasks = [];
|
|
36
|
+
const lifeCycle = new LifeCycle();
|
|
37
|
+
lifeCycle.subscribe(14, (event) => sendToExtension("rum", event));
|
|
38
|
+
sessionManager.expireObservable.subscribe(() => lifeCycle.notify(10, { endClocks: getSessionEndClocks(sessionManager.findSession()) }));
|
|
39
|
+
sessionManager.renewObservable.subscribe(() => lifeCycle.notify(11));
|
|
40
|
+
const reportError = (message) => {
|
|
41
|
+
lifeCycle.notify(15, { error: {
|
|
42
|
+
message,
|
|
43
|
+
type: DEFAULT_ERROR_TYPE,
|
|
44
|
+
source: ErrorSource.AGENT,
|
|
45
|
+
startClocks: clocksNow()
|
|
46
|
+
} });
|
|
47
|
+
addTelemetryDebug("Error reported to customer", { "error.message": message });
|
|
48
|
+
};
|
|
49
|
+
if (!canUseEventBridge()) {
|
|
50
|
+
const batch = startRumBatch(configuration, lifeCycle, reportError, sessionManager.expireObservable, createEncoder);
|
|
51
|
+
const preparePageExitSubscription = batch.prepareUrgentFlushObservable.subscribe((reason) => {
|
|
52
|
+
lifeCycle.notify(12, reason);
|
|
53
|
+
});
|
|
54
|
+
cleanupTasks.push(() => preparePageExitSubscription.unsubscribe());
|
|
55
|
+
cleanupTasks.push(() => batch.stop());
|
|
56
|
+
startCustomerDataTelemetry(telemetry, lifeCycle, batch.flushObservable);
|
|
57
|
+
} else {
|
|
58
|
+
startRumEventBridge(lifeCycle);
|
|
59
|
+
const pageMayExitSubscription = createPageMayExitObservable().subscribe((event) => {
|
|
60
|
+
lifeCycle.notify(12, event.reason);
|
|
61
|
+
});
|
|
62
|
+
cleanupTasks.push(() => pageMayExitSubscription.unsubscribe());
|
|
63
|
+
}
|
|
64
|
+
const { stop: stopRumEventCollection, ...startRumEventCollectionResult } = startRumEventCollection(lifeCycle, hooks, configuration, sessionManager, recorderApi, initialViewOptions, bufferedDataObservable, sdkName, reportError);
|
|
65
|
+
cleanupTasks.push(stopRumEventCollection);
|
|
66
|
+
bufferedDataObservable.unbuffer();
|
|
67
|
+
cleanupTasks.push(() => profilerApi.stop());
|
|
68
|
+
return {
|
|
69
|
+
...startRumEventCollectionResult,
|
|
70
|
+
lifeCycle,
|
|
71
|
+
sessionManager,
|
|
72
|
+
stopSession: () => sessionManager.expire(),
|
|
73
|
+
telemetry,
|
|
74
|
+
stop: () => {
|
|
75
|
+
cleanupTasks.forEach((task) => task());
|
|
76
|
+
},
|
|
77
|
+
hooks
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function startRumEventCollection(lifeCycle, hooks, configuration, sessionManager, recorderApi, initialViewOptions, bufferedDataObservable, sdkName, reportError) {
|
|
81
|
+
const cleanupTasks = [];
|
|
82
|
+
const domMutationObservable = createDOMMutationObservable();
|
|
83
|
+
const locationChangeObservable = createLocationChangeObservable();
|
|
84
|
+
const { observable: windowOpenObservable, stop: stopWindowOpen } = createWindowOpenObservable();
|
|
85
|
+
cleanupTasks.push(stopWindowOpen);
|
|
86
|
+
const { assembleEventDefaults: assembleHook } = hooks;
|
|
87
|
+
startDefaultContext(assembleHook, configuration, sdkName);
|
|
88
|
+
const pageStateHistory = startPageStateHistory(assembleHook);
|
|
89
|
+
cleanupTasks.push(() => pageStateHistory.stop());
|
|
90
|
+
const viewHistory = startViewHistory(lifeCycle);
|
|
91
|
+
cleanupTasks.push(() => viewHistory.stop());
|
|
92
|
+
const urlContexts = startUrlContexts(lifeCycle, assembleHook, locationChangeObservable);
|
|
93
|
+
cleanupTasks.push(() => urlContexts.stop());
|
|
94
|
+
const featureFlagContexts = startFeatureFlagContexts(lifeCycle, assembleHook, configuration);
|
|
95
|
+
startSessionContext(assembleHook, configuration, sessionManager, recorderApi, viewHistory);
|
|
96
|
+
startConnectivityContext(assembleHook);
|
|
97
|
+
startUserAgentDataContext(assembleHook);
|
|
98
|
+
startTabContext(assembleHook);
|
|
99
|
+
const globalContext = startGlobalContext(assembleHook, configuration, "rum", true);
|
|
100
|
+
const userContext = startUserContext(assembleHook, configuration, sessionManager, "rum");
|
|
101
|
+
const accountContext = startAccountContext(assembleHook, configuration, "rum");
|
|
102
|
+
const actionCollection = startActionCollection(lifeCycle, hooks, domMutationObservable, windowOpenObservable, configuration);
|
|
103
|
+
cleanupTasks.push(actionCollection.stop);
|
|
104
|
+
const eventCollection = startEventCollection(lifeCycle);
|
|
105
|
+
const displayContext = startDisplayContext(assembleHook);
|
|
106
|
+
cleanupTasks.push(displayContext.stop);
|
|
107
|
+
const ciVisibilityContext = startCiVisibilityContext(assembleHook);
|
|
108
|
+
cleanupTasks.push(ciVisibilityContext.stop);
|
|
109
|
+
startSyntheticsContext(assembleHook);
|
|
110
|
+
startRumAssembly(configuration, lifeCycle, hooks, reportError);
|
|
111
|
+
const { addTiming, setLoadingTime, startView, setViewName, setViewContext, setViewContextProperty, getViewContext, stop: stopViewCollection } = startViewCollection(lifeCycle, hooks, configuration, domMutationObservable, windowOpenObservable, locationChangeObservable, recorderApi, viewHistory, initialViewOptions);
|
|
112
|
+
startSourceCodeMfeContext(assembleHook);
|
|
113
|
+
cleanupTasks.push(stopViewCollection);
|
|
114
|
+
const resourceCollection = startResourceCollection(lifeCycle, configuration);
|
|
115
|
+
cleanupTasks.push(resourceCollection.stop);
|
|
116
|
+
const { stop: stopLongTaskCollection } = startLongTaskCollection(lifeCycle, configuration);
|
|
117
|
+
cleanupTasks.push(stopLongTaskCollection);
|
|
118
|
+
const { addError } = startErrorCollection(lifeCycle, bufferedDataObservable);
|
|
119
|
+
startRequestCollection(lifeCycle, configuration, sessionManager, userContext, accountContext, bufferedDataObservable);
|
|
120
|
+
const vitalCollection = startVitalCollection(lifeCycle, pageStateHistory);
|
|
121
|
+
if (configuration.trackResources && (configuration.betaTrackWebSockets || isExperimentalFeatureEnabled(ExperimentalFeature.TRACK_WEBSOCKETS))) {
|
|
122
|
+
const webSocketCollection = startWebSocketCollection(lifeCycle, viewHistory, vitalCollection.addDurationVital);
|
|
123
|
+
cleanupTasks.push(webSocketCollection.stop);
|
|
124
|
+
}
|
|
125
|
+
const internalContext = startInternalContext(configuration.applicationId, sessionManager, viewHistory, actionCollection.actionContexts, urlContexts);
|
|
126
|
+
return {
|
|
127
|
+
addAction: actionCollection.addAction,
|
|
128
|
+
startAction: actionCollection.startAction,
|
|
129
|
+
stopAction: actionCollection.stopAction,
|
|
130
|
+
startResource: resourceCollection.startResource,
|
|
131
|
+
stopResource: resourceCollection.stopResource,
|
|
132
|
+
addEvent: eventCollection.addEvent,
|
|
133
|
+
addError,
|
|
134
|
+
addTiming,
|
|
135
|
+
setLoadingTime,
|
|
136
|
+
addFeatureFlagEvaluation: featureFlagContexts.addFeatureFlagEvaluation,
|
|
137
|
+
startView,
|
|
138
|
+
setViewContext,
|
|
139
|
+
setViewContextProperty,
|
|
140
|
+
getViewContext,
|
|
141
|
+
setViewName,
|
|
142
|
+
viewHistory,
|
|
143
|
+
sessionManager,
|
|
144
|
+
stopSession: () => sessionManager.expire(),
|
|
145
|
+
getInternalContext: internalContext.get,
|
|
146
|
+
startDurationVital: vitalCollection.startDurationVital,
|
|
147
|
+
stopDurationVital: vitalCollection.stopDurationVital,
|
|
148
|
+
addDurationVital: vitalCollection.addDurationVital,
|
|
149
|
+
addOperationStepVital: vitalCollection.addOperationStepVital,
|
|
150
|
+
globalContext,
|
|
151
|
+
userContext,
|
|
152
|
+
accountContext,
|
|
153
|
+
stop: () => cleanupTasks.forEach((task) => task())
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//#endregion
|
|
157
|
+
export { startRum, startRumEventCollection };
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=startRum.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startRum.mjs","names":[],"sources":["../../src/boot/startRum.ts"],"sourcesContent":["import type {\n Observable,\n DeflateEncoderStreamId,\n Encoder,\n BufferedData,\n BufferedObservable,\n Telemetry,\n SessionManager,\n} from '@kubesense/kubesense-browser-core'\nimport {\n sendToExtension,\n createPageMayExitObservable,\n canUseEventBridge,\n addTelemetryDebug,\n startAccountContext,\n startGlobalContext,\n startUserContext,\n startTabContext,\n ErrorSource,\n DEFAULT_ERROR_TYPE,\n isExperimentalFeatureEnabled,\n ExperimentalFeature,\n getSessionEndClocks,\n} from '@kubesense/kubesense-browser-core'\nimport { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { createDOMMutationObservable } from '../browser/domMutationObservable'\nimport { createWindowOpenObservable } from '../browser/windowOpenObservable'\nimport { startInternalContext } from '../domain/contexts/internalContext'\nimport { LifeCycle, LifeCycleEventType } from '../domain/lifeCycle'\nimport { startViewHistory } from '../domain/contexts/viewHistory'\nimport { startRequestCollection } from '../domain/requestCollection'\nimport { startWebSocketCollection } from '../domain/resource/webSocketCollection'\nimport { startActionCollection } from '../domain/action/actionCollection'\nimport { startErrorCollection } from '../domain/error/errorCollection'\nimport { startResourceCollection } from '../domain/resource/resourceCollection'\nimport { startViewCollection } from '../domain/view/viewCollection'\nimport { startRumBatch } from '../transport/startRumBatch'\nimport { startRumEventBridge } from '../transport/startRumEventBridge'\nimport { startUrlContexts } from '../domain/contexts/urlContexts'\nimport { createLocationChangeObservable } from '../browser/locationChangeObservable'\nimport type { RumConfiguration } from '../domain/configuration'\nimport type { ViewOptions } from '../domain/view/trackViews'\nimport { startFeatureFlagContexts } from '../domain/contexts/featureFlagContext'\nimport { startCustomerDataTelemetry } from '../domain/startCustomerDataTelemetry'\nimport { startPageStateHistory } from '../domain/contexts/pageStateHistory'\nimport { startDisplayContext } from '../domain/contexts/displayContext'\nimport { startVitalCollection } from '../domain/vital/vitalCollection'\nimport { startCiVisibilityContext } from '../domain/contexts/ciVisibilityContext'\nimport { startLongTaskCollection } from '../domain/longTask/longTaskCollection'\nimport { startSyntheticsContext } from '../domain/contexts/syntheticsContext'\nimport { startRumAssembly } from '../domain/assembly'\nimport { startSessionContext } from '../domain/contexts/sessionContext'\nimport { startConnectivityContext } from '../domain/contexts/connectivityContext'\nimport { startUserAgentDataContext } from '../domain/contexts/userAgentDataContext'\nimport type { SdkName } from '../domain/contexts/defaultContext'\nimport { startDefaultContext } from '../domain/contexts/defaultContext'\nimport type { Hooks } from '../domain/hooks'\nimport { startEventCollection } from '../domain/event/eventCollection'\nimport { startSourceCodeMfeContext } from '../domain/contexts/sourceCodeMfeContext'\nimport type { RecorderApi, ProfilerApi } from './rumPublicApi'\n\nexport type StartRum = typeof startRum\nexport type StartRumResult = ReturnType<StartRum>\n\nexport function startRum(\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n recorderApi: RecorderApi,\n profilerApi: ProfilerApi,\n initialViewOptions: ViewOptions | undefined,\n createEncoder: (streamId: DeflateEncoderStreamId) => Encoder,\n bufferedDataObservable: BufferedObservable<BufferedData>,\n telemetry: Telemetry,\n hooks: Hooks,\n sdkName?: SdkName\n) {\n const cleanupTasks: Array<() => void> = []\n const lifeCycle = new LifeCycle()\n\n lifeCycle.subscribe(LifeCycleEventType.RUM_EVENT_COLLECTED, (event) => sendToExtension('rum', event))\n\n // Dated to when the session ended rather than when this tab noticed: a hidden tab can learn of\n // a timeout long after it happened, and ending its views then would stretch the session past\n // SESSION_TIME_OUT_DELAY. The expiring session is still the active one while the observable\n // notifies (the history is closed after).\n sessionManager.expireObservable.subscribe(() =>\n lifeCycle.notify(LifeCycleEventType.SESSION_EXPIRED, {\n endClocks: getSessionEndClocks(sessionManager.findSession()),\n })\n )\n sessionManager.renewObservable.subscribe(() => lifeCycle.notify(LifeCycleEventType.SESSION_RENEWED))\n\n const reportError = (message: string) => {\n lifeCycle.notify(LifeCycleEventType.RAW_ERROR_COLLECTED, {\n error: { message, type: DEFAULT_ERROR_TYPE, source: ErrorSource.AGENT, startClocks: clocksNow() },\n })\n // monitor-until: forever, to keep an eye on the errors reported to customers\n addTelemetryDebug('Error reported to customer', { 'error.message': message })\n }\n\n if (!canUseEventBridge()) {\n const batch = startRumBatch(configuration, lifeCycle, reportError, sessionManager.expireObservable, createEncoder)\n const preparePageExitSubscription = batch.prepareUrgentFlushObservable.subscribe((reason) => {\n lifeCycle.notify(LifeCycleEventType.PREPARE_URGENT_FLUSH, reason)\n })\n cleanupTasks.push(() => preparePageExitSubscription.unsubscribe())\n cleanupTasks.push(() => batch.stop())\n startCustomerDataTelemetry(telemetry, lifeCycle, batch.flushObservable)\n } else {\n startRumEventBridge(lifeCycle)\n const pageMayExitObservable = createPageMayExitObservable()\n const pageMayExitSubscription = pageMayExitObservable.subscribe((event) => {\n lifeCycle.notify(LifeCycleEventType.PREPARE_URGENT_FLUSH, event.reason)\n })\n cleanupTasks.push(() => pageMayExitSubscription.unsubscribe())\n }\n\n const { stop: stopRumEventCollection, ...startRumEventCollectionResult } = startRumEventCollection(\n lifeCycle,\n hooks,\n configuration,\n sessionManager,\n recorderApi,\n initialViewOptions,\n bufferedDataObservable,\n sdkName,\n reportError\n )\n cleanupTasks.push(stopRumEventCollection)\n bufferedDataObservable.unbuffer()\n\n // Add Clean-up tasks for Profiler API.\n cleanupTasks.push(() => profilerApi.stop())\n\n return {\n ...startRumEventCollectionResult,\n lifeCycle,\n sessionManager,\n stopSession: () => sessionManager.expire(),\n telemetry,\n stop: () => {\n cleanupTasks.forEach((task) => task())\n },\n hooks,\n }\n}\n\nexport function startRumEventCollection(\n lifeCycle: LifeCycle,\n hooks: Hooks,\n configuration: RumConfiguration,\n sessionManager: SessionManager,\n recorderApi: RecorderApi,\n initialViewOptions: ViewOptions | undefined,\n bufferedDataObservable: Observable<BufferedData>,\n sdkName: SdkName | undefined,\n reportError: (message: string) => void\n) {\n const cleanupTasks: Array<() => void> = []\n\n const domMutationObservable = createDOMMutationObservable()\n const locationChangeObservable = createLocationChangeObservable()\n const { observable: windowOpenObservable, stop: stopWindowOpen } = createWindowOpenObservable()\n cleanupTasks.push(stopWindowOpen)\n\n const { assembleEventDefaults: assembleHook } = hooks\n startDefaultContext(assembleHook, configuration, sdkName)\n const pageStateHistory = startPageStateHistory(assembleHook)\n cleanupTasks.push(() => pageStateHistory.stop())\n const viewHistory = startViewHistory(lifeCycle)\n cleanupTasks.push(() => viewHistory.stop())\n const urlContexts = startUrlContexts(lifeCycle, assembleHook, locationChangeObservable)\n cleanupTasks.push(() => urlContexts.stop())\n const featureFlagContexts = startFeatureFlagContexts(lifeCycle, assembleHook, configuration)\n startSessionContext(assembleHook, configuration, sessionManager, recorderApi, viewHistory)\n startConnectivityContext(assembleHook)\n startUserAgentDataContext(assembleHook)\n startTabContext(assembleHook)\n const globalContext = startGlobalContext(assembleHook, configuration, 'rum', true)\n const userContext = startUserContext(assembleHook, configuration, sessionManager, 'rum')\n const accountContext = startAccountContext(assembleHook, configuration, 'rum')\n\n const actionCollection = startActionCollection(\n lifeCycle,\n hooks,\n domMutationObservable,\n windowOpenObservable,\n configuration\n )\n cleanupTasks.push(actionCollection.stop)\n\n const eventCollection = startEventCollection(lifeCycle)\n\n const displayContext = startDisplayContext(assembleHook)\n cleanupTasks.push(displayContext.stop)\n const ciVisibilityContext = startCiVisibilityContext(assembleHook)\n cleanupTasks.push(ciVisibilityContext.stop)\n startSyntheticsContext(assembleHook)\n\n startRumAssembly(configuration, lifeCycle, hooks, reportError)\n\n const {\n addTiming,\n setLoadingTime,\n startView,\n setViewName,\n setViewContext,\n setViewContextProperty,\n getViewContext,\n stop: stopViewCollection,\n } = startViewCollection(\n lifeCycle,\n hooks,\n configuration,\n domMutationObservable,\n windowOpenObservable,\n locationChangeObservable,\n recorderApi,\n viewHistory,\n initialViewOptions\n )\n\n startSourceCodeMfeContext(assembleHook)\n\n cleanupTasks.push(stopViewCollection)\n\n const resourceCollection = startResourceCollection(lifeCycle, configuration)\n cleanupTasks.push(resourceCollection.stop)\n\n const { stop: stopLongTaskCollection } = startLongTaskCollection(lifeCycle, configuration)\n cleanupTasks.push(stopLongTaskCollection)\n\n const { addError } = startErrorCollection(lifeCycle, bufferedDataObservable)\n\n startRequestCollection(lifeCycle, configuration, sessionManager, userContext, accountContext, bufferedDataObservable)\n\n const vitalCollection = startVitalCollection(lifeCycle, pageStateHistory)\n\n if (\n configuration.trackResources &&\n (configuration.betaTrackWebSockets || isExperimentalFeatureEnabled(ExperimentalFeature.TRACK_WEBSOCKETS))\n ) {\n const webSocketCollection = startWebSocketCollection(lifeCycle, viewHistory, vitalCollection.addDurationVital)\n cleanupTasks.push(webSocketCollection.stop)\n }\n\n const internalContext = startInternalContext(\n configuration.applicationId,\n sessionManager,\n viewHistory,\n actionCollection.actionContexts,\n urlContexts\n )\n\n return {\n addAction: actionCollection.addAction,\n startAction: actionCollection.startAction,\n stopAction: actionCollection.stopAction,\n startResource: resourceCollection.startResource,\n stopResource: resourceCollection.stopResource,\n addEvent: eventCollection.addEvent,\n addError,\n addTiming,\n setLoadingTime,\n addFeatureFlagEvaluation: featureFlagContexts.addFeatureFlagEvaluation,\n startView,\n setViewContext,\n setViewContextProperty,\n getViewContext,\n setViewName,\n viewHistory,\n sessionManager,\n stopSession: () => sessionManager.expire(),\n getInternalContext: internalContext.get,\n startDurationVital: vitalCollection.startDurationVital,\n stopDurationVital: vitalCollection.stopDurationVital,\n addDurationVital: vitalCollection.addDurationVital,\n addOperationStepVital: vitalCollection.addOperationStepVital,\n globalContext,\n userContext,\n accountContext,\n stop: () => cleanupTasks.forEach((task) => task()),\n }\n}\n"],"mappings":"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"}
|