@sentry/browser 11.0.0-alpha.1 → 11.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/build/npm/cjs/dev/client.js +5 -5
- package/build/npm/cjs/dev/client.js.map +1 -1
- package/build/npm/cjs/dev/diagnose-sdk.js +3 -3
- package/build/npm/cjs/dev/diagnose-sdk.js.map +1 -1
- package/build/npm/cjs/dev/eventbuilder.js +25 -25
- package/build/npm/cjs/dev/eventbuilder.js.map +1 -1
- package/build/npm/cjs/dev/helpers.js +13 -12
- package/build/npm/cjs/dev/helpers.js.map +1 -1
- package/build/npm/cjs/dev/index.js +87 -84
- package/build/npm/cjs/dev/index.js.map +1 -1
- package/build/npm/cjs/dev/integrations/bfcacheMetrics.js +115 -0
- package/build/npm/cjs/dev/integrations/bfcacheMetrics.js.map +1 -0
- package/build/npm/cjs/dev/integrations/breadcrumbs.js +28 -28
- package/build/npm/cjs/dev/integrations/breadcrumbs.js.map +1 -1
- package/build/npm/cjs/dev/integrations/browserapierrors.js +16 -16
- package/build/npm/cjs/dev/integrations/browserapierrors.js.map +1 -1
- package/build/npm/cjs/dev/integrations/browsersession.js +9 -9
- package/build/npm/cjs/dev/integrations/browsersession.js.map +1 -1
- package/build/npm/cjs/dev/integrations/contextlines.js +5 -5
- package/build/npm/cjs/dev/integrations/contextlines.js.map +1 -1
- package/build/npm/cjs/dev/integrations/culturecontext.js +3 -3
- package/build/npm/cjs/dev/integrations/culturecontext.js.map +1 -1
- package/build/npm/cjs/dev/integrations/featureFlags/growthbook/integration.js +2 -2
- package/build/npm/cjs/dev/integrations/featureFlags/growthbook/integration.js.map +1 -1
- package/build/npm/cjs/dev/integrations/featureFlags/launchdarkly/integration.js +5 -5
- package/build/npm/cjs/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
- package/build/npm/cjs/dev/integrations/featureFlags/openfeature/integration.js +7 -7
- package/build/npm/cjs/dev/integrations/featureFlags/openfeature/integration.js.map +1 -1
- package/build/npm/cjs/dev/integrations/featureFlags/statsig/integration.js +5 -5
- package/build/npm/cjs/dev/integrations/featureFlags/statsig/integration.js.map +1 -1
- package/build/npm/cjs/dev/integrations/featureFlags/unleash/integration.js +7 -7
- package/build/npm/cjs/dev/integrations/featureFlags/unleash/integration.js.map +1 -1
- package/build/npm/cjs/dev/integrations/fetchStreamPerformance.js +11 -5
- package/build/npm/cjs/dev/integrations/fetchStreamPerformance.js.map +1 -1
- package/build/npm/cjs/dev/integrations/globalhandlers.js +17 -16
- package/build/npm/cjs/dev/integrations/globalhandlers.js.map +1 -1
- package/build/npm/cjs/dev/integrations/graphqlClient.js +28 -15
- package/build/npm/cjs/dev/integrations/graphqlClient.js.map +1 -1
- package/build/npm/cjs/dev/integrations/httpclient.js +20 -23
- package/build/npm/cjs/dev/integrations/httpclient.js.map +1 -1
- package/build/npm/cjs/dev/integrations/httpcontext.js +6 -7
- package/build/npm/cjs/dev/integrations/httpcontext.js.map +1 -1
- package/build/npm/cjs/dev/integrations/linkederrors.js +3 -3
- package/build/npm/cjs/dev/integrations/linkederrors.js.map +1 -1
- package/build/npm/cjs/dev/integrations/reportingobserver.js +10 -7
- package/build/npm/cjs/dev/integrations/reportingobserver.js.map +1 -1
- package/build/npm/cjs/dev/integrations/spotlight.js +8 -7
- package/build/npm/cjs/dev/integrations/spotlight.js.map +1 -1
- package/build/npm/cjs/dev/integrations/view-hierarchy.js +4 -3
- package/build/npm/cjs/dev/integrations/view-hierarchy.js.map +1 -1
- package/build/npm/cjs/dev/integrations/webVitals.js +3 -3
- package/build/npm/cjs/dev/integrations/webVitals.js.map +1 -1
- package/build/npm/cjs/dev/integrations/webWorker.js +18 -18
- package/build/npm/cjs/dev/integrations/webWorker.js.map +1 -1
- package/build/npm/cjs/dev/profiling/UIProfiler.js +33 -33
- package/build/npm/cjs/dev/profiling/UIProfiler.js.map +1 -1
- package/build/npm/cjs/dev/profiling/index.js +7 -7
- package/build/npm/cjs/dev/profiling/index.js.map +1 -1
- package/build/npm/cjs/dev/profiling/integration.js +8 -8
- package/build/npm/cjs/dev/profiling/integration.js.map +1 -1
- package/build/npm/cjs/dev/profiling/utils.js +16 -16
- package/build/npm/cjs/dev/profiling/utils.js.map +1 -1
- package/build/npm/cjs/dev/report-dialog.js +7 -7
- package/build/npm/cjs/dev/report-dialog.js.map +1 -1
- package/build/npm/cjs/dev/sdk.js +9 -13
- package/build/npm/cjs/dev/sdk.js.map +1 -1
- package/build/npm/cjs/dev/stack-parsers.js +10 -10
- package/build/npm/cjs/dev/stack-parsers.js.map +1 -1
- package/build/npm/cjs/dev/tracing/backgroundtab.js +7 -7
- package/build/npm/cjs/dev/tracing/backgroundtab.js.map +1 -1
- package/build/npm/cjs/dev/tracing/browserTracingIntegration.js +66 -118
- package/build/npm/cjs/dev/tracing/browserTracingIntegration.js.map +1 -1
- package/build/npm/cjs/dev/tracing/linkedTraces.js +10 -12
- package/build/npm/cjs/dev/tracing/linkedTraces.js.map +1 -1
- package/build/npm/cjs/dev/tracing/reportPageLoaded.js +2 -2
- package/build/npm/cjs/dev/tracing/reportPageLoaded.js.map +1 -1
- package/build/npm/cjs/dev/tracing/request.js +40 -32
- package/build/npm/cjs/dev/tracing/request.js.map +1 -1
- package/build/npm/cjs/dev/tracing/setActiveSpan.js +5 -5
- package/build/npm/cjs/dev/tracing/setActiveSpan.js.map +1 -1
- package/build/npm/cjs/dev/transports/fetch.js +3 -3
- package/build/npm/cjs/dev/transports/fetch.js.map +1 -1
- package/build/npm/cjs/dev/transports/offline.js +5 -5
- package/build/npm/cjs/dev/transports/offline.js.map +1 -1
- package/build/npm/cjs/dev/userfeedback.js +3 -3
- package/build/npm/cjs/dev/userfeedback.js.map +1 -1
- package/build/npm/cjs/dev/utils/detectBrowserExtension.js +4 -3
- package/build/npm/cjs/dev/utils/detectBrowserExtension.js.map +1 -1
- package/build/npm/cjs/dev/utils/lazyLoadIntegration.js +4 -3
- package/build/npm/cjs/dev/utils/lazyLoadIntegration.js.map +1 -1
- package/build/npm/cjs/prod/client.js +5 -5
- package/build/npm/cjs/prod/client.js.map +1 -1
- package/build/npm/cjs/prod/diagnose-sdk.js +3 -3
- package/build/npm/cjs/prod/diagnose-sdk.js.map +1 -1
- package/build/npm/cjs/prod/eventbuilder.js +25 -25
- package/build/npm/cjs/prod/eventbuilder.js.map +1 -1
- package/build/npm/cjs/prod/helpers.js +13 -12
- package/build/npm/cjs/prod/helpers.js.map +1 -1
- package/build/npm/cjs/prod/index.js +87 -84
- package/build/npm/cjs/prod/index.js.map +1 -1
- package/build/npm/cjs/prod/integrations/bfcacheMetrics.js +115 -0
- package/build/npm/cjs/prod/integrations/bfcacheMetrics.js.map +1 -0
- package/build/npm/cjs/prod/integrations/breadcrumbs.js +28 -28
- package/build/npm/cjs/prod/integrations/breadcrumbs.js.map +1 -1
- package/build/npm/cjs/prod/integrations/browserapierrors.js +16 -16
- package/build/npm/cjs/prod/integrations/browserapierrors.js.map +1 -1
- package/build/npm/cjs/prod/integrations/browsersession.js +9 -9
- package/build/npm/cjs/prod/integrations/browsersession.js.map +1 -1
- package/build/npm/cjs/prod/integrations/contextlines.js +5 -5
- package/build/npm/cjs/prod/integrations/contextlines.js.map +1 -1
- package/build/npm/cjs/prod/integrations/culturecontext.js +3 -3
- package/build/npm/cjs/prod/integrations/culturecontext.js.map +1 -1
- package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js +2 -2
- package/build/npm/cjs/prod/integrations/featureFlags/growthbook/integration.js.map +1 -1
- package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js +5 -5
- package/build/npm/cjs/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
- package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js +7 -7
- package/build/npm/cjs/prod/integrations/featureFlags/openfeature/integration.js.map +1 -1
- package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js +5 -5
- package/build/npm/cjs/prod/integrations/featureFlags/statsig/integration.js.map +1 -1
- package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js +7 -7
- package/build/npm/cjs/prod/integrations/featureFlags/unleash/integration.js.map +1 -1
- package/build/npm/cjs/prod/integrations/fetchStreamPerformance.js +11 -5
- package/build/npm/cjs/prod/integrations/fetchStreamPerformance.js.map +1 -1
- package/build/npm/cjs/prod/integrations/globalhandlers.js +17 -16
- package/build/npm/cjs/prod/integrations/globalhandlers.js.map +1 -1
- package/build/npm/cjs/prod/integrations/graphqlClient.js +28 -15
- package/build/npm/cjs/prod/integrations/graphqlClient.js.map +1 -1
- package/build/npm/cjs/prod/integrations/httpclient.js +20 -23
- package/build/npm/cjs/prod/integrations/httpclient.js.map +1 -1
- package/build/npm/cjs/prod/integrations/httpcontext.js +6 -7
- package/build/npm/cjs/prod/integrations/httpcontext.js.map +1 -1
- package/build/npm/cjs/prod/integrations/linkederrors.js +3 -3
- package/build/npm/cjs/prod/integrations/linkederrors.js.map +1 -1
- package/build/npm/cjs/prod/integrations/reportingobserver.js +10 -7
- package/build/npm/cjs/prod/integrations/reportingobserver.js.map +1 -1
- package/build/npm/cjs/prod/integrations/spotlight.js +8 -7
- package/build/npm/cjs/prod/integrations/spotlight.js.map +1 -1
- package/build/npm/cjs/prod/integrations/view-hierarchy.js +4 -3
- package/build/npm/cjs/prod/integrations/view-hierarchy.js.map +1 -1
- package/build/npm/cjs/prod/integrations/webVitals.js +3 -3
- package/build/npm/cjs/prod/integrations/webVitals.js.map +1 -1
- package/build/npm/cjs/prod/integrations/webWorker.js +18 -18
- package/build/npm/cjs/prod/integrations/webWorker.js.map +1 -1
- package/build/npm/cjs/prod/profiling/UIProfiler.js +33 -33
- package/build/npm/cjs/prod/profiling/UIProfiler.js.map +1 -1
- package/build/npm/cjs/prod/profiling/index.js +7 -7
- package/build/npm/cjs/prod/profiling/index.js.map +1 -1
- package/build/npm/cjs/prod/profiling/integration.js +8 -8
- package/build/npm/cjs/prod/profiling/integration.js.map +1 -1
- package/build/npm/cjs/prod/profiling/utils.js +16 -16
- package/build/npm/cjs/prod/profiling/utils.js.map +1 -1
- package/build/npm/cjs/prod/report-dialog.js +7 -7
- package/build/npm/cjs/prod/report-dialog.js.map +1 -1
- package/build/npm/cjs/prod/sdk.js +9 -13
- package/build/npm/cjs/prod/sdk.js.map +1 -1
- package/build/npm/cjs/prod/stack-parsers.js +10 -10
- package/build/npm/cjs/prod/stack-parsers.js.map +1 -1
- package/build/npm/cjs/prod/tracing/backgroundtab.js +7 -7
- package/build/npm/cjs/prod/tracing/backgroundtab.js.map +1 -1
- package/build/npm/cjs/prod/tracing/browserTracingIntegration.js +66 -118
- package/build/npm/cjs/prod/tracing/browserTracingIntegration.js.map +1 -1
- package/build/npm/cjs/prod/tracing/linkedTraces.js +10 -12
- package/build/npm/cjs/prod/tracing/linkedTraces.js.map +1 -1
- package/build/npm/cjs/prod/tracing/reportPageLoaded.js +2 -2
- package/build/npm/cjs/prod/tracing/reportPageLoaded.js.map +1 -1
- package/build/npm/cjs/prod/tracing/request.js +40 -32
- package/build/npm/cjs/prod/tracing/request.js.map +1 -1
- package/build/npm/cjs/prod/tracing/setActiveSpan.js +5 -5
- package/build/npm/cjs/prod/tracing/setActiveSpan.js.map +1 -1
- package/build/npm/cjs/prod/transports/fetch.js +3 -3
- package/build/npm/cjs/prod/transports/fetch.js.map +1 -1
- package/build/npm/cjs/prod/transports/offline.js +5 -5
- package/build/npm/cjs/prod/transports/offline.js.map +1 -1
- package/build/npm/cjs/prod/userfeedback.js +3 -3
- package/build/npm/cjs/prod/userfeedback.js.map +1 -1
- package/build/npm/cjs/prod/utils/detectBrowserExtension.js +4 -3
- package/build/npm/cjs/prod/utils/detectBrowserExtension.js.map +1 -1
- package/build/npm/cjs/prod/utils/lazyLoadIntegration.js +4 -3
- package/build/npm/cjs/prod/utils/lazyLoadIntegration.js.map +1 -1
- package/build/npm/esm/dev/client.js +1 -1
- package/build/npm/esm/dev/client.js.map +1 -1
- package/build/npm/esm/dev/diagnose-sdk.js +1 -1
- package/build/npm/esm/dev/diagnose-sdk.js.map +1 -1
- package/build/npm/esm/dev/eventbuilder.js +1 -1
- package/build/npm/esm/dev/eventbuilder.js.map +1 -1
- package/build/npm/esm/dev/helpers.js +2 -1
- package/build/npm/esm/dev/helpers.js.map +1 -1
- package/build/npm/esm/dev/index.js +5 -4
- package/build/npm/esm/dev/index.js.map +1 -1
- package/build/npm/esm/dev/integrations/bfcacheMetrics.js +111 -0
- package/build/npm/esm/dev/integrations/bfcacheMetrics.js.map +1 -0
- package/build/npm/esm/dev/integrations/breadcrumbs.js +2 -2
- package/build/npm/esm/dev/integrations/breadcrumbs.js.map +1 -1
- package/build/npm/esm/dev/integrations/browserapierrors.js +1 -1
- package/build/npm/esm/dev/integrations/browserapierrors.js.map +1 -1
- package/build/npm/esm/dev/integrations/browsersession.js +1 -1
- package/build/npm/esm/dev/integrations/browsersession.js.map +1 -1
- package/build/npm/esm/dev/integrations/contextlines.js +1 -1
- package/build/npm/esm/dev/integrations/contextlines.js.map +1 -1
- package/build/npm/esm/dev/integrations/culturecontext.js +1 -1
- package/build/npm/esm/dev/integrations/culturecontext.js.map +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/growthbook/integration.js +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/growthbook/integration.js.map +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/launchdarkly/integration.js +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/openfeature/integration.js +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/openfeature/integration.js.map +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/statsig/integration.js +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/statsig/integration.js.map +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/unleash/integration.js +1 -1
- package/build/npm/esm/dev/integrations/featureFlags/unleash/integration.js.map +1 -1
- package/build/npm/esm/dev/integrations/fetchStreamPerformance.js +12 -6
- package/build/npm/esm/dev/integrations/fetchStreamPerformance.js.map +1 -1
- package/build/npm/esm/dev/integrations/globalhandlers.js +2 -1
- package/build/npm/esm/dev/integrations/globalhandlers.js.map +1 -1
- package/build/npm/esm/dev/integrations/graphqlClient.js +21 -8
- package/build/npm/esm/dev/integrations/graphqlClient.js.map +1 -1
- package/build/npm/esm/dev/integrations/httpclient.js +1 -4
- package/build/npm/esm/dev/integrations/httpclient.js.map +1 -1
- package/build/npm/esm/dev/integrations/httpcontext.js +1 -2
- package/build/npm/esm/dev/integrations/httpcontext.js.map +1 -1
- package/build/npm/esm/dev/integrations/linkederrors.js +1 -1
- package/build/npm/esm/dev/integrations/linkederrors.js.map +1 -1
- package/build/npm/esm/dev/integrations/reportingobserver.js +4 -1
- package/build/npm/esm/dev/integrations/reportingobserver.js.map +1 -1
- package/build/npm/esm/dev/integrations/spotlight.js +3 -2
- package/build/npm/esm/dev/integrations/spotlight.js.map +1 -1
- package/build/npm/esm/dev/integrations/view-hierarchy.js +2 -1
- package/build/npm/esm/dev/integrations/view-hierarchy.js.map +1 -1
- package/build/npm/esm/dev/integrations/webVitals.js +1 -1
- package/build/npm/esm/dev/integrations/webVitals.js.map +1 -1
- package/build/npm/esm/dev/integrations/webWorker.js +1 -1
- package/build/npm/esm/dev/integrations/webWorker.js.map +1 -1
- package/build/npm/esm/dev/package.json +1 -1
- package/build/npm/esm/dev/profiling/UIProfiler.js +1 -1
- package/build/npm/esm/dev/profiling/UIProfiler.js.map +1 -1
- package/build/npm/esm/dev/profiling/index.js +1 -1
- package/build/npm/esm/dev/profiling/index.js.map +1 -1
- package/build/npm/esm/dev/profiling/integration.js +1 -1
- package/build/npm/esm/dev/profiling/integration.js.map +1 -1
- package/build/npm/esm/dev/profiling/utils.js +1 -1
- package/build/npm/esm/dev/profiling/utils.js.map +1 -1
- package/build/npm/esm/dev/report-dialog.js +1 -1
- package/build/npm/esm/dev/report-dialog.js.map +1 -1
- package/build/npm/esm/dev/sdk.js +1 -5
- package/build/npm/esm/dev/sdk.js.map +1 -1
- package/build/npm/esm/dev/stack-parsers.js +1 -1
- package/build/npm/esm/dev/stack-parsers.js.map +1 -1
- package/build/npm/esm/dev/tracing/backgroundtab.js +1 -1
- package/build/npm/esm/dev/tracing/backgroundtab.js.map +1 -1
- package/build/npm/esm/dev/tracing/browserTracingIntegration.js +34 -85
- package/build/npm/esm/dev/tracing/browserTracingIntegration.js.map +1 -1
- package/build/npm/esm/dev/tracing/linkedTraces.js +1 -3
- package/build/npm/esm/dev/tracing/linkedTraces.js.map +1 -1
- package/build/npm/esm/dev/tracing/reportPageLoaded.js +1 -1
- package/build/npm/esm/dev/tracing/reportPageLoaded.js.map +1 -1
- package/build/npm/esm/dev/tracing/request.js +21 -13
- package/build/npm/esm/dev/tracing/request.js.map +1 -1
- package/build/npm/esm/dev/tracing/setActiveSpan.js +1 -1
- package/build/npm/esm/dev/tracing/setActiveSpan.js.map +1 -1
- package/build/npm/esm/dev/transports/fetch.js +1 -1
- package/build/npm/esm/dev/transports/fetch.js.map +1 -1
- package/build/npm/esm/dev/transports/offline.js +1 -1
- package/build/npm/esm/dev/transports/offline.js.map +1 -1
- package/build/npm/esm/dev/userfeedback.js +1 -1
- package/build/npm/esm/dev/userfeedback.js.map +1 -1
- package/build/npm/esm/dev/utils/detectBrowserExtension.js +2 -1
- package/build/npm/esm/dev/utils/detectBrowserExtension.js.map +1 -1
- package/build/npm/esm/dev/utils/lazyLoadIntegration.js +2 -1
- package/build/npm/esm/dev/utils/lazyLoadIntegration.js.map +1 -1
- package/build/npm/esm/prod/client.js +1 -1
- package/build/npm/esm/prod/client.js.map +1 -1
- package/build/npm/esm/prod/diagnose-sdk.js +1 -1
- package/build/npm/esm/prod/diagnose-sdk.js.map +1 -1
- package/build/npm/esm/prod/eventbuilder.js +1 -1
- package/build/npm/esm/prod/eventbuilder.js.map +1 -1
- package/build/npm/esm/prod/helpers.js +2 -1
- package/build/npm/esm/prod/helpers.js.map +1 -1
- package/build/npm/esm/prod/index.js +5 -4
- package/build/npm/esm/prod/index.js.map +1 -1
- package/build/npm/esm/prod/integrations/bfcacheMetrics.js +111 -0
- package/build/npm/esm/prod/integrations/bfcacheMetrics.js.map +1 -0
- package/build/npm/esm/prod/integrations/breadcrumbs.js +2 -2
- package/build/npm/esm/prod/integrations/breadcrumbs.js.map +1 -1
- package/build/npm/esm/prod/integrations/browserapierrors.js +1 -1
- package/build/npm/esm/prod/integrations/browserapierrors.js.map +1 -1
- package/build/npm/esm/prod/integrations/browsersession.js +1 -1
- package/build/npm/esm/prod/integrations/browsersession.js.map +1 -1
- package/build/npm/esm/prod/integrations/contextlines.js +1 -1
- package/build/npm/esm/prod/integrations/contextlines.js.map +1 -1
- package/build/npm/esm/prod/integrations/culturecontext.js +1 -1
- package/build/npm/esm/prod/integrations/culturecontext.js.map +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/growthbook/integration.js.map +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/launchdarkly/integration.js.map +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/openfeature/integration.js.map +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/statsig/integration.js.map +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js +1 -1
- package/build/npm/esm/prod/integrations/featureFlags/unleash/integration.js.map +1 -1
- package/build/npm/esm/prod/integrations/fetchStreamPerformance.js +12 -6
- package/build/npm/esm/prod/integrations/fetchStreamPerformance.js.map +1 -1
- package/build/npm/esm/prod/integrations/globalhandlers.js +2 -1
- package/build/npm/esm/prod/integrations/globalhandlers.js.map +1 -1
- package/build/npm/esm/prod/integrations/graphqlClient.js +21 -8
- package/build/npm/esm/prod/integrations/graphqlClient.js.map +1 -1
- package/build/npm/esm/prod/integrations/httpclient.js +1 -4
- package/build/npm/esm/prod/integrations/httpclient.js.map +1 -1
- package/build/npm/esm/prod/integrations/httpcontext.js +1 -2
- package/build/npm/esm/prod/integrations/httpcontext.js.map +1 -1
- package/build/npm/esm/prod/integrations/linkederrors.js +1 -1
- package/build/npm/esm/prod/integrations/linkederrors.js.map +1 -1
- package/build/npm/esm/prod/integrations/reportingobserver.js +4 -1
- package/build/npm/esm/prod/integrations/reportingobserver.js.map +1 -1
- package/build/npm/esm/prod/integrations/spotlight.js +3 -2
- package/build/npm/esm/prod/integrations/spotlight.js.map +1 -1
- package/build/npm/esm/prod/integrations/view-hierarchy.js +2 -1
- package/build/npm/esm/prod/integrations/view-hierarchy.js.map +1 -1
- package/build/npm/esm/prod/integrations/webVitals.js +1 -1
- package/build/npm/esm/prod/integrations/webVitals.js.map +1 -1
- package/build/npm/esm/prod/integrations/webWorker.js +1 -1
- package/build/npm/esm/prod/integrations/webWorker.js.map +1 -1
- package/build/npm/esm/prod/package.json +1 -1
- package/build/npm/esm/prod/profiling/UIProfiler.js +1 -1
- package/build/npm/esm/prod/profiling/UIProfiler.js.map +1 -1
- package/build/npm/esm/prod/profiling/index.js +1 -1
- package/build/npm/esm/prod/profiling/index.js.map +1 -1
- package/build/npm/esm/prod/profiling/integration.js +1 -1
- package/build/npm/esm/prod/profiling/integration.js.map +1 -1
- package/build/npm/esm/prod/profiling/utils.js +1 -1
- package/build/npm/esm/prod/profiling/utils.js.map +1 -1
- package/build/npm/esm/prod/report-dialog.js +1 -1
- package/build/npm/esm/prod/report-dialog.js.map +1 -1
- package/build/npm/esm/prod/sdk.js +1 -5
- package/build/npm/esm/prod/sdk.js.map +1 -1
- package/build/npm/esm/prod/stack-parsers.js +1 -1
- package/build/npm/esm/prod/stack-parsers.js.map +1 -1
- package/build/npm/esm/prod/tracing/backgroundtab.js +1 -1
- package/build/npm/esm/prod/tracing/backgroundtab.js.map +1 -1
- package/build/npm/esm/prod/tracing/browserTracingIntegration.js +34 -85
- package/build/npm/esm/prod/tracing/browserTracingIntegration.js.map +1 -1
- package/build/npm/esm/prod/tracing/linkedTraces.js +1 -3
- package/build/npm/esm/prod/tracing/linkedTraces.js.map +1 -1
- package/build/npm/esm/prod/tracing/reportPageLoaded.js +1 -1
- package/build/npm/esm/prod/tracing/reportPageLoaded.js.map +1 -1
- package/build/npm/esm/prod/tracing/request.js +21 -13
- package/build/npm/esm/prod/tracing/request.js.map +1 -1
- package/build/npm/esm/prod/tracing/setActiveSpan.js +1 -1
- package/build/npm/esm/prod/tracing/setActiveSpan.js.map +1 -1
- package/build/npm/esm/prod/transports/fetch.js +1 -1
- package/build/npm/esm/prod/transports/fetch.js.map +1 -1
- package/build/npm/esm/prod/transports/offline.js +1 -1
- package/build/npm/esm/prod/transports/offline.js.map +1 -1
- package/build/npm/esm/prod/userfeedback.js +1 -1
- package/build/npm/esm/prod/userfeedback.js.map +1 -1
- package/build/npm/esm/prod/utils/detectBrowserExtension.js +2 -1
- package/build/npm/esm/prod/utils/detectBrowserExtension.js.map +1 -1
- package/build/npm/esm/prod/utils/lazyLoadIntegration.js +2 -1
- package/build/npm/esm/prod/utils/lazyLoadIntegration.js.map +1 -1
- package/build/npm/types/client.d.ts +24 -2
- package/build/npm/types/client.d.ts.map +1 -1
- package/build/npm/types/eventbuilder.d.ts +1 -1
- package/build/npm/types/eventbuilder.d.ts.map +1 -1
- package/build/npm/types/exports.d.ts +3 -3
- package/build/npm/types/exports.d.ts.map +1 -1
- package/build/npm/types/helpers.d.ts +2 -2
- package/build/npm/types/helpers.d.ts.map +1 -1
- package/build/npm/types/index.bundle.logs.metrics.d.ts +1 -1
- package/build/npm/types/index.bundle.logs.metrics.d.ts.map +1 -1
- package/build/npm/types/index.bundle.replay.logs.metrics.d.ts +1 -1
- package/build/npm/types/index.bundle.replay.logs.metrics.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.d.ts +4 -3
- package/build/npm/types/index.bundle.tracing.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.logs.metrics.d.ts +5 -4
- package/build/npm/types/index.bundle.tracing.logs.metrics.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.replay.d.ts +4 -3
- package/build/npm/types/index.bundle.tracing.replay.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts +4 -3
- package/build/npm/types/index.bundle.tracing.replay.feedback.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.replay.feedback.logs.metrics.d.ts +4 -3
- package/build/npm/types/index.bundle.tracing.replay.feedback.logs.metrics.d.ts.map +1 -1
- package/build/npm/types/index.bundle.tracing.replay.logs.metrics.d.ts +5 -4
- package/build/npm/types/index.bundle.tracing.replay.logs.metrics.d.ts.map +1 -1
- package/build/npm/types/index.d.ts +7 -5
- package/build/npm/types/index.d.ts.map +1 -1
- package/build/npm/types/integrations/bfcacheMetrics.d.ts +42 -0
- package/build/npm/types/integrations/bfcacheMetrics.d.ts.map +1 -0
- package/build/npm/types/integrations/breadcrumbs.d.ts.map +1 -1
- package/build/npm/types/integrations/contextlines.d.ts +1 -1
- package/build/npm/types/integrations/contextlines.d.ts.map +1 -1
- package/build/npm/types/integrations/fetchStreamPerformance.d.ts.map +1 -1
- package/build/npm/types/integrations/globalhandlers.d.ts +1 -1
- package/build/npm/types/integrations/globalhandlers.d.ts.map +1 -1
- package/build/npm/types/integrations/graphqlClient.d.ts.map +1 -1
- package/build/npm/types/integrations/interactions.d.ts +2 -0
- package/build/npm/types/integrations/interactions.d.ts.map +1 -0
- package/build/npm/types/integrations/reportingobserver.d.ts.map +1 -1
- package/build/npm/types/integrations/spotlight.d.ts.map +1 -1
- package/build/npm/types/integrations/view-hierarchy.d.ts +1 -1
- package/build/npm/types/integrations/view-hierarchy.d.ts.map +1 -1
- package/build/npm/types/integrations/webWorker.d.ts +1 -1
- package/build/npm/types/integrations/webWorker.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.captureconsole.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.captureconsole.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.dedupe.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.dedupe.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.extraerrordata.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.extraerrordata.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.feedback.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.feedback.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.modulemetadata.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.modulemetadata.d.ts.map +1 -1
- package/build/npm/types/integrations-bundle/index.rewriteframes.d.ts +1 -1
- package/build/npm/types/integrations-bundle/index.rewriteframes.d.ts.map +1 -1
- package/build/npm/types/pluggable-exports-bundle/index.multiplexedtransport.d.ts +1 -1
- package/build/npm/types/pluggable-exports-bundle/index.multiplexedtransport.d.ts.map +1 -1
- package/build/npm/types/profiling/UIProfiler.d.ts +1 -1
- package/build/npm/types/profiling/UIProfiler.d.ts.map +1 -1
- package/build/npm/types/profiling/index.d.ts +1 -1
- package/build/npm/types/profiling/index.d.ts.map +1 -1
- package/build/npm/types/profiling/utils.d.ts +1 -1
- package/build/npm/types/profiling/utils.d.ts.map +1 -1
- package/build/npm/types/report-dialog.d.ts +1 -1
- package/build/npm/types/report-dialog.d.ts.map +1 -1
- package/build/npm/types/sdk.d.ts +1 -1
- package/build/npm/types/sdk.d.ts.map +1 -1
- package/build/npm/types/stack-parsers.d.ts +1 -1
- package/build/npm/types/stack-parsers.d.ts.map +1 -1
- package/build/npm/types/tracing/browserTracingIntegration.d.ts +1 -10
- package/build/npm/types/tracing/browserTracingIntegration.d.ts.map +1 -1
- package/build/npm/types/tracing/linkedTraces.d.ts +2 -2
- package/build/npm/types/tracing/linkedTraces.d.ts.map +1 -1
- package/build/npm/types/tracing/reportPageLoaded.d.ts +1 -1
- package/build/npm/types/tracing/reportPageLoaded.d.ts.map +1 -1
- package/build/npm/types/tracing/request.d.ts +2 -1
- package/build/npm/types/tracing/request.d.ts.map +1 -1
- package/build/npm/types/tracing/setActiveSpan.d.ts +1 -1
- package/build/npm/types/tracing/setActiveSpan.d.ts.map +1 -1
- package/build/npm/types/transports/fetch.d.ts +1 -1
- package/build/npm/types/transports/fetch.d.ts.map +1 -1
- package/build/npm/types/transports/offline.d.ts +1 -1
- package/build/npm/types/transports/offline.d.ts.map +1 -1
- package/build/npm/types/transports/types.d.ts +1 -1
- package/build/npm/types/transports/types.d.ts.map +1 -1
- package/build/npm/types/userfeedback.d.ts +1 -1
- package/build/npm/types/userfeedback.d.ts.map +1 -1
- package/build/npm/types/utils/detectBrowserExtension.d.ts.map +1 -1
- package/build/npm/types/utils/lazyLoadIntegration.d.ts +2 -2
- package/build/npm/types/utils/lazyLoadIntegration.d.ts.map +1 -1
- package/package.json +10 -9
- package/build/npm/cjs/dev/integrations/spanstreaming.js +0 -34
- package/build/npm/cjs/dev/integrations/spanstreaming.js.map +0 -1
- package/build/npm/cjs/prod/integrations/spanstreaming.js +0 -34
- package/build/npm/cjs/prod/integrations/spanstreaming.js.map +0 -1
- package/build/npm/esm/dev/integrations/spanstreaming.js +0 -31
- package/build/npm/esm/dev/integrations/spanstreaming.js.map +0 -1
- package/build/npm/esm/prod/integrations/spanstreaming.js +0 -31
- package/build/npm/esm/prod/integrations/spanstreaming.js.map +0 -1
- package/build/npm/types/integrations/spanstreaming.d.ts +0 -5
- package/build/npm/types/integrations/spanstreaming.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offline.js","sources":["../../../../../src/transports/offline.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"offline.js","sources":["../../../../../src/transports/offline.ts"],"sourcesContent":["import type { BaseTransportOptions, Envelope, OfflineStore, OfflineTransportOptions, Transport } from '@sentry/core';\nimport { makeOfflineTransport, parseEnvelope, serializeEnvelope } from '@sentry/core';\nimport { WINDOW } from '../helpers';\nimport { makeFetchTransport } from './fetch';\n\n// 'Store', 'promisifyRequest' and 'createStore' were originally copied from the 'idb-keyval' package before being\n// modified and simplified: https://github.com/jakearchibald/idb-keyval\n//\n// At commit: 0420a704fd6cbb4225429c536b1f61112d012fca\n// Original license:\n\n// Copyright 2016, Jake Archibald\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ntype Store = <T>(callback: (store: IDBObjectStore) => T | PromiseLike<T>) => Promise<T>;\n\nfunction promisifyRequest<T = undefined>(request: IDBRequest<T> | IDBTransaction): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n // @ts-expect-error - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-expect-error - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\n\n/** Create or open an IndexedDb store */\nexport function createStore(dbName: string, storeName: string): Store {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n\n return callback => dbp.then(db => callback(db.transaction(storeName, 'readwrite').objectStore(storeName)));\n}\n\nfunction keys(store: IDBObjectStore): Promise<number[]> {\n return promisifyRequest(store.getAllKeys() as IDBRequest<number[]>);\n}\n\n/** Insert into the end of the store */\nexport function push(store: Store, value: Uint8Array | string, maxQueueSize: number): Promise<void> {\n return store(store => {\n return keys(store).then(keys => {\n if (keys.length >= maxQueueSize) {\n return;\n }\n\n // We insert with an incremented key so that the entries are popped in order\n store.put(value, Math.max(...keys, 0) + 1);\n return promisifyRequest(store.transaction);\n });\n });\n}\n\n/** Insert into the front of the store */\nexport function unshift(store: Store, value: Uint8Array | string, maxQueueSize: number): Promise<void> {\n return store(store => {\n return keys(store).then(keys => {\n if (keys.length >= maxQueueSize) {\n return;\n }\n\n // We insert with an decremented key so that the entries are popped in order\n store.put(value, Math.min(...keys, 0) - 1);\n return promisifyRequest(store.transaction);\n });\n });\n}\n\n/** Pop the oldest value from the store */\nexport function shift(store: Store): Promise<Uint8Array | string | undefined> {\n return store(store => {\n return keys(store).then(keys => {\n const firstKey = keys[0];\n if (firstKey == null) {\n return undefined;\n }\n\n return promisifyRequest(store.get(firstKey)).then(value => {\n store.delete(firstKey);\n return promisifyRequest(store.transaction).then(() => value);\n });\n });\n });\n}\n\nexport interface BrowserOfflineTransportOptions extends Omit<OfflineTransportOptions, 'createStore'> {\n /**\n * Name of indexedDb database to store envelopes in\n * Default: 'sentry-offline'\n */\n dbName?: string;\n /**\n * Name of indexedDb object store to store envelopes in\n * Default: 'queue'\n */\n storeName?: string;\n /**\n * Maximum number of envelopes to store\n * Default: 30\n */\n maxQueueSize?: number;\n}\n\nfunction createIndexedDbStore(options: BrowserOfflineTransportOptions): OfflineStore {\n let store: Store | undefined;\n\n // Lazily create the store only when it's needed\n function getStore(): Store {\n if (store == undefined) {\n store = createStore(options.dbName || 'sentry-offline', options.storeName || 'queue');\n }\n\n return store;\n }\n\n return {\n push: async (env: Envelope) => {\n try {\n const serialized = serializeEnvelope(env);\n await push(getStore(), serialized, options.maxQueueSize || 30);\n } catch {\n //\n }\n },\n unshift: async (env: Envelope) => {\n try {\n const serialized = serializeEnvelope(env);\n await unshift(getStore(), serialized, options.maxQueueSize || 30);\n } catch {\n //\n }\n },\n shift: async () => {\n try {\n const deserialized = await shift(getStore());\n if (deserialized) {\n return parseEnvelope(deserialized);\n }\n } catch {\n //\n }\n\n return undefined;\n },\n };\n}\n\nfunction makeIndexedDbOfflineTransport<T>(\n createTransport: (options: T) => Transport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n return options => {\n const transport = createTransport({ ...options, createStore: createIndexedDbStore });\n\n WINDOW.addEventListener('online', async _ => {\n await transport.flush();\n });\n\n return transport;\n };\n}\n\n/**\n * Creates a transport that uses IndexedDb to store events when offline.\n */\nexport function makeBrowserOfflineTransport<T extends BaseTransportOptions>(\n createTransport: (options: T) => Transport = makeFetchTransport,\n): (options: T & BrowserOfflineTransportOptions) => Transport {\n return makeIndexedDbOfflineTransport<T>(makeOfflineTransport(createTransport));\n}\n"],"names":["store","keys","serializeEnvelope","parseEnvelope","WINDOW","makeFetchTransport","makeOfflineTransport"],"mappings":";;;;;;AA2BA,SAAS,iBAAgC,OAAA,EAAqD;AAC5F,EAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAA,KAAW;AAEzC,IAAA,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA,GAAY,MAAM,OAAA,CAAQ,QAAQ,MAAM,CAAA;AAErE,IAAA,OAAA,CAAQ,UAAU,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,EAChE,CAAC,CAAA;AACH;AAGO,SAAS,WAAA,CAAY,QAAgB,SAAA,EAA0B;AACpE,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AACrC,EAAA,OAAA,CAAQ,eAAA,GAAkB,MAAM,OAAA,CAAQ,MAAA,CAAO,kBAAkB,SAAS,CAAA;AAC1E,EAAA,MAAM,GAAA,GAAM,iBAAiB,OAAO,CAAA;AAEpC,EAAA,OAAO,CAAA,QAAA,KAAY,GAAA,CAAI,IAAA,CAAK,CAAA,EAAA,KAAM,QAAA,CAAS,EAAA,CAAG,WAAA,CAAY,SAAA,EAAW,WAAW,CAAA,CAAE,WAAA,CAAY,SAAS,CAAC,CAAC,CAAA;AAC3G;AAEA,SAAS,KAAK,KAAA,EAA0C;AACtD,EAAA,OAAO,gBAAA,CAAiB,KAAA,CAAM,UAAA,EAAoC,CAAA;AACpE;AAGO,SAAS,IAAA,CAAK,KAAA,EAAc,KAAA,EAA4B,YAAA,EAAqC;AAClG,EAAA,OAAO,KAAA,CAAM,CAAAA,MAAAA,KAAS;AACpB,IAAA,OAAO,IAAA,CAAKA,MAAK,CAAA,CAAE,IAAA,CAAK,CAAAC,KAAAA,KAAQ;AAC9B,MAAA,IAAIA,KAAAA,CAAK,UAAU,YAAA,EAAc;AAC/B,QAAA;AAAA,MACF;AAGA,MAAAD,MAAAA,CAAM,IAAI,KAAA,EAAO,IAAA,CAAK,IAAI,GAAGC,KAAAA,EAAM,CAAC,CAAA,GAAI,CAAC,CAAA;AACzC,MAAA,OAAO,gBAAA,CAAiBD,OAAM,WAAW,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAGO,SAAS,OAAA,CAAQ,KAAA,EAAc,KAAA,EAA4B,YAAA,EAAqC;AACrG,EAAA,OAAO,KAAA,CAAM,CAAAA,MAAAA,KAAS;AACpB,IAAA,OAAO,IAAA,CAAKA,MAAK,CAAA,CAAE,IAAA,CAAK,CAAAC,KAAAA,KAAQ;AAC9B,MAAA,IAAIA,KAAAA,CAAK,UAAU,YAAA,EAAc;AAC/B,QAAA;AAAA,MACF;AAGA,MAAAD,MAAAA,CAAM,IAAI,KAAA,EAAO,IAAA,CAAK,IAAI,GAAGC,KAAAA,EAAM,CAAC,CAAA,GAAI,CAAC,CAAA;AACzC,MAAA,OAAO,gBAAA,CAAiBD,OAAM,WAAW,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAGO,SAAS,MAAM,KAAA,EAAwD;AAC5E,EAAA,OAAO,KAAA,CAAM,CAAAA,MAAAA,KAAS;AACpB,IAAA,OAAO,IAAA,CAAKA,MAAK,CAAA,CAAE,IAAA,CAAK,CAAAC,KAAAA,KAAQ;AAC9B,MAAA,MAAM,QAAA,GAAWA,MAAK,CAAC,CAAA;AACvB,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AAEA,MAAA,OAAO,iBAAiBD,MAAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAE,KAAK,CAAA,KAAA,KAAS;AACzD,QAAAA,MAAAA,CAAM,OAAO,QAAQ,CAAA;AACrB,QAAA,OAAO,iBAAiBA,MAAAA,CAAM,WAAW,CAAA,CAAE,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MAC7D,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAoBA,SAAS,qBAAqB,OAAA,EAAuD;AACnF,EAAA,IAAI,KAAA;AAGJ,EAAA,SAAS,QAAA,GAAkB;AACzB,IAAA,IAAI,SAAS,MAAA,EAAW;AACtB,MAAA,KAAA,GAAQ,YAAY,OAAA,CAAQ,MAAA,IAAU,gBAAA,EAAkB,OAAA,CAAQ,aAAa,OAAO,CAAA;AAAA,IACtF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAO,GAAA,KAAkB;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAaE,uBAAkB,GAAG,CAAA;AACxC,QAAA,MAAM,KAAK,QAAA,EAAS,EAAG,UAAA,EAAY,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,MAC/D,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,IACA,OAAA,EAAS,OAAO,GAAA,KAAkB;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAaA,uBAAkB,GAAG,CAAA;AACxC,QAAA,MAAM,QAAQ,QAAA,EAAS,EAAG,UAAA,EAAY,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAAA,MAClE,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF,CAAA;AAAA,IACA,OAAO,YAAY;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,QAAA,EAAU,CAAA;AAC3C,QAAA,IAAI,YAAA,EAAc;AAChB,UAAA,OAAOC,mBAAc,YAAY,CAAA;AAAA,QACnC;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,GACF;AACF;AAEA,SAAS,8BACP,eAAA,EAC4D;AAC5D,EAAA,OAAO,CAAA,OAAA,KAAW;AAChB,IAAA,MAAM,YAAY,eAAA,CAAgB,EAAE,GAAG,OAAA,EAAS,WAAA,EAAa,sBAAsB,CAAA;AAEnF,IAAAC,cAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,OAAM,CAAA,KAAK;AAC3C,MAAA,MAAM,UAAU,KAAA,EAAM;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AACF;AAKO,SAAS,2BAAA,CACd,kBAA6CC,wBAAA,EACe;AAC5D,EAAA,OAAO,6BAAA,CAAiCC,yBAAA,CAAqB,eAAe,CAAC,CAAA;AAC/E;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
4
|
|
|
5
5
|
function createUserFeedbackEnvelope(feedback, {
|
|
6
6
|
metadata,
|
|
@@ -16,10 +16,10 @@ function createUserFeedbackEnvelope(feedback, {
|
|
|
16
16
|
version: metadata.sdk.version
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
|
-
...!!tunnel && !!dsn && { dsn:
|
|
19
|
+
...!!tunnel && !!dsn && { dsn: core.dsnToString(dsn) }
|
|
20
20
|
};
|
|
21
21
|
const item = createUserFeedbackEnvelopeItem(feedback);
|
|
22
|
-
return
|
|
22
|
+
return core.createEnvelope(headers, [item]);
|
|
23
23
|
}
|
|
24
24
|
function createUserFeedbackEnvelopeItem(feedback) {
|
|
25
25
|
const feedbackHeaders = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userfeedback.js","sources":["../../../../src/userfeedback.ts"],"sourcesContent":["import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/core
|
|
1
|
+
{"version":3,"file":"userfeedback.js","sources":["../../../../src/userfeedback.ts"],"sourcesContent":["import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/core';\nimport { createEnvelope, dsnToString } from '@sentry/core';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n feedback: UserFeedback,\n {\n metadata,\n tunnel,\n dsn,\n }: {\n metadata: SdkMetadata | undefined;\n tunnel: string | undefined;\n dsn: DsnComponents | undefined;\n },\n): EventEnvelope {\n const headers: EventEnvelope[0] = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata?.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n const feedbackHeaders: UserFeedbackItem[0] = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n"],"names":["dsnToString","createEnvelope"],"mappings":";;;;AAMO,SAAS,2BACd,QAAA,EACA;AAAA,EACE,QAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKe;AACf,EAAA,MAAM,OAAA,GAA4B;AAAA,IAChC,UAAU,QAAA,CAAS,QAAA;AAAA,IACnB,OAAA,EAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAChC,GAAI,UAAU,GAAA,IAAO;AAAA,MACnB,GAAA,EAAK;AAAA,QACH,IAAA,EAAM,SAAS,GAAA,CAAI,IAAA;AAAA,QACnB,OAAA,EAAS,SAAS,GAAA,CAAI;AAAA;AACxB,KACF;AAAA,IACA,GAAI,CAAC,CAAC,MAAA,IAAU,CAAC,CAAC,GAAA,IAAO,EAAE,GAAA,EAAKA,gBAAA,CAAY,GAAG,CAAA;AAAE,GACnD;AACA,EAAA,MAAM,IAAA,GAAO,+BAA+B,QAAQ,CAAA;AAEpD,EAAA,OAAOC,mBAAA,CAAe,OAAA,EAAS,CAAC,IAAI,CAAC,CAAA;AACvC;AAEA,SAAS,+BAA+B,QAAA,EAA0C;AAChF,EAAA,MAAM,eAAA,GAAuC;AAAA,IAC3C,IAAA,EAAM;AAAA,GACR;AACA,EAAA,OAAO,CAAC,iBAAiB,QAAQ,CAAA;AACnC;;;;"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const browserUtils = require('@sentry/browser-utils');
|
|
4
|
+
const core = require('@sentry/core');
|
|
4
5
|
const debugBuild = require('../debug-build.js');
|
|
5
6
|
const helpers = require('../helpers.js');
|
|
6
7
|
|
|
7
8
|
function checkAndWarnIfIsEmbeddedBrowserExtension() {
|
|
8
9
|
if (_isEmbeddedBrowserExtension()) {
|
|
9
10
|
if (debugBuild.DEBUG_BUILD) {
|
|
10
|
-
|
|
11
|
+
core.consoleSandbox(() => {
|
|
11
12
|
console.error(
|
|
12
13
|
"[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/"
|
|
13
14
|
);
|
|
@@ -29,7 +30,7 @@ function _isEmbeddedBrowserExtension() {
|
|
|
29
30
|
if (!extensionObject?.runtime?.id) {
|
|
30
31
|
return false;
|
|
31
32
|
}
|
|
32
|
-
const href =
|
|
33
|
+
const href = browserUtils.getLocationHref();
|
|
33
34
|
const isDedicatedExtensionPage = helpers.WINDOW === helpers.WINDOW.top && /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\/\//.test(href);
|
|
34
35
|
return !isDedicatedExtensionPage;
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectBrowserExtension.js","sources":["../../../../../src/utils/detectBrowserExtension.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"detectBrowserExtension.js","sources":["../../../../../src/utils/detectBrowserExtension.ts"],"sourcesContent":["import { getLocationHref } from '@sentry/browser-utils';\nimport { consoleSandbox } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ntype ExtensionRuntime = {\n runtime?: {\n id?: string;\n };\n};\ntype ExtensionProperties = {\n chrome?: ExtensionRuntime;\n browser?: ExtensionRuntime;\n nw?: unknown;\n};\n\n/**\n * Returns true if the SDK is running in an embedded browser extension.\n * Stand-alone browser extensions (which do not share the same data as the main browser page) are fine.\n */\nexport function checkAndWarnIfIsEmbeddedBrowserExtension(): boolean {\n if (_isEmbeddedBrowserExtension()) {\n if (DEBUG_BUILD) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(\n '[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n );\n });\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction _isEmbeddedBrowserExtension(): boolean {\n if (typeof WINDOW.window === 'undefined') {\n // No need to show the error if we're not in a browser window environment (e.g. service workers)\n return false;\n }\n\n const _window = WINDOW as typeof WINDOW & ExtensionProperties;\n\n // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n // see: https://github.com/getsentry/sentry-javascript/issues/12668\n if (_window.nw) {\n return false;\n }\n\n const extensionObject = _window['chrome'] || _window['browser'];\n\n if (!extensionObject?.runtime?.id) {\n return false;\n }\n\n const href = getLocationHref();\n\n // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n const isDedicatedExtensionPage =\n WINDOW === WINDOW.top &&\n /^(?:chrome-extension|moz-extension|ms-browser-extension|safari-web-extension):\\/\\//.test(href);\n\n return !isDedicatedExtensionPage;\n}\n"],"names":["DEBUG_BUILD","consoleSandbox","WINDOW","getLocationHref"],"mappings":";;;;;;;AAoBO,SAAS,wCAAA,GAAoD;AAClE,EAAA,IAAI,6BAA4B,EAAG;AACjC,IAAA,IAAIA,sBAAA,EAAa;AACf,MAAAC,mBAAA,CAAe,MAAM;AAEnB,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,2BAAA,GAAuC;AAC9C,EAAA,IAAI,OAAOC,cAAA,CAAO,MAAA,KAAW,WAAA,EAAa;AAExC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAUA,cAAA;AAIhB,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAQ,SAAS,CAAA;AAE9D,EAAA,IAAI,CAAC,eAAA,EAAiB,OAAA,EAAS,EAAA,EAAI;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAOC,4BAAA,EAAgB;AAG7B,EAAA,MAAM,2BACJD,cAAA,KAAWA,cAAA,CAAO,GAAA,IAClB,oFAAA,CAAqF,KAAK,IAAI,CAAA;AAEhG,EAAA,OAAO,CAAC,wBAAA;AACV;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
4
|
const helpers = require('../helpers.js');
|
|
5
5
|
|
|
6
6
|
const LAZY_LOADABLE_NAMES = [
|
|
@@ -20,6 +20,7 @@ const LAZY_LOADABLE_NAMES = [
|
|
|
20
20
|
"rewriteFramesIntegration",
|
|
21
21
|
"browserProfilingIntegration",
|
|
22
22
|
"userTimingIntegration",
|
|
23
|
+
"interactionsIntegration",
|
|
23
24
|
"moduleMetadataIntegration"
|
|
24
25
|
];
|
|
25
26
|
const HYPHENATED_BUNDLES = {
|
|
@@ -72,9 +73,9 @@ async function lazyLoadIntegration(name, scriptNonce) {
|
|
|
72
73
|
return integrationFn;
|
|
73
74
|
}
|
|
74
75
|
function getScriptURL(bundle) {
|
|
75
|
-
const client =
|
|
76
|
+
const client = core.getClient();
|
|
76
77
|
const baseURL = client?.getOptions()?.cdnBaseUrl || "https://browser.sentry-cdn.com";
|
|
77
|
-
return new URL(`/${
|
|
78
|
+
return new URL(`/${core.SDK_VERSION}/${bundle}.min.js`, baseURL).toString();
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
exports.lazyLoadIntegration = lazyLoadIntegration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazyLoadIntegration.js","sources":["../../../../../src/utils/lazyLoadIntegration.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core
|
|
1
|
+
{"version":3,"file":"lazyLoadIntegration.js","sources":["../../../../../src/utils/lazyLoadIntegration.ts"],"sourcesContent":["import type { IntegrationFn } from '@sentry/core';\nimport { getClient, SDK_VERSION } from '@sentry/core';\nimport type { BrowserClient } from '../client';\nimport { WINDOW } from '../helpers';\n\n// Single source of truth: as const array provides both the runtime list and the type.\n// Bundle file names are derived: strip 'Integration' suffix, lowercase.\n// Exceptions (hyphenated bundle names) are listed in HYPHENATED_BUNDLES.\nconst LAZY_LOADABLE_NAMES = [\n 'replayIntegration',\n 'replayCanvasIntegration',\n 'feedbackIntegration',\n 'feedbackModalIntegration',\n 'feedbackScreenshotIntegration',\n 'captureConsoleIntegration',\n 'contextLinesIntegration',\n 'linkedErrorsIntegration',\n 'dedupeIntegration',\n 'extraErrorDataIntegration',\n 'graphqlClientIntegration',\n 'httpClientIntegration',\n 'reportingObserverIntegration',\n 'rewriteFramesIntegration',\n 'browserProfilingIntegration',\n 'userTimingIntegration',\n 'interactionsIntegration',\n 'moduleMetadataIntegration',\n] as const;\n\ntype ElementOf<T extends readonly unknown[]> = T[number];\ntype LazyLoadableIntegrationName = ElementOf<typeof LAZY_LOADABLE_NAMES>;\n\nconst HYPHENATED_BUNDLES: Partial<Record<LazyLoadableIntegrationName, string>> = {\n replayCanvasIntegration: 'replay-canvas',\n feedbackModalIntegration: 'feedback-modal',\n feedbackScreenshotIntegration: 'feedback-screenshot',\n};\n\nfunction getBundleName(name: string): string {\n return HYPHENATED_BUNDLES[name as LazyLoadableIntegrationName] || name.replace('Integration', '').toLowerCase();\n}\n\nconst WindowWithMaybeIntegration = WINDOW as {\n Sentry?: Partial<Record<LazyLoadableIntegrationName, IntegrationFn>>;\n};\n\n/**\n * Lazy load an integration from the CDN.\n * Rejects if the integration cannot be loaded.\n */\nexport async function lazyLoadIntegration(\n name: LazyLoadableIntegrationName,\n scriptNonce?: string,\n): Promise<IntegrationFn> {\n const bundle = LAZY_LOADABLE_NAMES.includes(name) ? getBundleName(name) : undefined;\n\n // `window.Sentry` is only set when using a CDN bundle, but this method can also be used via the NPM package\n const sentryOnWindow = (WindowWithMaybeIntegration.Sentry = WindowWithMaybeIntegration.Sentry || {});\n\n if (!bundle) {\n throw new Error(`Cannot lazy load integration: ${name}`);\n }\n\n // Bail if the integration already exists\n const existing = sentryOnWindow[name];\n // The `feedbackIntegration` is loaded by default in the CDN bundles,\n // so we need to differentiate between the real integration and the shim.\n // if only the shim exists, we still want to lazy load the real integration.\n if (typeof existing === 'function' && !('_isShim' in existing)) {\n return existing;\n }\n\n const url = getScriptURL(bundle);\n const script = WINDOW.document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.referrerPolicy = 'strict-origin';\n\n if (scriptNonce) {\n script.setAttribute('nonce', scriptNonce);\n }\n\n const waitForLoad = new Promise<void>((resolve, reject) => {\n script.addEventListener('load', () => resolve());\n script.addEventListener('error', reject);\n });\n\n const currentScript = WINDOW.document.currentScript;\n const parent = WINDOW.document.body || WINDOW.document.head || currentScript?.parentElement;\n\n if (parent) {\n parent.appendChild(script);\n } else {\n throw new Error(`Could not find parent element to insert lazy-loaded ${name} script`);\n }\n\n try {\n await waitForLoad;\n } catch {\n throw new Error(`Error when loading integration: ${name}`);\n }\n\n const integrationFn = sentryOnWindow[name];\n\n if (typeof integrationFn !== 'function') {\n throw new Error(`Could not load integration: ${name}`);\n }\n\n return integrationFn;\n}\n\nfunction getScriptURL(bundle: string): string {\n const client = getClient<BrowserClient>();\n const baseURL = client?.getOptions()?.cdnBaseUrl || 'https://browser.sentry-cdn.com';\n\n return new URL(`/${SDK_VERSION}/${bundle}.min.js`, baseURL).toString();\n}\n"],"names":["WINDOW","getClient","SDK_VERSION"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
4
|
const eventbuilder = require('./eventbuilder.js');
|
|
5
5
|
const helpers = require('./helpers.js');
|
|
6
6
|
|
|
7
|
-
class BrowserClient extends
|
|
7
|
+
class BrowserClient extends core.Client {
|
|
8
8
|
/**
|
|
9
9
|
* Creates a new Browser SDK instance.
|
|
10
10
|
*
|
|
@@ -12,8 +12,8 @@ class BrowserClient extends browser.Client {
|
|
|
12
12
|
*/
|
|
13
13
|
constructor(options) {
|
|
14
14
|
const opts = applyDefaultOptions(options);
|
|
15
|
-
const sdkSource = helpers.WINDOW.SENTRY_SDK_SOURCE ||
|
|
16
|
-
|
|
15
|
+
const sdkSource = helpers.WINDOW.SENTRY_SDK_SOURCE || core.getSDKSource();
|
|
16
|
+
core.applySdkMetadata(opts, "browser", ["browser"], sdkSource);
|
|
17
17
|
super(opts);
|
|
18
18
|
this._unhandledSessionStatus = "unhandled";
|
|
19
19
|
const { userInfo } = this.getDataCollectionOptions();
|
|
@@ -39,7 +39,7 @@ class BrowserClient extends browser.Client {
|
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
if (userInfo) {
|
|
42
|
-
this.on("beforeSendSession",
|
|
42
|
+
this.on("beforeSendSession", core.addAutoIpAddressToSession);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../../../src/client.ts"],"sourcesContent":["import type {\n
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../../../src/client.ts"],"sourcesContent":["import type {\n ClientOptions,\n Event,\n EventHint,\n Options as CoreOptions,\n ParameterizedString,\n Scope,\n SeverityLevel,\n} from '@sentry/core';\nimport type { BrowserClientReplayOptions } from '@sentry/core/browser';\nimport { addAutoIpAddressToSession, applySdkMetadata, Client, getSDKSource } from '@sentry/core';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\nexport type BrowserClientProfilingOptions = {\n /**\n * Sets profiling session sample rate for the entire profiling session.\n *\n * A profiling session corresponds to a user session, meaning it is set once at integration initialization and\n * persisted until the next page reload. This rate determines what percentage of user sessions will have profiling enabled.\n * @default 0\n */\n profileSessionSampleRate?: number;\n\n /**\n * Set the lifecycle mode of the profiler.\n * - **manual**: The profiler will be manually started and stopped via `startProfiler`/`stopProfiler`.\n * If a session is sampled, is dependent on the `profileSessionSampleRate`.\n * - **trace**: The profiler will be automatically started when a root span exists and stopped when there are no\n * more sampled root spans. Whether a session is sampled, is dependent on the `profileSessionSampleRate` and the\n * existing sampling configuration for tracing (`tracesSampleRate`/`tracesSampler`).\n *\n * @default 'manual'\n */\n profileLifecycle?: 'manual' | 'trace';\n};\n\ntype BrowserSpecificOptions = BrowserClientReplayOptions &\n BrowserClientProfilingOptions & {\n /** If configured, this URL will be used as base URL for lazy loading integration. */\n cdnBaseUrl?: string;\n\n /**\n * Important: Only set this option if you know what you are doing!\n *\n * By default, the SDK will check if `Sentry.init` is called in a browser extension.\n * In case it is, it will stop initialization and log a warning\n * because browser extensions require a different Sentry initialization process:\n * https://docs.sentry.io/platforms/javascript/best-practices/shared-environments/\n *\n * Setting up the SDK in a browser extension with global error monitoring is not recommended\n * and will likely flood you with errors from other web sites or extensions. This can heavily\n * impact your quota and cause interference with your and other Sentry SDKs in shared environments.\n *\n * If this check wrongfully flags your setup as a browser extension, you can set this\n * option to `true` to skip the check.\n *\n * @default false\n */\n skipBrowserExtensionCheck?: boolean;\n\n /**\n * If you use Spotlight by Sentry during development, use\n * this option to forward captured Sentry events to Spotlight.\n *\n * Either set it to true, or provide a specific Spotlight Sidecar URL.\n *\n * More details: https://spotlightjs.com/\n *\n * IMPORTANT: Only set this option to `true` while developing, not in production!\n */\n spotlight?: boolean | string;\n };\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/core Options for more information.\n */\nexport type BrowserOptions = CoreOptions<BrowserTransportOptions> & BrowserSpecificOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions<BrowserTransportOptions> & BrowserSpecificOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends Client<BrowserClientOptions> {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n public constructor(options: BrowserClientOptions) {\n const opts = applyDefaultOptions(options);\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n super(opts);\n\n // Unhandled errors don't actually crash the browser, so we report `unhandled` rather than `crashed`.\n this._unhandledSessionStatus = 'unhandled';\n\n const { userInfo } = this.getDataCollectionOptions();\n\n if (opts._metadata?.sdk) {\n opts._metadata.sdk.settings = {\n // Only allow IP inferral by Relay if the user opted in via dataCollection\n infer_ip: userInfo ? 'auto' : 'never',\n // purposefully allowing already passed settings to override the default\n ...opts._metadata.sdk.settings,\n };\n }\n\n const { sendClientReports } = this._options;\n\n // Flush buffered data when the page becomes hidden (e.g. tab switch, navigation, or the page\n // being discarded). `flush()` emits the `flush` hook, which drains the span (streaming), log and\n // metric buffers and hands the resulting envelopes to the transport (which uses `keepalive`).\n // Client report outcomes don't listen to the `flush` hook, so we flush them separately.\n if (WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n if (sendClientReports) {\n this._flushOutcomes();\n }\n // Defer the flush to a microtask so that visibilitychange listeners registered after this\n // one have already run. In particular, browser tracing's background-tab detection ends the\n // active pageload/navigation (segment) span when the page is hidden. Deferring ensures that\n // segment span has been added to the streaming buffer before we flush, so it is sent\n // together with its child spans instead of being orphaned.\n queueMicrotask(() => {\n void this.flush();\n });\n }\n });\n }\n\n if (userInfo) {\n this.on('beforeSendSession', addAutoIpAddressToSession);\n }\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike<Event> {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n currentScope: Scope,\n isolationScope: Scope,\n ): PromiseLike<Event | null> {\n event.platform = event.platform || 'javascript';\n\n return super._prepareEvent(event, hint, currentScope, isolationScope);\n }\n}\n\n/** Exported only for tests. */\nexport function applyDefaultOptions<T extends Partial<BrowserClientOptions>>(optionsArg: T): T {\n return {\n release:\n typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n ? __SENTRY_RELEASE__\n : WINDOW.SENTRY_RELEASE?.id, // This supports the variable that sentry-webpack-plugin injects\n sendClientReports: true,\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...optionsArg,\n };\n}\n"],"names":["Client","WINDOW","getSDKSource","applySdkMetadata","addAutoIpAddressToSession","eventFromException","eventFromMessage"],"mappings":";;;;;;AAiGO,MAAM,sBAAsBA,WAAA,CAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvD,YAAY,OAAA,EAA+B;AAChD,IAAA,MAAM,IAAA,GAAO,oBAAoB,OAAO,CAAA;AACxC,IAAA,MAAM,SAAA,GAAYC,cAAA,CAAO,iBAAA,IAAqBC,iBAAA,EAAa;AAC3D,IAAAC,qBAAA,CAAiB,IAAA,EAAM,SAAA,EAAW,CAAC,SAAS,GAAG,SAAS,CAAA;AAExD,IAAA,KAAA,CAAM,IAAI,CAAA;AAGV,IAAA,IAAA,CAAK,uBAAA,GAA0B,WAAA;AAE/B,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,IAAA,CAAK,wBAAA,EAAyB;AAEnD,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAA,GAAW;AAAA;AAAA,QAE5B,QAAA,EAAU,WAAW,MAAA,GAAS,OAAA;AAAA;AAAA,QAE9B,GAAG,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI;AAAA,OACxB;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,iBAAA,EAAkB,GAAI,IAAA,CAAK,QAAA;AAMnC,IAAA,IAAIF,eAAO,QAAA,EAAU;AACnB,MAAAA,cAAA,CAAO,QAAA,CAAS,gBAAA,CAAiB,kBAAA,EAAoB,MAAM;AACzD,QAAA,IAAIA,cAAA,CAAO,QAAA,CAAS,eAAA,KAAoB,QAAA,EAAU;AAChD,UAAA,IAAI,iBAAA,EAAmB;AACrB,YAAA,IAAA,CAAK,cAAA,EAAe;AAAA,UACtB;AAMA,UAAA,cAAA,CAAe,MAAM;AACnB,YAAA,KAAK,KAAK,KAAA,EAAM;AAAA,UAClB,CAAC,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,EAAA,CAAG,qBAAqBG,8BAAyB,CAAA;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,CAAmB,WAAoB,IAAA,EAAsC;AAClF,IAAA,OAAOC,+BAAA,CAAmB,KAAK,QAAA,CAAS,WAAA,EAAa,WAAW,IAAA,EAAM,IAAA,CAAK,SAAS,gBAAgB,CAAA;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA,EAKO,gBAAA,CACL,OAAA,EACA,KAAA,GAAuB,MAAA,EACvB,IAAA,EACoB;AACpB,IAAA,OAAOC,6BAAA,CAAiB,KAAK,QAAA,CAAS,WAAA,EAAa,SAAS,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA,EAKU,aAAA,CACR,KAAA,EACA,IAAA,EACA,YAAA,EACA,cAAA,EAC2B;AAC3B,IAAA,KAAA,CAAM,QAAA,GAAW,MAAM,QAAA,IAAY,YAAA;AAEnC,IAAA,OAAO,KAAA,CAAM,aAAA,CAAc,KAAA,EAAO,IAAA,EAAM,cAAc,cAAc,CAAA;AAAA,EACtE;AACF;AAGO,SAAS,oBAA6D,UAAA,EAAkB;AAC7F,EAAA,OAAO;AAAA,IACL,SACE,OAAO,kBAAA,KAAuB,QAAA,GAC1B,kBAAA,GACAL,eAAO,cAAA,EAAgB,EAAA;AAAA;AAAA,IAC7B,iBAAA,EAAmB,IAAA;AAAA;AAAA,IAEnB,0BAAA,EAA4B,IAAA;AAAA,IAC5B,GAAG;AAAA,GACL;AACF;;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
4
|
|
|
5
5
|
async function diagnoseSdkConnectivity() {
|
|
6
|
-
const client =
|
|
6
|
+
const client = core.getClient();
|
|
7
7
|
if (!client) {
|
|
8
8
|
return "no-client-active";
|
|
9
9
|
}
|
|
@@ -14,7 +14,7 @@ async function diagnoseSdkConnectivity() {
|
|
|
14
14
|
const defaultUrl = "https://o447951.ingest.sentry.io/api/4509632503087104/envelope/?sentry_version=7&sentry_key=c1dfb07d783ad5325c245c1fd3725390&sentry_client=sentry.javascript.browser%2F1.33.7";
|
|
15
15
|
const url = tunnel || defaultUrl;
|
|
16
16
|
try {
|
|
17
|
-
await
|
|
17
|
+
await core.suppressTracing(
|
|
18
18
|
() => (
|
|
19
19
|
// If fetch throws, there is likely an ad blocker active or there are other connective issues.
|
|
20
20
|
fetch(url, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose-sdk.js","sources":["../../../../src/diagnose-sdk.ts"],"sourcesContent":["import { getClient, suppressTracing } from '@sentry/core
|
|
1
|
+
{"version":3,"file":"diagnose-sdk.js","sources":["../../../../src/diagnose-sdk.ts"],"sourcesContent":["import { getClient, suppressTracing } from '@sentry/core';\n\n/**\n * A function to diagnose why the SDK might not be successfully sending data.\n *\n * Possible return values wrapped in a Promise:\n * - `\"no-client-active\"` - There was no active client when the function was called. This possibly means that the SDK was not initialized yet.\n * - `\"sentry-unreachable\"` - The Sentry SaaS servers were not reachable. This likely means that there is an ad blocker active on the page or that there are other connection issues.\n *\n * If the function doesn't detect an issue it resolves to `undefined`.\n */\nexport async function diagnoseSdkConnectivity(): Promise<\n 'no-client-active' | 'sentry-unreachable' | 'no-dsn-configured' | void\n> {\n const client = getClient();\n\n if (!client) {\n return 'no-client-active';\n }\n\n if (!client.getDsn()) {\n return 'no-dsn-configured';\n }\n\n // Check if a tunnel is configured and use it if available\n const tunnel = client.getOptions().tunnel;\n\n // We are using the\n // - \"sentry-sdks\" org with id 447951 not to pollute any actual organizations.\n // - \"diagnose-sdk-connectivity\" project with id 4509632503087104\n // - the public key of said org/project, which is disabled in the project settings\n // => this DSN: https://c1dfb07d783ad5325c245c1fd3725390@o447951.ingest.us.sentry.io/4509632503087104 (i.e. disabled)\n const defaultUrl =\n 'https://o447951.ingest.sentry.io/api/4509632503087104/envelope/?sentry_version=7&sentry_key=c1dfb07d783ad5325c245c1fd3725390&sentry_client=sentry.javascript.browser%2F1.33.7';\n\n const url = tunnel || defaultUrl;\n\n try {\n await suppressTracing(() =>\n // If fetch throws, there is likely an ad blocker active or there are other connective issues.\n fetch(url, {\n body: '{}',\n method: 'POST',\n mode: 'cors',\n credentials: 'omit',\n }),\n );\n } catch {\n return 'sentry-unreachable';\n }\n}\n"],"names":["getClient","suppressTracing"],"mappings":";;;;AAWA,eAAsB,uBAAA,GAEpB;AACA,EAAA,MAAM,SAASA,cAAA,EAAU;AAEzB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,kBAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,MAAA,EAAO,EAAG;AACpB,IAAA,OAAO,mBAAA;AAAA,EACT;AAGA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,EAAW,CAAE,MAAA;AAOnC,EAAA,MAAM,UAAA,GACJ,+KAAA;AAEF,EAAA,MAAM,MAAM,MAAA,IAAU,UAAA;AAEtB,EAAA,IAAI;AACF,IAAA,MAAMC,oBAAA;AAAA,MAAgB;AAAA;AAAA,QAEpB,MAAM,GAAA,EAAK;AAAA,UACT,IAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,MAAA;AAAA,UACN,WAAA,EAAa;AAAA,SACd;AAAA;AAAA,KACH;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,oBAAA;AAAA,EACT;AACF;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
4
|
|
|
5
5
|
function exceptionFromError(stackParser, ex) {
|
|
6
6
|
const frames = parseStackFrames(stackParser, ex);
|
|
@@ -17,11 +17,11 @@ function exceptionFromError(stackParser, ex) {
|
|
|
17
17
|
return exception;
|
|
18
18
|
}
|
|
19
19
|
function eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {
|
|
20
|
-
const client =
|
|
20
|
+
const client = core.getClient();
|
|
21
21
|
const normalizeDepth = client?.getOptions().normalizeDepth;
|
|
22
22
|
const errorFromProp = getErrorPropertyFromObject(exception);
|
|
23
23
|
const extra = {
|
|
24
|
-
__serialized__:
|
|
24
|
+
__serialized__: core.normalizeToSize(exception, normalizeDepth)
|
|
25
25
|
};
|
|
26
26
|
if (errorFromProp) {
|
|
27
27
|
return {
|
|
@@ -32,7 +32,7 @@ function eventFromPlainObject(stackParser, exception, syntheticException, isUnha
|
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
const exceptionValue = {
|
|
35
|
-
type:
|
|
35
|
+
type: core.isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? "UnhandledRejection" : "Error",
|
|
36
36
|
value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection })
|
|
37
37
|
};
|
|
38
38
|
const event = {
|
|
@@ -106,19 +106,19 @@ function extractMessage(ex) {
|
|
|
106
106
|
return "No error message";
|
|
107
107
|
}
|
|
108
108
|
if (message.error && typeof message.error.message === "string") {
|
|
109
|
-
return
|
|
109
|
+
return core._INTERNAL_enhanceErrorWithSentryInfo(message.error);
|
|
110
110
|
}
|
|
111
|
-
return
|
|
111
|
+
return core._INTERNAL_enhanceErrorWithSentryInfo(ex);
|
|
112
112
|
}
|
|
113
113
|
function eventFromException(stackParser, exception, hint, attachStacktrace) {
|
|
114
114
|
const syntheticException = hint?.syntheticException || void 0;
|
|
115
115
|
const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);
|
|
116
|
-
|
|
116
|
+
core.addExceptionMechanism(event);
|
|
117
117
|
event.level = "error";
|
|
118
118
|
if (hint?.event_id) {
|
|
119
119
|
event.event_id = hint.event_id;
|
|
120
120
|
}
|
|
121
|
-
return
|
|
121
|
+
return core.resolvedSyncPromise(event);
|
|
122
122
|
}
|
|
123
123
|
function eventFromMessage(stackParser, message, level = "info", hint, attachStacktrace) {
|
|
124
124
|
const syntheticException = hint?.syntheticException || void 0;
|
|
@@ -127,15 +127,15 @@ function eventFromMessage(stackParser, message, level = "info", hint, attachStac
|
|
|
127
127
|
if (hint?.event_id) {
|
|
128
128
|
event.event_id = hint.event_id;
|
|
129
129
|
}
|
|
130
|
-
return
|
|
130
|
+
return core.resolvedSyncPromise(event);
|
|
131
131
|
}
|
|
132
132
|
function eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) {
|
|
133
133
|
let event;
|
|
134
|
-
if (
|
|
134
|
+
if (core.isErrorEvent(exception) && exception.error) {
|
|
135
135
|
const errorEvent = exception;
|
|
136
136
|
return eventFromError(stackParser, errorEvent.error);
|
|
137
137
|
}
|
|
138
|
-
if (
|
|
138
|
+
if (core.isDOMError(exception) || core.isDOMException(exception)) {
|
|
139
139
|
const domException = exception;
|
|
140
140
|
if ("stack" in exception) {
|
|
141
141
|
event = eventFromError(stackParser, exception);
|
|
@@ -144,35 +144,35 @@ function eventFromUnknownInput(stackParser, exception, syntheticException, attac
|
|
|
144
144
|
const frames = parseStackFrames(stackParser, syntheticException);
|
|
145
145
|
if (frames.length) {
|
|
146
146
|
firstException.stacktrace = { frames };
|
|
147
|
-
|
|
147
|
+
core.addExceptionMechanism(event, { synthetic: true });
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
} else {
|
|
151
|
-
const name = domException.name || (
|
|
151
|
+
const name = domException.name || (core.isDOMError(domException) ? "DOMError" : "DOMException");
|
|
152
152
|
const message = domException.message ? `${name}: ${domException.message}` : name;
|
|
153
153
|
event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
|
|
154
|
-
|
|
154
|
+
core.addExceptionTypeValue(event, message);
|
|
155
155
|
}
|
|
156
156
|
if ("code" in domException) {
|
|
157
157
|
event.tags = { ...event.tags, "DOMException.code": `${domException.code}` };
|
|
158
158
|
}
|
|
159
159
|
return event;
|
|
160
160
|
}
|
|
161
|
-
if (
|
|
161
|
+
if (core.isError(exception)) {
|
|
162
162
|
return eventFromError(stackParser, exception);
|
|
163
163
|
}
|
|
164
|
-
if (
|
|
164
|
+
if (core.isPlainObject(exception) || core.isEvent(exception)) {
|
|
165
165
|
const objectException = exception;
|
|
166
166
|
event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);
|
|
167
|
-
|
|
167
|
+
core.addExceptionMechanism(event, {
|
|
168
168
|
synthetic: true
|
|
169
169
|
});
|
|
170
170
|
return event;
|
|
171
171
|
}
|
|
172
172
|
const stringifiedException = String(exception);
|
|
173
173
|
event = eventFromString(stackParser, stringifiedException, syntheticException, attachStacktrace);
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
core.addExceptionTypeValue(event, stringifiedException, void 0);
|
|
175
|
+
core.addExceptionMechanism(event, {
|
|
176
176
|
synthetic: true
|
|
177
177
|
});
|
|
178
178
|
return event;
|
|
@@ -186,9 +186,9 @@ function eventFromString(stackParser, message, syntheticException, attachStacktr
|
|
|
186
186
|
values: [{ value: message, stacktrace: { frames } }]
|
|
187
187
|
};
|
|
188
188
|
}
|
|
189
|
-
|
|
189
|
+
core.addExceptionMechanism(event, { synthetic: true });
|
|
190
190
|
}
|
|
191
|
-
if (
|
|
191
|
+
if (core.isParameterizedString(message)) {
|
|
192
192
|
const { __sentry_template_string__, __sentry_template_values__ } = message;
|
|
193
193
|
event.logentry = {
|
|
194
194
|
message: __sentry_template_string__,
|
|
@@ -200,12 +200,12 @@ function eventFromString(stackParser, message, syntheticException, attachStacktr
|
|
|
200
200
|
return event;
|
|
201
201
|
}
|
|
202
202
|
function getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }) {
|
|
203
|
-
const keys =
|
|
203
|
+
const keys = core.extractExceptionKeysForMessage(exception);
|
|
204
204
|
const captureType = isUnhandledRejection ? "promise rejection" : "exception";
|
|
205
|
-
if (
|
|
205
|
+
if (core.isErrorEvent(exception)) {
|
|
206
206
|
return `Event \`ErrorEvent\` captured as ${captureType} with message \`${exception.message}\``;
|
|
207
207
|
}
|
|
208
|
-
if (
|
|
208
|
+
if (core.isEvent(exception)) {
|
|
209
209
|
const className = getObjectClassName(exception);
|
|
210
210
|
return `Event \`${className}\` (type=${exception.type}) captured as ${captureType}`;
|
|
211
211
|
}
|
|
@@ -219,7 +219,7 @@ function getObjectClassName(obj) {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
function getErrorPropertyFromObject(obj) {
|
|
222
|
-
return Object.values(obj).find(
|
|
222
|
+
return Object.values(obj).find(core.isError);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
exports.eventFromException = eventFromException;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventbuilder.js","sources":["../../../../src/eventbuilder.ts"],"sourcesContent":["import type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/core/browser';\nimport {\n _INTERNAL_enhanceErrorWithSentryInfo,\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n getClient,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/core/browser';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client?.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const exceptionValue: Exception = {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n };\n\n const event = {\n exception: {\n values: [exceptionValue],\n },\n extra,\n } satisfies Event;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0]!.stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\nfunction isWebAssemblyException(exception: unknown): exception is WebAssembly.Exception {\n // Check for support\n // oxlint-disable-next-line typescript/prefer-optional-chain\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nexport function extractType(ex: Error & { message: { error?: Error } }): string | undefined {\n const name = ex?.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex?.message;\n\n if (isWebAssemblyException(ex)) {\n // For Node 18, Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n return 'wasm exception';\n }\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return _INTERNAL_enhanceErrorWithSentryInfo(message.error);\n }\n\n return _INTERNAL_enhanceErrorWithSentryInfo(ex);\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = hint?.syntheticException || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = hint?.syntheticException || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n\n const firstException = event.exception?.values?.[0];\n if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n firstException.stacktrace = { frames };\n addExceptionMechanism(event, { synthetic: true });\n }\n }\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line typescript/no-deprecated\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n const stringifiedException = String(exception);\n event = eventFromString(stackParser, stringifiedException, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, stringifiedException, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n return Object.values(obj).find(isError);\n}\n"],"names":["getClient","normalizeToSize","isEvent","_INTERNAL_enhanceErrorWithSentryInfo","addExceptionMechanism","resolvedSyncPromise","isErrorEvent","isDOMError","isDOMException","addExceptionTypeValue","isError","isPlainObject","isParameterizedString","extractExceptionKeysForMessage"],"mappings":";;;;AA+BO,SAAS,kBAAA,CAAmB,aAA0B,EAAA,EAAsB;AAEjF,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,WAAA,EAAa,EAAE,CAAA;AAE/C,EAAA,MAAM,SAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,YAAY,EAAE,CAAA;AAAA,IACpB,KAAA,EAAO,eAAe,EAAE;AAAA,GAC1B;AAEA,EAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,IAAA,SAAA,CAAU,UAAA,GAAa,EAAE,MAAA,EAAO;AAAA,EAClC;AAEA,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,MAAA,IAAa,SAAA,CAAU,UAAU,EAAA,EAAI;AAC1D,IAAA,SAAA,CAAU,KAAA,GAAQ,4BAAA;AAAA,EACpB;AAEA,EAAA,OAAO,SAAA;AACT;AAEA,SAAS,oBAAA,CACP,WAAA,EACA,SAAA,EACA,kBAAA,EACA,oBAAA,EACO;AACP,EAAA,MAAM,SAASA,iBAAA,EAAU;AACzB,EAAA,MAAM,cAAA,GAAiB,MAAA,EAAQ,UAAA,EAAW,CAAE,cAAA;AAG5C,EAAA,MAAM,aAAA,GAAgB,2BAA2B,SAAS,CAAA;AAE1D,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,cAAA,EAAgBC,uBAAA,CAAgB,SAAA,EAAW,cAAc;AAAA,GAC3D;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,MAAA,EAAQ,CAAC,kBAAA,CAAmB,WAAA,EAAa,aAAa,CAAC;AAAA,OACzD;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAA4B;AAAA,IAChC,IAAA,EAAMC,gBAAQ,SAAS,CAAA,GAAI,UAAU,WAAA,CAAY,IAAA,GAAO,uBAAuB,oBAAA,GAAuB,OAAA;AAAA,IACtG,KAAA,EAAO,+BAAA,CAAgC,SAAA,EAAW,EAAE,sBAAsB;AAAA,GAC5E;AAEA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,SAAA,EAAW;AAAA,MACT,MAAA,EAAQ,CAAC,cAAc;AAAA,KACzB;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,WAAA,EAAa,kBAAkB,CAAA;AAC/D,IAAA,IAAI,OAAO,MAAA,EAAQ;AAGjB,MAAA,KAAA,CAAM,UAAU,MAAA,CAAO,CAAC,CAAA,CAAG,UAAA,GAAa,EAAE,MAAA,EAAO;AAAA,IACnD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAA,CAAe,aAA0B,EAAA,EAAkB;AAClE,EAAA,OAAO;AAAA,IACL,SAAA,EAAW;AAAA,MACT,MAAA,EAAQ,CAAC,kBAAA,CAAmB,WAAA,EAAa,EAAE,CAAC;AAAA;AAC9C,GACF;AACF;AAGA,SAAS,gBAAA,CACP,aACA,EAAA,EACc;AAId,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,UAAA,IAAc,EAAA,CAAG,KAAA,IAAS,EAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,6BAA6B,EAAE,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc,qBAAqB,EAAE,CAAA;AAE3C,EAAA,IAAI;AACF,IAAA,OAAO,WAAA,CAAY,UAAA,EAAY,SAAA,EAAW,WAAW,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,EAAC;AACV;AAGA,MAAM,mBAAA,GAAsB,6BAAA;AAO5B,SAAS,6BAA6B,EAAA,EAAmB;AACvD,EAAA,IAAI,EAAA,IAAM,mBAAA,CAAoB,IAAA,CAAK,EAAA,CAAG,OAAO,CAAA,EAAG;AAC9C,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAA;AACT;AAUA,SAAS,qBAAqB,EAAA,EAA+C;AAC3E,EAAA,IAAI,OAAO,EAAA,CAAG,WAAA,KAAgB,QAAA,EAAU;AACtC,IAAA,OAAO,EAAA,CAAG,WAAA;AAAA,EACZ;AAEA,EAAA,OAAO,CAAA;AACT;AAGA,SAAS,uBAAuB,SAAA,EAAwD;AAGtF,EAAA,IAAI,OAAO,WAAA,KAAgB,WAAA,IAAe,OAAO,WAAA,CAAY,cAAc,WAAA,EAAa;AACtF,IAAA,OAAO,qBAAqB,WAAA,CAAY,SAAA;AAAA,EAC1C,CAAA,MAAO;AACL,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAOO,SAAS,YAAY,EAAA,EAAgE;AAC1F,EAAA,MAAM,OAAO,EAAA,EAAI,IAAA;AAIjB,EAAA,IAAI,CAAC,IAAA,IAAQ,sBAAA,CAAuB,EAAE,CAAA,EAAG;AAEvC,IAAA,MAAM,gBAAA,GAAmB,EAAA,CAAG,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAG,OAAO,CAAA,IAAK,EAAA,CAAG,OAAA,CAAQ,MAAA,IAAU,CAAA;AACzF,IAAA,OAAO,gBAAA,GAAmB,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAA,GAAI,uBAAA;AAAA,EAC5C;AAEA,EAAA,OAAO,IAAA;AACT;AAOO,SAAS,eAAe,EAAA,EAAoD;AACjF,EAAA,MAAM,UAAU,EAAA,EAAI,OAAA;AAEpB,EAAA,IAAI,sBAAA,CAAuB,EAAE,CAAA,EAAG;AAE9B,IAAA,IAAI,KAAA,CAAM,QAAQ,EAAA,CAAG,OAAO,KAAK,EAAA,CAAG,OAAA,CAAQ,UAAU,CAAA,EAAG;AACvD,MAAA,OAAO,EAAA,CAAG,QAAQ,CAAC,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,kBAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAQ,KAAA,IAAS,OAAO,OAAA,CAAQ,KAAA,CAAM,YAAY,QAAA,EAAU;AAC9D,IAAA,OAAOC,4CAAA,CAAqC,QAAQ,KAAK,CAAA;AAAA,EAC3D;AAEA,EAAA,OAAOA,6CAAqC,EAAE,CAAA;AAChD;AAMO,SAAS,kBAAA,CACd,WAAA,EACA,SAAA,EACA,IAAA,EACA,gBAAA,EACoB;AACpB,EAAA,MAAM,kBAAA,GAAqB,MAAM,kBAAA,IAAsB,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,WAAA,EAAa,SAAA,EAAW,oBAAoB,gBAAgB,CAAA;AAChG,EAAAC,6BAAA,CAAsB,KAAK,CAAA;AAC3B,EAAA,KAAA,CAAM,KAAA,GAAQ,OAAA;AACd,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,KAAA,CAAM,WAAW,IAAA,CAAK,QAAA;AAAA,EACxB;AACA,EAAA,OAAOC,4BAAoB,KAAK,CAAA;AAClC;AAMO,SAAS,iBACd,WAAA,EACA,OAAA,EACA,KAAA,GAAuB,MAAA,EACvB,MACA,gBAAA,EACoB;AACpB,EAAA,MAAM,kBAAA,GAAqB,MAAM,kBAAA,IAAsB,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,WAAA,EAAa,OAAA,EAAS,oBAAoB,gBAAgB,CAAA;AACxF,EAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,EAAA,IAAI,MAAM,QAAA,EAAU;AAClB,IAAA,KAAA,CAAM,WAAW,IAAA,CAAK,QAAA;AAAA,EACxB;AACA,EAAA,OAAOA,4BAAoB,KAAK,CAAA;AAClC;AAKO,SAAS,qBAAA,CACd,WAAA,EACA,SAAA,EACA,kBAAA,EACA,kBACA,oBAAA,EACO;AACP,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAIC,oBAAA,CAAa,SAAS,CAAA,IAAM,SAAA,CAAyB,KAAA,EAAO;AAE9D,IAAA,MAAM,UAAA,GAAa,SAAA;AACnB,IAAA,OAAO,cAAA,CAAe,WAAA,EAAa,UAAA,CAAW,KAAc,CAAA;AAAA,EAC9D;AASA,EAAA,IAAIC,kBAAA,CAAW,SAAS,CAAA,IAAKC,sBAAA,CAAe,SAAS,CAAA,EAAG;AACtD,IAAA,MAAM,YAAA,GAAe,SAAA;AAErB,IAAA,IAAI,WAAY,SAAA,EAAqB;AACnC,MAAA,KAAA,GAAQ,cAAA,CAAe,aAAa,SAAkB,CAAA;AAEtD,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,SAAA,EAAW,MAAA,GAAS,CAAC,CAAA;AAClD,MAAA,IAAI,gBAAA,IAAoB,kBAAA,IAAsB,cAAA,IAAkB,CAAC,eAAe,UAAA,EAAY;AAC1F,QAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,WAAA,EAAa,kBAAkB,CAAA;AAC/D,QAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,UAAA,cAAA,CAAe,UAAA,GAAa,EAAE,MAAA,EAAO;AACrC,UAAAJ,6BAAA,CAAsB,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,OAAO,YAAA,CAAa,IAAA,KAASG,kBAAA,CAAW,YAAY,IAAI,UAAA,GAAa,cAAA,CAAA;AAC3E,MAAA,MAAM,OAAA,GAAU,aAAa,OAAA,GAAU,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,YAAA,CAAa,OAAO,CAAA,CAAA,GAAK,IAAA;AAC5E,MAAA,KAAA,GAAQ,eAAA,CAAgB,WAAA,EAAa,OAAA,EAAS,kBAAA,EAAoB,gBAAgB,CAAA;AAClF,MAAAE,6BAAA,CAAsB,OAAO,OAAO,CAAA;AAAA,IACtC;AACA,IAAA,IAAI,UAAU,YAAA,EAAc;AAE1B,MAAA,KAAA,CAAM,IAAA,GAAO,EAAE,GAAG,KAAA,CAAM,MAAM,mBAAA,EAAqB,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,CAAA,EAAG;AAAA,IAC5E;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAIC,eAAA,CAAQ,SAAS,CAAA,EAAG;AAEtB,IAAA,OAAO,cAAA,CAAe,aAAa,SAAS,CAAA;AAAA,EAC9C;AACA,EAAA,IAAIC,qBAAA,CAAc,SAAS,CAAA,IAAKT,eAAA,CAAQ,SAAS,CAAA,EAAG;AAIlD,IAAA,MAAM,eAAA,GAAkB,SAAA;AACxB,IAAA,KAAA,GAAQ,oBAAA,CAAqB,WAAA,EAAa,eAAA,EAAiB,kBAAA,EAAoB,oBAAoB,CAAA;AACnG,IAAAE,6BAAA,CAAsB,KAAA,EAAO;AAAA,MAC3B,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAWA,EAAA,MAAM,oBAAA,GAAuB,OAAO,SAAS,CAAA;AAC7C,EAAA,KAAA,GAAQ,eAAA,CAAgB,WAAA,EAAa,oBAAA,EAAsB,kBAAA,EAAoB,gBAAgB,CAAA;AAC/F,EAAAK,6BAAA,CAAsB,KAAA,EAAO,sBAAsB,MAAS,CAAA;AAC5D,EAAAL,6BAAA,CAAsB,KAAA,EAAO;AAAA,IAC3B,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CACP,WAAA,EACA,OAAA,EACA,kBAAA,EACA,gBAAA,EACO;AACP,EAAA,MAAM,QAAe,EAAC;AAEtB,EAAA,IAAI,oBAAoB,kBAAA,EAAoB;AAC1C,IAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,WAAA,EAAa,kBAAkB,CAAA;AAC/D,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,CAAM,SAAA,GAAY;AAAA,QAChB,MAAA,EAAQ,CAAC,EAAE,KAAA,EAAO,SAAS,UAAA,EAAY,EAAE,MAAA,EAAO,EAAG;AAAA,OACrD;AAAA,IACF;AACA,IAAAA,6BAAA,CAAsB,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EAClD;AAEA,EAAA,IAAIQ,6BAAA,CAAsB,OAAO,CAAA,EAAG;AAClC,IAAA,MAAM,EAAE,0BAAA,EAA4B,0BAAA,EAA2B,GAAI,OAAA;AAEnE,IAAA,KAAA,CAAM,QAAA,GAAW;AAAA,MACf,OAAA,EAAS,0BAAA;AAAA,MACT,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,CAAM,OAAA,GAAU,OAAA;AAChB,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,+BAAA,CACP,SAAA,EACA,EAAE,oBAAA,EAAqB,EACf;AACR,EAAA,MAAM,IAAA,GAAOC,uCAA+B,SAAS,CAAA;AACrD,EAAA,MAAM,WAAA,GAAc,uBAAuB,mBAAA,GAAsB,WAAA;AAIjE,EAAA,IAAIP,oBAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,CAAA,iCAAA,EAAoC,WAAW,CAAA,gBAAA,EAAmB,SAAA,CAAU,OAAO,CAAA,EAAA,CAAA;AAAA,EAC5F;AAEA,EAAA,IAAIJ,eAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,MAAM,SAAA,GAAY,mBAAmB,SAAS,CAAA;AAC9C,IAAA,OAAO,WAAW,SAAS,CAAA,SAAA,EAAY,SAAA,CAAU,IAAI,iBAAiB,WAAW,CAAA,CAAA;AAAA,EACnF;AAEA,EAAA,OAAO,CAAA,mBAAA,EAAsB,WAAW,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA;AAC7D;AAEA,SAAS,mBAAmB,GAAA,EAAyC;AACnE,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAA8B,MAAA,CAAO,cAAA,CAAe,GAAG,CAAA;AAC7D,IAAA,OAAO,SAAA,GAAY,SAAA,CAAU,WAAA,CAAY,IAAA,GAAO,KAAA,CAAA;AAAA,EAClD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAGA,SAAS,2BAA2B,GAAA,EAAiD;AACnF,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA,CAAE,KAAKQ,eAAO,CAAA;AACxC;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"eventbuilder.js","sources":["../../../../src/eventbuilder.ts"],"sourcesContent":["import type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/core';\nimport {\n _INTERNAL_enhanceErrorWithSentryInfo,\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n getClient,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/core';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client?.getOptions().normalizeDepth;\n\n // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const exceptionValue: Exception = {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n };\n\n const event = {\n exception: {\n values: [exceptionValue],\n },\n extra,\n } satisfies Event;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0]!.stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\nfunction isWebAssemblyException(exception: unknown): exception is WebAssembly.Exception {\n // Check for support\n // oxlint-disable-next-line typescript/prefer-optional-chain\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nexport function extractType(ex: Error & { message: { error?: Error } }): string | undefined {\n const name = ex?.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nexport function extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex?.message;\n\n if (isWebAssemblyException(ex)) {\n // For Node 18, Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n return 'wasm exception';\n }\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return _INTERNAL_enhanceErrorWithSentryInfo(message.error);\n }\n\n return _INTERNAL_enhanceErrorWithSentryInfo(ex);\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = hint?.syntheticException || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = hint?.syntheticException || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint?.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n\n const firstException = event.exception?.values?.[0];\n if (attachStacktrace && syntheticException && firstException && !firstException.stacktrace) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n firstException.stacktrace = { frames };\n addExceptionMechanism(event, { synthetic: true });\n }\n }\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line typescript/no-deprecated\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n const stringifiedException = String(exception);\n event = eventFromString(stackParser, stringifiedException, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, stringifiedException, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record<string, unknown>,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n return Object.values(obj).find(isError);\n}\n"],"names":["getClient","normalizeToSize","isEvent","_INTERNAL_enhanceErrorWithSentryInfo","addExceptionMechanism","resolvedSyncPromise","isErrorEvent","isDOMError","isDOMException","addExceptionTypeValue","isError","isPlainObject","isParameterizedString","extractExceptionKeysForMessage"],"mappings":"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"}
|