@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,15 @@
|
|
|
1
|
+
import { display } from "../../tools/display.mjs";
|
|
2
|
+
import { getType } from "@kubesense/kubesense-js-core/util";
|
|
3
|
+
//#region src/domain/context/contextUtils.ts
|
|
4
|
+
/**
|
|
5
|
+
* Simple check to ensure an object is a valid context
|
|
6
|
+
*/
|
|
7
|
+
function checkContext(maybeContext) {
|
|
8
|
+
const isValid = getType(maybeContext) === "object";
|
|
9
|
+
if (!isValid) display.error("Unsupported context:", maybeContext);
|
|
10
|
+
return isValid;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { checkContext };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=contextUtils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextUtils.mjs","names":[],"sources":["../../../src/domain/context/contextUtils.ts"],"sourcesContent":["import { getType } from '@kubesense/kubesense-js-core/util'\nimport type { Context } from '../../tools/serialisation/context'\nimport { display } from '../../tools/display'\n\n/**\n * Simple check to ensure an object is a valid context\n */\nexport function checkContext(maybeContext: unknown): maybeContext is Context {\n const isValid = getType(maybeContext) === 'object'\n if (!isValid) {\n display.error('Unsupported context:', maybeContext)\n }\n return isValid\n}\n"],"mappings":";;;;;;AAOA,SAAgB,aAAa,cAAgD;CAC3E,MAAM,UAAU,QAAQ,YAAY,MAAM;CAC1C,IAAI,CAAC,SACH,QAAQ,MAAM,wBAAwB,YAAY;CAEpD,OAAO;AACT"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { addTelemetryUsage } from "../telemetry/telemetry.mjs";
|
|
2
|
+
import { monitor } from "@kubesense/kubesense-js-core/monitor";
|
|
3
|
+
//#region src/domain/context/defineContextMethod.ts
|
|
4
|
+
function defineContextMethod(getStrategy, contextName, methodName, usage) {
|
|
5
|
+
return monitor((...args) => {
|
|
6
|
+
if (usage) addTelemetryUsage({ feature: usage });
|
|
7
|
+
return getStrategy()[contextName][methodName](...args);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function bufferContextCalls(preStartContextManager, name, bufferApiCalls) {
|
|
11
|
+
preStartContextManager.changeObservable.subscribe(() => {
|
|
12
|
+
const context = preStartContextManager.getContext();
|
|
13
|
+
bufferApiCalls.notify((startResult) => startResult[name].setContext(context));
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { bufferContextCalls, defineContextMethod };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=defineContextMethod.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineContextMethod.mjs","names":[],"sources":["../../../src/domain/context/defineContextMethod.ts"],"sourcesContent":["import { monitor } from '@kubesense/kubesense-js-core/monitor'\nimport type { RawTelemetryUsage, RawTelemetryUsageFeature } from '../telemetry'\nimport { addTelemetryUsage } from '../telemetry'\nimport type { BufferedObservable } from '../../tools/observable'\nimport type { ContextManager } from './contextManager'\nimport type { ContextManagerMethod, CustomerContextKey } from './contextConstants'\n\nexport function defineContextMethod<MethodName extends ContextManagerMethod, Key extends CustomerContextKey>(\n getStrategy: () => Record<Key, ContextManager>,\n contextName: Key,\n methodName: MethodName,\n usage?: RawTelemetryUsageFeature\n): ContextManager[MethodName] {\n return monitor((...args: any[]) => {\n if (usage) {\n addTelemetryUsage({ feature: usage } as RawTelemetryUsage)\n }\n return (getStrategy()[contextName][methodName] as (...args: unknown[]) => unknown)(...args)\n }) as ContextManager[MethodName]\n}\n\nexport function bufferContextCalls<Key extends string, StartResult extends Record<Key, ContextManager>>(\n preStartContextManager: ContextManager,\n name: Key,\n bufferApiCalls: BufferedObservable<(startResult: StartResult) => void>\n) {\n preStartContextManager.changeObservable.subscribe(() => {\n const context = preStartContextManager.getContext()\n bufferApiCalls.notify((startResult) => startResult[name].setContext(context))\n })\n}\n"],"mappings":";;;AAOA,SAAgB,oBACd,aACA,aACA,YACA,OAC4B;CAC5B,OAAO,SAAS,GAAG,SAAgB;EACjC,IAAI,OACF,kBAAkB,EAAE,SAAS,MAAM,CAAsB;EAE3D,OAAQ,YAAY,CAAC,CAAC,YAAY,CAAC,WAAW,CAAqC,GAAG,IAAI;CAC5F,CAAC;AACH;AAEA,SAAgB,mBACd,wBACA,MACA,gBACA;CACA,uBAAuB,iBAAiB,gBAAgB;EACtD,MAAM,UAAU,uBAAuB,WAAW;EAClD,eAAe,QAAQ,gBAAgB,YAAY,KAAK,CAAC,WAAW,OAAO,CAAC;CAC9E,CAAC;AACH"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { isEmptyObject, tryJsonParse } from "../../tools/utils/objectUtils.mjs";
|
|
2
|
+
import { addEventListener } from "../../browser/addEventListener.mjs";
|
|
3
|
+
import { combine } from "@kubesense/kubesense-js-core/util";
|
|
4
|
+
//#region src/domain/context/storeContextManager.ts
|
|
5
|
+
const CONTEXT_STORE_KEY_PREFIX = "_kubesense_c";
|
|
6
|
+
const storageListeners = [];
|
|
7
|
+
function storeContextManager(contextManager, productKey, customerDataType) {
|
|
8
|
+
if (typeof window === "undefined" || typeof localStorage === "undefined") return;
|
|
9
|
+
const storageKey = buildStorageKey(productKey, customerDataType);
|
|
10
|
+
storageListeners.push(addEventListener(window, "storage", ({ key }) => {
|
|
11
|
+
if (storageKey === key) synchronizeWithStorage();
|
|
12
|
+
}));
|
|
13
|
+
contextManager.changeObservable.subscribe(dumpToStorage);
|
|
14
|
+
const contextFromStorage = combine(getFromStorage(), contextManager.getContext());
|
|
15
|
+
if (!isEmptyObject(contextFromStorage)) contextManager.setContext(contextFromStorage);
|
|
16
|
+
function synchronizeWithStorage() {
|
|
17
|
+
contextManager.setContext(getFromStorage());
|
|
18
|
+
}
|
|
19
|
+
function dumpToStorage() {
|
|
20
|
+
localStorage.setItem(storageKey, JSON.stringify(contextManager.getContext()));
|
|
21
|
+
}
|
|
22
|
+
function getFromStorage() {
|
|
23
|
+
const rawContext = localStorage.getItem(storageKey);
|
|
24
|
+
return rawContext ? tryJsonParse(rawContext) ?? {} : {};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function buildStorageKey(productKey, customerDataType) {
|
|
28
|
+
return `${CONTEXT_STORE_KEY_PREFIX}_${productKey}_${customerDataType}`;
|
|
29
|
+
}
|
|
30
|
+
function removeStorageListeners() {
|
|
31
|
+
storageListeners.map((listener) => listener.stop());
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { buildStorageKey, removeStorageListeners, storeContextManager };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=storeContextManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storeContextManager.mjs","names":[],"sources":["../../../src/domain/context/storeContextManager.ts"],"sourcesContent":["import { combine } from '@kubesense/kubesense-js-core/util'\nimport { addEventListener, DOM_EVENT } from '../../browser/addEventListener'\nimport type { Context } from '../../tools/serialisation/context'\nimport { isEmptyObject, tryJsonParse } from '../../tools/utils/objectUtils'\nimport type { ContextManager } from './contextManager'\nimport type { CustomerDataType } from './contextConstants'\n\nconst CONTEXT_STORE_KEY_PREFIX = '_kubesense_c'\n\nconst storageListeners: Array<{ stop: () => void }> = []\n\nexport function storeContextManager(\n contextManager: ContextManager,\n productKey: string,\n customerDataType: CustomerDataType\n) {\n // window and localStorage are not available in Web Workers or Node.js environments\n if (typeof window === 'undefined' || typeof localStorage === 'undefined') {\n return\n }\n\n const storageKey = buildStorageKey(productKey, customerDataType)\n\n storageListeners.push(\n addEventListener(window, DOM_EVENT.STORAGE, ({ key }) => {\n if (storageKey === key) {\n synchronizeWithStorage()\n }\n })\n )\n contextManager.changeObservable.subscribe(dumpToStorage)\n\n const contextFromStorage = combine(getFromStorage(), contextManager.getContext())\n if (!isEmptyObject(contextFromStorage)) {\n contextManager.setContext(contextFromStorage)\n }\n\n function synchronizeWithStorage() {\n contextManager.setContext(getFromStorage())\n }\n\n function dumpToStorage() {\n localStorage.setItem(storageKey, JSON.stringify(contextManager.getContext()))\n }\n\n function getFromStorage() {\n const rawContext = localStorage.getItem(storageKey)\n return rawContext ? (tryJsonParse<Context>(rawContext) ?? {}) : {}\n }\n}\n\nexport function buildStorageKey(productKey: string, customerDataType: CustomerDataType) {\n return `${CONTEXT_STORE_KEY_PREFIX}_${productKey}_${customerDataType}`\n}\n\nexport function removeStorageListeners() {\n storageListeners.map((listener) => listener.stop())\n}\n"],"mappings":";;;;AAOA,MAAM,2BAA2B;AAEjC,MAAM,mBAAgD,CAAC;AAEvD,SAAgB,oBACd,gBACA,YACA,kBACA;CAEA,IAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB,aAC3D;CAGF,MAAM,aAAa,gBAAgB,YAAY,gBAAgB;CAE/D,iBAAiB,KACf,iBAAiB,QAAA,YAA4B,EAAE,UAAU;EACvD,IAAI,eAAe,KACjB,uBAAuB;CAE3B,CAAC,CACH;CACA,eAAe,iBAAiB,UAAU,aAAa;CAEvD,MAAM,qBAAqB,QAAQ,eAAe,GAAG,eAAe,WAAW,CAAC;CAChF,IAAI,CAAC,cAAc,kBAAkB,GACnC,eAAe,WAAW,kBAAkB;CAG9C,SAAS,yBAAyB;EAChC,eAAe,WAAW,eAAe,CAAC;CAC5C;CAEA,SAAS,gBAAgB;EACvB,aAAa,QAAQ,YAAY,KAAK,UAAU,eAAe,WAAW,CAAC,CAAC;CAC9E;CAEA,SAAS,iBAAiB;EACxB,MAAM,aAAa,aAAa,QAAQ,UAAU;EAClD,OAAO,aAAc,aAAsB,UAAU,KAAK,CAAC,IAAK,CAAC;CACnE;AACF;AAEA,SAAgB,gBAAgB,YAAoB,kBAAoC;CACtF,OAAO,GAAG,yBAAyB,GAAG,WAAW,GAAG;AACtD;AAEA,SAAgB,yBAAyB;CACvC,iBAAiB,KAAK,aAAa,SAAS,KAAK,CAAC;AACpD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isEmptyObject } from "../../tools/utils/objectUtils.mjs";
|
|
2
|
+
import { createContextManager } from "../context/contextManager.mjs";
|
|
3
|
+
import { storeContextManager } from "../context/storeContextManager.mjs";
|
|
4
|
+
import "../context/contextConstants.mjs";
|
|
5
|
+
import { SKIPPED } from "@kubesense/kubesense-js-core/assembly";
|
|
6
|
+
//#region src/domain/contexts/accountContext.ts
|
|
7
|
+
function startAccountContext(assembleHook, configuration, productKey) {
|
|
8
|
+
const accountContextManager = buildAccountContextManager();
|
|
9
|
+
if (configuration.storeContextsAcrossPages) storeContextManager(accountContextManager, productKey, 4);
|
|
10
|
+
assembleHook.register(() => {
|
|
11
|
+
const account = accountContextManager.getContext();
|
|
12
|
+
if (isEmptyObject(account) || !account.id) return SKIPPED;
|
|
13
|
+
return { account };
|
|
14
|
+
});
|
|
15
|
+
return accountContextManager;
|
|
16
|
+
}
|
|
17
|
+
function buildAccountContextManager() {
|
|
18
|
+
return createContextManager("account", { propertiesConfig: {
|
|
19
|
+
id: {
|
|
20
|
+
type: "string",
|
|
21
|
+
required: true
|
|
22
|
+
},
|
|
23
|
+
name: { type: "string" }
|
|
24
|
+
} });
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { buildAccountContextManager, startAccountContext };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=accountContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountContext.mjs","names":[],"sources":["../../../src/domain/contexts/accountContext.ts"],"sourcesContent":["import type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport { SKIPPED } from '@kubesense/kubesense-js-core/assembly'\nimport type { Configuration } from '../configuration'\nimport { CustomerDataType } from '../context/contextConstants'\nimport { storeContextManager } from '../context/storeContextManager'\nimport { isEmptyObject } from '../../tools/utils/objectUtils'\nimport { createContextManager } from '../context/contextManager'\n\n/**\n * Account information for the browser SDK.\n */\nexport interface Account {\n id: string\n name?: string | undefined\n [key: string]: unknown\n}\n\nexport function startAccountContext(assembleHook: Hook<any, any>, configuration: Configuration, productKey: string) {\n const accountContextManager = buildAccountContextManager()\n\n if (configuration.storeContextsAcrossPages) {\n storeContextManager(accountContextManager, productKey, CustomerDataType.Account)\n }\n\n assembleHook.register(() => {\n const account = accountContextManager.getContext() as Account\n\n if (isEmptyObject(account) || !account.id) {\n return SKIPPED\n }\n\n return {\n account,\n }\n })\n\n return accountContextManager\n}\n\nexport function buildAccountContextManager() {\n return createContextManager('account', {\n propertiesConfig: {\n id: { type: 'string', required: true },\n name: { type: 'string' },\n },\n })\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,oBAAoB,cAA8B,eAA8B,YAAoB;CAClH,MAAM,wBAAwB,2BAA2B;CAEzD,IAAI,cAAc,0BAChB,oBAAoB,uBAAuB,YAAA,CAAoC;CAGjF,aAAa,eAAe;EAC1B,MAAM,UAAU,sBAAsB,WAAW;EAEjD,IAAI,cAAc,OAAO,KAAK,CAAC,QAAQ,IACrC,OAAO;EAGT,OAAO,EACL,QACF;CACF,CAAC;CAED,OAAO;AACT;AAEA,SAAgB,6BAA6B;CAC3C,OAAO,qBAAqB,WAAW,EACrC,kBAAkB;EAChB,IAAI;GAAE,MAAM;GAAU,UAAU;EAAK;EACrC,MAAM,EAAE,MAAM,SAAS;CACzB,EACF,CAAC;AACH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createContextManager } from "../context/contextManager.mjs";
|
|
2
|
+
import { storeContextManager } from "../context/storeContextManager.mjs";
|
|
3
|
+
import "../context/contextConstants.mjs";
|
|
4
|
+
//#region src/domain/contexts/globalContext.ts
|
|
5
|
+
function startGlobalContext(assembleHook, configuration, productKey, useContextNamespace) {
|
|
6
|
+
const globalContextManager = buildGlobalContextManager();
|
|
7
|
+
if (configuration.storeContextsAcrossPages) storeContextManager(globalContextManager, productKey, 2);
|
|
8
|
+
assembleHook.register(() => {
|
|
9
|
+
const context = globalContextManager.getContext();
|
|
10
|
+
return useContextNamespace ? { context } : context;
|
|
11
|
+
});
|
|
12
|
+
return globalContextManager;
|
|
13
|
+
}
|
|
14
|
+
function buildGlobalContextManager() {
|
|
15
|
+
return createContextManager("global context");
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { buildGlobalContextManager, startGlobalContext };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=globalContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalContext.mjs","names":[],"sources":["../../../src/domain/contexts/globalContext.ts"],"sourcesContent":["import type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport { CustomerDataType } from '../context/contextConstants'\nimport { storeContextManager } from '../context/storeContextManager'\nimport { createContextManager } from '../context/contextManager'\nimport type { Configuration } from '../configuration'\n\nexport function startGlobalContext(\n assembleHook: Hook<any, any>,\n configuration: Configuration,\n productKey: string,\n useContextNamespace: boolean\n) {\n const globalContextManager = buildGlobalContextManager()\n\n if (configuration.storeContextsAcrossPages) {\n storeContextManager(globalContextManager, productKey, CustomerDataType.GlobalContext)\n }\n\n assembleHook.register(() => {\n const context = globalContextManager.getContext()\n return useContextNamespace ? { context } : context\n })\n\n return globalContextManager\n}\n\nexport function buildGlobalContextManager() {\n return createContextManager('global context')\n}\n"],"mappings":";;;;AAMA,SAAgB,mBACd,cACA,eACA,YACA,qBACA;CACA,MAAM,uBAAuB,0BAA0B;CAEvD,IAAI,cAAc,0BAChB,oBAAoB,sBAAsB,YAAA,CAA0C;CAGtF,aAAa,eAAe;EAC1B,MAAM,UAAU,qBAAqB,WAAW;EAChD,OAAO,sBAAsB,EAAE,QAAQ,IAAI;CAC7C,CAAC;CAED,OAAO;AACT;AAEA,SAAgB,4BAA4B;CAC1C,OAAO,qBAAqB,gBAAgB;AAC9C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { generateUUID } from "../../tools/utils/stringUtils.mjs";
|
|
2
|
+
//#region src/domain/contexts/tabContext.ts
|
|
3
|
+
const TAB_ID_STORAGE_KEY = "_kubesense_tab_id";
|
|
4
|
+
let cachedTabId;
|
|
5
|
+
function startTabContext(assembleHook) {
|
|
6
|
+
const tabId = retrieveOrCreateTabId();
|
|
7
|
+
assembleHook.register(() => ({ tab: { id: tabId } }));
|
|
8
|
+
}
|
|
9
|
+
function retrieveOrCreateTabId() {
|
|
10
|
+
if (!cachedTabId) cachedTabId = getOrCreateIdInSessionStorage() ?? generateUUID();
|
|
11
|
+
return cachedTabId;
|
|
12
|
+
}
|
|
13
|
+
function getOrCreateIdInSessionStorage() {
|
|
14
|
+
try {
|
|
15
|
+
const existingId = sessionStorage.getItem(TAB_ID_STORAGE_KEY);
|
|
16
|
+
if (existingId) return existingId;
|
|
17
|
+
const newId = generateUUID();
|
|
18
|
+
sessionStorage.setItem(TAB_ID_STORAGE_KEY, newId);
|
|
19
|
+
return newId;
|
|
20
|
+
} catch {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { TAB_ID_STORAGE_KEY, startTabContext };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=tabContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabContext.mjs","names":[],"sources":["../../../src/domain/contexts/tabContext.ts"],"sourcesContent":["import type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport { generateUUID } from '../../tools/utils/stringUtils'\n\nexport const TAB_ID_STORAGE_KEY = '_kubesense_tab_id'\n\nlet cachedTabId: string | undefined\n\n// Exported for test cleanup only — allows specs to reset the in-memory cache between tests.\nexport function resetCachedTabId(): void {\n cachedTabId = undefined\n}\n\nexport function startTabContext(assembleHook: Hook<any, any>) {\n const tabId = retrieveOrCreateTabId()\n\n assembleHook.register(() => ({\n tab: {\n id: tabId,\n },\n }))\n}\n\nfunction retrieveOrCreateTabId(): string {\n if (!cachedTabId) {\n cachedTabId = getOrCreateIdInSessionStorage() ?? generateUUID()\n }\n return cachedTabId\n}\n\nfunction getOrCreateIdInSessionStorage(): string | undefined {\n try {\n const existingId = sessionStorage.getItem(TAB_ID_STORAGE_KEY)\n if (existingId) {\n return existingId\n }\n const newId = generateUUID()\n sessionStorage.setItem(TAB_ID_STORAGE_KEY, newId)\n return newId\n } catch {\n // sessionStorage unavailable (e.g. Web Worker, sandboxed iframe, quota exceeded)\n return undefined\n }\n}\n"],"mappings":";;AAGA,MAAa,qBAAqB;AAElC,IAAI;AAOJ,SAAgB,gBAAgB,cAA8B;CAC5D,MAAM,QAAQ,sBAAsB;CAEpC,aAAa,gBAAgB,EAC3B,KAAK,EACH,IAAI,MACN,EACF,EAAE;AACJ;AAEA,SAAS,wBAAgC;CACvC,IAAI,CAAC,aACH,cAAc,8BAA8B,KAAK,aAAa;CAEhE,OAAO;AACT;AAEA,SAAS,gCAAoD;CAC3D,IAAI;EACF,MAAM,aAAa,eAAe,QAAQ,kBAAkB;EAC5D,IAAI,YACF,OAAO;EAET,MAAM,QAAQ,aAAa;EAC3B,eAAe,QAAQ,oBAAoB,KAAK;EAChD,OAAO;CACT,QAAQ;EAEN;CACF;AACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SKIPPED } from "@kubesense/kubesense-js-core/assembly";
|
|
2
|
+
//#region src/domain/contexts/telemetrySessionContext.ts
|
|
3
|
+
function startTelemetrySessionContext(assembleTelemetryHook, sessionManager, extraContext) {
|
|
4
|
+
assembleTelemetryHook.register(({ startTime }) => {
|
|
5
|
+
const session = sessionManager.findTrackedSession(startTime);
|
|
6
|
+
if (!session) return SKIPPED;
|
|
7
|
+
return {
|
|
8
|
+
session: { id: session.id },
|
|
9
|
+
anonymous_id: session.anonymousId,
|
|
10
|
+
...extraContext
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { startTelemetrySessionContext };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=telemetrySessionContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetrySessionContext.mjs","names":[],"sources":["../../../src/domain/contexts/telemetrySessionContext.ts"],"sourcesContent":["import type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport { SKIPPED } from '@kubesense/kubesense-js-core/assembly'\nimport type { SessionManager } from '../session/sessionManager'\nimport type { Context } from '../../tools/serialisation/context'\n\nexport function startTelemetrySessionContext(\n assembleTelemetryHook: Hook<any, any>,\n sessionManager: SessionManager,\n extraContext?: Context\n) {\n assembleTelemetryHook.register(({ startTime }) => {\n const session = sessionManager.findTrackedSession(startTime)\n\n if (!session) {\n return SKIPPED\n }\n\n return {\n session: {\n id: session.id,\n },\n anonymous_id: session.anonymousId,\n ...extraContext,\n }\n })\n}\n"],"mappings":";;AAKA,SAAgB,6BACd,uBACA,gBACA,cACA;CACA,sBAAsB,UAAU,EAAE,gBAAgB;EAChD,MAAM,UAAU,eAAe,mBAAmB,SAAS;EAE3D,IAAI,CAAC,SACH,OAAO;EAGT,OAAO;GACL,SAAS,EACP,IAAI,QAAQ,GACd;GACA,cAAc,QAAQ;GACtB,GAAG;EACL;CACF,CAAC;AACH"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { isEmptyObject } from "../../tools/utils/objectUtils.mjs";
|
|
2
|
+
import { jsonStringify } from "../../tools/serialisation/jsonStringify.mjs";
|
|
3
|
+
import { createValueHistory } from "../../tools/valueHistory.mjs";
|
|
4
|
+
import { SESSION_TIME_OUT_DELAY } from "../session/sessionConstants.mjs";
|
|
5
|
+
import { createContextManager } from "../context/contextManager.mjs";
|
|
6
|
+
import { storeContextManager } from "../context/storeContextManager.mjs";
|
|
7
|
+
import "../context/contextConstants.mjs";
|
|
8
|
+
import { deepClone } from "@kubesense/kubesense-js-core/util";
|
|
9
|
+
import { clocksOrigin, relativeNow } from "@kubesense/kubesense-js-core/time";
|
|
10
|
+
import { SKIPPED } from "@kubesense/kubesense-js-core/assembly";
|
|
11
|
+
//#region src/domain/contexts/userContext.ts
|
|
12
|
+
const SESSION_OWNER_STORAGE_PREFIX = "_kubesense_session_user";
|
|
13
|
+
/**
|
|
14
|
+
* The user id is sanitized to a string by the context manager, but `getContext()` is typed as
|
|
15
|
+
* `Context`, so non-string values are normalized here rather than stringified blindly.
|
|
16
|
+
*/
|
|
17
|
+
function toUserIdString(userId) {
|
|
18
|
+
return typeof userId === "string" ? userId : userId === void 0 ? void 0 : jsonStringify(userId);
|
|
19
|
+
}
|
|
20
|
+
function getSessionOwnerKey(productKey) {
|
|
21
|
+
return `${SESSION_OWNER_STORAGE_PREFIX}_${productKey}`;
|
|
22
|
+
}
|
|
23
|
+
function readSessionOwnerUserId(productKey) {
|
|
24
|
+
try {
|
|
25
|
+
return localStorage.getItem(getSessionOwnerKey(productKey)) || void 0;
|
|
26
|
+
} catch {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function writeSessionOwnerUserId(productKey, userId) {
|
|
31
|
+
try {
|
|
32
|
+
const key = getSessionOwnerKey(productKey);
|
|
33
|
+
if (userId) localStorage.setItem(key, userId);
|
|
34
|
+
else localStorage.removeItem(key);
|
|
35
|
+
} catch {}
|
|
36
|
+
}
|
|
37
|
+
function startUserContext(hook, configuration, sessionManager, productKey) {
|
|
38
|
+
const userContextManager = buildUserContextManager();
|
|
39
|
+
if (configuration.storeContextsAcrossPages) storeContextManager(userContextManager, productKey, 1);
|
|
40
|
+
if (sessionManager.expire) {
|
|
41
|
+
const initialUserId = userContextManager.getContext().id;
|
|
42
|
+
const sessionOwnerUserId = readSessionOwnerUserId(productKey);
|
|
43
|
+
const initialUserIdString = toUserIdString(initialUserId);
|
|
44
|
+
if (sessionOwnerUserId !== void 0 && initialUserIdString !== void 0 && sessionOwnerUserId !== initialUserIdString) sessionManager.expire();
|
|
45
|
+
writeSessionOwnerUserId(productKey, initialUserIdString ?? sessionOwnerUserId);
|
|
46
|
+
let previousUserId = initialUserIdString ?? sessionOwnerUserId;
|
|
47
|
+
userContextManager.changeObservable.subscribe(() => {
|
|
48
|
+
const rawCurrentUserId = userContextManager.getContext().id;
|
|
49
|
+
const currentUserId = toUserIdString(rawCurrentUserId);
|
|
50
|
+
if (currentUserId !== previousUserId) {
|
|
51
|
+
sessionManager.expire();
|
|
52
|
+
writeSessionOwnerUserId(productKey, currentUserId);
|
|
53
|
+
}
|
|
54
|
+
previousUserId = currentUserId;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const userContextHistory = createValueHistory({ expireDelay: SESSION_TIME_OUT_DELAY });
|
|
58
|
+
userContextHistory.add(userContextManager.getContext(), clocksOrigin().relative);
|
|
59
|
+
userContextManager.changeObservable.subscribe(() => {
|
|
60
|
+
const now = relativeNow();
|
|
61
|
+
userContextHistory.closeActive(now);
|
|
62
|
+
userContextHistory.add(userContextManager.getContext(), now);
|
|
63
|
+
});
|
|
64
|
+
hook.register(({ eventType, startTime }) => {
|
|
65
|
+
const historicalUser = userContextHistory.find(startTime);
|
|
66
|
+
const user = historicalUser ? deepClone(historicalUser) : userContextManager.getContext();
|
|
67
|
+
const session = sessionManager.findTrackedSession(startTime);
|
|
68
|
+
if (session?.anonymousId && !user.anonymous_id && !!configuration.trackAnonymousUser) user.anonymous_id = session.anonymousId;
|
|
69
|
+
if (isEmptyObject(user)) return SKIPPED;
|
|
70
|
+
return {
|
|
71
|
+
type: eventType,
|
|
72
|
+
usr: user
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
return userContextManager;
|
|
76
|
+
}
|
|
77
|
+
function buildUserContextManager() {
|
|
78
|
+
return createContextManager("user", { propertiesConfig: {
|
|
79
|
+
id: { type: "string" },
|
|
80
|
+
name: { type: "string" },
|
|
81
|
+
email: { type: "string" },
|
|
82
|
+
mobile: { type: "string" }
|
|
83
|
+
} });
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { buildUserContextManager, startUserContext };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=userContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userContext.mjs","names":[],"sources":["../../../src/domain/contexts/userContext.ts"],"sourcesContent":["import type { RelativeTime } from '@kubesense/kubesense-js-core/time'\nimport { clocksOrigin, relativeNow } from '@kubesense/kubesense-js-core/time'\nimport type { Hook } from '@kubesense/kubesense-js-core/assembly'\nimport { SKIPPED } from '@kubesense/kubesense-js-core/assembly'\nimport { deepClone } from '@kubesense/kubesense-js-core/util'\nimport { CustomerDataType } from '../context/contextConstants'\nimport { storeContextManager } from '../context/storeContextManager'\nimport { createContextManager } from '../context/contextManager'\nimport type { Configuration } from '../configuration'\nimport { isEmptyObject } from '../../tools/utils/objectUtils'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { Context } from '../../tools/serialisation/context'\nimport { createValueHistory } from '../../tools/valueHistory'\nimport { SESSION_TIME_OUT_DELAY } from '../session/sessionConstants'\n\nexport interface User {\n id?: string | undefined\n email?: string | undefined\n name?: string | undefined\n mobile?: string | undefined\n [key: string]: unknown\n}\n\nconst SESSION_OWNER_STORAGE_PREFIX = '_kubesense_session_user'\n\n/**\n * The user id is sanitized to a string by the context manager, but `getContext()` is typed as\n * `Context`, so non-string values are normalized here rather than stringified blindly.\n */\nfunction toUserIdString(userId: unknown): string | undefined {\n return typeof userId === 'string' ? userId : userId === undefined ? undefined : jsonStringify(userId)\n}\n\nfunction getSessionOwnerKey(productKey: string) {\n return `${SESSION_OWNER_STORAGE_PREFIX}_${productKey}`\n}\n\nfunction readSessionOwnerUserId(productKey: string): string | undefined {\n try {\n return localStorage.getItem(getSessionOwnerKey(productKey)) || undefined\n } catch {\n return undefined\n }\n}\n\nfunction writeSessionOwnerUserId(productKey: string, userId: string | undefined) {\n try {\n const key = getSessionOwnerKey(productKey)\n if (userId) {\n localStorage.setItem(key, userId)\n } else {\n localStorage.removeItem(key)\n }\n } catch {\n // localStorage may be unavailable (private mode, quota); silently skip\n }\n}\n\nexport function startUserContext(\n hook: Hook<{ eventType?: string; startTime: RelativeTime }, { usr?: User }>,\n configuration: Configuration,\n sessionManager: {\n findTrackedSession: (startTime?: RelativeTime) => { anonymousId?: string } | undefined\n expire?: () => void\n },\n productKey: string\n) {\n const userContextManager = buildUserContextManager()\n\n if (configuration.storeContextsAcrossPages) {\n storeContextManager(userContextManager, productKey, CustomerDataType.User)\n }\n\n // Expire the session when the user identity changes so that the new user\n // gets a fresh session and their events are not attributed to the previous user's session.\n if (sessionManager.expire) {\n // Cross-page check: when the page reloads while the session cookie is still\n // valid but the active user has changed (e.g. logout/login between loads),\n // changeObservable won't fire because the loaded user equals the \"previous\"\n // user. Compare the persisted session owner against the current user and\n // expire on mismatch before any events get assembled with a stale session id.\n const initialUserId = userContextManager.getContext().id\n const sessionOwnerUserId = readSessionOwnerUserId(productKey)\n const initialUserIdString = toUserIdString(initialUserId)\n\n if (\n sessionOwnerUserId !== undefined &&\n initialUserIdString !== undefined &&\n sessionOwnerUserId !== initialUserIdString\n ) {\n sessionManager.expire()\n }\n writeSessionOwnerUserId(productKey, initialUserIdString ?? sessionOwnerUserId)\n\n // Seed previousUserId from the owner when current is undefined, so an\n // app calling setUser(sameOwner) post-load doesn't trigger a spurious expire.\n let previousUserId: string | undefined = initialUserIdString ?? sessionOwnerUserId\n userContextManager.changeObservable.subscribe(() => {\n const rawCurrentUserId = userContextManager.getContext().id\n const currentUserId = toUserIdString(rawCurrentUserId)\n if (currentUserId !== previousUserId) {\n sessionManager.expire!()\n writeSessionOwnerUserId(productKey, currentUserId)\n }\n previousUserId = currentUserId\n })\n }\n\n // Track user context over time so events get attributed to the user that was\n // active at the event's startTime, not at assembly time. Without this, a view\n // that started under user A but is assembled after setUser(B) would be tagged\n // with user B while its session.id still resolves to A's session — producing\n // a mismatched (session_id, user_id) row downstream.\n const userContextHistory = createValueHistory<Context>({\n expireDelay: SESSION_TIME_OUT_DELAY,\n })\n userContextHistory.add(userContextManager.getContext(), clocksOrigin().relative)\n userContextManager.changeObservable.subscribe(() => {\n const now = relativeNow()\n userContextHistory.closeActive(now)\n userContextHistory.add(userContextManager.getContext(), now)\n })\n\n hook.register(({ eventType, startTime }) => {\n const historicalUser = userContextHistory.find(startTime)\n const user = historicalUser ? deepClone(historicalUser) : userContextManager.getContext()\n const session = sessionManager.findTrackedSession(startTime)\n\n if (session?.anonymousId && !user.anonymous_id && !!configuration.trackAnonymousUser) {\n user.anonymous_id = session.anonymousId\n }\n\n if (isEmptyObject(user)) {\n return SKIPPED\n }\n\n return {\n type: eventType,\n usr: user,\n }\n })\n\n return userContextManager\n}\n\nexport function buildUserContextManager() {\n return createContextManager('user', {\n propertiesConfig: {\n id: { type: 'string' },\n name: { type: 'string' },\n email: { type: 'string' },\n // Coerced to string like the other identity fields: phone numbers are\n // routinely passed as JS numbers, and the collector unmarshals\n // usr.mobile into a string column.\n mobile: { type: 'string' },\n },\n })\n}\n"],"mappings":";;;;;;;;;;;AAuBA,MAAM,+BAA+B;;;;;AAMrC,SAAS,eAAe,QAAqC;CAC3D,OAAO,OAAO,WAAW,WAAW,SAAS,WAAW,KAAA,IAAY,KAAA,IAAY,cAAc,MAAM;AACtG;AAEA,SAAS,mBAAmB,YAAoB;CAC9C,OAAO,GAAG,6BAA6B,GAAG;AAC5C;AAEA,SAAS,uBAAuB,YAAwC;CACtE,IAAI;EACF,OAAO,aAAa,QAAQ,mBAAmB,UAAU,CAAC,KAAK,KAAA;CACjE,QAAQ;EACN;CACF;AACF;AAEA,SAAS,wBAAwB,YAAoB,QAA4B;CAC/E,IAAI;EACF,MAAM,MAAM,mBAAmB,UAAU;EACzC,IAAI,QACF,aAAa,QAAQ,KAAK,MAAM;OAEhC,aAAa,WAAW,GAAG;CAE/B,QAAQ,CAER;AACF;AAEA,SAAgB,iBACd,MACA,eACA,gBAIA,YACA;CACA,MAAM,qBAAqB,wBAAwB;CAEnD,IAAI,cAAc,0BAChB,oBAAoB,oBAAoB,YAAA,CAAiC;CAK3E,IAAI,eAAe,QAAQ;EAMzB,MAAM,gBAAgB,mBAAmB,WAAW,CAAC,CAAC;EACtD,MAAM,qBAAqB,uBAAuB,UAAU;EAC5D,MAAM,sBAAsB,eAAe,aAAa;EAExD,IACE,uBAAuB,KAAA,KACvB,wBAAwB,KAAA,KACxB,uBAAuB,qBAEvB,eAAe,OAAO;EAExB,wBAAwB,YAAY,uBAAuB,kBAAkB;EAI7E,IAAI,iBAAqC,uBAAuB;EAChE,mBAAmB,iBAAiB,gBAAgB;GAClD,MAAM,mBAAmB,mBAAmB,WAAW,CAAC,CAAC;GACzD,MAAM,gBAAgB,eAAe,gBAAgB;GACrD,IAAI,kBAAkB,gBAAgB;IACpC,eAAe,OAAQ;IACvB,wBAAwB,YAAY,aAAa;GACnD;GACA,iBAAiB;EACnB,CAAC;CACH;CAOA,MAAM,qBAAqB,mBAA4B,EACrD,aAAa,uBACf,CAAC;CACD,mBAAmB,IAAI,mBAAmB,WAAW,GAAG,aAAa,CAAC,CAAC,QAAQ;CAC/E,mBAAmB,iBAAiB,gBAAgB;EAClD,MAAM,MAAM,YAAY;EACxB,mBAAmB,YAAY,GAAG;EAClC,mBAAmB,IAAI,mBAAmB,WAAW,GAAG,GAAG;CAC7D,CAAC;CAED,KAAK,UAAU,EAAE,WAAW,gBAAgB;EAC1C,MAAM,iBAAiB,mBAAmB,KAAK,SAAS;EACxD,MAAM,OAAO,iBAAiB,UAAU,cAAc,IAAI,mBAAmB,WAAW;EACxF,MAAM,UAAU,eAAe,mBAAmB,SAAS;EAE3D,IAAI,SAAS,eAAe,CAAC,KAAK,gBAAgB,CAAC,CAAC,cAAc,oBAChE,KAAK,eAAe,QAAQ;EAG9B,IAAI,cAAc,IAAI,GACpB,OAAO;EAGT,OAAO;GACL,MAAM;GACN,KAAK;EACP;CACF,CAAC;CAED,OAAO;AACT;AAEA,SAAgB,0BAA0B;CACxC,OAAO,qBAAqB,QAAQ,EAClC,kBAAkB;EAChB,IAAI,EAAE,MAAM,SAAS;EACrB,MAAM,EAAE,MAAM,SAAS;EACvB,OAAO,EAAE,MAAM,SAAS;EAIxB,QAAQ,EAAE,MAAM,SAAS;CAC3B,EACF,CAAC;AACH"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/domain/deflate/deflate.types.ts
|
|
2
|
+
let DeflateEncoderStreamId = /* @__PURE__ */ function(DeflateEncoderStreamId) {
|
|
3
|
+
DeflateEncoderStreamId[DeflateEncoderStreamId["REPLAY"] = 1] = "REPLAY";
|
|
4
|
+
DeflateEncoderStreamId[DeflateEncoderStreamId["RUM"] = 2] = "RUM";
|
|
5
|
+
DeflateEncoderStreamId[DeflateEncoderStreamId["TELEMETRY"] = 4] = "TELEMETRY";
|
|
6
|
+
DeflateEncoderStreamId[DeflateEncoderStreamId["PROFILING"] = 6] = "PROFILING";
|
|
7
|
+
return DeflateEncoderStreamId;
|
|
8
|
+
}({});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DeflateEncoderStreamId };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=deflate.types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deflate.types.mjs","names":[],"sources":["../../../src/domain/deflate/deflate.types.ts"],"sourcesContent":["import type { Encoder } from '../../tools/encoder'\nimport type { Uint8ArrayBuffer } from '../../tools/utils/byteUtils'\n\nexport type DeflateWorkerAction =\n // Action to send when creating the worker to check if the communication is working correctly.\n // The worker should respond with a 'initialized' response.\n | {\n action: 'init'\n }\n // Action to send when writing some unfinished data. The worker will respond with a 'wrote'\n // response, with the same id and measurements of the wrote data bytes count.\n | {\n action: 'write'\n id: number\n streamId: number\n data: string\n }\n // Action to send when all data has been written and the state of the stream needs to be reset.\n | {\n action: 'reset'\n streamId: number\n }\n\nexport type DeflateWorkerResponse =\n // Response to 'init' action\n | {\n type: 'initialized'\n version: string\n }\n // Response to 'write' action\n | {\n type: 'wrote'\n id: number\n streamId: number\n result: Uint8ArrayBuffer\n trailer: Uint8ArrayBuffer\n additionalBytesCount: number\n }\n // Could happen at any time when something goes wrong in the worker\n | {\n type: 'errored'\n streamId?: number\n error: Error | string\n }\n\nexport interface DeflateWorker extends Worker {\n postMessage(message: DeflateWorkerAction): void\n}\n\nexport type DeflateEncoder = Encoder<Uint8ArrayBuffer> & { stop: () => void }\n\nexport const enum DeflateEncoderStreamId {\n REPLAY = 1,\n RUM = 2,\n TELEMETRY = 4,\n PROFILING = 6,\n}\n"],"mappings":";AAmDA,IAAkB,yBAAX,yBAAA,wBAAA;CACL,uBAAA,uBAAA,YAAA,KAAA;CACA,uBAAA,uBAAA,SAAA,KAAA;CACA,uBAAA,uBAAA,eAAA,KAAA;CACA,uBAAA,uBAAA,eAAA,KAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { computeStackTrace } from "../../tools/stackTrace/computeStackTrace.mjs";
|
|
2
|
+
import { toStackTraceString } from "../../tools/stackTrace/handlingStack.mjs";
|
|
3
|
+
import { jsonStringify } from "../../tools/serialisation/jsonStringify.mjs";
|
|
4
|
+
import { sanitize } from "../../tools/serialisation/sanitize.mjs";
|
|
5
|
+
import { NO_ERROR_STACK_PRESENT_MESSAGE, isError } from "./isError.mjs";
|
|
6
|
+
import { buildDebugIdByUrl } from "../sourceCodeContext.mjs";
|
|
7
|
+
import { isIndexableObject } from "@kubesense/kubesense-js-core/util";
|
|
8
|
+
//#region src/domain/error/error.ts
|
|
9
|
+
/**
|
|
10
|
+
* Used when `error.type` cannot be derived from the collected error. Sending a default rather than
|
|
11
|
+
* nothing keeps those errors groupable and searchable alongside the rest.
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_ERROR_TYPE = "Error";
|
|
14
|
+
function computeErrorBase({ originalError, stackTrace, source, useFallbackStack = true, nonErrorPrefix }) {
|
|
15
|
+
const isErrorInstance = isError(originalError);
|
|
16
|
+
return {
|
|
17
|
+
source,
|
|
18
|
+
type: computeType(stackTrace, originalError),
|
|
19
|
+
message: computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError),
|
|
20
|
+
stack: stackTrace ? toStackTraceString(stackTrace) : useFallbackStack ? NO_ERROR_STACK_PRESENT_MESSAGE : void 0
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `error.type` is normally the error class name (`TypeError`, `RangeError`...), read from the `name`
|
|
25
|
+
* property of the collected error. It is unavailable in two cases.
|
|
26
|
+
*
|
|
27
|
+
* No `Error` instance ever reached the SDK, because the application threw, rejected or logged
|
|
28
|
+
* something else: `console.error('message')`, `Promise.reject('reason')`, `addError('message')`. The
|
|
29
|
+
* runtime type of that value is used instead, which also surfaces that a non-`Error` was thrown in
|
|
30
|
+
* the first place.
|
|
31
|
+
*
|
|
32
|
+
* Or a stack trace was collected but tracekit could not extract a name from it, typically the opaque
|
|
33
|
+
* cross-origin `"Script error."`. A real error was raised here, so only its name is missing.
|
|
34
|
+
*/
|
|
35
|
+
function computeType(stackTrace, originalError) {
|
|
36
|
+
if (stackTrace) return stackTrace.name || "Error";
|
|
37
|
+
return /\[object (\w+)\]/.exec(Object.prototype.toString.call(originalError))?.[1] ?? "Error";
|
|
38
|
+
}
|
|
39
|
+
function getStackTraceUrls(stackTrace) {
|
|
40
|
+
return stackTrace?.stack.map((frame) => frame.url).filter((url) => !!url) ?? [];
|
|
41
|
+
}
|
|
42
|
+
function getErrorDebugIds(stackTrace, errorCauses) {
|
|
43
|
+
const errorCausesUrls = errorCauses.flatMap(({ stackTrace }) => getStackTraceUrls(stackTrace));
|
|
44
|
+
return buildDebugIdByUrl(getStackTraceUrls(stackTrace).concat(errorCausesUrls));
|
|
45
|
+
}
|
|
46
|
+
function flattenErrorCauses(error) {
|
|
47
|
+
const chain = [];
|
|
48
|
+
let current = error.cause;
|
|
49
|
+
while (current !== void 0 && current !== null && chain.length < 10) {
|
|
50
|
+
const isCurrentError = isError(current);
|
|
51
|
+
const stackTrace = isCurrentError ? computeStackTrace(current) : void 0;
|
|
52
|
+
chain.push({
|
|
53
|
+
originalError: current,
|
|
54
|
+
stackTrace
|
|
55
|
+
});
|
|
56
|
+
current = isCurrentError ? current.cause : void 0;
|
|
57
|
+
}
|
|
58
|
+
return chain;
|
|
59
|
+
}
|
|
60
|
+
function computeRawError({ stackTrace, originalError, handlingStack, componentStack, startClocks, nonErrorPrefix, useFallbackStack = true, source, handling }) {
|
|
61
|
+
const errorStackTrace = stackTrace ?? (isError(originalError) ? computeStackTrace(originalError) : void 0);
|
|
62
|
+
const errorCauses = isError(originalError) ? flattenErrorCauses(originalError) : [];
|
|
63
|
+
const errorBase = computeErrorBase({
|
|
64
|
+
originalError,
|
|
65
|
+
stackTrace: errorStackTrace,
|
|
66
|
+
source,
|
|
67
|
+
useFallbackStack,
|
|
68
|
+
nonErrorPrefix
|
|
69
|
+
});
|
|
70
|
+
const rawErrorCauses = errorCauses.map(({ originalError, stackTrace }) => computeErrorBase({
|
|
71
|
+
originalError,
|
|
72
|
+
stackTrace,
|
|
73
|
+
source,
|
|
74
|
+
useFallbackStack: false
|
|
75
|
+
}));
|
|
76
|
+
return {
|
|
77
|
+
startClocks,
|
|
78
|
+
handling,
|
|
79
|
+
handlingStack,
|
|
80
|
+
componentStack,
|
|
81
|
+
originalError,
|
|
82
|
+
...errorBase,
|
|
83
|
+
debugIds: getErrorDebugIds(errorStackTrace, errorCauses),
|
|
84
|
+
causes: rawErrorCauses.length ? rawErrorCauses : void 0,
|
|
85
|
+
fingerprint: tryToGetFingerprint(originalError),
|
|
86
|
+
context: tryToGetErrorContext(originalError)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError) {
|
|
90
|
+
return stackTrace?.message && stackTrace?.name ? stackTrace.message : !isErrorInstance ? nonErrorPrefix ? `${nonErrorPrefix} ${jsonStringify(sanitize(originalError))}` : jsonStringify(sanitize(originalError)) : "Empty message";
|
|
91
|
+
}
|
|
92
|
+
function tryToGetFingerprint(originalError) {
|
|
93
|
+
return isError(originalError) && "kubesense_fingerprint" in originalError ? String(originalError.kubesense_fingerprint) : void 0;
|
|
94
|
+
}
|
|
95
|
+
function tryToGetErrorContext(originalError) {
|
|
96
|
+
if (isIndexableObject(originalError)) return originalError.kubesense_context;
|
|
97
|
+
}
|
|
98
|
+
function getFileFromStackTraceString(stack) {
|
|
99
|
+
return /@ (.+)/.exec(stack)?.[1];
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { DEFAULT_ERROR_TYPE, NO_ERROR_STACK_PRESENT_MESSAGE, computeRawError, flattenErrorCauses, getFileFromStackTraceString, getStackTraceUrls, isError, tryToGetErrorContext, tryToGetFingerprint };
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.mjs","names":[],"sources":["../../../src/domain/error/error.ts"],"sourcesContent":["import type { ClocksState } from '@kubesense/kubesense-js-core/time'\nimport { isIndexableObject } from '@kubesense/kubesense-js-core/util'\nimport { sanitize } from '../../tools/serialisation/sanitize'\nimport type { Context } from '../../tools/serialisation/context'\nimport { jsonStringify } from '../../tools/serialisation/jsonStringify'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { toStackTraceString } from '../../tools/stackTrace/handlingStack'\nimport { buildDebugIdByUrl } from '../sourceCodeContext'\nimport type { ErrorSource, ErrorHandling, RawError, ErrorWithCause, NonErrorPrefix } from './error.types'\nimport { isError, NO_ERROR_STACK_PRESENT_MESSAGE } from './isError'\n\nexport { isError, NO_ERROR_STACK_PRESENT_MESSAGE }\n\n/**\n * Used when `error.type` cannot be derived from the collected error. Sending a default rather than\n * nothing keeps those errors groupable and searchable alongside the rest.\n */\nexport const DEFAULT_ERROR_TYPE = 'Error'\n\ninterface RawErrorParams {\n stackTrace?: StackTrace\n originalError: unknown\n handlingStack?: string\n componentStack?: string\n startClocks: ClocksState\n nonErrorPrefix: NonErrorPrefix\n useFallbackStack?: boolean\n source: ErrorSource\n handling: ErrorHandling\n}\n\nfunction computeErrorBase({\n originalError,\n stackTrace,\n source,\n useFallbackStack = true,\n nonErrorPrefix,\n}: {\n originalError: unknown\n stackTrace?: StackTrace\n source: ErrorSource\n useFallbackStack?: boolean\n nonErrorPrefix?: NonErrorPrefix\n}) {\n const isErrorInstance = isError(originalError)\n return {\n source,\n type: computeType(stackTrace, originalError),\n message: computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError),\n stack: stackTrace ? toStackTraceString(stackTrace) : useFallbackStack ? NO_ERROR_STACK_PRESENT_MESSAGE : undefined,\n }\n}\n\n/**\n * `error.type` is normally the error class name (`TypeError`, `RangeError`...), read from the `name`\n * property of the collected error. It is unavailable in two cases.\n *\n * No `Error` instance ever reached the SDK, because the application threw, rejected or logged\n * something else: `console.error('message')`, `Promise.reject('reason')`, `addError('message')`. The\n * runtime type of that value is used instead, which also surfaces that a non-`Error` was thrown in\n * the first place.\n *\n * Or a stack trace was collected but tracekit could not extract a name from it, typically the opaque\n * cross-origin `\"Script error.\"`. A real error was raised here, so only its name is missing.\n */\nfunction computeType(stackTrace: StackTrace | undefined, originalError: unknown): string {\n if (stackTrace) {\n return stackTrace.name || DEFAULT_ERROR_TYPE\n }\n // `[object String]` -> `String`\n return /\\[object (\\w+)\\]/.exec(Object.prototype.toString.call(originalError))?.[1] ?? DEFAULT_ERROR_TYPE\n}\n\nexport function getStackTraceUrls(stackTrace: StackTrace | undefined): string[] {\n return stackTrace?.stack.map((frame) => frame.url).filter((url): url is string => !!url) ?? []\n}\n\nfunction getErrorDebugIds(\n stackTrace: StackTrace | undefined,\n errorCauses: Array<{ stackTrace: StackTrace | undefined }>\n) {\n const errorCausesUrls = errorCauses.flatMap(({ stackTrace }) => getStackTraceUrls(stackTrace))\n return buildDebugIdByUrl(getStackTraceUrls(stackTrace).concat(errorCausesUrls))\n}\n\nexport function flattenErrorCauses(\n error: ErrorWithCause\n): Array<{ originalError: unknown; stackTrace: StackTrace | undefined }> {\n const chain: Array<{ originalError: unknown; stackTrace: StackTrace | undefined }> = []\n let current: unknown = error.cause\n\n while (current !== undefined && current !== null && chain.length < 10) {\n const isCurrentError = isError(current)\n const stackTrace = isCurrentError ? computeStackTrace(current) : undefined\n chain.push({ originalError: current, stackTrace })\n current = isCurrentError ? (current as ErrorWithCause).cause : undefined\n }\n\n return chain\n}\n\nexport function computeRawError({\n stackTrace,\n originalError,\n handlingStack,\n componentStack,\n startClocks,\n nonErrorPrefix,\n useFallbackStack = true,\n source,\n handling,\n}: RawErrorParams): RawError {\n const errorStackTrace = stackTrace ?? (isError(originalError) ? computeStackTrace(originalError) : undefined)\n\n const errorCauses = isError(originalError) ? flattenErrorCauses(originalError) : []\n\n const errorBase = computeErrorBase({\n originalError,\n stackTrace: errorStackTrace,\n source,\n useFallbackStack,\n nonErrorPrefix,\n })\n\n const rawErrorCauses = errorCauses.map(({ originalError, stackTrace }) =>\n computeErrorBase({ originalError, stackTrace, source, useFallbackStack: false })\n )\n\n return {\n startClocks,\n handling,\n handlingStack,\n componentStack,\n originalError,\n ...errorBase,\n debugIds: getErrorDebugIds(errorStackTrace, errorCauses),\n causes: rawErrorCauses.length ? rawErrorCauses : undefined,\n fingerprint: tryToGetFingerprint(originalError),\n context: tryToGetErrorContext(originalError),\n }\n}\n\nfunction computeMessage(\n stackTrace: StackTrace | undefined,\n isErrorInstance: boolean,\n nonErrorPrefix: NonErrorPrefix | undefined,\n originalError: unknown\n) {\n // Favor stackTrace message only if tracekit has really been able to extract something meaningful (message + name)\n // TODO rework tracekit integration to avoid scattering error building logic\n return stackTrace?.message && stackTrace?.name\n ? stackTrace.message\n : !isErrorInstance\n ? nonErrorPrefix\n ? `${nonErrorPrefix} ${jsonStringify(sanitize(originalError))!}`\n : jsonStringify(sanitize(originalError))!\n : 'Empty message'\n}\n\nexport function tryToGetFingerprint(originalError: unknown) {\n return isError(originalError) && 'kubesense_fingerprint' in originalError\n ? String(originalError.kubesense_fingerprint)\n : undefined\n}\n\nexport function tryToGetErrorContext(originalError: unknown) {\n if (isIndexableObject(originalError)) {\n return originalError.kubesense_context as Context | undefined\n }\n}\n\nexport function getFileFromStackTraceString(stack: string) {\n return /@ (.+)/.exec(stack)?.[1]\n}\n"],"mappings":";;;;;;;;;;;;AAkBA,MAAa,qBAAqB;AAclC,SAAS,iBAAiB,EACxB,eACA,YACA,QACA,mBAAmB,MACnB,kBAOC;CACD,MAAM,kBAAkB,QAAQ,aAAa;CAC7C,OAAO;EACL;EACA,MAAM,YAAY,YAAY,aAAa;EAC3C,SAAS,eAAe,YAAY,iBAAiB,gBAAgB,aAAa;EAClF,OAAO,aAAa,mBAAmB,UAAU,IAAI,mBAAmB,iCAAiC,KAAA;CAC3G;AACF;;;;;;;;;;;;;AAcA,SAAS,YAAY,YAAoC,eAAgC;CACvF,IAAI,YACF,OAAO,WAAW,QAAA;CAGpB,OAAO,mBAAmB,KAAK,OAAO,UAAU,SAAS,KAAK,aAAa,CAAC,CAAC,GAAG,MAAA;AAClF;AAEA,SAAgB,kBAAkB,YAA8C;CAC9E,OAAO,YAAY,MAAM,KAAK,UAAU,MAAM,GAAG,CAAC,CAAC,QAAQ,QAAuB,CAAC,CAAC,GAAG,KAAK,CAAC;AAC/F;AAEA,SAAS,iBACP,YACA,aACA;CACA,MAAM,kBAAkB,YAAY,SAAS,EAAE,iBAAiB,kBAAkB,UAAU,CAAC;CAC7F,OAAO,kBAAkB,kBAAkB,UAAU,CAAC,CAAC,OAAO,eAAe,CAAC;AAChF;AAEA,SAAgB,mBACd,OACuE;CACvE,MAAM,QAA+E,CAAC;CACtF,IAAI,UAAmB,MAAM;CAE7B,OAAO,YAAY,KAAA,KAAa,YAAY,QAAQ,MAAM,SAAS,IAAI;EACrE,MAAM,iBAAiB,QAAQ,OAAO;EACtC,MAAM,aAAa,iBAAiB,kBAAkB,OAAO,IAAI,KAAA;EACjE,MAAM,KAAK;GAAE,eAAe;GAAS;EAAW,CAAC;EACjD,UAAU,iBAAkB,QAA2B,QAAQ,KAAA;CACjE;CAEA,OAAO;AACT;AAEA,SAAgB,gBAAgB,EAC9B,YACA,eACA,eACA,gBACA,aACA,gBACA,mBAAmB,MACnB,QACA,YAC2B;CAC3B,MAAM,kBAAkB,eAAe,QAAQ,aAAa,IAAI,kBAAkB,aAAa,IAAI,KAAA;CAEnG,MAAM,cAAc,QAAQ,aAAa,IAAI,mBAAmB,aAAa,IAAI,CAAC;CAElF,MAAM,YAAY,iBAAiB;EACjC;EACA,YAAY;EACZ;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB,YAAY,KAAK,EAAE,eAAe,iBACvD,iBAAiB;EAAE;EAAe;EAAY;EAAQ,kBAAkB;CAAM,CAAC,CACjF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,GAAG;EACH,UAAU,iBAAiB,iBAAiB,WAAW;EACvD,QAAQ,eAAe,SAAS,iBAAiB,KAAA;EACjD,aAAa,oBAAoB,aAAa;EAC9C,SAAS,qBAAqB,aAAa;CAC7C;AACF;AAEA,SAAS,eACP,YACA,iBACA,gBACA,eACA;CAGA,OAAO,YAAY,WAAW,YAAY,OACtC,WAAW,UACX,CAAC,kBACC,iBACE,GAAG,eAAe,GAAG,cAAc,SAAS,aAAa,CAAC,MAC1D,cAAc,SAAS,aAAa,CAAC,IACvC;AACR;AAEA,SAAgB,oBAAoB,eAAwB;CAC1D,OAAO,QAAQ,aAAa,KAAK,2BAA2B,gBACxD,OAAO,cAAc,qBAAqB,IAC1C,KAAA;AACN;AAEA,SAAgB,qBAAqB,eAAwB;CAC3D,IAAI,kBAAkB,aAAa,GACjC,OAAO,cAAc;AAEzB;AAEA,SAAgB,4BAA4B,OAAe;CACzD,OAAO,SAAS,KAAK,KAAK,CAAC,GAAG;AAChC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/domain/error/error.types.ts
|
|
2
|
+
const ErrorSource = {
|
|
3
|
+
AGENT: "agent",
|
|
4
|
+
CONSOLE: "console",
|
|
5
|
+
CUSTOM: "custom",
|
|
6
|
+
LOGGER: "logger",
|
|
7
|
+
NETWORK: "network",
|
|
8
|
+
SOURCE: "source",
|
|
9
|
+
REPORT: "report"
|
|
10
|
+
};
|
|
11
|
+
let NonErrorPrefix = /* @__PURE__ */ function(NonErrorPrefix) {
|
|
12
|
+
NonErrorPrefix["UNCAUGHT"] = "Uncaught";
|
|
13
|
+
NonErrorPrefix["PROVIDED"] = "Provided";
|
|
14
|
+
return NonErrorPrefix;
|
|
15
|
+
}({});
|
|
16
|
+
let ErrorHandling = /* @__PURE__ */ function(ErrorHandling) {
|
|
17
|
+
ErrorHandling["HANDLED"] = "handled";
|
|
18
|
+
ErrorHandling["UNHANDLED"] = "unhandled";
|
|
19
|
+
return ErrorHandling;
|
|
20
|
+
}({});
|
|
21
|
+
//#endregion
|
|
22
|
+
export { ErrorHandling, ErrorSource, NonErrorPrefix };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=error.types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.types.mjs","names":[],"sources":["../../../src/domain/error/error.types.ts"],"sourcesContent":["import type { ClocksState } from '@kubesense/kubesense-js-core/time'\nimport type { Context } from '../../tools/serialisation/context'\nimport type { DebugIdEntry } from '../sourceCodeContext'\n\n// TS v4.6 introduced Error.cause[1] typed as `Error`. TS v4.8 changed Error.cause to be\n// `unknown`[2].\n//\n// Because we still support TS 3.8, we need to declare our own type. We can remove it once we drop\n// support for TS v4.7 and before. The 'cause' property defined by TS needs to be omitted because\n// we define it with a type `unknown` which is incompatible with TS 4.6 and 4.7.\n//\n// [1]: https://devblogs.microsoft.com/typescript/announcing-typescript-4-6/#target-es2022\n// [2]: https://devblogs.microsoft.com/typescript/announcing-typescript-4-8/#lib-d-ts-updates\nexport interface ErrorWithCause extends Omit<Error, 'cause'> {\n cause?: unknown\n}\n\nexport interface RawErrorCause {\n message: string\n source: ErrorSource\n type: string\n stack?: string\n}\n\nexport interface Csp {\n disposition: 'enforce' | 'report'\n}\n\nexport interface RawError {\n startClocks: ClocksState\n message: string\n type: string\n stack?: string\n source: ErrorSource\n originalError?: unknown\n handling?: ErrorHandling\n handlingStack?: string\n componentStack?: string\n causes?: RawErrorCause[]\n fingerprint?: string\n csp?: Csp\n context?: Context\n debugIds?: DebugIdEntry[]\n}\n\nexport const ErrorSource = {\n AGENT: 'agent',\n CONSOLE: 'console',\n CUSTOM: 'custom',\n LOGGER: 'logger',\n NETWORK: 'network',\n SOURCE: 'source',\n REPORT: 'report',\n} as const\n\nexport const enum NonErrorPrefix {\n UNCAUGHT = 'Uncaught',\n PROVIDED = 'Provided',\n}\n\nexport const enum ErrorHandling {\n HANDLED = 'handled',\n UNHANDLED = 'unhandled',\n}\n\nexport type ErrorSource = (typeof ErrorSource)[keyof typeof ErrorSource]\n"],"mappings":";AA6CA,MAAa,cAAc;CACzB,OAAO;CACP,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,QAAQ;AACV;AAEA,IAAkB,iBAAX,yBAAA,gBAAA;CACL,eAAA,cAAA;CACA,eAAA,cAAA;;AACF,EAAA,CAAA,CAAA;AAEA,IAAkB,gBAAX,yBAAA,eAAA;CACL,cAAA,aAAA;CACA,cAAA,eAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/domain/error/isError.ts
|
|
2
|
+
const NO_ERROR_STACK_PRESENT_MESSAGE = "No stack, consider using an instance of Error";
|
|
3
|
+
function isError(error) {
|
|
4
|
+
try {
|
|
5
|
+
return error instanceof Error || Object.prototype.toString.call(error) === "[object Error]";
|
|
6
|
+
} catch {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { NO_ERROR_STACK_PRESENT_MESSAGE, isError };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=isError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isError.mjs","names":[],"sources":["../../../src/domain/error/isError.ts"],"sourcesContent":["// Leaf module for error primitives with no further dependencies, so cross-cutting\n// modules (e.g. telemetry) can use them without pulling in the whole error module\n// and creating import cycles.\n\nexport const NO_ERROR_STACK_PRESENT_MESSAGE = 'No stack, consider using an instance of Error'\n\nexport function isError(error: unknown): error is Error {\n try {\n return error instanceof Error || Object.prototype.toString.call(error) === '[object Error]'\n } catch {\n return false\n }\n}\n"],"mappings":";AAIA,MAAa,iCAAiC;AAE9C,SAAgB,QAAQ,OAAgC;CACtD,IAAI;EACF,OAAO,iBAAiB,SAAS,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;CAC7E,QAAQ;EACN,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Observable } from "../../tools/observable.mjs";
|
|
2
|
+
import { noop } from "../../tools/utils/functionUtils.mjs";
|
|
3
|
+
import { computeStackTraceFromOnErrorMessage } from "../../tools/stackTrace/computeStackTrace.mjs";
|
|
4
|
+
import { instrumentMethod } from "../../tools/instrumentMethod.mjs";
|
|
5
|
+
import { isEventSupported } from "../../browser/addEventListener.mjs";
|
|
6
|
+
import { isError } from "./isError.mjs";
|
|
7
|
+
import { ErrorSource } from "./error.types.mjs";
|
|
8
|
+
import { computeRawError } from "./error.mjs";
|
|
9
|
+
import { globalObject } from "@kubesense/kubesense-js-core/util";
|
|
10
|
+
import { clocksNow } from "@kubesense/kubesense-js-core/time";
|
|
11
|
+
//#region src/domain/error/trackRuntimeError.ts
|
|
12
|
+
function trackRuntimeError() {
|
|
13
|
+
return new Observable((observer) => {
|
|
14
|
+
const handleRuntimeError = (originalError, stackTrace) => {
|
|
15
|
+
const rawError = computeRawError({
|
|
16
|
+
stackTrace,
|
|
17
|
+
originalError,
|
|
18
|
+
startClocks: clocksNow(),
|
|
19
|
+
nonErrorPrefix: "Uncaught",
|
|
20
|
+
source: ErrorSource.SOURCE,
|
|
21
|
+
handling: "unhandled"
|
|
22
|
+
});
|
|
23
|
+
observer.notify(rawError);
|
|
24
|
+
};
|
|
25
|
+
const { stop: stopInstrumentingOnError } = instrumentOnError(handleRuntimeError);
|
|
26
|
+
const { stop: stopInstrumentingOnUnhandledRejection } = instrumentUnhandledRejection(handleRuntimeError);
|
|
27
|
+
return () => {
|
|
28
|
+
stopInstrumentingOnError();
|
|
29
|
+
stopInstrumentingOnUnhandledRejection();
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function instrumentOnError(callback) {
|
|
34
|
+
return instrumentMethod(globalObject, "onerror", ({ parameters: [messageObj, url, line, column, errorObj] }) => {
|
|
35
|
+
let stackTrace;
|
|
36
|
+
if (!isError(errorObj)) stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column);
|
|
37
|
+
callback(errorObj ?? messageObj, stackTrace);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function instrumentUnhandledRejection(callback) {
|
|
41
|
+
if (!isEventSupported(globalObject.window, "unhandledrejection")) return { stop: noop };
|
|
42
|
+
return instrumentMethod(globalObject, "onunhandledrejection", ({ parameters: [e] }) => {
|
|
43
|
+
callback(e.reason || "Empty reason");
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
export { instrumentOnError, instrumentUnhandledRejection, trackRuntimeError };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=trackRuntimeError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackRuntimeError.mjs","names":[],"sources":["../../../src/domain/error/trackRuntimeError.ts"],"sourcesContent":["import { clocksNow } from '@kubesense/kubesense-js-core/time'\nimport { globalObject } from '@kubesense/kubesense-js-core/util'\nimport { instrumentMethod } from '../../tools/instrumentMethod'\nimport { Observable } from '../../tools/observable'\nimport type { StackTrace } from '../../tools/stackTrace/computeStackTrace'\nimport { computeStackTraceFromOnErrorMessage } from '../../tools/stackTrace/computeStackTrace'\nimport { DOM_EVENT, isEventSupported } from '../../browser/addEventListener'\nimport { noop } from '../../tools/utils/functionUtils'\nimport { computeRawError, isError } from './error'\nimport type { RawError } from './error.types'\nimport { ErrorHandling, ErrorSource, NonErrorPrefix } from './error.types'\n\nexport type UnhandledErrorCallback = (originalError: unknown, stackTrace?: StackTrace) => any\n\nexport function trackRuntimeError() {\n return new Observable<RawError>((observer) => {\n const handleRuntimeError = (originalError: unknown, stackTrace?: StackTrace) => {\n const rawError = computeRawError({\n stackTrace,\n originalError,\n startClocks: clocksNow(),\n nonErrorPrefix: NonErrorPrefix.UNCAUGHT,\n source: ErrorSource.SOURCE,\n handling: ErrorHandling.UNHANDLED,\n })\n observer.notify(rawError)\n }\n const { stop: stopInstrumentingOnError } = instrumentOnError(handleRuntimeError)\n const { stop: stopInstrumentingOnUnhandledRejection } = instrumentUnhandledRejection(handleRuntimeError)\n\n return () => {\n stopInstrumentingOnError()\n stopInstrumentingOnUnhandledRejection()\n }\n })\n}\n\nexport function instrumentOnError(callback: UnhandledErrorCallback) {\n return instrumentMethod(globalObject, 'onerror', ({ parameters: [messageObj, url, line, column, errorObj] }) => {\n let stackTrace\n if (!isError(errorObj)) {\n stackTrace = computeStackTraceFromOnErrorMessage(messageObj, url, line, column)\n }\n callback(errorObj ?? messageObj, stackTrace)\n })\n}\n\nexport function instrumentUnhandledRejection(callback: UnhandledErrorCallback) {\n // Salesforce LWS does not support the unhandledrejection event. https://developer.salesforce.com/tools/lws-distortion-viewer\n if (!isEventSupported(globalObject.window, DOM_EVENT.UNHANDLED_REJECTION)) {\n return { stop: noop }\n }\n\n return instrumentMethod(globalObject, 'onunhandledrejection', ({ parameters: [e] }) => {\n callback(e.reason || 'Empty reason')\n })\n}\n"],"mappings":";;;;;;;;;;;AAcA,SAAgB,oBAAoB;CAClC,OAAO,IAAI,YAAsB,aAAa;EAC5C,MAAM,sBAAsB,eAAwB,eAA4B;GAC9E,MAAM,WAAW,gBAAgB;IAC/B;IACA;IACA,aAAa,UAAU;IACvB,gBAAA;IACA,QAAQ,YAAY;IACpB,UAAA;GACF,CAAC;GACD,SAAS,OAAO,QAAQ;EAC1B;EACA,MAAM,EAAE,MAAM,6BAA6B,kBAAkB,kBAAkB;EAC/E,MAAM,EAAE,MAAM,0CAA0C,6BAA6B,kBAAkB;EAEvG,aAAa;GACX,yBAAyB;GACzB,sCAAsC;EACxC;CACF,CAAC;AACH;AAEA,SAAgB,kBAAkB,UAAkC;CAClE,OAAO,iBAAiB,cAAc,YAAY,EAAE,YAAY,CAAC,YAAY,KAAK,MAAM,QAAQ,gBAAgB;EAC9G,IAAI;EACJ,IAAI,CAAC,QAAQ,QAAQ,GACnB,aAAa,oCAAoC,YAAY,KAAK,MAAM,MAAM;EAEhF,SAAS,YAAY,YAAY,UAAU;CAC7C,CAAC;AACH;AAEA,SAAgB,6BAA6B,UAAkC;CAE7E,IAAI,CAAC,iBAAiB,aAAa,QAAA,oBAAqC,GACtE,OAAO,EAAE,MAAM,KAAK;CAGtB,OAAO,iBAAiB,cAAc,yBAAyB,EAAE,YAAY,CAAC,SAAS;EACrF,SAAS,EAAE,UAAU,cAAc;CACrC,CAAC;AACH"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { setTimeout } from "../../tools/timer.mjs";
|
|
2
|
+
import { ONE_MINUTE } from "@kubesense/kubesense-js-core/time";
|
|
3
|
+
//#region src/domain/eventRateLimiter/createEventRateLimiter.ts
|
|
4
|
+
const EVENT_RATE_LIMIT = 3e3;
|
|
5
|
+
function createEventRateLimiter(eventType, onLimitReached, limit = EVENT_RATE_LIMIT) {
|
|
6
|
+
let eventCount = 0;
|
|
7
|
+
let allowNextEvent = false;
|
|
8
|
+
return { isLimitReached() {
|
|
9
|
+
if (eventCount === 0) setTimeout(() => {
|
|
10
|
+
eventCount = 0;
|
|
11
|
+
}, ONE_MINUTE);
|
|
12
|
+
eventCount += 1;
|
|
13
|
+
if (eventCount <= limit || allowNextEvent) {
|
|
14
|
+
allowNextEvent = false;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (eventCount === limit + 1) {
|
|
18
|
+
allowNextEvent = true;
|
|
19
|
+
try {
|
|
20
|
+
onLimitReached(`Reached max number of ${eventType}s by minute: ${limit}`);
|
|
21
|
+
} finally {
|
|
22
|
+
allowNextEvent = false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
} };
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { createEventRateLimiter };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=createEventRateLimiter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createEventRateLimiter.mjs","names":[],"sources":["../../../src/domain/eventRateLimiter/createEventRateLimiter.ts"],"sourcesContent":["import { ONE_MINUTE } from '@kubesense/kubesense-js-core/time'\nimport { setTimeout } from '../../tools/timer'\n\nexport type EventRateLimiter = ReturnType<typeof createEventRateLimiter>\n\n// Limit the maximum number of actions, errors and logs per minutes\nconst EVENT_RATE_LIMIT = 3000\n\nexport function createEventRateLimiter(\n eventType: string,\n onLimitReached: (message: string) => void,\n limit = EVENT_RATE_LIMIT\n) {\n let eventCount = 0\n let allowNextEvent = false\n\n return {\n isLimitReached() {\n if (eventCount === 0) {\n setTimeout(() => {\n eventCount = 0\n }, ONE_MINUTE)\n }\n\n eventCount += 1\n if (eventCount <= limit || allowNextEvent) {\n allowNextEvent = false\n return false\n }\n\n if (eventCount === limit + 1) {\n allowNextEvent = true\n try {\n onLimitReached(`Reached max number of ${eventType}s by minute: ${limit}`)\n } finally {\n allowNextEvent = false\n }\n }\n\n return true\n },\n }\n}\n"],"mappings":";;;AAMA,MAAM,mBAAmB;AAEzB,SAAgB,uBACd,WACA,gBACA,QAAQ,kBACR;CACA,IAAI,aAAa;CACjB,IAAI,iBAAiB;CAErB,OAAO,EACL,iBAAiB;EACf,IAAI,eAAe,GACjB,iBAAiB;GACf,aAAa;EACf,GAAG,UAAU;EAGf,cAAc;EACd,IAAI,cAAc,SAAS,gBAAgB;GACzC,iBAAiB;GACjB,OAAO;EACT;EAEA,IAAI,eAAe,QAAQ,GAAG;GAC5B,iBAAiB;GACjB,IAAI;IACF,eAAe,yBAAyB,UAAU,eAAe,OAAO;GAC1E,UAAU;IACR,iBAAiB;GACnB;EACF;EAEA,OAAO;CACT,EACF;AACF"}
|