@kubesense/kubesense-browser-core 1.7.0 → 2.0.0-beta.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 +1 -1
- package/cjs/boot/displayAlreadyInitializedError.js +6 -7
- package/cjs/boot/displayAlreadyInitializedError.js.map +1 -1
- package/cjs/boot/init.d.ts +1 -0
- package/cjs/boot/init.js +26 -34
- package/cjs/boot/init.js.map +1 -1
- package/cjs/browser/addEventListener.d.ts +12 -9
- package/cjs/browser/addEventListener.js +107 -50
- package/cjs/browser/addEventListener.js.map +1 -1
- package/cjs/browser/browser.types.d.ts +0 -24
- package/cjs/browser/cookie.d.ts +4 -1
- package/cjs/browser/cookie.js +76 -89
- package/cjs/browser/cookie.js.map +1 -1
- package/cjs/browser/cookieAccess.d.ts +18 -0
- package/cjs/browser/cookieAccess.js +129 -0
- package/cjs/browser/cookieAccess.js.map +1 -0
- package/cjs/browser/fetch.d.ts +9 -0
- package/cjs/browser/fetch.js +18 -0
- package/cjs/browser/fetch.js.map +1 -0
- package/cjs/browser/fetchObservable.d.ts +3 -3
- package/cjs/browser/fetchObservable.js +79 -92
- package/cjs/browser/fetchObservable.js.map +1 -1
- package/cjs/browser/pageMayExitObservable.d.ts +1 -2
- package/cjs/browser/pageMayExitObservable.js +53 -51
- package/cjs/browser/pageMayExitObservable.js.map +1 -1
- package/cjs/browser/runOnReadyState.d.ts +2 -3
- package/cjs/browser/runOnReadyState.js +18 -17
- package/cjs/browser/runOnReadyState.js.map +1 -1
- package/cjs/browser/webSocketObservable.d.ts +44 -0
- package/cjs/browser/webSocketObservable.js +92 -0
- package/cjs/browser/webSocketObservable.js.map +1 -0
- package/cjs/browser/xhrObservable.d.ts +8 -3
- package/cjs/browser/xhrObservable.js +64 -77
- package/cjs/browser/xhrObservable.js.map +1 -1
- package/cjs/domain/allowedTrackingOrigins.d.ts +2 -2
- package/cjs/domain/allowedTrackingOrigins.js +27 -23
- package/cjs/domain/allowedTrackingOrigins.js.map +1 -1
- package/cjs/domain/bufferedData.d.ts +20 -6
- package/cjs/domain/bufferedData.js +41 -19
- package/cjs/domain/bufferedData.js.map +1 -1
- package/cjs/domain/configuration/configuration.d.ts +169 -76
- package/cjs/domain/configuration/configuration.js +159 -128
- package/cjs/domain/configuration/configuration.js.map +1 -1
- package/cjs/domain/configuration/index.d.ts +5 -7
- package/cjs/domain/configuration/remoteSdkConfig.d.ts +26 -6
- package/cjs/domain/configuration/remoteSdkConfig.js +152 -159
- package/cjs/domain/configuration/remoteSdkConfig.js.map +1 -1
- package/cjs/domain/connectivity/connectivity.d.ts +2 -10
- package/cjs/domain/connectivity/connectivity.js +13 -13
- package/cjs/domain/connectivity/connectivity.js.map +1 -1
- package/cjs/domain/console/consoleObservable.d.ts +1 -1
- package/cjs/domain/console/consoleObservable.js +62 -74
- package/cjs/domain/console/consoleObservable.js.map +1 -1
- package/cjs/domain/context/contextConstants.js +24 -15
- package/cjs/domain/context/contextConstants.js.map +1 -1
- package/cjs/domain/context/contextManager.js +49 -53
- package/cjs/domain/context/contextManager.js.map +1 -1
- package/cjs/domain/context/contextUtils.js +11 -12
- package/cjs/domain/context/contextUtils.js.map +1 -1
- package/cjs/domain/context/defineContextMethod.d.ts +2 -2
- package/cjs/domain/context/defineContextMethod.js +15 -16
- package/cjs/domain/context/defineContextMethod.js.map +1 -1
- package/cjs/domain/context/storeContextManager.d.ts +1 -2
- package/cjs/domain/context/storeContextManager.js +31 -33
- package/cjs/domain/context/storeContextManager.js.map +1 -1
- package/cjs/domain/contexts/accountContext.d.ts +2 -2
- package/cjs/domain/contexts/accountContext.js +26 -29
- package/cjs/domain/contexts/accountContext.js.map +1 -1
- package/cjs/domain/contexts/globalContext.d.ts +2 -2
- package/cjs/domain/contexts/globalContext.js +17 -17
- package/cjs/domain/contexts/globalContext.js.map +1 -1
- package/cjs/domain/contexts/tabContext.d.ts +4 -0
- package/cjs/domain/contexts/tabContext.js +28 -0
- package/cjs/domain/contexts/tabContext.js.map +1 -0
- package/cjs/domain/contexts/telemetrySessionContext.d.ts +4 -0
- package/cjs/domain/contexts/telemetrySessionContext.js +17 -0
- package/cjs/domain/contexts/telemetrySessionContext.js.map +1 -0
- package/cjs/domain/contexts/userContext.d.ts +8 -3
- package/cjs/domain/contexts/userContext.js +79 -114
- package/cjs/domain/contexts/userContext.js.map +1 -1
- package/cjs/domain/deflate/deflate.types.js +11 -2
- package/cjs/domain/deflate/deflate.types.js.map +1 -1
- package/cjs/domain/error/error.d.ts +14 -6
- package/cjs/domain/error/error.js +101 -70
- package/cjs/domain/error/error.js.map +1 -1
- package/cjs/domain/error/error.types.d.ts +6 -4
- package/cjs/domain/error/error.types.js +24 -11
- package/cjs/domain/error/error.types.js.map +1 -1
- package/cjs/domain/error/isError.d.ts +2 -0
- package/cjs/domain/error/isError.js +14 -0
- package/cjs/domain/error/isError.js.map +1 -0
- package/cjs/domain/error/trackRuntimeError.d.ts +3 -2
- package/cjs/domain/error/trackRuntimeError.js +44 -41
- package/cjs/domain/error/trackRuntimeError.js.map +1 -1
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +1 -2
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +28 -38
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +1 -1
- package/cjs/domain/extension/extensionUtils.js +20 -25
- package/cjs/domain/extension/extensionUtils.js.map +1 -1
- package/cjs/domain/geo/geocoding.js +64 -0
- package/cjs/domain/geo/geocoding.js.map +1 -0
- package/cjs/domain/geo/geolocation.js +72 -0
- package/cjs/domain/geo/geolocation.js.map +1 -0
- package/cjs/domain/report/reportObservable.d.ts +1 -2
- package/cjs/domain/report/reportObservable.js +76 -85
- package/cjs/domain/report/reportObservable.js.map +1 -1
- package/cjs/domain/resourceUtils.d.ts +1 -0
- package/cjs/domain/resourceUtils.js +20 -17
- package/cjs/domain/resourceUtils.js.map +1 -1
- package/cjs/domain/sampler.d.ts +11 -0
- package/cjs/domain/sampler.js +40 -0
- package/cjs/domain/sampler.js.map +1 -0
- package/cjs/domain/session/sessionConstants.d.ts +1 -0
- package/cjs/domain/session/sessionConstants.js +19 -13
- package/cjs/domain/session/sessionConstants.js.map +1 -1
- package/cjs/domain/session/sessionManager.d.ts +21 -13
- package/cjs/domain/session/sessionManager.js +254 -191
- package/cjs/domain/session/sessionManager.js.map +1 -1
- package/cjs/domain/session/sessionState.d.ts +10 -1
- package/cjs/domain/session/sessionState.js +72 -56
- package/cjs/domain/session/sessionState.js.map +1 -1
- package/cjs/domain/session/sessionStateValidation.js +7 -8
- package/cjs/domain/session/sessionStateValidation.js.map +1 -1
- package/cjs/domain/session/sessionStore.d.ts +4 -33
- package/cjs/domain/session/sessionStore.js +41 -181
- package/cjs/domain/session/sessionStore.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +7 -11
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +90 -96
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +1 -4
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +39 -38
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +1 -1
- package/cjs/domain/session/storeStrategies/sessionInMemory.d.ts +12 -0
- package/cjs/domain/session/storeStrategies/sessionInMemory.js +36 -0
- package/cjs/domain/session/storeStrategies/sessionInMemory.js.map +1 -0
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +16 -7
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +7 -4
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +1 -1
- package/cjs/domain/sourceCodeContext.d.ts +22 -0
- package/cjs/domain/sourceCodeContext.js +56 -0
- package/cjs/domain/sourceCodeContext.js.map +1 -0
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +9 -3
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +37 -25
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +1 -1
- package/cjs/domain/tags.d.ts +1 -2
- package/cjs/domain/tags.js +23 -57
- package/cjs/domain/tags.js.map +1 -1
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js +8 -7
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +1 -1
- package/cjs/domain/telemetry/telemetry.d.ts +7 -8
- package/cjs/domain/telemetry/telemetry.js +192 -215
- package/cjs/domain/telemetry/telemetry.js.map +1 -1
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +161 -16
- package/cjs/domain/trackingConsent.d.ts +1 -0
- package/cjs/domain/trackingConsent.js +35 -24
- package/cjs/domain/trackingConsent.js.map +1 -1
- package/cjs/domain/userAgentData/userAgentData.js +65 -96
- package/cjs/domain/userAgentData/userAgentData.js.map +1 -1
- package/cjs/index.d.ts +34 -30
- package/cjs/index.js +297 -213
- package/cjs/tools/abstractLifeCycle.js +19 -26
- package/cjs/tools/abstractLifeCycle.js.map +1 -1
- package/cjs/tools/catchUserErrors.js +12 -12
- package/cjs/tools/catchUserErrors.js.map +1 -1
- package/cjs/tools/display.d.ts +1 -37
- package/cjs/tools/display.js +8 -43
- package/cjs/tools/display.js.map +1 -1
- package/cjs/tools/encoder.js +36 -37
- package/cjs/tools/encoder.js.map +1 -1
- package/cjs/tools/experimentalFeatures.d.ts +1 -4
- package/cjs/tools/experimentalFeatures.js +29 -40
- package/cjs/tools/experimentalFeatures.js.map +1 -1
- package/cjs/tools/getZoneJsOriginalValue.d.ts +1 -1
- package/cjs/tools/getZoneJsOriginalValue.js +22 -25
- package/cjs/tools/getZoneJsOriginalValue.js.map +1 -1
- package/cjs/tools/instrumentMethod.d.ts +57 -0
- package/cjs/tools/instrumentMethod.js +179 -112
- package/cjs/tools/instrumentMethod.js.map +1 -1
- package/cjs/tools/matchOption.d.ts +0 -1
- package/cjs/tools/matchOption.js +21 -31
- package/cjs/tools/matchOption.js.map +1 -1
- package/cjs/tools/mockable.d.ts +22 -0
- package/cjs/tools/mockable.js +28 -0
- package/cjs/tools/mockable.js.map +1 -0
- package/cjs/tools/observable.d.ts +3 -1
- package/cjs/tools/observable.js +75 -85
- package/cjs/tools/observable.js.map +1 -1
- package/cjs/tools/queueMicrotask.js +9 -14
- package/cjs/tools/queueMicrotask.js.map +1 -1
- package/cjs/tools/readBytesFromStream.d.ts +1 -6
- package/cjs/tools/readBytesFromStream.js +18 -25
- package/cjs/tools/readBytesFromStream.js.map +1 -1
- package/cjs/tools/requestIdleCallback.js +23 -29
- package/cjs/tools/requestIdleCallback.js.map +1 -1
- package/cjs/tools/sendToExtension.js +10 -8
- package/cjs/tools/sendToExtension.js.map +1 -1
- package/cjs/tools/serialisation/jsonStringify.js +37 -42
- package/cjs/tools/serialisation/jsonStringify.js.map +1 -1
- package/cjs/tools/serialisation/sanitize.d.ts +1 -0
- package/cjs/tools/serialisation/sanitize.js +112 -167
- package/cjs/tools/serialisation/sanitize.js.map +1 -1
- package/cjs/tools/serialisation/stringify.d.ts +2 -0
- package/cjs/tools/serialisation/stringify.js +18 -0
- package/cjs/tools/serialisation/stringify.js.map +1 -0
- package/cjs/tools/stackTrace/computeStackTrace.js +121 -159
- package/cjs/tools/stackTrace/computeStackTrace.js.map +1 -1
- package/cjs/tools/stackTrace/handlingStack.d.ts +1 -1
- package/cjs/tools/stackTrace/handlingStack.js +39 -38
- package/cjs/tools/stackTrace/handlingStack.js.map +1 -1
- package/cjs/tools/taskQueue.js +40 -49
- package/cjs/tools/taskQueue.js.map +1 -1
- package/cjs/tools/thenable.d.ts +8 -0
- package/cjs/tools/thenable.js +27 -0
- package/cjs/tools/thenable.js.map +1 -0
- package/cjs/tools/timer.d.ts +2 -1
- package/cjs/tools/timer.js +14 -13
- package/cjs/tools/timer.js.map +1 -1
- package/cjs/tools/utils/arrayUtils.d.ts +1 -0
- package/cjs/tools/utils/arrayUtils.js +17 -13
- package/cjs/tools/utils/arrayUtils.js.map +1 -1
- package/cjs/tools/utils/browserDetection.d.ts +1 -0
- package/cjs/tools/utils/browserDetection.js +25 -23
- package/cjs/tools/utils/browserDetection.js.map +1 -1
- package/cjs/tools/utils/byteUtils.js +20 -28
- package/cjs/tools/utils/byteUtils.js.map +1 -1
- package/cjs/tools/utils/functionUtils.js +33 -40
- package/cjs/tools/utils/functionUtils.js.map +1 -1
- package/cjs/tools/utils/numberUtils.d.ts +0 -6
- package/cjs/tools/utils/numberUtils.js +7 -18
- package/cjs/tools/utils/numberUtils.js.map +1 -1
- package/cjs/tools/utils/objectUtils.d.ts +2 -0
- package/cjs/tools/utils/objectUtils.js +27 -14
- package/cjs/tools/utils/objectUtils.js.map +1 -1
- package/cjs/tools/utils/polyfills.js +12 -16
- package/cjs/tools/utils/polyfills.js.map +1 -1
- package/cjs/tools/utils/responseUtils.js +11 -12
- package/cjs/tools/utils/responseUtils.js.map +1 -1
- package/cjs/tools/utils/stringUtils.d.ts +9 -0
- package/cjs/tools/utils/stringUtils.js +73 -77
- package/cjs/tools/utils/stringUtils.js.map +1 -1
- package/cjs/tools/utils/timezone.js +9 -10
- package/cjs/tools/utils/timezone.js.map +1 -1
- package/cjs/tools/valueHistory.d.ts +16 -3
- package/cjs/tools/valueHistory.js +113 -99
- package/cjs/tools/valueHistory.js.map +1 -1
- package/cjs/transport/batch.d.ts +11 -7
- package/cjs/transport/batch.js +93 -106
- package/cjs/transport/batch.js.map +1 -1
- package/cjs/transport/eventBridge.d.ts +6 -2
- package/cjs/transport/eventBridge.js +54 -38
- package/cjs/transport/eventBridge.js.map +1 -1
- package/cjs/transport/flushController.d.ts +6 -15
- package/cjs/transport/flushController.js +99 -118
- package/cjs/transport/flushController.js.map +1 -1
- package/cjs/transport/httpRequest.d.ts +8 -9
- package/cjs/transport/httpRequest.js +61 -97
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/index.d.ts +3 -2
- package/cjs/transport/sendWithRetryStrategy.d.ts +9 -4
- package/cjs/transport/sendWithRetryStrategy.js +144 -148
- package/cjs/transport/sendWithRetryStrategy.js.map +1 -1
- package/esm/boot/displayAlreadyInitializedError.mjs +9 -0
- package/esm/boot/displayAlreadyInitializedError.mjs.map +1 -0
- package/esm/boot/init.mjs +30 -0
- package/esm/boot/init.mjs.map +1 -0
- package/esm/browser/addEventListener.mjs +107 -0
- package/esm/browser/addEventListener.mjs.map +1 -0
- package/esm/browser/cookie.mjs +92 -0
- package/esm/browser/cookie.mjs.map +1 -0
- package/esm/browser/cookieAccess.mjs +124 -0
- package/esm/browser/cookieAccess.mjs.map +1 -0
- package/esm/browser/fetch.mjs +18 -0
- package/esm/browser/fetch.mjs.map +1 -0
- package/esm/browser/fetchObservable.mjs +89 -0
- package/esm/browser/fetchObservable.mjs.map +1 -0
- package/esm/browser/pageMayExitObservable.mjs +56 -0
- package/esm/browser/pageMayExitObservable.mjs.map +1 -0
- package/esm/browser/runOnReadyState.mjs +19 -0
- package/esm/browser/runOnReadyState.mjs.map +1 -0
- package/esm/browser/webSocketObservable.mjs +92 -0
- package/esm/browser/webSocketObservable.mjs.map +1 -0
- package/esm/browser/xhrObservable.mjs +73 -0
- package/esm/browser/xhrObservable.mjs.map +1 -0
- package/esm/domain/allowedTrackingOrigins.mjs +27 -0
- package/esm/domain/allowedTrackingOrigins.mjs.map +1 -0
- package/esm/domain/bufferedData.mjs +43 -0
- package/esm/domain/bufferedData.mjs.map +1 -0
- package/esm/domain/configuration/configuration.mjs +163 -0
- package/esm/domain/configuration/configuration.mjs.map +1 -0
- package/esm/domain/configuration/remoteSdkConfig.mjs +163 -0
- package/esm/domain/configuration/remoteSdkConfig.mjs.map +1 -0
- package/esm/domain/connectivity/connectivity.mjs +16 -0
- package/esm/domain/connectivity/connectivity.mjs.map +1 -0
- package/esm/domain/console/consoleObservable.mjs +72 -0
- package/esm/domain/console/consoleObservable.mjs.map +1 -0
- package/esm/domain/context/contextConstants.mjs +25 -0
- package/esm/domain/context/contextConstants.mjs.map +1 -0
- package/esm/domain/context/contextManager.mjs +55 -0
- package/esm/domain/context/contextManager.mjs.map +1 -0
- package/esm/domain/context/contextUtils.mjs +15 -0
- package/esm/domain/context/contextUtils.mjs.map +1 -0
- package/esm/domain/context/defineContextMethod.mjs +19 -0
- package/esm/domain/context/defineContextMethod.mjs.map +1 -0
- package/esm/domain/context/storeContextManager.mjs +36 -0
- package/esm/domain/context/storeContextManager.mjs.map +1 -0
- package/esm/domain/contexts/accountContext.mjs +29 -0
- package/esm/domain/contexts/accountContext.mjs.map +1 -0
- package/esm/domain/contexts/globalContext.mjs +20 -0
- package/esm/domain/contexts/globalContext.mjs.map +1 -0
- package/esm/domain/contexts/tabContext.mjs +27 -0
- package/esm/domain/contexts/tabContext.mjs.map +1 -0
- package/esm/domain/contexts/telemetrySessionContext.mjs +17 -0
- package/esm/domain/contexts/telemetrySessionContext.mjs.map +1 -0
- package/esm/domain/contexts/userContext.mjs +88 -0
- package/esm/domain/contexts/userContext.mjs.map +1 -0
- package/esm/domain/deflate/deflate.types.mjs +12 -0
- package/esm/domain/deflate/deflate.types.mjs.map +1 -0
- package/esm/domain/error/error.mjs +104 -0
- package/esm/domain/error/error.mjs.map +1 -0
- package/esm/domain/error/error.types.mjs +24 -0
- package/esm/domain/error/error.types.mjs.map +1 -0
- package/esm/domain/error/isError.mjs +13 -0
- package/esm/domain/error/isError.mjs.map +1 -0
- package/esm/domain/error/trackRuntimeError.mjs +49 -0
- package/esm/domain/error/trackRuntimeError.mjs.map +1 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs +31 -0
- package/esm/domain/eventRateLimiter/createEventRateLimiter.mjs.map +1 -0
- package/esm/domain/extension/extensionUtils.mjs +23 -0
- package/esm/domain/extension/extensionUtils.mjs.map +1 -0
- package/esm/domain/geo/geocoding.mjs +60 -0
- package/esm/domain/geo/geocoding.mjs.map +1 -0
- package/esm/domain/geo/geolocation.mjs +69 -0
- package/esm/domain/geo/geolocation.mjs.map +1 -0
- package/esm/domain/report/reportObservable.mjs +89 -0
- package/esm/domain/report/reportObservable.mjs.map +1 -0
- package/esm/domain/resourceUtils.mjs +22 -0
- package/esm/domain/resourceUtils.mjs.map +1 -0
- package/esm/domain/sampler.mjs +37 -0
- package/esm/domain/sampler.mjs.map +1 -0
- package/esm/domain/session/sessionConstants.mjs +18 -0
- package/esm/domain/session/sessionConstants.mjs.map +1 -0
- package/esm/domain/session/sessionManager.mjs +258 -0
- package/esm/domain/session/sessionManager.mjs.map +1 -0
- package/esm/domain/session/sessionState.mjs +76 -0
- package/esm/domain/session/sessionState.mjs.map +1 -0
- package/esm/domain/session/sessionStateValidation.mjs +9 -0
- package/esm/domain/session/sessionStateValidation.mjs.map +1 -0
- package/esm/domain/session/sessionStore.mjs +45 -0
- package/esm/domain/session/sessionStore.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.mjs +96 -0
- package/esm/domain/session/storeStrategies/sessionInCookie.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs +42 -0
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionInMemory.mjs +34 -0
- package/esm/domain/session/storeStrategies/sessionInMemory.mjs.map +1 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs +7 -0
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.mjs.map +1 -0
- package/esm/domain/sourceCodeContext.mjs +55 -0
- package/esm/domain/sourceCodeContext.mjs.map +1 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.mjs +37 -0
- package/esm/domain/synthetics/syntheticsWorkerValues.mjs.map +1 -0
- package/esm/domain/tags.mjs +29 -0
- package/esm/domain/tags.mjs.map +1 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.mjs +10 -0
- package/esm/domain/telemetry/rawTelemetryEvent.types.mjs.map +1 -0
- package/esm/domain/telemetry/telemetry.mjs +210 -0
- package/esm/domain/telemetry/telemetry.mjs.map +1 -0
- package/esm/domain/trackingConsent.mjs +38 -0
- package/esm/domain/trackingConsent.mjs.map +1 -0
- package/esm/domain/userAgentData/userAgentData.mjs +77 -0
- package/esm/domain/userAgentData/userAgentData.mjs.map +1 -0
- package/esm/index.mjs +85 -0
- package/esm/tools/abstractLifeCycle.mjs +21 -0
- package/esm/tools/abstractLifeCycle.mjs.map +1 -0
- package/esm/tools/catchUserErrors.mjs +15 -0
- package/esm/tools/catchUserErrors.mjs.map +1 -0
- package/esm/tools/display.mjs +8 -0
- package/esm/tools/display.mjs.map +1 -0
- package/esm/tools/encoder.mjs +39 -0
- package/esm/tools/encoder.mjs.map +1 -0
- package/esm/tools/experimentalFeatures.mjs +35 -0
- package/esm/tools/experimentalFeatures.mjs.map +1 -0
- package/esm/tools/getZoneJsOriginalValue.mjs +26 -0
- package/esm/tools/getZoneJsOriginalValue.mjs.map +1 -0
- package/esm/tools/instrumentMethod.mjs +183 -0
- package/esm/tools/instrumentMethod.mjs.map +1 -0
- package/esm/tools/matchOption.mjs +25 -0
- package/esm/tools/matchOption.mjs.map +1 -0
- package/esm/tools/mockable.mjs +28 -0
- package/esm/tools/mockable.mjs.map +1 -0
- package/esm/tools/observable.mjs +77 -0
- package/esm/tools/observable.mjs.map +1 -0
- package/esm/tools/queueMicrotask.mjs +12 -0
- package/esm/tools/queueMicrotask.mjs.map +1 -0
- package/esm/tools/readBytesFromStream.mjs +21 -0
- package/esm/tools/readBytesFromStream.mjs.map +1 -0
- package/esm/tools/requestIdleCallback.mjs +28 -0
- package/esm/tools/requestIdleCallback.mjs.map +1 -0
- package/esm/tools/sendToExtension.mjs +13 -0
- package/esm/tools/sendToExtension.mjs.map +1 -0
- package/esm/tools/serialisation/jsonStringify.mjs +42 -0
- package/esm/tools/serialisation/jsonStringify.mjs.map +1 -0
- package/esm/tools/serialisation/sanitize.mjs +132 -0
- package/esm/tools/serialisation/sanitize.mjs.map +1 -0
- package/esm/tools/serialisation/stringify.mjs +17 -0
- package/esm/tools/serialisation/stringify.mjs.map +1 -0
- package/esm/tools/stackTrace/computeStackTrace.mjs +148 -0
- package/esm/tools/stackTrace/computeStackTrace.mjs.map +1 -0
- package/esm/tools/stackTrace/handlingStack.mjs +45 -0
- package/esm/tools/stackTrace/handlingStack.mjs.map +1 -0
- package/esm/tools/taskQueue.mjs +45 -0
- package/esm/tools/taskQueue.mjs.map +1 -0
- package/esm/tools/thenable.mjs +24 -0
- package/esm/tools/thenable.mjs.map +1 -0
- package/esm/tools/timer.mjs +20 -0
- package/esm/tools/timer.mjs.map +1 -0
- package/esm/tools/utils/arrayUtils.mjs +21 -0
- package/esm/tools/utils/arrayUtils.mjs.map +1 -0
- package/esm/tools/utils/browserDetection.mjs +31 -0
- package/esm/tools/utils/browserDetection.mjs.map +1 -0
- package/esm/tools/utils/byteUtils.mjs +23 -0
- package/esm/tools/utils/byteUtils.mjs.map +1 -0
- package/esm/tools/utils/functionUtils.mjs +35 -0
- package/esm/tools/utils/functionUtils.mjs.map +1 -0
- package/esm/tools/utils/numberUtils.mjs +11 -0
- package/esm/tools/utils/numberUtils.mjs.map +1 -0
- package/esm/tools/utils/objectUtils.mjs +31 -0
- package/esm/tools/utils/objectUtils.mjs.map +1 -0
- package/esm/tools/utils/polyfills.mjs +17 -0
- package/esm/tools/utils/polyfills.mjs.map +1 -0
- package/esm/tools/utils/responseUtils.mjs +15 -0
- package/esm/tools/utils/responseUtils.mjs.map +1 -0
- package/esm/tools/utils/stringUtils.mjs +81 -0
- package/esm/tools/utils/stringUtils.mjs.map +1 -0
- package/esm/tools/utils/timezone.mjs +12 -0
- package/esm/tools/utils/timezone.mjs.map +1 -0
- package/esm/tools/valueHistory.mjs +117 -0
- package/esm/tools/valueHistory.mjs.map +1 -0
- package/esm/transport/batch.mjs +96 -0
- package/esm/transport/batch.mjs.map +1 -0
- package/esm/transport/eventBridge.mjs +58 -0
- package/esm/transport/eventBridge.mjs.map +1 -0
- package/esm/transport/flushController.mjs +103 -0
- package/esm/transport/flushController.mjs.map +1 -0
- package/esm/transport/httpRequest.mjs +69 -0
- package/esm/transport/httpRequest.mjs.map +1 -0
- package/esm/transport/sendWithRetryStrategy.mjs +154 -0
- package/esm/transport/sendWithRetryStrategy.mjs.map +1 -0
- package/package.json +20 -11
- package/src/boot/displayAlreadyInitializedError.ts +4 -1
- package/src/boot/init.ts +3 -2
- package/src/browser/addEventListener.ts +43 -8
- package/src/browser/browser.types.ts +0 -32
- package/src/browser/cookie.ts +45 -30
- package/src/browser/cookieAccess.ts +172 -0
- package/src/browser/fetch.ts +14 -0
- package/src/browser/fetchObservable.ts +25 -26
- package/src/browser/pageMayExitObservable.ts +9 -5
- package/src/browser/runOnReadyState.ts +3 -8
- package/src/browser/webSocketObservable.ts +181 -0
- package/src/browser/xhrObservable.ts +22 -13
- package/src/domain/allowedTrackingOrigins.ts +7 -6
- package/src/domain/bufferedData.ts +41 -14
- package/src/domain/configuration/configuration.ts +121 -171
- package/src/domain/configuration/index.ts +6 -7
- package/src/domain/configuration/remoteSdkConfig.ts +65 -16
- package/src/domain/connectivity/connectivity.ts +11 -23
- package/src/domain/console/consoleObservable.ts +9 -5
- package/src/domain/context/contextManager.ts +6 -2
- package/src/domain/context/contextUtils.ts +1 -1
- package/src/domain/context/defineContextMethod.ts +4 -4
- package/src/domain/context/storeContextManager.ts +9 -6
- package/src/domain/contexts/accountContext.ts +5 -5
- package/src/domain/contexts/globalContext.ts +4 -5
- package/src/domain/contexts/tabContext.ts +43 -0
- package/src/domain/contexts/telemetrySessionContext.ts +26 -0
- package/src/domain/contexts/userContext.ts +21 -16
- package/src/domain/error/error.ts +83 -35
- package/src/domain/error/error.types.ts +6 -4
- package/src/domain/error/isError.ts +13 -0
- package/src/domain/error/trackRuntimeError.ts +11 -4
- package/src/domain/eventRateLimiter/createEventRateLimiter.ts +3 -9
- package/src/{tools/utils → domain/geo}/geocoding.ts +7 -18
- package/src/{tools/utils → domain/geo}/geolocation.ts +1 -1
- package/src/domain/report/reportObservable.ts +15 -8
- package/src/domain/resourceUtils.ts +1 -0
- package/src/domain/sampler.ts +59 -0
- package/src/domain/session/sessionConstants.ts +2 -1
- package/src/domain/session/sessionManager.ts +347 -178
- package/src/domain/session/sessionState.ts +71 -10
- package/src/domain/session/sessionStore.ts +53 -226
- package/src/domain/session/storeStrategies/sessionInCookie.ts +122 -107
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +33 -21
- package/src/domain/session/storeStrategies/sessionInMemory.ts +55 -0
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +28 -6
- package/src/domain/sourceCodeContext.ts +100 -0
- package/src/domain/synthetics/syntheticsWorkerValues.ts +47 -15
- package/src/domain/tags.ts +5 -19
- package/src/domain/telemetry/rawTelemetryEvent.types.ts +1 -1
- package/src/domain/telemetry/telemetry.ts +44 -52
- package/src/domain/telemetry/telemetryEvent.types.ts +177 -19
- package/src/domain/trackingConsent.ts +18 -3
- package/src/domain/userAgentData/userAgentData.ts +1 -1
- package/src/index.ts +59 -43
- package/src/tools/display.ts +2 -52
- package/src/tools/experimentalFeatures.ts +3 -4
- package/src/tools/getZoneJsOriginalValue.ts +3 -3
- package/src/tools/instrumentMethod.ts +228 -18
- package/src/tools/matchOption.ts +2 -6
- package/src/tools/mockable.ts +32 -0
- package/src/tools/observable.ts +11 -2
- package/src/tools/queueMicrotask.ts +8 -3
- package/src/tools/readBytesFromStream.ts +3 -12
- package/src/tools/requestIdleCallback.ts +2 -2
- package/src/tools/sendToExtension.ts +1 -1
- package/src/tools/serialisation/sanitize.ts +71 -64
- package/src/tools/serialisation/stringify.ts +18 -0
- package/src/tools/stackTrace/computeStackTrace.ts +19 -19
- package/src/tools/stackTrace/handlingStack.ts +15 -2
- package/src/tools/taskQueue.ts +5 -3
- package/src/tools/thenable.ts +23 -0
- package/src/tools/timer.ts +8 -7
- package/src/tools/utils/arrayUtils.ts +8 -2
- package/src/tools/utils/browserDetection.ts +8 -0
- package/src/tools/utils/byteUtils.ts +2 -6
- package/src/tools/utils/functionUtils.ts +2 -2
- package/src/tools/utils/numberUtils.ts +0 -12
- package/src/tools/utils/objectUtils.ts +20 -0
- package/src/tools/utils/stringUtils.ts +23 -1
- package/src/tools/valueHistory.ts +59 -18
- package/src/transport/batch.ts +50 -31
- package/src/transport/eventBridge.ts +24 -10
- package/src/transport/flushController.ts +22 -30
- package/src/transport/httpRequest.ts +18 -47
- package/src/transport/index.ts +3 -2
- package/src/transport/sendWithRetryStrategy.ts +29 -17
- package/cjs/browser/browser.types.js +0 -6
- package/cjs/browser/browser.types.js.map +0 -1
- package/cjs/domain/configuration/endpointBuilder.d.ts +0 -12
- package/cjs/domain/configuration/endpointBuilder.js +0 -66
- package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
- package/cjs/domain/configuration/index.js +0 -44
- package/cjs/domain/configuration/index.js.map +0 -1
- package/cjs/domain/configuration/transportConfiguration.d.ts +0 -21
- package/cjs/domain/configuration/transportConfiguration.js +0 -58
- package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
- package/cjs/domain/connectivity/index.js +0 -18
- package/cjs/domain/connectivity/index.js.map +0 -1
- package/cjs/domain/contexts/rumInternalContext.type.js +0 -3
- package/cjs/domain/contexts/rumInternalContext.type.js.map +0 -1
- package/cjs/domain/deflate/index.js +0 -18
- package/cjs/domain/deflate/index.js.map +0 -1
- package/cjs/domain/intakeSites.d.ts +0 -4
- package/cjs/domain/intakeSites.js +0 -7
- package/cjs/domain/intakeSites.js.map +0 -1
- package/cjs/domain/report/browser.types.js +0 -3
- package/cjs/domain/report/browser.types.js.map +0 -1
- package/cjs/domain/session/oldCookiesMigration.d.ts +0 -11
- package/cjs/domain/session/oldCookiesMigration.js +0 -40
- package/cjs/domain/session/oldCookiesMigration.js.map +0 -1
- package/cjs/domain/session/sessionStoreOperations.d.ts +0 -12
- package/cjs/domain/session/sessionStoreOperations.js +0 -119
- package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
- package/cjs/domain/telemetry/index.js +0 -28
- package/cjs/domain/telemetry/index.js.map +0 -1
- package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
- package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/cjs/domain/userAgentData/index.js +0 -18
- package/cjs/domain/userAgentData/index.js.map +0 -1
- package/cjs/index.js.map +0 -1
- package/cjs/tools/abstractHooks.d.ts +0 -24
- package/cjs/tools/abstractHooks.js +0 -41
- package/cjs/tools/abstractHooks.js.map +0 -1
- package/cjs/tools/boundedBuffer.d.ts +0 -16
- package/cjs/tools/boundedBuffer.js +0 -32
- package/cjs/tools/boundedBuffer.js.map +0 -1
- package/cjs/tools/globalObject.d.ts +0 -19
- package/cjs/tools/globalObject.js +0 -44
- package/cjs/tools/globalObject.js.map +0 -1
- package/cjs/tools/mergeInto.d.ts +0 -25
- package/cjs/tools/mergeInto.js +0 -98
- package/cjs/tools/mergeInto.js.map +0 -1
- package/cjs/tools/monitor.d.ts +0 -9
- package/cjs/tools/monitor.js +0 -61
- package/cjs/tools/monitor.js.map +0 -1
- package/cjs/tools/serialisation/context.js +0 -3
- package/cjs/tools/serialisation/context.js.map +0 -1
- package/cjs/tools/utils/geocoding.js +0 -80
- package/cjs/tools/utils/geocoding.js.map +0 -1
- package/cjs/tools/utils/geolocation.js +0 -77
- package/cjs/tools/utils/geolocation.js.map +0 -1
- package/cjs/tools/utils/timeUtils.d.ts +0 -53
- package/cjs/tools/utils/timeUtils.js +0 -101
- package/cjs/tools/utils/timeUtils.js.map +0 -1
- package/cjs/tools/utils/typeUtils.d.ts +0 -4
- package/cjs/tools/utils/typeUtils.js +0 -16
- package/cjs/tools/utils/typeUtils.js.map +0 -1
- package/cjs/tools/utils/urlPolyfill.d.ts +0 -5
- package/cjs/tools/utils/urlPolyfill.js +0 -59
- package/cjs/tools/utils/urlPolyfill.js.map +0 -1
- package/cjs/transport/index.js +0 -15
- package/cjs/transport/index.js.map +0 -1
- package/esm/boot/displayAlreadyInitializedError.d.ts +0 -2
- package/esm/boot/displayAlreadyInitializedError.js +0 -7
- package/esm/boot/displayAlreadyInitializedError.js.map +0 -1
- package/esm/boot/init.d.ts +0 -13
- package/esm/boot/init.js +0 -35
- package/esm/boot/init.js.map +0 -1
- package/esm/browser/addEventListener.d.ts +0 -87
- package/esm/browser/addEventListener.js +0 -51
- package/esm/browser/addEventListener.js.map +0 -1
- package/esm/browser/browser.types.d.ts +0 -51
- package/esm/browser/browser.types.js +0 -5
- package/esm/browser/browser.types.js.map +0 -1
- package/esm/browser/cookie.d.ts +0 -26
- package/esm/browser/cookie.js +0 -101
- package/esm/browser/cookie.js.map +0 -1
- package/esm/browser/fetchObservable.d.ts +0 -38
- package/esm/browser/fetchObservable.js +0 -99
- package/esm/browser/fetchObservable.js.map +0 -1
- package/esm/browser/pageMayExitObservable.d.ts +0 -14
- package/esm/browser/pageMayExitObservable.js +0 -51
- package/esm/browser/pageMayExitObservable.js.map +0 -1
- package/esm/browser/runOnReadyState.d.ts +0 -5
- package/esm/browser/runOnReadyState.js +0 -16
- package/esm/browser/runOnReadyState.js.map +0 -1
- package/esm/browser/xhrObservable.d.ts +0 -24
- package/esm/browser/xhrObservable.js +0 -83
- package/esm/browser/xhrObservable.js.map +0 -1
- package/esm/domain/allowedTrackingOrigins.d.ts +0 -4
- package/esm/domain/allowedTrackingOrigins.js +0 -21
- package/esm/domain/allowedTrackingOrigins.js.map +0 -1
- package/esm/domain/bufferedData.d.ts +0 -14
- package/esm/domain/bufferedData.js +0 -19
- package/esm/domain/bufferedData.js.map +0 -1
- package/esm/domain/configuration/configuration.d.ts +0 -284
- package/esm/domain/configuration/configuration.js +0 -129
- package/esm/domain/configuration/configuration.js.map +0 -1
- package/esm/domain/configuration/endpointBuilder.d.ts +0 -12
- package/esm/domain/configuration/endpointBuilder.js +0 -62
- package/esm/domain/configuration/endpointBuilder.js.map +0 -1
- package/esm/domain/configuration/index.d.ts +0 -8
- package/esm/domain/configuration/index.js +0 -6
- package/esm/domain/configuration/index.js.map +0 -1
- package/esm/domain/configuration/remoteSdkConfig.d.ts +0 -81
- package/esm/domain/configuration/remoteSdkConfig.js +0 -172
- package/esm/domain/configuration/remoteSdkConfig.js.map +0 -1
- package/esm/domain/configuration/transportConfiguration.d.ts +0 -21
- package/esm/domain/configuration/transportConfiguration.js +0 -54
- package/esm/domain/configuration/transportConfiguration.js.map +0 -1
- package/esm/domain/connectivity/connectivity.d.ts +0 -18
- package/esm/domain/connectivity/connectivity.js +0 -13
- package/esm/domain/connectivity/connectivity.js.map +0 -1
- package/esm/domain/connectivity/index.d.ts +0 -1
- package/esm/domain/connectivity/index.js +0 -2
- package/esm/domain/connectivity/index.js.map +0 -1
- package/esm/domain/console/consoleObservable.d.ts +0 -21
- package/esm/domain/console/consoleObservable.js +0 -80
- package/esm/domain/console/consoleObservable.js.map +0 -1
- package/esm/domain/context/contextConstants.d.ts +0 -21
- package/esm/domain/context/contextConstants.js +0 -15
- package/esm/domain/context/contextConstants.js.map +0 -1
- package/esm/domain/context/contextManager.d.ts +0 -19
- package/esm/domain/context/contextManager.js +0 -56
- package/esm/domain/context/contextManager.js.map +0 -1
- package/esm/domain/context/contextUtils.d.ts +0 -5
- package/esm/domain/context/contextUtils.js +0 -13
- package/esm/domain/context/contextUtils.js.map +0 -1
- package/esm/domain/context/defineContextMethod.d.ts +0 -6
- package/esm/domain/context/defineContextMethod.js +0 -17
- package/esm/domain/context/defineContextMethod.js.map +0 -1
- package/esm/domain/context/storeContextManager.d.ts +0 -6
- package/esm/domain/context/storeContextManager.js +0 -35
- package/esm/domain/context/storeContextManager.js.map +0 -1
- package/esm/domain/contexts/accountContext.d.ts +0 -26
- package/esm/domain/contexts/accountContext.js +0 -29
- package/esm/domain/contexts/accountContext.js.map +0 -1
- package/esm/domain/contexts/globalContext.d.ts +0 -18
- package/esm/domain/contexts/globalContext.js +0 -17
- package/esm/domain/contexts/globalContext.js.map +0 -1
- package/esm/domain/contexts/rumInternalContext.type.d.ts +0 -14
- package/esm/domain/contexts/rumInternalContext.type.js +0 -2
- package/esm/domain/contexts/rumInternalContext.type.js.map +0 -1
- package/esm/domain/contexts/userContext.d.ts +0 -32
- package/esm/domain/contexts/userContext.js +0 -120
- package/esm/domain/contexts/userContext.js.map +0 -1
- package/esm/domain/deflate/deflate.types.d.ts +0 -40
- package/esm/domain/deflate/deflate.types.js +0 -2
- package/esm/domain/deflate/deflate.types.js.map +0 -1
- package/esm/domain/deflate/index.d.ts +0 -1
- package/esm/domain/deflate/index.js +0 -2
- package/esm/domain/deflate/index.js.map +0 -1
- package/esm/domain/error/error.d.ts +0 -23
- package/esm/domain/error/error.js +0 -72
- package/esm/domain/error/error.js.map +0 -1
- package/esm/domain/error/error.types.d.ts +0 -47
- package/esm/domain/error/error.types.js +0 -10
- package/esm/domain/error/error.types.js.map +0 -1
- package/esm/domain/error/trackRuntimeError.d.ts +0 -11
- package/esm/domain/error/trackRuntimeError.js +0 -43
- package/esm/domain/error/trackRuntimeError.js.map +0 -1
- package/esm/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js +0 -38
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
- package/esm/domain/extension/extensionUtils.d.ts +0 -10
- package/esm/domain/extension/extensionUtils.js +0 -25
- package/esm/domain/extension/extensionUtils.js.map +0 -1
- package/esm/domain/intakeSites.d.ts +0 -4
- package/esm/domain/intakeSites.js +0 -4
- package/esm/domain/intakeSites.js.map +0 -1
- package/esm/domain/report/browser.types.d.ts +0 -34
- package/esm/domain/report/browser.types.js +0 -2
- package/esm/domain/report/browser.types.js.map +0 -1
- package/esm/domain/report/reportObservable.d.ts +0 -14
- package/esm/domain/report/reportObservable.js +0 -95
- package/esm/domain/report/reportObservable.js.map +0 -1
- package/esm/domain/resourceUtils.d.ts +0 -18
- package/esm/domain/resourceUtils.js +0 -17
- package/esm/domain/resourceUtils.js.map +0 -1
- package/esm/domain/session/oldCookiesMigration.d.ts +0 -11
- package/esm/domain/session/oldCookiesMigration.js +0 -36
- package/esm/domain/session/oldCookiesMigration.js.map +0 -1
- package/esm/domain/session/sessionConstants.d.ts +0 -15
- package/esm/domain/session/sessionConstants.js +0 -13
- package/esm/domain/session/sessionConstants.js.map +0 -1
- package/esm/domain/session/sessionManager.d.ts +0 -28
- package/esm/domain/session/sessionManager.js +0 -196
- package/esm/domain/session/sessionManager.js.map +0 -1
- package/esm/domain/session/sessionState.d.ts +0 -16
- package/esm/domain/session/sessionState.js +0 -60
- package/esm/domain/session/sessionState.js.map +0 -1
- package/esm/domain/session/sessionStateValidation.d.ts +0 -3
- package/esm/domain/session/sessionStateValidation.js +0 -7
- package/esm/domain/session/sessionStateValidation.js.map +0 -1
- package/esm/domain/session/sessionStore.d.ts +0 -38
- package/esm/domain/session/sessionStore.js +0 -180
- package/esm/domain/session/sessionStore.js.map +0 -1
- package/esm/domain/session/sessionStoreOperations.d.ts +0 -12
- package/esm/domain/session/sessionStoreOperations.js +0 -114
- package/esm/domain/session/sessionStoreOperations.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -12
- package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -98
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -6
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -37
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -16
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js +0 -2
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
- package/esm/domain/synthetics/syntheticsWorkerValues.d.ts +0 -12
- package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -24
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/esm/domain/tags.d.ts +0 -6
- package/esm/domain/tags.js +0 -59
- package/esm/domain/tags.js.map +0 -1
- package/esm/domain/telemetry/index.d.ts +0 -4
- package/esm/domain/telemetry/index.js +0 -3
- package/esm/domain/telemetry/index.js.map +0 -1
- package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -18
- package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/esm/domain/telemetry/telemetry.d.ts +0 -56
- package/esm/domain/telemetry/telemetry.js +0 -232
- package/esm/domain/telemetry/telemetry.js.map +0 -1
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -866
- package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/esm/domain/trackingConsent.d.ts +0 -13
- package/esm/domain/trackingConsent.js +0 -24
- package/esm/domain/trackingConsent.js.map +0 -1
- package/esm/domain/userAgentData/index.d.ts +0 -1
- package/esm/domain/userAgentData/index.js +0 -2
- package/esm/domain/userAgentData/index.js.map +0 -1
- package/esm/domain/userAgentData/userAgentData.d.ts +0 -22
- package/esm/domain/userAgentData/userAgentData.js +0 -105
- package/esm/domain/userAgentData/userAgentData.js.map +0 -1
- package/esm/index.d.ts +0 -104
- package/esm/index.js +0 -79
- package/esm/index.js.map +0 -1
- package/esm/tools/abstractHooks.d.ts +0 -24
- package/esm/tools/abstractHooks.js +0 -37
- package/esm/tools/abstractHooks.js.map +0 -1
- package/esm/tools/abstractLifeCycle.d.ts +0 -23
- package/esm/tools/abstractLifeCycle.js +0 -24
- package/esm/tools/abstractLifeCycle.js.map +0 -1
- package/esm/tools/boundedBuffer.d.ts +0 -16
- package/esm/tools/boundedBuffer.js +0 -29
- package/esm/tools/boundedBuffer.js.map +0 -1
- package/esm/tools/catchUserErrors.d.ts +0 -1
- package/esm/tools/catchUserErrors.js +0 -12
- package/esm/tools/catchUserErrors.js.map +0 -1
- package/esm/tools/display.d.ts +0 -38
- package/esm/tools/display.js +0 -41
- package/esm/tools/display.js.map +0 -1
- package/esm/tools/encoder.d.ts +0 -54
- package/esm/tools/encoder.js +0 -37
- package/esm/tools/encoder.js.map +0 -1
- package/esm/tools/experimentalFeatures.d.ts +0 -21
- package/esm/tools/experimentalFeatures.js +0 -42
- package/esm/tools/experimentalFeatures.js.map +0 -1
- package/esm/tools/getZoneJsOriginalValue.d.ts +0 -19
- package/esm/tools/getZoneJsOriginalValue.js +0 -26
- package/esm/tools/getZoneJsOriginalValue.js.map +0 -1
- package/esm/tools/globalObject.d.ts +0 -19
- package/esm/tools/globalObject.js +0 -40
- package/esm/tools/globalObject.js.map +0 -1
- package/esm/tools/instrumentMethod.d.ts +0 -75
- package/esm/tools/instrumentMethod.js +0 -114
- package/esm/tools/instrumentMethod.js.map +0 -1
- package/esm/tools/matchOption.d.ts +0 -8
- package/esm/tools/matchOption.js +0 -31
- package/esm/tools/matchOption.js.map +0 -1
- package/esm/tools/mergeInto.d.ts +0 -25
- package/esm/tools/mergeInto.js +0 -93
- package/esm/tools/mergeInto.js.map +0 -1
- package/esm/tools/monitor.d.ts +0 -9
- package/esm/tools/monitor.js +0 -51
- package/esm/tools/monitor.js.map +0 -1
- package/esm/tools/observable.d.ts +0 -30
- package/esm/tools/observable.js +0 -83
- package/esm/tools/observable.js.map +0 -1
- package/esm/tools/queueMicrotask.d.ts +0 -1
- package/esm/tools/queueMicrotask.js +0 -14
- package/esm/tools/queueMicrotask.js.map +0 -1
- package/esm/tools/readBytesFromStream.d.ts +0 -10
- package/esm/tools/readBytesFromStream.js +0 -25
- package/esm/tools/readBytesFromStream.js.map +0 -1
- package/esm/tools/requestIdleCallback.d.ts +0 -12
- package/esm/tools/requestIdleCallback.js +0 -30
- package/esm/tools/requestIdleCallback.js.map +0 -1
- package/esm/tools/sendToExtension.d.ts +0 -3
- package/esm/tools/sendToExtension.js +0 -8
- package/esm/tools/sendToExtension.js.map +0 -1
- package/esm/tools/serialisation/context.d.ts +0 -9
- package/esm/tools/serialisation/context.js +0 -2
- package/esm/tools/serialisation/context.js.map +0 -1
- package/esm/tools/serialisation/jsonStringify.d.ts +0 -13
- package/esm/tools/serialisation/jsonStringify.js +0 -44
- package/esm/tools/serialisation/jsonStringify.js.map +0 -1
- package/esm/tools/serialisation/sanitize.d.ts +0 -18
- package/esm/tools/serialisation/sanitize.js +0 -185
- package/esm/tools/serialisation/sanitize.js.map +0 -1
- package/esm/tools/stackTrace/computeStackTrace.d.ts +0 -25
- package/esm/tools/stackTrace/computeStackTrace.js +0 -183
- package/esm/tools/stackTrace/computeStackTrace.js.map +0 -1
- package/esm/tools/stackTrace/handlingStack.d.ts +0 -10
- package/esm/tools/stackTrace/handlingStack.js +0 -41
- package/esm/tools/stackTrace/handlingStack.js.map +0 -1
- package/esm/tools/taskQueue.d.ts +0 -15
- package/esm/tools/taskQueue.js +0 -50
- package/esm/tools/taskQueue.js.map +0 -1
- package/esm/tools/timer.d.ts +0 -5
- package/esm/tools/timer.js +0 -16
- package/esm/tools/timer.js.map +0 -1
- package/esm/tools/utils/arrayUtils.d.ts +0 -3
- package/esm/tools/utils/arrayUtils.js +0 -15
- package/esm/tools/utils/arrayUtils.js.map +0 -1
- package/esm/tools/utils/browserDetection.d.ts +0 -8
- package/esm/tools/utils/browserDetection.js +0 -28
- package/esm/tools/utils/browserDetection.js.map +0 -1
- package/esm/tools/utils/byteUtils.d.ts +0 -8
- package/esm/tools/utils/byteUtils.js +0 -29
- package/esm/tools/utils/byteUtils.js.map +0 -1
- package/esm/tools/utils/functionUtils.d.ts +0 -8
- package/esm/tools/utils/functionUtils.js +0 -39
- package/esm/tools/utils/functionUtils.js.map +0 -1
- package/esm/tools/utils/geocoding.d.ts +0 -60
- package/esm/tools/utils/geocoding.js +0 -73
- package/esm/tools/utils/geocoding.js.map +0 -1
- package/esm/tools/utils/geolocation.d.ts +0 -24
- package/esm/tools/utils/geolocation.js +0 -71
- package/esm/tools/utils/geolocation.js.map +0 -1
- package/esm/tools/utils/numberUtils.d.ts +0 -8
- package/esm/tools/utils/numberUtils.js +0 -17
- package/esm/tools/utils/numberUtils.js.map +0 -1
- package/esm/tools/utils/objectUtils.d.ts +0 -10
- package/esm/tools/utils/objectUtils.js +0 -17
- package/esm/tools/utils/objectUtils.js.map +0 -1
- package/esm/tools/utils/polyfills.d.ts +0 -7
- package/esm/tools/utils/polyfills.js +0 -18
- package/esm/tools/utils/polyfills.js.map +0 -1
- package/esm/tools/utils/responseUtils.d.ts +0 -2
- package/esm/tools/utils/responseUtils.js +0 -13
- package/esm/tools/utils/responseUtils.js.map +0 -1
- package/esm/tools/utils/stringUtils.d.ts +0 -23
- package/esm/tools/utils/stringUtils.js +0 -84
- package/esm/tools/utils/stringUtils.js.map +0 -1
- package/esm/tools/utils/timeUtils.d.ts +0 -53
- package/esm/tools/utils/timeUtils.js +0 -84
- package/esm/tools/utils/timeUtils.js.map +0 -1
- package/esm/tools/utils/timezone.d.ts +0 -1
- package/esm/tools/utils/timezone.js +0 -10
- package/esm/tools/utils/timezone.js.map +0 -1
- package/esm/tools/utils/typeUtils.d.ts +0 -4
- package/esm/tools/utils/typeUtils.js +0 -13
- package/esm/tools/utils/typeUtils.js.map +0 -1
- package/esm/tools/utils/urlPolyfill.d.ts +0 -5
- package/esm/tools/utils/urlPolyfill.js +0 -52
- package/esm/tools/utils/urlPolyfill.js.map +0 -1
- package/esm/tools/valueHistory.d.ts +0 -27
- package/esm/tools/valueHistory.js +0 -100
- package/esm/tools/valueHistory.js.map +0 -1
- package/esm/transport/batch.d.ts +0 -16
- package/esm/transport/batch.js +0 -106
- package/esm/transport/batch.js.map +0 -1
- package/esm/transport/eventBridge.d.ts +0 -21
- package/esm/transport/eventBridge.js +0 -41
- package/esm/transport/eventBridge.js.map +0 -1
- package/esm/transport/flushController.d.ts +0 -65
- package/esm/transport/flushController.js +0 -119
- package/esm/transport/flushController.js.map +0 -1
- package/esm/transport/httpRequest.d.ts +0 -57
- package/esm/transport/httpRequest.js +0 -101
- package/esm/transport/httpRequest.js.map +0 -1
- package/esm/transport/index.d.ts +0 -7
- package/esm/transport/index.js +0 -5
- package/esm/transport/index.js.map +0 -1
- package/esm/transport/sendWithRetryStrategy.d.ts +0 -41
- package/esm/transport/sendWithRetryStrategy.js +0 -158
- package/esm/transport/sendWithRetryStrategy.js.map +0 -1
- package/src/domain/configuration/endpointBuilder.ts +0 -105
- package/src/domain/configuration/transportConfiguration.ts +0 -86
- package/src/domain/intakeSites.ts +0 -6
- package/src/domain/session/oldCookiesMigration.ts +0 -42
- package/src/domain/session/sessionStoreOperations.ts +0 -131
- package/src/tools/abstractHooks.ts +0 -72
- package/src/tools/boundedBuffer.ts +0 -44
- package/src/tools/globalObject.ts +0 -51
- package/src/tools/mergeInto.ts +0 -177
- package/src/tools/monitor.ts +0 -71
- package/src/tools/utils/timeUtils.ts +0 -117
- package/src/tools/utils/typeUtils.ts +0 -12
- package/src/tools/utils/urlPolyfill.ts +0 -55
- /package/cjs/{tools/utils → domain/geo}/geocoding.d.ts +0 -0
- /package/cjs/{tools/utils → domain/geo}/geolocation.d.ts +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BufferedObservable } from "../tools/observable.mjs";
|
|
2
|
+
import { mockable } from "../tools/mockable.mjs";
|
|
3
|
+
import { addTelemetryDebug } from "./telemetry/telemetry.mjs";
|
|
4
|
+
import { trackRuntimeError } from "./error/trackRuntimeError.mjs";
|
|
5
|
+
import { initXhrObservable } from "../browser/xhrObservable.mjs";
|
|
6
|
+
import { initFetchObservable } from "../browser/fetchObservable.mjs";
|
|
7
|
+
import { initConsoleObservable } from "./console/consoleObservable.mjs";
|
|
8
|
+
import { ConsoleApiName } from "@kubesense/kubesense-js-core/util";
|
|
9
|
+
//#region src/domain/bufferedData.ts
|
|
10
|
+
const BUFFER_LIMIT = 500;
|
|
11
|
+
let BufferedDataType = /* @__PURE__ */ function(BufferedDataType) {
|
|
12
|
+
BufferedDataType[BufferedDataType["RUNTIME_ERROR"] = 0] = "RUNTIME_ERROR";
|
|
13
|
+
BufferedDataType[BufferedDataType["FETCH"] = 1] = "FETCH";
|
|
14
|
+
BufferedDataType[BufferedDataType["XHR"] = 2] = "XHR";
|
|
15
|
+
BufferedDataType[BufferedDataType["CONSOLE"] = 3] = "CONSOLE";
|
|
16
|
+
return BufferedDataType;
|
|
17
|
+
}({});
|
|
18
|
+
function startBufferingData() {
|
|
19
|
+
const observable = new BufferedObservable(BUFFER_LIMIT, (count) => {
|
|
20
|
+
addTelemetryDebug("Early data collection dropped data on unbuffer", { count });
|
|
21
|
+
});
|
|
22
|
+
const subscriptions = [];
|
|
23
|
+
function subscribe(type, source) {
|
|
24
|
+
subscriptions.push(source.subscribe((data) => {
|
|
25
|
+
observable.notify({
|
|
26
|
+
type,
|
|
27
|
+
data
|
|
28
|
+
});
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
subscribe(0, mockable(trackRuntimeError)());
|
|
32
|
+
subscribe(1, initFetchObservable());
|
|
33
|
+
subscribe(2, initXhrObservable());
|
|
34
|
+
subscribe(3, initConsoleObservable(Object.values(ConsoleApiName)));
|
|
35
|
+
return {
|
|
36
|
+
observable,
|
|
37
|
+
stop: () => subscriptions.forEach((subscription) => subscription.unsubscribe())
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { BufferedDataType, startBufferingData };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=bufferedData.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bufferedData.mjs","names":[],"sources":["../../src/domain/bufferedData.ts"],"sourcesContent":["import { ConsoleApiName } from '@kubesense/kubesense-js-core/util'\nimport type { Observable, Subscription } from '../tools/observable'\nimport { BufferedObservable } from '../tools/observable'\nimport { mockable } from '../tools/mockable'\nimport type { FetchContext } from '../browser/fetchObservable'\nimport { initFetchObservable } from '../browser/fetchObservable'\nimport type { XhrContext } from '../browser/xhrObservable'\nimport { initXhrObservable } from '../browser/xhrObservable'\nimport { addTelemetryDebug } from './telemetry'\nimport type { RawError } from './error/error.types'\nimport { trackRuntimeError } from './error/trackRuntimeError'\nimport type { ConsoleLog } from './console/consoleObservable'\nimport { initConsoleObservable } from './console/consoleObservable'\n\nconst BUFFER_LIMIT = 500\n\nexport const enum BufferedDataType {\n RUNTIME_ERROR,\n FETCH,\n XHR,\n CONSOLE,\n}\n\nexport type BufferedData =\n | { type: BufferedDataType.RUNTIME_ERROR; data: RawError }\n | { type: BufferedDataType.FETCH; data: FetchContext }\n | { type: BufferedDataType.XHR; data: XhrContext }\n | { type: BufferedDataType.CONSOLE; data: ConsoleLog }\n\nexport function startBufferingData() {\n const observable = new BufferedObservable<BufferedData>(BUFFER_LIMIT, (count) => {\n // monitor-until: 2026-10-14\n addTelemetryDebug('Early data collection dropped data on unbuffer', {\n count,\n })\n })\n const subscriptions: Subscription[] = []\n\n function subscribe<T extends BufferedDataType>(\n type: T,\n source: Observable<Extract<BufferedData, { type: T }>['data']>\n ) {\n subscriptions.push(\n source.subscribe((data) => {\n observable.notify({ type, data } as BufferedData)\n })\n )\n }\n\n subscribe(BufferedDataType.RUNTIME_ERROR, mockable(trackRuntimeError)())\n subscribe(BufferedDataType.FETCH, initFetchObservable())\n subscribe(BufferedDataType.XHR, initXhrObservable())\n subscribe(BufferedDataType.CONSOLE, initConsoleObservable(Object.values(ConsoleApiName)))\n\n return {\n observable,\n stop: () => subscriptions.forEach((subscription) => subscription.unsubscribe()),\n }\n}\n"],"mappings":";;;;;;;;;AAcA,MAAM,eAAe;AAErB,IAAkB,mBAAX,yBAAA,kBAAA;CACL,iBAAA,iBAAA,mBAAA,KAAA;CACA,iBAAA,iBAAA,WAAA,KAAA;CACA,iBAAA,iBAAA,SAAA,KAAA;CACA,iBAAA,iBAAA,aAAA,KAAA;;AACF,EAAA,CAAA,CAAA;AAQA,SAAgB,qBAAqB;CACnC,MAAM,aAAa,IAAI,mBAAiC,eAAe,UAAU;EAE/E,kBAAkB,kDAAkD,EAClE,MACF,CAAC;CACH,CAAC;CACD,MAAM,gBAAgC,CAAC;CAEvC,SAAS,UACP,MACA,QACA;EACA,cAAc,KACZ,OAAO,WAAW,SAAS;GACzB,WAAW,OAAO;IAAE;IAAM;GAAK,CAAiB;EAClD,CAAC,CACH;CACF;CAEA,UAAA,GAA0C,SAAS,iBAAiB,CAAC,CAAC,CAAC;CACvE,UAAA,GAAkC,oBAAoB,CAAC;CACvD,UAAA,GAAgC,kBAAkB,CAAC;CACnD,UAAA,GAAoC,sBAAsB,OAAO,OAAO,cAAc,CAAC,CAAC;CAExF,OAAO;EACL;EACA,YAAY,cAAc,SAAS,iBAAiB,aAAa,YAAY,CAAC;CAChF;AACF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { TrackingConsent } from "../trackingConsent.mjs";
|
|
2
|
+
import { INTAKE_SITE_PROD } from "@kubesense/kubesense-js-core/transport";
|
|
3
|
+
//#region src/domain/configuration/configuration.ts
|
|
4
|
+
/**
|
|
5
|
+
* Default privacy level for the browser SDK.
|
|
6
|
+
*
|
|
7
|
+
* [Replay Privacy Options](https://docs.kubesense.ai/real_user_monitoring/session_replay/browser/privacy_options) for further information.
|
|
8
|
+
*/
|
|
9
|
+
const DefaultPrivacyLevel = {
|
|
10
|
+
ALLOW: "allow",
|
|
11
|
+
MASK: "mask",
|
|
12
|
+
MASK_USER_INPUT: "mask-user-input",
|
|
13
|
+
MASK_UNLESS_ALLOWLISTED: "mask-unless-allowlisted"
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Trace context injection option.
|
|
17
|
+
*
|
|
18
|
+
* See [Connect RUM and Traces](https://docs.kubesense.ai/real_user_monitoring/platform/connect_rum_and_traces/?tab=browserrum) for further information.
|
|
19
|
+
*/
|
|
20
|
+
const TraceContextInjection = {
|
|
21
|
+
ALL: "all",
|
|
22
|
+
SAMPLED: "sampled"
|
|
23
|
+
};
|
|
24
|
+
const BROWSER_CORE_SCHEMA = {
|
|
25
|
+
clientToken: {
|
|
26
|
+
type: "string",
|
|
27
|
+
required: true
|
|
28
|
+
},
|
|
29
|
+
service: { type: "string" },
|
|
30
|
+
env: { type: "string" },
|
|
31
|
+
version: { type: "string" },
|
|
32
|
+
kubesenseRumEndpoint: {
|
|
33
|
+
type: "site",
|
|
34
|
+
default: INTAKE_SITE_PROD
|
|
35
|
+
},
|
|
36
|
+
proxy: {
|
|
37
|
+
type: "union",
|
|
38
|
+
variants: [{ type: "string" }, {
|
|
39
|
+
type: "function",
|
|
40
|
+
signature: void 0
|
|
41
|
+
}]
|
|
42
|
+
},
|
|
43
|
+
sessionSampleRate: {
|
|
44
|
+
type: "percentage",
|
|
45
|
+
default: 100
|
|
46
|
+
},
|
|
47
|
+
telemetrySampleRate: {
|
|
48
|
+
type: "percentage",
|
|
49
|
+
default: 20
|
|
50
|
+
},
|
|
51
|
+
telemetryConfigurationSampleRate: {
|
|
52
|
+
type: "percentage",
|
|
53
|
+
default: 5
|
|
54
|
+
},
|
|
55
|
+
telemetryUsageSampleRate: {
|
|
56
|
+
type: "percentage",
|
|
57
|
+
default: 5
|
|
58
|
+
},
|
|
59
|
+
silentMultipleInit: {
|
|
60
|
+
type: "boolean",
|
|
61
|
+
default: false,
|
|
62
|
+
strict: false
|
|
63
|
+
},
|
|
64
|
+
storeContextsAcrossPages: {
|
|
65
|
+
type: "boolean",
|
|
66
|
+
default: false,
|
|
67
|
+
strict: false
|
|
68
|
+
},
|
|
69
|
+
trackAnonymousUser: {
|
|
70
|
+
type: "boolean",
|
|
71
|
+
default: true,
|
|
72
|
+
strict: false
|
|
73
|
+
},
|
|
74
|
+
useSecureSessionCookie: {
|
|
75
|
+
type: "boolean",
|
|
76
|
+
default: false,
|
|
77
|
+
strict: false
|
|
78
|
+
},
|
|
79
|
+
usePartitionedCrossSiteSessionCookie: {
|
|
80
|
+
type: "boolean",
|
|
81
|
+
default: false,
|
|
82
|
+
strict: false
|
|
83
|
+
},
|
|
84
|
+
trackSessionAcrossSubdomains: {
|
|
85
|
+
type: "boolean",
|
|
86
|
+
default: false,
|
|
87
|
+
strict: false
|
|
88
|
+
},
|
|
89
|
+
allowedTrackingOrigins: {
|
|
90
|
+
type: "match-option",
|
|
91
|
+
multiple: true,
|
|
92
|
+
strict: false
|
|
93
|
+
},
|
|
94
|
+
trackingConsent: {
|
|
95
|
+
type: "enum",
|
|
96
|
+
values: TrackingConsent,
|
|
97
|
+
default: TrackingConsent.GRANTED
|
|
98
|
+
},
|
|
99
|
+
beforeSend: {
|
|
100
|
+
type: "function",
|
|
101
|
+
signature: void 0
|
|
102
|
+
},
|
|
103
|
+
source: {
|
|
104
|
+
type: "enum",
|
|
105
|
+
values: [
|
|
106
|
+
"browser",
|
|
107
|
+
"flutter",
|
|
108
|
+
"unity"
|
|
109
|
+
],
|
|
110
|
+
default: "browser",
|
|
111
|
+
strict: false
|
|
112
|
+
},
|
|
113
|
+
sessionPersistence: {
|
|
114
|
+
type: "enum",
|
|
115
|
+
values: [
|
|
116
|
+
"cookie",
|
|
117
|
+
"local-storage",
|
|
118
|
+
"memory"
|
|
119
|
+
],
|
|
120
|
+
multiple: true,
|
|
121
|
+
strict: false
|
|
122
|
+
},
|
|
123
|
+
replica: {
|
|
124
|
+
type: "schema",
|
|
125
|
+
schema: {
|
|
126
|
+
clientToken: {
|
|
127
|
+
type: "string",
|
|
128
|
+
required: true
|
|
129
|
+
},
|
|
130
|
+
applicationId: { type: "string" }
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
datacenter: { type: "string" },
|
|
134
|
+
sdkVersion: { type: "string" },
|
|
135
|
+
variant: { type: "string" }
|
|
136
|
+
};
|
|
137
|
+
function serializeConfiguration(initConfiguration) {
|
|
138
|
+
return {
|
|
139
|
+
session_sample_rate: initConfiguration.sessionSampleRate,
|
|
140
|
+
telemetry_sample_rate: initConfiguration.telemetrySampleRate,
|
|
141
|
+
telemetry_configuration_sample_rate: initConfiguration.telemetryConfigurationSampleRate,
|
|
142
|
+
telemetry_usage_sample_rate: initConfiguration.telemetryUsageSampleRate,
|
|
143
|
+
use_before_send: !!initConfiguration.beforeSend,
|
|
144
|
+
use_partitioned_cross_site_session_cookie: initConfiguration.usePartitionedCrossSiteSessionCookie,
|
|
145
|
+
use_secure_session_cookie: initConfiguration.useSecureSessionCookie,
|
|
146
|
+
use_proxy: !!initConfiguration.proxy,
|
|
147
|
+
silent_multiple_init: initConfiguration.silentMultipleInit,
|
|
148
|
+
track_session_across_subdomains: initConfiguration.trackSessionAcrossSubdomains,
|
|
149
|
+
track_anonymous_user: initConfiguration.trackAnonymousUser,
|
|
150
|
+
session_persistence: Array.isArray(initConfiguration.sessionPersistence) ? initConfiguration.sessionPersistence[0] : initConfiguration.sessionPersistence,
|
|
151
|
+
store_contexts_across_pages: !!initConfiguration.storeContextsAcrossPages,
|
|
152
|
+
allow_untrusted_events: !!initConfiguration.allowUntrustedEvents,
|
|
153
|
+
tracking_consent: initConfiguration.trackingConsent,
|
|
154
|
+
use_allowed_tracking_origins: Array.isArray(initConfiguration.allowedTrackingOrigins),
|
|
155
|
+
source: initConfiguration.source,
|
|
156
|
+
sdk_version: initConfiguration.sdkVersion,
|
|
157
|
+
variant: initConfiguration.variant
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
export { BROWSER_CORE_SCHEMA, DefaultPrivacyLevel, TraceContextInjection, serializeConfiguration };
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=configuration.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.mjs","names":[],"sources":["../../../src/domain/configuration/configuration.ts"],"sourcesContent":["import type { ProxyFn, Site } from '@kubesense/kubesense-js-core/transport'\nimport { INTAKE_SITE_PROD } from '@kubesense/kubesense-js-core/transport'\nimport type { InferredConfig, MatchOption } from '@kubesense/kubesense-js-core/configuration'\nimport type { RawTelemetryConfiguration } from '../telemetry'\nimport { TrackingConsent } from '../trackingConsent'\nimport type { SessionPersistence } from '../session/sessionConstants'\n\n/**\n * Default privacy level for the browser SDK.\n *\n * [Replay Privacy Options](https://docs.kubesense.ai/real_user_monitoring/session_replay/browser/privacy_options) for further information.\n */\nexport const DefaultPrivacyLevel = {\n ALLOW: 'allow',\n MASK: 'mask',\n MASK_USER_INPUT: 'mask-user-input',\n MASK_UNLESS_ALLOWLISTED: 'mask-unless-allowlisted',\n} as const\nexport type DefaultPrivacyLevel = (typeof DefaultPrivacyLevel)[keyof typeof DefaultPrivacyLevel]\n\n/**\n * Trace context injection option.\n *\n * See [Connect RUM and Traces](https://docs.kubesense.ai/real_user_monitoring/platform/connect_rum_and_traces/?tab=browserrum) for further information.\n */\nexport const TraceContextInjection = {\n ALL: 'all',\n SAMPLED: 'sampled',\n} as const\n\n/**\n * Trace context injection option.\n *\n * See [Connect RUM and Traces](https://docs.kubesense.ai/real_user_monitoring/platform/connect_rum_and_traces/?tab=browserrum) for further information.\n *\n */\nexport type TraceContextInjection = (typeof TraceContextInjection)[keyof typeof TraceContextInjection]\n\nexport interface InitConfiguration {\n /**\n * The client token for KubeSense. Required for authenticating your application with KubeSense.\n *\n * @category Authentication\n */\n clientToken: string\n\n /**\n * A callback function that can be used to modify events before they are sent to KubeSense.\n *\n * @category Data Collection\n */\n beforeSend?: GenericBeforeSendCallback | undefined\n\n /**\n * The percentage of sessions tracked. A value between 0 and 100.\n *\n * @category Data Collection\n * @defaultValue 100\n */\n sessionSampleRate?: number | undefined\n\n /**\n * The percentage of telemetry events sent. A value between 0 and 100.\n *\n * @category Data Collection\n * @defaultValue 20\n */\n telemetrySampleRate?: number | undefined\n\n /**\n * Initialization fails silently if the RUM Browser SDK is already initialized on the page.\n *\n * @defaultValue false\n */\n silentMultipleInit?: boolean | undefined\n\n /**\n * Which storage strategy to use for persisting sessions. Can be 'cookie', 'local-storage', or 'memory'.\n * When an array is provided, the SDK will attempt each persistence type in the order specified.\n *\n * Important: If you are using the RUM and Logs Browser SDKs, this option must be configured with identical values\n *\n * Note: 'memory' option is only for use with single-page applications. All page loads will start a new session, likely resulting in an increase in total number of RUM sessions\n *\n * @category Session Persistence\n * @defaultValue \"cookie\"\n */\n sessionPersistence?: SessionPersistence | SessionPersistence[] | undefined\n\n /**\n * Allow listening to DOM events dispatched programmatically ([untrusted events](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted)). Enabling this option can be useful if you heavily rely on programmatic events, such as in an automated UI test environment.\n *\n * @defaultValue false\n */\n allowUntrustedEvents?: boolean | undefined\n\n /**\n * Store global context and user context in localStorage to preserve them along the user navigation.\n * See [Contexts life cycle](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/?tab=npm#contexts-life-cycle) for further information.\n *\n * @defaultValue false\n */\n storeContextsAcrossPages?: boolean | undefined\n\n /**\n * Set the initial user tracking consent state.\n * See [User tracking consent](https://docs.kubesense.ai/real_user_monitoring/browser/advanced_configuration/?tab=npm#user-tracking-consent) for further information.\n *\n * @category Privacy\n * @defaultValue granted\n */\n trackingConsent?: TrackingConsent | undefined\n\n /**\n * List of origins where the SDK is allowed to run when used in a browser extension context.\n * Matches urls against the extensions origin.\n * If not provided and the SDK is running in a browser extension, the SDK will not run.\n */\n allowedTrackingOrigins?: MatchOption[] | undefined\n\n // transport options\n /**\n * Optional proxy URL, for example: https://www.proxy.com/path.\n * See [Proxy Your Browser RUM Data](https://docs.kubesense.ai/real_user_monitoring/guide/proxy-rum-data) for further information.\n *\n * @category Transport\n */\n proxy?: string | ProxyFn | undefined\n\n /**\n * The KubeSense RUM intake host that events are sent to, for example `us2.kubesense.ai`.\n *\n * @category Transport\n * @defaultValue us2.kubesense.ai\n */\n kubesenseRumEndpoint?: Site | undefined\n\n // tag and context options\n /**\n * The service name for your application. Follows the [tag syntax requirements](https://docs.kubesense.ai/getting_started/tagging/#define-tags).\n *\n * @category Data Collection\n */\n service?: string | undefined | null\n\n /**\n * The application’s environment, for example: prod, pre-prod, and staging. Follows the [tag syntax requirements](https://docs.kubesense.ai/getting_started/tagging/#define-tags).\n *\n * @category Data Collection\n */\n env?: string | undefined | null\n\n /**\n * The application’s version, for example: 1.2.3, 6c44da20, and 2020.02.13. Follows the [tag syntax requirements](https://docs.kubesense.ai/getting_started/tagging/#define-tags).\n *\n * @category Data Collection\n */\n version?: string | undefined | null\n\n // cookie options\n /**\n * Use a partitioned secure cross-site session cookie. This allows the RUM Browser SDK to run when the site is loaded from another one (iframe). Implies `useSecureSessionCookie`.\n *\n * Important: If you are using the RUM and Logs Browser SDKs, this option must be configured with identical values\n *\n * @category Session Persistence\n * @defaultValue false\n */\n usePartitionedCrossSiteSessionCookie?: boolean | undefined\n\n /**\n * Use a secure session cookie. This disables RUM events sent on insecure (non-HTTPS) connections.\n *\n * Important: If you are using the RUM and Logs Browser SDKs, this option must be configured with identical values\n *\n * @category Session Persistence\n * @defaultValue false\n */\n useSecureSessionCookie?: boolean | undefined\n\n /**\n * Preserve the session across subdomains for the same site.\n *\n * Important: If you are using the RUM and Logs Browser SDKs, this option must be configured with identical values\n *\n * @category Session Persistence\n * @defaultValue false\n */\n trackSessionAcrossSubdomains?: boolean | undefined\n\n /**\n * Track anonymous user for the same site and extend cookie expiration date\n *\n * @category Data Collection\n * @defaultValue true\n */\n trackAnonymousUser?: boolean | undefined\n\n // internal options\n /**\n * [Internal option] Enable experimental features\n *\n * @internal\n */\n enableExperimentalFeatures?: string[] | undefined\n\n /**\n * [Internal option] Configure the dual shipping to another datacenter\n *\n * @internal\n */\n replica?: ReplicaInitConfiguration | undefined\n\n /**\n * [Internal option] Set the datacenter from where the data is dual shipped\n *\n * @internal\n */\n datacenter?: string\n\n /**\n * [Internal option] The percentage of telemetry configuration sent. A value between 0 and 100.\n *\n * @internal\n * @defaultValue 5\n */\n telemetryConfigurationSampleRate?: number\n\n /**\n * [Internal option] The percentage of telemetry usage sent. A value between 0 and 100.\n *\n * @internal\n * @defaultValue 5\n */\n telemetryUsageSampleRate?: number\n\n /**\n * [Internal option] Additional configuration for the SDK.\n *\n * @internal\n */\n source?: 'browser' | 'flutter' | 'unity' | undefined\n\n /**\n * [Internal option] Additional configuration for the SDK.\n *\n * @internal\n */\n sdkVersion?: string | undefined\n\n /**\n * [Internal option] Additional configuration for the SDK.\n *\n * @internal\n */\n variant?: string | undefined\n}\n\n// This type is only used to build the core configuration. Logs and RUM SDKs are using a proper type\n// for this option.\ntype GenericBeforeSendCallback = (event: any, context?: any) => unknown\n\n/**\n * @internal\n */\nexport interface ReplicaInitConfiguration {\n applicationId?: string\n clientToken: string\n}\n\nexport type SdkSource = 'browser' | 'flutter' | 'unity'\n\nexport const BROWSER_CORE_SCHEMA = {\n clientToken: { type: 'string', required: true },\n\n // Optional tag fields\n service: { type: 'string' },\n env: { type: 'string' },\n version: { type: 'string' },\n\n // Transport\n kubesenseRumEndpoint: { type: 'site', default: INTAKE_SITE_PROD },\n proxy: {\n type: 'union',\n variants: [{ type: 'string' }, { type: 'function', signature: undefined as ProxyFn | undefined }],\n },\n\n // Sample rates\n sessionSampleRate: { type: 'percentage', default: 100 },\n telemetrySampleRate: { type: 'percentage', default: 20 },\n telemetryConfigurationSampleRate: { type: 'percentage', default: 5 },\n telemetryUsageSampleRate: { type: 'percentage', default: 5 },\n\n // Booleans\n silentMultipleInit: { type: 'boolean', default: false, strict: false },\n storeContextsAcrossPages: { type: 'boolean', default: false, strict: false },\n trackAnonymousUser: { type: 'boolean', default: true, strict: false },\n useSecureSessionCookie: { type: 'boolean', default: false, strict: false },\n usePartitionedCrossSiteSessionCookie: { type: 'boolean', default: false, strict: false },\n trackSessionAcrossSubdomains: { type: 'boolean', default: false, strict: false },\n\n // Cookie/extension origin validation\n allowedTrackingOrigins: { type: 'match-option', multiple: true, strict: false },\n\n // Privacy\n trackingConsent: { type: 'enum', values: TrackingConsent, default: TrackingConsent.GRANTED },\n\n // Callbacks\n beforeSend: { type: 'function', signature: undefined as GenericBeforeSendCallback | undefined },\n\n // Passthroughs\n source: { type: 'enum', values: ['browser', 'flutter', 'unity'] as const, default: 'browser', strict: false },\n sessionPersistence: {\n type: 'enum',\n values: ['cookie', 'local-storage', 'memory'] as const,\n multiple: true,\n strict: false,\n },\n replica: {\n type: 'schema',\n schema: {\n clientToken: { type: 'string', required: true },\n applicationId: { type: 'string' },\n },\n },\n\n // Internal\n datacenter: { type: 'string' },\n sdkVersion: { type: 'string' },\n variant: { type: 'string' },\n} as const\n\nexport type Configuration = InferredConfig<typeof BROWSER_CORE_SCHEMA>\n\nexport function serializeConfiguration(initConfiguration: InitConfiguration) {\n return {\n session_sample_rate: initConfiguration.sessionSampleRate,\n telemetry_sample_rate: initConfiguration.telemetrySampleRate,\n telemetry_configuration_sample_rate: initConfiguration.telemetryConfigurationSampleRate,\n telemetry_usage_sample_rate: initConfiguration.telemetryUsageSampleRate,\n use_before_send: !!initConfiguration.beforeSend,\n use_partitioned_cross_site_session_cookie: initConfiguration.usePartitionedCrossSiteSessionCookie,\n use_secure_session_cookie: initConfiguration.useSecureSessionCookie,\n use_proxy: !!initConfiguration.proxy,\n silent_multiple_init: initConfiguration.silentMultipleInit,\n track_session_across_subdomains: initConfiguration.trackSessionAcrossSubdomains,\n track_anonymous_user: initConfiguration.trackAnonymousUser,\n session_persistence: Array.isArray(initConfiguration.sessionPersistence)\n ? initConfiguration.sessionPersistence[0]\n : initConfiguration.sessionPersistence,\n store_contexts_across_pages: !!initConfiguration.storeContextsAcrossPages,\n allow_untrusted_events: !!initConfiguration.allowUntrustedEvents,\n tracking_consent: initConfiguration.trackingConsent,\n use_allowed_tracking_origins: Array.isArray(initConfiguration.allowedTrackingOrigins),\n source: initConfiguration.source,\n sdk_version: initConfiguration.sdkVersion,\n variant: initConfiguration.variant,\n } satisfies RawTelemetryConfiguration\n}\n"],"mappings":";;;;;;;;AAYA,MAAa,sBAAsB;CACjC,OAAO;CACP,MAAM;CACN,iBAAiB;CACjB,yBAAyB;AAC3B;;;;;;AAQA,MAAa,wBAAwB;CACnC,KAAK;CACL,SAAS;AACX;AAoPA,MAAa,sBAAsB;CACjC,aAAa;EAAE,MAAM;EAAU,UAAU;CAAK;CAG9C,SAAS,EAAE,MAAM,SAAS;CAC1B,KAAK,EAAE,MAAM,SAAS;CACtB,SAAS,EAAE,MAAM,SAAS;CAG1B,sBAAsB;EAAE,MAAM;EAAQ,SAAS;CAAiB;CAChE,OAAO;EACL,MAAM;EACN,UAAU,CAAC,EAAE,MAAM,SAAS,GAAG;GAAE,MAAM;GAAY,WAAW,KAAA;EAAiC,CAAC;CAClG;CAGA,mBAAmB;EAAE,MAAM;EAAc,SAAS;CAAI;CACtD,qBAAqB;EAAE,MAAM;EAAc,SAAS;CAAG;CACvD,kCAAkC;EAAE,MAAM;EAAc,SAAS;CAAE;CACnE,0BAA0B;EAAE,MAAM;EAAc,SAAS;CAAE;CAG3D,oBAAoB;EAAE,MAAM;EAAW,SAAS;EAAO,QAAQ;CAAM;CACrE,0BAA0B;EAAE,MAAM;EAAW,SAAS;EAAO,QAAQ;CAAM;CAC3E,oBAAoB;EAAE,MAAM;EAAW,SAAS;EAAM,QAAQ;CAAM;CACpE,wBAAwB;EAAE,MAAM;EAAW,SAAS;EAAO,QAAQ;CAAM;CACzE,sCAAsC;EAAE,MAAM;EAAW,SAAS;EAAO,QAAQ;CAAM;CACvF,8BAA8B;EAAE,MAAM;EAAW,SAAS;EAAO,QAAQ;CAAM;CAG/E,wBAAwB;EAAE,MAAM;EAAgB,UAAU;EAAM,QAAQ;CAAM;CAG9E,iBAAiB;EAAE,MAAM;EAAQ,QAAQ;EAAiB,SAAS,gBAAgB;CAAQ;CAG3F,YAAY;EAAE,MAAM;EAAY,WAAW,KAAA;CAAmD;CAG9F,QAAQ;EAAE,MAAM;EAAQ,QAAQ;GAAC;GAAW;GAAW;EAAO;EAAY,SAAS;EAAW,QAAQ;CAAM;CAC5G,oBAAoB;EAClB,MAAM;EACN,QAAQ;GAAC;GAAU;GAAiB;EAAQ;EAC5C,UAAU;EACV,QAAQ;CACV;CACA,SAAS;EACP,MAAM;EACN,QAAQ;GACN,aAAa;IAAE,MAAM;IAAU,UAAU;GAAK;GAC9C,eAAe,EAAE,MAAM,SAAS;EAClC;CACF;CAGA,YAAY,EAAE,MAAM,SAAS;CAC7B,YAAY,EAAE,MAAM,SAAS;CAC7B,SAAS,EAAE,MAAM,SAAS;AAC5B;AAIA,SAAgB,uBAAuB,mBAAsC;CAC3E,OAAO;EACL,qBAAqB,kBAAkB;EACvC,uBAAuB,kBAAkB;EACzC,qCAAqC,kBAAkB;EACvD,6BAA6B,kBAAkB;EAC/C,iBAAiB,CAAC,CAAC,kBAAkB;EACrC,2CAA2C,kBAAkB;EAC7D,2BAA2B,kBAAkB;EAC7C,WAAW,CAAC,CAAC,kBAAkB;EAC/B,sBAAsB,kBAAkB;EACxC,iCAAiC,kBAAkB;EACnD,sBAAsB,kBAAkB;EACxC,qBAAqB,MAAM,QAAQ,kBAAkB,kBAAkB,IACnE,kBAAkB,mBAAmB,KACrC,kBAAkB;EACtB,6BAA6B,CAAC,CAAC,kBAAkB;EACjD,wBAAwB,CAAC,CAAC,kBAAkB;EAC5C,kBAAkB,kBAAkB;EACpC,8BAA8B,MAAM,QAAQ,kBAAkB,sBAAsB;EACpF,QAAQ,kBAAkB;EAC1B,aAAa,kBAAkB;EAC/B,SAAS,kBAAkB;CAC7B;AACF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { generateUUID } from "../../tools/utils/stringUtils.mjs";
|
|
2
|
+
import { fetch } from "../../browser/fetch.mjs";
|
|
3
|
+
import { display } from "../../tools/display.mjs";
|
|
4
|
+
import { INTAKE_SITE_PROD } from "@kubesense/kubesense-js-core/transport";
|
|
5
|
+
import { globalObject } from "@kubesense/kubesense-js-core/util";
|
|
6
|
+
import { monitorError } from "@kubesense/kubesense-js-core/monitor";
|
|
7
|
+
//#region src/domain/configuration/remoteSdkConfig.ts
|
|
8
|
+
/**
|
|
9
|
+
* Dashboard-managed SDK settings, served by the Kubesense collector.
|
|
10
|
+
*
|
|
11
|
+
* The document is fetched asynchronously *after* the SDK has started and cached in local
|
|
12
|
+
* storage, so it costs nothing on the initialization path. Cached values are applied on the
|
|
13
|
+
* next page load — SDK configuration is frozen at `init()` time by design.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Prefix of the local-storage key holding the cached document. The key carries the client token,
|
|
17
|
+
* which the collector issues per application, so applications sharing an origin — several apps on
|
|
18
|
+
* one domain, or `localhost` during development — never read each other's settings. RUM and Logs
|
|
19
|
+
* of one application share the token, and so still share the document.
|
|
20
|
+
*/
|
|
21
|
+
const SDK_CONFIG_CACHE_KEY = "_kubesense_sdk_config";
|
|
22
|
+
function sdkConfigCacheKey(clientToken) {
|
|
23
|
+
return `${SDK_CONFIG_CACHE_KEY}_${clientToken}`;
|
|
24
|
+
}
|
|
25
|
+
const SDK_CONFIG_PATH = "/rum/api/v1/sdk-config";
|
|
26
|
+
/** Give up rather than let a hung request keep a page-load handle alive. */
|
|
27
|
+
const SDK_CONFIG_FETCH_TIMEOUT = 1e4;
|
|
28
|
+
/**
|
|
29
|
+
* Read the cached document. Synchronous, never touches the network, and never throws: a
|
|
30
|
+
* corrupted or unavailable cache resolves to `undefined` (pure SDK defaults).
|
|
31
|
+
*/
|
|
32
|
+
function getCachedSdkConfig(clientToken) {
|
|
33
|
+
let raw;
|
|
34
|
+
try {
|
|
35
|
+
localStorage.removeItem(SDK_CONFIG_CACHE_KEY);
|
|
36
|
+
raw = localStorage.getItem(sdkConfigCacheKey(clientToken));
|
|
37
|
+
} catch {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!raw) return;
|
|
41
|
+
const config = parseSdkConfig(raw);
|
|
42
|
+
if (!config) clearCachedSdkConfig(clientToken);
|
|
43
|
+
return config;
|
|
44
|
+
}
|
|
45
|
+
function setCachedSdkConfig(clientToken, rawConfig) {
|
|
46
|
+
try {
|
|
47
|
+
localStorage.setItem(sdkConfigCacheKey(clientToken), rawConfig);
|
|
48
|
+
} catch {}
|
|
49
|
+
}
|
|
50
|
+
function clearCachedSdkConfig(clientToken) {
|
|
51
|
+
try {
|
|
52
|
+
localStorage.removeItem(sdkConfigCacheKey(clientToken));
|
|
53
|
+
} catch {}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A document is only usable if it is a JSON object. Anything else (array, primitive, invalid
|
|
57
|
+
* JSON) is rejected wholesale.
|
|
58
|
+
*/
|
|
59
|
+
function parseSdkConfig(raw) {
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(raw);
|
|
62
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return;
|
|
63
|
+
return parsed;
|
|
64
|
+
} catch {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The config endpoint deliberately carries the same query parameters as the intake, for two
|
|
70
|
+
* reasons: it authenticates without a custom header (which would force a CORS preflight), and
|
|
71
|
+
* it makes `isIntakeUrl()` return true, so the SDK never reports its own configuration request
|
|
72
|
+
* as a resource or a network error.
|
|
73
|
+
*/
|
|
74
|
+
function buildSdkConfigEndpoint(initConfiguration, applicationId) {
|
|
75
|
+
const host = initConfiguration.kubesenseRumEndpoint ?? INTAKE_SITE_PROD;
|
|
76
|
+
const parameters = [
|
|
77
|
+
"ksource=browser",
|
|
78
|
+
`kubesense-api-key=${encodeURIComponent(initConfiguration.clientToken)}`,
|
|
79
|
+
`kubesense-request-id=${generateUUID()}`
|
|
80
|
+
];
|
|
81
|
+
if (applicationId) parameters.push(`application_id=${encodeURIComponent(applicationId)}`);
|
|
82
|
+
return `https://${host}${SDK_CONFIG_PATH}?${parameters.join("&")}`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Fetch the document and refresh the cache for the *next* page load. Fire-and-forget: a 404 —
|
|
86
|
+
* the collector has no configuration for this application — clears the cache, and any other
|
|
87
|
+
* failure (offline, 401, 5xx, timeout, malformed body) leaves it untouched.
|
|
88
|
+
*
|
|
89
|
+
* The response is validated before it overwrites the cache, so a half-written document on the
|
|
90
|
+
* collector can never poison a client.
|
|
91
|
+
*/
|
|
92
|
+
function refreshSdkConfig(initConfiguration, applicationId) {
|
|
93
|
+
if (!("fetch" in globalObject)) return Promise.resolve();
|
|
94
|
+
let endpoint;
|
|
95
|
+
try {
|
|
96
|
+
endpoint = buildSdkConfigEndpoint(initConfiguration, applicationId);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
monitorError(error);
|
|
99
|
+
return Promise.resolve();
|
|
100
|
+
}
|
|
101
|
+
return fetch(endpoint, {
|
|
102
|
+
method: "GET",
|
|
103
|
+
credentials: "omit",
|
|
104
|
+
mode: "cors",
|
|
105
|
+
cache: "no-store",
|
|
106
|
+
signal: createTimeoutSignal(SDK_CONFIG_FETCH_TIMEOUT)
|
|
107
|
+
}).then((response) => {
|
|
108
|
+
if (response.status === 404) {
|
|
109
|
+
clearCachedSdkConfig(initConfiguration.clientToken);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (!response.ok) return;
|
|
113
|
+
return response.text();
|
|
114
|
+
}).then((rawConfig) => {
|
|
115
|
+
if (rawConfig === void 0) return;
|
|
116
|
+
if (!parseSdkConfig(rawConfig)) {
|
|
117
|
+
display.warn("Remote SDK configuration is not a valid JSON object, ignoring it.");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
setCachedSdkConfig(initConfiguration.clientToken, rawConfig);
|
|
121
|
+
}).catch(() => {});
|
|
122
|
+
}
|
|
123
|
+
function createTimeoutSignal(timeout) {
|
|
124
|
+
if (typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function") return AbortSignal.timeout(timeout);
|
|
125
|
+
}
|
|
126
|
+
function readBoolean(source, key) {
|
|
127
|
+
const value = source?.[key];
|
|
128
|
+
return typeof value === "boolean" ? value : void 0;
|
|
129
|
+
}
|
|
130
|
+
function readSampleRate(source, key) {
|
|
131
|
+
const value = source?.[key];
|
|
132
|
+
return typeof value === "number" && isFinite(value) && value >= 0 && value <= 100 ? value : void 0;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Reads a number the SDK only accepts within a fixed range. Out-of-range values are rejected rather
|
|
136
|
+
* than clamped: a dashboard that asks for something the SDK cannot honour should fall back to the
|
|
137
|
+
* local value, not to a silently different one.
|
|
138
|
+
*/
|
|
139
|
+
function readNumberInRange(source, key, min, max) {
|
|
140
|
+
const value = source?.[key];
|
|
141
|
+
return typeof value === "number" && isFinite(value) && value >= min && value <= max ? value : void 0;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Reads a list of non-empty strings, dropping unusable entries. Returns `undefined` for anything
|
|
145
|
+
* that is not an array, or when no entry survives, so the local value keeps applying.
|
|
146
|
+
*/
|
|
147
|
+
function readStringList(value) {
|
|
148
|
+
if (!Array.isArray(value)) return;
|
|
149
|
+
const strings = value.filter((item) => typeof item === "string" && item.length > 0);
|
|
150
|
+
return strings.length > 0 ? strings : void 0;
|
|
151
|
+
}
|
|
152
|
+
function readString(source, key) {
|
|
153
|
+
const value = source?.[key];
|
|
154
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
155
|
+
}
|
|
156
|
+
function readEnum(source, key, allowedValues) {
|
|
157
|
+
const value = source?.[key];
|
|
158
|
+
return typeof value === "string" && allowedValues.includes(value) ? value : void 0;
|
|
159
|
+
}
|
|
160
|
+
//#endregion
|
|
161
|
+
export { SDK_CONFIG_CACHE_KEY, SDK_CONFIG_FETCH_TIMEOUT, SDK_CONFIG_PATH, buildSdkConfigEndpoint, clearCachedSdkConfig, getCachedSdkConfig, parseSdkConfig, readBoolean, readEnum, readNumberInRange, readSampleRate, readString, readStringList, refreshSdkConfig, sdkConfigCacheKey, setCachedSdkConfig };
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=remoteSdkConfig.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteSdkConfig.mjs","names":[],"sources":["../../../src/domain/configuration/remoteSdkConfig.ts"],"sourcesContent":["import { monitorError } from '@kubesense/kubesense-js-core/monitor'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { INTAKE_SITE_PROD } from '@kubesense/kubesense-js-core/transport'\nimport { generateUUID } from '../../tools/utils/stringUtils'\nimport { fetch } from '../../browser/fetch'\nimport { display } from '../../tools/display'\nimport type { InitConfiguration } from './configuration'\n\n/**\n * Dashboard-managed SDK settings, served by the Kubesense collector.\n *\n * The document is fetched asynchronously *after* the SDK has started and cached in local\n * storage, so it costs nothing on the initialization path. Cached values are applied on the\n * next page load — SDK configuration is frozen at `init()` time by design.\n */\n\n/**\n * Prefix of the local-storage key holding the cached document. The key carries the client token,\n * which the collector issues per application, so applications sharing an origin — several apps on\n * one domain, or `localhost` during development — never read each other's settings. RUM and Logs\n * of one application share the token, and so still share the document.\n */\nexport const SDK_CONFIG_CACHE_KEY = '_kubesense_sdk_config'\n\nexport function sdkConfigCacheKey(clientToken: string) {\n return `${SDK_CONFIG_CACHE_KEY}_${clientToken}`\n}\nexport const SDK_CONFIG_PATH = '/rum/api/v1/sdk-config'\n\n/** Give up rather than let a hung request keep a page-load handle alive. */\nexport const SDK_CONFIG_FETCH_TIMEOUT = 10_000\n\n/**\n * A remote configuration document. Every field is optional: a missing (or invalid) field means\n * \"leave the SDK default alone\", so a malformed document can never take an application away\n * from its defaults.\n */\nexport interface RemoteSdkConfig {\n /** Free-form number for dashboard bookkeeping. Not interpreted by the SDK. */\n version?: number\n features?: RemoteSdkConfigFeatures\n rum?: { [key: string]: unknown }\n sessionReplay?: { [key: string]: unknown }\n profiling?: { [key: string]: unknown }\n logs?: { [key: string]: unknown }\n [key: string]: unknown\n}\n\nexport interface RemoteSdkConfigFeatures {\n rum?: boolean\n sessionReplay?: boolean\n profiling?: boolean\n logs?: boolean\n}\n\n/**\n * Read the cached document. Synchronous, never touches the network, and never throws: a\n * corrupted or unavailable cache resolves to `undefined` (pure SDK defaults).\n */\nexport function getCachedSdkConfig(clientToken: string): RemoteSdkConfig | undefined {\n let raw: string | null\n try {\n // The unscoped key predates per-application caching and may hold another application's\n // document; it is dropped rather than migrated.\n localStorage.removeItem(SDK_CONFIG_CACHE_KEY)\n raw = localStorage.getItem(sdkConfigCacheKey(clientToken))\n } catch {\n // Local storage can be unavailable (disabled, quota, sandboxed iframe).\n return undefined\n }\n\n if (!raw) {\n return undefined\n }\n\n const config = parseSdkConfig(raw)\n if (!config) {\n // Drop a document we can no longer read so we stop paying for it on every page load.\n clearCachedSdkConfig(clientToken)\n }\n return config\n}\n\nexport function setCachedSdkConfig(clientToken: string, rawConfig: string) {\n try {\n localStorage.setItem(sdkConfigCacheKey(clientToken), rawConfig)\n } catch {\n // Ignore: caching is an optimization, not a requirement.\n }\n}\n\nexport function clearCachedSdkConfig(clientToken: string) {\n try {\n localStorage.removeItem(sdkConfigCacheKey(clientToken))\n } catch {\n // Ignore.\n }\n}\n\n/**\n * A document is only usable if it is a JSON object. Anything else (array, primitive, invalid\n * JSON) is rejected wholesale.\n */\nexport function parseSdkConfig(raw: string): RemoteSdkConfig | undefined {\n try {\n const parsed: unknown = JSON.parse(raw)\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return undefined\n }\n return parsed as RemoteSdkConfig\n } catch {\n return undefined\n }\n}\n\n/**\n * The config endpoint deliberately carries the same query parameters as the intake, for two\n * reasons: it authenticates without a custom header (which would force a CORS preflight), and\n * it makes `isIntakeUrl()` return true, so the SDK never reports its own configuration request\n * as a resource or a network error.\n */\nexport function buildSdkConfigEndpoint(initConfiguration: InitConfiguration, applicationId?: string): string {\n const host = initConfiguration.kubesenseRumEndpoint ?? INTAKE_SITE_PROD\n const parameters = [\n 'ksource=browser',\n `kubesense-api-key=${encodeURIComponent(initConfiguration.clientToken)}`,\n `kubesense-request-id=${generateUUID()}`,\n ]\n if (applicationId) {\n // The collector resolves the application from this parameter first, falling back to the\n // token -> application mapping. Sending it makes per-application configuration explicit.\n parameters.push(`application_id=${encodeURIComponent(applicationId)}`)\n }\n return `https://${host}${SDK_CONFIG_PATH}?${parameters.join('&')}`\n}\n\n/**\n * Fetch the document and refresh the cache for the *next* page load. Fire-and-forget: a 404 —\n * the collector has no configuration for this application — clears the cache, and any other\n * failure (offline, 401, 5xx, timeout, malformed body) leaves it untouched.\n *\n * The response is validated before it overwrites the cache, so a half-written document on the\n * collector can never poison a client.\n */\nexport function refreshSdkConfig(initConfiguration: InitConfiguration, applicationId?: string): Promise<void> {\n if (!('fetch' in globalObject)) {\n return Promise.resolve()\n }\n\n let endpoint: string\n try {\n endpoint = buildSdkConfigEndpoint(initConfiguration, applicationId)\n } catch (error) {\n monitorError(error)\n return Promise.resolve()\n }\n\n return fetch(endpoint, {\n method: 'GET',\n // Configuration is not user data: never attach cookies to it.\n credentials: 'omit',\n mode: 'cors',\n // Always ask the collector, never a proxy cache — dashboard edits must propagate.\n cache: 'no-store',\n signal: createTimeoutSignal(SDK_CONFIG_FETCH_TIMEOUT),\n })\n .then((response) => {\n if (response.status === 404) {\n // The collector has no configuration for this application — it was removed, or never\n // published. Forget the cached one, or the application would keep running on a document\n // nobody can see or change any more.\n clearCachedSdkConfig(initConfiguration.clientToken)\n return undefined\n }\n if (!response.ok) {\n // An auth or server problem says nothing about the configuration: keep the cached one.\n return undefined\n }\n return response.text()\n })\n .then((rawConfig) => {\n if (rawConfig === undefined) {\n return\n }\n if (!parseSdkConfig(rawConfig)) {\n display.warn('Remote SDK configuration is not a valid JSON object, ignoring it.')\n return\n }\n setCachedSdkConfig(initConfiguration.clientToken, rawConfig)\n })\n .catch(() => {\n // Network failures are expected and must stay silent: the SDK keeps running on the\n // cached configuration, or on its defaults.\n })\n}\n\nfunction createTimeoutSignal(timeout: number): AbortSignal | undefined {\n // AbortSignal.timeout is not available on all supported browsers; without it the fetch\n // simply runs to completion, which is acceptable for a fire-and-forget request.\n if (typeof AbortSignal !== 'undefined' && typeof AbortSignal.timeout === 'function') {\n return AbortSignal.timeout(timeout)\n }\n return undefined\n}\n\n/* ------------------------------------------------------------------------------------------\n * Defensive readers\n *\n * Each returns `undefined` when the value is missing or unusable, which callers translate into\n * \"do not override the SDK default\".\n * ---------------------------------------------------------------------------------------- */\n\nexport function readBoolean(source: { [key: string]: unknown } | undefined, key: string): boolean | undefined {\n const value = source?.[key]\n return typeof value === 'boolean' ? value : undefined\n}\n\nexport function readSampleRate(source: { [key: string]: unknown } | undefined, key: string): number | undefined {\n const value = source?.[key]\n return typeof value === 'number' && isFinite(value) && value >= 0 && value <= 100 ? value : undefined\n}\n\n/**\n * Reads a number the SDK only accepts within a fixed range. Out-of-range values are rejected rather\n * than clamped: a dashboard that asks for something the SDK cannot honour should fall back to the\n * local value, not to a silently different one.\n */\nexport function readNumberInRange(\n source: { [key: string]: unknown } | undefined,\n key: string,\n min: number,\n max: number\n): number | undefined {\n const value = source?.[key]\n return typeof value === 'number' && isFinite(value) && value >= min && value <= max ? value : undefined\n}\n\n/**\n * Reads a list of non-empty strings, dropping unusable entries. Returns `undefined` for anything\n * that is not an array, or when no entry survives, so the local value keeps applying.\n */\nexport function readStringList(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return undefined\n }\n const strings = value.filter((item): item is string => typeof item === 'string' && item.length > 0)\n return strings.length > 0 ? strings : undefined\n}\n\nexport function readString(source: { [key: string]: unknown } | undefined, key: string): string | undefined {\n const value = source?.[key]\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nexport function readEnum<T extends string>(\n source: { [key: string]: unknown } | undefined,\n key: string,\n allowedValues: readonly T[]\n): T | undefined {\n const value = source?.[key]\n return typeof value === 'string' && (allowedValues as readonly string[]).includes(value) ? (value as T) : undefined\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsBA,MAAa,uBAAuB;AAEpC,SAAgB,kBAAkB,aAAqB;CACrD,OAAO,GAAG,qBAAqB,GAAG;AACpC;AACA,MAAa,kBAAkB;;AAG/B,MAAa,2BAA2B;;;;;AA6BxC,SAAgB,mBAAmB,aAAkD;CACnF,IAAI;CACJ,IAAI;EAGF,aAAa,WAAW,oBAAoB;EAC5C,MAAM,aAAa,QAAQ,kBAAkB,WAAW,CAAC;CAC3D,QAAQ;EAEN;CACF;CAEA,IAAI,CAAC,KACH;CAGF,MAAM,SAAS,eAAe,GAAG;CACjC,IAAI,CAAC,QAEH,qBAAqB,WAAW;CAElC,OAAO;AACT;AAEA,SAAgB,mBAAmB,aAAqB,WAAmB;CACzE,IAAI;EACF,aAAa,QAAQ,kBAAkB,WAAW,GAAG,SAAS;CAChE,QAAQ,CAER;AACF;AAEA,SAAgB,qBAAqB,aAAqB;CACxD,IAAI;EACF,aAAa,WAAW,kBAAkB,WAAW,CAAC;CACxD,QAAQ,CAER;AACF;;;;;AAMA,SAAgB,eAAe,KAA0C;CACvE,IAAI;EACF,MAAM,SAAkB,KAAK,MAAM,GAAG;EACtC,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAC/D;EAEF,OAAO;CACT,QAAQ;EACN;CACF;AACF;;;;;;;AAQA,SAAgB,uBAAuB,mBAAsC,eAAgC;CAC3G,MAAM,OAAO,kBAAkB,wBAAwB;CACvD,MAAM,aAAa;EACjB;EACA,qBAAqB,mBAAmB,kBAAkB,WAAW;EACrE,wBAAwB,aAAa;CACvC;CACA,IAAI,eAGF,WAAW,KAAK,kBAAkB,mBAAmB,aAAa,GAAG;CAEvE,OAAO,WAAW,OAAO,gBAAgB,GAAG,WAAW,KAAK,GAAG;AACjE;;;;;;;;;AAUA,SAAgB,iBAAiB,mBAAsC,eAAuC;CAC5G,IAAI,EAAE,WAAW,eACf,OAAO,QAAQ,QAAQ;CAGzB,IAAI;CACJ,IAAI;EACF,WAAW,uBAAuB,mBAAmB,aAAa;CACpE,SAAS,OAAO;EACd,aAAa,KAAK;EAClB,OAAO,QAAQ,QAAQ;CACzB;CAEA,OAAO,MAAM,UAAU;EACrB,QAAQ;EAER,aAAa;EACb,MAAM;EAEN,OAAO;EACP,QAAQ,oBAAoB,wBAAwB;CACtD,CAAC,CAAC,CACC,MAAM,aAAa;EAClB,IAAI,SAAS,WAAW,KAAK;GAI3B,qBAAqB,kBAAkB,WAAW;GAClD;EACF;EACA,IAAI,CAAC,SAAS,IAEZ;EAEF,OAAO,SAAS,KAAK;CACvB,CAAC,CAAC,CACD,MAAM,cAAc;EACnB,IAAI,cAAc,KAAA,GAChB;EAEF,IAAI,CAAC,eAAe,SAAS,GAAG;GAC9B,QAAQ,KAAK,mEAAmE;GAChF;EACF;EACA,mBAAmB,kBAAkB,aAAa,SAAS;CAC7D,CAAC,CAAC,CACD,YAAY,CAGb,CAAC;AACL;AAEA,SAAS,oBAAoB,SAA0C;CAGrE,IAAI,OAAO,gBAAgB,eAAe,OAAO,YAAY,YAAY,YACvE,OAAO,YAAY,QAAQ,OAAO;AAGtC;AASA,SAAgB,YAAY,QAAgD,KAAkC;CAC5G,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,UAAU,YAAY,QAAQ,KAAA;AAC9C;AAEA,SAAgB,eAAe,QAAgD,KAAiC;CAC9G,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,UAAU,YAAY,SAAS,KAAK,KAAK,SAAS,KAAK,SAAS,MAAM,QAAQ,KAAA;AAC9F;;;;;;AAOA,SAAgB,kBACd,QACA,KACA,KACA,KACoB;CACpB,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,UAAU,YAAY,SAAS,KAAK,KAAK,SAAS,OAAO,SAAS,MAAM,QAAQ,KAAA;AAChG;;;;;AAMA,SAAgB,eAAe,OAAsC;CACnE,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB;CAEF,MAAM,UAAU,MAAM,QAAQ,SAAyB,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC;CAClG,OAAO,QAAQ,SAAS,IAAI,UAAU,KAAA;AACxC;AAEA,SAAgB,WAAW,QAAgD,KAAiC;CAC1G,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ,KAAA;AACjE;AAEA,SAAgB,SACd,QACA,KACA,eACe;CACf,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,UAAU,YAAa,cAAoC,SAAS,KAAK,IAAK,QAAc,KAAA;AAC5G"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { globalObject } from "@kubesense/kubesense-js-core/util";
|
|
2
|
+
//#region src/domain/connectivity/connectivity.ts
|
|
3
|
+
function getConnectivity() {
|
|
4
|
+
const { navigator } = globalObject;
|
|
5
|
+
return {
|
|
6
|
+
status: navigator?.onLine ? "connected" : "not_connected",
|
|
7
|
+
interfaces: navigator?.connection?.type ? [navigator.connection.type] : ["unknown"],
|
|
8
|
+
effective_type: navigator?.connection?.effectiveType,
|
|
9
|
+
rtt: navigator?.connection?.rtt,
|
|
10
|
+
downlink: navigator?.connection?.downlink
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { getConnectivity };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=connectivity.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectivity.mjs","names":[],"sources":["../../../src/domain/connectivity/connectivity.ts"],"sourcesContent":["import type { NetworkEffectiveType, NetworkInterface } from '@kubesense/kubesense-js-core/util'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\n\nexport interface Connectivity {\n status: 'connected' | 'not_connected'\n interfaces?: NetworkInterface[]\n effective_type?: NetworkEffectiveType\n rtt?: number\n downlink?: number\n [key: string]: unknown\n}\n\nexport function getConnectivity(): Connectivity {\n const { navigator } = globalObject\n\n return {\n status: navigator?.onLine ? 'connected' : 'not_connected',\n // Report 'unknown' rather than nothing when the browser does not expose a connection type, so\n // the field is always present and dashboards do not have to special-case its absence.\n interfaces: navigator?.connection?.type ? [navigator.connection.type] : ['unknown'],\n effective_type: navigator?.connection?.effectiveType,\n rtt: navigator?.connection?.rtt,\n downlink: navigator?.connection?.downlink,\n }\n}\n"],"mappings":";;AAYA,SAAgB,kBAAgC;CAC9C,MAAM,EAAE,cAAc;CAEtB,OAAO;EACL,QAAQ,WAAW,SAAS,cAAc;EAG1C,YAAY,WAAW,YAAY,OAAO,CAAC,UAAU,WAAW,IAAI,IAAI,CAAC,SAAS;EAClF,gBAAgB,WAAW,YAAY;EACvC,KAAK,WAAW,YAAY;EAC5B,UAAU,WAAW,YAAY;CACnC;AACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Observable, mergeObservables } from "../../tools/observable.mjs";
|
|
2
|
+
import { computeStackTrace } from "../../tools/stackTrace/computeStackTrace.mjs";
|
|
3
|
+
import { createHandlingStack, formatErrorMessage } from "../../tools/stackTrace/handlingStack.mjs";
|
|
4
|
+
import { jsonStringify } from "../../tools/serialisation/jsonStringify.mjs";
|
|
5
|
+
import { sanitize } from "../../tools/serialisation/sanitize.mjs";
|
|
6
|
+
import { isError } from "../error/isError.mjs";
|
|
7
|
+
import { ErrorSource } from "../error/error.types.mjs";
|
|
8
|
+
import { computeRawError } from "../error/error.mjs";
|
|
9
|
+
import { ConsoleApiName, globalConsole } from "@kubesense/kubesense-js-core/util";
|
|
10
|
+
import { callMonitored } from "@kubesense/kubesense-js-core/monitor";
|
|
11
|
+
import { clocksNow } from "@kubesense/kubesense-js-core/time";
|
|
12
|
+
//#region src/domain/console/consoleObservable.ts
|
|
13
|
+
let consoleObservablesByApi = {};
|
|
14
|
+
function initConsoleObservable(apis) {
|
|
15
|
+
const consoleObservables = apis.map((api) => {
|
|
16
|
+
if (!consoleObservablesByApi[api]) consoleObservablesByApi[api] = createConsoleObservable(api);
|
|
17
|
+
return consoleObservablesByApi[api];
|
|
18
|
+
});
|
|
19
|
+
return mergeObservables(...consoleObservables);
|
|
20
|
+
}
|
|
21
|
+
function createConsoleObservable(api) {
|
|
22
|
+
return new Observable((observable) => {
|
|
23
|
+
const originalConsoleApi = globalConsole[api];
|
|
24
|
+
globalConsole[api] = (...params) => {
|
|
25
|
+
originalConsoleApi.apply(console, params);
|
|
26
|
+
const handlingStack = createHandlingStack("console error");
|
|
27
|
+
callMonitored(() => {
|
|
28
|
+
observable.notify(buildConsoleLog(params, api, handlingStack));
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
return () => {
|
|
32
|
+
globalConsole[api] = originalConsoleApi;
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
function buildConsoleLog(params, api, handlingStack) {
|
|
37
|
+
const message = params.map((param) => formatConsoleParameters(param)).join(" ");
|
|
38
|
+
if (api === ConsoleApiName.error) {
|
|
39
|
+
const firstErrorParam = params.find(isError);
|
|
40
|
+
const rawError = computeRawError({
|
|
41
|
+
originalError: firstErrorParam ?? params[0],
|
|
42
|
+
handlingStack,
|
|
43
|
+
startClocks: clocksNow(),
|
|
44
|
+
source: ErrorSource.CONSOLE,
|
|
45
|
+
handling: "handled",
|
|
46
|
+
nonErrorPrefix: "Provided",
|
|
47
|
+
useFallbackStack: false
|
|
48
|
+
});
|
|
49
|
+
rawError.message = message;
|
|
50
|
+
return {
|
|
51
|
+
api,
|
|
52
|
+
message,
|
|
53
|
+
handlingStack,
|
|
54
|
+
error: rawError
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
api,
|
|
59
|
+
message,
|
|
60
|
+
error: void 0,
|
|
61
|
+
handlingStack
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function formatConsoleParameters(param) {
|
|
65
|
+
if (typeof param === "string") return sanitize(param);
|
|
66
|
+
if (isError(param)) return formatErrorMessage(computeStackTrace(param));
|
|
67
|
+
return jsonStringify(sanitize(param), void 0, 2);
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { initConsoleObservable };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=consoleObservable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consoleObservable.mjs","names":[],"sources":["../../../src/domain/console/consoleObservable.ts"],"sourcesContent":["import { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { ConsoleApiName, globalConsole } from '@kubesense/kubesense-js-core/util'\nimport { callMonitored } from '@kubesense/kubesense-js-core/monitor'\nimport { isError, computeRawError } from '../error/error'\nimport { Observable, mergeObservables } from '../../tools/observable'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { RawError } from '../error/error.types'\nimport { ErrorHandling, ErrorSource, NonErrorPrefix } from '../error/error.types'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { createHandlingStack, formatErrorMessage } from '../../tools/stackTrace/handlingStack'\n\nexport type ConsoleLog = NonErrorConsoleLog | ErrorConsoleLog\n\ninterface NonErrorConsoleLog extends ConsoleLogBase {\n api: Exclude<ConsoleApiName, typeof ConsoleApiName.error>\n error: undefined\n}\n\nexport interface ErrorConsoleLog extends ConsoleLogBase {\n api: typeof ConsoleApiName.error\n error: RawError\n}\n\ninterface ConsoleLogBase {\n message: string\n api: ConsoleApiName\n handlingStack: string\n}\n\ntype ConsoleLogForApi<T extends ConsoleApiName> = T extends typeof ConsoleApiName.error\n ? ErrorConsoleLog\n : NonErrorConsoleLog\n\nlet consoleObservablesByApi: { [K in ConsoleApiName]?: Observable<ConsoleLogForApi<K>> } = {}\n\nexport function initConsoleObservable<T extends ConsoleApiName[]>(apis: T): Observable<ConsoleLogForApi<T[number]>> {\n const consoleObservables = apis.map((api) => {\n if (!consoleObservablesByApi[api]) {\n consoleObservablesByApi[api] = createConsoleObservable(api) as any // we are sure that the observable created for this api will yield the expected ConsoleLog type\n }\n return consoleObservablesByApi[api] as unknown as Observable<ConsoleLogForApi<T[number]>>\n })\n\n return mergeObservables(...consoleObservables)\n}\n\nexport function resetConsoleObservable() {\n consoleObservablesByApi = {}\n}\n\nfunction createConsoleObservable(api: ConsoleApiName) {\n return new Observable<ConsoleLog>((observable) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalConsoleApi = globalConsole[api]\n\n globalConsole[api] = (...params: unknown[]) => {\n originalConsoleApi.apply(console, params)\n const handlingStack = createHandlingStack('console error')\n\n callMonitored(() => {\n observable.notify(buildConsoleLog(params, api, handlingStack))\n })\n }\n\n return () => {\n globalConsole[api] = originalConsoleApi\n }\n })\n}\n\nfunction buildConsoleLog(params: unknown[], api: ConsoleApiName, handlingStack: string): ConsoleLog {\n const message = params.map((param) => formatConsoleParameters(param)).join(' ')\n\n if (api === ConsoleApiName.error) {\n const firstErrorParam = params.find(isError)\n\n const rawError = computeRawError({\n // `console.error` is commonly called without any Error instance. Falling back to the first\n // parameter lets the error type be derived from what was actually logged (`String`,\n // `Object`...) instead of nothing, and exposes it to `beforeSend` like the other sources do.\n originalError: firstErrorParam ?? params[0],\n handlingStack,\n startClocks: clocksNow(),\n source: ErrorSource.CONSOLE,\n handling: ErrorHandling.HANDLED,\n nonErrorPrefix: NonErrorPrefix.PROVIDED,\n\n // if no good stack is computed from the error, let's not use the fallback stack message\n // advising the user to use an instance of Error, as console.error is commonly used without an\n // Error instance.\n useFallbackStack: false,\n })\n\n // Use the full log message as the error message instead of just the error instance message.\n rawError.message = message\n\n return {\n api,\n message,\n handlingStack,\n error: rawError,\n }\n }\n\n return {\n api,\n message,\n error: undefined,\n handlingStack,\n }\n}\n\nfunction formatConsoleParameters(param: unknown) {\n if (typeof param === 'string') {\n return sanitize(param)\n }\n if (isError(param)) {\n return formatErrorMessage(computeStackTrace(param))\n }\n return jsonStringify(sanitize(param), undefined, 2)\n}\n"],"mappings":";;;;;;;;;;;;AAkCA,IAAI,0BAAuF,CAAC;AAE5F,SAAgB,sBAAkD,MAAkD;CAClH,MAAM,qBAAqB,KAAK,KAAK,QAAQ;EAC3C,IAAI,CAAC,wBAAwB,MAC3B,wBAAwB,OAAO,wBAAwB,GAAG;EAE5D,OAAO,wBAAwB;CACjC,CAAC;CAED,OAAO,iBAAiB,GAAG,kBAAkB;AAC/C;AAMA,SAAS,wBAAwB,KAAqB;CACpD,OAAO,IAAI,YAAwB,eAAe;EAEhD,MAAM,qBAAqB,cAAc;EAEzC,cAAc,QAAQ,GAAG,WAAsB;GAC7C,mBAAmB,MAAM,SAAS,MAAM;GACxC,MAAM,gBAAgB,oBAAoB,eAAe;GAEzD,oBAAoB;IAClB,WAAW,OAAO,gBAAgB,QAAQ,KAAK,aAAa,CAAC;GAC/D,CAAC;EACH;EAEA,aAAa;GACX,cAAc,OAAO;EACvB;CACF,CAAC;AACH;AAEA,SAAS,gBAAgB,QAAmB,KAAqB,eAAmC;CAClG,MAAM,UAAU,OAAO,KAAK,UAAU,wBAAwB,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;CAE9E,IAAI,QAAQ,eAAe,OAAO;EAChC,MAAM,kBAAkB,OAAO,KAAK,OAAO;EAE3C,MAAM,WAAW,gBAAgB;GAI/B,eAAe,mBAAmB,OAAO;GACzC;GACA,aAAa,UAAU;GACvB,QAAQ,YAAY;GACpB,UAAA;GACA,gBAAA;GAKA,kBAAkB;EACpB,CAAC;EAGD,SAAS,UAAU;EAEnB,OAAO;GACL;GACA;GACA;GACA,OAAO;EACT;CACF;CAEA,OAAO;EACL;EACA;EACA,OAAO,KAAA;EACP;CACF;AACF;AAEA,SAAS,wBAAwB,OAAgB;CAC/C,IAAI,OAAO,UAAU,UACnB,OAAO,SAAS,KAAK;CAEvB,IAAI,QAAQ,KAAK,GACf,OAAO,mBAAmB,kBAAkB,KAAK,CAAC;CAEpD,OAAO,cAAc,SAAS,KAAK,GAAG,KAAA,GAAW,CAAC;AACpD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/domain/context/contextConstants.ts
|
|
2
|
+
let CustomerDataType = /* @__PURE__ */ function(CustomerDataType) {
|
|
3
|
+
CustomerDataType[CustomerDataType["FeatureFlag"] = 0] = "FeatureFlag";
|
|
4
|
+
CustomerDataType[CustomerDataType["User"] = 1] = "User";
|
|
5
|
+
CustomerDataType[CustomerDataType["GlobalContext"] = 2] = "GlobalContext";
|
|
6
|
+
CustomerDataType[CustomerDataType["View"] = 3] = "View";
|
|
7
|
+
CustomerDataType[CustomerDataType["Account"] = 4] = "Account";
|
|
8
|
+
return CustomerDataType;
|
|
9
|
+
}({});
|
|
10
|
+
const CustomerContextKey = {
|
|
11
|
+
userContext: "userContext",
|
|
12
|
+
globalContext: "globalContext",
|
|
13
|
+
accountContext: "accountContext"
|
|
14
|
+
};
|
|
15
|
+
const ContextManagerMethod = {
|
|
16
|
+
getContext: "getContext",
|
|
17
|
+
setContext: "setContext",
|
|
18
|
+
setContextProperty: "setContextProperty",
|
|
19
|
+
removeContextProperty: "removeContextProperty",
|
|
20
|
+
clearContext: "clearContext"
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { ContextManagerMethod, CustomerContextKey, CustomerDataType };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=contextConstants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextConstants.mjs","names":[],"sources":["../../../src/domain/context/contextConstants.ts"],"sourcesContent":["export const enum CustomerDataType {\n FeatureFlag,\n User,\n GlobalContext,\n View,\n Account,\n}\n\n// Use a const instead of const enum to avoid inlining the enum values in the bundle and save bytes\nexport const CustomerContextKey = {\n userContext: 'userContext',\n globalContext: 'globalContext',\n accountContext: 'accountContext',\n} as const\n\nexport type CustomerContextKey = (typeof CustomerContextKey)[keyof typeof CustomerContextKey]\n\n// Use a const instead of const enum to avoid inlining the enum values in the bundle and save bytes\nexport const ContextManagerMethod = {\n getContext: 'getContext',\n setContext: 'setContext',\n setContextProperty: 'setContextProperty',\n removeContextProperty: 'removeContextProperty',\n clearContext: 'clearContext',\n} as const\n\nexport type ContextManagerMethod = (typeof ContextManagerMethod)[keyof typeof ContextManagerMethod]\n"],"mappings":";AAAA,IAAkB,mBAAX,yBAAA,kBAAA;CACL,iBAAA,iBAAA,iBAAA,KAAA;CACA,iBAAA,iBAAA,UAAA,KAAA;CACA,iBAAA,iBAAA,mBAAA,KAAA;CACA,iBAAA,iBAAA,UAAA,KAAA;CACA,iBAAA,iBAAA,aAAA,KAAA;;AACF,EAAA,CAAA,CAAA;AAGA,MAAa,qBAAqB;CAChC,aAAa;CACb,eAAe;CACf,gBAAgB;AAClB;AAKA,MAAa,uBAAuB;CAClC,YAAY;CACZ,YAAY;CACZ,oBAAoB;CACpB,uBAAuB;CACvB,cAAc;AAChB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Observable } from "../../tools/observable.mjs";
|
|
2
|
+
import { display } from "../../tools/display.mjs";
|
|
3
|
+
import { sanitize } from "../../tools/serialisation/sanitize.mjs";
|
|
4
|
+
import { checkContext } from "./contextUtils.mjs";
|
|
5
|
+
import { deepClone } from "@kubesense/kubesense-js-core/util";
|
|
6
|
+
//#region src/domain/context/contextManager.ts
|
|
7
|
+
function ensureProperties(context, propertiesConfig, name) {
|
|
8
|
+
const newContext = { ...context };
|
|
9
|
+
for (const [key, { required, type }] of Object.entries(propertiesConfig)) {
|
|
10
|
+
/**
|
|
11
|
+
* Ensure specified properties are strings as defined here:
|
|
12
|
+
* https://docs.kubesense.ai/logs/log_configuration/attributes_naming_convention/#user-related-attributes
|
|
13
|
+
*/
|
|
14
|
+
if (type === "string" && !isDefined(newContext[key])) newContext[key] = String(newContext[key]);
|
|
15
|
+
if (required && isDefined(newContext[key])) display.warn(`The property ${key} of ${name} is required; context will not be sent to the intake.`);
|
|
16
|
+
}
|
|
17
|
+
return newContext;
|
|
18
|
+
}
|
|
19
|
+
function isDefined(value) {
|
|
20
|
+
return value === void 0 || value === null || value === "";
|
|
21
|
+
}
|
|
22
|
+
function createContextManager(name = "", { propertiesConfig = {} } = {}) {
|
|
23
|
+
let context = {};
|
|
24
|
+
const changeObservable = new Observable();
|
|
25
|
+
const contextManager = {
|
|
26
|
+
getContext: () => deepClone(context),
|
|
27
|
+
setContext: (newContext) => {
|
|
28
|
+
if (checkContext(newContext)) context = sanitize(ensureProperties(newContext, propertiesConfig, name));
|
|
29
|
+
else contextManager.clearContext();
|
|
30
|
+
changeObservable.notify();
|
|
31
|
+
},
|
|
32
|
+
setContextProperty: (key, property) => {
|
|
33
|
+
context = sanitize(ensureProperties({
|
|
34
|
+
...context,
|
|
35
|
+
[key]: property
|
|
36
|
+
}, propertiesConfig, name));
|
|
37
|
+
changeObservable.notify();
|
|
38
|
+
},
|
|
39
|
+
removeContextProperty: (key) => {
|
|
40
|
+
delete context[key];
|
|
41
|
+
ensureProperties(context, propertiesConfig, name);
|
|
42
|
+
changeObservable.notify();
|
|
43
|
+
},
|
|
44
|
+
clearContext: () => {
|
|
45
|
+
context = {};
|
|
46
|
+
changeObservable.notify();
|
|
47
|
+
},
|
|
48
|
+
changeObservable
|
|
49
|
+
};
|
|
50
|
+
return contextManager;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { createContextManager };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=contextManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextManager.mjs","names":[],"sources":["../../../src/domain/context/contextManager.ts"],"sourcesContent":["import { deepClone } from '@kubesense/kubesense-js-core/util'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport type { Context } from '../../tools/serialisation/context'\nimport { Observable } from '../../tools/observable'\nimport { display } from '../../tools/display'\nimport { checkContext } from './contextUtils'\n\nexport type ContextManager = ReturnType<typeof createContextManager>\n\nexport interface PropertiesConfig {\n [key: string]: {\n required?: boolean\n type?: 'string'\n }\n}\n\nfunction ensureProperties(context: Context, propertiesConfig: PropertiesConfig, name: string) {\n const newContext = { ...context }\n\n for (const [key, { required, type }] of Object.entries(propertiesConfig)) {\n /**\n * Ensure specified properties are strings as defined here:\n * https://docs.kubesense.ai/logs/log_configuration/attributes_naming_convention/#user-related-attributes\n */\n\n if (type === 'string' && !isDefined(newContext[key])) {\n /* eslint-disable @typescript-eslint/no-base-to-string */\n newContext[key] = String(newContext[key])\n }\n\n if (required && isDefined(newContext[key])) {\n display.warn(`The property ${key} of ${name} is required; context will not be sent to the intake.`)\n }\n }\n\n return newContext\n}\n\nfunction isDefined(value: unknown) {\n return value === undefined || value === null || value === ''\n}\n\nexport function createContextManager(\n name: string = '',\n {\n propertiesConfig = {},\n }: {\n propertiesConfig?: PropertiesConfig\n } = {}\n) {\n let context: Context = {}\n const changeObservable = new Observable<void>()\n\n const contextManager = {\n getContext: () => deepClone(context),\n\n setContext: (newContext: unknown) => {\n if (checkContext(newContext)) {\n context = sanitize(ensureProperties(newContext, propertiesConfig, name))\n } else {\n contextManager.clearContext()\n }\n changeObservable.notify()\n },\n\n setContextProperty: (key: string, property: any) => {\n context = sanitize(ensureProperties({ ...context, [key]: property }, propertiesConfig, name))\n changeObservable.notify()\n },\n\n removeContextProperty: (key: string) => {\n delete context[key]\n ensureProperties(context, propertiesConfig, name)\n changeObservable.notify()\n },\n\n clearContext: () => {\n context = {}\n changeObservable.notify()\n },\n\n changeObservable,\n }\n return contextManager\n}\n"],"mappings":";;;;;;AAgBA,SAAS,iBAAiB,SAAkB,kBAAoC,MAAc;CAC5F,MAAM,aAAa,EAAE,GAAG,QAAQ;CAEhC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,WAAW,OAAO,QAAQ,gBAAgB,GAAG;;;;;EAMxE,IAAI,SAAS,YAAY,CAAC,UAAU,WAAW,IAAI,GAEjD,WAAW,OAAO,OAAO,WAAW,IAAI;EAG1C,IAAI,YAAY,UAAU,WAAW,IAAI,GACvC,QAAQ,KAAK,gBAAgB,IAAI,MAAM,KAAK,sDAAsD;CAEtG;CAEA,OAAO;AACT;AAEA,SAAS,UAAU,OAAgB;CACjC,OAAO,UAAU,KAAA,KAAa,UAAU,QAAQ,UAAU;AAC5D;AAEA,SAAgB,qBACd,OAAe,IACf,EACE,mBAAmB,CAAC,MAGlB,CAAC,GACL;CACA,IAAI,UAAmB,CAAC;CACxB,MAAM,mBAAmB,IAAI,WAAiB;CAE9C,MAAM,iBAAiB;EACrB,kBAAkB,UAAU,OAAO;EAEnC,aAAa,eAAwB;GACnC,IAAI,aAAa,UAAU,GACzB,UAAU,SAAS,iBAAiB,YAAY,kBAAkB,IAAI,CAAC;QAEvE,eAAe,aAAa;GAE9B,iBAAiB,OAAO;EAC1B;EAEA,qBAAqB,KAAa,aAAkB;GAClD,UAAU,SAAS,iBAAiB;IAAE,GAAG;KAAU,MAAM;GAAS,GAAG,kBAAkB,IAAI,CAAC;GAC5F,iBAAiB,OAAO;EAC1B;EAEA,wBAAwB,QAAgB;GACtC,OAAO,QAAQ;GACf,iBAAiB,SAAS,kBAAkB,IAAI;GAChD,iBAAiB,OAAO;EAC1B;EAEA,oBAAoB;GAClB,UAAU,CAAC;GACX,iBAAiB,OAAO;EAC1B;EAEA;CACF;CACA,OAAO;AACT"}
|