{"version":3,"file":"js/21944-3d86ae588965ebc70040.js","mappings":"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","sources":["webpack://StravaModern/./node_modules/@strava/ui/MediaQuery/index.ts","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/metrics/utils.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/metrics/index.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/browsertracing.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/router.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/backgroundtab.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/bindReporter.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/generateUniqueID.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getNavigationEntry.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getActivationStart.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/initMetric.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/observe.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getFID.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getLCP.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/instrument.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/getCLS.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/common/fetch.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/request.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/types.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/browser/web-vitals/lib/onHidden.js","webpack://StravaModern/./node_modules/@sentry-internal/tracing/esm/common/debug-build.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/clientreport.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/client.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/debug-build.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/eventbuilder.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/helpers.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/eventbuilder.js","webpack://StravaModern/./node_modules/@sentry/core/esm/integrations/linkederrors.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metadata.js","webpack://StravaModern/./node_modules/@sentry/core/esm/integrations/metadata.js","webpack://StravaModern/./node_modules/@sentry/core/esm/transports/multiplexed.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/instance.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/browser-aggregator.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/integration.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/exports.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/measurement.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/buildPolyfills/_optionalChain.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/isSentryRequestUrl.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/isBrowser.js","webpack://StravaModern/./node_modules/@sentry/replay/esm/index.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/buildPolyfills/_nullishCoalesce.js","webpack://StravaModern/./node_modules/@sentry-internal/feedback/esm/index.js","webpack://StravaModern/./node_modules/@sentry/core/esm/transports/offline.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/transports/offline.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/profiling/utils.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/profiling/hubextensions.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/profiling/integration.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/index.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/console.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/severity.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/url.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/dedupe.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/globalhandlers.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/httpcontext.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/linkederrors.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/integrations/trycatch.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/sdk.js","webpack://StravaModern/./node_modules/@sentry/core/esm/sdk.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/stack-parsers.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/transports/utils.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/transports/fetch.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/transports/xhr.js","webpack://StravaModern/./node_modules/@sentry/browser/esm/userfeedback.js","webpack://StravaModern/./node_modules/@sentry/core/esm/api.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/envelope.js","webpack://StravaModern/./node_modules/@sentry/core/esm/baseclient.js","webpack://StravaModern/./node_modules/@sentry/core/esm/constants.js","webpack://StravaModern/./node_modules/@sentry/core/esm/debug-build.js","webpack://StravaModern/./node_modules/@sentry/core/esm/envelope.js","webpack://StravaModern/./node_modules/@sentry/core/esm/eventProcessors.js","webpack://StravaModern/./node_modules/@sentry/core/esm/exports.js","webpack://StravaModern/./node_modules/@sentry/core/esm/hub.js","webpack://StravaModern/./node_modules/@sentry/core/esm/integration.js","webpack://StravaModern/./node_modules/@sentry/core/esm/integrations/functiontostring.js","webpack://StravaModern/./node_modules/@sentry/core/esm/integrations/inboundfilters.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/constants.js","webpack://StravaModern/./node_modules/@sentry/core/esm/metrics/utils.js","webpack://StravaModern/./node_modules/@sentry/core/esm/scope.js","webpack://StravaModern/./node_modules/@sentry/core/esm/semanticAttributes.js","webpack://StravaModern/./node_modules/@sentry/core/esm/session.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/dynamicSamplingContext.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/errors.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/sampling.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/hubextensions.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/idletransaction.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/span.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/handleCallbackErrors.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/trace.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/transaction.js","webpack://StravaModern/./node_modules/@sentry/core/esm/tracing/utils.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/promisebuffer.js","webpack://StravaModern/./node_modules/@sentry/core/esm/transports/base.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/applyScopeDataToEvent.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/hasTracingEnabled.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/prepareEvent.js","webpack://StravaModern/./node_modules/@sentry/core/esm/utils/spanUtils.js","webpack://StravaModern/./node_modules/@sentry/core/esm/version.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/aggregate-errors.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/baggage.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/browser.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/debug-build.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/dsn.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/env.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/envelope.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/error.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/_handlers.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/dom.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/fetch.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/globalError.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/globalUnhandledRejection.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/vendor/supportsHistory.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/history.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/instrument/xhr.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/is.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/logger.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/misc.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/node.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/normalize.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/memo.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/object.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/ratelimit.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/stacktrace.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/string.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/supports.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/syncpromise.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/time.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/tracing.js","webpack://StravaModern/./node_modules/@sentry/utils/esm/worldwide.js"],"sourcesContent":["import MediaQuery from 'react-responsive';\n\nexport const breakpoints: {\n [key: string]: number;\n} = {\n screenXs: 480,\n screenXsMax: 767,\n screenSm: 768,\n screenSmMax: 991,\n screenMd: 992,\n screenMdMax: 1199,\n screenLg: 1200,\n screenLgMax: 1249,\n screenXl: 1250\n};\n\nexport const matchMaxMedia = {\n screenXs() {\n return window.matchMedia(`(max-width: ${breakpoints.screenXs}px)`).matches;\n },\n\n screenXsMax() {\n return window.matchMedia(`(max-width: ${breakpoints.screenXsMax}px)`)\n .matches;\n },\n\n screenSm() {\n return window.matchMedia(`(max-width: ${breakpoints.screenSm}px)`).matches;\n },\n\n screenSmMax() {\n return window.matchMedia(`(max-width: ${breakpoints.screenSmMax}px)`)\n .matches;\n },\n\n screenMd() {\n return window.matchMedia(`(max-width: ${breakpoints.screenMd}px)`).matches;\n },\n\n screenMdMax() {\n return window.matchMedia(`(max-width: ${breakpoints.screenMdMax}px)`)\n .matches;\n },\n\n screenLg() {\n return window.matchMedia(`(max-width: ${breakpoints.screenLg}px)`).matches;\n },\n\n screenLgMax() {\n return window.matchMedia(`(max-width: ${breakpoints.screenLgMax}px)`)\n .matches;\n },\n\n screenXl() {\n return window.matchMedia(`(max-width: ${breakpoints.screenXl}px)`).matches;\n }\n};\n\nexport const matchMinMedia = {\n screenXs() {\n return window.matchMedia(`(min-width: ${breakpoints.screenXs}px)`).matches;\n },\n\n screenSm() {\n return window.matchMedia(`(min-width: ${breakpoints.screenSm}px)`).matches;\n },\n\n screenMd() {\n return window.matchMedia(`(min-width: ${breakpoints.screenMd}px)`).matches;\n },\n\n screenLg() {\n return window.matchMedia(`(min-width: ${breakpoints.screenLg}px)`).matches;\n },\n\n screenXl() {\n return window.matchMedia(`(min-width: ${breakpoints.screenXl}px)`).matches;\n }\n};\n\nexport default MediaQuery;\n","/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction _startChild(transaction, { startTimestamp, ...ctx }) {\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n transaction.startTimestamp = startTimestamp;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n return transaction.startChild({\n startTimestamp,\n ...ctx,\n });\n}\n\nexport { _startChild, isMeasurementValue };\n//# sourceMappingURL=utils.js.map\n","import { getActiveTransaction } from '@sentry/core';\nimport { browserPerformanceTimeOrigin, htmlTreeAsString, getComponentName, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../../common/debug-build.js';\nimport { addPerformanceInstrumentationHandler, addClsInstrumentationHandler, addLcpInstrumentationHandler, addFidInstrumentationHandler } from '../instrument.js';\nimport { WINDOW } from '../types.js';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher.js';\nimport { _startChild, isMeasurementValue } from './utils.js';\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n return time / 1000;\n}\n\nfunction getBrowserPerformanceAPI() {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals() {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCallback = _trackFID();\n const clsCallback = _trackCLS();\n const lcpCallback = _trackLCP();\n\n return () => {\n fidCallback();\n clsCallback();\n lcpCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() ;\n if (!transaction) {\n return;\n }\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild({\n description: 'Main UI thread blocked',\n op: 'ui.long-task',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n });\n }\n });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n for (const entry of entries) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction() ;\n if (!transaction) {\n return;\n }\n\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin ) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const span = {\n description: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n origin: 'auto.ui.browser.metrics',\n startTimestamp: startTime,\n endTimestamp: startTime + duration,\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n span.attributes = { 'ui.component_name': componentName };\n }\n\n // eslint-disable-next-line deprecation/deprecation\n transaction.startChild(span);\n }\n }\n });\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS() {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry ;\n });\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry ;\n });\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin );\n const startTime = msToSec(entry.startTime);\n DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(transaction) {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n let responseStartTimestamp;\n let requestStartTimestamp;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n performanceEntries.slice(_performanceCursor).forEach((entry) => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(entry.duration);\n\n if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(transaction, entry, timeOrigin);\n responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n const resourceName = (entry.name ).replace(WINDOW.location.origin, '');\n _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n break;\n }\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(transaction);\n\n // Measurements are only available for pageload transactions\n if (transaction.op === 'pageload') {\n // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n // start of the response in milliseconds\n if (typeof responseStartTimestamp === 'number') {\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = {\n value: (responseStartTimestamp - transaction.startTimestamp) * 1000,\n unit: 'millisecond',\n };\n\n if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n // Capture the time spent making the request and receiving the first byte of the response.\n // This is the time between the start of the request and the start of the response in milliseconds.\n _measurements['ttfb.requestTime'] = {\n value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n unit: 'millisecond',\n };\n }\n }\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!_measurements[name] || timeOrigin >= transaction.startTimestamp) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n const oldValue = _measurements[name].value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n const delta = normalizedValue - oldValue;\n\n DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n _measurements[name].value = normalizedValue;\n });\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: fidMark.value + msToSec(_measurements['fid'].value),\n op: 'ui.action',\n origin: 'auto.ui.browser.metrics',\n startTimestamp: fidMark.value,\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in _measurements)) {\n delete _measurements.cls;\n }\n\n Object.keys(_measurements).forEach(measurementName => {\n transaction.setMeasurement(\n measurementName,\n _measurements[measurementName].value,\n _measurements[measurementName].unit,\n );\n });\n\n _tagMetricInfo(transaction);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nfunction _addMeasureSpans(\n transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry,\n startTime,\n duration,\n timeOrigin,\n) {\n const measureStartTimestamp = timeOrigin + startTime;\n const measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name ,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType ,\n origin: 'auto.resource.browser.metrics',\n startTimestamp: measureStartTimestamp,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(transaction, entry, timeOrigin) {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n transaction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry,\n event,\n timeOrigin,\n description,\n eventEnd,\n) {\n const end = eventEnd ? (entry[eventEnd] ) : (entry[`${event}End`] );\n const start = entry[`${event}Start`] ;\n if (!start || !end) {\n return;\n }\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: description || event,\n startTimestamp: timeOrigin + msToSec(start),\n endTimestamp: timeOrigin + msToSec(end),\n });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(transaction, entry, timeOrigin) {\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'request',\n startTimestamp: timeOrigin + msToSec(entry.requestStart ),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n });\n\n _startChild(transaction, {\n op: 'browser',\n origin: 'auto.browser.browser.metrics',\n description: 'response',\n startTimestamp: timeOrigin + msToSec(entry.responseStart ),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n });\n}\n\n/** Create resource-related spans */\nfunction _addResourceSpans(\n transaction,\n entry,\n resourceName,\n startTime,\n duration,\n timeOrigin,\n) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const data = {};\n setResourceEntrySizeData(data, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(data, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(data, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n if ('renderBlockingStatus' in entry) {\n data['resource.render_blocking_status'] = entry.renderBlockingStatus;\n }\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceName,\n endTimestamp,\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n origin: 'auto.resource.browser.metrics',\n startTimestamp,\n data,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction) {\n const navigator = WINDOW.navigator ;\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction) {\n if (_lcpEntry) {\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n data,\n entry,\n key,\n dataKey,\n) {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n data[dataKey] = entryVal;\n }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingInteractions, startTrackingLongTasks, startTrackingWebVitals };\n//# sourceMappingURL=index.js.map\n","import { TRACING_DEFAULTS, addTracingExtensions, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, startIdleTransaction, spanIsSampled, getActiveTransaction } from '@sentry/core';\nimport { logger, tracingContextFromHeaders, getDomElement } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { startTrackingWebVitals, startTrackingLongTasks, startTrackingInteractions, addPerformanceEntries } from './metrics/index.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\nimport { instrumentRoutingWithDefaults } from './router.js';\nimport { WINDOW } from './types.js';\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n ...TRACING_DEFAULTS,\n markBackgroundTransactions: true,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true,\n enableLongTask: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nclass BrowserTracing {\n // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n // integrations.\n\n /** Browser Tracing integration options */\n\n /**\n * @inheritDoc\n */\n\n constructor(_options) {\n this.name = BROWSER_TRACING_INTEGRATION_ID;\n this._hasSetTracePropagationTargets = false;\n\n addTracingExtensions();\n\n if (DEBUG_BUILD) {\n this._hasSetTracePropagationTargets = !!(\n _options &&\n // eslint-disable-next-line deprecation/deprecation\n (_options.tracePropagationTargets || _options.tracingOrigins)\n );\n }\n\n this.options = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n // Special case: enableLongTask can be set in _experiments\n // TODO (v8): Remove this in v8\n if (this.options._experiments.enableLongTask !== undefined) {\n this.options.enableLongTask = this.options._experiments.enableLongTask;\n }\n\n // TODO (v8): remove this block after tracingOrigins is removed\n // Set tracePropagationTargets to tracingOrigins if specified by the user\n // In case both are specified, tracePropagationTargets takes precedence\n // eslint-disable-next-line deprecation/deprecation\n if (_options && !_options.tracePropagationTargets && _options.tracingOrigins) {\n // eslint-disable-next-line deprecation/deprecation\n this.options.tracePropagationTargets = _options.tracingOrigins;\n }\n\n this._collectWebVitals = startTrackingWebVitals();\n if (this.options.enableLongTask) {\n startTrackingLongTasks();\n }\n if (this.options._experiments.enableInteractions) {\n startTrackingInteractions();\n }\n }\n\n /**\n * @inheritDoc\n */\n setupOnce(_, getCurrentHub) {\n this._getCurrentHub = getCurrentHub;\n const hub = getCurrentHub();\n const client = hub.getClient();\n const clientOptions = client && client.getOptions();\n\n const {\n routingInstrumentation: instrumentRouting,\n startTransactionOnLocationChange,\n startTransactionOnPageLoad,\n markBackgroundTransactions,\n traceFetch,\n traceXHR,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n _experiments,\n } = this.options;\n\n const clientOptionsTracePropagationTargets = clientOptions && clientOptions.tracePropagationTargets;\n // There are three ways to configure tracePropagationTargets:\n // 1. via top level client option `tracePropagationTargets`\n // 2. via BrowserTracing option `tracePropagationTargets`\n // 3. via BrowserTracing option `tracingOrigins` (deprecated)\n //\n // To avoid confusion, favour top level client option `tracePropagationTargets`, and fallback to\n // BrowserTracing option `tracePropagationTargets` and then `tracingOrigins` (deprecated).\n // This is done as it minimizes bundle size (we don't have to have undefined checks).\n //\n // If both 1 and either one of 2 or 3 are set (from above), we log out a warning.\n // eslint-disable-next-line deprecation/deprecation\n const tracePropagationTargets = clientOptionsTracePropagationTargets || this.options.tracePropagationTargets;\n if (DEBUG_BUILD && this._hasSetTracePropagationTargets && clientOptionsTracePropagationTargets) {\n logger.warn(\n '[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used.',\n );\n }\n\n instrumentRouting(\n (context) => {\n const transaction = this._createRouteTransaction(context);\n\n this.options._experiments.onStartRouteTransaction &&\n this.options._experiments.onStartRouteTransaction(transaction, context, getCurrentHub);\n\n return transaction;\n },\n startTransactionOnPageLoad,\n startTransactionOnLocationChange,\n );\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n if (_experiments.enableInteractions) {\n this._registerInteractionListener();\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n }\n\n /** Create routing idle transaction. */\n _createRouteTransaction(context) {\n if (!this._getCurrentHub) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n\n const { beforeNavigate, idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n\n const isPageloadTransaction = context.op === 'pageload';\n\n const sentryTrace = isPageloadTransaction ? getMetaContent('sentry-trace') : '';\n const baggage = isPageloadTransaction ? getMetaContent('baggage') : '';\n const { traceparentData, dynamicSamplingContext, propagationContext } = tracingContextFromHeaders(\n sentryTrace,\n baggage,\n );\n\n const expandedContext = {\n ...context,\n ...traceparentData,\n metadata: {\n // eslint-disable-next-line deprecation/deprecation\n ...context.metadata,\n dynamicSamplingContext: traceparentData && !dynamicSamplingContext ? {} : dynamicSamplingContext,\n },\n trimEnd: true,\n };\n\n const modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n const finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n // If `beforeNavigate` set a custom name, record that fact\n // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata =\n finalContext.name !== expandedContext.name\n ? // eslint-disable-next-line deprecation/deprecation\n { ...finalContext.metadata, source: 'custom' }\n : // eslint-disable-next-line deprecation/deprecation\n finalContext.metadata;\n\n this._latestRouteName = finalContext.name;\n\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromData = context.data && context.data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n // eslint-disable-next-line deprecation/deprecation\n const sourceFromMetadata = finalContext.metadata && finalContext.metadata.source;\n\n this._latestRouteSource = sourceFromData || sourceFromMetadata;\n\n // eslint-disable-next-line deprecation/deprecation\n if (finalContext.sampled === false) {\n DEBUG_BUILD && logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n }\n\n DEBUG_BUILD && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n const { location } = WINDOW;\n\n const idleTransaction = startIdleTransaction(\n hub,\n finalContext,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n );\n\n const scope = hub.getScope();\n\n // If it's a pageload and there is a meta tag set\n // use the traceparentData as the propagation context\n if (isPageloadTransaction && traceparentData) {\n scope.setPropagationContext(propagationContext);\n } else {\n // Navigation transactions should set a new propagation context based on the\n // created idle transaction.\n scope.setPropagationContext({\n traceId: idleTransaction.spanContext().traceId,\n spanId: idleTransaction.spanContext().spanId,\n parentSpanId: idleTransaction.parentSpanId,\n sampled: spanIsSampled(idleTransaction),\n });\n }\n\n idleTransaction.registerBeforeFinishCallback(transaction => {\n this._collectWebVitals();\n addPerformanceEntries(transaction);\n });\n\n return idleTransaction ;\n }\n\n /** Start listener for interaction transactions */\n _registerInteractionListener() {\n let inflightInteractionTransaction;\n const registerInteractionTransaction = () => {\n const { idleTimeout, finalTimeout, heartbeatInterval } = this.options;\n const op = 'ui.action.click';\n\n // eslint-disable-next-line deprecation/deprecation\n const currentTransaction = getActiveTransaction();\n if (currentTransaction && currentTransaction.op && ['navigation', 'pageload'].includes(currentTransaction.op)) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Did not create ${op} transaction because a pageload or navigation transaction is in progress.`,\n );\n return undefined;\n }\n\n if (inflightInteractionTransaction) {\n inflightInteractionTransaction.setFinishReason('interactionInterrupted');\n inflightInteractionTransaction.end();\n inflightInteractionTransaction = undefined;\n }\n\n if (!this._getCurrentHub) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n if (!this._latestRouteName) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n const hub = this._getCurrentHub();\n const { location } = WINDOW;\n\n const context = {\n name: this._latestRouteName,\n op,\n trimEnd: true,\n data: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRouteSource || 'url',\n },\n };\n\n inflightInteractionTransaction = startIdleTransaction(\n hub,\n context,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n heartbeatInterval,\n );\n };\n\n ['click'].forEach(type => {\n addEventListener(type, registerInteractionTransaction, { once: false, capture: true });\n });\n }\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, BrowserTracing, getMetaContent };\n//# sourceMappingURL=browsertracing.js.map\n","import { logger, browserPerformanceTimeOrigin, addHistoryInstrumentationHandler } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nfunction instrumentRoutingWithDefaults(\n customStartTransaction,\n startTransactionOnPageLoad = true,\n startTransactionOnLocationChange = true,\n) {\n if (!WINDOW || !WINDOW.location) {\n DEBUG_BUILD && logger.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n let startingUrl = WINDOW.location.href;\n\n let activeTransaction;\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTimestamp: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n op: 'pageload',\n origin: 'auto.pageload.browser',\n metadata: { source: 'url' },\n });\n }\n\n if (startTransactionOnLocationChange) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n if (activeTransaction) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeTransaction.end();\n }\n activeTransaction = customStartTransaction({\n name: WINDOW.location.pathname,\n op: 'navigation',\n origin: 'auto.navigation.browser',\n metadata: { source: 'url' },\n });\n }\n });\n }\n}\n\nexport { instrumentRoutingWithDefaults };\n//# sourceMappingURL=router.js.map\n","import { getActiveTransaction } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n // eslint-disable-next-line deprecation/deprecation\n const activeTransaction = getActiveTransaction() ;\n if (WINDOW.document.hidden && activeTransaction) {\n const statusType = 'cancelled';\n\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n );\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!activeTransaction.status) {\n activeTransaction.setStatus(statusType);\n }\n // TODO: Can we rewrite this to an attribute?\n // eslint-disable-next-line deprecation/deprecation\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","const bindReporter = (\n callback,\n metric,\n reportAllChanges,\n) => {\n let prevValue;\n let delta;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n callback(metric);\n }\n }\n }\n };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","import { WINDOW } from '../../types.js';\n\n/*\n * Copyright 2022 Google LLC\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 * https://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 */\n\nconst getNavigationEntryFromPerformanceTiming = () => {\n // eslint-disable-next-line deprecation/deprecation\n const timing = WINDOW.performance.timing;\n // eslint-disable-next-line deprecation/deprecation\n const type = WINDOW.performance.navigation.type;\n\n const navigationEntry = {\n entryType: 'navigation',\n startTime: 0,\n type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',\n };\n\n for (const key in timing) {\n if (key !== 'navigationStart' && key !== 'toJSON') {\n // eslint-disable-next-line deprecation/deprecation\n navigationEntry[key] = Math.max((timing[key ] ) - timing.navigationStart, 0);\n }\n }\n return navigationEntry ;\n};\n\nconst getNavigationEntry = () => {\n if (WINDOW.__WEB_VITALS_POLYFILL__) {\n return (\n WINDOW.performance &&\n ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||\n getNavigationEntryFromPerformanceTiming())\n );\n } else {\n return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n }\n};\n\nexport { getNavigationEntry };\n//# sourceMappingURL=getNavigationEntry.js.map\n","import { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2022 Google LLC\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 * https://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 */\n\nconst getActivationStart = () => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n\nexport { getActivationStart };\n//# sourceMappingURL=getActivationStart.js.map\n","import { WINDOW } from '../../types.js';\nimport { generateUniqueID } from './generateUniqueID.js';\nimport { getActivationStart } from './getActivationStart.js';\nimport { getNavigationEntry } from './getNavigationEntry.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\nconst initMetric = (name, value) => {\n const navEntry = getNavigationEntry();\n let navigationType = 'navigate';\n\n if (navEntry) {\n if (WINDOW.document.prerendering || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else {\n navigationType = navEntry.type.replace(/_/g, '-') ;\n }\n }\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good', // Will be updated if the value changes.\n delta: 0,\n entries: [],\n id: generateUniqueID(),\n navigationType,\n };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n type,\n callback,\n opts,\n) => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n callback(list.getEntries() );\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) ,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\n/**\n * Calculates the [FID](https://web.dev/fid/) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport) => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report;\n\n const handleEntry = (entry) => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries) => {\n (entries ).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n report = bindReporter(onReport, metric);\n\n if (po) {\n onHidden(() => {\n handleEntries(po.takeRecords() );\n po.disconnect();\n }, true);\n }\n};\n\nexport { onFID };\n//# sourceMappingURL=getFID.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getActivationStart } from './lib/getActivationStart.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\nconst reportedMetricIDs = {};\n\n/**\n * Calculates the [LCP](https://web.dev/lcp/) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n */\nconst onLCP = (onReport) => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report;\n\n const handleEntries = (entries) => {\n const lastEntry = entries[entries.length - 1] ;\n if (lastEntry) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered.\n const value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n\n // Only report if the page wasn't hidden prior to LCP.\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries = [lastEntry];\n report();\n }\n }\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric);\n\n const stopListening = () => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() );\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n };\n\n // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n addEventListener(type, stopListening, { once: true, capture: true });\n });\n\n onHidden(stopListening, true);\n\n return stopListening;\n }\n\n return;\n};\n\nexport { onLCP };\n//# sourceMappingURL=getLCP.js.map\n","import { logger, getFunctionName } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../common/debug-build.js';\nimport { onCLS } from './web-vitals/getCLS.js';\nimport { onFID } from './web-vitals/getFID.js';\nimport { onLCP } from './web-vitals/getLCP.js';\nimport { observe } from './web-vitals/lib/observe.js';\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addClsInstrumentationHandler(callback) {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addLcpInstrumentationHandler(callback) {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n type,\n callback,\n) {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls() {\n onCLS(metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n });\n}\n\nfunction instrumentFid() {\n onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp() {\n onLCP(metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n });\n}\n\nfunction addMetricObserver(\n type,\n callback,\n instrumentFn,\n previousValue,\n) {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback);\n}\n\nfunction instrumentPerformanceObserver(type) {\n const options = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type, handler) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(type, callback) {\n return () => {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n\nexport { addClsInstrumentationHandler, addFidInstrumentationHandler, addLcpInstrumentationHandler, addPerformanceInstrumentationHandler };\n//# sourceMappingURL=instrument.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\n/**\n * Calculates the [CLS](https://web.dev/cls/) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/cls/#layout-shift-score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport) => {\n const metric = initMetric('CLS', 0);\n let report;\n\n let sessionValue = 0;\n let sessionEntries = [];\n\n // const handleEntries = (entries: Metric['entries']) => {\n const handleEntries = (entries) => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n if (\n sessionValue &&\n sessionEntries.length !== 0 &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n if (report) {\n report();\n }\n }\n }\n });\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric);\n\n const stopListening = () => {\n handleEntries(po.takeRecords() );\n report(true);\n };\n\n onHidden(stopListening);\n\n return stopListening;\n }\n\n return;\n};\n\nexport { onCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { hasTracingEnabled, getCurrentScope, getClient, getActiveSpan, spanToTraceHeader, getDynamicSamplingContextFromSpan, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport { generateSentryTraceHeader, dynamicSamplingContextToSentryBaggageHeader, isInstanceOf, BAGGAGE_HEADER_NAME } from '@sentry/utils';\n\n/**\n * Create and track fetch request spans for usage in combination with `addInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n spanOrigin = 'auto.http.browser',\n) {\n if (!hasTracingEnabled() || !handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n if (handlerData.response) {\n span.setHttpStatus(handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus('internal_error');\n }\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const client = getClient();\n const parentSpan = getActiveSpan();\n\n const { method, url } = handlerData.fetchData;\n\n const span =\n shouldCreateSpanResult && parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild({\n data: {\n url,\n type: 'fetch',\n 'http.method': method,\n },\n description: `${method} ${url}`,\n op: 'http.client',\n origin: spanOrigin,\n })\n : undefined;\n\n if (span) {\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n }\n\n if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n const request = handlerData.args[0];\n\n // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n handlerData.args[1] = handlerData.args[1] || {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options = handlerData.args[1];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n options.headers = addTracingHeadersToFetchRequest(request, client, scope, options, span);\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nfunction addTracingHeadersToFetchRequest(\n request, // unknown is actually type Request but we can't export DOM types from this package,\n client,\n scope,\n options\n\n,\n requestSpan,\n) {\n // eslint-disable-next-line deprecation/deprecation\n const span = requestSpan || scope.getSpan();\n\n const transaction = span && span.transaction;\n\n const { traceId, sampled, dsc } = scope.getPropagationContext();\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, undefined, sampled);\n const dynamicSamplingContext = transaction\n ? getDynamicSamplingContextFromSpan(transaction)\n : dsc\n ? dsc\n : getDynamicSamplingContextFromClient(traceId, client, scope);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n\n const headers =\n typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request ).headers : options.headers;\n\n if (!headers) {\n return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n const newHeaders = new Headers(headers );\n\n newHeaders.append('sentry-trace', sentryTraceHeader);\n\n if (sentryBaggageHeader) {\n // If the same header is appended multiple times the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n\n return newHeaders ;\n } else if (Array.isArray(headers)) {\n const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n if (sentryBaggageHeader) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n }\n\n return newHeaders ;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n const newBaggageHeaders = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders.push(...existingBaggageHeader);\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(existingBaggageHeader);\n }\n\n if (sentryBaggageHeader) {\n newBaggageHeaders.push(sentryBaggageHeader);\n }\n\n return {\n ...(headers ),\n 'sentry-trace': sentryTraceHeader,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest };\n//# sourceMappingURL=fetch.js.map\n","import { spanToJSON, hasTracingEnabled, getCurrentScope, getActiveSpan, getDynamicSamplingContextFromSpan, spanToTraceHeader, getClient, getDynamicSamplingContextFromClient } from '@sentry/core';\nimport { addFetchInstrumentationHandler, addXhrInstrumentationHandler, SENTRY_XHR_DATA_KEY, dynamicSamplingContextToSentryBaggageHeader, generateSentryTraceHeader, BAGGAGE_HEADER_NAME, browserPerformanceTimeOrigin, stringMatchesSomePattern } from '@sentry/utils';\nimport { instrumentFetchRequest } from '../common/fetch.js';\nimport { addPerformanceInstrumentationHandler } from './instrument.js';\n\n/* eslint-disable max-lines */\n\nconst DEFAULT_TRACE_PROPAGATION_TARGETS = ['localhost', /^\\/(?!\\/)/];\n\n/** Options for Request Instrumentation */\n\nconst defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n // TODO (v8): Remove this property\n tracingOrigins: DEFAULT_TRACE_PROPAGATION_TARGETS,\n tracePropagationTargets: DEFAULT_TRACE_PROPAGATION_TARGETS,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(_options) {\n const {\n traceFetch,\n traceXHR,\n // eslint-disable-next-line deprecation/deprecation\n tracePropagationTargets,\n // eslint-disable-next-line deprecation/deprecation\n tracingOrigins,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n // TODO(v8) Remove tracingOrigins here\n // The only reason we're passing it in here is because this instrumentOutgoingRequests function is publicly exported\n // and we don't want to break the API. We can remove it in v8.\n const shouldAttachHeadersWithTargets = (url) =>\n shouldAttachHeaders(url, tracePropagationTargets || tracingOrigins);\n\n const spans = {};\n\n if (traceFetch) {\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry ).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/');\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1];\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time = 0) {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * This was extracted from `instrumentOutgoingRequests` to make it easier to test shouldAttachHeaders.\n * We only export this fuction for testing purposes.\n */\nfunction shouldAttachHeaders(url, tracePropagationTargets) {\n return stringMatchesSomePattern(url, tracePropagationTargets || DEFAULT_TRACE_PROPAGATION_TARGETS);\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\n// eslint-disable-next-line complexity\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n) {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!hasTracingEnabled() || !xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n span.setHttpStatus(sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const parentSpan = getActiveSpan();\n\n const span =\n shouldCreateSpanResult && parentSpan\n ? // eslint-disable-next-line deprecation/deprecation\n parentSpan.startChild({\n data: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n url: sentryXhrData.url,\n },\n description: `${sentryXhrData.method} ${sentryXhrData.url}`,\n op: 'http.client',\n origin: 'auto.http.browser',\n })\n : undefined;\n\n if (span) {\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n }\n\n if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url)) {\n if (span) {\n const transaction = span && span.transaction;\n const dynamicSamplingContext = transaction && getDynamicSamplingContextFromSpan(transaction);\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n setHeaderOnXhr(xhr, spanToTraceHeader(span), sentryBaggageHeader);\n } else {\n const client = getClient();\n const { traceId, sampled, dsc } = scope.getPropagationContext();\n const sentryTraceHeader = generateSentryTraceHeader(traceId, undefined, sampled);\n const dynamicSamplingContext =\n dsc || (client ? getDynamicSamplingContextFromClient(traceId, client, scope) : undefined);\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(dynamicSamplingContext);\n setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n }\n }\n\n return span;\n}\n\nfunction setHeaderOnXhr(\n xhr,\n sentryTraceHeader,\n sentryBaggageHeader,\n) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nexport { DEFAULT_TRACE_PROPAGATION_TARGETS, defaultRequestInstrumentationOptions, extractNetworkProtocol, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nexport { WINDOW };\n//# sourceMappingURL=types.js.map\n","import { WINDOW } from '../../types.js';\nimport { onHidden } from './onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n // If the document is hidden and not prerendering, assume it was always\n // hidden and the page was loaded in the background.\n return WINDOW.document.visibilityState === 'hidden' && !WINDOW.document.prerendering ? 0 : Infinity;\n};\n\nconst trackChanges = () => {\n // Update the time if/when the document becomes hidden.\n onHidden(({ timeStamp }) => {\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nconst getVisibilityWatcher = (\n\n) => {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n trackChanges();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { WINDOW } from '../../types.js';\n\n/*\n * Copyright 2020 Google LLC\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 * https://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 */\n\nconst onHidden = (cb, once) => {\n const onHiddenOrPageHide = (event) => {\n if (event.type === 'pagehide' || WINDOW.document.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n discarded_events,\n dsn,\n timestamp,\n) {\n const clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","import { BaseClient, SDK_VERSION } from '@sentry/core';\nimport { getSDKSource, logger, createClientReportEnvelope, dsnToString } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.browser',\n packages: [\n {\n name: `${sdkSource}:@sentry/browser`,\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n\n super(options);\n\n if (options.sendClientReports && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n if (WINDOW.document.visibilityState === 'hidden') {\n this._flushOutcomes();\n }\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n eventFromMessage(\n message,\n // eslint-disable-next-line deprecation/deprecation\n level = 'info',\n hint,\n ) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n captureUserFeedback(feedback) {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // _sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._sendEnvelope(envelope);\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { getClient } from '@sentry/core';\nimport { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\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 = {\n type: ex && ex.name,\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\n/**\n * @hidden\n */\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception ).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\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 popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\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\nfunction getPopSize(ex) {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\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 */\nfunction extractMessage(ex) {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && 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 && 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 */\nfunction eventFromMessage(\n stackParser,\n message,\n // eslint-disable-next-line deprecation/deprecation\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n stackParser,\n exception,\n syntheticException,\n attachStacktrace,\n isUnhandledRejection,\n) {\n let event;\n\n if (isErrorEvent(exception ) && (exception ).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception ;\n return eventFromError(stackParser, errorEvent.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 ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\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 deprecation/deprecation\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 event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromString(\n stackParser,\n message,\n syntheticException,\n attachStacktrace,\n) {\n const 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 }\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,\n { isUnhandledRejection },\n) {\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) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\nexport { eventFromError, eventFromException, eventFromMessage, eventFromPlainObject, eventFromString, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { withScope, captureException } from '@sentry/core';\nimport { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, addExceptionTypeValue, addExceptionMechanism } from '@sentry/utils';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n fn,\n options\n\n = {},\n before,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n const wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n return wrapper;\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n /* eslint-disable prefer-rest-params */\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function () {\n const args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n const wrappedArguments = args.map((arg) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n /* eslint-enable prefer-rest-params */\n\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (const property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n // eslint-disable-next-line no-empty\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n *\n * @deprecated This type will be removed in the next major version of the Sentry SDK. `showReportDialog` will still be around, however the `eventId` option will now be required.\n */\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { isError, isPlainObject, isParameterizedString } from './is.js';\nimport { addExceptionTypeValue, addExceptionMechanism } from './misc.js';\nimport { normalizeToSize } from './normalize.js';\nimport { extractExceptionKeysForMessage } from './object.js';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nfunction parseStackFrames(stackParser, error) {\n return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nfunction exceptionFromError(stackParser, error) {\n const exception = {\n type: error.name || error.constructor.name,\n value: error.message,\n };\n\n const frames = parseStackFrames(stackParser, error);\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n return exception;\n}\n\nfunction getMessageForObject(exception) {\n if ('name' in exception && typeof exception.name === 'string') {\n let message = `'${exception.name}' captured as exception`;\n\n if ('message' in exception && typeof exception.message === 'string') {\n message += ` with message '${exception.message}'`;\n }\n\n return message;\n } else if ('message' in exception && typeof exception.message === 'string') {\n return exception.message;\n } else {\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n return `Object captured as exception with keys: ${extractExceptionKeysForMessage(\n exception ,\n )}`;\n }\n}\n\n/**\n * Builds and Event from a Exception\n *\n * TODO(v8): Remove getHub fallback\n * @hidden\n */\nfunction eventFromUnknownInput(\n getHubOrClient,\n stackParser,\n exception,\n hint,\n) {\n const client = typeof getHubOrClient === 'function' ? getHubOrClient().getClient() : getHubOrClient;\n\n let ex = exception;\n const providedMechanism =\n hint && hint.data && (hint.data ).mechanism;\n const mechanism = providedMechanism || {\n handled: true,\n type: 'generic',\n };\n\n let extras;\n\n if (!isError(exception)) {\n if (isPlainObject(exception)) {\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n extras = { ['__serialized__']: normalizeToSize(exception , normalizeDepth) };\n\n const message = getMessageForObject(exception);\n ex = (hint && hint.syntheticException) || new Error(message);\n (ex ).message = message;\n } else {\n // This handles when someone does: `throw \"something awesome\";`\n // We use synthesized Error here so we can extract a (rough) stack trace.\n ex = (hint && hint.syntheticException) || new Error(exception );\n (ex ).message = exception ;\n }\n mechanism.synthetic = true;\n }\n\n const event = {\n exception: {\n values: [exceptionFromError(stackParser, ex )],\n },\n };\n\n if (extras) {\n event.extra = extras;\n }\n\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, mechanism);\n\n return {\n ...event,\n event_id: hint && hint.event_id,\n };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n stackParser,\n message,\n // eslint-disable-next-line deprecation/deprecation\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const event = {\n event_id: hint && hint.event_id,\n level,\n };\n\n if (attachStacktrace && hint && hint.syntheticException) {\n const frames = parseStackFrames(stackParser, hint.syntheticException);\n if (frames.length) {\n event.exception = {\n values: [\n {\n value: message,\n stacktrace: { frames },\n },\n ],\n };\n }\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\nexport { eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.js.map\n","import { applyAggregateErrorsToEvent, exceptionFromError } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst linkedErrorsIntegration = (options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n};\n\n/** Adds SDK info to an event. */\n// eslint-disable-next-line deprecation/deprecation\nconst LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration);\n\nexport { LinkedErrors };\n//# sourceMappingURL=linkederrors.js.map\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set();\n\nfunction ensureMetadataStacksAreParsed(parser) {\n if (!GLOBAL_OBJ._sentryModuleMetadata) {\n return;\n }\n\n for (const stack of Object.keys(GLOBAL_OBJ._sentryModuleMetadata)) {\n const metadata = GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n if (parsedStacks.has(stack)) {\n continue;\n }\n\n // Ensure this stack doesn't get parsed again\n parsedStacks.add(stack);\n\n const frames = parser(stack);\n\n // Go through the frames starting from the top of the stack and find the first one with a filename\n for (const frame of frames.reverse()) {\n if (frame.filename) {\n // Save the metadata for this filename\n filenameMetadataMap.set(frame.filename, metadata);\n break;\n }\n }\n }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getMetadataForUrl(parser, filename) {\n ensureMetadataStacksAreParsed(parser);\n return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nfunction addMetadataToStackFrames(parser, event) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n if (!exception.stacktrace) {\n return;\n }\n\n for (const frame of exception.stacktrace.frames || []) {\n if (!frame.filename) {\n continue;\n }\n\n const metadata = getMetadataForUrl(parser, frame.filename);\n\n if (metadata) {\n frame.module_metadata = metadata;\n }\n }\n });\n } catch (_) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nfunction stripMetadataFromStackFrames(event) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n if (!exception.stacktrace) {\n return;\n }\n\n for (const frame of exception.stacktrace.frames || []) {\n delete frame.module_metadata;\n }\n });\n } catch (_) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\nexport { addMetadataToStackFrames, getMetadataForUrl, stripMetadataFromStackFrames };\n//# sourceMappingURL=metadata.js.map\n","import { forEachEnvelopeItem } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration.js';\nimport { stripMetadataFromStackFrames, addMetadataToStackFrames } from '../metadata.js';\n\nconst INTEGRATION_NAME = 'ModuleMetadata';\n\nconst moduleMetadataIntegration = () => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (typeof client.on !== 'function') {\n return;\n }\n\n // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n client.on('beforeEnvelope', envelope => {\n forEachEnvelopeItem(envelope, (item, type) => {\n if (type === 'event') {\n const event = Array.isArray(item) ? (item )[1] : undefined;\n\n if (event) {\n stripMetadataFromStackFrames(event);\n item[1] = event;\n }\n }\n });\n });\n },\n\n processEvent(event, _hint, client) {\n const stackParser = client.getOptions().stackParser;\n addMetadataToStackFrames(stackParser, event);\n return event;\n },\n };\n};\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n */\n// eslint-disable-next-line deprecation/deprecation\nconst ModuleMetadata = convertIntegrationFnToClass(INTEGRATION_NAME, moduleMetadataIntegration);\n\nexport { ModuleMetadata };\n//# sourceMappingURL=metadata.js.map\n","import { dsnFromString, forEachEnvelopeItem } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api.js';\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nfunction eventFromEnvelope(env, types) {\n let event;\n\n forEachEnvelopeItem(env, (item, type) => {\n if (types.includes(type)) {\n event = Array.isArray(item) ? (item )[1] : undefined;\n }\n // bail out if we found an event\n return !!event;\n });\n\n return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport(\n createTransport,\n release,\n) {\n return options => {\n const transport = createTransport(options);\n\n return {\n send: async (envelope) => {\n const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n if (event) {\n event.release = release;\n }\n return transport.send(envelope);\n },\n flush: timeout => transport.flush(timeout),\n };\n };\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nfunction makeMultiplexedTransport(\n createTransport,\n matcher,\n) {\n return options => {\n const fallbackTransport = createTransport(options);\n const otherTransports = {};\n\n function getTransport(dsn, release) {\n // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n // use at the same time\n const key = release ? `${dsn}:${release}` : dsn;\n\n if (!otherTransports[key]) {\n const validatedDsn = dsnFromString(dsn);\n if (!validatedDsn) {\n return undefined;\n }\n const url = getEnvelopeEndpointWithUrlEncodedAuth(validatedDsn);\n\n otherTransports[key] = release\n ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n : createTransport({ ...options, url });\n }\n\n return otherTransports[key];\n }\n\n async function send(envelope) {\n function getEvent(types) {\n const eventTypes = types && types.length ? types : ['event'];\n return eventFromEnvelope(envelope, eventTypes);\n }\n\n const transports = matcher({ envelope, getEvent })\n .map(result => {\n if (typeof result === 'string') {\n return getTransport(result, undefined);\n } else {\n return getTransport(result.dsn, result.release);\n }\n })\n .filter((t) => !!t);\n\n // If we have no transports to send to, use the fallback transport\n if (transports.length === 0) {\n transports.push(fallbackTransport);\n }\n\n const results = await Promise.all(transports.map(transport => transport.send(envelope)));\n\n return results[0];\n }\n\n async function flush(timeout) {\n const allTransports = [...Object.keys(otherTransports).map(dsn => otherTransports[dsn]), fallbackTransport];\n const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n return results.every(r => r);\n }\n\n return {\n send,\n flush,\n };\n };\n}\n\nexport { eventFromEnvelope, makeMultiplexedTransport };\n//# sourceMappingURL=multiplexed.js.map\n","import { COUNTER_METRIC_TYPE, GAUGE_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, SET_METRIC_TYPE } from './constants.js';\nimport { simpleHash } from './utils.js';\n\n/**\n * A metric instance representing a counter.\n */\nclass CounterMetric {\n constructor( _value) {this._value = _value;}\n\n /** @inheritDoc */\n get weight() {\n return 1;\n }\n\n /** @inheritdoc */\n add(value) {\n this._value += value;\n }\n\n /** @inheritdoc */\n toString() {\n return `${this._value}`;\n }\n}\n\n/**\n * A metric instance representing a gauge.\n */\nclass GaugeMetric {\n\n constructor(value) {\n this._last = value;\n this._min = value;\n this._max = value;\n this._sum = value;\n this._count = 1;\n }\n\n /** @inheritDoc */\n get weight() {\n return 5;\n }\n\n /** @inheritdoc */\n add(value) {\n this._last = value;\n if (value < this._min) {\n this._min = value;\n }\n if (value > this._max) {\n this._max = value;\n }\n this._sum += value;\n this._count++;\n }\n\n /** @inheritdoc */\n toString() {\n return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`;\n }\n}\n\n/**\n * A metric instance representing a distribution.\n */\nclass DistributionMetric {\n\n constructor(first) {\n this._value = [first];\n }\n\n /** @inheritDoc */\n get weight() {\n return this._value.length;\n }\n\n /** @inheritdoc */\n add(value) {\n this._value.push(value);\n }\n\n /** @inheritdoc */\n toString() {\n return this._value.join(':');\n }\n}\n\n/**\n * A metric instance representing a set.\n */\nclass SetMetric {\n\n constructor( first) {this.first = first;\n this._value = new Set([first]);\n }\n\n /** @inheritDoc */\n get weight() {\n return this._value.size;\n }\n\n /** @inheritdoc */\n add(value) {\n this._value.add(value);\n }\n\n /** @inheritdoc */\n toString() {\n return Array.from(this._value)\n .map(val => (typeof val === 'string' ? simpleHash(val) : val))\n .join(':');\n }\n}\n\nconst METRIC_MAP = {\n [COUNTER_METRIC_TYPE]: CounterMetric,\n [GAUGE_METRIC_TYPE]: GaugeMetric,\n [DISTRIBUTION_METRIC_TYPE]: DistributionMetric,\n [SET_METRIC_TYPE]: SetMetric,\n};\n\nexport { CounterMetric, DistributionMetric, GaugeMetric, METRIC_MAP, SetMetric };\n//# sourceMappingURL=instance.js.map\n","import { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_BROWSER_FLUSH_INTERVAL, NAME_AND_TAG_KEY_NORMALIZATION_REGEX } from './constants.js';\nimport { METRIC_MAP } from './instance.js';\nimport { sanitizeTags, getBucketKey } from './utils.js';\n\n/**\n * A simple metrics aggregator that aggregates metrics in memory and flushes them periodically.\n * Default flush interval is 5 seconds.\n *\n * @experimental This API is experimental and might change in the future.\n */\nclass BrowserMetricsAggregator {\n // TODO(@anonrig): Use FinalizationRegistry to have a proper way of flushing the buckets\n // when the aggregator is garbage collected.\n // Ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n\n constructor( _client) {this._client = _client;\n this._buckets = new Map();\n this._interval = setInterval(() => this.flush(), DEFAULT_BROWSER_FLUSH_INTERVAL);\n }\n\n /**\n * @inheritDoc\n */\n add(\n metricType,\n unsanitizedName,\n value,\n unit = 'none',\n unsanitizedTags = {},\n maybeFloatTimestamp = timestampInSeconds(),\n ) {\n const timestamp = Math.floor(maybeFloatTimestamp);\n const name = unsanitizedName.replace(NAME_AND_TAG_KEY_NORMALIZATION_REGEX, '_');\n const tags = sanitizeTags(unsanitizedTags);\n\n const bucketKey = getBucketKey(metricType, name, unit, tags);\n const bucketItem = this._buckets.get(bucketKey);\n if (bucketItem) {\n bucketItem.metric.add(value);\n // TODO(abhi): Do we need this check?\n if (bucketItem.timestamp < timestamp) {\n bucketItem.timestamp = timestamp;\n }\n } else {\n this._buckets.set(bucketKey, {\n // @ts-expect-error we don't need to narrow down the type of value here, saves bundle size.\n metric: new METRIC_MAP[metricType](value),\n timestamp,\n metricType,\n name,\n unit,\n tags,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n flush() {\n // short circuit if buckets are empty.\n if (this._buckets.size === 0) {\n return;\n }\n if (this._client.captureAggregateMetrics) {\n // TODO(@anonrig): Use Object.values() when we support ES6+\n const metricBuckets = Array.from(this._buckets).map(([, bucketItem]) => bucketItem);\n this._client.captureAggregateMetrics(metricBuckets);\n }\n this._buckets.clear();\n }\n\n /**\n * @inheritDoc\n */\n close() {\n clearInterval(this._interval);\n this.flush();\n }\n}\n\nexport { BrowserMetricsAggregator };\n//# sourceMappingURL=browser-aggregator.js.map\n","import { convertIntegrationFnToClass } from '../integration.js';\nimport { BrowserMetricsAggregator } from './browser-aggregator.js';\n\nconst INTEGRATION_NAME = 'MetricsAggregator';\n\nconst metricsAggregatorIntegration = () => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n client.metricsAggregator = new BrowserMetricsAggregator(client);\n },\n };\n};\n\n/**\n * Enables Sentry metrics monitoring.\n *\n * @experimental This API is experimental and might having breaking changes in the future.\n */\n// eslint-disable-next-line deprecation/deprecation\nconst MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration);\n\nexport { MetricsAggregator };\n//# sourceMappingURL=integration.js.map\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { getClient, getCurrentScope } from '../exports.js';\nimport { spanToJSON } from '../utils/spanUtils.js';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, SET_METRIC_TYPE, GAUGE_METRIC_TYPE } from './constants.js';\nimport { MetricsAggregator } from './integration.js';\n\nfunction addToMetricsAggregator(\n metricType,\n name,\n value,\n data = {},\n) {\n const client = getClient();\n const scope = getCurrentScope();\n if (client) {\n if (!client.metricsAggregator) {\n DEBUG_BUILD &&\n logger.warn('No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs');\n return;\n }\n const { unit, tags, timestamp } = data;\n const { release, environment } = client.getOptions();\n // eslint-disable-next-line deprecation/deprecation\n const transaction = scope.getTransaction();\n const metricTags = {};\n if (release) {\n metricTags.release = release;\n }\n if (environment) {\n metricTags.environment = environment;\n }\n if (transaction) {\n metricTags.transaction = spanToJSON(transaction).description || '';\n }\n\n DEBUG_BUILD && logger.log(`Adding value of ${value} to ${metricType} metric ${name}`);\n client.metricsAggregator.add(metricType, name, value, unit, { ...metricTags, ...tags }, timestamp);\n }\n}\n\n/**\n * Adds a value to a counter metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nfunction increment(name, value = 1, data) {\n addToMetricsAggregator(COUNTER_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a distribution metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nfunction distribution(name, value, data) {\n addToMetricsAggregator(DISTRIBUTION_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a set metric. Value must be a string or integer.\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nfunction set(name, value, data) {\n addToMetricsAggregator(SET_METRIC_TYPE, name, value, data);\n}\n\n/**\n * Adds a value to a gauge metric\n *\n * @experimental This API is experimental and might have breaking changes in the future.\n */\nfunction gauge(name, value, data) {\n addToMetricsAggregator(GAUGE_METRIC_TYPE, name, value, data);\n}\n\nconst metrics = {\n increment,\n distribution,\n set,\n gauge,\n MetricsAggregator,\n};\n\nexport { distribution, gauge, increment, metrics, set };\n//# sourceMappingURL=exports.js.map\n","import { getActiveTransaction } from './utils.js';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nfunction setMeasurement(name, value, unit) {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction();\n if (transaction) {\n transaction.setMeasurement(name, value, unit);\n }\n}\n\nexport { setMeasurement };\n//# sourceMappingURL=measurement.js.map\n","/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nfunction _optionalChain(ops) {\n let lastAccessLHS = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i] ;\n const fn = ops[i + 1] ;\n i += 2;\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n return;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args) => (value ).call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n// let lastAccessLHS = undefined;\n// let value = ops[0];\n// let i = 1;\n// while (i < ops.length) {\n// const op = ops[i];\n// const fn = ops[i + 1];\n// i += 2;\n// if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n// return undefined;\n// }\n// if (op === 'access' || op === 'optionalAccess') {\n// lastAccessLHS = value;\n// value = fn(value);\n// } else if (op === 'call' || op === 'optionalCall') {\n// value = fn((...args) => value.call(lastAccessLHS, ...args));\n// lastAccessLHS = undefined;\n// }\n// }\n// return value;\n// }\n\nexport { _optionalChain };\n//# sourceMappingURL=_optionalChain.js.map\n","/**\n * Checks whether given url points to Sentry server\n * @param url url to verify\n *\n * TODO(v8): Remove Hub fallback type\n */\nfunction isSentryRequestUrl(url, hubOrClient) {\n const client = hubOrClient && isHub(hubOrClient) ? hubOrClient.getClient() : hubOrClient;\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n\n return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url, tunnel) {\n if (!tunnel) {\n return false;\n }\n\n return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url, dsn) {\n return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str) {\n return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nfunction isHub(hubOrClient) {\n return (hubOrClient ).getClient !== undefined;\n}\n\nexport { isSentryRequestUrl };\n//# sourceMappingURL=isSentryRequestUrl.js.map\n","import { isNodeEnv } from './node.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * Returns true if we are in the browser.\n */\nfunction isBrowser() {\n // eslint-disable-next-line no-restricted-globals\n return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer() {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (GLOBAL_OBJ ).process !== undefined && ((GLOBAL_OBJ ).process ).type === 'renderer'\n );\n}\n\nexport { isBrowser };\n//# sourceMappingURL=isBrowser.js.map\n","import { _nullishCoalesce, _optionalChain } from '@sentry/utils';\nimport { addBreadcrumb, getClient, isSentryRequestUrl, getCurrentScope, addEventProcessor, prepareEvent, getIsolationScope, setContext, captureException, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core';\nimport { GLOBAL_OBJ, normalize, fill, htmlTreeAsString, browserPerformanceTimeOrigin, logger, uuid4, SENTRY_XHR_DATA_KEY, dropUndefinedKeys, stringMatchesSomePattern, addFetchInstrumentationHandler, addXhrInstrumentationHandler, addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler, createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader, updateRateLimits, isRateLimited, consoleSandbox, isBrowser } from '@sentry/utils';\nimport { addPerformanceInstrumentationHandler, addLcpInstrumentationHandler } from '@sentry-internal/tracing';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nconst CANVAS_QUALITY = {\n low: {\n sampling: {\n canvas: 1,\n },\n dataURLOptions: {\n type: 'image/webp',\n quality: 0.25,\n },\n },\n medium: {\n sampling: {\n canvas: 2,\n },\n dataURLOptions: {\n type: 'image/webp',\n quality: 0.4,\n },\n },\n high: {\n sampling: {\n canvas: 4,\n },\n dataURLOptions: {\n type: 'image/webp',\n quality: 0.5,\n },\n },\n};\n\nfunction _nullishCoalesce$1(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }function _optionalChain$5(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var NodeType$1;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType$1 || (NodeType$1 = {}));\n\nfunction isElement$1(n) {\n return n.nodeType === n.ELEMENT_NODE;\n}\nfunction isShadowRoot(n) {\n const host = _optionalChain$5([n, 'optionalAccess', _ => _.host]);\n return Boolean(_optionalChain$5([host, 'optionalAccess', _2 => _2.shadowRoot]) === n);\n}\nfunction isNativeShadowDom(shadowRoot) {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n if (cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')) {\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\n }\n return cssText;\n}\nfunction escapeImportStatement(rule) {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3)\n return cssText;\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n }\n else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\nfunction stringifyStylesheet(s) {\n try {\n const rules = s.rules || s.cssRules;\n return rules\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\n : null;\n }\n catch (error) {\n return null;\n }\n}\nfunction stringifyRule(rule) {\n let importStringified;\n if (isCSSImportRule(rule)) {\n try {\n importStringified =\n stringifyStylesheet(rule.styleSheet) ||\n escapeImportStatement(rule);\n }\n catch (error) {\n }\n }\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n return fixSafariColons(rule.cssText);\n }\n return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\nclass Mirror {\n constructor() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n getId(n) {\n if (!n)\n return -1;\n const id = _optionalChain$5([this, 'access', _3 => _3.getMeta, 'call', _4 => _4(n), 'optionalAccess', _5 => _5.id]);\n return _nullishCoalesce$1(id, () => ( -1));\n }\n getNode(id) {\n return this.idNodeMap.get(id) || null;\n }\n getIds() {\n return Array.from(this.idNodeMap.keys());\n }\n getMeta(n) {\n return this.nodeMetaMap.get(n) || null;\n }\n removeNodeFromMap(n) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n if (n.childNodes) {\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\n }\n }\n has(id) {\n return this.idNodeMap.has(id);\n }\n hasNode(node) {\n return this.nodeMetaMap.has(node);\n }\n add(n, meta) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n replace(id, n) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta)\n this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\nfunction createMirror() {\n return new Mirror();\n}\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\n if (tagName === 'OPTION') {\n tagName = 'SELECT';\n }\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\n (type && maskInputOptions[type]) ||\n type === 'password' ||\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\n}\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\n let text = value || '';\n if (!isMasked) {\n return text;\n }\n if (maskInputFn) {\n text = maskInputFn(text, element);\n }\n return '*'.repeat(text.length);\n}\nfunction toLowerCase(str) {\n return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\nfunction is2DCanvasBlank(canvas) {\n const ctx = canvas.getContext('2d');\n if (!ctx)\n return true;\n const chunkSize = 50;\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n const getImageData = ctx.getImageData;\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\n if (pixelBuffer.some((pixel) => pixel !== 0))\n return false;\n }\n }\n return true;\n}\nfunction getInputType(element) {\n const type = element.type;\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ?\n toLowerCase(type)\n : null;\n}\nfunction getInputValue(el, tagName, type) {\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\n return el.getAttribute('value') || '';\n }\n return el.value;\n}\n\nlet _id = 1;\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\nconst IGNORED_NODE = -2;\nfunction genId() {\n return _id++;\n}\nfunction getValidTagName(element) {\n if (element instanceof HTMLFormElement) {\n return 'form';\n }\n const processedTagName = toLowerCase(element.tagName);\n if (tagNameRegex.test(processedTagName)) {\n return 'div';\n }\n return processedTagName;\n}\nfunction extractOrigin(url) {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n }\n else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n }\n else if (part === '..') {\n stack.pop();\n }\n else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n });\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n if (attributeValue.trim() === '') {\n return attributeValue;\n }\n let pos = 0;\n function collectCharacters(regEx) {\n let chars;\n const match = regEx.exec(attributeValue.substring(pos));\n if (match) {\n chars = match[0];\n pos += chars.length;\n return chars;\n }\n return '';\n }\n const output = [];\n while (true) {\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\n if (pos >= attributeValue.length) {\n break;\n }\n let url = collectCharacters(SRCSET_NOT_SPACES);\n if (url.slice(-1) === ',') {\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n output.push(url);\n }\n else {\n let descriptorsStr = '';\n url = absoluteToDoc(doc, url);\n let inParens = false;\n while (true) {\n const c = attributeValue.charAt(pos);\n if (c === '') {\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (!inParens) {\n if (c === ',') {\n pos += 1;\n output.push((url + descriptorsStr).trim());\n break;\n }\n else if (c === '(') {\n inParens = true;\n }\n }\n else {\n if (c === ')') {\n inParens = false;\n }\n }\n descriptorsStr += c;\n pos += 1;\n }\n }\n }\n return output.join(', ');\n}\nfunction absoluteToDoc(doc, attributeValue) {\n if (!attributeValue || attributeValue.trim() === '') {\n return attributeValue;\n }\n const a = doc.createElement('a');\n a.href = attributeValue;\n return a.href;\n}\nfunction isSVGElement(el) {\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\n}\nfunction getHref() {\n const a = document.createElement('a');\n a.href = '';\n return a.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n if (!value) {\n return value;\n }\n if (name === 'src' ||\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'xlink:href' && value[0] !== '#') {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'background' &&\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\n return absoluteToDoc(doc, value);\n }\n else if (name === 'srcset') {\n return getAbsoluteSrcsetString(doc, value);\n }\n else if (name === 'style') {\n return absoluteToStylesheet(value, getHref());\n }\n else if (tagName === 'object' && name === 'data') {\n return absoluteToDoc(doc, value);\n }\n if (typeof maskAttributeFn === 'function') {\n return maskAttributeFn(name, value, element);\n }\n return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n try {\n if (unblockSelector && element.matches(unblockSelector)) {\n return false;\n }\n if (typeof blockClass === 'string') {\n if (element.classList.contains(blockClass)) {\n return true;\n }\n }\n else {\n for (let eIndex = element.classList.length; eIndex--;) {\n const className = element.classList[eIndex];\n if (blockClass.test(className)) {\n return true;\n }\n }\n }\n if (blockSelector) {\n return element.matches(blockSelector);\n }\n }\n catch (e) {\n }\n return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n for (let eIndex = el.classList.length; eIndex--;) {\n const className = el.classList[eIndex];\n if (regex.test(className)) {\n return true;\n }\n }\n return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n if (!node)\n return -1;\n if (node.nodeType !== node.ELEMENT_NODE)\n return -1;\n if (distance > limit)\n return -1;\n if (matchPredicate(node))\n return distance;\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n return (node) => {\n const el = node;\n if (el === null)\n return false;\n if (className) {\n if (typeof className === 'string') {\n if (el.matches(`.${className}`))\n return true;\n }\n else if (elementClassMatchesRegex(el, className)) {\n return true;\n }\n }\n if (selector && el.matches(selector))\n return true;\n return false;\n };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n try {\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (el === null)\n return false;\n let maskDistance = -1;\n let unmaskDistance = -1;\n if (maskAllText) {\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\n if (unmaskDistance < 0) {\n return true;\n }\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\n }\n else {\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\n if (maskDistance < 0) {\n return false;\n }\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\n }\n return maskDistance >= 0\n ? unmaskDistance >= 0\n ? maskDistance <= unmaskDistance\n : true\n : unmaskDistance >= 0\n ? false\n : !!maskAllText;\n }\n catch (e) {\n }\n return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n const win = iframeEl.contentWindow;\n if (!win) {\n return;\n }\n let fired = false;\n let readyState;\n try {\n readyState = win.document.readyState;\n }\n catch (error) {\n return;\n }\n if (readyState !== 'complete') {\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, iframeLoadTimeout);\n iframeEl.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n return;\n }\n const blankUrl = 'about:blank';\n if (win.location.href !== blankUrl ||\n iframeEl.src === blankUrl ||\n iframeEl.src === '') {\n setTimeout(listener, 0);\n return iframeEl.addEventListener('load', listener);\n }\n iframeEl.addEventListener('load', listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n let fired = false;\n let styleSheetLoaded;\n try {\n styleSheetLoaded = link.sheet;\n }\n catch (error) {\n return;\n }\n if (styleSheetLoaded)\n return;\n const timer = setTimeout(() => {\n if (!fired) {\n listener();\n fired = true;\n }\n }, styleSheetLoadTimeout);\n link.addEventListener('load', () => {\n clearTimeout(timer);\n fired = true;\n listener();\n });\n}\nfunction serializeNode(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\n const rootId = getRootId(doc, mirror);\n switch (n.nodeType) {\n case n.DOCUMENT_NODE:\n if (n.compatMode !== 'CSS1Compat') {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n compatMode: n.compatMode,\n };\n }\n else {\n return {\n type: NodeType$1.Document,\n childNodes: [],\n };\n }\n case n.DOCUMENT_TYPE_NODE:\n return {\n type: NodeType$1.DocumentType,\n name: n.name,\n publicId: n.publicId,\n systemId: n.systemId,\n rootId,\n };\n case n.ELEMENT_NODE:\n return serializeElementNode(n, {\n doc,\n blockClass,\n blockSelector,\n unblockSelector,\n inlineStylesheet,\n maskAttributeFn,\n maskInputOptions,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n rootId,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n });\n case n.TEXT_NODE:\n return serializeTextNode(n, {\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskTextFn,\n maskInputOptions,\n maskInputFn,\n rootId,\n });\n case n.CDATA_SECTION_NODE:\n return {\n type: NodeType$1.CDATA,\n textContent: '',\n rootId,\n };\n case n.COMMENT_NODE:\n return {\n type: NodeType$1.Comment,\n textContent: n.textContent || '',\n rootId,\n };\n default:\n return false;\n }\n}\nfunction getRootId(doc, mirror) {\n if (!mirror.hasNode(doc))\n return undefined;\n const docId = mirror.getId(doc);\n return docId === 1 ? undefined : docId;\n}\nfunction serializeTextNode(n, options) {\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\n const parentTagName = n.parentNode && n.parentNode.tagName;\n let textContent = n.textContent;\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\n if (isStyle && textContent) {\n try {\n if (n.nextSibling || n.previousSibling) {\n }\n else if (_optionalChain$5([n, 'access', _6 => _6.parentNode, 'access', _7 => _7.sheet, 'optionalAccess', _8 => _8.cssRules])) {\n textContent = stringifyStylesheet(n.parentNode.sheet);\n }\n }\n catch (err) {\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\n }\n textContent = absoluteToStylesheet(textContent, getHref());\n }\n if (isScript) {\n textContent = 'SCRIPT_PLACEHOLDER';\n }\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n textContent = maskTextFn\n ? maskTextFn(textContent)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n textContent = maskInputFn\n ? maskInputFn(textContent, n.parentNode)\n : textContent.replace(/[\\S]/g, '*');\n }\n if (parentTagName === 'OPTION' && textContent) {\n const isInputMasked = shouldMaskInput({\n type: null,\n tagName: parentTagName,\n maskInputOptions,\n });\n textContent = maskInputValue({\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\n element: n,\n value: textContent,\n maskInputFn,\n });\n }\n return {\n type: NodeType$1.Text,\n textContent: textContent || '',\n isStyle,\n rootId,\n };\n}\nfunction serializeElementNode(n, options) {\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\n const tagName = getValidTagName(n);\n let attributes = {};\n const len = n.attributes.length;\n for (let i = 0; i < len; i++) {\n const attr = n.attributes[i];\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\n }\n }\n if (tagName === 'link' && inlineStylesheet) {\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\n return s.href === n.href;\n });\n let cssText = null;\n if (stylesheet) {\n cssText = stringifyStylesheet(stylesheet);\n }\n if (cssText) {\n delete attributes.rel;\n delete attributes.href;\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n }\n }\n if (tagName === 'style' &&\n n.sheet &&\n !(n.innerText || n.textContent || '').trim().length) {\n const cssText = stringifyStylesheet(n.sheet);\n if (cssText) {\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\n }\n }\n if (tagName === 'input' ||\n tagName === 'textarea' ||\n tagName === 'select' ||\n tagName === 'option') {\n const el = n;\n const type = getInputType(el);\n const value = getInputValue(el, toUpperCase(tagName), type);\n const checked = el.checked;\n if (type !== 'submit' && type !== 'button' && value) {\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\n type,\n tagName: toUpperCase(tagName),\n maskInputOptions,\n }));\n attributes.value = maskInputValue({\n isMasked: forceMask,\n element: el,\n value,\n maskInputFn,\n });\n }\n if (checked) {\n attributes.checked = checked;\n }\n }\n if (tagName === 'option') {\n if (n.selected && !maskInputOptions['select']) {\n attributes.selected = true;\n }\n else {\n delete attributes.selected;\n }\n }\n if (tagName === 'canvas' && recordCanvas) {\n if (n.__context === '2d') {\n if (!is2DCanvasBlank(n)) {\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n }\n else if (!('__context' in n)) {\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n const blankCanvas = document.createElement('canvas');\n blankCanvas.width = n.width;\n blankCanvas.height = n.height;\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n if (canvasDataURL !== blankCanvasDataURL) {\n attributes.rr_dataURL = canvasDataURL;\n }\n }\n }\n if (tagName === 'img' && inlineImages) {\n if (!canvasService) {\n canvasService = doc.createElement('canvas');\n canvasCtx = canvasService.getContext('2d');\n }\n const image = n;\n const oldValue = image.crossOrigin;\n image.crossOrigin = 'anonymous';\n const recordInlineImage = () => {\n image.removeEventListener('load', recordInlineImage);\n try {\n canvasService.width = image.naturalWidth;\n canvasService.height = image.naturalHeight;\n canvasCtx.drawImage(image, 0, 0);\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\n }\n catch (err) {\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\n }\n oldValue\n ? (attributes.crossOrigin = oldValue)\n : image.removeAttribute('crossorigin');\n };\n if (image.complete && image.naturalWidth !== 0)\n recordInlineImage();\n else\n image.addEventListener('load', recordInlineImage);\n }\n if (tagName === 'audio' || tagName === 'video') {\n attributes.rr_mediaState = n.paused\n ? 'paused'\n : 'played';\n attributes.rr_mediaCurrentTime = n.currentTime;\n }\n if (!newlyAddedElement) {\n if (n.scrollLeft) {\n attributes.rr_scrollLeft = n.scrollLeft;\n }\n if (n.scrollTop) {\n attributes.rr_scrollTop = n.scrollTop;\n }\n }\n if (needBlock) {\n const { width, height } = n.getBoundingClientRect();\n attributes = {\n class: attributes.class,\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n };\n }\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\n if (!n.contentDocument) {\n attributes.rr_src = attributes.src;\n }\n delete attributes.src;\n }\n let isCustomElement;\n try {\n if (customElements.get(tagName))\n isCustomElement = true;\n }\n catch (e) {\n }\n return {\n type: NodeType$1.Element,\n tagName,\n attributes,\n childNodes: [],\n isSVG: isSVGElement(n) || undefined,\n needBlock,\n rootId,\n isCustom: isCustomElement,\n };\n}\nfunction lowerIfExists(maybeAttr) {\n if (maybeAttr === undefined || maybeAttr === null) {\n return '';\n }\n else {\n return maybeAttr.toLowerCase();\n }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n if (slimDOMOptions.comment && sn.type === NodeType$1.Comment) {\n return true;\n }\n else if (sn.type === NodeType$1.Element) {\n if (slimDOMOptions.script &&\n (sn.tagName === 'script' ||\n (sn.tagName === 'link' &&\n (sn.attributes.rel === 'preload' ||\n sn.attributes.rel === 'modulepreload') &&\n sn.attributes.as === 'script') ||\n (sn.tagName === 'link' &&\n sn.attributes.rel === 'prefetch' &&\n typeof sn.attributes.href === 'string' &&\n sn.attributes.href.endsWith('.js')))) {\n return true;\n }\n else if (slimDOMOptions.headFavicon &&\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\n (sn.tagName === 'meta' &&\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\n lowerIfExists(sn.attributes.name) === 'application-name' ||\n lowerIfExists(sn.attributes.rel) === 'icon' ||\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\n return true;\n }\n else if (sn.tagName === 'meta') {\n if (slimDOMOptions.headMetaDescKeywords &&\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n return true;\n }\n else if (slimDOMOptions.headMetaSocial &&\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\n return true;\n }\n else if (slimDOMOptions.headMetaRobots &&\n (lowerIfExists(sn.attributes.name) === 'robots' ||\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\n return true;\n }\n else if (slimDOMOptions.headMetaHttpEquiv &&\n sn.attributes['http-equiv'] !== undefined) {\n return true;\n }\n else if (slimDOMOptions.headMetaAuthorship &&\n (lowerIfExists(sn.attributes.name) === 'author' ||\n lowerIfExists(sn.attributes.name) === 'generator' ||\n lowerIfExists(sn.attributes.name) === 'framework' ||\n lowerIfExists(sn.attributes.name) === 'publisher' ||\n lowerIfExists(sn.attributes.name) === 'progid' ||\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\n return true;\n }\n else if (slimDOMOptions.headMetaVerification &&\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\n lowerIfExists(sn.attributes.name) === 'verification' ||\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\n return true;\n }\n }\n }\n return false;\n}\nfunction serializeNodeWithId(n, options) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, skipChild = false, inlineStylesheet = true, maskInputOptions = {}, maskAttributeFn, maskTextFn, maskInputFn, slimDOMOptions, dataURLOptions = {}, inlineImages = false, recordCanvas = false, onSerialize, onIframeLoad, iframeLoadTimeout = 5000, onStylesheetLoad, stylesheetLoadTimeout = 5000, keepIframeSrcFn = () => false, newlyAddedElement = false, } = options;\n let { preserveWhiteSpace = true } = options;\n const _serializedNode = serializeNode(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n keepIframeSrcFn,\n newlyAddedElement,\n });\n if (!_serializedNode) {\n console.warn(n, 'not serialized');\n return null;\n }\n let id;\n if (mirror.hasNode(n)) {\n id = mirror.getId(n);\n }\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\n (!preserveWhiteSpace &&\n _serializedNode.type === NodeType$1.Text &&\n !_serializedNode.isStyle &&\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\n id = IGNORED_NODE;\n }\n else {\n id = genId();\n }\n const serializedNode = Object.assign(_serializedNode, { id });\n mirror.add(n, serializedNode);\n if (id === IGNORED_NODE) {\n return null;\n }\n if (onSerialize) {\n onSerialize(n);\n }\n let recordChild = !skipChild;\n if (serializedNode.type === NodeType$1.Element) {\n recordChild = recordChild && !serializedNode.needBlock;\n delete serializedNode.needBlock;\n const shadowRoot = n.shadowRoot;\n if (shadowRoot && isNativeShadowDom(shadowRoot))\n serializedNode.isShadowHost = true;\n }\n if ((serializedNode.type === NodeType$1.Document ||\n serializedNode.type === NodeType$1.Element) &&\n recordChild) {\n if (slimDOMOptions.headWhitespace &&\n serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'head') {\n preserveWhiteSpace = false;\n }\n const bypassOptions = {\n doc,\n mirror,\n blockClass,\n blockSelector,\n maskAllText,\n unblockSelector,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n };\n for (const childN of Array.from(n.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n if (isElement$1(n) && n.shadowRoot) {\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n if (serializedChildNode) {\n isNativeShadowDom(n.shadowRoot) &&\n (serializedChildNode.isShadow = true);\n serializedNode.childNodes.push(serializedChildNode);\n }\n }\n }\n }\n if (n.parentNode &&\n isShadowRoot(n.parentNode) &&\n isNativeShadowDom(n.parentNode)) {\n serializedNode.isShadow = true;\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'iframe') {\n onceIframeLoaded(n, () => {\n const iframeDoc = n.contentDocument;\n if (iframeDoc && onIframeLoad) {\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n doc: iframeDoc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedIframeNode) {\n onIframeLoad(n, serializedIframeNode);\n }\n }\n }, iframeLoadTimeout);\n }\n if (serializedNode.type === NodeType$1.Element &&\n serializedNode.tagName === 'link' &&\n serializedNode.attributes.rel === 'stylesheet') {\n onceStylesheetLoaded(n, () => {\n if (onStylesheetLoad) {\n const serializedLinkNode = serializeNodeWithId(n, {\n doc,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n });\n if (serializedLinkNode) {\n onStylesheetLoad(n, serializedLinkNode);\n }\n }\n }, stylesheetLoadTimeout);\n }\n return serializedNode;\n}\nfunction snapshot(n, options) {\n const { mirror = new Mirror(), blockClass = 'rr-block', blockSelector = null, unblockSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, inlineImages = false, recordCanvas = false, maskAllInputs = false, maskAttributeFn, maskTextFn, maskInputFn, slimDOM = false, dataURLOptions, preserveWhiteSpace, onSerialize, onIframeLoad, iframeLoadTimeout, onStylesheetLoad, stylesheetLoadTimeout, keepIframeSrcFn = () => false, } = options || {};\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n }\n : maskAllInputs === false\n ? {}\n : maskAllInputs;\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\n ?\n {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaDescKeywords: slimDOM === 'all',\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaAuthorship: true,\n headMetaVerification: true,\n }\n : slimDOM === false\n ? {}\n : slimDOM;\n return serializeNodeWithId(n, {\n doc: n,\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n skipChild: false,\n inlineStylesheet,\n maskInputOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n slimDOMOptions,\n dataURLOptions,\n inlineImages,\n recordCanvas,\n preserveWhiteSpace,\n onSerialize,\n onIframeLoad,\n iframeLoadTimeout,\n onStylesheetLoad,\n stylesheetLoadTimeout,\n keepIframeSrcFn,\n newlyAddedElement: false,\n });\n}\n\nfunction _optionalChain$4(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction on(type, fn, target = document) {\n const options = { capture: true, passive: true };\n target.addEventListener(type, fn, options);\n return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\n '\\r\\n' +\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\n '\\r\\n' +\n 'or you can use record.mirror to access the mirror instance during recording.';\nlet _mirror = {\n map: {},\n getId() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return -1;\n },\n getNode() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return null;\n },\n removeNodeFromMap() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n has() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n return false;\n },\n reset() {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n },\n};\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\n _mirror = new Proxy(_mirror, {\n get(target, prop, receiver) {\n if (prop === 'map') {\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\nfunction throttle$1(func, wait, options = {}) {\n let timeout = null;\n let previous = 0;\n return function (...args) {\n const now = Date.now();\n if (!previous && options.leading === false) {\n previous = now;\n }\n const remaining = wait - (now - previous);\n const context = this;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = now;\n func.apply(context, args);\n }\n else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(() => {\n previous = options.leading === false ? 0 : Date.now();\n timeout = null;\n func.apply(context, args);\n }, remaining);\n }\n };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n const original = win.Object.getOwnPropertyDescriptor(target, key);\n win.Object.defineProperty(target, key, isRevoked\n ? d\n : {\n set(value) {\n setTimeout(() => {\n d.set.call(this, value);\n }, 0);\n if (original && original.set) {\n original.set.call(this, value);\n }\n },\n });\n return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === 'function') {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original,\n },\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n }\n catch (e2) {\n return () => {\n };\n }\n}\nlet nowTimestamp = Date.now;\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\n nowTimestamp = () => new Date().getTime();\n}\nfunction getWindowScroll(win) {\n const doc = win.document;\n return {\n left: doc.scrollingElement\n ? doc.scrollingElement.scrollLeft\n : win.pageXOffset !== undefined\n ? win.pageXOffset\n : _optionalChain$4([doc, 'optionalAccess', _ => _.documentElement, 'access', _2 => _2.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _3 => _3.body, 'optionalAccess', _4 => _4.parentElement, 'optionalAccess', _5 => _5.scrollLeft]) ||\n _optionalChain$4([doc, 'optionalAccess', _6 => _6.body, 'optionalAccess', _7 => _7.scrollLeft]) ||\n 0,\n top: doc.scrollingElement\n ? doc.scrollingElement.scrollTop\n : win.pageYOffset !== undefined\n ? win.pageYOffset\n : _optionalChain$4([doc, 'optionalAccess', _8 => _8.documentElement, 'access', _9 => _9.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _10 => _10.body, 'optionalAccess', _11 => _11.parentElement, 'optionalAccess', _12 => _12.scrollTop]) ||\n _optionalChain$4([doc, 'optionalAccess', _13 => _13.body, 'optionalAccess', _14 => _14.scrollTop]) ||\n 0,\n };\n}\nfunction getWindowHeight() {\n return (window.innerHeight ||\n (document.documentElement && document.documentElement.clientHeight) ||\n (document.body && document.body.clientHeight));\n}\nfunction getWindowWidth() {\n return (window.innerWidth ||\n (document.documentElement && document.documentElement.clientWidth) ||\n (document.body && document.body.clientWidth));\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n if (!node) {\n return false;\n }\n const el = node.nodeType === node.ELEMENT_NODE\n ? node\n : node.parentElement;\n if (!el)\n return false;\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n if (!checkAncestors) {\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\n return blockedPredicate(el) && !isUnblocked;\n }\n const blockDistance = distanceToMatch(el, blockedPredicate);\n let unblockDistance = -1;\n if (blockDistance < 0) {\n return false;\n }\n if (unblockSelector) {\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\n }\n if (blockDistance > -1 && unblockDistance < 0) {\n return true;\n }\n return blockDistance < unblockDistance;\n}\nfunction isSerialized(n, mirror) {\n return mirror.getId(n) !== -1;\n}\nfunction isIgnored(n, mirror) {\n return mirror.getId(n) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror) {\n if (isShadowRoot(target)) {\n return false;\n }\n const id = mirror.getId(target);\n if (!mirror.has(id)) {\n return true;\n }\n if (target.parentNode &&\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\n return false;\n }\n if (!target.parentNode) {\n return true;\n }\n return isAncestorRemoved(target.parentNode, mirror);\n}\nfunction legacy_isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nfunction polyfill(win = window) {\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\n win.NodeList.prototype.forEach = Array.prototype\n .forEach;\n }\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\n win.DOMTokenList.prototype.forEach = Array.prototype\n .forEach;\n }\n if (!Node.prototype.contains) {\n Node.prototype.contains = (...args) => {\n let node = args[0];\n if (!(0 in args)) {\n throw new TypeError('1 argument is required');\n }\n do {\n if (this === node) {\n return true;\n }\n } while ((node = node && node.parentNode));\n return false;\n };\n }\n}\nfunction isSerializedIframe(n, mirror) {\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\n}\nfunction isSerializedStylesheet(n, mirror) {\n return Boolean(n.nodeName === 'LINK' &&\n n.nodeType === n.ELEMENT_NODE &&\n n.getAttribute &&\n n.getAttribute('rel') === 'stylesheet' &&\n mirror.getMeta(n));\n}\nfunction hasShadowRoot(n) {\n return Boolean(_optionalChain$4([n, 'optionalAccess', _18 => _18.shadowRoot]));\n}\nclass StyleSheetMirror {\n constructor() {\n this.id = 1;\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n }\n getId(stylesheet) {\n return _nullishCoalesce(this.styleIDMap.get(stylesheet), () => ( -1));\n }\n has(stylesheet) {\n return this.styleIDMap.has(stylesheet);\n }\n add(stylesheet, id) {\n if (this.has(stylesheet))\n return this.getId(stylesheet);\n let newId;\n if (id === undefined) {\n newId = this.id++;\n }\n else\n newId = id;\n this.styleIDMap.set(stylesheet, newId);\n this.idStyleMap.set(newId, stylesheet);\n return newId;\n }\n getStyle(id) {\n return this.idStyleMap.get(id) || null;\n }\n reset() {\n this.styleIDMap = new WeakMap();\n this.idStyleMap = new Map();\n this.id = 1;\n }\n generateId() {\n return this.id++;\n }\n}\nfunction getShadowHost(n) {\n let shadowHost = null;\n if (_optionalChain$4([n, 'access', _19 => _19.getRootNode, 'optionalCall', _20 => _20(), 'optionalAccess', _21 => _21.nodeType]) === Node.DOCUMENT_FRAGMENT_NODE &&\n n.getRootNode().host)\n shadowHost = n.getRootNode().host;\n return shadowHost;\n}\nfunction getRootShadowHost(n) {\n let rootShadowHost = n;\n let shadowHost;\n while ((shadowHost = getShadowHost(rootShadowHost)))\n rootShadowHost = shadowHost;\n return rootShadowHost;\n}\nfunction shadowHostInDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n const shadowHost = getRootShadowHost(n);\n return doc.contains(shadowHost);\n}\nfunction inDom(n) {\n const doc = n.ownerDocument;\n if (!doc)\n return false;\n return doc.contains(n) || shadowHostInDom(n);\n}\nlet cachedRequestAnimationFrameImplementation;\nfunction getRequestAnimationFrameImplementation() {\n if (cachedRequestAnimationFrameImplementation) {\n return cachedRequestAnimationFrameImplementation;\n }\n const document = window.document;\n let requestAnimationFrameImplementation = window.requestAnimationFrame;\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.requestAnimationFrame) {\n requestAnimationFrameImplementation =\n contentWindow.requestAnimationFrame;\n }\n document.head.removeChild(sandbox);\n }\n catch (e) {\n }\n }\n return (cachedRequestAnimationFrameImplementation =\n requestAnimationFrameImplementation.bind(window));\n}\nfunction onRequestAnimationFrame(...rest) {\n return getRequestAnimationFrameImplementation()(...rest);\n}\n\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\n\nfunction _optionalChain$3(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nfunction isNodeInLinkedList(n) {\n return '__ln' in n;\n}\nclass DoubleLinkedList {\n constructor() {\n this.length = 0;\n this.head = null;\n this.tail = null;\n }\n get(position) {\n if (position >= this.length) {\n throw new Error('Position outside of list range');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = _optionalChain$3([current, 'optionalAccess', _ => _.next]) || null;\n }\n return current;\n }\n addNode(n) {\n const node = {\n value: n,\n previous: null,\n next: null,\n };\n n.__ln = node;\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\n const current = n.previousSibling.__ln.next;\n node.next = current;\n node.previous = n.previousSibling.__ln;\n n.previousSibling.__ln.next = node;\n if (current) {\n current.previous = node;\n }\n }\n else if (n.nextSibling &&\n isNodeInLinkedList(n.nextSibling) &&\n n.nextSibling.__ln.previous) {\n const current = n.nextSibling.__ln.previous;\n node.previous = current;\n node.next = n.nextSibling.__ln;\n n.nextSibling.__ln.previous = node;\n if (current) {\n current.next = node;\n }\n }\n else {\n if (this.head) {\n this.head.previous = node;\n }\n node.next = this.head;\n this.head = node;\n }\n if (node.next === null) {\n this.tail = node;\n }\n this.length++;\n }\n removeNode(n) {\n const current = n.__ln;\n if (!this.head) {\n return;\n }\n if (!current.previous) {\n this.head = current.next;\n if (this.head) {\n this.head.previous = null;\n }\n else {\n this.tail = null;\n }\n }\n else {\n current.previous.next = current.next;\n if (current.next) {\n current.next.previous = current.previous;\n }\n else {\n this.tail = current.previous;\n }\n }\n if (n.__ln) {\n delete n.__ln;\n }\n this.length--;\n }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n constructor() {\n this.frozen = false;\n this.locked = false;\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.mapRemoves = [];\n this.movedMap = {};\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.processMutations = (mutations) => {\n mutations.forEach(this.processMutation);\n this.emit();\n };\n this.emit = () => {\n if (this.frozen || this.locked) {\n return;\n }\n const adds = [];\n const addedIds = new Set();\n const addList = new DoubleLinkedList();\n const getNextId = (n) => {\n let ns = n;\n let nextId = IGNORED_NODE;\n while (nextId === IGNORED_NODE) {\n ns = ns && ns.nextSibling;\n nextId = ns && this.mirror.getId(ns);\n }\n return nextId;\n };\n const pushAdd = (n) => {\n if (!n.parentNode || !inDom(n)) {\n return;\n }\n const parentId = isShadowRoot(n.parentNode)\n ? this.mirror.getId(getShadowHost(n))\n : this.mirror.getId(n.parentNode);\n const nextId = getNextId(n);\n if (parentId === -1 || nextId === -1) {\n return addList.addNode(n);\n }\n const sn = serializeNodeWithId(n, {\n doc: this.doc,\n mirror: this.mirror,\n blockClass: this.blockClass,\n blockSelector: this.blockSelector,\n maskAllText: this.maskAllText,\n unblockSelector: this.unblockSelector,\n maskTextClass: this.maskTextClass,\n unmaskTextClass: this.unmaskTextClass,\n maskTextSelector: this.maskTextSelector,\n unmaskTextSelector: this.unmaskTextSelector,\n skipChild: true,\n newlyAddedElement: true,\n inlineStylesheet: this.inlineStylesheet,\n maskInputOptions: this.maskInputOptions,\n maskAttributeFn: this.maskAttributeFn,\n maskTextFn: this.maskTextFn,\n maskInputFn: this.maskInputFn,\n slimDOMOptions: this.slimDOMOptions,\n dataURLOptions: this.dataURLOptions,\n recordCanvas: this.recordCanvas,\n inlineImages: this.inlineImages,\n onSerialize: (currentN) => {\n if (isSerializedIframe(currentN, this.mirror)) {\n this.iframeManager.addIframe(currentN);\n }\n if (isSerializedStylesheet(currentN, this.mirror)) {\n this.stylesheetManager.trackLinkElement(currentN);\n }\n if (hasShadowRoot(n)) {\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n this.iframeManager.attachIframe(iframe, childSn);\n this.shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (link, childSn) => {\n this.stylesheetManager.attachLinkElement(link, childSn);\n },\n });\n if (sn) {\n adds.push({\n parentId,\n nextId,\n node: sn,\n });\n addedIds.add(sn.id);\n }\n };\n while (this.mapRemoves.length) {\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n }\n for (const n of this.movedSet) {\n if (isParentRemoved(this.removes, n, this.mirror) &&\n !this.movedSet.has(n.parentNode)) {\n continue;\n }\n pushAdd(n);\n }\n for (const n of this.addedSet) {\n if (!isAncestorInSet(this.droppedSet, n) &&\n !isParentRemoved(this.removes, n, this.mirror)) {\n pushAdd(n);\n }\n else if (isAncestorInSet(this.movedSet, n)) {\n pushAdd(n);\n }\n else {\n this.droppedSet.add(n);\n }\n }\n let candidate = null;\n while (addList.length) {\n let node = null;\n if (candidate) {\n const parentId = this.mirror.getId(candidate.value.parentNode);\n const nextId = getNextId(candidate.value);\n if (parentId !== -1 && nextId !== -1) {\n node = candidate;\n }\n }\n if (!node) {\n let tailNode = addList.tail;\n while (tailNode) {\n const _node = tailNode;\n tailNode = tailNode.previous;\n if (_node) {\n const parentId = this.mirror.getId(_node.value.parentNode);\n const nextId = getNextId(_node.value);\n if (nextId === -1)\n continue;\n else if (parentId !== -1) {\n node = _node;\n break;\n }\n else {\n const unhandledNode = _node.value;\n if (unhandledNode.parentNode &&\n unhandledNode.parentNode.nodeType ===\n Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowHost = unhandledNode.parentNode\n .host;\n const parentId = this.mirror.getId(shadowHost);\n if (parentId !== -1) {\n node = _node;\n break;\n }\n }\n }\n }\n }\n }\n if (!node) {\n while (addList.head) {\n addList.removeNode(addList.head.value);\n }\n break;\n }\n candidate = node.previous;\n addList.removeNode(node.value);\n pushAdd(node.value);\n }\n const payload = {\n texts: this.texts\n .map((text) => ({\n id: this.mirror.getId(text.node),\n value: text.value,\n }))\n .filter((text) => !addedIds.has(text.id))\n .filter((text) => this.mirror.has(text.id)),\n attributes: this.attributes\n .map((attribute) => {\n const { attributes } = attribute;\n if (typeof attributes.style === 'string') {\n const diffAsStr = JSON.stringify(attribute.styleDiff);\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n if (diffAsStr.length < attributes.style.length) {\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\n attributes.style.split('var(').length) {\n attributes.style = attribute.styleDiff;\n }\n }\n }\n return {\n id: this.mirror.getId(attribute.node),\n attributes: attributes,\n };\n })\n .filter((attribute) => !addedIds.has(attribute.id))\n .filter((attribute) => this.mirror.has(attribute.id)),\n removes: this.removes,\n adds,\n };\n if (!payload.texts.length &&\n !payload.attributes.length &&\n !payload.removes.length &&\n !payload.adds.length) {\n return;\n }\n this.texts = [];\n this.attributes = [];\n this.removes = [];\n this.addedSet = new Set();\n this.movedSet = new Set();\n this.droppedSet = new Set();\n this.movedMap = {};\n this.mutationCb(payload);\n };\n this.processMutation = (m) => {\n if (isIgnored(m.target, this.mirror)) {\n return;\n }\n let unattachedDoc;\n try {\n unattachedDoc = document.implementation.createHTMLDocument();\n }\n catch (e) {\n unattachedDoc = this.doc;\n }\n switch (m.type) {\n case 'characterData': {\n const value = m.target.textContent;\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\n value !== m.oldValue) {\n this.texts.push({\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\n ? this.maskTextFn\n ? this.maskTextFn(value)\n : value.replace(/[\\S]/g, '*')\n : value,\n node: m.target,\n });\n }\n break;\n }\n case 'attributes': {\n const target = m.target;\n let attributeName = m.attributeName;\n let value = m.target.getAttribute(attributeName);\n if (attributeName === 'value') {\n const type = getInputType(target);\n const tagName = target.tagName;\n value = getInputValue(target, tagName, type);\n const isInputMasked = shouldMaskInput({\n maskInputOptions: this.maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\n value = maskInputValue({\n isMasked: forceMask,\n element: target,\n value,\n maskInputFn: this.maskInputFn,\n });\n }\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n value === m.oldValue) {\n return;\n }\n let item = this.attributes.find((a) => a.node === m.target);\n if (target.tagName === 'IFRAME' &&\n attributeName === 'src' &&\n !this.keepIframeSrcFn(value)) {\n if (!target.contentDocument) {\n attributeName = 'rr_src';\n }\n else {\n return;\n }\n }\n if (!item) {\n item = {\n node: m.target,\n attributes: {},\n styleDiff: {},\n _unchangedStyles: {},\n };\n this.attributes.push(item);\n }\n if (attributeName === 'type' &&\n target.tagName === 'INPUT' &&\n (m.oldValue || '').toLowerCase() === 'password') {\n target.setAttribute('data-rr-is-password', 'true');\n }\n if (!ignoreAttribute(target.tagName, attributeName)) {\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\n if (attributeName === 'style') {\n const old = unattachedDoc.createElement('span');\n if (m.oldValue) {\n old.setAttribute('style', m.oldValue);\n }\n for (const pname of Array.from(target.style)) {\n const newValue = target.style.getPropertyValue(pname);\n const newPriority = target.style.getPropertyPriority(pname);\n if (newValue !== old.style.getPropertyValue(pname) ||\n newPriority !== old.style.getPropertyPriority(pname)) {\n if (newPriority === '') {\n item.styleDiff[pname] = newValue;\n }\n else {\n item.styleDiff[pname] = [newValue, newPriority];\n }\n }\n else {\n item._unchangedStyles[pname] = [newValue, newPriority];\n }\n }\n for (const pname of Array.from(old.style)) {\n if (target.style.getPropertyValue(pname) === '') {\n item.styleDiff[pname] = false;\n }\n }\n }\n }\n break;\n }\n case 'childList': {\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\n return;\n }\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\n m.removedNodes.forEach((n) => {\n const nodeId = this.mirror.getId(n);\n const parentId = isShadowRoot(m.target)\n ? this.mirror.getId(m.target.host)\n : this.mirror.getId(m.target);\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\n isIgnored(n, this.mirror) ||\n !isSerialized(n, this.mirror)) {\n return;\n }\n if (this.addedSet.has(n)) {\n deepDelete(this.addedSet, n);\n this.droppedSet.add(n);\n }\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\n else if (isAncestorRemoved(m.target, this.mirror)) ;\n else if (this.movedSet.has(n) &&\n this.movedMap[moveKey(nodeId, parentId)]) {\n deepDelete(this.movedSet, n);\n }\n else {\n this.removes.push({\n parentId,\n id: nodeId,\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\n ? true\n : undefined,\n });\n }\n this.mapRemoves.push(n);\n });\n break;\n }\n }\n };\n this.genAdds = (n, target) => {\n if (this.processedNodeManager.inOtherBuffer(n, this))\n return;\n if (this.addedSet.has(n) || this.movedSet.has(n))\n return;\n if (this.mirror.hasNode(n)) {\n if (isIgnored(n, this.mirror)) {\n return;\n }\n this.movedSet.add(n);\n let targetId = null;\n if (target && this.mirror.hasNode(target)) {\n targetId = this.mirror.getId(target);\n }\n if (targetId && targetId !== -1) {\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\n }\n }\n else {\n this.addedSet.add(n);\n this.droppedSet.delete(n);\n }\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\n n.childNodes.forEach((childN) => this.genAdds(childN));\n if (hasShadowRoot(n)) {\n n.shadowRoot.childNodes.forEach((childN) => {\n this.processedNodeManager.add(childN, this);\n this.genAdds(childN, n);\n });\n }\n }\n };\n }\n init(options) {\n [\n 'mutationCb',\n 'blockClass',\n 'blockSelector',\n 'unblockSelector',\n 'maskAllText',\n 'maskTextClass',\n 'unmaskTextClass',\n 'maskTextSelector',\n 'unmaskTextSelector',\n 'inlineStylesheet',\n 'maskInputOptions',\n 'maskAttributeFn',\n 'maskTextFn',\n 'maskInputFn',\n 'keepIframeSrcFn',\n 'recordCanvas',\n 'inlineImages',\n 'slimDOMOptions',\n 'dataURLOptions',\n 'doc',\n 'mirror',\n 'iframeManager',\n 'stylesheetManager',\n 'shadowDomManager',\n 'canvasManager',\n 'processedNodeManager',\n ].forEach((key) => {\n this[key] = options[key];\n });\n }\n freeze() {\n this.frozen = true;\n this.canvasManager.freeze();\n }\n unfreeze() {\n this.frozen = false;\n this.canvasManager.unfreeze();\n this.emit();\n }\n isFrozen() {\n return this.frozen;\n }\n lock() {\n this.locked = true;\n this.canvasManager.lock();\n }\n unlock() {\n this.locked = false;\n this.canvasManager.unlock();\n this.emit();\n }\n reset() {\n this.shadowDomManager.reset();\n this.canvasManager.reset();\n }\n}\nfunction deepDelete(addsSet, n) {\n addsSet.delete(n);\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n, mirror) {\n if (removes.length === 0)\n return false;\n return _isParentRemoved(removes, n, mirror);\n}\nfunction _isParentRemoved(removes, n, mirror) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n const parentId = mirror.getId(parentNode);\n if (removes.some((r) => r.id === parentId)) {\n return true;\n }\n return _isParentRemoved(removes, parentNode, mirror);\n}\nfunction isAncestorInSet(set, n) {\n if (set.size === 0)\n return false;\n return _isAncestorInSet(set, n);\n}\nfunction _isAncestorInSet(set, n) {\n const { parentNode } = n;\n if (!parentNode) {\n return false;\n }\n if (set.has(parentNode)) {\n return true;\n }\n return _isAncestorInSet(set, parentNode);\n}\n\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n errorHandler = undefined;\n}\nconst callbackWrapper = (cb) => {\n if (!errorHandler) {\n return cb;\n }\n const rrwebWrapped = ((...rest) => {\n try {\n return cb(...rest);\n }\n catch (error) {\n if (errorHandler && errorHandler(error) === true) {\n return () => {\n };\n }\n throw error;\n }\n });\n return rrwebWrapped;\n};\n\nfunction _optionalChain$2(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n try {\n if ('composedPath' in event) {\n const path = event.composedPath();\n if (path.length) {\n return path[0];\n }\n }\n else if ('path' in event && event.path.length) {\n return event.path[0];\n }\n }\n catch (e2) {\n }\n return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n const mutationBuffer = new MutationBuffer();\n mutationBuffers.push(mutationBuffer);\n mutationBuffer.init(options);\n let mutationObserverCtor = window.MutationObserver ||\n window.__rrMutationObserver;\n const angularZoneSymbol = _optionalChain$2([window, 'optionalAccess', _ => _.Zone, 'optionalAccess', _2 => _2.__symbol__, 'optionalCall', _3 => _3('MutationObserver')]);\n if (angularZoneSymbol &&\n window[angularZoneSymbol]) {\n mutationObserverCtor = window[angularZoneSymbol];\n }\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\n if (options.onMutation && options.onMutation(mutations) === false) {\n return;\n }\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n }));\n observer.observe(rootEl, {\n attributes: true,\n attributeOldValue: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return observer;\n}\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\n if (sampling.mousemove === false) {\n return () => {\n };\n }\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\n ? sampling.mousemoveCallback\n : 500;\n let positions = [];\n let timeBaseline;\n const wrappedCb = throttle$1(callbackWrapper((source) => {\n const totalOffset = Date.now() - timeBaseline;\n mousemoveCb(positions.map((p) => {\n p.timeOffset -= totalOffset;\n return p;\n }), source);\n positions = [];\n timeBaseline = null;\n }), callbackThreshold);\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n const { clientX, clientY } = legacy_isTouchEvent(evt)\n ? evt.changedTouches[0]\n : evt;\n if (!timeBaseline) {\n timeBaseline = nowTimestamp();\n }\n positions.push({\n x: clientX,\n y: clientY,\n id: mirror.getId(target),\n timeOffset: nowTimestamp() - timeBaseline,\n });\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\n ? IncrementalSource.Drag\n : evt instanceof MouseEvent\n ? IncrementalSource.MouseMove\n : IncrementalSource.TouchMove);\n }), threshold, {\n trailing: false,\n }));\n const handlers = [\n on('mousemove', updatePosition, doc),\n on('touchmove', updatePosition, doc),\n on('drag', updatePosition, doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n if (sampling.mouseInteraction === false) {\n return () => {\n };\n }\n const disableMap = sampling.mouseInteraction === true ||\n sampling.mouseInteraction === undefined\n ? {}\n : sampling.mouseInteraction;\n const handlers = [];\n let currentPointerType = null;\n const getHandler = (eventKey) => {\n return (event) => {\n const target = getEventTarget(event);\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n let pointerType = null;\n let thisEventKey = eventKey;\n if ('pointerType' in event) {\n switch (event.pointerType) {\n case 'mouse':\n pointerType = PointerTypes.Mouse;\n break;\n case 'touch':\n pointerType = PointerTypes.Touch;\n break;\n case 'pen':\n pointerType = PointerTypes.Pen;\n break;\n }\n if (pointerType === PointerTypes.Touch) {\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n thisEventKey = 'TouchStart';\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n thisEventKey = 'TouchEnd';\n }\n }\n else if (pointerType === PointerTypes.Pen) ;\n }\n else if (legacy_isTouchEvent(event)) {\n pointerType = PointerTypes.Touch;\n }\n if (pointerType !== null) {\n currentPointerType = pointerType;\n if ((thisEventKey.startsWith('Touch') &&\n pointerType === PointerTypes.Touch) ||\n (thisEventKey.startsWith('Mouse') &&\n pointerType === PointerTypes.Mouse)) {\n pointerType = null;\n }\n }\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n pointerType = currentPointerType;\n currentPointerType = null;\n }\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n if (!e) {\n return;\n }\n const id = mirror.getId(target);\n const { clientX, clientY } = e;\n callbackWrapper(mouseInteractionCb)({\n type: MouseInteractions[thisEventKey],\n id,\n x: clientX,\n y: clientY,\n ...(pointerType !== null && { pointerType }),\n });\n };\n };\n Object.keys(MouseInteractions)\n .filter((key) => Number.isNaN(Number(key)) &&\n !key.endsWith('_Departed') &&\n disableMap[key] !== false)\n .forEach((eventKey) => {\n let eventName = toLowerCase(eventKey);\n const handler = getHandler(eventKey);\n if (window.PointerEvent) {\n switch (MouseInteractions[eventKey]) {\n case MouseInteractions.MouseDown:\n case MouseInteractions.MouseUp:\n eventName = eventName.replace('mouse', 'pointer');\n break;\n case MouseInteractions.TouchStart:\n case MouseInteractions.TouchEnd:\n return;\n }\n }\n handlers.push(on(eventName, handler, doc));\n });\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\n const updatePosition = callbackWrapper(throttle$1(callbackWrapper((evt) => {\n const target = getEventTarget(evt);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const id = mirror.getId(target);\n if (target === doc && doc.defaultView) {\n const scrollLeftTop = getWindowScroll(doc.defaultView);\n scrollCb({\n id,\n x: scrollLeftTop.left,\n y: scrollLeftTop.top,\n });\n }\n else {\n scrollCb({\n id,\n x: target.scrollLeft,\n y: target.scrollTop,\n });\n }\n }), sampling.scroll || 100));\n return on('scroll', updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n let lastH = -1;\n let lastW = -1;\n const updateDimension = callbackWrapper(throttle$1(callbackWrapper(() => {\n const height = getWindowHeight();\n const width = getWindowWidth();\n if (lastH !== height || lastW !== width) {\n viewportResizeCb({\n width: Number(width),\n height: Number(height),\n });\n lastH = height;\n lastW = width;\n }\n }), 200));\n return on('resize', updateDimension, win);\n}\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\nconst lastInputValueMap = new WeakMap();\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\n function eventHandler(event) {\n let target = getEventTarget(event);\n const userTriggered = event.isTrusted;\n const tagName = target && toUpperCase(target.tagName);\n if (tagName === 'OPTION')\n target = target.parentElement;\n if (!target ||\n !tagName ||\n INPUT_TAGS.indexOf(tagName) < 0 ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const el = target;\n if (el.classList.contains(ignoreClass) ||\n (ignoreSelector && el.matches(ignoreSelector))) {\n return;\n }\n const type = getInputType(target);\n let text = getInputValue(el, tagName, type);\n let isChecked = false;\n const isInputMasked = shouldMaskInput({\n maskInputOptions,\n tagName,\n type,\n });\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\n if (type === 'radio' || type === 'checkbox') {\n isChecked = target.checked;\n }\n text = maskInputValue({\n isMasked: forceMask,\n element: target,\n value: text,\n maskInputFn,\n });\n cbWithDedup(target, userTriggeredOnInput\n ? { text, isChecked, userTriggered }\n : { text, isChecked });\n const name = target.name;\n if (type === 'radio' && name && isChecked) {\n doc\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\n .forEach((el) => {\n if (el !== target) {\n const text = maskInputValue({\n isMasked: forceMask,\n element: el,\n value: getInputValue(el, tagName, type),\n maskInputFn,\n });\n cbWithDedup(el, userTriggeredOnInput\n ? { text, isChecked: !isChecked, userTriggered: false }\n : { text, isChecked: !isChecked });\n }\n });\n }\n }\n function cbWithDedup(target, v) {\n const lastInputValue = lastInputValueMap.get(target);\n if (!lastInputValue ||\n lastInputValue.text !== v.text ||\n lastInputValue.isChecked !== v.isChecked) {\n lastInputValueMap.set(target, v);\n const id = mirror.getId(target);\n callbackWrapper(inputCb)({\n ...v,\n id,\n });\n }\n }\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\n const currentWindow = doc.defaultView;\n if (!currentWindow) {\n return () => {\n handlers.forEach((h) => h());\n };\n }\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\n const hookProperties = [\n [currentWindow.HTMLInputElement.prototype, 'value'],\n [currentWindow.HTMLInputElement.prototype, 'checked'],\n [currentWindow.HTMLSelectElement.prototype, 'value'],\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\n ];\n if (propertyDescriptor && propertyDescriptor.set) {\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\n set() {\n callbackWrapper(eventHandler)({\n target: this,\n isTrusted: false,\n });\n },\n }, false, currentWindow)));\n }\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction getNestedCSSRulePositions(rule) {\n const positions = [];\n function recurse(childRule, pos) {\n if ((hasNestedCSSRule('CSSGroupingRule') &&\n childRule.parentRule instanceof CSSGroupingRule) ||\n (hasNestedCSSRule('CSSMediaRule') &&\n childRule.parentRule instanceof CSSMediaRule) ||\n (hasNestedCSSRule('CSSSupportsRule') &&\n childRule.parentRule instanceof CSSSupportsRule) ||\n (hasNestedCSSRule('CSSConditionRule') &&\n childRule.parentRule instanceof CSSConditionRule)) {\n const rules = Array.from(childRule.parentRule.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n else if (childRule.parentStyleSheet) {\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(childRule);\n pos.unshift(index);\n }\n return pos;\n }\n return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\n let id, styleId;\n if (!sheet)\n return {};\n if (sheet.ownerNode)\n id = mirror.getId(sheet.ownerNode);\n else\n styleId = styleMirror.getId(sheet);\n return {\n styleId,\n id,\n };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n return () => {\n };\n }\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [{ rule, index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [{ index }],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n let replace;\n if (win.CSSStyleSheet.prototype.replace) {\n replace = win.CSSStyleSheet.prototype.replace;\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replace: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n let replaceSync;\n if (win.CSSStyleSheet.prototype.replaceSync) {\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [text] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n replaceSync: text,\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n }\n const supportedNestedCSSRuleTypes = {};\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n }\n else {\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n }\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n }\n }\n const unmodifiedFunctions = {};\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n unmodifiedFunctions[typeKey] = {\n insertRule: type.prototype.insertRule,\n deleteRule: type.prototype.deleteRule,\n };\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [rule, index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n adds: [\n {\n rule,\n index: [\n ...getNestedCSSRulePositions(thisArg),\n index || 0,\n ],\n },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [index] = argumentsList;\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleSheetRuleCb({\n id,\n styleId,\n removes: [\n { index: [...getNestedCSSRulePositions(thisArg), index] },\n ],\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n });\n return callbackWrapper(() => {\n win.CSSStyleSheet.prototype.insertRule = insertRule;\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n replace && (win.CSSStyleSheet.prototype.replace = replace);\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n });\n });\n}\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\n let hostId = null;\n if (host.nodeName === '#document')\n hostId = mirror.getId(host);\n else\n hostId = mirror.getId(host.host);\n const patchTarget = host.nodeName === '#document'\n ? _optionalChain$2([host, 'access', _4 => _4.defaultView, 'optionalAccess', _5 => _5.Document])\n : _optionalChain$2([host, 'access', _6 => _6.ownerDocument, 'optionalAccess', _7 => _7.defaultView, 'optionalAccess', _8 => _8.ShadowRoot]);\n const originalPropertyDescriptor = _optionalChain$2([patchTarget, 'optionalAccess', _9 => _9.prototype])\n ? Object.getOwnPropertyDescriptor(_optionalChain$2([patchTarget, 'optionalAccess', _10 => _10.prototype]), 'adoptedStyleSheets')\n : undefined;\n if (hostId === null ||\n hostId === -1 ||\n !patchTarget ||\n !originalPropertyDescriptor)\n return () => {\n };\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get() {\n return _optionalChain$2([originalPropertyDescriptor, 'access', _11 => _11.get, 'optionalAccess', _12 => _12.call, 'call', _13 => _13(this)]);\n },\n set(sheets) {\n const result = _optionalChain$2([originalPropertyDescriptor, 'access', _14 => _14.set, 'optionalAccess', _15 => _15.call, 'call', _16 => _16(this, sheets)]);\n if (hostId !== null && hostId !== -1) {\n try {\n stylesheetManager.adoptStyleSheets(sheets, hostId);\n }\n catch (e) {\n }\n }\n return result;\n },\n });\n return callbackWrapper(() => {\n Object.defineProperty(host, 'adoptedStyleSheets', {\n configurable: originalPropertyDescriptor.configurable,\n enumerable: originalPropertyDescriptor.enumerable,\n get: originalPropertyDescriptor.get,\n set: originalPropertyDescriptor.set,\n });\n });\n}\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property, value, priority] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return setProperty.apply(thisArg, [property, value, priority]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _17 => _17.parentRule, 'optionalAccess', _18 => _18.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n set: {\n property,\n value,\n priority,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n apply: callbackWrapper((target, thisArg, argumentsList) => {\n const [property] = argumentsList;\n if (ignoreCSSAttributes.has(property)) {\n return removeProperty.apply(thisArg, [property]);\n }\n const { id, styleId } = getIdAndStyleId(_optionalChain$2([thisArg, 'access', _19 => _19.parentRule, 'optionalAccess', _20 => _20.parentStyleSheet]), mirror, stylesheetManager.styleMirror);\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\n styleDeclarationCb({\n id,\n styleId,\n remove: {\n property,\n },\n index: getNestedCSSRulePositions(thisArg.parentRule),\n });\n }\n return target.apply(thisArg, argumentsList);\n }),\n });\n return callbackWrapper(() => {\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n });\n}\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\n const handler = callbackWrapper((type) => throttle$1(callbackWrapper((event) => {\n const target = getEventTarget(event);\n if (!target ||\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n return;\n }\n const { currentTime, volume, muted, playbackRate } = target;\n mediaInteractionCb({\n type,\n id: mirror.getId(target),\n currentTime,\n volume,\n muted,\n playbackRate,\n });\n }), sampling.media || 500));\n const handlers = [\n on('play', handler(0), doc),\n on('pause', handler(1), doc),\n on('seeked', handler(2), doc),\n on('volumechange', handler(3), doc),\n on('ratechange', handler(4), doc),\n ];\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initFontObserver({ fontCb, doc }) {\n const win = doc.defaultView;\n if (!win) {\n return () => {\n };\n }\n const handlers = [];\n const fontMap = new WeakMap();\n const originalFontFace = win.FontFace;\n win.FontFace = function FontFace(family, source, descriptors) {\n const fontFace = new originalFontFace(family, source, descriptors);\n fontMap.set(fontFace, {\n family,\n buffer: typeof source !== 'string',\n descriptors,\n fontSource: typeof source === 'string'\n ? source\n : JSON.stringify(Array.from(new Uint8Array(source))),\n });\n return fontFace;\n };\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\n return function (fontFace) {\n setTimeout(callbackWrapper(() => {\n const p = fontMap.get(fontFace);\n if (p) {\n fontCb(p);\n fontMap.delete(fontFace);\n }\n }), 0);\n return original.apply(this, [fontFace]);\n };\n });\n handlers.push(() => {\n win.FontFace = originalFontFace;\n });\n handlers.push(restoreHandler);\n return callbackWrapper(() => {\n handlers.forEach((h) => h());\n });\n}\nfunction initSelectionObserver(param) {\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\n let collapsed = true;\n const updateSelection = callbackWrapper(() => {\n const selection = doc.getSelection();\n if (!selection || (collapsed && _optionalChain$2([selection, 'optionalAccess', _21 => _21.isCollapsed])))\n return;\n collapsed = selection.isCollapsed || false;\n const ranges = [];\n const count = selection.rangeCount || 0;\n for (let i = 0; i < count; i++) {\n const range = selection.getRangeAt(i);\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\n if (blocked)\n continue;\n ranges.push({\n start: mirror.getId(startContainer),\n startOffset,\n end: mirror.getId(endContainer),\n endOffset,\n });\n }\n selectionCb({ ranges });\n });\n updateSelection();\n return on('selectionchange', updateSelection);\n}\nfunction initCustomElementObserver({ doc, customElementCb, }) {\n const win = doc.defaultView;\n if (!win || !win.customElements) {\n return () => {\n };\n }\n const restoreHandler = patch(win.customElements, 'define', function (original) {\n return function (name, constructor, options) {\n try {\n customElementCb({\n define: {\n name,\n },\n });\n }\n catch (e) {\n }\n return original.apply(this, [name, constructor, options]);\n };\n });\n return restoreHandler;\n}\nfunction initObservers(o, _hooks = {}) {\n const currentWindow = o.doc.defaultView;\n if (!currentWindow) {\n return () => {\n };\n }\n const mutationObserver = initMutationObserver(o, o.doc);\n const mousemoveHandler = initMoveObserver(o);\n const mouseInteractionHandler = initMouseInteractionObserver(o);\n const scrollHandler = initScrollObserver(o);\n const viewportResizeHandler = initViewportResizeObserver(o, {\n win: currentWindow,\n });\n const inputHandler = initInputObserver(o);\n const mediaInteractionHandler = initMediaInteractionObserver(o);\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\n win: currentWindow,\n });\n const fontObserver = o.collectFonts\n ? initFontObserver(o)\n : () => {\n };\n const selectionObserver = initSelectionObserver(o);\n const customElementObserver = initCustomElementObserver(o);\n const pluginHandlers = [];\n for (const plugin of o.plugins) {\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\n }\n return callbackWrapper(() => {\n mutationBuffers.forEach((b) => b.reset());\n mutationObserver.disconnect();\n mousemoveHandler();\n mouseInteractionHandler();\n scrollHandler();\n viewportResizeHandler();\n inputHandler();\n mediaInteractionHandler();\n styleSheetObserver();\n adoptedStyleSheetObserver();\n styleDeclarationObserver();\n fontObserver();\n selectionObserver();\n customElementObserver();\n pluginHandlers.forEach((h) => h());\n });\n}\nfunction hasNestedCSSRule(prop) {\n return typeof window[prop] !== 'undefined';\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n return Boolean(typeof window[prop] !== 'undefined' &&\n window[prop].prototype &&\n 'insertRule' in window[prop].prototype &&\n 'deleteRule' in window[prop].prototype);\n}\n\nclass CrossOriginIframeMirror {\n constructor(generateIdFn) {\n this.generateIdFn = generateIdFn;\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n }\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n let id = idToRemoteIdMap.get(remoteId);\n if (!id) {\n id = this.generateIdFn();\n idToRemoteIdMap.set(remoteId, id);\n remoteIdToIdMap.set(id, remoteId);\n }\n return id;\n }\n getIds(iframe, remoteId) {\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\n }\n getRemoteId(iframe, id, map) {\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n if (typeof id !== 'number')\n return id;\n const remoteId = remoteIdToIdMap.get(id);\n if (!remoteId)\n return -1;\n return remoteId;\n }\n getRemoteIds(iframe, ids) {\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n }\n reset(iframe) {\n if (!iframe) {\n this.iframeIdToRemoteIdMap = new WeakMap();\n this.iframeRemoteIdToIdMap = new WeakMap();\n return;\n }\n this.iframeIdToRemoteIdMap.delete(iframe);\n this.iframeRemoteIdToIdMap.delete(iframe);\n }\n getIdToRemoteIdMap(iframe) {\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n if (!idToRemoteIdMap) {\n idToRemoteIdMap = new Map();\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n }\n return idToRemoteIdMap;\n }\n getRemoteIdToIdMap(iframe) {\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n if (!remoteIdToIdMap) {\n remoteIdToIdMap = new Map();\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n }\n return remoteIdToIdMap;\n }\n}\n\nfunction _optionalChain$1(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }\nclass IframeManagerNoop {\n constructor() {\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n }\n addIframe() {\n }\n addLoadListener() {\n }\n attachIframe() {\n }\n}\nclass IframeManager {\n constructor(options) {\n this.iframes = new WeakMap();\n this.crossOriginIframeMap = new WeakMap();\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n this.crossOriginIframeRootIdMap = new WeakMap();\n this.mutationCb = options.mutationCb;\n this.wrappedEmit = options.wrappedEmit;\n this.stylesheetManager = options.stylesheetManager;\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\n this.mirror = options.mirror;\n if (this.recordCrossOriginIframes) {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n }\n addIframe(iframeEl) {\n this.iframes.set(iframeEl, true);\n if (iframeEl.contentWindow)\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n }\n addLoadListener(cb) {\n this.loadListener = cb;\n }\n attachIframe(iframeEl, childSn) {\n this.mutationCb({\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: childSn,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n });\n _optionalChain$1([this, 'access', _ => _.loadListener, 'optionalCall', _2 => _2(iframeEl)]);\n if (iframeEl.contentDocument &&\n iframeEl.contentDocument.adoptedStyleSheets &&\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\n }\n handleMessage(message) {\n const crossOriginMessageEvent = message;\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n return;\n const iframeSourceWindow = message.source;\n if (!iframeSourceWindow)\n return;\n const iframeEl = this.crossOriginIframeMap.get(message.source);\n if (!iframeEl)\n return;\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\n if (transformedEvent)\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\n }\n transformCrossOriginEvent(iframeEl, e) {\n switch (e.type) {\n case EventType.FullSnapshot: {\n this.crossOriginIframeMirror.reset(iframeEl);\n this.crossOriginIframeStyleMirror.reset(iframeEl);\n this.replaceIdOnNode(e.data.node, iframeEl);\n const rootId = e.data.node.id;\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n this.patchRootIdOnNode(e.data.node, rootId);\n return {\n timestamp: e.timestamp,\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n adds: [\n {\n parentId: this.mirror.getId(iframeEl),\n nextId: null,\n node: e.data.node,\n },\n ],\n removes: [],\n texts: [],\n attributes: [],\n isAttachIframe: true,\n },\n };\n }\n case EventType.Meta:\n case EventType.Load:\n case EventType.DomContentLoaded: {\n return false;\n }\n case EventType.Plugin: {\n return e;\n }\n case EventType.Custom: {\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\n return e;\n }\n case EventType.IncrementalSnapshot: {\n switch (e.data.source) {\n case IncrementalSource.Mutation: {\n e.data.adds.forEach((n) => {\n this.replaceIds(n, iframeEl, [\n 'parentId',\n 'nextId',\n 'previousId',\n ]);\n this.replaceIdOnNode(n.node, iframeEl);\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n rootId && this.patchRootIdOnNode(n.node, rootId);\n });\n e.data.removes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\n });\n e.data.attributes.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n e.data.texts.forEach((n) => {\n this.replaceIds(n, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.Drag:\n case IncrementalSource.TouchMove:\n case IncrementalSource.MouseMove: {\n e.data.positions.forEach((p) => {\n this.replaceIds(p, iframeEl, ['id']);\n });\n return e;\n }\n case IncrementalSource.ViewportResize: {\n return false;\n }\n case IncrementalSource.MediaInteraction:\n case IncrementalSource.MouseInteraction:\n case IncrementalSource.Scroll:\n case IncrementalSource.CanvasMutation:\n case IncrementalSource.Input: {\n this.replaceIds(e.data, iframeEl, ['id']);\n return e;\n }\n case IncrementalSource.StyleSheetRule:\n case IncrementalSource.StyleDeclaration: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\n return e;\n }\n case IncrementalSource.Font: {\n return e;\n }\n case IncrementalSource.Selection: {\n e.data.ranges.forEach((range) => {\n this.replaceIds(range, iframeEl, ['start', 'end']);\n });\n return e;\n }\n case IncrementalSource.AdoptedStyleSheet: {\n this.replaceIds(e.data, iframeEl, ['id']);\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\n _optionalChain$1([e, 'access', _3 => _3.data, 'access', _4 => _4.styles, 'optionalAccess', _5 => _5.forEach, 'call', _6 => _6((style) => {\n this.replaceStyleIds(style, iframeEl, ['styleId']);\n })]);\n return e;\n }\n }\n }\n }\n return false;\n }\n replace(iframeMirror, obj, iframeEl, keys) {\n for (const key of keys) {\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\n continue;\n if (Array.isArray(obj[key])) {\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\n }\n else {\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n }\n }\n return obj;\n }\n replaceIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n }\n replaceStyleIds(obj, iframeEl, keys) {\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n }\n replaceIdOnNode(node, iframeEl) {\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.replaceIdOnNode(child, iframeEl);\n });\n }\n }\n patchRootIdOnNode(node, rootId) {\n if (node.type !== NodeType$1.Document && !node.rootId)\n node.rootId = rootId;\n if ('childNodes' in node) {\n node.childNodes.forEach((child) => {\n this.patchRootIdOnNode(child, rootId);\n });\n }\n }\n}\n\nclass ShadowDomManagerNoop {\n init() {\n }\n addShadowRoot() {\n }\n observeAttachShadow() {\n }\n reset() {\n }\n}\nclass ShadowDomManager {\n constructor(options) {\n this.shadowDoms = new WeakSet();\n this.restoreHandlers = [];\n this.mutationCb = options.mutationCb;\n this.scrollCb = options.scrollCb;\n this.bypassOptions = options.bypassOptions;\n this.mirror = options.mirror;\n this.init();\n }\n init() {\n this.reset();\n this.patchAttachShadow(Element, document);\n }\n addShadowRoot(shadowRoot, doc) {\n if (!isNativeShadowDom(shadowRoot))\n return;\n if (this.shadowDoms.has(shadowRoot))\n return;\n this.shadowDoms.add(shadowRoot);\n const observer = initMutationObserver({\n ...this.bypassOptions,\n doc,\n mutationCb: this.mutationCb,\n mirror: this.mirror,\n shadowDomManager: this,\n }, shadowRoot);\n this.restoreHandlers.push(() => observer.disconnect());\n this.restoreHandlers.push(initScrollObserver({\n ...this.bypassOptions,\n scrollCb: this.scrollCb,\n doc: shadowRoot,\n mirror: this.mirror,\n }));\n setTimeout(() => {\n if (shadowRoot.adoptedStyleSheets &&\n shadowRoot.adoptedStyleSheets.length > 0)\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\n mirror: this.mirror,\n stylesheetManager: this.bypassOptions.stylesheetManager,\n }, shadowRoot));\n }, 0);\n }\n observeAttachShadow(iframeElement) {\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\n return;\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\n }\n patchAttachShadow(element, doc) {\n const manager = this;\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\n return function (option) {\n const shadowRoot = original.call(this, option);\n if (this.shadowRoot && inDom(this))\n manager.addShadowRoot(this.shadowRoot, doc);\n return shadowRoot;\n };\n }));\n }\n reset() {\n this.restoreHandlers.forEach((handler) => {\n try {\n handler();\n }\n catch (e) {\n }\n });\n this.restoreHandlers = [];\n this.shadowDoms = new WeakSet();\n }\n}\n\nclass CanvasManagerNoop {\n reset() {\n }\n freeze() {\n }\n unfreeze() {\n }\n lock() {\n }\n unlock() {\n }\n}\n\nclass StylesheetManager {\n constructor(options) {\n this.trackedLinkElements = new WeakSet();\n this.styleMirror = new StyleSheetMirror();\n this.mutationCb = options.mutationCb;\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n }\n attachLinkElement(linkEl, childSn) {\n if ('_cssText' in childSn.attributes)\n this.mutationCb({\n adds: [],\n removes: [],\n texts: [],\n attributes: [\n {\n id: childSn.id,\n attributes: childSn\n .attributes,\n },\n ],\n });\n this.trackLinkElement(linkEl);\n }\n trackLinkElement(linkEl) {\n if (this.trackedLinkElements.has(linkEl))\n return;\n this.trackedLinkElements.add(linkEl);\n this.trackStylesheetInLinkElement(linkEl);\n }\n adoptStyleSheets(sheets, hostId) {\n if (sheets.length === 0)\n return;\n const adoptedStyleSheetData = {\n id: hostId,\n styleIds: [],\n };\n const styles = [];\n for (const sheet of sheets) {\n let styleId;\n if (!this.styleMirror.has(sheet)) {\n styleId = this.styleMirror.add(sheet);\n styles.push({\n styleId,\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\n rule: stringifyRule(r),\n index,\n })),\n });\n }\n else\n styleId = this.styleMirror.getId(sheet);\n adoptedStyleSheetData.styleIds.push(styleId);\n }\n if (styles.length > 0)\n adoptedStyleSheetData.styles = styles;\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\n }\n reset() {\n this.styleMirror.reset();\n this.trackedLinkElements = new WeakSet();\n }\n trackStylesheetInLinkElement(linkEl) {\n }\n}\n\nclass ProcessedNodeManager {\n constructor() {\n this.nodeMap = new WeakMap();\n this.loop = true;\n this.periodicallyClear();\n }\n periodicallyClear() {\n onRequestAnimationFrame(() => {\n this.clear();\n if (this.loop)\n this.periodicallyClear();\n });\n }\n inOtherBuffer(node, thisBuffer) {\n const buffers = this.nodeMap.get(node);\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\n }\n add(node, buffer) {\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\n }\n clear() {\n this.nodeMap = new WeakMap();\n }\n destroy() {\n this.loop = false;\n }\n}\n\nfunction wrapEvent(e) {\n const eWithTime = e;\n eWithTime.timestamp = nowTimestamp();\n return eWithTime;\n}\nlet _wrappedEmit;\nlet _takeFullSnapshot;\nconst mirror = createMirror();\nfunction record(options = {}) {\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, unblockSelector = null, ignoreClass = 'rr-ignore', ignoreSelector = null, maskAllText = false, maskTextClass = 'rr-mask', unmaskTextClass = null, maskTextSelector = null, unmaskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskAttributeFn, maskInputFn, maskTextFn, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, recordAfter = options.recordAfter === 'DOMContentLoaded'\n ? options.recordAfter\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\n registerErrorHandler(errorHandler);\n const inEmittingFrame = recordCrossOriginIframes\n ? window.parent === window\n : true;\n let passEmitsToParent = false;\n if (!inEmittingFrame) {\n try {\n if (window.parent.document) {\n passEmitsToParent = false;\n }\n }\n catch (e) {\n passEmitsToParent = true;\n }\n }\n if (inEmittingFrame && !emit) {\n throw new Error('emit function is required');\n }\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\n sampling.mousemove = mousemoveWait;\n }\n mirror.reset();\n const maskInputOptions = maskAllInputs === true\n ? {\n color: true,\n date: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true,\n textarea: true,\n select: true,\n radio: true,\n checkbox: true,\n }\n : _maskInputOptions !== undefined\n ? _maskInputOptions\n : {};\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\n ? {\n script: true,\n comment: true,\n headFavicon: true,\n headWhitespace: true,\n headMetaSocial: true,\n headMetaRobots: true,\n headMetaHttpEquiv: true,\n headMetaVerification: true,\n headMetaAuthorship: _slimDOMOptions === 'all',\n headMetaDescKeywords: _slimDOMOptions === 'all',\n }\n : _slimDOMOptions\n ? _slimDOMOptions\n : {};\n polyfill();\n let lastFullSnapshotEvent;\n let incrementalSnapshotCount = 0;\n const eventProcessor = (e) => {\n for (const plugin of plugins || []) {\n if (plugin.eventProcessor) {\n e = plugin.eventProcessor(e);\n }\n }\n if (packFn &&\n !passEmitsToParent) {\n e = packFn(e);\n }\n return e;\n };\n const wrappedEmit = (e, isCheckout) => {\n if (_optionalChain([mutationBuffers, 'access', _ => _[0], 'optionalAccess', _2 => _2.isFrozen, 'call', _3 => _3()]) &&\n e.type !== EventType.FullSnapshot &&\n !(e.type === EventType.IncrementalSnapshot &&\n e.data.source === IncrementalSource.Mutation)) {\n mutationBuffers.forEach((buf) => buf.unfreeze());\n }\n if (inEmittingFrame) {\n _optionalChain([emit, 'optionalCall', _4 => _4(eventProcessor(e), isCheckout)]);\n }\n else if (passEmitsToParent) {\n const message = {\n type: 'rrweb',\n event: eventProcessor(e),\n origin: window.location.origin,\n isCheckout,\n };\n window.parent.postMessage(message, '*');\n }\n if (e.type === EventType.FullSnapshot) {\n lastFullSnapshotEvent = e;\n incrementalSnapshotCount = 0;\n }\n else if (e.type === EventType.IncrementalSnapshot) {\n if (e.data.source === IncrementalSource.Mutation &&\n e.data.isAttachIframe) {\n return;\n }\n incrementalSnapshotCount++;\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n const exceedTime = checkoutEveryNms &&\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n if (exceedCount || exceedTime) {\n takeFullSnapshot(true);\n }\n }\n };\n _wrappedEmit = wrappedEmit;\n const wrappedMutationEmit = (m) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Mutation,\n ...m,\n },\n }));\n };\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Scroll,\n ...p,\n },\n }));\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n }));\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.AdoptedStyleSheet,\n ...a,\n },\n }));\n const stylesheetManager = new StylesheetManager({\n mutationCb: wrappedMutationEmit,\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\n });\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\n ? new IframeManagerNoop()\n : new IframeManager({\n mirror,\n mutationCb: wrappedMutationEmit,\n stylesheetManager: stylesheetManager,\n recordCrossOriginIframes,\n wrappedEmit,\n });\n for (const plugin of plugins || []) {\n if (plugin.getMirror)\n plugin.getMirror({\n nodeMirror: mirror,\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\n });\n }\n const processedNodeManager = new ProcessedNodeManager();\n const canvasManager = _getCanvasManager(getCanvasManager, {\n recordCanvas,\n blockClass,\n blockSelector,\n unblockSelector,\n sampling: sampling['canvas'],\n dataURLOptions,\n });\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\n __RRWEB_EXCLUDE_SHADOW_DOM__\n ? new ShadowDomManagerNoop()\n : new ShadowDomManager({\n mutationCb: wrappedMutationEmit,\n scrollCb: wrappedScrollEmit,\n bypassOptions: {\n onMutation,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskInputOptions,\n dataURLOptions,\n maskAttributeFn,\n maskTextFn,\n maskInputFn,\n recordCanvas,\n inlineImages,\n sampling,\n slimDOMOptions,\n iframeManager,\n stylesheetManager,\n canvasManager,\n keepIframeSrcFn,\n processedNodeManager,\n },\n mirror,\n });\n const takeFullSnapshot = (isCheckout = false) => {\n wrappedEmit(wrapEvent({\n type: EventType.Meta,\n data: {\n href: window.location.href,\n width: getWindowWidth(),\n height: getWindowHeight(),\n },\n }), isCheckout);\n stylesheetManager.reset();\n shadowDomManager.init();\n mutationBuffers.forEach((buf) => buf.lock());\n const node = snapshot(document, {\n mirror,\n blockClass,\n blockSelector,\n unblockSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n inlineStylesheet,\n maskAllInputs: maskInputOptions,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n slimDOM: slimDOMOptions,\n dataURLOptions,\n recordCanvas,\n inlineImages,\n onSerialize: (n) => {\n if (isSerializedIframe(n, mirror)) {\n iframeManager.addIframe(n);\n }\n if (isSerializedStylesheet(n, mirror)) {\n stylesheetManager.trackLinkElement(n);\n }\n if (hasShadowRoot(n)) {\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\n }\n },\n onIframeLoad: (iframe, childSn) => {\n iframeManager.attachIframe(iframe, childSn);\n shadowDomManager.observeAttachShadow(iframe);\n },\n onStylesheetLoad: (linkEl, childSn) => {\n stylesheetManager.attachLinkElement(linkEl, childSn);\n },\n keepIframeSrcFn,\n });\n if (!node) {\n return console.warn('Failed to snapshot the document');\n }\n wrappedEmit(wrapEvent({\n type: EventType.FullSnapshot,\n data: {\n node,\n initialOffset: getWindowScroll(window),\n },\n }));\n mutationBuffers.forEach((buf) => buf.unlock());\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\n };\n _takeFullSnapshot = takeFullSnapshot;\n try {\n const handlers = [];\n const observe = (doc) => {\n return callbackWrapper(initObservers)({\n onMutation,\n mutationCb: wrappedMutationEmit,\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source,\n positions,\n },\n })),\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MouseInteraction,\n ...d,\n },\n })),\n scrollCb: wrappedScrollEmit,\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.ViewportResize,\n ...d,\n },\n })),\n inputCb: (v) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Input,\n ...v,\n },\n })),\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.MediaInteraction,\n ...p,\n },\n })),\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleSheetRule,\n ...r,\n },\n })),\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.StyleDeclaration,\n ...r,\n },\n })),\n canvasMutationCb: wrappedCanvasMutationEmit,\n fontCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Font,\n ...p,\n },\n })),\n selectionCb: (p) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.Selection,\n ...p,\n },\n }));\n },\n customElementCb: (c) => {\n wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CustomElement,\n ...c,\n },\n }));\n },\n blockClass,\n ignoreClass,\n ignoreSelector,\n maskAllText,\n maskTextClass,\n unmaskTextClass,\n maskTextSelector,\n unmaskTextSelector,\n maskInputOptions,\n inlineStylesheet,\n sampling,\n recordCanvas,\n inlineImages,\n userTriggeredOnInput,\n collectFonts,\n doc,\n maskAttributeFn,\n maskInputFn,\n maskTextFn,\n keepIframeSrcFn,\n blockSelector,\n unblockSelector,\n slimDOMOptions,\n dataURLOptions,\n mirror,\n iframeManager,\n stylesheetManager,\n shadowDomManager,\n processedNodeManager,\n canvasManager,\n ignoreCSSAttributes,\n plugins: _optionalChain([plugins\n, 'optionalAccess', _5 => _5.filter, 'call', _6 => _6((p) => p.observer)\n, 'optionalAccess', _7 => _7.map, 'call', _8 => _8((p) => ({\n observer: p.observer,\n options: p.options,\n callback: (payload) => wrappedEmit(wrapEvent({\n type: EventType.Plugin,\n data: {\n plugin: p.name,\n payload,\n },\n })),\n }))]) || [],\n }, {});\n };\n iframeManager.addLoadListener((iframeEl) => {\n try {\n handlers.push(observe(iframeEl.contentDocument));\n }\n catch (error) {\n console.warn(error);\n }\n });\n const init = () => {\n takeFullSnapshot();\n handlers.push(observe(document));\n };\n if (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n init();\n }\n else {\n handlers.push(on('DOMContentLoaded', () => {\n wrappedEmit(wrapEvent({\n type: EventType.DomContentLoaded,\n data: {},\n }));\n if (recordAfter === 'DOMContentLoaded')\n init();\n }));\n handlers.push(on('load', () => {\n wrappedEmit(wrapEvent({\n type: EventType.Load,\n data: {},\n }));\n if (recordAfter === 'load')\n init();\n }, window));\n }\n return () => {\n handlers.forEach((h) => h());\n processedNodeManager.destroy();\n _takeFullSnapshot = undefined;\n unregisterErrorHandler();\n };\n }\n catch (error) {\n console.warn(error);\n }\n}\nfunction takeFullSnapshot(isCheckout) {\n if (!_takeFullSnapshot) {\n throw new Error('please take full snapshot after start recording');\n }\n _takeFullSnapshot(isCheckout);\n}\nfunction wrappedEmit(e) {\n if (!_wrappedEmit) {\n return;\n }\n _wrappedEmit(e);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n return getCanvasManagerFn\n ? getCanvasManagerFn({\n ...options,\n mirror,\n win: window,\n mutationCb: (p) => wrappedEmit(wrapEvent({\n type: EventType.IncrementalSnapshot,\n data: {\n source: IncrementalSource.CanvasMutation,\n ...p,\n },\n })),\n })\n : new CanvasManagerNoop();\n}\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n replay.triggerUserActivity();\n } else {\n replay.checkAndHandleExpiredSession();\n }\n\n replay.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n // but maybe we should just keep them as milliseconds\n timestamp: (breadcrumb.timestamp || 0) * 1000,\n data: {\n tag: 'breadcrumb',\n // normalize to max. 10 depth and 1_000 properties per object\n payload: normalize(breadcrumb, 10, 1000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in ,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n const target = getTargetNode(event);\n\n if (!target || !(target instanceof Element)) {\n return target;\n }\n\n return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n if (isEventWithTarget(event)) {\n return event.target ;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event) {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n // Ensure to only register this once\n if (!handlers) {\n handlers = [];\n monkeyPatchWindowOpen();\n }\n\n handlers.push(cb);\n\n return () => {\n const pos = handlers ? handlers.indexOf(cb) : -1;\n if (pos > -1) {\n (handlers ).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen() {\n fill(WINDOW, 'open', function (originalWindowOpen) {\n return function (...args) {\n if (handlers) {\n try {\n handlers.forEach(handler => handler());\n } catch (e) {\n // ignore errors in here\n }\n }\n\n return originalWindowOpen.apply(WINDOW, args);\n };\n });\n}\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector {\n // protected for testing\n\n constructor(\n replay,\n slowClickConfig,\n // Just for easier testing\n _addBreadcrumbEvent = addBreadcrumbEvent,\n ) {\n this._lastMutation = 0;\n this._lastScroll = 0;\n this._clicks = [];\n\n // We want everything in s, but options are in ms\n this._timeout = slowClickConfig.timeout / 1000;\n this._threshold = slowClickConfig.threshold / 1000;\n this._scollTimeout = slowClickConfig.scrollTimeout / 1000;\n this._replay = replay;\n this._ignoreSelector = slowClickConfig.ignoreSelector;\n this._addBreadcrumbEvent = _addBreadcrumbEvent;\n }\n\n /** Register click detection handlers on mutation or scroll. */\n addListeners() {\n const cleanupWindowOpen = onWindowOpen(() => {\n // Treat window.open as mutation\n this._lastMutation = nowInSeconds();\n });\n\n this._teardown = () => {\n cleanupWindowOpen();\n\n this._clicks = [];\n this._lastMutation = 0;\n this._lastScroll = 0;\n };\n }\n\n /** Clean up listeners. */\n removeListeners() {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n handleClick(breadcrumb, node) {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick = {\n timestamp: timestampToS(breadcrumb.timestamp),\n clickBreadcrumb: breadcrumb,\n // Set this to 0 so we know it originates from the click breadcrumb\n clickCount: 0,\n node,\n };\n\n // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n if (\n this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n ) {\n return;\n }\n\n this._clicks.push(newClick);\n\n // If this is the first new click, set a timeout to check for multi clicks\n if (this._clicks.length === 1) {\n this._scheduleCheckClicks();\n }\n }\n\n /** @inheritDoc */\n registerMutation(timestamp = Date.now()) {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerScroll(timestamp = Date.now()) {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n registerClick(element) {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node );\n }\n\n /** Count multiple clicks on elements. */\n _handleMultiClick(node) {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n _getClicks(node) {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n _checkClicks() {\n const timedOutClicks = [];\n\n const now = nowInSeconds();\n\n this._clicks.forEach(click => {\n if (!click.mutationAfter && this._lastMutation) {\n click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n }\n if (!click.scrollAfter && this._lastScroll) {\n click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n }\n\n // All of these are in seconds!\n if (click.timestamp + this._timeout <= now) {\n timedOutClicks.push(click);\n }\n });\n\n // Remove \"old\" clicks\n for (const click of timedOutClicks) {\n const pos = this._clicks.indexOf(click);\n\n if (pos > -1) {\n this._generateBreadcrumbs(click);\n this._clicks.splice(pos, 1);\n }\n }\n\n // Trigger new check, unless no clicks left\n if (this._clicks.length) {\n this._scheduleCheckClicks();\n }\n }\n\n /** Generate matching breadcrumb(s) for the click. */\n _generateBreadcrumbs(click) {\n const replay = this._replay;\n const hadScroll = click.scrollAfter && click.scrollAfter <= this._scollTimeout;\n const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n const isSlowClick = !hadScroll && !hadMutation;\n const { clickCount, clickBreadcrumb } = click;\n\n // Slow click\n if (isSlowClick) {\n // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n // If not, it means we just timed out without scroll & mutation\n const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.slowClickDetected',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n timeAfterClickMs,\n endReason,\n // If clickCount === 0, it means multiClick was not correctly captured here\n // - we still want to send 1 in this case\n clickCount: clickCount || 1,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n return;\n }\n\n // Multi click\n if (clickCount > 1) {\n const breadcrumb = {\n type: 'default',\n message: clickBreadcrumb.message,\n timestamp: clickBreadcrumb.timestamp,\n category: 'ui.multiClick',\n data: {\n ...clickBreadcrumb.data,\n url: WINDOW.location.href,\n route: replay.getCurrentRoute(),\n clickCount,\n metric: true,\n },\n };\n\n this._addBreadcrumbEvent(replay, breadcrumb);\n }\n }\n\n /** Schedule to check current clicks. */\n _scheduleCheckClicks() {\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n\n this._checkClickTimeout = setTimeout(() => this._checkClicks(), 1000);\n }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n return true;\n }\n\n // If tag, we only want to consider input[type='submit'] & input[type='button']\n if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n return true;\n }\n\n // If tag, detect special variants that may not lead to an action\n // If target !== _self, we may open the link somewhere else, which would lead to no action\n // Also, when downloading a file, we may not leave the page, but still not trigger an action\n if (\n node.tagName === 'A' &&\n (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n ) {\n return true;\n }\n\n if (ignoreSelector && node.matches(ignoreSelector)) {\n return true;\n }\n\n return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n try {\n // note: We only consider incremental snapshots here\n // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n if (!isIncrementalEvent(event)) {\n return;\n }\n\n const { source } = event.data;\n if (source === IncrementalSource.Mutation) {\n clickDetector.registerMutation(event.timestamp);\n }\n\n if (source === IncrementalSource.Scroll) {\n clickDetector.registerScroll(event.timestamp);\n }\n\n if (isIncrementalMouseInteraction(event)) {\n const { type, id } = event.data;\n const node = record.mirror.getNode(id);\n\n if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n clickDetector.registerClick(node);\n }\n }\n } catch (e) {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event) {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event,\n) {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n breadcrumb,\n) {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n\nvar NodeType;\n(function (NodeType) {\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\n})(NodeType || (NodeType = {}));\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n 'id',\n 'class',\n 'aria-label',\n 'role',\n 'name',\n 'alt',\n 'title',\n 'data-test-id',\n 'data-testid',\n 'disabled',\n 'aria-disabled',\n 'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n const obj = {};\n for (const key in attributes) {\n if (ATTRIBUTES_TO_RECORD.has(key)) {\n let normalizedKey = key;\n\n if (key === 'data-testid' || key === 'data-test-id') {\n normalizedKey = 'testId';\n }\n\n obj[normalizedKey] = attributes[key];\n }\n }\n\n return obj;\n}\n\nconst handleDomListener = (\n replay,\n) => {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleDom(handlerData);\n\n if (!result) {\n return;\n }\n\n const isClick = handlerData.name === 'click';\n const event = isClick ? (handlerData.event ) : undefined;\n // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n if (\n isClick &&\n replay.clickDetector &&\n event &&\n event.target &&\n !event.altKey &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n handleClick(\n replay.clickDetector,\n result ,\n getClickTargetNode(handlerData.event ) ,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n const nodeId = record.mirror.getId(target);\n const node = nodeId && record.mirror.getNode(nodeId);\n const meta = node && record.mirror.getMeta(node);\n const element = meta && isElement(meta) ? meta : null;\n\n return {\n message,\n data: element\n ? {\n nodeId,\n node: {\n id: nodeId,\n tagName: element.tagName,\n textContent: Array.from(element.childNodes)\n .map((node) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text ).trim())\n .join(''),\n attributes: getAttributesToRecord(element.attributes),\n },\n }\n : {},\n };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n const { target, message } = getDomTarget(handlerData);\n\n return createBreadcrumb({\n category: `ui.${handlerData.name}`,\n ...getBaseDomBreadcrumb(target, message),\n });\n}\n\nfunction getDomTarget(handlerData) {\n const isClick = handlerData.name === 'click';\n\n let message;\n let target = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node) {\n return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n if (!replay.isEnabled()) {\n return;\n }\n\n // Update user activity, but do not restart recording as it can create\n // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n // session with a single \"keydown\" breadcrumb is created)\n replay.updateUserActivity();\n\n const breadcrumb = getKeyboardBreadcrumb(event);\n\n if (!breadcrumb) {\n return;\n }\n\n addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target ) || !key) {\n return null;\n }\n\n // Note: We do not consider shift here, as that means \"uppercase\"\n const hasModifierKey = metaKey || ctrlKey || altKey;\n const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n // Do not capture breadcrumb if only a word key is pressed\n // This could leak e.g. user input\n if (!hasModifierKey && isCharacterKey) {\n return null;\n }\n\n const message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n return createBreadcrumb({\n category: 'ui.keyDown',\n message,\n data: {\n ...baseBreadcrumb.data,\n metaKey,\n shiftKey,\n ctrlKey,\n altKey,\n key,\n },\n });\n}\n\nfunction isInputElement(target) {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n resource: createResourceEntry,\n paint: createPaintEntry,\n // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n navigation: createNavigationEntry,\n};\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n entries,\n) {\n return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n if (!ENTRY_TYPES[entry.entryType]) {\n return null;\n }\n\n return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time) {\n // browserPerformanceTimeOrigin can be undefined if `performance` or\n // `performance.now` doesn't exist, but this is already checked by this integration\n return ((browserPerformanceTimeOrigin || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n const { duration, entryType, name, startTime } = entry;\n\n const start = getAbsoluteTime(startTime);\n return {\n type: entryType,\n name,\n start,\n end: start + duration,\n data: undefined,\n };\n}\n\nfunction createNavigationEntry(entry) {\n const {\n entryType,\n name,\n decodedBodySize,\n duration,\n domComplete,\n encodedBodySize,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n domInteractive,\n loadEventStart,\n loadEventEnd,\n redirectCount,\n startTime,\n transferSize,\n type,\n } = entry;\n\n // Ignore entries with no duration, they do not seem to be useful and cause dupes\n if (duration === 0) {\n return null;\n }\n\n return {\n type: `${entryType}.${type}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(domComplete),\n name,\n data: {\n size: transferSize,\n decodedBodySize,\n encodedBodySize,\n duration,\n domInteractive,\n domContentLoadedEventStart,\n domContentLoadedEventEnd,\n loadEventStart,\n loadEventEnd,\n domComplete,\n redirectCount,\n },\n };\n}\n\nfunction createResourceEntry(\n entry,\n) {\n const {\n entryType,\n initiatorType,\n name,\n responseEnd,\n startTime,\n decodedBodySize,\n encodedBodySize,\n responseStatus,\n transferSize,\n } = entry;\n\n // Core SDK handles these\n if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n return null;\n }\n\n return {\n type: `${entryType}.${initiatorType}`,\n start: getAbsoluteTime(startTime),\n end: getAbsoluteTime(responseEnd),\n name,\n data: {\n size: transferSize,\n statusCode: responseStatus,\n decodedBodySize,\n encodedBodySize,\n },\n };\n}\n\n/**\n * Add a LCP event to the replay based on an LCP metric.\n */\nfunction getLargestContentfulPaint(metric\n\n) {\n const entries = metric.entries;\n const lastEntry = entries[entries.length - 1] ;\n const element = lastEntry ? lastEntry.element : undefined;\n\n const value = metric.value;\n\n const end = getAbsoluteTime(value);\n\n const data = {\n type: 'largest-contentful-paint',\n name: 'largest-contentful-paint',\n start: end,\n end,\n data: {\n value,\n size: value,\n nodeId: element ? record.mirror.getId(element) : undefined,\n },\n };\n\n return data;\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n function addPerformanceEntry(entry) {\n // It is possible for entries to come up multiple times\n if (!replay.performanceEntries.includes(entry)) {\n replay.performanceEntries.push(entry);\n }\n }\n\n function onEntries({ entries }) {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks = [];\n\n (['navigation', 'paint', 'resource'] ).forEach(type => {\n clearCallbacks.push(addPerformanceInstrumentationHandler(type, onEntries));\n });\n\n clearCallbacks.push(\n addLcpInstrumentationHandler(({ metric }) => {\n replay.replayPerformanceEntries.push(getLargestContentfulPaint(metric));\n }),\n );\n\n // A callback to cleanup all handlers\n return () => {\n clearCallbacks.forEach(clearCallback => clearCallback());\n };\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),a=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=function(t,e){for(var i=new n(31),a=0;a<31;++a)i[a]=e+=1<>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,a=0,s=new n(r);a>h]=l}else for(o=new n(i),a=0;a>15-t[a]);return o},g=new t(288);for(c=0;c<144;++c)g[c]=8;for(c=144;c<256;++c)g[c]=9;for(c=256;c<280;++c)g[c]=7;for(c=280;c<288;++c)g[c]=8;var w=new t(32);for(c=0;c<32;++c)w[c]=5;var p=d(g,9,0),y=d(w,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==r||r<0)&&(r=0),(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},A=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},_=function(r,e){for(var i=[],a=0;ad&&(d=o[a].s);var g=new n(d+1),w=x(i[c-1],g,0);if(w>e){a=0;var p=0,y=w-e,m=1<e))break;p+=m-(1<>=y;p>0;){var M=o[a].s;g[M]=0&&p;--a){var E=o[a].s;g[E]==e&&(--g[E],++p)}w=e}return{t:new t(g),l:w}},x=function(t,n,r){return-1==t.s?Math.max(x(t.l,n,r+1),x(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,a=t[0],s=1,o=function(t){e[i++]=t},f=1;f<=r;++f)if(t[f]==a&&f!=r)++s;else{if(!a&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(a),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(a);s=1,a=t[f]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var a=0;a4&&!H[a[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(f,g)+T(h,w)+l,X=T(f,M)+T(h,C)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=p,P=g,Q=y,R=w;for(B=0;B255){A(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;A(r,m,Q[et]),m+=R[et],et>3&&(A(r,m,rt>>5&8191),m+=i[et])}else A(r,m,N[rt]),m+=P[rt]}return A(r,m,N[256]),m+P[256]},U=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,a=0|r.length,s=0;s!=a;){for(var o=Math.min(s+2655,a);s>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(a,s,o,f,u){if(!u&&(u={l:1},s.dictionary)){var c=s.dictionary.subarray(-32768),v=new t(c.length+a.length);v.set(c),v.set(a,c.length),a=v,u.w=c.length}return function(a,s,o,f,u,c){var v=c.z||a.length,d=new t(f+v+5*(1+Math.ceil(v/7e3))+u),g=d.subarray(f,d.length-u),w=c.l,p=7&(c.r||0);if(s){p&&(g[0]=c.r>>3);for(var y=U[s-1],M=y>>13,E=8191&y,z=(1<7e3||q>24576)&&(N>423||!w)){p=C(a,g,0,F,I,S,O,q,G,j-G,p),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(a[j+Q]==a[j+Q-W]){for(var $=0;$Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;Pnt&&(nt=et,K=rt)}}}W+=(J=K)-(K=A[J])&32767}if(R){F[q++]=268435456|h[Q]<<18|l[R];var it=31&h[Q],at=31&l[R];O+=e[it]+i[at],++I[257+it],++S[at],B=j+Q,++L}else F[q++]=a[j],++I[a[j]]}}for(j=Math.max(j,B);j=v&&(g[p/8|0]=w,st=v),p=k(g,p+1,a.subarray(j,st))}c.i=v}return b(d,0,f+m(p)+u)}(a,null==s.level?6:s.level,null==s.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(a.length)))):12+s.mem,o,f,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var a=this.b.length-this.s.z;a&&(this.b.set(n.subarray(0,a),this.s.z),this.s.z=this.b.length,this.p(this.b,!1)),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(a),32768),this.s.z=n.length-a+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,a=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),s=a.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(a,n),O(a,s-8,r.d()),O(a,s-4,e),a}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(r){for(var e=new t(n.length),i=0;i>1)),o=0,f=function(t){s[o++]=t};for(i=0;is.length){var h=new t(o+8+(a-i<<1));h.set(s),s=h}var l=n.charCodeAt(i);l<128||r?f(l):l<2048?(f(192|l>>6),f(128|63&l)):l>55295&&l<57344?(f(240|(l=65536+(1047552&l)|1023&n.charCodeAt(++i))>>18),f(128|l>>12&63),f(128|l>>6&63),f(128|63&l)):(f(224|l>>12),f(128|l>>6&63),f(128|63&l))}return b(s,0,o)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(let r=0,e=t.length;r{this._deflatedData.push(t)},this.stream=new J(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}})),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nfunction logInfo(message, shouldAddBreadcrumb) {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n addLogBreadcrumb(message);\n }\n}\n\n/**\n * Log a message, and add a breadcrumb in the next tick.\n * This is necessary when the breadcrumb may be added before the replay is initialized.\n */\nfunction logInfoNextTick(message, shouldAddBreadcrumb) {\n if (!DEBUG_BUILD) {\n return;\n }\n\n logger.info(message);\n\n if (shouldAddBreadcrumb) {\n // Wait a tick here to avoid race conditions for some initial logs\n // which may be added before replay is initialized\n setTimeout(() => {\n addLogBreadcrumb(message);\n }, 0);\n }\n}\n\nfunction addLogBreadcrumb(message) {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level: 'info',\n message,\n },\n { level: 'info' },\n );\n}\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray {\n /** All the events that are buffered to be sent. */\n\n /** @inheritdoc */\n\n constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n get type() {\n return 'sync';\n }\n\n /** @inheritdoc */\n destroy() {\n this.events = [];\n }\n\n /** @inheritdoc */\n async addEvent(event) {\n const eventSize = JSON.stringify(event).length;\n this._totalSize += eventSize;\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n throw new EventBufferSizeExceededError();\n }\n\n this.events.push(event);\n }\n\n /** @inheritdoc */\n finish() {\n return new Promise(resolve => {\n // Make a copy of the events array reference and immediately clear the\n // events member so that we do not lose new events while uploading\n // attachment.\n const eventsRet = this.events;\n this.clear();\n resolve(JSON.stringify(eventsRet));\n });\n }\n\n /** @inheritdoc */\n clear() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n if (!timestamp) {\n return null;\n }\n\n return timestampToMs(timestamp);\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n constructor(worker) {\n this._worker = worker;\n this._id = 0;\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n // Ensure we only check once\n if (this._ensureReadyPromise) {\n return this._ensureReadyPromise;\n }\n\n this._ensureReadyPromise = new Promise((resolve, reject) => {\n this._worker.addEventListener(\n 'message',\n ({ data }) => {\n if ((data ).success) {\n resolve();\n } else {\n reject();\n }\n },\n { once: true },\n );\n\n this._worker.addEventListener(\n 'error',\n error => {\n reject(error);\n },\n { once: true },\n );\n });\n\n return this._ensureReadyPromise;\n }\n\n /**\n * Destroy the worker.\n */\n destroy() {\n logInfo('[Replay] Destroying compression worker');\n this._worker.terminate();\n }\n\n /**\n * Post message to worker and wait for response before resolving promise.\n */\n postMessage(method, arg) {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }) => {\n const response = data ;\n if (response.method !== method) {\n return;\n }\n\n // There can be multiple listeners for a single method, the id ensures\n // that the response matches the caller.\n if (response.id !== id) {\n return;\n }\n\n // At this point, we'll always want to remove listener regardless of result status\n this._worker.removeEventListener('message', listener);\n\n if (!response.success) {\n // TODO: Do some error handling, not sure what\n DEBUG_BUILD && logger.error('[Replay]', response.response);\n\n reject(new Error('Error in compression worker'));\n return;\n }\n\n resolve(response.response );\n };\n\n // Note: we can't use `once` option because it's possible it needs to\n // listen to multiple messages\n this._worker.addEventListener('message', listener);\n this._worker.postMessage({ id, method, arg });\n });\n }\n\n /** Get the current ID and increment it for the next call. */\n _getAndIncrementId() {\n return this._id++;\n }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker {\n /** @inheritdoc */\n\n constructor(worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n get hasEvents() {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n get type() {\n return 'worker';\n }\n\n /**\n * Ensure the worker is ready (or not).\n * This will either resolve when the worker is ready, or reject if an error occured.\n */\n ensureReady() {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n destroy() {\n this._worker.destroy();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfuly received and processed by worker.\n */\n addEvent(event) {\n const timestamp = timestampToMs(event.timestamp);\n if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n this._earliestTimestamp = timestamp;\n }\n\n const data = JSON.stringify(event);\n this._totalSize += data.length;\n\n if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n return Promise.reject(new EventBufferSizeExceededError());\n }\n\n return this._sendEventToWorker(data);\n }\n\n /**\n * Finish the event buffer and return the compressed data.\n */\n finish() {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n clear() {\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n\n // We do not wait on this, as we assume the order of messages is consistent for the worker\n this._worker.postMessage('clear').then(null, e => {\n DEBUG_BUILD && logger.warn('[Replay] Sending \"clear\" message to worker failed', e);\n });\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n _sendEventToWorker(data) {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n async _finishRequest() {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy {\n\n constructor(worker) {\n this._fallback = new EventBufferArray();\n this._compression = new EventBufferCompressionWorker(worker);\n this._used = this._fallback;\n\n this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n }\n\n /** @inheritdoc */\n get type() {\n return this._used.type;\n }\n\n /** @inheritDoc */\n get hasEvents() {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n get hasCheckout() {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n set hasCheckout(value) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n destroy() {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n clear() {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n getEarliestTimestamp() {\n return this._used.getEarliestTimestamp();\n }\n\n /**\n * Add an event to the event buffer.\n *\n * Returns true if event was successfully added.\n */\n addEvent(event) {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n async finish() {\n // Ensure the worker is loaded, so the sent event is compressed\n await this.ensureWorkerIsLoaded();\n\n return this._used.finish();\n }\n\n /** Ensure the worker has loaded. */\n ensureWorkerIsLoaded() {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n async _ensureWorkerIsLoaded() {\n try {\n await this._compression.ensureReady();\n } catch (error) {\n // If the worker fails to load, we fall back to the simple buffer.\n // Nothing more to do from our side here\n logInfo('[Replay] Failed to load the compression worker, falling back to simple buffer');\n return;\n }\n\n // Now we need to switch over the array buffer to the compression worker\n await this._switchToCompressionWorker();\n }\n\n /** Switch the used buffer to the compression worker. */\n async _switchToCompressionWorker() {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises = [];\n for (const event of events) {\n addEventPromises.push(this._compression.addEvent(event));\n }\n\n this._compression.hasCheckout = hasCheckout;\n\n // We switch over to the new buffer immediately - any further events will be added\n // after the previously buffered ones\n this._used = this._compression;\n\n // Wait for original events to be re-added before resolving\n try {\n await Promise.all(addEventPromises);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to add events when switching buffers.', error);\n }\n }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}) {\n if (\n useCompression &&\n // eslint-disable-next-line no-restricted-globals\n window.Worker\n ) {\n const worker = _loadWorker(customWorkerUrl);\n\n if (worker) {\n return worker;\n }\n }\n\n logInfo('[Replay] Using simple buffer');\n return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n try {\n const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n if (!workerUrl) {\n return;\n }\n\n logInfo(`[Replay] Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n const worker = new Worker(workerUrl);\n return new EventBufferProxy(worker);\n } catch (error) {\n logInfo('[Replay] Failed to create compression worker');\n // Fall back to use simple event buffer array\n }\n}\n\nfunction _getWorkerUrl() {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return e();\n }\n\n return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n if (sampleRate === undefined) {\n return false;\n }\n\n // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n return Math.random() < sampleRate;\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n const now = Date.now();\n const id = session.id || uuid4();\n // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n const started = session.started || now;\n const lastActivity = session.lastActivity || now;\n const segmentId = session.segmentId || 0;\n const sampled = session.sampled;\n const previousSessionId = session.previousSessionId;\n\n return {\n id,\n started,\n lastActivity,\n segmentId,\n sampled,\n previousSessionId,\n };\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch (e) {\n // Ignore potential SecurityError exceptions\n }\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n { sessionSampleRate, allowBuffering, stickySession = false },\n { previousSessionId } = {},\n) {\n const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n const session = makeSession({\n sampled,\n previousSessionId,\n });\n\n if (stickySession) {\n saveSession(session);\n }\n\n return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession(traceInternals) {\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n // This can throw if cookies are disabled\n const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n if (!sessionStringFromStorage) {\n return null;\n }\n\n const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n return makeSession(sessionObj);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n initialTime,\n expiry,\n targetTime = +new Date(),\n) {\n // Always expired if < 0\n if (initialTime === null || expiry === undefined || expiry < 0) {\n return true;\n }\n\n // Never expires if == 0\n if (expiry === 0) {\n return false;\n }\n\n return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n },\n) {\n return (\n // First, check that maximum session length has not been exceeded\n isExpired(session.started, maxReplayDuration, targetTime) ||\n // check that the idle timeout has not been exceeded (i.e. user has\n // performed an action within the last `sessionIdleExpire` ms)\n isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n session,\n { sessionIdleExpire, maxReplayDuration },\n) {\n // If not expired, all good, just keep the session\n if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n return false;\n }\n\n // If we are buffering & haven't ever flushed yet, always continue\n if (session.sampled === 'buffer' && session.segmentId === 0) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n {\n traceInternals,\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }\n\n,\n sessionOptions,\n) {\n const existingSession = sessionOptions.stickySession && fetchSession(traceInternals);\n\n // No session exists yet, just create a new one\n if (!existingSession) {\n logInfoNextTick('[Replay] Creating new session', traceInternals);\n return createSession(sessionOptions, { previousSessionId });\n }\n\n if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n return existingSession;\n }\n\n logInfoNextTick('[Replay] Session in sessionStorage is expired, creating new one...');\n return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n if (!shouldAddEvent(replay, event)) {\n return false;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n _addEvent(replay, event, isCheckout);\n\n return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!shouldAddEvent(replay, event)) {\n return Promise.resolve(null);\n }\n\n return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n replay,\n event,\n isCheckout,\n) {\n if (!replay.eventBuffer) {\n return null;\n }\n\n try {\n if (isCheckout && replay.recordingMode === 'buffer') {\n replay.eventBuffer.clear();\n }\n\n if (isCheckout) {\n replay.eventBuffer.hasCheckout = true;\n }\n\n const replayOptions = replay.getOptions();\n\n const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n if (!eventAfterPossibleCallback) {\n return;\n }\n\n return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);\n } catch (error) {\n const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';\n\n DEBUG_BUILD && logger.error(error);\n await replay.stop({ reason });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('internal_sdk_error', 'replay');\n }\n }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n return false;\n }\n\n const timestampInMs = timestampToMs(event.timestamp);\n\n // Throw out events that happen more than 5 minutes ago. This can happen if\n // page has been left open and idle for a long period of time and user\n // comes back to trigger a new session. The performance entries rely on\n // `performance.timeOrigin`, which is when the page first opened.\n if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n return false;\n }\n\n // Throw out events that are +60min from the initial timestamp\n if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n logInfo(\n `[Replay] Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`,\n replay.getOptions()._experiments.traceInternals,\n );\n return false;\n }\n\n return true;\n}\n\nfunction maybeApplyCallback(\n event,\n callback,\n) {\n try {\n if (typeof callback === 'function' && isCustomEvent(event)) {\n return callback(event);\n }\n } catch (error) {\n DEBUG_BUILD &&\n logger.error('[Replay] An error occured in the `beforeAddRecordingEvent` callback, skipping the event...', error);\n return null;\n }\n\n return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n // Custom transports may still be returning `Promise`, which means we cannot expect the status code to be available there\n // TODO (v8): remove this check as it will no longer be necessary\n const enforceStatusCode = isBaseTransportSend();\n\n return (event, sendResponse) => {\n if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n return;\n }\n\n const statusCode = sendResponse && sendResponse.statusCode;\n\n // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n // If we do use the base transport, we skip if we encountered an non-OK status code\n if (enforceStatusCode && (!statusCode || statusCode < 200 || statusCode >= 300)) {\n return;\n }\n\n if (isTransactionEvent(event)) {\n handleTransactionEvent(replay, event);\n return;\n }\n\n handleErrorEvent(replay, event);\n };\n}\n\nfunction handleTransactionEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Collect traceIds in _context regardless of `recordingMode`\n // In error mode, _context gets cleared on every checkout\n // We limit to max. 100 transactions linked\n if (event.contexts && event.contexts.trace && event.contexts.trace.trace_id && replayContext.traceIds.size < 100) {\n replayContext.traceIds.add(event.contexts.trace.trace_id );\n }\n}\n\nfunction handleErrorEvent(replay, event) {\n const replayContext = replay.getContext();\n\n // Add error to list of errorIds of replay. This is ok to do even if not\n // sampled because context will get reset at next checkout.\n // XXX: There is also a race condition where it's possible to capture an\n // error to Sentry before Replay SDK has loaded, but response returns after\n // it was loaded, and this gets called.\n // We limit to max. 100 errors linked\n if (event.event_id && replayContext.errorIds.size < 100) {\n replayContext.errorIds.add(event.event_id);\n }\n\n // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n // Need to be very careful that this does not cause an infinite loop\n if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n return;\n }\n\n const { beforeErrorSampling } = replay.getOptions();\n if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n return;\n }\n\n setTimeout(() => {\n // Capture current event buffer as new replay\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.sendBufferedReplayOrFlush();\n });\n}\n\nfunction isBaseTransportSend() {\n const client = getClient();\n if (!client) {\n return false;\n }\n\n const transport = client.getTransport();\n if (!transport) {\n return false;\n }\n\n return (\n (transport.send ).__sentry__baseTransport__ || false\n );\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n return (event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay, event) {\n const exceptionValue = event.exception && event.exception.values && event.exception.values[0].value;\n if (typeof exceptionValue !== 'string') {\n return;\n }\n\n if (\n // Only matches errors in production builds of react-dom\n // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n exceptionValue.match(/reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=(418|419|422|423|425)/) ||\n // Development builds of react-dom\n // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n ) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.hydrate-error',\n });\n addBreadcrumbEvent(replay, breadcrumb);\n }\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n if (event.type || !event.exception || !event.exception.values || !event.exception.values.length) {\n return false;\n }\n\n // @ts-expect-error this may be set by rrweb when it finds errors\n if (hint.originalException && hint.originalException.__rrweb__) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n replay.triggerUserActivity();\n replay.addUpdate(() => {\n if (!event.timestamp) {\n // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n // Return true here so that we don't flush\n return true;\n }\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: event.timestamp * 1000,\n data: {\n timestamp: event.timestamp,\n tag: 'breadcrumb',\n payload: {\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n });\n\n return false;\n });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `hanldleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n if (replay.recordingMode !== 'buffer') {\n return false;\n }\n\n // ignore this error because otherwise we could loop indefinitely with\n // trying to capture replay and failing\n if (event.message === UNABLE_TO_SEND_REPLAY) {\n return false;\n }\n\n // Require the event to be an error event & to have an exception\n if (!event.exception || event.type) {\n return false;\n }\n\n return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(\n replay,\n includeAfterSendEventHandling = false,\n) {\n const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n return Object.assign(\n (event, hint) => {\n // Do nothing if replay has been disabled\n if (!replay.isEnabled()) {\n return event;\n }\n\n if (isReplayEvent(event)) {\n // Replays have separate set of breadcrumbs, do not include breadcrumbs\n // from core SDK\n delete event.breadcrumbs;\n return event;\n }\n\n // We only want to handle errors, transactions, and feedbacks, nothing else\n if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n return event;\n }\n\n // Ensure we do not add replay_id if the session is expired\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (!isSessionActive) {\n return event;\n }\n\n if (isFeedbackEvent(event)) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n event.contexts.feedback.replay_id = replay.getSessionId();\n // Add a replay breadcrumb for this piece of feedback\n addFeedbackBreadcrumb(replay, event);\n return event;\n }\n\n // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n DEBUG_BUILD && logger.log('[Replay] Ignoring error from rrweb internals', event);\n return null;\n }\n\n // When in buffer mode, we decide to sample here.\n // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n // And convert the buffer session to a full session\n const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n // Tag errors if it has been sampled in buffer mode, or if it is session mode\n // Only tag transactions if in session mode\n const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n if (shouldTagReplayId) {\n event.tags = { ...event.tags, replayId: replay.getSessionId() };\n }\n\n // In cases where a custom client is used that does not support the new hooks (yet),\n // we manually call this hook method here\n if (afterSendHandler) {\n // Pretend the error had a 200 response so we always capture it\n afterSendHandler(event, { statusCode: 200 });\n }\n\n return event;\n },\n { id: 'Replay' },\n );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n replay,\n entries,\n) {\n return entries.map(({ type, start, end, name, data }) => {\n const response = replay.throttledAddEvent({\n type: EventType.Custom,\n timestamp: start,\n data: {\n tag: 'performanceSpan',\n payload: {\n op: type,\n description: name,\n startTimestamp: start,\n endTimestamp: end,\n data,\n },\n },\n });\n\n // If response is a string, it means its either THROTTLED or SKIPPED\n return typeof response === 'string' ? Promise.resolve(null) : response;\n });\n}\n\nfunction handleHistory(handlerData) {\n const { from, to } = handlerData;\n\n const now = Date.now() / 1000;\n\n return {\n type: 'navigation.push',\n start: now,\n end: now,\n name: to,\n data: {\n previous: from,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleHistory(handlerData);\n\n if (result === null) {\n return;\n }\n\n // Need to collect visited URLs\n replay.getContext().urls.push(result.name);\n replay.triggerUserActivity();\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning false to flush\n return false;\n });\n };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n // If we enabled the `traceInternals` experiment, we want to trace everything\n if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n return false;\n }\n\n return isSentryRequestUrl(url, getClient());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n replay,\n result,\n) {\n if (!replay.isEnabled()) {\n return;\n }\n\n if (result === null) {\n return;\n }\n\n if (shouldFilterRequest(replay, result.name)) {\n return;\n }\n\n replay.addUpdate(() => {\n createPerformanceSpans(replay, [result]);\n // Returning true will cause `addUpdate` to not flush\n // We do not want network requests to cause a flush. This will prevent\n // recurring/polling requests from keeping the replay session alive.\n return true;\n });\n}\n\n/** only exported for tests */\nfunction handleFetch(handlerData) {\n const { startTimestamp, endTimestamp, fetchData, response } = handlerData;\n\n if (!endTimestamp) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url } = fetchData;\n\n return {\n type: 'resource.fetch',\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: {\n method,\n statusCode: response ? (response ).status : undefined,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nfunction handleFetchSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleFetch(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** only exported for tests */\nfunction handleXhr(handlerData) {\n const { startTimestamp, endTimestamp, xhr } = handlerData;\n\n const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return null;\n }\n\n // This is only used as a fallback, so we know the body sizes are never set here\n const { method, url, status_code: statusCode } = sentryXhrData;\n\n if (url === undefined) {\n return null;\n }\n\n return {\n type: 'resource.xhr',\n name: url,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n data: {\n method,\n statusCode,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addXhrInstrumentationHandler(listener)`.\n */\nfunction handleXhrSpanListener(replay) {\n return (handlerData) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleXhr(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n\n/** Get the size of a body. */\nfunction getBodySize(\n body,\n textEncoder,\n) {\n if (!body) {\n return undefined;\n }\n\n try {\n if (typeof body === 'string') {\n return textEncoder.encode(body).length;\n }\n\n if (body instanceof URLSearchParams) {\n return textEncoder.encode(body.toString()).length;\n }\n\n if (body instanceof FormData) {\n const formDataStr = _serializeFormData(body);\n return textEncoder.encode(formDataStr).length;\n }\n\n if (body instanceof Blob) {\n return body.size;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n // Currently unhandled types: ArrayBufferView, ReadableStream\n } catch (e) {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nfunction parseContentLengthHeader(header) {\n if (!header) {\n return undefined;\n }\n\n const size = parseInt(header, 10);\n return isNaN(size) ? undefined : size;\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof URLSearchParams) {\n return [body.toString()];\n }\n\n if (body instanceof FormData) {\n return [_serializeFormData(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (e2) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n info,\n warning,\n) {\n if (!info) {\n return {\n headers: {},\n size: undefined,\n _meta: {\n warnings: [warning],\n },\n };\n }\n\n const newMeta = { ...info._meta };\n const existingWarnings = newMeta.warnings || [];\n newMeta.warnings = [...existingWarnings, warning];\n\n info._meta = newMeta;\n return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n type,\n data,\n) {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result = {\n type,\n start: startTimestamp / 1000,\n end: endTimestamp / 1000,\n name: url,\n data: dropUndefinedKeys({\n method,\n statusCode,\n request,\n response,\n }),\n };\n\n return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n return {\n headers: {},\n size: bodySize,\n _meta: {\n warnings: ['URL_SKIPPED'],\n },\n };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n headers,\n bodySize,\n body,\n) {\n if (!bodySize && Object.keys(headers).length === 0) {\n return undefined;\n }\n\n if (!bodySize) {\n return {\n headers,\n };\n }\n\n if (!body) {\n return {\n headers,\n size: bodySize,\n };\n }\n\n const info = {\n headers,\n size: bodySize,\n };\n\n const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n info.body = normalizedBody;\n if (warnings && warnings.length > 0) {\n info._meta = {\n warnings,\n };\n }\n\n return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n return Object.keys(headers).reduce((filteredHeaders, key) => {\n const normalizedKey = key.toLowerCase();\n // Avoid putting empty strings into the headers\n if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n filteredHeaders[normalizedKey] = headers[key];\n }\n return filteredHeaders;\n }, {});\n}\n\nfunction _serializeFormData(formData) {\n // This is a bit simplified, but gives us a decent estimate\n // This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'\n // @ts-expect-error passing FormData to URLSearchParams actually works\n return new URLSearchParams(formData).toString();\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n if (!body || typeof body !== 'string') {\n return {\n body,\n };\n }\n\n const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n const isProbablyJson = _strIsProbablyJson(body);\n\n if (exceedsSizeLimit) {\n const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n if (isProbablyJson) {\n return {\n body: truncatedBody,\n warnings: ['MAYBE_JSON_TRUNCATED'],\n };\n }\n\n return {\n body: `${truncatedBody}…`,\n warnings: ['TEXT_TRUNCATED'],\n };\n }\n\n if (isProbablyJson) {\n try {\n const jsonBody = JSON.parse(body);\n return {\n body: jsonBody,\n };\n } catch (e3) {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str) {\n const first = str[0];\n const last = str[str.length - 1];\n\n // Simple check: If this does not start & end with {} or [], it's not JSON\n return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n // Short circuit for common cases:\n if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n return url;\n }\n const fixedUrl = new URL(url, baseURI);\n\n // If these do not match, we are not dealing with a relative URL, so just return it\n if (fixedUrl.origin !== new URL(baseURI).origin) {\n return url;\n }\n\n const fullUrl = fixedUrl.href;\n\n // Remove trailing slashes, if they don't match the original URL\n if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n return fullUrl.slice(0, -1);\n }\n\n return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n breadcrumb,\n hint,\n options\n\n,\n) {\n try {\n const data = await _prepareFetchData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture fetch breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body, options.textEncoder);\n\n const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nasync function _prepareFetchData(\n breadcrumb,\n hint,\n options\n\n,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n const captureDetails =\n urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n const request = captureDetails\n ? _getRequestInfo(options, hint.input, requestBodySize)\n : buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n}\n\nfunction _getRequestInfo(\n { networkCaptureBodies, networkRequestHeaders },\n input,\n requestBodySize,\n) {\n const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n if (!networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n }\n\n // We only want to transmit string or string-like bodies\n const requestBody = _getFetchRequestArgBody(input);\n const [bodyStr, warning] = getBodyString(requestBody);\n const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n if (warning) {\n return mergeWarning(data, warning);\n }\n\n return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n captureDetails,\n {\n networkCaptureBodies,\n textEncoder,\n networkResponseHeaders,\n }\n\n,\n response,\n responseBodySize,\n) {\n if (!captureDetails && responseBodySize !== undefined) {\n return buildSkippedNetworkRequestOrResponse(responseBodySize);\n }\n\n const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n\n const [bodyText, warning] = await _parseFetchResponseBody(response);\n const result = getResponseData(bodyText, {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n });\n\n if (warning) {\n return mergeWarning(result, warning);\n }\n\n return result;\n}\n\nfunction getResponseData(\n bodyText,\n {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n }\n\n,\n) {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined\n ? getBodySize(bodyText, textEncoder)\n : responseBodySize;\n\n if (!captureDetails) {\n return buildSkippedNetworkRequestOrResponse(size);\n }\n\n if (networkCaptureBodies) {\n return buildNetworkRequestOrResponse(headers, size, bodyText);\n }\n\n return buildNetworkRequestOrResponse(headers, size, undefined);\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize response body', error);\n // fallback\n return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n }\n}\n\nasync function _parseFetchResponseBody(response) {\n const res = _tryCloneResponse(response);\n\n if (!res) {\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n try {\n const text = await _tryGetResponseText(res);\n return [text];\n } catch (error) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to get text body from response', error);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n}\n\nfunction _getFetchRequestArgBody(fetchArgs = []) {\n // We only support getting the body from the fetch options\n if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n return undefined;\n }\n\n return (fetchArgs[1] ).body;\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n const allHeaders = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) ;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input,\n allowedHeaders,\n) {\n if (!input) {\n return {};\n }\n\n const headers = input.headers;\n\n if (!headers) {\n return {};\n }\n\n if (headers instanceof Headers) {\n return getAllHeaders(headers, allowedHeaders);\n }\n\n // We do not support this, as it is not really documented (anymore?)\n if (Array.isArray(headers)) {\n return {};\n }\n\n return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n try {\n // We have to clone this, as the body can only be read once\n return response.clone();\n } catch (error) {\n // this can throw if the response was already consumed before\n DEBUG_BUILD && logger.warn('[Replay] Failed to clone response body', error);\n }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n _getResponseText(response)\n .then(\n txt => resolve(txt),\n reason => reject(reason),\n )\n .finally(() => clearTimeout(timeout));\n });\n}\n\nasync function _getResponseText(response) {\n // Force this to be a promise, just to be safe\n // eslint-disable-next-line no-return-await\n return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n breadcrumb,\n hint,\n options,\n) {\n try {\n const data = _prepareXhrData(breadcrumb, hint, options);\n\n // Create a replay performance entry from this breadcrumb\n const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n addNetworkBreadcrumb(options.replay, result);\n } catch (error) {\n DEBUG_BUILD && logger.error('[Replay] Failed to capture xhr breadcrumb', error);\n }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n breadcrumb,\n hint,\n options,\n) {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input, options.textEncoder);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType, options.textEncoder);\n\n if (reqSize !== undefined) {\n breadcrumb.data.request_body_size = reqSize;\n }\n if (resSize !== undefined) {\n breadcrumb.data.response_body_size = resSize;\n }\n}\n\nfunction _prepareXhrData(\n breadcrumb,\n hint,\n options,\n) {\n const now = Date.now();\n const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n const {\n url,\n method,\n status_code: statusCode = 0,\n request_body_size: requestBodySize,\n response_body_size: responseBodySize,\n } = breadcrumb.data;\n\n if (!url) {\n return null;\n }\n\n if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request,\n response,\n };\n }\n\n const xhrInfo = xhr[SENTRY_XHR_DATA_KEY];\n const networkRequestHeaders = xhrInfo\n ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n : {};\n const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n const [requestBody, requestWarning] = options.networkCaptureBodies ? getBodyString(input) : [undefined];\n const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n return {\n startTimestamp,\n endTimestamp,\n url,\n method,\n statusCode,\n request: requestWarning ? mergeWarning(request, requestWarning) : request,\n response: responseWarning ? mergeWarning(response, responseWarning) : response,\n };\n}\n\nfunction getResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ');\n acc[key.toLowerCase()] = value;\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors = [];\n\n try {\n return [xhr.responseText];\n } catch (e) {\n errors.push(e);\n }\n\n // Try to manually parse the response body, if responseText fails\n try {\n return _parseXhrResponse(xhr.response, xhr.responseType);\n } catch (e) {\n errors.push(e);\n }\n\n DEBUG_BUILD && logger.warn('[Replay] Failed to get xhr response body', ...errors);\n\n return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n body,\n responseType,\n) {\n try {\n if (typeof body === 'string') {\n return [body];\n }\n\n if (body instanceof Document) {\n return [body.body.outerHTML];\n }\n\n if (responseType === 'json' && body && typeof body === 'object') {\n return [JSON.stringify(body)];\n }\n\n if (!body) {\n return [undefined];\n }\n } catch (e2) {\n DEBUG_BUILD && logger.warn('[Replay] Failed to serialize body', body);\n return [undefined, 'BODY_PARSE_ERROR'];\n }\n\n DEBUG_BUILD && logger.info('[Replay] Skipping network body because of body type', body);\n\n return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n body,\n responseType,\n textEncoder,\n) {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr, textEncoder);\n } catch (e3) {\n return undefined;\n }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n * (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n const client = getClient();\n\n try {\n const textEncoder = new TextEncoder();\n\n const {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options = {\n replay,\n textEncoder,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client && client.on) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n } else {\n // Fallback behavior\n addFetchInstrumentationHandler(handleFetchSpanListener(replay));\n addXhrInstrumentationHandler(handleXhrSpanListener(replay));\n }\n } catch (e2) {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n options,\n breadcrumb,\n hint,\n) {\n if (!breadcrumb.data) {\n return;\n }\n\n try {\n if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichXhrBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n }\n\n if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n // So any async mutations to it will not be reflected in the final breadcrumb\n enrichFetchBreadcrumb(breadcrumb, hint, options);\n\n // This call should not reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n }\n } catch (e) {\n DEBUG_BUILD && logger.warn('Error when enriching network breadcrumb');\n }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint) {\n return hint && hint.response;\n}\n\nlet _LAST_BREADCRUMB = null;\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n return !!breadcrumb.category;\n}\n\nconst handleScopeListener =\n (replay) =>\n (scope) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleScope(scope);\n\n if (!result) {\n return;\n }\n\n addBreadcrumbEvent(replay, result);\n };\n\n/**\n * An event handler to handle scope changes.\n */\nfunction handleScope(scope) {\n // TODO (v8): Remove this guard. This was put in place because we introduced\n // Scope.getLastBreadcrumb mid-v7 which caused incompatibilities with older SDKs.\n // For now, we'll just return null if the method doesn't exist but we should eventually\n // get rid of this guard.\n const newBreadcrumb = scope.getLastBreadcrumb && scope.getLastBreadcrumb();\n\n // Listener can be called when breadcrumbs have not changed, so we store the\n // reference to the last crumb and only return a crumb if it has changed\n if (_LAST_BREADCRUMB === newBreadcrumb || !newBreadcrumb) {\n return null;\n }\n\n _LAST_BREADCRUMB = newBreadcrumb;\n\n if (\n !isBreadcrumbWithCategory(newBreadcrumb) ||\n ['fetch', 'xhr', 'sentry.event', 'sentry.transaction'].includes(newBreadcrumb.category) ||\n newBreadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (newBreadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(newBreadcrumb);\n }\n\n return createBreadcrumb(newBreadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n breadcrumb,\n) {\n const args = breadcrumb.data && breadcrumb.data.arguments;\n\n if (!Array.isArray(args) || args.length === 0) {\n return createBreadcrumb(breadcrumb);\n }\n\n let isTruncated = false;\n\n // Avoid giant args captures\n const normalizedArgs = args.map(arg => {\n if (!arg) {\n return arg;\n }\n if (typeof arg === 'string') {\n if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n\n return arg;\n }\n if (typeof arg === 'object') {\n try {\n const normalizedArg = normalize(arg, 7);\n const stringified = JSON.stringify(normalizedArg);\n if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n isTruncated = true;\n // We use the pretty printed JSON string here as a base\n return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n }\n return normalizedArg;\n } catch (e) {\n // fall back to default\n }\n }\n\n return arg;\n });\n\n return createBreadcrumb({\n ...breadcrumb,\n data: {\n ...breadcrumb.data,\n arguments: normalizedArgs,\n ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n },\n });\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n // Listeners from core SDK //\n const scope = getCurrentScope();\n const client = getClient();\n\n scope.addScopeListener(handleScopeListener(replay));\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleNetworkBreadcrumbs(replay);\n\n // Tag all (non replay) events that get sent to Sentry with the current\n // replay ID so that we can reference them later in the UI\n const eventProcessor = handleGlobalEventListener(replay, !hasHooks(client));\n if (client && client.addEventProcessor) {\n client.addEventProcessor(eventProcessor);\n } else {\n addEventProcessor(eventProcessor);\n }\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (hasHooks(client)) {\n client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n client.on('afterSendEvent', handleAfterSendEvent(replay));\n client.on('createDsc', (dsc) => {\n const replayId = replay.getSessionId();\n // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n // Ensure to check that the session is still active - it could have expired in the meanwhile\n const isSessionActive = replay.checkAndHandleExpiredSession();\n if (isSessionActive) {\n dsc.replay_id = replayId;\n }\n }\n });\n\n client.on('startTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We may be missing the initial startTransaction due to timing issues,\n // so we capture it on finish again.\n client.on('finishTransaction', transaction => {\n replay.lastTransaction = transaction;\n });\n\n // We want to flush replay\n client.on('beforeSendFeedback', (feedbackEvent, options) => {\n const replayId = replay.getSessionId();\n if (options && options.includeReplay && replay.isEnabled() && replayId) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n replay.flush();\n if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasHooks(client) {\n return !!(client && client.on);\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n try {\n return Promise.all(\n createPerformanceSpans(replay, [\n // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n createMemoryEntry(WINDOW.performance.memory),\n ]),\n );\n } catch (error) {\n // Do nothing\n return [];\n }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n // we don't want to use `getAbsoluteTime` because it adds the event time to the\n // time origin, so we get the current timestamp instead\n const time = Date.now() / 1000;\n return {\n type: 'memory',\n name: 'memory',\n start: time,\n end: time,\n data: {\n memory: {\n jsHeapSizeLimit,\n totalJSHeapSize,\n usedJSHeapSize,\n },\n },\n };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n * debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n * was already invoked in the meantime, return @param func's return value.\n * The debounced function has two additional properties:\n * - `flush`: Invokes the debounced function immediately and returns its return value\n * - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n let callbackReturnValue;\n\n let timerId;\n let maxTimerId;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc() {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers() {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush() {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced() {\n if (timerId) {\n clearTimeout(timerId);\n }\n timerId = setTimeout(invokeFunc, wait);\n\n if (maxWait && maxTimerId === undefined) {\n maxTimerId = setTimeout(invokeFunc, maxWait);\n }\n\n return callbackReturnValue;\n }\n\n debounced.cancel = cancelTimers;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n let hadFirstEvent = false;\n\n return (event, _isCheckout) => {\n // If this is false, it means session is expired, create and a new session and wait for checkout\n if (!replay.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.warn('[Replay] Received replay event after session expired.');\n\n return;\n }\n\n // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n // We also want to treat the first event as a checkout, so we handle this specifically here\n const isCheckout = _isCheckout || !hadFirstEvent;\n hadFirstEvent = true;\n\n if (replay.clickDetector) {\n updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n }\n\n // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n replay.addUpdate(() => {\n // The session is always started immediately on pageload/init, but for\n // error-only replays, it should reflect the most recent checkout\n // when an error occurs. Clear any state that happens before this current\n // checkout. This needs to happen before `addEvent()` which updates state\n // dependent on this reset.\n if (replay.recordingMode === 'buffer' && isCheckout) {\n replay.setInitialState();\n }\n\n // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n // Skip all further steps\n if (!addEventSync(replay, event, isCheckout)) {\n // Return true to skip scheduling a debounced flush\n return true;\n }\n\n // Different behavior for full snapshots (type=2), ignore other event types\n // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n if (!isCheckout) {\n return false;\n }\n\n // Additionally, create a meta event that will capture certain SDK settings.\n // In order to handle buffer mode, this needs to either be done when we\n // receive checkout events or at flush time.\n //\n // `isCheckout` is always true, but want to be explicit that it should\n // only be added for checkouts\n addSettingsEvent(replay, isCheckout);\n\n // If there is a previousSessionId after a full snapshot occurs, then\n // the replay session was started due to session expiration. The new session\n // is started before triggering a new checkout and contains the id\n // of the previous session. Do not immediately flush in this case\n // to avoid capturing only the checkout and instead the replay will\n // be captured if they perform any follow-up actions.\n if (replay.session && replay.session.previousSessionId) {\n return true;\n }\n\n // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n // this should usually be the timestamp of the checkout event, but to be safe...\n if (replay.recordingMode === 'buffer' && replay.session && replay.eventBuffer) {\n const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n if (earliestEvent) {\n logInfo(\n `[Replay] Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`,\n replay.getOptions()._experiments.traceInternals,\n );\n\n replay.session.started = earliestEvent;\n\n if (replay.getOptions().stickySession) {\n saveSession(replay.session);\n }\n }\n }\n\n if (replay.recordingMode === 'session') {\n // If the full snapshot is due to an initial load, we will not have\n // a previous session ID. In this case, we want to buffer events\n // for a set amount of time before flushing. This can help avoid\n // capturing replays of users that immediately close the window.\n\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void replay.flush();\n }\n\n return true;\n });\n };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n const options = replay.getOptions();\n return {\n type: EventType.Custom,\n timestamp: Date.now(),\n data: {\n tag: 'options',\n payload: {\n sessionSampleRate: options.sessionSampleRate,\n errorSampleRate: options.errorSampleRate,\n useCompressionOption: options.useCompression,\n blockAllMedia: options.blockAllMedia,\n maskAllText: options.maskAllText,\n maskAllInputs: options.maskAllInputs,\n useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n networkCaptureBodies: options.networkCaptureBodies,\n networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n },\n },\n };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n // Only need to add this event when sending the first segment\n if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n return;\n }\n\n addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n replayEvent,\n recordingData,\n dsn,\n tunnel,\n) {\n return createEnvelope(\n createEventEnvelopeHeaders(replayEvent, getSdkMetadataForEnvelopeHeader(replayEvent), tunnel, dsn),\n [\n [{ type: 'replay_event' }, replayEvent],\n [\n {\n type: 'replay_recording',\n // If string then we need to encode to UTF8, otherwise will have\n // wrong size. TextEncoder has similar browser support to\n // MutationObserver, although it does not accept IE11.\n length:\n typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n },\n recordingData,\n ],\n ],\n );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n recordingData,\n headers,\n}\n\n) {\n let payloadWithSequence;\n\n // XXX: newline is needed to separate sequence id from events\n const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n if (typeof recordingData === 'string') {\n payloadWithSequence = `${replayHeaders}${recordingData}`;\n } else {\n const enc = new TextEncoder();\n // XXX: newline is needed to separate sequence id from events\n const sequence = enc.encode(replayHeaders);\n // Merge the two Uint8Arrays\n payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n payloadWithSequence.set(sequence);\n payloadWithSequence.set(recordingData, sequence.length);\n }\n\n return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}\n\n) {\n const integrations =\n typeof client._integrations === 'object' && client._integrations !== null && !Array.isArray(client._integrations)\n ? Object.keys(client._integrations)\n : undefined;\n\n const eventHint = { event_id, integrations };\n\n if (client.emit) {\n client.emit('preprocessEvent', event, eventHint);\n }\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) ;\n\n // If e.g. a global event processor returned null\n if (!preparedEvent) {\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n const metadata = client.getSdkMetadata && client.getSdkMetadata();\n const { name, version } = (metadata && metadata.sdk) || {};\n\n preparedEvent.sdk = {\n ...preparedEvent.sdk,\n name: name || 'sentry.javascript.unknown',\n version: version || '0.0.0',\n };\n\n return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}) {\n const preparedRecordingData = prepareRecordingData({\n recordingData,\n headers: {\n segment_id,\n },\n });\n\n const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n const client = getClient();\n const scope = getCurrentScope();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn || !session.sampled) {\n return;\n }\n\n const baseEvent = {\n type: REPLAY_EVENT_NAME,\n replay_start_timestamp: initialTimestamp / 1000,\n timestamp: timestamp / 1000,\n error_ids: errorIds,\n trace_ids: traceIds,\n urls,\n replay_id: replayId,\n segment_id,\n replay_type: session.sampled,\n };\n\n const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n if (!replayEvent) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'replay', baseEvent);\n logInfo('An event processor returned `null`, will not send event.');\n return;\n }\n\n /*\n For reference, the fully built event looks something like this:\n {\n \"type\": \"replay_event\",\n \"timestamp\": 1670837008.634,\n \"error_ids\": [\n \"errorId\"\n ],\n \"trace_ids\": [\n \"traceId\"\n ],\n \"urls\": [\n \"https://example.com\"\n ],\n \"replay_id\": \"eventId\",\n \"segment_id\": 3,\n \"replay_type\": \"error\",\n \"platform\": \"javascript\",\n \"event_id\": \"eventId\",\n \"environment\": \"production\",\n \"sdk\": {\n \"integrations\": [\n \"BrowserTracing\",\n \"Replay\"\n ],\n \"name\": \"sentry.javascript.browser\",\n \"version\": \"7.25.0\"\n },\n \"sdkProcessingMetadata\": {},\n \"contexts\": {\n },\n }\n */\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete replayEvent.sdkProcessingMetadata;\n\n const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n if (!response) {\n return response;\n }\n\n // If the status code is invalid, we want to immediately stop & not retry\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new TransportStatusCodeError(response.statusCode);\n }\n\n const rateLimits = updateRateLimits({}, response);\n if (isRateLimited(rateLimits, 'replay')) {\n throw new RateLimitError(rateLimits);\n }\n\n return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n constructor(statusCode) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n constructor(rateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n replayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n) {\n const { recordingData, options } = replayData;\n\n // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n if (!recordingData.length) {\n return;\n }\n\n try {\n await sendReplayRequest(replayData);\n return true;\n } catch (err) {\n if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n throw err;\n }\n\n // Capture error for every failed replay\n setContext('Replays', {\n _retryCount: retryConfig.count,\n });\n\n if (DEBUG_BUILD && options._experiments && options._experiments.captureExceptions) {\n captureException(err);\n }\n\n // If an error happened here, it's likely that uploading the attachment\n // failed, we'll can retry with the same events payload\n if (retryConfig.count >= RETRY_MAX_COUNT) {\n const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n\n throw error;\n }\n\n // will retry in intervals of 5, 10, 30\n retryConfig.interval *= ++retryConfig.count;\n\n return new Promise((resolve, reject) => {\n setTimeout(async () => {\n try {\n await sendReplay(replayData, retryConfig);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n }, retryConfig.interval);\n });\n }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n fn,\n maxCount,\n durationSeconds,\n) {\n const counter = new Map();\n\n const _cleanup = (now) => {\n const threshold = now - durationSeconds;\n counter.forEach((_value, key) => {\n if (key < threshold) {\n counter.delete(key);\n }\n });\n };\n\n const _getTotalCount = () => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest) => {\n // Date in second-precision, which we use as basis for the throttling\n const now = Math.floor(Date.now() / 1000);\n\n // First, make sure to delete any old entries\n _cleanup(now);\n\n // If already over limit, do nothing\n if (_getTotalCount() >= maxCount) {\n const wasThrottled = isThrottled;\n isThrottled = true;\n return wasThrottled ? SKIPPED : THROTTLED;\n }\n\n isThrottled = false;\n const count = counter.get(now) || 0;\n counter.set(now, count + 1);\n\n return fn(...rest);\n };\n}\n\n/* eslint-disable max-lines */ // TODO: We might want to split this file up\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer {\n\n /**\n * Recording can happen in one of three modes:\n * - session: Record the whole session, sending it continuously\n * - buffer: Always keep the last 60s of recording, requires:\n * - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n * - or calling `flush()` to send the replay\n */\n\n /**\n * The current or last active transcation.\n * This is only available when performance is enabled.\n */\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n\n /**\n * Is the integration currently active?\n */\n\n /**\n * Paused is a state where:\n * - DOM Recording is not listening at all\n * - Nothing will be added to event buffer (e.g. core SDK events)\n */\n\n /**\n * Have we attached listeners to the core SDK?\n * Note we have to track this as there is no way to remove instrumentation handlers.\n */\n\n /**\n * Function to stop recording\n */\n\n constructor({\n options,\n recordingOptions,\n }\n\n) {ReplayContainer.prototype.__init.call(this);ReplayContainer.prototype.__init2.call(this);ReplayContainer.prototype.__init3.call(this);ReplayContainer.prototype.__init4.call(this);ReplayContainer.prototype.__init5.call(this);ReplayContainer.prototype.__init6.call(this);\n this.eventBuffer = null;\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n this.recordingMode = 'session';\n this.timeouts = {\n sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n } ;\n this._lastActivity = Date.now();\n this._isEnabled = false;\n this._isPaused = false;\n this._hasInitializedCoreListeners = false;\n this._context = {\n errorIds: new Set(),\n traceIds: new Set(),\n urls: [],\n initialTimestamp: Date.now(),\n initialUrl: '',\n };\n\n this._recordingOptions = recordingOptions;\n this._options = options;\n\n this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n maxWait: this._options.flushMaxDelay,\n });\n\n this._throttledAddEvent = throttle(\n (event, isCheckout) => addEvent(this, event, isCheckout),\n // Max 300 events...\n 300,\n // ... per 5s\n 5,\n );\n\n const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n const slowClickConfig = slowClickTimeout\n ? {\n threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n timeout: slowClickTimeout,\n scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n }\n : undefined;\n\n if (slowClickConfig) {\n this.clickDetector = new ClickDetector(this, slowClickConfig);\n }\n }\n\n /** Get the event context. */\n getContext() {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n isEnabled() {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n isPaused() {\n return this._isPaused;\n }\n\n /** Get the replay integration options. */\n getOptions() {\n return this._options;\n }\n\n /**\n * Initializes the plugin based on sampling configuration. Should not be\n * called outside of constructor.\n */\n initializeSampling(previousSessionId) {\n const { errorSampleRate, sessionSampleRate } = this._options;\n\n // If neither sample rate is > 0, then do nothing - user will need to call one of\n // `start()` or `startBuffering` themselves.\n if (errorSampleRate <= 0 && sessionSampleRate <= 0) {\n return;\n }\n\n // Otherwise if there is _any_ sample rate set, try to load an existing\n // session, or create a new one.\n this._initializeSessionForSampling(previousSessionId);\n\n if (!this.session) {\n // This should not happen, something wrong has occurred\n this._handleException(new Error('Unable to initialize and create session'));\n return;\n }\n\n if (this.session.sampled === false) {\n // This should only occur if `errorSampleRate` is 0 and was unsampled for\n // session-based replay. In this case there is nothing to do.\n return;\n }\n\n // If segmentId > 0, it means we've previously already captured this session\n // In this case, we still want to continue in `session` recording mode\n this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n logInfoNextTick(\n `[Replay] Starting replay in ${this.recordingMode} mode`,\n this._options._experiments.traceInternals,\n );\n\n this._initializeRecording();\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * _performanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (this._isEnabled && this.recordingMode === 'session') {\n throw new Error('Replay recording is already in progress');\n }\n\n if (this._isEnabled && this.recordingMode === 'buffer') {\n throw new Error('Replay buffering is in progress, call `flush()` to save the replay');\n }\n\n logInfoNextTick('[Replay] Starting replay in session mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n // This is intentional: create a new session-based replay when calling `start()`\n sessionSampleRate: 1,\n allowBuffering: false,\n },\n );\n\n this.session = session;\n\n this._initializeRecording();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, an error occurs.\n */\n startBuffering() {\n if (this._isEnabled) {\n throw new Error('Replay recording is already in progress');\n }\n\n logInfoNextTick('[Replay] Starting replay in buffer mode', this._options._experiments.traceInternals);\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: 0,\n allowBuffering: true,\n },\n );\n\n this.session = session;\n\n this.recordingMode = 'buffer';\n this._initializeRecording();\n }\n\n /**\n * Start recording.\n *\n * Note that this will cause a new DOM checkout\n */\n startRecording() {\n try {\n const canvas = this._options._experiments.canvas;\n this._stopRecording = record({\n ...this._recordingOptions,\n // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n // Without this, it would record forever, until an error happens, which we don't want\n // instead, we'll always keep the last 60 seconds of replay before an error happened\n ...(this.recordingMode === 'buffer' && { checkoutEveryNms: BUFFER_CHECKOUT_TIME }),\n emit: getHandleRecordingEmit(this),\n onMutation: this._onMutationHandler,\n ...(canvas &&\n canvas.manager && {\n recordCanvas: true,\n getCanvasManager: canvas.manager,\n ...(CANVAS_QUALITY[canvas.quality || 'medium'] || CANVAS_QUALITY.medium),\n }),\n });\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Stops the recording, if it was running.\n *\n * Returns true if it was previously stopped, or is now stopped,\n * otherwise false.\n */\n stopRecording() {\n try {\n if (this._stopRecording) {\n this._stopRecording();\n this._stopRecording = undefined;\n }\n\n return true;\n } catch (err) {\n this._handleException(err);\n return false;\n }\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n async stop({ forceFlush = false, reason } = {}) {\n if (!this._isEnabled) {\n return;\n }\n\n // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n // enter into an infinite loop when `stop()` is called while flushing.\n this._isEnabled = false;\n\n try {\n logInfo(\n `[Replay] Stopping Replay${reason ? ` triggered by ${reason}` : ''}`,\n this._options._experiments.traceInternals,\n );\n\n this._removeListeners();\n this.stopRecording();\n\n this._debouncedFlush.cancel();\n // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n // `_isEnabled` state of the plugin since it was disabled above.\n if (forceFlush) {\n await this._flush({ force: true });\n }\n\n // After flush, destroy event buffer\n this.eventBuffer && this.eventBuffer.destroy();\n this.eventBuffer = null;\n\n // Clear session from session storage, note this means if a new session\n // is started after, it will not have `previousSessionId`\n clearSession(this);\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Pause some replay functionality. See comments for `_isPaused`.\n * This differs from stop as this only stops DOM recording, it is\n * not as thorough of a shutdown as `stop()`.\n */\n pause() {\n if (this._isPaused) {\n return;\n }\n\n this._isPaused = true;\n this.stopRecording();\n\n logInfo('[Replay] Pausing replay', this._options._experiments.traceInternals);\n }\n\n /**\n * Resumes recording, see notes for `pause().\n *\n * Note that calling `startRecording()` here will cause a\n * new DOM checkout.`\n */\n resume() {\n if (!this._isPaused || !this._checkSession()) {\n return;\n }\n\n this._isPaused = false;\n this.startRecording();\n\n logInfo('[Replay] Resuming replay', this._options._experiments.traceInternals);\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n if (this.recordingMode === 'session') {\n return this.flushImmediate();\n }\n\n const activityTime = Date.now();\n\n logInfo('[Replay] Converting buffer to session', this._options._experiments.traceInternals);\n\n // Allow flush to complete before resuming as a session recording, otherwise\n // the checkout from `startRecording` may be included in the payload.\n // Prefer to keep the error replay as a separate (and smaller) segment\n // than the session replay.\n await this.flushImmediate();\n\n const hasStoppedRecording = this.stopRecording();\n\n if (!continueRecording || !hasStoppedRecording) {\n return;\n }\n\n // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n if ((this.recordingMode ) === 'session') {\n return;\n }\n\n // Re-start recording in session-mode\n this.recordingMode = 'session';\n\n // Once this session ends, we do not want to refresh it\n if (this.session) {\n this._updateUserActivity(activityTime);\n this._updateSessionActivity(activityTime);\n this._maybeSaveSession();\n }\n\n this.startRecording();\n }\n\n /**\n * We want to batch uploads of replay events. Save events only if\n * `` milliseconds have elapsed since the last event\n * *OR* if `` milliseconds have elapsed.\n *\n * Accepts a callback to perform side-effects and returns true to stop batch\n * processing and hand back control to caller.\n */\n addUpdate(cb) {\n // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n const cbResult = cb();\n\n // If this option is turned on then we will only want to call `flush`\n // explicitly\n if (this.recordingMode === 'buffer') {\n return;\n }\n\n // If callback is true, we do not want to continue with flushing -- the\n // caller will need to handle it.\n if (cbResult === true) {\n return;\n }\n\n // addUpdate is called quite frequently - use _debouncedFlush so that it\n // respects the flush delays and does not flush immediately\n this._debouncedFlush();\n }\n\n /**\n * Updates the user activity timestamp and resumes recording. This should be\n * called in an event handler for a user action that we consider as the user\n * being \"active\" (e.g. a mouse click).\n */\n triggerUserActivity() {\n this._updateUserActivity();\n\n // This case means that recording was once stopped due to inactivity.\n // Ensure that recording is resumed.\n if (!this._stopRecording) {\n // Create a new session, otherwise when the user action is flushed, it\n // will get rejected due to an expired session.\n if (!this._checkSession()) {\n return;\n }\n\n // Note: This will cause a new DOM checkout\n this.resume();\n return;\n }\n\n // Otherwise... recording was never suspended, continue as normalish\n this.checkAndHandleExpiredSession();\n\n this._updateSessionActivity();\n }\n\n /**\n * Updates the user activity timestamp *without* resuming\n * recording. Some user events (e.g. keydown) can be create\n * low-value replays that only contain the keypress as a\n * breadcrumb. Instead this would require other events to\n * create a new replay after a session has expired.\n */\n updateUserActivity() {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n conditionalFlush() {\n if (this.recordingMode === 'buffer') {\n return Promise.resolve();\n }\n\n return this.flushImmediate();\n }\n\n /**\n * Flush using debounce flush\n */\n flush() {\n return this._debouncedFlush() ;\n }\n\n /**\n * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n * cases of mulitple flushes happening closely together.\n */\n flushImmediate() {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() ;\n }\n\n /**\n * Cancels queued up flushes.\n */\n cancelFlush() {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n getSessionId() {\n return this.session && this.session.id;\n }\n\n /**\n * Checks if recording should be stopped due to user inactivity. Otherwise\n * check if session is expired and create a new session if so. Triggers a new\n * full snapshot on new session.\n *\n * Returns true if session is not expired, false otherwise.\n * @hidden\n */\n checkAndHandleExpiredSession() {\n // Prevent starting a new session if the last user activity is older than\n // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n // session+recording. This creates noisy replays that do not have much\n // content in them.\n if (\n this._lastActivity &&\n isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n this.session &&\n this.session.sampled === 'session'\n ) {\n // Pause recording only for session-based replays. Otherwise, resuming\n // will create a new replay and will conflict with users who only choose\n // to record error-based replays only. (e.g. the resumed replay will not\n // contain a reference to an error)\n this.pause();\n return;\n }\n\n // --- There is recent user activity --- //\n // This will create a new session if expired, based on expiry length\n if (!this._checkSession()) {\n // Check session handles the refreshing itself\n return false;\n }\n\n return true;\n }\n\n /**\n * Capture some initial state that can change throughout the lifespan of the\n * replay. This is required because otherwise they would be captured at the\n * first flush.\n */\n setInitialState() {\n const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n const url = `${WINDOW.location.origin}${urlPath}`;\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n // Reset _context as well\n this._clearContext();\n\n this._context.initialUrl = url;\n this._context.initialTimestamp = Date.now();\n this._context.urls.push(url);\n }\n\n /**\n * Add a breadcrumb event, that may be throttled.\n * If it was throttled, we add a custom breadcrumb to indicate that.\n */\n throttledAddEvent(\n event,\n isCheckout,\n ) {\n const res = this._throttledAddEvent(event, isCheckout);\n\n // If this is THROTTLED, it means we have throttled the event for the first time\n // In this case, we want to add a breadcrumb indicating that something was skipped\n if (res === THROTTLED) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.throttled',\n });\n\n this.addUpdate(() => {\n // Return `false` if the event _was_ added, as that means we schedule a flush\n return !addEventSync(this, {\n type: ReplayEventTypeCustom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n metric: true,\n },\n });\n });\n }\n\n return res;\n }\n\n /**\n * This will get the parametrized route name of the current page.\n * This is only available if performance is enabled, and if an instrumented router is used.\n */\n getCurrentRoute() {\n // eslint-disable-next-line deprecation/deprecation\n const lastTransaction = this.lastTransaction || getCurrentScope().getTransaction();\n\n const attributes = (lastTransaction && spanToJSON(lastTransaction).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastTransaction || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastTransaction).description;\n }\n\n /**\n * Initialize and start all listeners to varying events (DOM,\n * Performance Observer, Recording, Sentry SDK, etc)\n */\n _initializeRecording() {\n this.setInitialState();\n\n // this method is generally called on page load or manually - in both cases\n // we should treat it as an activity\n this._updateSessionActivity();\n\n this.eventBuffer = createEventBuffer({\n useCompression: this._options.useCompression,\n workerUrl: this._options.workerUrl,\n });\n\n this._removeListeners();\n this._addListeners();\n\n // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n this._isEnabled = true;\n this._isPaused = false;\n\n this.startRecording();\n }\n\n /** A wrapper to conditionally capture exceptions. */\n _handleException(error) {\n DEBUG_BUILD && logger.error('[Replay]', error);\n\n if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {\n captureException(error);\n }\n }\n\n /**\n * Loads (or refreshes) the current session.\n */\n _initializeSessionForSampling(previousSessionId) {\n // Whenever there is _any_ error sample rate, we always allow buffering\n // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n const allowBuffering = this._options.errorSampleRate > 0;\n\n const session = loadOrCreateSession(\n {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n traceInternals: this._options._experiments.traceInternals,\n previousSessionId,\n },\n {\n stickySession: this._options.stickySession,\n sessionSampleRate: this._options.sessionSampleRate,\n allowBuffering,\n },\n );\n\n this.session = session;\n }\n\n /**\n * Checks and potentially refreshes the current session.\n * Returns false if session is not recorded.\n */\n _checkSession() {\n // If there is no session yet, we do not want to refresh anything\n // This should generally not happen, but to be safe....\n if (!this.session) {\n return false;\n }\n\n const currentSession = this.session;\n\n if (\n shouldRefreshSession(currentSession, {\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n maxReplayDuration: this._options.maxReplayDuration,\n })\n ) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._refreshSession(currentSession);\n return false;\n }\n\n return true;\n }\n\n /**\n * Refresh a session with a new one.\n * This stops the current session (without forcing a flush, as that would never work since we are expired),\n * and then does a new sampling based on the refreshed session.\n */\n async _refreshSession(session) {\n if (!this._isEnabled) {\n return;\n }\n await this.stop({ reason: 'refresh session' });\n this.initializeSampling(session.id);\n }\n\n /**\n * Adds listeners to record events for the replay\n */\n _addListeners() {\n try {\n WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n WINDOW.addEventListener('blur', this._handleWindowBlur);\n WINDOW.addEventListener('focus', this._handleWindowFocus);\n WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.addListeners();\n }\n\n // There is no way to remove these listeners, so ensure they are only added once\n if (!this._hasInitializedCoreListeners) {\n addGlobalListeners(this);\n\n this._hasInitializedCoreListeners = true;\n }\n } catch (err) {\n this._handleException(err);\n }\n\n this._performanceCleanupCallback = setupPerformanceObserver(this);\n }\n\n /**\n * Cleans up listeners that were created in `_addListeners`\n */\n _removeListeners() {\n try {\n WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n WINDOW.removeEventListener('blur', this._handleWindowBlur);\n WINDOW.removeEventListener('focus', this._handleWindowFocus);\n WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n if (this.clickDetector) {\n this.clickDetector.removeListeners();\n }\n\n if (this._performanceCleanupCallback) {\n this._performanceCleanupCallback();\n }\n } catch (err) {\n this._handleException(err);\n }\n }\n\n /**\n * Handle when visibility of the page content changes. Opening a new tab will\n * cause the state to change to hidden because of content of current page will\n * be hidden. Likewise, moving a different window to cover the contents of the\n * page will also trigger a change to a hidden state.\n */\n __init() {this._handleVisibilityChange = () => {\n if (WINDOW.document.visibilityState === 'visible') {\n this._doChangeToForegroundTasks();\n } else {\n this._doChangeToBackgroundTasks();\n }\n };}\n\n /**\n * Handle when page is blurred\n */\n __init2() {this._handleWindowBlur = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.blur',\n });\n\n // Do not count blur as a user action -- it's part of the process of them\n // leaving the page\n this._doChangeToBackgroundTasks(breadcrumb);\n };}\n\n /**\n * Handle when page is focused\n */\n __init3() {this._handleWindowFocus = () => {\n const breadcrumb = createBreadcrumb({\n category: 'ui.focus',\n });\n\n // Do not count focus as a user action -- instead wait until they focus and\n // interactive with page\n this._doChangeToForegroundTasks(breadcrumb);\n };}\n\n /** Ensure page remains active when a key is pressed. */\n __init4() {this._handleKeyboardEvent = (event) => {\n handleKeyboardEvent(this, event);\n };}\n\n /**\n * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n */\n _doChangeToBackgroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const expired = isSessionExpired(this.session, {\n maxReplayDuration: this._options.maxReplayDuration,\n sessionIdleExpire: this.timeouts.sessionIdleExpire,\n });\n\n if (expired) {\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Send replay when the page/tab becomes hidden. There is no reason to send\n // replay if it becomes visible, since no actions we care about were done\n // while it was hidden\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n void this.conditionalFlush();\n }\n\n /**\n * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n */\n _doChangeToForegroundTasks(breadcrumb) {\n if (!this.session) {\n return;\n }\n\n const isSessionActive = this.checkAndHandleExpiredSession();\n\n if (!isSessionActive) {\n // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n // ms, we will re-use the existing session, otherwise create a new\n // session\n logInfo('[Replay] Document has become active, but session has expired');\n return;\n }\n\n if (breadcrumb) {\n this._createCustomBreadcrumb(breadcrumb);\n }\n }\n\n /**\n * Update user activity (across session lifespans)\n */\n _updateUserActivity(_lastActivity = Date.now()) {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n _updateSessionActivity(_lastActivity = Date.now()) {\n if (this.session) {\n this.session.lastActivity = _lastActivity;\n this._maybeSaveSession();\n }\n }\n\n /**\n * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n */\n _createCustomBreadcrumb(breadcrumb) {\n this.addUpdate(() => {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.throttledAddEvent({\n type: EventType.Custom,\n timestamp: breadcrumb.timestamp || 0,\n data: {\n tag: 'breadcrumb',\n payload: breadcrumb,\n },\n });\n });\n }\n\n /**\n * Observed performance events are added to `this.performanceEntries`. These\n * are included in the replay event before it is finished and sent to Sentry.\n */\n _addPerformanceEntries() {\n const performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n this.performanceEntries = [];\n this.replayPerformanceEntries = [];\n\n return Promise.all(createPerformanceSpans(this, performanceEntries));\n }\n\n /**\n * Clear _context\n */\n _clearContext() {\n // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n this._context.errorIds.clear();\n this._context.traceIds.clear();\n this._context.urls = [];\n }\n\n /** Update the initial timestamp based on the buffer content. */\n _updateInitialTimestampFromEventBuffer() {\n const { session, eventBuffer } = this;\n if (!session || !eventBuffer) {\n return;\n }\n\n // we only ever update this on the initial segment\n if (session.segmentId) {\n return;\n }\n\n const earliestEvent = eventBuffer.getEarliestTimestamp();\n if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n this._context.initialTimestamp = earliestEvent;\n }\n }\n\n /**\n * Return and clear _context\n */\n _popEventContext() {\n const _context = {\n initialTimestamp: this._context.initialTimestamp,\n initialUrl: this._context.initialUrl,\n errorIds: Array.from(this._context.errorIds),\n traceIds: Array.from(this._context.traceIds),\n urls: this._context.urls,\n };\n\n this._clearContext();\n\n return _context;\n }\n\n /**\n * Flushes replay event buffer to Sentry.\n *\n * Performance events are only added right before flushing - this is\n * due to the buffered performance observer events.\n *\n * Should never be called directly, only by `flush`\n */\n async _runFlush() {\n const replayId = this.getSessionId();\n\n if (!this.session || !this.eventBuffer || !replayId) {\n DEBUG_BUILD && logger.error('[Replay] No session or eventBuffer found to flush.');\n return;\n }\n\n await this._addPerformanceEntries();\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer || !this.eventBuffer.hasEvents) {\n return;\n }\n\n // Only attach memory event if eventBuffer is not empty\n await addMemoryEntry(this);\n\n // Check eventBuffer again, as it could have been stopped in the meanwhile\n if (!this.eventBuffer) {\n return;\n }\n\n // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n if (replayId !== this.getSessionId()) {\n return;\n }\n\n try {\n // This uses the data from the eventBuffer, so we need to call this before `finish()\n this._updateInitialTimestampFromEventBuffer();\n\n const timestamp = Date.now();\n\n // Check total duration again, to avoid sending outdated stuff\n // We leave 30s wiggle room to accomodate late flushing etc.\n // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n throw new Error('Session is too long, not sending replay');\n }\n\n const eventContext = this._popEventContext();\n // Always increment segmentId regardless of outcome of sending replay\n const segmentId = this.session.segmentId++;\n this._maybeSaveSession();\n\n // Note this empties the event buffer regardless of outcome of sending replay\n const recordingData = await this.eventBuffer.finish();\n\n await sendReplay({\n replayId,\n recordingData,\n segmentId,\n eventContext,\n session: this.session,\n options: this.getOptions(),\n timestamp,\n });\n } catch (err) {\n this._handleException(err);\n\n // This means we retried 3 times and all of them failed,\n // or we ran into a problem we don't want to retry, like rate limiting.\n // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'sendReplay' });\n\n const client = getClient();\n\n if (client) {\n client.recordDroppedEvent('send_error', 'replay');\n }\n }\n }\n\n /**\n * Flush recording data to Sentry. Creates a lock so that only a single flush\n * can be active at a time. Do not call this directly.\n */\n __init5() {this._flush = async ({\n force = false,\n }\n\n = {}) => {\n if (!this._isEnabled && !force) {\n // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n return;\n }\n\n if (!this.checkAndHandleExpiredSession()) {\n DEBUG_BUILD && logger.error('[Replay] Attempting to finish replay event after session expired.');\n return;\n }\n\n if (!this.session) {\n // should never happen, as we would have bailed out before\n return;\n }\n\n const start = this.session.started;\n const now = Date.now();\n const duration = now - start;\n\n // A flush is about to happen, cancel any queued flushes\n this._debouncedFlush.cancel();\n\n // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n const tooShort = duration < this._options.minReplayDuration;\n const tooLong = duration > this._options.maxReplayDuration + 5000;\n if (tooShort || tooLong) {\n logInfo(\n `[Replay] Session duration (${Math.floor(duration / 1000)}s) is too ${\n tooShort ? 'short' : 'long'\n }, not sending replay.`,\n this._options._experiments.traceInternals,\n );\n\n if (tooShort) {\n this._debouncedFlush();\n }\n return;\n }\n\n const eventBuffer = this.eventBuffer;\n if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n logInfo('[Replay] Flushing initial segment without checkout.', this._options._experiments.traceInternals);\n // TODO FN: Evaluate if we want to stop here, or remove this again?\n }\n\n // this._flushLock acts as a lock so that future calls to `_flush()`\n // will be blocked until this promise resolves\n if (!this._flushLock) {\n this._flushLock = this._runFlush();\n await this._flushLock;\n this._flushLock = undefined;\n return;\n }\n\n // Wait for previous flush to finish, then call the debounced `_flush()`.\n // It's possible there are other flush requests queued and waiting for it\n // to resolve. We want to reduce all outstanding requests (as well as any\n // new flush requests that occur within a second of the locked flush\n // completing) into a single flush.\n\n try {\n await this._flushLock;\n } catch (err) {\n DEBUG_BUILD && logger.error(err);\n } finally {\n this._debouncedFlush();\n }\n };}\n\n /** Save the session, if it is sticky */\n _maybeSaveSession() {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n __init6() {this._onMutationHandler = (mutations) => {\n const count = mutations.length;\n\n const mutationLimit = this._options.mutationLimit;\n const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n const overMutationLimit = mutationLimit && count > mutationLimit;\n\n // Create a breadcrumb if a lot of mutations happen at the same time\n // We can show this in the UI as an information with potential performance improvements\n if (count > mutationBreadcrumbLimit || overMutationLimit) {\n const breadcrumb = createBreadcrumb({\n category: 'replay.mutations',\n data: {\n count,\n limit: overMutationLimit,\n },\n });\n this._createCustomBreadcrumb(breadcrumb);\n }\n\n // Stop replay if over the mutation limit\n if (overMutationLimit) {\n // This should never reject\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n return false;\n }\n\n // `true` means we use the regular mutation handling by rrweb\n return true;\n };}\n}\n\nfunction getOption(\n selectors,\n defaultSelectors,\n deprecatedClassOption,\n deprecatedSelectorOption,\n) {\n const deprecatedSelectors = typeof deprecatedSelectorOption === 'string' ? deprecatedSelectorOption.split(',') : [];\n\n const allSelectors = [\n ...selectors,\n // @deprecated\n ...deprecatedSelectors,\n\n // sentry defaults\n ...defaultSelectors,\n ];\n\n // @deprecated\n if (typeof deprecatedClassOption !== 'undefined') {\n // NOTE: No support for RegExp\n if (typeof deprecatedClassOption === 'string') {\n allSelectors.push(`.${deprecatedClassOption}`);\n }\n\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Replay] You are using a deprecated configuration item for privacy. Read the documentation on how to use the new privacy configuration.',\n );\n });\n }\n\n return allSelectors.join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n}) {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]'], maskTextClass, maskTextSelector);\n const unmaskSelector = getOption(unmask, ['.sentry-unmask', '[data-sentry-unmask]']);\n\n const options = {\n // We are making the decision to make text and input selectors the same\n maskTextSelector: maskSelector,\n unmaskTextSelector: unmaskSelector,\n\n blockSelector: getOption(\n block,\n ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements],\n blockClass,\n blockSelector,\n ),\n unblockSelector: getOption(unblock, ['.sentry-unblock', '[data-sentry-unblock]']),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]'], ignoreClass),\n };\n\n if (blockClass instanceof RegExp) {\n options.blockClass = blockClass;\n }\n\n if (maskTextClass instanceof RegExp) {\n options.maskTextClass = maskTextClass;\n }\n\n return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}) {\n // We only mask attributes if `maskAllText` is true\n if (!maskAllText) {\n return value;\n }\n\n // unmaskTextSelector takes precendence\n if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n return value;\n }\n\n if (\n maskAttributes.includes(key) ||\n // Need to mask `value` attribute for `` if it's a button-like\n // type\n (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n ) {\n return value.replace(/[\\S]/g, '*');\n }\n\n return value;\n}\n\nconst MEDIA_SELECTORS =\n 'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * The main replay integration class, to be passed to `init({ integrations: [] })`.\n */\nclass Replay {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Replay';}\n\n /**\n * @inheritDoc\n */\n\n /**\n * Options to pass to `rrweb.record()`\n */\n\n /**\n * Initial options passed to the replay integration, merged with default values.\n * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n * can only be finally set when setupOnce() is called.\n *\n * @private\n */\n\n constructor({\n flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n minReplayDuration = MIN_REPLAY_DURATION,\n maxReplayDuration = MAX_REPLAY_DURATION,\n stickySession = true,\n useCompression = true,\n workerUrl,\n _experiments = {},\n sessionSampleRate,\n errorSampleRate,\n maskAllText = true,\n maskAllInputs = true,\n blockAllMedia = true,\n\n mutationBreadcrumbLimit = 750,\n mutationLimit = 10000,\n\n slowClickTimeout = 7000,\n slowClickIgnoreSelectors = [],\n\n networkDetailAllowUrls = [],\n networkDetailDenyUrls = [],\n networkCaptureBodies = true,\n networkRequestHeaders = [],\n networkResponseHeaders = [],\n\n mask = [],\n maskAttributes = ['title', 'placeholder'],\n unmask = [],\n block = [],\n unblock = [],\n ignore = [],\n maskFn,\n\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n // eslint-disable-next-line deprecation/deprecation\n blockClass,\n // eslint-disable-next-line deprecation/deprecation\n blockSelector,\n // eslint-disable-next-line deprecation/deprecation\n maskInputOptions,\n // eslint-disable-next-line deprecation/deprecation\n maskTextClass,\n // eslint-disable-next-line deprecation/deprecation\n maskTextSelector,\n // eslint-disable-next-line deprecation/deprecation\n ignoreClass,\n } = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n blockClass,\n blockSelector,\n maskTextClass,\n maskTextSelector,\n ignoreClass,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n maskInputOptions: { ...(maskInputOptions || {}), password: true },\n maskTextFn: maskFn,\n maskInputFn: maskFn,\n maskAttributeFn: (key, value, el) =>\n maskAttribute({\n maskAttributes,\n maskAllText,\n privacyOptions,\n key,\n value,\n el,\n }),\n\n ...privacyOptions,\n\n // Our defaults\n slimDOMOptions: 'all',\n inlineStylesheet: true,\n // Disable inline images as it will increase segment/replay size\n inlineImages: false,\n // collect fonts, but be aware that `sentry.io` needs to be an allowed\n // origin for playback\n collectFonts: true,\n errorHandler: (err) => {\n try {\n err.__rrweb__ = true;\n } catch (error) {\n // ignore errors here\n // this can happen if the error is frozen or does not allow mutation for other reasons\n }\n },\n };\n\n this._initialOptions = {\n flushMinDelay,\n flushMaxDelay,\n minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n stickySession,\n sessionSampleRate,\n errorSampleRate,\n useCompression,\n workerUrl,\n blockAllMedia,\n maskAllInputs,\n maskAllText,\n mutationBreadcrumbLimit,\n mutationLimit,\n slowClickTimeout,\n slowClickIgnoreSelectors,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n beforeAddRecordingEvent,\n beforeErrorSampling,\n\n _experiments,\n };\n\n if (typeof sessionSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`sessionSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysSessionSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysSessionSampleRate: ${sessionSampleRate} })`,\n );\n\n this._initialOptions.sessionSampleRate = sessionSampleRate;\n }\n\n if (typeof errorSampleRate === 'number') {\n // eslint-disable-next-line\n console.warn(\n `[Replay] You are passing \\`errorSampleRate\\` to the Replay integration.\nThis option is deprecated and will be removed soon.\nInstead, configure \\`replaysOnErrorSampleRate\\` directly in the SDK init options, e.g.:\nSentry.init({ replaysOnErrorSampleRate: ${errorSampleRate} })`,\n );\n\n this._initialOptions.errorSampleRate = errorSampleRate;\n }\n\n if (this._initialOptions.blockAllMedia) {\n // `blockAllMedia` is a more user friendly option to configure blocking\n // embedded media elements\n this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n ? MEDIA_SELECTORS\n : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n }\n\n if (this._isInitialized && isBrowser()) {\n throw new Error('Multiple Sentry Session Replay instances are not supported');\n }\n\n this._isInitialized = true;\n }\n\n /** If replay has already been initialized */\n get _isInitialized() {\n return _initialized;\n }\n\n /** Update _isInitialized */\n set _isInitialized(value) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n setupOnce() {\n if (!isBrowser()) {\n return;\n }\n\n this._setup();\n\n // Once upon a time, we tried to create a transaction in `setupOnce` and it would\n // potentially create a transaction before some native SDK integrations have run\n // and applied their own global event processor. An example is:\n // https://github.com/getsentry/sentry-javascript/blob/b47ceafbdac7f8b99093ce6023726ad4687edc48/packages/browser/src/integrations/useragent.ts\n //\n // So we call `this._initialize()` in next event loop as a workaround to wait for other\n // global event processors to finish. This is no longer needed, but keeping it\n // here to avoid any future issues.\n setTimeout(() => this._initialize());\n }\n\n /**\n * Start a replay regardless of sampling rate. Calling this will always\n * create a new session. Will throw an error if replay is already in progress.\n *\n * Creates or loads a session, attaches listeners to varying events (DOM,\n * PerformanceObserver, Recording, Sentry SDK, etc)\n */\n start() {\n if (!this._replay) {\n return;\n }\n\n this._replay.start();\n }\n\n /**\n * Start replay buffering. Buffers until `flush()` is called or, if\n * `replaysOnErrorSampleRate` > 0, until an error occurs.\n */\n startBuffering() {\n if (!this._replay) {\n return;\n }\n\n this._replay.startBuffering();\n }\n\n /**\n * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n * does not support a teardown\n */\n stop() {\n if (!this._replay) {\n return Promise.resolve();\n }\n\n return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n }\n\n /**\n * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n * Unless `continueRecording` is false, the replay will continue to record and\n * behave as a \"session\"-based replay.\n *\n * Otherwise, queue up a flush.\n */\n flush(options) {\n if (!this._replay || !this._replay.isEnabled()) {\n return Promise.resolve();\n }\n\n return this._replay.sendBufferedReplayOrFlush(options);\n }\n\n /**\n * Get the current session ID.\n */\n getReplayId() {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n /**\n * Initializes replay.\n */\n _initialize() {\n if (!this._replay) {\n return;\n }\n\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n _setup() {\n // Client is not available in constructor, so we need to wait until setupOnce\n const finalOptions = loadReplayOptionsFromClient(this._initialOptions);\n\n this._replay = new ReplayContainer({\n options: finalOptions,\n recordingOptions: this._recordingOptions,\n });\n }\n}Replay.__initStatic();\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions) {\n const client = getClient();\n const opt = client && (client.getOptions() );\n\n const finalOptions = { sessionSampleRate: 0, errorSampleRate: 0, ...dropUndefinedKeys(initialOptions) };\n\n if (!opt) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('SDK client is not available.');\n });\n return finalOptions;\n }\n\n if (\n initialOptions.sessionSampleRate == null && // TODO remove once deprecated rates are removed\n initialOptions.errorSampleRate == null && // TODO remove once deprecated rates are removed\n opt.replaysSessionSampleRate == null &&\n opt.replaysOnErrorSampleRate == null\n ) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n 'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n );\n });\n }\n\n if (typeof opt.replaysSessionSampleRate === 'number') {\n finalOptions.sessionSampleRate = opt.replaysSessionSampleRate;\n }\n\n if (typeof opt.replaysOnErrorSampleRate === 'number') {\n finalOptions.errorSampleRate = opt.replaysOnErrorSampleRate;\n }\n\n return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\nexport { Replay };\n//# sourceMappingURL=index.js.map\n","// https://github.com/alangpierce/sucrase/tree/265887868966917f3b924ce38dfad01fbab1329f\n//\n// The MIT License (MIT)\n//\n// Copyright (c) 2012-2018 various contributors (see AUTHORS)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nfunction _nullishCoalesce(lhs, rhsFn) {\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n// if (lhs != null) {\n// return lhs;\n// } else {\n// return rhsFn();\n// }\n// }\n\nexport { _nullishCoalesce };\n//# sourceMappingURL=_nullishCoalesce.js.map\n","import { GLOBAL_OBJ, getLocationHref, logger, isBrowser } from '@sentry/utils';\nimport { prepareEvent, getIsolationScope, getClient, withScope, createEventEnvelope, getCurrentScope } from '@sentry/core';\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and feedback packages\nconst WINDOW = GLOBAL_OBJ ;\n\nconst LIGHT_BACKGROUND = '#ffffff';\nconst INHERIT = 'inherit';\nconst SUBMIT_COLOR = 'rgba(108, 95, 199, 1)';\nconst LIGHT_THEME = {\n fontFamily: \"'Helvetica Neue', Arial, sans-serif\",\n fontSize: '14px',\n\n background: LIGHT_BACKGROUND,\n backgroundHover: '#f6f6f7',\n foreground: '#2b2233',\n border: '1.5px solid rgba(41, 35, 47, 0.13)',\n boxShadow: '0px 4px 24px 0px rgba(43, 34, 51, 0.12)',\n\n success: '#268d75',\n error: '#df3338',\n\n submitBackground: 'rgba(88, 74, 192, 1)',\n submitBackgroundHover: SUBMIT_COLOR,\n submitBorder: SUBMIT_COLOR,\n submitOutlineFocus: '#29232f',\n submitForeground: LIGHT_BACKGROUND,\n submitForegroundHover: LIGHT_BACKGROUND,\n\n cancelBackground: 'transparent',\n cancelBackgroundHover: 'var(--background-hover)',\n cancelBorder: 'var(--border)',\n cancelOutlineFocus: 'var(--input-outline-focus)',\n cancelForeground: 'var(--foreground)',\n cancelForegroundHover: 'var(--foreground)',\n\n inputBackground: INHERIT,\n inputForeground: INHERIT,\n inputBorder: 'var(--border)',\n inputOutlineFocus: SUBMIT_COLOR,\n};\n\nconst DEFAULT_THEME = {\n light: LIGHT_THEME,\n dark: {\n ...LIGHT_THEME,\n\n background: '#29232f',\n backgroundHover: '#352f3b',\n foreground: '#ebe6ef',\n border: '1.5px solid rgba(235, 230, 239, 0.15)',\n\n success: '#2da98c',\n error: '#f55459',\n },\n};\n\nconst ACTOR_LABEL = 'Report a Bug';\nconst CANCEL_BUTTON_LABEL = 'Cancel';\nconst SUBMIT_BUTTON_LABEL = 'Send Bug Report';\nconst FORM_TITLE = 'Report a Bug';\nconst EMAIL_PLACEHOLDER = 'your.email@example.org';\nconst EMAIL_LABEL = 'Email';\nconst MESSAGE_PLACEHOLDER = \"What's the bug? What did you expect?\";\nconst MESSAGE_LABEL = 'Description';\nconst NAME_PLACEHOLDER = 'Your Name';\nconst NAME_LABEL = 'Name';\nconst SUCCESS_MESSAGE_TEXT = 'Thank you for your report!';\n\nconst FEEDBACK_WIDGET_SOURCE = 'widget';\nconst FEEDBACK_API_SOURCE = 'api';\n\n/**\n * Prepare a feedback event & enrich it with the SDK metadata.\n */\nasync function prepareFeedbackEvent({\n client,\n scope,\n event,\n}) {\n const eventHint = {};\n if (client.emit) {\n client.emit('preprocessEvent', event, eventHint);\n }\n\n const preparedEvent = (await prepareEvent(\n client.getOptions(),\n event,\n eventHint,\n scope,\n client,\n getIsolationScope(),\n )) ;\n\n if (preparedEvent === null) {\n // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n client.recordDroppedEvent('event_processor', 'feedback', event);\n return null;\n }\n\n // This normally happens in browser client \"_prepareEvent\"\n // but since we do not use this private method from the client, but rather the plain import\n // we need to do this manually.\n preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n return preparedEvent;\n}\n\n/**\n * Send feedback using transport\n */\nasync function sendFeedbackRequest(\n { feedback: { message, email, name, source, url } },\n { includeReplay = true } = {},\n) {\n const client = getClient();\n const transport = client && client.getTransport();\n const dsn = client && client.getDsn();\n\n if (!client || !transport || !dsn) {\n return;\n }\n\n const baseEvent = {\n contexts: {\n feedback: {\n contact_email: email,\n name,\n message,\n url,\n source,\n },\n },\n type: 'feedback',\n };\n\n return withScope(async scope => {\n // No use for breadcrumbs in feedback\n scope.clearBreadcrumbs();\n\n if ([FEEDBACK_API_SOURCE, FEEDBACK_WIDGET_SOURCE].includes(String(source))) {\n scope.setLevel('info');\n }\n\n const feedbackEvent = await prepareFeedbackEvent({\n scope,\n client,\n event: baseEvent,\n });\n\n if (!feedbackEvent) {\n return;\n }\n\n if (client.emit) {\n client.emit('beforeSendFeedback', feedbackEvent, { includeReplay: Boolean(includeReplay) });\n }\n\n const envelope = createEventEnvelope(feedbackEvent, dsn, client.getOptions()._metadata, client.getOptions().tunnel);\n\n let response;\n\n try {\n response = await transport.send(envelope);\n } catch (err) {\n const error = new Error('Unable to send Feedback');\n\n try {\n // In case browsers don't allow this property to be writable\n // @ts-expect-error This needs lib es2022 and newer\n error.cause = err;\n } catch (e) {\n // nothing to do\n }\n throw error;\n }\n\n // TODO (v8): we can remove this guard once transport.send's type signature doesn't include void anymore\n if (!response) {\n return;\n }\n\n // Require valid status codes, otherwise can assume feedback was not sent successfully\n if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n throw new Error('Unable to send Feedback');\n }\n\n return response;\n });\n}\n\n/*\n * For reference, the fully built event looks something like this:\n * {\n * \"type\": \"feedback\",\n * \"event_id\": \"d2132d31b39445f1938d7e21b6bf0ec4\",\n * \"timestamp\": 1597977777.6189718,\n * \"dist\": \"1.12\",\n * \"platform\": \"javascript\",\n * \"environment\": \"production\",\n * \"release\": 42,\n * \"tags\": {\"transaction\": \"/organizations/:orgId/performance/:eventSlug/\"},\n * \"sdk\": {\"name\": \"name\", \"version\": \"version\"},\n * \"user\": {\n * \"id\": \"123\",\n * \"username\": \"user\",\n * \"email\": \"user@site.com\",\n * \"ip_address\": \"192.168.11.12\",\n * },\n * \"request\": {\n * \"url\": None,\n * \"headers\": {\n * \"user-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15\"\n * },\n * },\n * \"contexts\": {\n * \"feedback\": {\n * \"message\": \"test message\",\n * \"contact_email\": \"test@example.com\",\n * \"type\": \"feedback\",\n * },\n * \"trace\": {\n * \"trace_id\": \"4C79F60C11214EB38604F4AE0781BFB2\",\n * \"span_id\": \"FA90FDEAD5F74052\",\n * \"type\": \"trace\",\n * },\n * \"replay\": {\n * \"replay_id\": \"e2d42047b1c5431c8cba85ee2a8ab25d\",\n * },\n * },\n * }\n */\n\n/**\n * Public API to send a Feedback item to Sentry\n */\nfunction sendFeedback(\n { name, email, message, source = FEEDBACK_API_SOURCE, url = getLocationHref() },\n options = {},\n) {\n if (!message) {\n throw new Error('Unable to submit feedback with empty message');\n }\n\n return sendFeedbackRequest(\n {\n feedback: {\n name,\n email,\n message,\n url,\n source,\n },\n },\n options,\n );\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\n/**\n * Quick and dirty deep merge for the Feedback integration options\n */\nfunction mergeOptions(\n defaultOptions,\n optionOverrides,\n) {\n return {\n ...defaultOptions,\n ...optionOverrides,\n themeDark: {\n ...defaultOptions.themeDark,\n ...optionOverrides.themeDark,\n },\n themeLight: {\n ...defaultOptions.themeLight,\n ...optionOverrides.themeLight,\n },\n };\n}\n\n/**\n * Creates