@kubesense/kubesense-browser-rum-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +3 -0
- package/cjs/boot/preStartRum.d.ts +7 -0
- package/cjs/boot/preStartRum.js +190 -0
- package/cjs/boot/preStartRum.js.map +1 -0
- package/cjs/boot/rumPublicApi.d.ts +409 -0
- package/cjs/boot/rumPublicApi.js +168 -0
- package/cjs/boot/rumPublicApi.js.map +1 -0
- package/cjs/boot/startRum.d.ts +109 -0
- package/cjs/boot/startRum.js +153 -0
- package/cjs/boot/startRum.js.map +1 -0
- package/cjs/browser/cookieObservable.d.ts +8 -0
- package/cjs/browser/cookieObservable.js +39 -0
- package/cjs/browser/cookieObservable.js.map +1 -0
- package/cjs/browser/domMutationObservable.d.ts +27 -0
- package/cjs/browser/domMutationObservable.js +58 -0
- package/cjs/browser/domMutationObservable.js.map +1 -0
- package/cjs/browser/firstInputPolyfill.d.ts +8 -0
- package/cjs/browser/firstInputPolyfill.js +68 -0
- package/cjs/browser/firstInputPolyfill.js.map +1 -0
- package/cjs/browser/htmlDomUtils.d.ts +13 -0
- package/cjs/browser/htmlDomUtils.js +46 -0
- package/cjs/browser/htmlDomUtils.js.map +1 -0
- package/cjs/browser/locationChangeObservable.d.ts +7 -0
- package/cjs/browser/locationChangeObservable.js +51 -0
- package/cjs/browser/locationChangeObservable.js.map +1 -0
- package/cjs/browser/performanceObservable.d.ts +174 -0
- package/cjs/browser/performanceObservable.js +126 -0
- package/cjs/browser/performanceObservable.js.map +1 -0
- package/cjs/browser/performanceUtils.d.ts +7 -0
- package/cjs/browser/performanceUtils.js +42 -0
- package/cjs/browser/performanceUtils.js.map +1 -0
- package/cjs/browser/scroll.d.ts +2 -0
- package/cjs/browser/scroll.js +33 -0
- package/cjs/browser/scroll.js.map +1 -0
- package/cjs/browser/viewportObservable.d.ts +10 -0
- package/cjs/browser/viewportObservable.js +37 -0
- package/cjs/browser/viewportObservable.js.map +1 -0
- package/cjs/browser/windowOpenObservable.d.ts +5 -0
- package/cjs/browser/windowOpenObservable.js +10 -0
- package/cjs/browser/windowOpenObservable.js.map +1 -0
- package/cjs/domain/action/actionCollection.d.ts +21 -0
- package/cjs/domain/action/actionCollection.js +96 -0
- package/cjs/domain/action/actionCollection.js.map +1 -0
- package/cjs/domain/action/actionNameConstants.d.ts +18 -0
- package/cjs/domain/action/actionNameConstants.js +11 -0
- package/cjs/domain/action/actionNameConstants.js.map +1 -0
- package/cjs/domain/action/clickChain.d.ts +8 -0
- package/cjs/domain/action/clickChain.js +61 -0
- package/cjs/domain/action/clickChain.js.map +1 -0
- package/cjs/domain/action/computeFrustration.d.ts +6 -0
- package/cjs/domain/action/computeFrustration.js +70 -0
- package/cjs/domain/action/computeFrustration.js.map +1 -0
- package/cjs/domain/action/getActionNameFromElement.d.ts +4 -0
- package/cjs/domain/action/getActionNameFromElement.js +239 -0
- package/cjs/domain/action/getActionNameFromElement.js.map +1 -0
- package/cjs/domain/action/interactionSelectorCache.d.ts +5 -0
- package/cjs/domain/action/interactionSelectorCache.js +23 -0
- package/cjs/domain/action/interactionSelectorCache.js.map +1 -0
- package/cjs/domain/action/listenActionEvents.d.ts +19 -0
- package/cjs/domain/action/listenActionEvents.js +61 -0
- package/cjs/domain/action/listenActionEvents.js.map +1 -0
- package/cjs/domain/action/trackClickActions.d.ts +81 -0
- package/cjs/domain/action/trackClickActions.js +237 -0
- package/cjs/domain/action/trackClickActions.js.map +1 -0
- package/cjs/domain/assembly.d.ts +5 -0
- package/cjs/domain/assembly.js +102 -0
- package/cjs/domain/assembly.js.map +1 -0
- package/cjs/domain/configuration/configuration.d.ts +325 -0
- package/cjs/domain/configuration/configuration.js +205 -0
- package/cjs/domain/configuration/configuration.js.map +1 -0
- package/cjs/domain/configuration/index.d.ts +2 -0
- package/cjs/domain/configuration/index.js +19 -0
- package/cjs/domain/configuration/index.js.map +1 -0
- package/cjs/domain/configuration/jsonPathParser.d.ts +28 -0
- package/cjs/domain/configuration/jsonPathParser.js +159 -0
- package/cjs/domain/configuration/jsonPathParser.js.map +1 -0
- package/cjs/domain/configuration/remoteConfiguration.d.ts +39 -0
- package/cjs/domain/configuration/remoteConfiguration.js +243 -0
- package/cjs/domain/configuration/remoteConfiguration.js.map +1 -0
- package/cjs/domain/configuration/remoteConfiguration.types.d.ts +138 -0
- package/cjs/domain/configuration/remoteConfiguration.types.js +7 -0
- package/cjs/domain/configuration/remoteConfiguration.types.js.map +1 -0
- package/cjs/domain/contexts/ciVisibilityContext.d.ts +12 -0
- package/cjs/domain/contexts/ciVisibilityContext.js +34 -0
- package/cjs/domain/contexts/ciVisibilityContext.js.map +1 -0
- package/cjs/domain/contexts/connectivityContext.d.ts +2 -0
- package/cjs/domain/contexts/connectivityContext.js +11 -0
- package/cjs/domain/contexts/connectivityContext.js.map +1 -0
- package/cjs/domain/contexts/defaultContext.d.ts +4 -0
- package/cjs/domain/contexts/defaultContext.js +34 -0
- package/cjs/domain/contexts/defaultContext.js.map +1 -0
- package/cjs/domain/contexts/displayContext.d.ts +6 -0
- package/cjs/domain/contexts/displayContext.js +28 -0
- package/cjs/domain/contexts/displayContext.js.map +1 -0
- package/cjs/domain/contexts/featureFlagContext.d.ts +19 -0
- package/cjs/domain/contexts/featureFlagContext.js +53 -0
- package/cjs/domain/contexts/featureFlagContext.js.map +1 -0
- package/cjs/domain/contexts/internalContext.d.ts +12 -0
- package/cjs/domain/contexts/internalContext.js +26 -0
- package/cjs/domain/contexts/internalContext.js.map +1 -0
- package/cjs/domain/contexts/pageStateHistory.d.ts +23 -0
- package/cjs/domain/contexts/pageStateHistory.js +104 -0
- package/cjs/domain/contexts/pageStateHistory.js.map +1 -0
- package/cjs/domain/contexts/sessionContext.d.ts +5 -0
- package/cjs/domain/contexts/sessionContext.js +47 -0
- package/cjs/domain/contexts/sessionContext.js.map +1 -0
- package/cjs/domain/contexts/syntheticsContext.d.ts +2 -0
- package/cjs/domain/contexts/syntheticsContext.js +25 -0
- package/cjs/domain/contexts/syntheticsContext.js.map +1 -0
- package/cjs/domain/contexts/trackingConsentContext.d.ts +3 -0
- package/cjs/domain/contexts/trackingConsentContext.js +14 -0
- package/cjs/domain/contexts/trackingConsentContext.js.map +1 -0
- package/cjs/domain/contexts/urlContexts.d.ts +22 -0
- package/cjs/domain/contexts/urlContexts.js +64 -0
- package/cjs/domain/contexts/urlContexts.js.map +1 -0
- package/cjs/domain/contexts/userAgentDataContext.d.ts +2 -0
- package/cjs/domain/contexts/userAgentDataContext.js +31 -0
- package/cjs/domain/contexts/userAgentDataContext.js.map +1 -0
- package/cjs/domain/contexts/viewHistory.d.ts +17 -0
- package/cjs/domain/contexts/viewHistory.js +48 -0
- package/cjs/domain/contexts/viewHistory.js.map +1 -0
- package/cjs/domain/discardNegativeDuration.d.ts +2 -0
- package/cjs/domain/discardNegativeDuration.js +8 -0
- package/cjs/domain/discardNegativeDuration.js.map +1 -0
- package/cjs/domain/error/errorCollection.d.ts +17 -0
- package/cjs/domain/error/errorCollection.js +74 -0
- package/cjs/domain/error/errorCollection.js.map +1 -0
- package/cjs/domain/error/trackConsoleError.d.ts +4 -0
- package/cjs/domain/error/trackConsoleError.js +13 -0
- package/cjs/domain/error/trackConsoleError.js.map +1 -0
- package/cjs/domain/error/trackReportError.d.ts +5 -0
- package/cjs/domain/error/trackReportError.js +16 -0
- package/cjs/domain/error/trackReportError.js.map +1 -0
- package/cjs/domain/event/eventCollection.d.ts +10 -0
- package/cjs/domain/event/eventCollection.js +27 -0
- package/cjs/domain/event/eventCollection.js.map +1 -0
- package/cjs/domain/getSelectorFromElement.d.ts +64 -0
- package/cjs/domain/getSelectorFromElement.js +218 -0
- package/cjs/domain/getSelectorFromElement.js.map +1 -0
- package/cjs/domain/getSessionReplayUrl.d.ts +9 -0
- package/cjs/domain/getSessionReplayUrl.js +34 -0
- package/cjs/domain/getSessionReplayUrl.js.map +1 -0
- package/cjs/domain/hooks.d.ts +23 -0
- package/cjs/domain/hooks.js +6 -0
- package/cjs/domain/hooks.js.map +1 -0
- package/cjs/domain/lifeCycle.d.ts +73 -0
- package/cjs/domain/lifeCycle.js +6 -0
- package/cjs/domain/lifeCycle.js.map +1 -0
- package/cjs/domain/limitModification.d.ts +8 -0
- package/cjs/domain/limitModification.js +46 -0
- package/cjs/domain/limitModification.js.map +1 -0
- package/cjs/domain/longTask/longTaskCollection.d.ts +18 -0
- package/cjs/domain/longTask/longTaskCollection.js +91 -0
- package/cjs/domain/longTask/longTaskCollection.js.map +1 -0
- package/cjs/domain/plugins.d.ts +40 -0
- package/cjs/domain/plugins.js +15 -0
- package/cjs/domain/plugins.js.map +1 -0
- package/cjs/domain/privacy.d.ts +44 -0
- package/cjs/domain/privacy.js +313 -0
- package/cjs/domain/privacy.js.map +1 -0
- package/cjs/domain/privacyConstants.d.ts +23 -0
- package/cjs/domain/privacyConstants.js +39 -0
- package/cjs/domain/privacyConstants.js.map +1 -0
- package/cjs/domain/requestCollection.d.ts +54 -0
- package/cjs/domain/requestCollection.js +111 -0
- package/cjs/domain/requestCollection.js.map +1 -0
- package/cjs/domain/resource/graphql.d.ts +23 -0
- package/cjs/domain/resource/graphql.js +97 -0
- package/cjs/domain/resource/graphql.js.map +1 -0
- package/cjs/domain/resource/matchRequestResourceEntry.d.ts +16 -0
- package/cjs/domain/resource/matchRequestResourceEntry.js +49 -0
- package/cjs/domain/resource/matchRequestResourceEntry.js.map +1 -0
- package/cjs/domain/resource/requestRegistry.d.ts +9 -0
- package/cjs/domain/resource/requestRegistry.js +41 -0
- package/cjs/domain/resource/requestRegistry.js.map +1 -0
- package/cjs/domain/resource/resourceCollection.d.ts +7 -0
- package/cjs/domain/resource/resourceCollection.js +190 -0
- package/cjs/domain/resource/resourceCollection.js.map +1 -0
- package/cjs/domain/resource/resourceUtils.d.ts +55 -0
- package/cjs/domain/resource/resourceUtils.js +259 -0
- package/cjs/domain/resource/resourceUtils.js.map +1 -0
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +4 -0
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js +24 -0
- package/cjs/domain/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/cjs/domain/rumSessionManager.d.ts +36 -0
- package/cjs/domain/rumSessionManager.js +77 -0
- package/cjs/domain/rumSessionManager.js.map +1 -0
- package/cjs/domain/sampler/sampler.d.ts +10 -0
- package/cjs/domain/sampler/sampler.js +63 -0
- package/cjs/domain/sampler/sampler.js.map +1 -0
- package/cjs/domain/startCustomerDataTelemetry.d.ts +4 -0
- package/cjs/domain/startCustomerDataTelemetry.js +56 -0
- package/cjs/domain/startCustomerDataTelemetry.js.map +1 -0
- package/cjs/domain/tracing/getDocumentTraceId.d.ts +12 -0
- package/cjs/domain/tracing/getDocumentTraceId.js +76 -0
- package/cjs/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/cjs/domain/tracing/identifier.d.ts +13 -0
- package/cjs/domain/tracing/identifier.js +55 -0
- package/cjs/domain/tracing/identifier.js.map +1 -0
- package/cjs/domain/tracing/sampler.d.ts +10 -0
- package/cjs/domain/tracing/sampler.js +69 -0
- package/cjs/domain/tracing/sampler.js.map +1 -0
- package/cjs/domain/tracing/tracer.d.ts +30 -0
- package/cjs/domain/tracing/tracer.js +161 -0
- package/cjs/domain/tracing/tracer.js.map +1 -0
- package/cjs/domain/tracing/tracer.types.d.ts +12 -0
- package/cjs/domain/tracing/tracer.types.js +3 -0
- package/cjs/domain/tracing/tracer.types.js.map +1 -0
- package/cjs/domain/trackEventCounts.d.ts +17 -0
- package/cjs/domain/trackEventCounts.js +50 -0
- package/cjs/domain/trackEventCounts.js.map +1 -0
- package/cjs/domain/view/bfCacheSupport.d.ts +2 -0
- package/cjs/domain/view/bfCacheSupport.js +13 -0
- package/cjs/domain/view/bfCacheSupport.js.map +1 -0
- package/cjs/domain/view/trackViewEventCounts.d.ts +5 -0
- package/cjs/domain/view/trackViewEventCounts.js +16 -0
- package/cjs/domain/view/trackViewEventCounts.js.map +1 -0
- package/cjs/domain/view/trackViews.d.ts +65 -0
- package/cjs/domain/view/trackViews.js +275 -0
- package/cjs/domain/view/trackViews.js.map +1 -0
- package/cjs/domain/view/viewCollection.d.ts +18 -0
- package/cjs/domain/view/viewCollection.js +153 -0
- package/cjs/domain/view/viewCollection.js.map +1 -0
- package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +6 -0
- package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js +32 -0
- package/cjs/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -0
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.d.ts +18 -0
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js +44 -0
- package/cjs/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -0
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +6 -0
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +44 -0
- package/cjs/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +8 -0
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js +17 -0
- package/cjs/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +21 -0
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js +37 -0
- package/cjs/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +37 -0
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js +135 -0
- package/cjs/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +13 -0
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js +39 -0
- package/cjs/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackFirstHidden.d.ts +10 -0
- package/cjs/domain/view/viewMetrics/trackFirstHidden.js +33 -0
- package/cjs/domain/view/viewMetrics/trackFirstHidden.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackFirstInput.d.ts +19 -0
- package/cjs/domain/view/viewMetrics/trackFirstInput.js +43 -0
- package/cjs/domain/view/viewMetrics/trackFirstInput.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +15 -0
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js +41 -0
- package/cjs/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +25 -0
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js +155 -0
- package/cjs/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +18 -0
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js +61 -0
- package/cjs/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackLoadingTime.d.ts +14 -0
- package/cjs/domain/view/viewMetrics/trackLoadingTime.js +50 -0
- package/cjs/domain/view/viewMetrics/trackLoadingTime.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.d.ts +14 -0
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.js +43 -0
- package/cjs/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -0
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.d.ts +25 -0
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.js +78 -0
- package/cjs/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -0
- package/cjs/domain/vital/vitalCollection.d.ts +55 -0
- package/cjs/domain/vital/vitalCollection.js +113 -0
- package/cjs/domain/vital/vitalCollection.js.map +1 -0
- package/cjs/domain/waitPageActivityEnd.d.ts +54 -0
- package/cjs/domain/waitPageActivityEnd.js +129 -0
- package/cjs/domain/waitPageActivityEnd.js.map +1 -0
- package/cjs/domainContext.types.d.ts +39 -0
- package/cjs/domainContext.types.js +6 -0
- package/cjs/domainContext.types.js.map +1 -0
- package/cjs/index.d.ts +41 -0
- package/cjs/index.js +59 -0
- package/cjs/index.js.map +1 -0
- package/cjs/rawRumEvent.types.d.ts +326 -0
- package/cjs/rawRumEvent.types.js +34 -0
- package/cjs/rawRumEvent.types.js.map +1 -0
- package/cjs/rumEvent.types.d.ts +2026 -0
- package/cjs/rumEvent.types.js +7 -0
- package/cjs/rumEvent.types.js.map +1 -0
- package/cjs/transport/formDataTransport.d.ts +16 -0
- package/cjs/transport/formDataTransport.js +46 -0
- package/cjs/transport/formDataTransport.js.map +1 -0
- package/cjs/transport/startRumBatch.d.ts +5 -0
- package/cjs/transport/startRumBatch.js +33 -0
- package/cjs/transport/startRumBatch.js.map +1 -0
- package/cjs/transport/startRumEventBridge.d.ts +2 -0
- package/cjs/transport/startRumEventBridge.js +11 -0
- package/cjs/transport/startRumEventBridge.js.map +1 -0
- package/esm/boot/preStartRum.d.ts +7 -0
- package/esm/boot/preStartRum.js +187 -0
- package/esm/boot/preStartRum.js.map +1 -0
- package/esm/boot/rumPublicApi.d.ts +409 -0
- package/esm/boot/rumPublicApi.js +165 -0
- package/esm/boot/rumPublicApi.js.map +1 -0
- package/esm/boot/startRum.d.ts +109 -0
- package/esm/boot/startRum.js +149 -0
- package/esm/boot/startRum.js.map +1 -0
- package/esm/browser/cookieObservable.d.ts +8 -0
- package/esm/browser/cookieObservable.js +35 -0
- package/esm/browser/cookieObservable.js.map +1 -0
- package/esm/browser/domMutationObservable.d.ts +27 -0
- package/esm/browser/domMutationObservable.js +54 -0
- package/esm/browser/domMutationObservable.js.map +1 -0
- package/esm/browser/firstInputPolyfill.d.ts +8 -0
- package/esm/browser/firstInputPolyfill.js +65 -0
- package/esm/browser/firstInputPolyfill.js.map +1 -0
- package/esm/browser/htmlDomUtils.d.ts +13 -0
- package/esm/browser/htmlDomUtils.js +36 -0
- package/esm/browser/htmlDomUtils.js.map +1 -0
- package/esm/browser/locationChangeObservable.d.ts +7 -0
- package/esm/browser/locationChangeObservable.js +48 -0
- package/esm/browser/locationChangeObservable.js.map +1 -0
- package/esm/browser/performanceObservable.d.ts +174 -0
- package/esm/browser/performanceObservable.js +121 -0
- package/esm/browser/performanceObservable.js.map +1 -0
- package/esm/browser/performanceUtils.d.ts +7 -0
- package/esm/browser/performanceUtils.js +38 -0
- package/esm/browser/performanceUtils.js.map +1 -0
- package/esm/browser/scroll.d.ts +2 -0
- package/esm/browser/scroll.js +29 -0
- package/esm/browser/scroll.js.map +1 -0
- package/esm/browser/viewportObservable.d.ts +10 -0
- package/esm/browser/viewportObservable.js +32 -0
- package/esm/browser/viewportObservable.js.map +1 -0
- package/esm/browser/windowOpenObservable.d.ts +5 -0
- package/esm/browser/windowOpenObservable.js +7 -0
- package/esm/browser/windowOpenObservable.js.map +1 -0
- package/esm/domain/action/actionCollection.d.ts +21 -0
- package/esm/domain/action/actionCollection.js +93 -0
- package/esm/domain/action/actionCollection.js.map +1 -0
- package/esm/domain/action/actionNameConstants.d.ts +18 -0
- package/esm/domain/action/actionNameConstants.js +8 -0
- package/esm/domain/action/actionNameConstants.js.map +1 -0
- package/esm/domain/action/clickChain.d.ts +8 -0
- package/esm/domain/action/clickChain.js +57 -0
- package/esm/domain/action/clickChain.js.map +1 -0
- package/esm/domain/action/computeFrustration.d.ts +6 -0
- package/esm/domain/action/computeFrustration.js +65 -0
- package/esm/domain/action/computeFrustration.js.map +1 -0
- package/esm/domain/action/getActionNameFromElement.d.ts +4 -0
- package/esm/domain/action/getActionNameFromElement.js +236 -0
- package/esm/domain/action/getActionNameFromElement.js.map +1 -0
- package/esm/domain/action/interactionSelectorCache.d.ts +5 -0
- package/esm/domain/action/interactionSelectorCache.js +18 -0
- package/esm/domain/action/interactionSelectorCache.js.map +1 -0
- package/esm/domain/action/listenActionEvents.d.ts +19 -0
- package/esm/domain/action/listenActionEvents.js +58 -0
- package/esm/domain/action/listenActionEvents.js.map +1 -0
- package/esm/domain/action/trackClickActions.d.ts +81 -0
- package/esm/domain/action/trackClickActions.js +232 -0
- package/esm/domain/action/trackClickActions.js.map +1 -0
- package/esm/domain/assembly.d.ts +5 -0
- package/esm/domain/assembly.js +99 -0
- package/esm/domain/assembly.js.map +1 -0
- package/esm/domain/configuration/configuration.d.ts +325 -0
- package/esm/domain/configuration/configuration.js +200 -0
- package/esm/domain/configuration/configuration.js.map +1 -0
- package/esm/domain/configuration/index.d.ts +2 -0
- package/esm/domain/configuration/index.js +3 -0
- package/esm/domain/configuration/index.js.map +1 -0
- package/esm/domain/configuration/jsonPathParser.d.ts +28 -0
- package/esm/domain/configuration/jsonPathParser.js +156 -0
- package/esm/domain/configuration/jsonPathParser.js.map +1 -0
- package/esm/domain/configuration/remoteConfiguration.d.ts +39 -0
- package/esm/domain/configuration/remoteConfiguration.js +236 -0
- package/esm/domain/configuration/remoteConfiguration.js.map +1 -0
- package/esm/domain/configuration/remoteConfiguration.types.d.ts +138 -0
- package/esm/domain/configuration/remoteConfiguration.types.js +6 -0
- package/esm/domain/configuration/remoteConfiguration.types.js.map +1 -0
- package/esm/domain/contexts/ciVisibilityContext.d.ts +12 -0
- package/esm/domain/contexts/ciVisibilityContext.js +30 -0
- package/esm/domain/contexts/ciVisibilityContext.js.map +1 -0
- package/esm/domain/contexts/connectivityContext.d.ts +2 -0
- package/esm/domain/contexts/connectivityContext.js +8 -0
- package/esm/domain/contexts/connectivityContext.js.map +1 -0
- package/esm/domain/contexts/defaultContext.d.ts +4 -0
- package/esm/domain/contexts/defaultContext.js +31 -0
- package/esm/domain/contexts/defaultContext.js.map +1 -0
- package/esm/domain/contexts/displayContext.d.ts +6 -0
- package/esm/domain/contexts/displayContext.js +25 -0
- package/esm/domain/contexts/displayContext.js.map +1 -0
- package/esm/domain/contexts/featureFlagContext.d.ts +19 -0
- package/esm/domain/contexts/featureFlagContext.js +49 -0
- package/esm/domain/contexts/featureFlagContext.js.map +1 -0
- package/esm/domain/contexts/internalContext.d.ts +12 -0
- package/esm/domain/contexts/internalContext.js +23 -0
- package/esm/domain/contexts/internalContext.js.map +1 -0
- package/esm/domain/contexts/pageStateHistory.d.ts +23 -0
- package/esm/domain/contexts/pageStateHistory.js +100 -0
- package/esm/domain/contexts/pageStateHistory.js.map +1 -0
- package/esm/domain/contexts/sessionContext.d.ts +5 -0
- package/esm/domain/contexts/sessionContext.js +44 -0
- package/esm/domain/contexts/sessionContext.js.map +1 -0
- package/esm/domain/contexts/syntheticsContext.d.ts +2 -0
- package/esm/domain/contexts/syntheticsContext.js +22 -0
- package/esm/domain/contexts/syntheticsContext.js.map +1 -0
- package/esm/domain/contexts/trackingConsentContext.d.ts +3 -0
- package/esm/domain/contexts/trackingConsentContext.js +11 -0
- package/esm/domain/contexts/trackingConsentContext.js.map +1 -0
- package/esm/domain/contexts/urlContexts.d.ts +22 -0
- package/esm/domain/contexts/urlContexts.js +60 -0
- package/esm/domain/contexts/urlContexts.js.map +1 -0
- package/esm/domain/contexts/userAgentDataContext.d.ts +2 -0
- package/esm/domain/contexts/userAgentDataContext.js +28 -0
- package/esm/domain/contexts/userAgentDataContext.js.map +1 -0
- package/esm/domain/contexts/viewHistory.d.ts +17 -0
- package/esm/domain/contexts/viewHistory.js +44 -0
- package/esm/domain/contexts/viewHistory.js.map +1 -0
- package/esm/domain/discardNegativeDuration.d.ts +2 -0
- package/esm/domain/discardNegativeDuration.js +5 -0
- package/esm/domain/discardNegativeDuration.js.map +1 -0
- package/esm/domain/error/errorCollection.d.ts +17 -0
- package/esm/domain/error/errorCollection.js +70 -0
- package/esm/domain/error/errorCollection.js.map +1 -0
- package/esm/domain/error/trackConsoleError.d.ts +4 -0
- package/esm/domain/error/trackConsoleError.js +10 -0
- package/esm/domain/error/trackConsoleError.js.map +1 -0
- package/esm/domain/error/trackReportError.d.ts +5 -0
- package/esm/domain/error/trackReportError.js +13 -0
- package/esm/domain/error/trackReportError.js.map +1 -0
- package/esm/domain/event/eventCollection.d.ts +10 -0
- package/esm/domain/event/eventCollection.js +24 -0
- package/esm/domain/event/eventCollection.js.map +1 -0
- package/esm/domain/getSelectorFromElement.d.ts +64 -0
- package/esm/domain/getSelectorFromElement.js +213 -0
- package/esm/domain/getSelectorFromElement.js.map +1 -0
- package/esm/domain/getSessionReplayUrl.d.ts +9 -0
- package/esm/domain/getSessionReplayUrl.js +30 -0
- package/esm/domain/getSessionReplayUrl.js.map +1 -0
- package/esm/domain/hooks.d.ts +23 -0
- package/esm/domain/hooks.js +3 -0
- package/esm/domain/hooks.js.map +1 -0
- package/esm/domain/lifeCycle.d.ts +73 -0
- package/esm/domain/lifeCycle.js +3 -0
- package/esm/domain/lifeCycle.js.map +1 -0
- package/esm/domain/limitModification.d.ts +8 -0
- package/esm/domain/limitModification.js +43 -0
- package/esm/domain/limitModification.js.map +1 -0
- package/esm/domain/longTask/longTaskCollection.d.ts +18 -0
- package/esm/domain/longTask/longTaskCollection.js +87 -0
- package/esm/domain/longTask/longTaskCollection.js.map +1 -0
- package/esm/domain/plugins.d.ts +40 -0
- package/esm/domain/plugins.js +12 -0
- package/esm/domain/plugins.js.map +1 -0
- package/esm/domain/privacy.d.ts +44 -0
- package/esm/domain/privacy.js +302 -0
- package/esm/domain/privacy.js.map +1 -0
- package/esm/domain/privacyConstants.d.ts +23 -0
- package/esm/domain/privacyConstants.js +35 -0
- package/esm/domain/privacyConstants.js.map +1 -0
- package/esm/domain/requestCollection.d.ts +54 -0
- package/esm/domain/requestCollection.js +106 -0
- package/esm/domain/requestCollection.js.map +1 -0
- package/esm/domain/resource/graphql.d.ts +23 -0
- package/esm/domain/resource/graphql.js +91 -0
- package/esm/domain/resource/graphql.js.map +1 -0
- package/esm/domain/resource/matchRequestResourceEntry.d.ts +16 -0
- package/esm/domain/resource/matchRequestResourceEntry.js +46 -0
- package/esm/domain/resource/matchRequestResourceEntry.js.map +1 -0
- package/esm/domain/resource/requestRegistry.d.ts +9 -0
- package/esm/domain/resource/requestRegistry.js +37 -0
- package/esm/domain/resource/requestRegistry.js.map +1 -0
- package/esm/domain/resource/resourceCollection.d.ts +7 -0
- package/esm/domain/resource/resourceCollection.js +187 -0
- package/esm/domain/resource/resourceCollection.js.map +1 -0
- package/esm/domain/resource/resourceUtils.d.ts +55 -0
- package/esm/domain/resource/resourceUtils.js +244 -0
- package/esm/domain/resource/resourceUtils.js.map +1 -0
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.d.ts +4 -0
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js +21 -0
- package/esm/domain/resource/retrieveInitialDocumentResourceTiming.js.map +1 -0
- package/esm/domain/rumSessionManager.d.ts +36 -0
- package/esm/domain/rumSessionManager.js +72 -0
- package/esm/domain/rumSessionManager.js.map +1 -0
- package/esm/domain/sampler/sampler.d.ts +10 -0
- package/esm/domain/sampler/sampler.js +58 -0
- package/esm/domain/sampler/sampler.js.map +1 -0
- package/esm/domain/startCustomerDataTelemetry.d.ts +4 -0
- package/esm/domain/startCustomerDataTelemetry.js +52 -0
- package/esm/domain/startCustomerDataTelemetry.js.map +1 -0
- package/esm/domain/tracing/getDocumentTraceId.d.ts +12 -0
- package/esm/domain/tracing/getDocumentTraceId.js +68 -0
- package/esm/domain/tracing/getDocumentTraceId.js.map +1 -0
- package/esm/domain/tracing/identifier.d.ts +13 -0
- package/esm/domain/tracing/identifier.js +50 -0
- package/esm/domain/tracing/identifier.js.map +1 -0
- package/esm/domain/tracing/sampler.d.ts +10 -0
- package/esm/domain/tracing/sampler.js +64 -0
- package/esm/domain/tracing/sampler.js.map +1 -0
- package/esm/domain/tracing/tracer.d.ts +30 -0
- package/esm/domain/tracing/tracer.js +156 -0
- package/esm/domain/tracing/tracer.js.map +1 -0
- package/esm/domain/tracing/tracer.types.d.ts +12 -0
- package/esm/domain/tracing/tracer.types.js +2 -0
- package/esm/domain/tracing/tracer.types.js.map +1 -0
- package/esm/domain/trackEventCounts.d.ts +17 -0
- package/esm/domain/trackEventCounts.js +47 -0
- package/esm/domain/trackEventCounts.js.map +1 -0
- package/esm/domain/view/bfCacheSupport.d.ts +2 -0
- package/esm/domain/view/bfCacheSupport.js +10 -0
- package/esm/domain/view/bfCacheSupport.js.map +1 -0
- package/esm/domain/view/trackViewEventCounts.d.ts +5 -0
- package/esm/domain/view/trackViewEventCounts.js +13 -0
- package/esm/domain/view/trackViewEventCounts.js.map +1 -0
- package/esm/domain/view/trackViews.d.ts +65 -0
- package/esm/domain/view/trackViews.js +271 -0
- package/esm/domain/view/trackViews.js.map +1 -0
- package/esm/domain/view/viewCollection.d.ts +18 -0
- package/esm/domain/view/viewCollection.js +150 -0
- package/esm/domain/view/viewCollection.js.map +1 -0
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.d.ts +6 -0
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js +28 -0
- package/esm/domain/view/viewMetrics/getClsAttributionImpactedArea.js.map +1 -0
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.d.ts +18 -0
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.js +39 -0
- package/esm/domain/view/viewMetrics/interactionCountPolyfill.js.map +1 -0
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.d.ts +6 -0
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js +41 -0
- package/esm/domain/view/viewMetrics/startInitialViewMetricsTelemetry.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.d.ts +8 -0
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js +14 -0
- package/esm/domain/view/viewMetrics/trackBfcacheMetrics.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.d.ts +21 -0
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js +34 -0
- package/esm/domain/view/viewMetrics/trackCommonViewMetrics.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.d.ts +37 -0
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js +130 -0
- package/esm/domain/view/viewMetrics/trackCumulativeLayoutShift.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.d.ts +13 -0
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js +34 -0
- package/esm/domain/view/viewMetrics/trackFirstContentfulPaint.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackFirstHidden.d.ts +10 -0
- package/esm/domain/view/viewMetrics/trackFirstHidden.js +30 -0
- package/esm/domain/view/viewMetrics/trackFirstHidden.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackFirstInput.d.ts +19 -0
- package/esm/domain/view/viewMetrics/trackFirstInput.js +40 -0
- package/esm/domain/view/viewMetrics/trackFirstInput.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.d.ts +15 -0
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js +38 -0
- package/esm/domain/view/viewMetrics/trackInitialViewMetrics.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.d.ts +25 -0
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js +149 -0
- package/esm/domain/view/viewMetrics/trackInteractionToNextPaint.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.d.ts +18 -0
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js +57 -0
- package/esm/domain/view/viewMetrics/trackLargestContentfulPaint.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackLoadingTime.d.ts +14 -0
- package/esm/domain/view/viewMetrics/trackLoadingTime.js +47 -0
- package/esm/domain/view/viewMetrics/trackLoadingTime.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackNavigationTimings.d.ts +14 -0
- package/esm/domain/view/viewMetrics/trackNavigationTimings.js +40 -0
- package/esm/domain/view/viewMetrics/trackNavigationTimings.js.map +1 -0
- package/esm/domain/view/viewMetrics/trackScrollMetrics.d.ts +25 -0
- package/esm/domain/view/viewMetrics/trackScrollMetrics.js +72 -0
- package/esm/domain/view/viewMetrics/trackScrollMetrics.js.map +1 -0
- package/esm/domain/vital/vitalCollection.d.ts +55 -0
- package/esm/domain/vital/vitalCollection.js +107 -0
- package/esm/domain/vital/vitalCollection.js.map +1 -0
- package/esm/domain/waitPageActivityEnd.d.ts +54 -0
- package/esm/domain/waitPageActivityEnd.js +123 -0
- package/esm/domain/waitPageActivityEnd.js.map +1 -0
- package/esm/domainContext.types.d.ts +39 -0
- package/esm/domainContext.types.js +5 -0
- package/esm/domainContext.types.js.map +1 -0
- package/esm/index.d.ts +41 -0
- package/esm/index.js +21 -0
- package/esm/index.js.map +1 -0
- package/esm/rawRumEvent.types.d.ts +326 -0
- package/esm/rawRumEvent.types.js +31 -0
- package/esm/rawRumEvent.types.js.map +1 -0
- package/esm/rumEvent.types.d.ts +2026 -0
- package/esm/rumEvent.types.js +6 -0
- package/esm/rumEvent.types.js.map +1 -0
- package/esm/transport/formDataTransport.d.ts +16 -0
- package/esm/transport/formDataTransport.js +43 -0
- package/esm/transport/formDataTransport.js.map +1 -0
- package/esm/transport/startRumBatch.d.ts +5 -0
- package/esm/transport/startRumBatch.js +30 -0
- package/esm/transport/startRumBatch.js.map +1 -0
- package/esm/transport/startRumEventBridge.d.ts +2 -0
- package/esm/transport/startRumEventBridge.js +8 -0
- package/esm/transport/startRumEventBridge.js.map +1 -0
- package/package.json +29 -0
- package/src/boot/preStartRum.ts +298 -0
- package/src/boot/rumPublicApi.ts +830 -0
- package/src/boot/startRum.ts +280 -0
- package/src/browser/cookieObservable.ts +63 -0
- package/src/browser/domMutationObservable.ts +98 -0
- package/src/browser/firstInputPolyfill.ts +87 -0
- package/src/browser/htmlDomUtils.ts +45 -0
- package/src/browser/locationChangeObservable.ts +69 -0
- package/src/browser/performanceObservable.ts +324 -0
- package/src/browser/performanceUtils.ts +50 -0
- package/src/browser/scroll.ts +25 -0
- package/src/browser/viewportObservable.ts +44 -0
- package/src/browser/windowOpenObservable.ts +7 -0
- package/src/domain/action/actionCollection.ts +146 -0
- package/src/domain/action/actionNameConstants.ts +20 -0
- package/src/domain/action/clickChain.ts +83 -0
- package/src/domain/action/computeFrustration.ts +77 -0
- package/src/domain/action/getActionNameFromElement.ts +337 -0
- package/src/domain/action/interactionSelectorCache.ts +21 -0
- package/src/domain/action/listenActionEvents.ts +119 -0
- package/src/domain/action/trackClickActions.ts +388 -0
- package/src/domain/assembly.ts +141 -0
- package/src/domain/configuration/configuration.ts +548 -0
- package/src/domain/configuration/index.ts +2 -0
- package/src/domain/configuration/jsonPathParser.ts +214 -0
- package/src/domain/configuration/remoteConfiguration.ts +304 -0
- package/src/domain/configuration/remoteConfiguration.types.ts +147 -0
- package/src/domain/contexts/ciVisibilityContext.ts +50 -0
- package/src/domain/contexts/connectivityContext.ts +12 -0
- package/src/domain/contexts/defaultContext.ts +43 -0
- package/src/domain/contexts/displayContext.ts +38 -0
- package/src/domain/contexts/featureFlagContext.ts +71 -0
- package/src/domain/contexts/internalContext.ts +34 -0
- package/src/domain/contexts/pageStateHistory.ts +171 -0
- package/src/domain/contexts/sessionContext.ts +59 -0
- package/src/domain/contexts/syntheticsContext.ts +33 -0
- package/src/domain/contexts/trackingConsentContext.ts +15 -0
- package/src/domain/contexts/urlContexts.ts +97 -0
- package/src/domain/contexts/userAgentDataContext.ts +36 -0
- package/src/domain/contexts/viewHistory.ts +70 -0
- package/src/domain/discardNegativeDuration.ts +6 -0
- package/src/domain/error/errorCollection.ts +107 -0
- package/src/domain/error/trackConsoleError.ts +14 -0
- package/src/domain/error/trackReportError.ts +16 -0
- package/src/domain/event/eventCollection.ts +53 -0
- package/src/domain/getSelectorFromElement.ts +268 -0
- package/src/domain/getSessionReplayUrl.ts +47 -0
- package/src/domain/hooks.ts +31 -0
- package/src/domain/lifeCycle.ts +103 -0
- package/src/domain/limitModification.ts +66 -0
- package/src/domain/longTask/longTaskCollection.ts +133 -0
- package/src/domain/plugins.ts +59 -0
- package/src/domain/privacy.ts +355 -0
- package/src/domain/privacyConstants.ts +43 -0
- package/src/domain/requestCollection.ts +179 -0
- package/src/domain/resource/graphql.ts +135 -0
- package/src/domain/resource/matchRequestResourceEntry.ts +68 -0
- package/src/domain/resource/requestRegistry.ts +52 -0
- package/src/domain/resource/resourceCollection.ts +273 -0
- package/src/domain/resource/resourceUtils.ts +355 -0
- package/src/domain/resource/retrieveInitialDocumentResourceTiming.ts +27 -0
- package/src/domain/rumSessionManager.ts +134 -0
- package/src/domain/sampler/sampler.ts +63 -0
- package/src/domain/startCustomerDataTelemetry.ts +83 -0
- package/src/domain/tracing/getDocumentTraceId.ts +90 -0
- package/src/domain/tracing/identifier.ts +69 -0
- package/src/domain/tracing/sampler.ts +69 -0
- package/src/domain/tracing/tracer.ts +248 -0
- package/src/domain/tracing/tracer.types.ts +13 -0
- package/src/domain/trackEventCounts.ts +67 -0
- package/src/domain/view/bfCacheSupport.ts +20 -0
- package/src/domain/view/trackViewEventCounts.ts +15 -0
- package/src/domain/view/trackViews.ts +431 -0
- package/src/domain/view/viewCollection.ts +203 -0
- package/src/domain/view/viewMetrics/getClsAttributionImpactedArea.ts +34 -0
- package/src/domain/view/viewMetrics/interactionCountPolyfill.ts +55 -0
- package/src/domain/view/viewMetrics/startInitialViewMetricsTelemetry.ts +70 -0
- package/src/domain/view/viewMetrics/trackBfcacheMetrics.ts +20 -0
- package/src/domain/view/viewMetrics/trackCommonViewMetrics.ts +78 -0
- package/src/domain/view/viewMetrics/trackCumulativeLayoutShift.ts +180 -0
- package/src/domain/view/viewMetrics/trackFirstContentfulPaint.ts +47 -0
- package/src/domain/view/viewMetrics/trackFirstHidden.ts +53 -0
- package/src/domain/view/viewMetrics/trackFirstInput.ts +59 -0
- package/src/domain/view/viewMetrics/trackInitialViewMetrics.ts +66 -0
- package/src/domain/view/viewMetrics/trackInteractionToNextPaint.ts +193 -0
- package/src/domain/view/viewMetrics/trackLargestContentfulPaint.ts +87 -0
- package/src/domain/view/viewMetrics/trackLoadingTime.ts +69 -0
- package/src/domain/view/viewMetrics/trackNavigationTimings.ts +66 -0
- package/src/domain/view/viewMetrics/trackScrollMetrics.ts +119 -0
- package/src/domain/vital/vitalCollection.ts +207 -0
- package/src/domain/waitPageActivityEnd.ts +189 -0
- package/src/domainContext.types.ts +61 -0
- package/src/index.ts +76 -0
- package/src/rawRumEvent.types.ts +409 -0
- package/src/rumEvent.types.ts +2151 -0
- package/src/transport/formDataTransport.ts +85 -0
- package/src/transport/startRumBatch.ts +46 -0
- package/src/transport/startRumEventBridge.ts +12 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminology inspired from https://www.rfc-editor.org/rfc/rfc9535.html
|
|
3
|
+
*
|
|
4
|
+
* jsonpath-query = segment*
|
|
5
|
+
* segment = .name-shorthand / bracketed-selection
|
|
6
|
+
* bracketed-selection = ['name-selector'] / ["name-selector"] / [index-selector]
|
|
7
|
+
*
|
|
8
|
+
* Useful references:
|
|
9
|
+
* - https://goessner.net/articles/JsonPath/
|
|
10
|
+
* - https://jsonpath.com/
|
|
11
|
+
* - https://github.com/jsonpath-standard
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
interface ParsingContext {
|
|
15
|
+
quote: string | undefined
|
|
16
|
+
escapeSequence: string | undefined
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Extract selectors from a simple JSON path expression, return [] for an invalid path
|
|
21
|
+
*
|
|
22
|
+
* Supports:
|
|
23
|
+
* - Dot notation: `foo.bar.baz`
|
|
24
|
+
* - Bracket notation: `['foo']["bar"]`
|
|
25
|
+
* - Array indices: `items[0]`, `data['users'][1]`
|
|
26
|
+
*
|
|
27
|
+
* Examples:
|
|
28
|
+
* parseJsonPath("['foo'].bar[12]")
|
|
29
|
+
* => ['foo', 'bar', '12']
|
|
30
|
+
*
|
|
31
|
+
* parseJsonPath("['foo")
|
|
32
|
+
* => []
|
|
33
|
+
*/
|
|
34
|
+
export function parseJsonPath(path: string): string[] {
|
|
35
|
+
const selectors: string[] = []
|
|
36
|
+
let previousToken = Token.START
|
|
37
|
+
let currentToken: Token | undefined
|
|
38
|
+
const parsingContext: ParsingContext = { quote: undefined, escapeSequence: undefined }
|
|
39
|
+
let currentSelector = ''
|
|
40
|
+
for (const char of path) {
|
|
41
|
+
// find which kind of token is this char
|
|
42
|
+
currentToken = ALLOWED_NEXT_TOKENS[previousToken].find((token) => TOKEN_PREDICATE[token](char, parsingContext))
|
|
43
|
+
if (!currentToken) {
|
|
44
|
+
return []
|
|
45
|
+
}
|
|
46
|
+
if (parsingContext.escapeSequence !== undefined && currentToken !== Token.ESCAPE_SEQUENCE_CHAR) {
|
|
47
|
+
if (!isValidEscapeSequence(parsingContext.escapeSequence)) {
|
|
48
|
+
return []
|
|
49
|
+
}
|
|
50
|
+
currentSelector += resolveEscapeSequence(parsingContext.escapeSequence)
|
|
51
|
+
parsingContext.escapeSequence = undefined
|
|
52
|
+
}
|
|
53
|
+
if (ALLOWED_SELECTOR_TOKENS.includes(currentToken)) {
|
|
54
|
+
// buffer the char if it belongs to the selector
|
|
55
|
+
// ex: foo['bar']
|
|
56
|
+
// ^ ^
|
|
57
|
+
currentSelector += char
|
|
58
|
+
} else if (ALLOWED_SELECTOR_DELIMITER_TOKENS.includes(currentToken) && currentSelector !== '') {
|
|
59
|
+
// close the current path part if we have reach a path part delimiter
|
|
60
|
+
// ex: foo.bar['qux']
|
|
61
|
+
// ^ ^ ^
|
|
62
|
+
selectors.push(currentSelector)
|
|
63
|
+
currentSelector = ''
|
|
64
|
+
} else if (currentToken === Token.ESCAPE_SEQUENCE_CHAR) {
|
|
65
|
+
parsingContext.escapeSequence = parsingContext.escapeSequence ? `${parsingContext.escapeSequence}${char}` : char
|
|
66
|
+
} else if (currentToken === Token.QUOTE_START) {
|
|
67
|
+
parsingContext.quote = char
|
|
68
|
+
} else if (currentToken === Token.QUOTE_END) {
|
|
69
|
+
parsingContext.quote = undefined
|
|
70
|
+
}
|
|
71
|
+
previousToken = currentToken
|
|
72
|
+
}
|
|
73
|
+
if (!ALLOWED_NEXT_TOKENS[previousToken].includes(Token.END)) {
|
|
74
|
+
return []
|
|
75
|
+
}
|
|
76
|
+
if (currentSelector !== '') {
|
|
77
|
+
selectors.push(currentSelector)
|
|
78
|
+
}
|
|
79
|
+
return selectors
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* List of all tokens in the path
|
|
84
|
+
*
|
|
85
|
+
* @example foo.bar['qu\'x'][0]
|
|
86
|
+
* | | | | |
|
|
87
|
+
* Token sequence: | | | | |
|
|
88
|
+
* 1. START (before first char) <-+ | | | |
|
|
89
|
+
* 2. NAME_SHORTHAND_FIRST_CHAR: f | | | |
|
|
90
|
+
* 3. NAME_SHORTHAND_CHAR: oo | | | |
|
|
91
|
+
* 4. DOT: . <------------------------+ | | |
|
|
92
|
+
* 5. NAME_SHORTHAND_FIRST_CHAR: b | | |
|
|
93
|
+
* 6. NAME_SHORTHAND_CHAR: ar | | |
|
|
94
|
+
* 7. BRACKET_START: [ <------------------+ | |
|
|
95
|
+
* 8. QUOTE_START: ' | |
|
|
96
|
+
* 9. NAME_SELECTOR_CHAR: qu | |
|
|
97
|
+
* 10. ESCAPE: \ | |
|
|
98
|
+
* 11. ESCAPABLE_CHAR: ' | |
|
|
99
|
+
* 12. NAME_SELECTOR_CHAR: x | |
|
|
100
|
+
* 13. QUOTE_END: ' | |
|
|
101
|
+
* 14. BRACKET_END: ] | |
|
|
102
|
+
* 15. BRACKET_START: [ <--------------------------+ |
|
|
103
|
+
* 16. DIGIT: 0 |
|
|
104
|
+
* 17. BRACKET_END: ] |
|
|
105
|
+
* 18. END (after last char) <------------------------+
|
|
106
|
+
*/
|
|
107
|
+
const enum Token {
|
|
108
|
+
START,
|
|
109
|
+
END,
|
|
110
|
+
|
|
111
|
+
NAME_SHORTHAND_FIRST_CHAR,
|
|
112
|
+
NAME_SHORTHAND_CHAR,
|
|
113
|
+
DOT,
|
|
114
|
+
|
|
115
|
+
BRACKET_START,
|
|
116
|
+
BRACKET_END,
|
|
117
|
+
DIGIT,
|
|
118
|
+
|
|
119
|
+
QUOTE_START,
|
|
120
|
+
QUOTE_END,
|
|
121
|
+
NAME_SELECTOR_CHAR,
|
|
122
|
+
ESCAPE,
|
|
123
|
+
ESCAPE_SEQUENCE_CHAR,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const NAME_SHORTHAND_FIRST_CHAR_REGEX = /[a-zA-Z_$]/
|
|
127
|
+
const NAME_SHORTHAND_CHAR_REGEX = /[a-zA-Z0-9_$]/
|
|
128
|
+
const DIGIT_REGEX = /[0-9]/
|
|
129
|
+
const UNICODE_CHAR_REGEX = /[a-fA-F0-9]/
|
|
130
|
+
const QUOTE_CHARS = '\'"'
|
|
131
|
+
|
|
132
|
+
const TOKEN_PREDICATE: { [token in Token]: (char: string, parsingContext: ParsingContext) => boolean } = {
|
|
133
|
+
// no char should match to START or END
|
|
134
|
+
[Token.START]: () => false,
|
|
135
|
+
[Token.END]: () => false,
|
|
136
|
+
|
|
137
|
+
[Token.NAME_SHORTHAND_FIRST_CHAR]: (char) => NAME_SHORTHAND_FIRST_CHAR_REGEX.test(char),
|
|
138
|
+
[Token.NAME_SHORTHAND_CHAR]: (char) => NAME_SHORTHAND_CHAR_REGEX.test(char),
|
|
139
|
+
[Token.DOT]: (char) => char === '.',
|
|
140
|
+
|
|
141
|
+
[Token.BRACKET_START]: (char) => char === '[',
|
|
142
|
+
[Token.BRACKET_END]: (char) => char === ']',
|
|
143
|
+
[Token.DIGIT]: (char) => DIGIT_REGEX.test(char),
|
|
144
|
+
|
|
145
|
+
[Token.QUOTE_START]: (char) => QUOTE_CHARS.includes(char),
|
|
146
|
+
[Token.QUOTE_END]: (char, parsingContext) => char === parsingContext.quote,
|
|
147
|
+
[Token.NAME_SELECTOR_CHAR]: () => true, // any char can be used in name selector
|
|
148
|
+
[Token.ESCAPE]: (char) => char === '\\',
|
|
149
|
+
[Token.ESCAPE_SEQUENCE_CHAR]: (char, parsingContext) => {
|
|
150
|
+
if (parsingContext.escapeSequence === undefined) {
|
|
151
|
+
// see https://www.rfc-editor.org/rfc/rfc9535.html#name-semantics-3
|
|
152
|
+
return `${parsingContext.quote}/\\bfnrtu`.includes(char)
|
|
153
|
+
} else if (parsingContext.escapeSequence.startsWith('u') && parsingContext.escapeSequence.length < 5) {
|
|
154
|
+
return UNICODE_CHAR_REGEX.test(char)
|
|
155
|
+
}
|
|
156
|
+
return false
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const ALLOWED_NEXT_TOKENS: { [token in Token]: Token[] } = {
|
|
161
|
+
[Token.START]: [Token.NAME_SHORTHAND_FIRST_CHAR, Token.BRACKET_START],
|
|
162
|
+
[Token.END]: [],
|
|
163
|
+
|
|
164
|
+
[Token.NAME_SHORTHAND_FIRST_CHAR]: [Token.NAME_SHORTHAND_CHAR, Token.DOT, Token.BRACKET_START, Token.END],
|
|
165
|
+
[Token.NAME_SHORTHAND_CHAR]: [Token.NAME_SHORTHAND_CHAR, Token.DOT, Token.BRACKET_START, Token.END],
|
|
166
|
+
[Token.DOT]: [Token.NAME_SHORTHAND_FIRST_CHAR],
|
|
167
|
+
|
|
168
|
+
[Token.BRACKET_START]: [Token.QUOTE_START, Token.DIGIT],
|
|
169
|
+
[Token.BRACKET_END]: [Token.DOT, Token.BRACKET_START, Token.END],
|
|
170
|
+
[Token.DIGIT]: [Token.DIGIT, Token.BRACKET_END],
|
|
171
|
+
|
|
172
|
+
[Token.QUOTE_START]: [Token.ESCAPE, Token.QUOTE_END, Token.NAME_SELECTOR_CHAR],
|
|
173
|
+
[Token.QUOTE_END]: [Token.BRACKET_END],
|
|
174
|
+
[Token.NAME_SELECTOR_CHAR]: [Token.ESCAPE, Token.QUOTE_END, Token.NAME_SELECTOR_CHAR],
|
|
175
|
+
[Token.ESCAPE]: [Token.ESCAPE_SEQUENCE_CHAR],
|
|
176
|
+
[Token.ESCAPE_SEQUENCE_CHAR]: [Token.ESCAPE_SEQUENCE_CHAR, Token.ESCAPE, Token.QUOTE_END, Token.NAME_SELECTOR_CHAR],
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// foo['bar\n'][12]
|
|
180
|
+
// ^^ ^ ^^ ^
|
|
181
|
+
const ALLOWED_SELECTOR_TOKENS = [
|
|
182
|
+
Token.NAME_SHORTHAND_FIRST_CHAR,
|
|
183
|
+
Token.NAME_SHORTHAND_CHAR,
|
|
184
|
+
Token.DIGIT,
|
|
185
|
+
Token.NAME_SELECTOR_CHAR,
|
|
186
|
+
]
|
|
187
|
+
|
|
188
|
+
// foo.bar['qux']
|
|
189
|
+
// ^ ^ ^
|
|
190
|
+
const ALLOWED_SELECTOR_DELIMITER_TOKENS = [Token.DOT, Token.BRACKET_START, Token.BRACKET_END]
|
|
191
|
+
|
|
192
|
+
function isValidEscapeSequence(escapeSequence: string): boolean {
|
|
193
|
+
return '"\'/\\bfnrt'.includes(escapeSequence) || (escapeSequence.startsWith('u') && escapeSequence.length === 5)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const ESCAPED_CHARS: { [key: string]: string } = {
|
|
197
|
+
'"': '"',
|
|
198
|
+
"'": "'",
|
|
199
|
+
'/': '/',
|
|
200
|
+
'\\': '\\',
|
|
201
|
+
b: '\b',
|
|
202
|
+
f: '\f',
|
|
203
|
+
n: '\n',
|
|
204
|
+
r: '\r',
|
|
205
|
+
t: '\t',
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function resolveEscapeSequence(escapeSequence: string): string {
|
|
209
|
+
if (escapeSequence.startsWith('u')) {
|
|
210
|
+
// build Unicode char from code
|
|
211
|
+
return String.fromCharCode(parseInt(escapeSequence.slice(1), 16))
|
|
212
|
+
}
|
|
213
|
+
return ESCAPED_CHARS[escapeSequence]
|
|
214
|
+
}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import type { createContextManager, Context } from '@kubesense/kubesense-browser-core'
|
|
2
|
+
import {
|
|
3
|
+
display,
|
|
4
|
+
buildEndpointHost,
|
|
5
|
+
mapValues,
|
|
6
|
+
getCookie,
|
|
7
|
+
addTelemetryMetrics,
|
|
8
|
+
TelemetryMetrics,
|
|
9
|
+
} from '@kubesense/kubesense-browser-core'
|
|
10
|
+
import type { RumInitConfiguration } from './configuration'
|
|
11
|
+
import type { RumSdkConfig, DynamicOption, ContextItem } from './remoteConfiguration.types'
|
|
12
|
+
import { parseJsonPath } from './jsonPathParser'
|
|
13
|
+
|
|
14
|
+
export type RemoteConfiguration = RumSdkConfig
|
|
15
|
+
export type RumRemoteConfiguration = Exclude<RemoteConfiguration['rum'], undefined>
|
|
16
|
+
const REMOTE_CONFIGURATION_VERSION = 'v1'
|
|
17
|
+
const SUPPORTED_FIELDS: Array<keyof RumInitConfiguration> = [
|
|
18
|
+
'applicationId',
|
|
19
|
+
'service',
|
|
20
|
+
'env',
|
|
21
|
+
'version',
|
|
22
|
+
'sessionSampleRate',
|
|
23
|
+
'sessionReplaySampleRate',
|
|
24
|
+
'defaultPrivacyLevel',
|
|
25
|
+
'enablePrivacyForActionName',
|
|
26
|
+
'traceSampleRate',
|
|
27
|
+
'trackSessionAcrossSubdomains',
|
|
28
|
+
'allowedTracingUrls',
|
|
29
|
+
'allowedTrackingOrigins',
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
// type needed for switch on union
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
|
34
|
+
type SerializedRegex = { rcSerializedType: 'regex'; value: string }
|
|
35
|
+
type SerializedOption = { rcSerializedType: 'string'; value: string } | SerializedRegex | DynamicOption
|
|
36
|
+
|
|
37
|
+
interface SupportedContextManagers {
|
|
38
|
+
user: ReturnType<typeof createContextManager>
|
|
39
|
+
context: ReturnType<typeof createContextManager>
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface RemoteConfigurationMetrics extends Context {
|
|
43
|
+
fetch: RemoteConfigurationMetricCounters
|
|
44
|
+
cookie?: RemoteConfigurationMetricCounters
|
|
45
|
+
dom?: RemoteConfigurationMetricCounters
|
|
46
|
+
js?: RemoteConfigurationMetricCounters
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface RemoteConfigurationMetricCounters {
|
|
50
|
+
success?: number
|
|
51
|
+
missing?: number
|
|
52
|
+
failure?: number
|
|
53
|
+
[key: string]: number | undefined
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export async function fetchAndApplyRemoteConfiguration(
|
|
57
|
+
initConfiguration: RumInitConfiguration,
|
|
58
|
+
supportedContextManagers: SupportedContextManagers
|
|
59
|
+
) {
|
|
60
|
+
let rumInitConfiguration: RumInitConfiguration | undefined
|
|
61
|
+
const metrics = initMetrics()
|
|
62
|
+
const fetchResult = await fetchRemoteConfiguration(initConfiguration)
|
|
63
|
+
if (!fetchResult.ok) {
|
|
64
|
+
metrics.increment('fetch', 'failure')
|
|
65
|
+
display.error(fetchResult.error)
|
|
66
|
+
} else {
|
|
67
|
+
metrics.increment('fetch', 'success')
|
|
68
|
+
rumInitConfiguration = applyRemoteConfiguration(
|
|
69
|
+
initConfiguration,
|
|
70
|
+
fetchResult.value,
|
|
71
|
+
supportedContextManagers,
|
|
72
|
+
metrics
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
// monitor-until: forever
|
|
76
|
+
addTelemetryMetrics(TelemetryMetrics.REMOTE_CONFIGURATION_METRIC_NAME, { metrics: metrics.get() })
|
|
77
|
+
return rumInitConfiguration
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export function applyRemoteConfiguration(
|
|
81
|
+
initConfiguration: RumInitConfiguration,
|
|
82
|
+
rumRemoteConfiguration: RumRemoteConfiguration & { [key: string]: unknown },
|
|
83
|
+
supportedContextManagers: SupportedContextManagers,
|
|
84
|
+
metrics: ReturnType<typeof initMetrics>
|
|
85
|
+
): RumInitConfiguration {
|
|
86
|
+
// intents:
|
|
87
|
+
// - explicitly set each supported field to limit risk in case an attacker can create configurations
|
|
88
|
+
// - check the existence in the remote config to avoid clearing a provided init field
|
|
89
|
+
const appliedConfiguration = { ...initConfiguration } as RumInitConfiguration & { [key: string]: unknown }
|
|
90
|
+
SUPPORTED_FIELDS.forEach((option: string) => {
|
|
91
|
+
if (option in rumRemoteConfiguration) {
|
|
92
|
+
appliedConfiguration[option] = resolveConfigurationProperty(rumRemoteConfiguration[option])
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
;(Object.keys(supportedContextManagers) as Array<keyof SupportedContextManagers>).forEach((context) => {
|
|
96
|
+
if (rumRemoteConfiguration[context] !== undefined) {
|
|
97
|
+
resolveContextProperty(supportedContextManagers[context], rumRemoteConfiguration[context])
|
|
98
|
+
}
|
|
99
|
+
})
|
|
100
|
+
return appliedConfiguration
|
|
101
|
+
|
|
102
|
+
// share context to access metrics
|
|
103
|
+
|
|
104
|
+
function resolveConfigurationProperty(property: unknown): unknown {
|
|
105
|
+
if (Array.isArray(property)) {
|
|
106
|
+
return property.map(resolveConfigurationProperty)
|
|
107
|
+
}
|
|
108
|
+
if (isObject(property)) {
|
|
109
|
+
if (isSerializedOption(property)) {
|
|
110
|
+
const type = property.rcSerializedType
|
|
111
|
+
switch (type) {
|
|
112
|
+
case 'string':
|
|
113
|
+
return property.value
|
|
114
|
+
case 'regex':
|
|
115
|
+
return resolveRegex(property.value)
|
|
116
|
+
case 'dynamic':
|
|
117
|
+
return resolveDynamicOption(property)
|
|
118
|
+
default:
|
|
119
|
+
display.error(`Unsupported remote configuration: "rcSerializedType": "${type as string}"`)
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return mapValues(property, resolveConfigurationProperty)
|
|
124
|
+
}
|
|
125
|
+
return property
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function resolveContextProperty(
|
|
129
|
+
contextManager: ReturnType<typeof createContextManager>,
|
|
130
|
+
contextItems: ContextItem[]
|
|
131
|
+
) {
|
|
132
|
+
contextItems.forEach(({ key, value }) => {
|
|
133
|
+
contextManager.setContextProperty(key, resolveConfigurationProperty(value))
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function resolveDynamicOption(property: DynamicOption) {
|
|
138
|
+
const strategy = property.strategy
|
|
139
|
+
let resolvedValue: unknown
|
|
140
|
+
switch (strategy) {
|
|
141
|
+
case 'cookie':
|
|
142
|
+
resolvedValue = resolveCookieValue(property)
|
|
143
|
+
break
|
|
144
|
+
case 'dom':
|
|
145
|
+
resolvedValue = resolveDomValue(property)
|
|
146
|
+
break
|
|
147
|
+
case 'js':
|
|
148
|
+
resolvedValue = resolveJsValue(property)
|
|
149
|
+
break
|
|
150
|
+
default:
|
|
151
|
+
display.error(`Unsupported remote configuration: "strategy": "${strategy as string}"`)
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
const extractor = property.extractor
|
|
155
|
+
if (extractor !== undefined && typeof resolvedValue === 'string') {
|
|
156
|
+
return extractValue(extractor, resolvedValue)
|
|
157
|
+
}
|
|
158
|
+
return resolvedValue
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function resolveCookieValue({ name }: { name: string }) {
|
|
162
|
+
const value = getCookie(name)
|
|
163
|
+
metrics.increment('cookie', value !== undefined ? 'success' : 'missing')
|
|
164
|
+
return value
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function resolveDomValue({ selector, attribute }: { selector: string; attribute?: string }) {
|
|
168
|
+
let element: Element | null
|
|
169
|
+
try {
|
|
170
|
+
element = document.querySelector(selector)
|
|
171
|
+
} catch {
|
|
172
|
+
display.error(`Invalid selector in the remote configuration: '${selector}'`)
|
|
173
|
+
metrics.increment('dom', 'failure')
|
|
174
|
+
return
|
|
175
|
+
}
|
|
176
|
+
if (!element) {
|
|
177
|
+
metrics.increment('dom', 'missing')
|
|
178
|
+
return
|
|
179
|
+
}
|
|
180
|
+
if (isForbidden(element, attribute)) {
|
|
181
|
+
display.error(`Forbidden element selected by the remote configuration: '${selector}'`)
|
|
182
|
+
metrics.increment('dom', 'failure')
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
const domValue = attribute !== undefined ? element.getAttribute(attribute) : element.textContent
|
|
186
|
+
if (domValue === null) {
|
|
187
|
+
metrics.increment('dom', 'missing')
|
|
188
|
+
return
|
|
189
|
+
}
|
|
190
|
+
metrics.increment('dom', 'success')
|
|
191
|
+
return domValue
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function isForbidden(element: Element, attribute: string | undefined) {
|
|
195
|
+
return element.getAttribute('type') === 'password' && attribute === 'value'
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function resolveJsValue({ path }: { path: string }): unknown {
|
|
199
|
+
let current = window as unknown as { [key: string]: unknown }
|
|
200
|
+
const pathParts = parseJsonPath(path)
|
|
201
|
+
if (pathParts.length === 0) {
|
|
202
|
+
display.error(`Invalid JSON path in the remote configuration: '${path}'`)
|
|
203
|
+
metrics.increment('js', 'failure')
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
for (const pathPart of pathParts) {
|
|
207
|
+
if (!(pathPart in current)) {
|
|
208
|
+
metrics.increment('js', 'missing')
|
|
209
|
+
return
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
current = current[pathPart] as { [key: string]: unknown }
|
|
213
|
+
} catch (e) {
|
|
214
|
+
display.error(`Error accessing: '${path}'`, e)
|
|
215
|
+
metrics.increment('js', 'failure')
|
|
216
|
+
return
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
metrics.increment('js', 'success')
|
|
220
|
+
return current
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export function initMetrics() {
|
|
225
|
+
const metrics: RemoteConfigurationMetrics = { fetch: {} }
|
|
226
|
+
return {
|
|
227
|
+
get: () => metrics,
|
|
228
|
+
increment: (metricName: 'fetch' | DynamicOption['strategy'], type: keyof RemoteConfigurationMetricCounters) => {
|
|
229
|
+
if (!metrics[metricName]) {
|
|
230
|
+
metrics[metricName] = {}
|
|
231
|
+
}
|
|
232
|
+
if (!metrics[metricName][type]) {
|
|
233
|
+
metrics[metricName][type] = 0
|
|
234
|
+
}
|
|
235
|
+
metrics[metricName][type] = metrics[metricName][type] + 1
|
|
236
|
+
},
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function isObject(property: unknown): property is { [key: string]: unknown } {
|
|
241
|
+
return typeof property === 'object' && property !== null
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function isSerializedOption(value: object): value is SerializedOption {
|
|
245
|
+
return 'rcSerializedType' in value
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function resolveRegex(pattern: string): RegExp | undefined {
|
|
249
|
+
try {
|
|
250
|
+
return new RegExp(pattern)
|
|
251
|
+
} catch {
|
|
252
|
+
display.error(`Invalid regex in the remote configuration: '${pattern}'`)
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function extractValue(extractor: SerializedRegex, candidate: string) {
|
|
257
|
+
const resolvedExtractor = resolveRegex(extractor.value)
|
|
258
|
+
if (resolvedExtractor === undefined) {
|
|
259
|
+
return
|
|
260
|
+
}
|
|
261
|
+
const regexResult = resolvedExtractor.exec(candidate)
|
|
262
|
+
if (regexResult === null) {
|
|
263
|
+
return
|
|
264
|
+
}
|
|
265
|
+
const [match, capture] = regexResult
|
|
266
|
+
return capture ? capture : match
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
type FetchRemoteConfigurationResult = { ok: true; value: RumRemoteConfiguration } | { ok: false; error: Error }
|
|
270
|
+
|
|
271
|
+
export async function fetchRemoteConfiguration(
|
|
272
|
+
configuration: RumInitConfiguration
|
|
273
|
+
): Promise<FetchRemoteConfigurationResult> {
|
|
274
|
+
let response: Response | undefined
|
|
275
|
+
try {
|
|
276
|
+
response = await fetch(buildEndpoint(configuration))
|
|
277
|
+
} catch {
|
|
278
|
+
response = undefined
|
|
279
|
+
}
|
|
280
|
+
if (!response || !response.ok) {
|
|
281
|
+
return {
|
|
282
|
+
ok: false,
|
|
283
|
+
error: new Error('Error fetching the remote configuration.'),
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const remoteConfiguration: RemoteConfiguration = await response.json()
|
|
287
|
+
if (remoteConfiguration.rum) {
|
|
288
|
+
return {
|
|
289
|
+
ok: true,
|
|
290
|
+
value: remoteConfiguration.rum,
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
ok: false,
|
|
295
|
+
error: new Error('No remote configuration for RUM.'),
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export function buildEndpoint(configuration: RumInitConfiguration) {
|
|
300
|
+
if (configuration.remoteConfigurationProxy) {
|
|
301
|
+
return configuration.remoteConfigurationProxy
|
|
302
|
+
}
|
|
303
|
+
return `https://sdk-configuration.${buildEndpointHost('rum', configuration)}/${REMOTE_CONFIGURATION_VERSION}/${encodeURIComponent(configuration.remoteConfigurationId!)}.json`
|
|
304
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/**
|
|
3
|
+
* DO NOT MODIFY IT BY HAND. Run `yarn json-schemas:sync` instead.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type DynamicOption =
|
|
7
|
+
| {
|
|
8
|
+
rcSerializedType: 'dynamic'
|
|
9
|
+
strategy: 'js'
|
|
10
|
+
path: string
|
|
11
|
+
extractor?: SerializedRegex
|
|
12
|
+
[k: string]: unknown
|
|
13
|
+
}
|
|
14
|
+
| {
|
|
15
|
+
rcSerializedType: 'dynamic'
|
|
16
|
+
strategy: 'cookie'
|
|
17
|
+
name: string
|
|
18
|
+
extractor?: SerializedRegex
|
|
19
|
+
[k: string]: unknown
|
|
20
|
+
}
|
|
21
|
+
| {
|
|
22
|
+
rcSerializedType: 'dynamic'
|
|
23
|
+
strategy: 'dom'
|
|
24
|
+
selector: string
|
|
25
|
+
attribute?: string
|
|
26
|
+
extractor?: SerializedRegex
|
|
27
|
+
[k: string]: unknown
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* RUM Browser & Mobile SDKs Remote Configuration properties
|
|
32
|
+
*/
|
|
33
|
+
export interface RumSdkConfig {
|
|
34
|
+
/**
|
|
35
|
+
* RUM feature Remote Configuration properties
|
|
36
|
+
*/
|
|
37
|
+
rum?: {
|
|
38
|
+
/**
|
|
39
|
+
* UUID of the application
|
|
40
|
+
*/
|
|
41
|
+
applicationId: string
|
|
42
|
+
/**
|
|
43
|
+
* The service name for this application
|
|
44
|
+
*/
|
|
45
|
+
service?: string
|
|
46
|
+
/**
|
|
47
|
+
* The environment for this application
|
|
48
|
+
*/
|
|
49
|
+
env?: string
|
|
50
|
+
/**
|
|
51
|
+
* The version for this application
|
|
52
|
+
*/
|
|
53
|
+
version?:
|
|
54
|
+
| {
|
|
55
|
+
rcSerializedType: 'dynamic'
|
|
56
|
+
strategy: 'js'
|
|
57
|
+
path: string
|
|
58
|
+
extractor?: SerializedRegex
|
|
59
|
+
[k: string]: unknown
|
|
60
|
+
}
|
|
61
|
+
| {
|
|
62
|
+
rcSerializedType: 'dynamic'
|
|
63
|
+
strategy: 'cookie'
|
|
64
|
+
name: string
|
|
65
|
+
extractor?: SerializedRegex
|
|
66
|
+
[k: string]: unknown
|
|
67
|
+
}
|
|
68
|
+
| {
|
|
69
|
+
rcSerializedType: 'dynamic'
|
|
70
|
+
strategy: 'dom'
|
|
71
|
+
selector: string
|
|
72
|
+
attribute?: string
|
|
73
|
+
extractor?: SerializedRegex
|
|
74
|
+
[k: string]: unknown
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The percentage of sessions tracked
|
|
78
|
+
*/
|
|
79
|
+
sessionSampleRate?: number
|
|
80
|
+
/**
|
|
81
|
+
* The percentage of sessions with RUM & Session Replay pricing tracked
|
|
82
|
+
*/
|
|
83
|
+
sessionReplaySampleRate?: number
|
|
84
|
+
/**
|
|
85
|
+
* Session replay default privacy level
|
|
86
|
+
*/
|
|
87
|
+
defaultPrivacyLevel?: string
|
|
88
|
+
/**
|
|
89
|
+
* Privacy control for action name
|
|
90
|
+
*/
|
|
91
|
+
enablePrivacyForActionName?: boolean
|
|
92
|
+
/**
|
|
93
|
+
* URLs where tracing is allowed
|
|
94
|
+
*/
|
|
95
|
+
allowedTracingUrls?: {
|
|
96
|
+
match: MatchOption
|
|
97
|
+
/**
|
|
98
|
+
* List of propagator types
|
|
99
|
+
*/
|
|
100
|
+
propagatorTypes?: ('kubesense' | 'b3' | 'b3multi' | 'tracecontext')[] | null
|
|
101
|
+
}[]
|
|
102
|
+
/**
|
|
103
|
+
* Origins where tracking is allowed
|
|
104
|
+
*/
|
|
105
|
+
allowedTrackingOrigins?: MatchOption[]
|
|
106
|
+
/**
|
|
107
|
+
* The percentage of traces sampled
|
|
108
|
+
*/
|
|
109
|
+
traceSampleRate?: number
|
|
110
|
+
/**
|
|
111
|
+
* Whether to track sessions across subdomains
|
|
112
|
+
*/
|
|
113
|
+
trackSessionAcrossSubdomains?: boolean
|
|
114
|
+
/**
|
|
115
|
+
* Function to define user information
|
|
116
|
+
*/
|
|
117
|
+
user?: ContextItem[]
|
|
118
|
+
/**
|
|
119
|
+
* Function to define global context
|
|
120
|
+
*/
|
|
121
|
+
context?: ContextItem[]
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export interface SerializedRegex {
|
|
125
|
+
/**
|
|
126
|
+
* Remote config serialized type for regex extraction
|
|
127
|
+
*/
|
|
128
|
+
rcSerializedType: 'regex'
|
|
129
|
+
/**
|
|
130
|
+
* Regex pattern for value extraction
|
|
131
|
+
*/
|
|
132
|
+
value: string
|
|
133
|
+
}
|
|
134
|
+
export interface MatchOption {
|
|
135
|
+
/**
|
|
136
|
+
* Remote config serialized type of match
|
|
137
|
+
*/
|
|
138
|
+
rcSerializedType: 'string' | 'regex'
|
|
139
|
+
/**
|
|
140
|
+
* Match value
|
|
141
|
+
*/
|
|
142
|
+
value: string
|
|
143
|
+
}
|
|
144
|
+
export interface ContextItem {
|
|
145
|
+
key: string
|
|
146
|
+
value: DynamicOption
|
|
147
|
+
}
|