@openobserve/browser-core 0.2.11 → 0.2.12-beta.4
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/package.json +6 -5
- package/src/boot/displayAlreadyInitializedError.ts +8 -0
- package/src/boot/init.ts +29 -15
- package/src/browser/addEventListener.ts +44 -35
- package/src/browser/{types.ts → browser.types.ts} +42 -0
- package/src/browser/cookie.ts +69 -15
- package/src/browser/fetchObservable.ts +97 -42
- package/src/browser/{pageExitObservable.ts → pageMayExitObservable.ts} +11 -24
- package/src/browser/runOnReadyState.ts +14 -4
- package/src/browser/xhrObservable.ts +45 -38
- package/src/domain/allowedTrackingOrigins.ts +30 -0
- package/src/domain/bufferedData.ts +32 -0
- package/src/domain/configuration/configuration.ts +366 -95
- package/src/domain/configuration/endpointBuilder.ts +48 -64
- package/src/domain/configuration/index.ts +6 -4
- package/src/domain/configuration/transportConfiguration.ts +42 -35
- package/src/domain/connectivity/connectivity.ts +31 -0
- package/src/domain/connectivity/index.ts +1 -0
- package/src/domain/console/consoleObservable.ts +59 -27
- package/src/domain/context/contextConstants.ts +27 -0
- package/src/domain/context/contextManager.ts +85 -0
- package/src/domain/context/contextUtils.ts +14 -0
- package/src/domain/context/defineContextMethod.ts +31 -0
- package/src/domain/context/storeContextManager.ts +55 -0
- package/src/domain/contexts/accountContext.ts +47 -0
- package/src/domain/contexts/globalContext.ts +30 -0
- package/src/domain/contexts/rumInternalContext.type.ts +15 -0
- package/src/domain/contexts/userContext.ts +64 -0
- package/src/domain/deflate/{types.ts → deflate.types.ts} +18 -2
- package/src/domain/deflate/index.ts +1 -1
- package/src/domain/error/error.ts +28 -84
- package/src/domain/error/error.types.ts +21 -4
- package/src/domain/error/trackRuntimeError.ts +37 -8
- package/src/domain/eventRateLimiter/createEventRateLimiter.ts +5 -2
- package/src/domain/extension/extensionUtils.ts +28 -0
- package/src/domain/intakeSites.ts +18 -0
- package/src/domain/report/browser.types.ts +12 -0
- package/src/domain/report/reportObservable.ts +37 -30
- package/src/domain/resourceUtils.ts +20 -16
- package/src/domain/session/README.md +193 -0
- package/src/domain/session/oldCookiesMigration.ts +7 -7
- package/src/domain/session/sessionConstants.ts +16 -1
- package/src/domain/session/sessionManager.ts +179 -15
- package/src/domain/session/sessionState.ts +49 -17
- package/src/domain/session/sessionStateValidation.ts +9 -0
- package/src/domain/session/sessionStore.ts +118 -55
- package/src/domain/session/sessionStoreOperations.ts +51 -32
- package/src/domain/session/storeStrategies/sessionInCookie.ts +113 -23
- package/src/domain/session/storeStrategies/sessionInLocalStorage.ts +11 -8
- package/src/domain/session/storeStrategies/sessionStoreStrategy.ts +6 -2
- package/src/domain/synthetics/syntheticsWorkerValues.ts +15 -4
- package/src/domain/tags.ts +76 -0
- package/src/domain/telemetry/index.ts +12 -4
- package/src/domain/telemetry/rawTelemetryEvent.types.ts +11 -3
- package/src/domain/telemetry/telemetry.ts +242 -98
- package/src/domain/telemetry/telemetryEvent.types.ts +530 -5
- package/src/domain/trackingConsent.ts +34 -0
- package/src/index.ts +92 -55
- package/src/tools/abstractHooks.ts +72 -0
- package/src/tools/abstractLifeCycle.ts +1 -0
- package/src/tools/boundedBuffer.ts +36 -8
- package/src/tools/display.ts +18 -13
- package/src/tools/encoder.ts +103 -0
- package/src/tools/experimentalFeatures.ts +18 -9
- package/src/tools/getZoneJsOriginalValue.ts +1 -1
- package/src/tools/{getGlobalObject.ts → globalObject.ts} +20 -0
- package/src/tools/instrumentMethod.ts +127 -66
- package/src/tools/matchOption.ts +1 -2
- package/src/tools/mergeInto.ts +16 -16
- package/src/tools/monitor.ts +14 -10
- package/src/tools/observable.ts +79 -15
- package/src/tools/queueMicrotask.ts +13 -0
- package/src/tools/readBytesFromStream.ts +24 -64
- package/src/tools/requestIdleCallback.ts +40 -0
- package/src/tools/sendToExtension.ts +3 -1
- package/src/tools/serialisation/context.ts +4 -1
- package/src/tools/serialisation/sanitize.ts +32 -14
- package/src/tools/stackTrace/computeStackTrace.ts +250 -0
- package/src/tools/stackTrace/handlingStack.ts +48 -0
- package/src/tools/taskQueue.ts +63 -0
- package/src/tools/timer.ts +1 -1
- package/src/tools/utils/arrayUtils.ts +11 -3
- package/src/tools/utils/browserDetection.ts +35 -3
- package/src/tools/utils/byteUtils.ts +13 -2
- package/src/tools/utils/functionUtils.ts +0 -2
- package/src/tools/utils/numberUtils.ts +2 -1
- package/src/tools/utils/objectUtils.ts +1 -3
- package/src/tools/utils/polyfills.ts +6 -110
- package/src/tools/utils/responseUtils.ts +1 -1
- package/src/tools/utils/stringUtils.ts +62 -4
- package/src/tools/utils/timeUtils.ts +18 -13
- package/src/tools/utils/timezone.ts +9 -0
- package/src/tools/utils/urlPolyfill.ts +29 -59
- package/src/tools/valueHistory.ts +66 -35
- package/src/transport/batch.ts +113 -61
- package/src/transport/eventBridge.ts +24 -5
- package/src/transport/flushController.ts +44 -23
- package/src/transport/httpRequest.ts +99 -71
- package/src/transport/index.ts +7 -4
- package/src/transport/sendWithRetryStrategy.ts +60 -41
- package/cjs/boot/init.d.ts +0 -5
- package/cjs/boot/init.js +0 -36
- package/cjs/boot/init.js.map +0 -1
- package/cjs/browser/addEventListener.d.ts +0 -76
- package/cjs/browser/addEventListener.js +0 -52
- package/cjs/browser/addEventListener.js.map +0 -1
- package/cjs/browser/cookie.d.ts +0 -10
- package/cjs/browser/cookie.js +0 -69
- package/cjs/browser/cookie.js.map +0 -1
- package/cjs/browser/fetchObservable.d.ts +0 -23
- package/cjs/browser/fetchObservable.js +0 -74
- package/cjs/browser/fetchObservable.js.map +0 -1
- package/cjs/browser/pageExitObservable.d.ts +0 -14
- package/cjs/browser/pageExitObservable.js +0 -58
- package/cjs/browser/pageExitObservable.js.map +0 -1
- package/cjs/browser/runOnReadyState.d.ts +0 -2
- package/cjs/browser/runOnReadyState.js +0 -15
- package/cjs/browser/runOnReadyState.js.map +0 -1
- package/cjs/browser/types.d.ts +0 -19
- package/cjs/browser/types.js +0 -6
- package/cjs/browser/types.js.map +0 -1
- package/cjs/browser/xhrObservable.d.ts +0 -22
- package/cjs/browser/xhrObservable.js +0 -93
- package/cjs/browser/xhrObservable.js.map +0 -1
- package/cjs/domain/configuration/configuration.d.ts +0 -67
- package/cjs/domain/configuration/configuration.js +0 -95
- package/cjs/domain/configuration/configuration.js.map +0 -1
- package/cjs/domain/configuration/endpointBuilder.d.ts +0 -14
- package/cjs/domain/configuration/endpointBuilder.js +0 -94
- package/cjs/domain/configuration/endpointBuilder.js.map +0 -1
- package/cjs/domain/configuration/index.d.ts +0 -3
- package/cjs/domain/configuration/index.js +0 -25
- package/cjs/domain/configuration/index.js.map +0 -1
- package/cjs/domain/configuration/intakeSites.d.ts +0 -5
- package/cjs/domain/configuration/intakeSites.js +0 -9
- package/cjs/domain/configuration/intakeSites.js.map +0 -1
- package/cjs/domain/configuration/tags.d.ts +0 -4
- package/cjs/domain/configuration/tags.js +0 -39
- package/cjs/domain/configuration/tags.js.map +0 -1
- package/cjs/domain/configuration/transportConfiguration.d.ts +0 -16
- package/cjs/domain/configuration/transportConfiguration.js +0 -42
- package/cjs/domain/configuration/transportConfiguration.js.map +0 -1
- package/cjs/domain/console/consoleObservable.d.ts +0 -11
- package/cjs/domain/console/consoleObservable.js +0 -75
- package/cjs/domain/console/consoleObservable.js.map +0 -1
- package/cjs/domain/deflate/index.d.ts +0 -1
- package/cjs/domain/deflate/index.js +0 -18
- package/cjs/domain/deflate/index.js.map +0 -1
- package/cjs/domain/deflate/types.d.ts +0 -26
- package/cjs/domain/deflate/types.js +0 -3
- package/cjs/domain/deflate/types.js.map +0 -1
- package/cjs/domain/error/error.d.ts +0 -28
- package/cjs/domain/error/error.js +0 -131
- package/cjs/domain/error/error.js.map +0 -1
- package/cjs/domain/error/error.types.d.ts +0 -40
- package/cjs/domain/error/error.types.js +0 -13
- package/cjs/domain/error/error.types.js.map +0 -1
- package/cjs/domain/error/trackRuntimeError.d.ts +0 -5
- package/cjs/domain/error/trackRuntimeError.js +0 -21
- package/cjs/domain/error/trackRuntimeError.js.map +0 -1
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.d.ts +0 -5
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js +0 -40
- package/cjs/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
- package/cjs/domain/report/browser.types.d.ts +0 -24
- package/cjs/domain/report/browser.types.js +0 -3
- package/cjs/domain/report/browser.types.js.map +0 -1
- package/cjs/domain/report/reportObservable.d.ts +0 -15
- package/cjs/domain/report/reportObservable.js +0 -94
- package/cjs/domain/report/reportObservable.js.map +0 -1
- package/cjs/domain/resourceUtils.d.ts +0 -16
- package/cjs/domain/resourceUtils.js +0 -3
- package/cjs/domain/resourceUtils.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/sessionConstants.d.ts +0 -2
- package/cjs/domain/session/sessionConstants.js +0 -7
- package/cjs/domain/session/sessionConstants.js.map +0 -1
- package/cjs/domain/session/sessionManager.d.ts +0 -20
- package/cjs/domain/session/sessionManager.js +0 -65
- package/cjs/domain/session/sessionManager.js.map +0 -1
- package/cjs/domain/session/sessionState.d.ts +0 -11
- package/cjs/domain/session/sessionState.js +0 -45
- package/cjs/domain/session/sessionState.js.map +0 -1
- package/cjs/domain/session/sessionStore.d.ts +0 -34
- package/cjs/domain/session/sessionStore.js +0 -144
- package/cjs/domain/session/sessionStore.js.map +0 -1
- package/cjs/domain/session/sessionStoreOperations.d.ts +0 -15
- package/cjs/domain/session/sessionStoreOperations.js +0 -104
- package/cjs/domain/session/sessionStoreOperations.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
- package/cjs/domain/session/storeStrategies/sessionInCookie.js +0 -48
- package/cjs/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js +0 -40
- package/cjs/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -14
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js +0 -5
- package/cjs/domain/session/storeStrategies/sessionStoreStrategy.js.map +0 -1
- package/cjs/domain/synthetics/syntheticsWorkerValues.d.ts +0 -11
- package/cjs/domain/synthetics/syntheticsWorkerValues.js +0 -22
- package/cjs/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/cjs/domain/telemetry/index.d.ts +0 -3
- package/cjs/domain/telemetry/index.js +0 -28
- package/cjs/domain/telemetry/index.js.map +0 -1
- package/cjs/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -11
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js +0 -8
- package/cjs/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/cjs/domain/telemetry/telemetry.d.ts +0 -112
- package/cjs/domain/telemetry/telemetry.js +0 -146
- package/cjs/domain/telemetry/telemetry.js.map +0 -1
- package/cjs/domain/telemetry/telemetryEvent.types.d.ts +0 -375
- package/cjs/domain/telemetry/telemetryEvent.types.js +0 -7
- package/cjs/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/cjs/domain/tracekit/computeStackTrace.d.ts +0 -5
- package/cjs/domain/tracekit/computeStackTrace.js +0 -118
- package/cjs/domain/tracekit/computeStackTrace.js.map +0 -1
- package/cjs/domain/tracekit/index.d.ts +0 -3
- package/cjs/domain/tracekit/index.js +0 -8
- package/cjs/domain/tracekit/index.js.map +0 -1
- package/cjs/domain/tracekit/tracekit.d.ts +0 -35
- package/cjs/domain/tracekit/tracekit.js +0 -95
- package/cjs/domain/tracekit/tracekit.js.map +0 -1
- package/cjs/domain/tracekit/types.d.ts +0 -44
- package/cjs/domain/tracekit/types.js +0 -3
- package/cjs/domain/tracekit/types.js.map +0 -1
- package/cjs/domain/user/index.d.ts +0 -2
- package/cjs/domain/user/index.js +0 -19
- package/cjs/domain/user/index.js.map +0 -1
- package/cjs/domain/user/user.d.ts +0 -12
- package/cjs/domain/user/user.js +0 -35
- package/cjs/domain/user/user.js.map +0 -1
- package/cjs/domain/user/user.types.d.ts +0 -6
- package/cjs/domain/user/user.types.js +0 -3
- package/cjs/domain/user/user.types.js.map +0 -1
- package/cjs/index.d.ts +0 -63
- package/cjs/index.js +0 -155
- package/cjs/index.js.map +0 -1
- package/cjs/tools/abstractLifeCycle.d.ts +0 -23
- package/cjs/tools/abstractLifeCycle.js +0 -29
- package/cjs/tools/abstractLifeCycle.js.map +0 -1
- package/cjs/tools/boundedBuffer.d.ts +0 -5
- package/cjs/tools/boundedBuffer.js +0 -22
- package/cjs/tools/boundedBuffer.js.map +0 -1
- package/cjs/tools/catchUserErrors.d.ts +0 -1
- package/cjs/tools/catchUserErrors.js +0 -20
- package/cjs/tools/catchUserErrors.js.map +0 -1
- package/cjs/tools/display.d.ts +0 -35
- package/cjs/tools/display.js +0 -45
- package/cjs/tools/display.js.map +0 -1
- package/cjs/tools/experimentalFeatures.d.ts +0 -24
- package/cjs/tools/experimentalFeatures.js +0 -47
- package/cjs/tools/experimentalFeatures.js.map +0 -1
- package/cjs/tools/getGlobalObject.d.ts +0 -4
- package/cjs/tools/getGlobalObject.js +0 -37
- package/cjs/tools/getGlobalObject.js.map +0 -1
- package/cjs/tools/getZoneJsOriginalValue.d.ts +0 -19
- package/cjs/tools/getZoneJsOriginalValue.js +0 -30
- package/cjs/tools/getZoneJsOriginalValue.js.map +0 -1
- package/cjs/tools/instrumentMethod.d.ts +0 -19
- package/cjs/tools/instrumentMethod.js +0 -83
- package/cjs/tools/instrumentMethod.js.map +0 -1
- package/cjs/tools/matchOption.d.ts +0 -8
- package/cjs/tools/matchOption.js +0 -38
- package/cjs/tools/matchOption.js.map +0 -1
- package/cjs/tools/mergeInto.d.ts +0 -25
- package/cjs/tools/mergeInto.js +0 -105
- package/cjs/tools/mergeInto.js.map +0 -1
- package/cjs/tools/monitor.d.ts +0 -9
- package/cjs/tools/monitor.js +0 -76
- package/cjs/tools/monitor.js.map +0 -1
- package/cjs/tools/observable.d.ts +0 -12
- package/cjs/tools/observable.js +0 -44
- package/cjs/tools/observable.js.map +0 -1
- package/cjs/tools/readBytesFromStream.d.ts +0 -11
- package/cjs/tools/readBytesFromStream.js +0 -64
- package/cjs/tools/readBytesFromStream.js.map +0 -1
- package/cjs/tools/sendToExtension.d.ts +0 -3
- package/cjs/tools/sendToExtension.js +0 -11
- package/cjs/tools/sendToExtension.js.map +0 -1
- package/cjs/tools/serialisation/context.d.ts +0 -6
- package/cjs/tools/serialisation/context.js +0 -3
- package/cjs/tools/serialisation/context.js.map +0 -1
- package/cjs/tools/serialisation/contextManager.d.ts +0 -21
- package/cjs/tools/serialisation/contextManager.js +0 -70
- package/cjs/tools/serialisation/contextManager.js.map +0 -1
- package/cjs/tools/serialisation/heavyCustomerDataWarning.d.ts +0 -8
- package/cjs/tools/serialisation/heavyCustomerDataWarning.js +0 -18
- package/cjs/tools/serialisation/heavyCustomerDataWarning.js.map +0 -1
- package/cjs/tools/serialisation/jsonStringify.d.ts +0 -14
- package/cjs/tools/serialisation/jsonStringify.js +0 -49
- package/cjs/tools/serialisation/jsonStringify.js.map +0 -1
- package/cjs/tools/serialisation/sanitize.d.ts +0 -18
- package/cjs/tools/serialisation/sanitize.js +0 -185
- package/cjs/tools/serialisation/sanitize.js.map +0 -1
- package/cjs/tools/timer.d.ts +0 -5
- package/cjs/tools/timer.js +0 -23
- package/cjs/tools/timer.js.map +0 -1
- package/cjs/tools/utils/arrayUtils.d.ts +0 -1
- package/cjs/tools/utils/arrayUtils.js +0 -11
- package/cjs/tools/utils/arrayUtils.js.map +0 -1
- package/cjs/tools/utils/browserDetection.d.ts +0 -2
- package/cjs/tools/utils/browserDetection.js +0 -12
- package/cjs/tools/utils/browserDetection.js.map +0 -1
- package/cjs/tools/utils/byteUtils.d.ts +0 -4
- package/cjs/tools/utils/byteUtils.js +0 -31
- package/cjs/tools/utils/byteUtils.js.map +0 -1
- package/cjs/tools/utils/functionUtils.d.ts +0 -9
- package/cjs/tools/utils/functionUtils.js +0 -48
- package/cjs/tools/utils/functionUtils.js.map +0 -1
- package/cjs/tools/utils/numberUtils.d.ts +0 -8
- package/cjs/tools/utils/numberUtils.js +0 -24
- package/cjs/tools/utils/numberUtils.js.map +0 -1
- package/cjs/tools/utils/objectUtils.d.ts +0 -10
- package/cjs/tools/utils/objectUtils.js +0 -26
- package/cjs/tools/utils/objectUtils.js.map +0 -1
- package/cjs/tools/utils/polyfills.d.ts +0 -24
- package/cjs/tools/utils/polyfills.js +0 -110
- package/cjs/tools/utils/polyfills.js.map +0 -1
- package/cjs/tools/utils/responseUtils.d.ts +0 -2
- package/cjs/tools/utils/responseUtils.js +0 -18
- package/cjs/tools/utils/responseUtils.js.map +0 -1
- package/cjs/tools/utils/stringUtils.d.ts +0 -7
- package/cjs/tools/utils/stringUtils.js +0 -32
- package/cjs/tools/utils/stringUtils.js.map +0 -1
- package/cjs/tools/utils/timeUtils.d.ts +0 -57
- package/cjs/tools/utils/timeUtils.js +0 -99
- 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 -17
- package/cjs/tools/utils/typeUtils.js.map +0 -1
- package/cjs/tools/utils/urlPolyfill.d.ts +0 -14
- package/cjs/tools/utils/urlPolyfill.js +0 -92
- package/cjs/tools/utils/urlPolyfill.js.map +0 -1
- package/cjs/tools/valueHistory.d.ts +0 -50
- package/cjs/tools/valueHistory.js +0 -106
- package/cjs/tools/valueHistory.js.map +0 -1
- package/cjs/transport/batch.d.ts +0 -19
- package/cjs/transport/batch.js +0 -79
- package/cjs/transport/batch.js.map +0 -1
- package/cjs/transport/eventBridge.d.ts +0 -12
- package/cjs/transport/eventBridge.js +0 -34
- package/cjs/transport/eventBridge.js.map +0 -1
- package/cjs/transport/flushController.d.ts +0 -48
- package/cjs/transport/flushController.js +0 -97
- package/cjs/transport/flushController.js.map +0 -1
- package/cjs/transport/httpRequest.d.ts +0 -37
- package/cjs/transport/httpRequest.js +0 -91
- package/cjs/transport/httpRequest.js.map +0 -1
- package/cjs/transport/index.d.ts +0 -4
- package/cjs/transport/index.js +0 -13
- package/cjs/transport/index.js.map +0 -1
- package/cjs/transport/sendWithRetryStrategy.d.ts +0 -39
- package/cjs/transport/sendWithRetryStrategy.js +0 -151
- package/cjs/transport/sendWithRetryStrategy.js.map +0 -1
- package/cjs/transport/startBatchWithReplica.d.ts +0 -15
- package/cjs/transport/startBatchWithReplica.js +0 -37
- package/cjs/transport/startBatchWithReplica.js.map +0 -1
- package/esm/boot/init.d.ts +0 -5
- package/esm/boot/init.js +0 -31
- package/esm/boot/init.js.map +0 -1
- package/esm/browser/addEventListener.d.ts +0 -76
- package/esm/browser/addEventListener.js +0 -47
- package/esm/browser/addEventListener.js.map +0 -1
- package/esm/browser/cookie.d.ts +0 -10
- package/esm/browser/cookie.js +0 -61
- package/esm/browser/cookie.js.map +0 -1
- package/esm/browser/fetchObservable.d.ts +0 -23
- package/esm/browser/fetchObservable.js +0 -70
- package/esm/browser/fetchObservable.js.map +0 -1
- package/esm/browser/pageExitObservable.d.ts +0 -14
- package/esm/browser/pageExitObservable.js +0 -53
- package/esm/browser/pageExitObservable.js.map +0 -1
- package/esm/browser/runOnReadyState.d.ts +0 -2
- package/esm/browser/runOnReadyState.js +0 -11
- package/esm/browser/runOnReadyState.js.map +0 -1
- package/esm/browser/types.d.ts +0 -19
- package/esm/browser/types.js +0 -5
- package/esm/browser/types.js.map +0 -1
- package/esm/browser/xhrObservable.d.ts +0 -22
- package/esm/browser/xhrObservable.js +0 -89
- package/esm/browser/xhrObservable.js.map +0 -1
- package/esm/domain/configuration/configuration.d.ts +0 -67
- package/esm/domain/configuration/configuration.js +0 -90
- package/esm/domain/configuration/configuration.js.map +0 -1
- package/esm/domain/configuration/endpointBuilder.d.ts +0 -14
- package/esm/domain/configuration/endpointBuilder.js +0 -90
- package/esm/domain/configuration/endpointBuilder.js.map +0 -1
- package/esm/domain/configuration/index.d.ts +0 -3
- package/esm/domain/configuration/index.js +0 -4
- package/esm/domain/configuration/index.js.map +0 -1
- package/esm/domain/configuration/intakeSites.d.ts +0 -5
- package/esm/domain/configuration/intakeSites.js +0 -6
- package/esm/domain/configuration/intakeSites.js.map +0 -1
- package/esm/domain/configuration/tags.d.ts +0 -4
- package/esm/domain/configuration/tags.js +0 -34
- package/esm/domain/configuration/tags.js.map +0 -1
- package/esm/domain/configuration/transportConfiguration.d.ts +0 -16
- package/esm/domain/configuration/transportConfiguration.js +0 -38
- package/esm/domain/configuration/transportConfiguration.js.map +0 -1
- package/esm/domain/console/consoleObservable.d.ts +0 -11
- package/esm/domain/console/consoleObservable.js +0 -70
- package/esm/domain/console/consoleObservable.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/deflate/types.d.ts +0 -26
- package/esm/domain/deflate/types.js +0 -2
- package/esm/domain/deflate/types.js.map +0 -1
- package/esm/domain/error/error.d.ts +0 -28
- package/esm/domain/error/error.js +0 -121
- package/esm/domain/error/error.js.map +0 -1
- package/esm/domain/error/error.types.d.ts +0 -40
- 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 -5
- package/esm/domain/error/trackRuntimeError.js +0 -17
- 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 -36
- package/esm/domain/eventRateLimiter/createEventRateLimiter.js.map +0 -1
- package/esm/domain/report/browser.types.d.ts +0 -24
- 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 -15
- package/esm/domain/report/reportObservable.js +0 -90
- package/esm/domain/report/reportObservable.js.map +0 -1
- package/esm/domain/resourceUtils.d.ts +0 -16
- package/esm/domain/resourceUtils.js +0 -2
- 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 -2
- package/esm/domain/session/sessionConstants.js +0 -4
- package/esm/domain/session/sessionConstants.js.map +0 -1
- package/esm/domain/session/sessionManager.d.ts +0 -20
- package/esm/domain/session/sessionManager.js +0 -60
- package/esm/domain/session/sessionManager.js.map +0 -1
- package/esm/domain/session/sessionState.d.ts +0 -11
- package/esm/domain/session/sessionState.js +0 -38
- package/esm/domain/session/sessionState.js.map +0 -1
- package/esm/domain/session/sessionStore.d.ts +0 -34
- package/esm/domain/session/sessionStore.js +0 -139
- package/esm/domain/session/sessionStore.js.map +0 -1
- package/esm/domain/session/sessionStoreOperations.d.ts +0 -15
- package/esm/domain/session/sessionStoreOperations.js +0 -99
- package/esm/domain/session/sessionStoreOperations.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInCookie.d.ts +0 -6
- package/esm/domain/session/storeStrategies/sessionInCookie.js +0 -42
- package/esm/domain/session/storeStrategies/sessionInCookie.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.d.ts +0 -3
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js +0 -35
- package/esm/domain/session/storeStrategies/sessionInLocalStorage.js.map +0 -1
- package/esm/domain/session/storeStrategies/sessionStoreStrategy.d.ts +0 -14
- 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 -11
- package/esm/domain/synthetics/syntheticsWorkerValues.js +0 -16
- package/esm/domain/synthetics/syntheticsWorkerValues.js.map +0 -1
- package/esm/domain/telemetry/index.d.ts +0 -3
- package/esm/domain/telemetry/index.js +0 -4
- package/esm/domain/telemetry/index.js.map +0 -1
- package/esm/domain/telemetry/rawTelemetryEvent.types.d.ts +0 -11
- package/esm/domain/telemetry/rawTelemetryEvent.types.js +0 -5
- package/esm/domain/telemetry/rawTelemetryEvent.types.js.map +0 -1
- package/esm/domain/telemetry/telemetry.d.ts +0 -112
- package/esm/domain/telemetry/telemetry.js +0 -134
- package/esm/domain/telemetry/telemetry.js.map +0 -1
- package/esm/domain/telemetry/telemetryEvent.types.d.ts +0 -375
- package/esm/domain/telemetry/telemetryEvent.types.js +0 -6
- package/esm/domain/telemetry/telemetryEvent.types.js.map +0 -1
- package/esm/domain/tracekit/computeStackTrace.d.ts +0 -5
- package/esm/domain/tracekit/computeStackTrace.js +0 -114
- package/esm/domain/tracekit/computeStackTrace.js.map +0 -1
- package/esm/domain/tracekit/index.d.ts +0 -3
- package/esm/domain/tracekit/index.js +0 -3
- package/esm/domain/tracekit/index.js.map +0 -1
- package/esm/domain/tracekit/tracekit.d.ts +0 -35
- package/esm/domain/tracekit/tracekit.js +0 -91
- package/esm/domain/tracekit/tracekit.js.map +0 -1
- package/esm/domain/tracekit/types.d.ts +0 -44
- package/esm/domain/tracekit/types.js +0 -2
- package/esm/domain/tracekit/types.js.map +0 -1
- package/esm/domain/user/index.d.ts +0 -2
- package/esm/domain/user/index.js +0 -3
- package/esm/domain/user/index.js.map +0 -1
- package/esm/domain/user/user.d.ts +0 -12
- package/esm/domain/user/user.js +0 -30
- package/esm/domain/user/user.js.map +0 -1
- package/esm/domain/user/user.types.d.ts +0 -6
- package/esm/domain/user/user.types.js +0 -2
- package/esm/domain/user/user.types.js.map +0 -1
- package/esm/index.d.ts +0 -63
- package/esm/index.js +0 -61
- package/esm/index.js.map +0 -1
- package/esm/tools/abstractLifeCycle.d.ts +0 -23
- package/esm/tools/abstractLifeCycle.js +0 -26
- package/esm/tools/abstractLifeCycle.js.map +0 -1
- package/esm/tools/boundedBuffer.d.ts +0 -5
- package/esm/tools/boundedBuffer.js +0 -19
- package/esm/tools/boundedBuffer.js.map +0 -1
- package/esm/tools/catchUserErrors.d.ts +0 -1
- package/esm/tools/catchUserErrors.js +0 -16
- package/esm/tools/catchUserErrors.js.map +0 -1
- package/esm/tools/display.d.ts +0 -35
- package/esm/tools/display.js +0 -41
- package/esm/tools/display.js.map +0 -1
- package/esm/tools/experimentalFeatures.d.ts +0 -24
- package/esm/tools/experimentalFeatures.js +0 -40
- package/esm/tools/experimentalFeatures.js.map +0 -1
- package/esm/tools/getGlobalObject.d.ts +0 -4
- package/esm/tools/getGlobalObject.js +0 -33
- package/esm/tools/getGlobalObject.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/instrumentMethod.d.ts +0 -19
- package/esm/tools/instrumentMethod.js +0 -77
- package/esm/tools/instrumentMethod.js.map +0 -1
- package/esm/tools/matchOption.d.ts +0 -8
- package/esm/tools/matchOption.js +0 -33
- package/esm/tools/matchOption.js.map +0 -1
- package/esm/tools/mergeInto.d.ts +0 -25
- package/esm/tools/mergeInto.js +0 -99
- package/esm/tools/mergeInto.js.map +0 -1
- package/esm/tools/monitor.d.ts +0 -9
- package/esm/tools/monitor.js +0 -66
- package/esm/tools/monitor.js.map +0 -1
- package/esm/tools/observable.d.ts +0 -12
- package/esm/tools/observable.js +0 -40
- package/esm/tools/observable.js.map +0 -1
- package/esm/tools/readBytesFromStream.d.ts +0 -11
- package/esm/tools/readBytesFromStream.js +0 -60
- package/esm/tools/readBytesFromStream.js.map +0 -1
- package/esm/tools/sendToExtension.d.ts +0 -3
- package/esm/tools/sendToExtension.js +0 -7
- package/esm/tools/sendToExtension.js.map +0 -1
- package/esm/tools/serialisation/context.d.ts +0 -6
- package/esm/tools/serialisation/context.js +0 -2
- package/esm/tools/serialisation/context.js.map +0 -1
- package/esm/tools/serialisation/contextManager.d.ts +0 -21
- package/esm/tools/serialisation/contextManager.js +0 -66
- package/esm/tools/serialisation/contextManager.js.map +0 -1
- package/esm/tools/serialisation/heavyCustomerDataWarning.d.ts +0 -8
- package/esm/tools/serialisation/heavyCustomerDataWarning.js +0 -14
- package/esm/tools/serialisation/heavyCustomerDataWarning.js.map +0 -1
- package/esm/tools/serialisation/jsonStringify.d.ts +0 -14
- 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 -181
- package/esm/tools/serialisation/sanitize.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 -1
- package/esm/tools/utils/arrayUtils.js +0 -7
- package/esm/tools/utils/arrayUtils.js.map +0 -1
- package/esm/tools/utils/browserDetection.d.ts +0 -2
- package/esm/tools/utils/browserDetection.js +0 -7
- package/esm/tools/utils/browserDetection.js.map +0 -1
- package/esm/tools/utils/byteUtils.d.ts +0 -4
- package/esm/tools/utils/byteUtils.js +0 -26
- package/esm/tools/utils/byteUtils.js.map +0 -1
- package/esm/tools/utils/functionUtils.d.ts +0 -9
- package/esm/tools/utils/functionUtils.js +0 -43
- package/esm/tools/utils/functionUtils.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 -19
- package/esm/tools/utils/objectUtils.js.map +0 -1
- package/esm/tools/utils/polyfills.d.ts +0 -24
- package/esm/tools/utils/polyfills.js +0 -95
- 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 -7
- package/esm/tools/utils/stringUtils.js +0 -26
- package/esm/tools/utils/stringUtils.js.map +0 -1
- package/esm/tools/utils/timeUtils.d.ts +0 -57
- package/esm/tools/utils/timeUtils.js +0 -82
- package/esm/tools/utils/timeUtils.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 -14
- package/esm/tools/utils/urlPolyfill.js +0 -80
- package/esm/tools/utils/urlPolyfill.js.map +0 -1
- package/esm/tools/valueHistory.d.ts +0 -50
- package/esm/tools/valueHistory.js +0 -103
- package/esm/tools/valueHistory.js.map +0 -1
- package/esm/transport/batch.d.ts +0 -19
- package/esm/transport/batch.js +0 -76
- package/esm/transport/batch.js.map +0 -1
- package/esm/transport/eventBridge.d.ts +0 -12
- package/esm/transport/eventBridge.js +0 -29
- package/esm/transport/eventBridge.js.map +0 -1
- package/esm/transport/flushController.d.ts +0 -48
- package/esm/transport/flushController.js +0 -93
- package/esm/transport/flushController.js.map +0 -1
- package/esm/transport/httpRequest.d.ts +0 -37
- package/esm/transport/httpRequest.js +0 -85
- package/esm/transport/httpRequest.js.map +0 -1
- package/esm/transport/index.d.ts +0 -4
- package/esm/transport/index.js +0 -5
- package/esm/transport/index.js.map +0 -1
- package/esm/transport/sendWithRetryStrategy.d.ts +0 -39
- package/esm/transport/sendWithRetryStrategy.js +0 -146
- package/esm/transport/sendWithRetryStrategy.js.map +0 -1
- package/esm/transport/startBatchWithReplica.d.ts +0 -15
- package/esm/transport/startBatchWithReplica.js +0 -33
- package/esm/transport/startBatchWithReplica.js.map +0 -1
- package/src/domain/configuration/intakeSites.ts +0 -5
- package/src/domain/configuration/tags.ts +0 -43
- package/src/domain/tracekit/computeStackTrace.ts +0 -141
- package/src/domain/tracekit/index.ts +0 -3
- package/src/domain/tracekit/tracekit.ts +0 -96
- package/src/domain/tracekit/types.ts +0 -47
- package/src/domain/user/index.ts +0 -2
- package/src/domain/user/user.ts +0 -33
- package/src/domain/user/user.types.ts +0 -6
- package/src/tools/serialisation/contextManager.ts +0 -79
- package/src/tools/serialisation/heavyCustomerDataWarning.ts +0 -26
- package/src/transport/startBatchWithReplica.ts +0 -52
|
@@ -4,18 +4,27 @@ import type { Context, ContextArray, ContextValue } from './context'
|
|
|
4
4
|
import type { ObjectWithToJsonMethod } from './jsonStringify'
|
|
5
5
|
import { detachToJsonMethod } from './jsonStringify'
|
|
6
6
|
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
8
8
|
type PrimitivesAndFunctions = string | number | boolean | undefined | null | symbol | bigint | Function
|
|
9
9
|
type ExtendedContextValue = PrimitivesAndFunctions | object | ExtendedContext | ExtendedContextArray
|
|
10
|
-
|
|
10
|
+
interface ExtendedContext {
|
|
11
|
+
[key: string]: ExtendedContextValue
|
|
12
|
+
}
|
|
11
13
|
type ExtendedContextArray = ExtendedContextValue[]
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
interface ContainerElementToProcess {
|
|
14
16
|
source: ExtendedContextArray | ExtendedContext
|
|
15
17
|
target: ContextArray | Context
|
|
16
18
|
path: string
|
|
17
19
|
}
|
|
18
20
|
|
|
21
|
+
interface SanitizedEvent extends Context {
|
|
22
|
+
type: string
|
|
23
|
+
isTrusted: boolean
|
|
24
|
+
currentTarget: string | null | undefined
|
|
25
|
+
target: string | null | undefined
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
// The maximum size of a single event is 256KiB. By default, we ensure that user-provided data
|
|
20
29
|
// going through sanitize fits inside our events, while leaving room for other contexts, metadata, ...
|
|
21
30
|
const SANITIZE_DEFAULT_MAX_CHARACTER_COUNT = 220 * ONE_KIBI_BYTE
|
|
@@ -38,8 +47,8 @@ const KEY_DECORATION_LENGTH = 3
|
|
|
38
47
|
* - Size does not take into account indentation that can be applied to JSON.stringify
|
|
39
48
|
* - Non-numerical properties of Arrays are ignored. Same behavior as JSON.stringify
|
|
40
49
|
*
|
|
41
|
-
* @param source User-provided data meant to be serialized using JSON.stringify
|
|
42
|
-
* @param maxCharacterCount Maximum number of characters allowed in serialized form
|
|
50
|
+
* @param source - User-provided data meant to be serialized using JSON.stringify
|
|
51
|
+
* @param maxCharacterCount - Maximum number of characters allowed in serialized form
|
|
43
52
|
*/
|
|
44
53
|
export function sanitize(source: string, maxCharacterCount?: number): string | undefined
|
|
45
54
|
export function sanitize(source: Context, maxCharacterCount?: number): Context
|
|
@@ -59,7 +68,9 @@ export function sanitize(source: unknown, maxCharacterCount = SANITIZE_DEFAULT_M
|
|
|
59
68
|
containerQueue,
|
|
60
69
|
visitedObjectsWithPath
|
|
61
70
|
)
|
|
62
|
-
|
|
71
|
+
const serializedSanitizedData = JSON.stringify(sanitizedData)
|
|
72
|
+
let accumulatedCharacterCount = serializedSanitizedData ? serializedSanitizedData.length : 0
|
|
73
|
+
|
|
63
74
|
if (accumulatedCharacterCount > maxCharacterCount) {
|
|
64
75
|
warnOverCharacterLimit(maxCharacterCount, 'discarded', source)
|
|
65
76
|
return undefined
|
|
@@ -201,17 +212,15 @@ function sanitizePrimitivesAndFunctions(value: PrimitivesAndFunctions) {
|
|
|
201
212
|
* LIMITATIONS
|
|
202
213
|
* - If a class defines a toStringTag Symbol, it will fall in the catch-all method and prevent enumeration of properties.
|
|
203
214
|
* To avoid this, a toJSON method can be defined.
|
|
204
|
-
* - IE11 does not return a distinct type for objects such as Map, WeakMap, ... These objects will pass through and their
|
|
205
|
-
* properties enumerated if any.
|
|
206
|
-
*
|
|
207
215
|
*/
|
|
208
|
-
function sanitizeObjects(value: object) {
|
|
216
|
+
function sanitizeObjects(value: object): string | SanitizedEvent {
|
|
209
217
|
try {
|
|
210
|
-
// Handle events - Keep a simple implementation to avoid breaking changes
|
|
211
218
|
if (value instanceof Event) {
|
|
212
|
-
return
|
|
213
|
-
|
|
214
|
-
|
|
219
|
+
return sanitizeEvent(value)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (value instanceof RegExp) {
|
|
223
|
+
return `[RegExp] ${value.toString()}`
|
|
215
224
|
}
|
|
216
225
|
|
|
217
226
|
// Handle all remaining object types in a generic way
|
|
@@ -227,6 +236,15 @@ function sanitizeObjects(value: object) {
|
|
|
227
236
|
return '[Unserializable]'
|
|
228
237
|
}
|
|
229
238
|
|
|
239
|
+
function sanitizeEvent(event: Event): SanitizedEvent {
|
|
240
|
+
return {
|
|
241
|
+
type: event.type,
|
|
242
|
+
isTrusted: event.isTrusted,
|
|
243
|
+
currentTarget: event.currentTarget ? (sanitizeObjects(event.currentTarget) as string) : null,
|
|
244
|
+
target: event.target ? (sanitizeObjects(event.target) as string) : null,
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
230
248
|
/**
|
|
231
249
|
* Checks if a toJSON function exists and tries to execute it
|
|
232
250
|
*
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-browser stack trace computation.
|
|
3
|
+
*
|
|
4
|
+
* Reference implementation: https://github.com/csnover/TraceKit/blob/04530298073c3823de72deb0b97e7b38ca7bcb59/tracekit.js
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface StackFrame {
|
|
8
|
+
url?: string
|
|
9
|
+
func?: string
|
|
10
|
+
/** The arguments passed to the function, if known. */
|
|
11
|
+
args?: string[]
|
|
12
|
+
line?: number
|
|
13
|
+
column?: number
|
|
14
|
+
/** An array of source code lines; the middle element corresponds to the correct line. */
|
|
15
|
+
context?: string[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface StackTrace {
|
|
19
|
+
name?: string
|
|
20
|
+
message?: string
|
|
21
|
+
url?: string
|
|
22
|
+
stack: StackFrame[]
|
|
23
|
+
incomplete?: boolean
|
|
24
|
+
partial?: boolean
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const UNKNOWN_FUNCTION = '?'
|
|
28
|
+
|
|
29
|
+
export function computeStackTrace(ex: unknown): StackTrace {
|
|
30
|
+
const stack: StackFrame[] = []
|
|
31
|
+
|
|
32
|
+
let stackProperty = tryToGetString(ex, 'stack')
|
|
33
|
+
const exString = String(ex)
|
|
34
|
+
if (stackProperty && stackProperty.startsWith(exString)) {
|
|
35
|
+
stackProperty = stackProperty.slice(exString.length)
|
|
36
|
+
}
|
|
37
|
+
if (stackProperty) {
|
|
38
|
+
stackProperty.split('\n').forEach((line) => {
|
|
39
|
+
const stackFrame =
|
|
40
|
+
parseChromeLine(line) || parseChromeAnonymousLine(line) || parseWinLine(line) || parseGeckoLine(line)
|
|
41
|
+
if (stackFrame) {
|
|
42
|
+
if (!stackFrame.func && stackFrame.line) {
|
|
43
|
+
stackFrame.func = UNKNOWN_FUNCTION
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
stack.push(stackFrame)
|
|
47
|
+
}
|
|
48
|
+
})
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (stack.length > 0 && isWronglyReportingCustomErrors() && ex instanceof Error) {
|
|
52
|
+
// if we are wrongly reporting custom errors
|
|
53
|
+
const constructors: string[] = []
|
|
54
|
+
|
|
55
|
+
// go through each inherited constructor
|
|
56
|
+
let currentPrototype: object | undefined = ex
|
|
57
|
+
while (
|
|
58
|
+
(currentPrototype = Object.getPrototypeOf(currentPrototype)) &&
|
|
59
|
+
isNonNativeClassPrototype(currentPrototype)
|
|
60
|
+
) {
|
|
61
|
+
const constructorName = currentPrototype.constructor?.name || UNKNOWN_FUNCTION
|
|
62
|
+
constructors.push(constructorName)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// traverse the stacktrace in reverse order because the stacktrace starts with the last inherited constructor
|
|
66
|
+
// we check constructor names to ensure we remove the correct frame (and there isn't a weird unsupported environment behavior)
|
|
67
|
+
for (let i = constructors.length - 1; i >= 0 && stack[0]?.func === constructors[i]; i--) {
|
|
68
|
+
// if the first stack frame is the custom error constructor
|
|
69
|
+
// null stack frames may represent frames that failed to be parsed because the error class did not have a constructor
|
|
70
|
+
stack.shift() // remove it
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
message: tryToGetString(ex, 'message'),
|
|
76
|
+
name: tryToGetString(ex, 'name'),
|
|
77
|
+
stack,
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const fileUrl =
|
|
81
|
+
'((?:file|https?|blob|chrome-extension|electron|native|eval|webpack|snippet|<anonymous>|\\w+\\.|\\/).*?)'
|
|
82
|
+
const filePosition = '(?::(\\d+))'
|
|
83
|
+
const CHROME_LINE_RE = new RegExp(`^\\s*at (.*?) ?\\(${fileUrl}${filePosition}?${filePosition}?\\)?\\s*$`, 'i')
|
|
84
|
+
|
|
85
|
+
const CHROME_EVAL_RE = new RegExp(`\\((\\S*)${filePosition}${filePosition}\\)`)
|
|
86
|
+
|
|
87
|
+
function parseChromeLine(line: string): StackFrame | undefined {
|
|
88
|
+
const parts = CHROME_LINE_RE.exec(line)
|
|
89
|
+
|
|
90
|
+
if (!parts) {
|
|
91
|
+
return
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const isNative = parts[2] && parts[2].indexOf('native') === 0 // start of line
|
|
95
|
+
const isEval = parts[2] && parts[2].indexOf('eval') === 0 // start of line
|
|
96
|
+
const submatch = CHROME_EVAL_RE.exec(parts[2])
|
|
97
|
+
|
|
98
|
+
if (isEval && submatch) {
|
|
99
|
+
// throw out eval line/column and use top-most line/column number
|
|
100
|
+
parts[2] = submatch[1] // url
|
|
101
|
+
parts[3] = submatch[2] // line
|
|
102
|
+
parts[4] = submatch[3] // column
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return {
|
|
106
|
+
args: isNative ? [parts[2]] : [],
|
|
107
|
+
column: parts[4] ? +parts[4] : undefined,
|
|
108
|
+
func: parts[1] || UNKNOWN_FUNCTION,
|
|
109
|
+
line: parts[3] ? +parts[3] : undefined,
|
|
110
|
+
url: !isNative ? parts[2] : undefined,
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const CHROME_ANONYMOUS_FUNCTION_RE = new RegExp(`^\\s*at ?${fileUrl}${filePosition}?${filePosition}??\\s*$`, 'i')
|
|
115
|
+
|
|
116
|
+
function parseChromeAnonymousLine(line: string): StackFrame | undefined {
|
|
117
|
+
const parts = CHROME_ANONYMOUS_FUNCTION_RE.exec(line)
|
|
118
|
+
|
|
119
|
+
if (!parts) {
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
args: [],
|
|
125
|
+
column: parts[3] ? +parts[3] : undefined,
|
|
126
|
+
func: UNKNOWN_FUNCTION,
|
|
127
|
+
line: parts[2] ? +parts[2] : undefined,
|
|
128
|
+
url: parts[1],
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const WINJS_LINE_RE =
|
|
133
|
+
/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i
|
|
134
|
+
|
|
135
|
+
function parseWinLine(line: string): StackFrame | undefined {
|
|
136
|
+
const parts = WINJS_LINE_RE.exec(line)
|
|
137
|
+
if (!parts) {
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
args: [],
|
|
143
|
+
column: parts[4] ? +parts[4] : undefined,
|
|
144
|
+
func: parts[1] || UNKNOWN_FUNCTION,
|
|
145
|
+
line: +parts[3],
|
|
146
|
+
url: parts[2],
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const GECKO_LINE_RE =
|
|
151
|
+
/^\s*(.*?)(?:\((.*?)\))?(?:(?:(?:^|@)((?:file|https?|blob|chrome|webpack|resource|capacitor|\[native).*?|[^@]*bundle|\[wasm code\])(?::(\d+))?(?::(\d+))?)|@)\s*$/i
|
|
152
|
+
const GECKO_EVAL_RE = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i
|
|
153
|
+
|
|
154
|
+
function parseGeckoLine(line: string): StackFrame | undefined {
|
|
155
|
+
const parts = GECKO_LINE_RE.exec(line)
|
|
156
|
+
if (!parts) {
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const isEval = parts[3] && parts[3].indexOf(' > eval') > -1
|
|
161
|
+
const submatch = GECKO_EVAL_RE.exec(parts[3])
|
|
162
|
+
|
|
163
|
+
if (isEval && submatch) {
|
|
164
|
+
// throw out eval line/column and use top-most line number
|
|
165
|
+
parts[3] = submatch[1]
|
|
166
|
+
parts[4] = submatch[2]
|
|
167
|
+
parts[5] = undefined! // no column when eval
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return {
|
|
171
|
+
args: parts[2] ? parts[2].split(',') : [],
|
|
172
|
+
column: parts[5] ? +parts[5] : undefined,
|
|
173
|
+
func: parts[1] || UNKNOWN_FUNCTION,
|
|
174
|
+
line: parts[4] ? +parts[4] : undefined,
|
|
175
|
+
url: parts[3],
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function tryToGetString(candidate: unknown, property: string) {
|
|
180
|
+
if (typeof candidate !== 'object' || !candidate || !(property in candidate)) {
|
|
181
|
+
return undefined
|
|
182
|
+
}
|
|
183
|
+
const value = (candidate as { [k: string]: unknown })[property]
|
|
184
|
+
return typeof value === 'string' ? value : undefined
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function computeStackTraceFromOnErrorMessage(
|
|
188
|
+
messageObj: unknown,
|
|
189
|
+
url?: string,
|
|
190
|
+
line?: number,
|
|
191
|
+
column?: number
|
|
192
|
+
): StackTrace | undefined {
|
|
193
|
+
if (url === undefined) {
|
|
194
|
+
return
|
|
195
|
+
}
|
|
196
|
+
const { name, message } = tryToParseMessage(messageObj)
|
|
197
|
+
return {
|
|
198
|
+
name,
|
|
199
|
+
message,
|
|
200
|
+
stack: [{ url, column, line }],
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types
|
|
205
|
+
const ERROR_TYPES_RE =
|
|
206
|
+
/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?([\s\S]*)$/
|
|
207
|
+
|
|
208
|
+
function tryToParseMessage(messageObj: unknown) {
|
|
209
|
+
let name
|
|
210
|
+
let message
|
|
211
|
+
if ({}.toString.call(messageObj) === '[object String]') {
|
|
212
|
+
;[, name, message] = ERROR_TYPES_RE.exec(messageObj as string)!
|
|
213
|
+
}
|
|
214
|
+
return { name, message }
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Custom error stacktrace fix
|
|
218
|
+
// Some browsers (safari/firefox) add the error constructor as a frame in the stacktrace
|
|
219
|
+
// In order to normalize the stacktrace, we need to remove it
|
|
220
|
+
|
|
221
|
+
function isNonNativeClassPrototype(prototype: object) {
|
|
222
|
+
return String(prototype.constructor).startsWith('class ')
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
let isWronglyReportingCustomErrorsCache: boolean | undefined
|
|
226
|
+
|
|
227
|
+
function isWronglyReportingCustomErrors() {
|
|
228
|
+
if (isWronglyReportingCustomErrorsCache !== undefined) {
|
|
229
|
+
return isWronglyReportingCustomErrorsCache
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/* eslint-disable no-restricted-syntax */
|
|
233
|
+
class DatadogTestCustomError extends Error {
|
|
234
|
+
constructor() {
|
|
235
|
+
super()
|
|
236
|
+
this.name = 'Error' // set name to Error so that no browser would default to the constructor name
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const [customError, nativeError] = [DatadogTestCustomError, Error].map((errConstructor) => new errConstructor()) // so that both errors should exactly have the same stacktrace
|
|
241
|
+
|
|
242
|
+
isWronglyReportingCustomErrorsCache =
|
|
243
|
+
// If customError is not a class, it means that this was built with ES5 as target, converting the class to a normal object.
|
|
244
|
+
// Thus, error constructors will be reported on all browsers, which is the expected behavior.
|
|
245
|
+
isNonNativeClassPrototype(Object.getPrototypeOf(customError)) &&
|
|
246
|
+
// If the browser is correctly reporting the stacktrace, the normal error stacktrace should be the same as the custom error stacktrace
|
|
247
|
+
nativeError.stack !== customError.stack
|
|
248
|
+
|
|
249
|
+
return isWronglyReportingCustomErrorsCache
|
|
250
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { callMonitored } from '../monitor'
|
|
2
|
+
import type { StackTrace } from './computeStackTrace'
|
|
3
|
+
import { computeStackTrace } from './computeStackTrace'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a stacktrace without SDK internal frames.
|
|
7
|
+
* Constraints:
|
|
8
|
+
* - Has to be called at the utmost position of the call stack.
|
|
9
|
+
* - No monitored function should encapsulate it, that is why we need to use callMonitored inside it.
|
|
10
|
+
*/
|
|
11
|
+
export function createHandlingStack(
|
|
12
|
+
type: 'console error' | 'action' | 'error' | 'instrumented method' | 'log' | 'react error'
|
|
13
|
+
): string {
|
|
14
|
+
/**
|
|
15
|
+
* Skip the two internal frames:
|
|
16
|
+
* - SDK API (console.error, ...)
|
|
17
|
+
* - this function
|
|
18
|
+
* in order to keep only the user calls
|
|
19
|
+
*/
|
|
20
|
+
const internalFramesToSkip = 2
|
|
21
|
+
const error = new Error(type)
|
|
22
|
+
error.name = 'HandlingStack'
|
|
23
|
+
let formattedStack: string
|
|
24
|
+
|
|
25
|
+
callMonitored(() => {
|
|
26
|
+
const stackTrace = computeStackTrace(error)
|
|
27
|
+
stackTrace.stack = stackTrace.stack.slice(internalFramesToSkip)
|
|
28
|
+
formattedStack = toStackTraceString(stackTrace)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return formattedStack!
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function toStackTraceString(stack: StackTrace) {
|
|
35
|
+
let result = formatErrorMessage(stack)
|
|
36
|
+
stack.stack.forEach((frame) => {
|
|
37
|
+
const func = frame.func === '?' ? '<anonymous>' : frame.func
|
|
38
|
+
const args = frame.args && frame.args.length > 0 ? `(${frame.args.join(', ')})` : ''
|
|
39
|
+
const line = frame.line ? `:${frame.line}` : ''
|
|
40
|
+
const column = frame.line && frame.column ? `:${frame.column}` : ''
|
|
41
|
+
result += `\n at ${func!}${args} @ ${frame.url!}${line}${column}`
|
|
42
|
+
})
|
|
43
|
+
return result
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function formatErrorMessage(stack: StackTrace) {
|
|
47
|
+
return `${stack.name || 'Error'}: ${stack.message!}`
|
|
48
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ONE_SECOND } from './utils/timeUtils'
|
|
2
|
+
import { requestIdleCallback } from './requestIdleCallback'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Maximum delay before starting to execute tasks in the queue. We don't want to wait too long
|
|
6
|
+
* before running tasks, as it might hurt reliability (ex: if the user navigates away, we might lose
|
|
7
|
+
* the opportunity to send some data). We also don't want to run tasks too often, as it might hurt
|
|
8
|
+
* performance.
|
|
9
|
+
*/
|
|
10
|
+
const IDLE_CALLBACK_TIMEOUT = ONE_SECOND
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Maximum amount of time allocated to running tasks when a timeout (`IDLE_CALLBACK_TIMEOUT`) is
|
|
14
|
+
* reached. We should not run tasks for too long as it will hurt performance, but we should still
|
|
15
|
+
* run some tasks to avoid postponing them forever.
|
|
16
|
+
*
|
|
17
|
+
* Rational: Running tasks for 30ms every second (IDLE_CALLBACK_TIMEOUT) should be acceptable.
|
|
18
|
+
*/
|
|
19
|
+
export const MAX_EXECUTION_TIME_ON_TIMEOUT = 30
|
|
20
|
+
|
|
21
|
+
export interface TaskQueue {
|
|
22
|
+
push(task: Task): void
|
|
23
|
+
stop(): void
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type Task = () => void
|
|
27
|
+
|
|
28
|
+
export function createTaskQueue(): TaskQueue {
|
|
29
|
+
const pendingTasks: Task[] = []
|
|
30
|
+
|
|
31
|
+
function run(deadline: IdleDeadline) {
|
|
32
|
+
let executionTimeRemaining: () => number
|
|
33
|
+
if (deadline.didTimeout) {
|
|
34
|
+
const start = performance.now()
|
|
35
|
+
executionTimeRemaining = () => MAX_EXECUTION_TIME_ON_TIMEOUT - (performance.now() - start)
|
|
36
|
+
} else {
|
|
37
|
+
executionTimeRemaining = deadline.timeRemaining.bind(deadline)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
while (executionTimeRemaining() > 0 && pendingTasks.length) {
|
|
41
|
+
pendingTasks.shift()!()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (pendingTasks.length) {
|
|
45
|
+
scheduleNextRun()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function scheduleNextRun() {
|
|
50
|
+
requestIdleCallback(run, { timeout: IDLE_CALLBACK_TIMEOUT })
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
push(task) {
|
|
55
|
+
if (pendingTasks.push(task) === 1) {
|
|
56
|
+
scheduleNextRun()
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
stop() {
|
|
60
|
+
pendingTasks.length = 0
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
}
|
package/src/tools/timer.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getZoneJsOriginalValue } from './getZoneJsOriginalValue'
|
|
2
2
|
import { monitor } from './monitor'
|
|
3
|
-
import { getGlobalObject } from './
|
|
3
|
+
import { getGlobalObject } from './globalObject'
|
|
4
4
|
|
|
5
5
|
export type TimeoutId = ReturnType<typeof globalThis.setTimeout>
|
|
6
6
|
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import { arrayFrom } from './polyfills'
|
|
2
|
-
|
|
3
1
|
export function removeDuplicates<T>(array: T[]) {
|
|
4
2
|
const set = new Set<T>()
|
|
5
3
|
array.forEach((item) => set.add(item))
|
|
6
|
-
return
|
|
4
|
+
return Array.from(set)
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function removeItem<T>(array: T[], item: T) {
|
|
8
|
+
const index = array.indexOf(item)
|
|
9
|
+
if (index >= 0) {
|
|
10
|
+
array.splice(index, 1)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function isNonEmptyArray<T>(value: unknown): value is T[] {
|
|
14
|
+
return Array.isArray(value) && value.length > 0
|
|
7
15
|
}
|
|
@@ -1,7 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// Exported only for tests
|
|
2
|
+
export const enum Browser {
|
|
3
|
+
CHROMIUM,
|
|
4
|
+
SAFARI,
|
|
5
|
+
OTHER,
|
|
3
6
|
}
|
|
4
7
|
|
|
5
8
|
export function isChromium() {
|
|
6
|
-
return
|
|
9
|
+
return detectBrowserCached() === Browser.CHROMIUM
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function isSafari() {
|
|
13
|
+
return detectBrowserCached() === Browser.SAFARI
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let browserCache: Browser | undefined
|
|
17
|
+
function detectBrowserCached() {
|
|
18
|
+
return browserCache ?? (browserCache = detectBrowser())
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Exported only for tests
|
|
22
|
+
export function detectBrowser(browserWindow: Window = window) {
|
|
23
|
+
const userAgent = browserWindow.navigator.userAgent
|
|
24
|
+
if ((browserWindow as any).chrome || /HeadlessChrome/.test(userAgent)) {
|
|
25
|
+
return Browser.CHROMIUM
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (
|
|
29
|
+
// navigator.vendor is deprecated, but it is the most resilient way we found to detect
|
|
30
|
+
// "Apple maintained browsers" (AKA Safari). If one day it gets removed, we still have the
|
|
31
|
+
// useragent test as a semi-working fallback.
|
|
32
|
+
browserWindow.navigator.vendor?.indexOf('Apple') === 0 ||
|
|
33
|
+
(/safari/i.test(userAgent) && !/chrome|android/i.test(userAgent))
|
|
34
|
+
) {
|
|
35
|
+
return Browser.SAFARI
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return Browser.OTHER
|
|
7
39
|
}
|
|
@@ -4,6 +4,12 @@ export const ONE_MEBI_BYTE = 1024 * ONE_KIBI_BYTE
|
|
|
4
4
|
// eslint-disable-next-line no-control-regex
|
|
5
5
|
const HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/
|
|
6
6
|
|
|
7
|
+
export interface Uint8ArrayBuffer extends Uint8Array {
|
|
8
|
+
readonly buffer: ArrayBuffer
|
|
9
|
+
|
|
10
|
+
subarray(begin?: number, end?: number): Uint8ArrayBuffer
|
|
11
|
+
}
|
|
12
|
+
|
|
7
13
|
export function computeBytesCount(candidate: string): number {
|
|
8
14
|
// Accurate bytes count computations can degrade performances when there is a lot of events to process
|
|
9
15
|
if (!HAS_MULTI_BYTES_CHARACTERS.test(candidate)) {
|
|
@@ -17,9 +23,14 @@ export function computeBytesCount(candidate: string): number {
|
|
|
17
23
|
return new Blob([candidate]).size
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
export function concatBuffers(buffers:
|
|
26
|
+
export function concatBuffers(buffers: Uint8ArrayBuffer[]): Uint8ArrayBuffer {
|
|
27
|
+
// Optimization: if there is a single buffer, no need to copy it
|
|
28
|
+
if (buffers.length === 1) {
|
|
29
|
+
return buffers[0]
|
|
30
|
+
}
|
|
31
|
+
|
|
21
32
|
const length = buffers.reduce((total, buffer) => total + buffer.length, 0)
|
|
22
|
-
const result = new Uint8Array(length)
|
|
33
|
+
const result: Uint8ArrayBuffer = new Uint8Array(length)
|
|
23
34
|
let offset = 0
|
|
24
35
|
for (const buffer of buffers) {
|
|
25
36
|
result.set(buffer, offset)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { assign } from './polyfills'
|
|
2
|
-
|
|
3
1
|
export function shallowClone<T>(object: T): T & Record<string, never> {
|
|
4
|
-
return
|
|
2
|
+
return { ...object } as T & Record<string, never>
|
|
5
3
|
}
|
|
6
4
|
|
|
7
5
|
export function objectHasValue<T extends { [key: string]: unknown }>(object: T, value: unknown): value is T[keyof T] {
|