{"version":3,"file":"static/js/2025.3027c44e.js","mappings":"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","sources":["../node_modules/@sentry/src/clientreport.ts","../node_modules/src/client.ts","../node_modules/src/debug-build.ts","../node_modules/src/eventbuilder.ts","../node_modules/src/helpers.ts","../node_modules/@sentry/src/eventbuilder.ts","../node_modules/@sentry/src/integrations/linkederrors.ts","../node_modules/@sentry/src/metadata.ts","../node_modules/@sentry/src/integrations/metadata.ts","../node_modules/@sentry/src/transports/multiplexed.ts","../node_modules/@sentry/src/metrics/instance.ts","../node_modules/@sentry/src/metrics/browser-aggregator.ts","../node_modules/@sentry/src/metrics/integration.ts","../node_modules/@sentry/src/metrics/exports.ts","../node_modules/@sentry/src/tracing/measurement.ts","../node_modules/@sentry/src/utils/isSentryRequestUrl.ts","../node_modules/@sentry/src/isBrowser.ts","../node_modules/src/constants.ts","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/@sentry/src/buildPolyfills/_nullishCoalesce.ts","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js","../../node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../node_modules/src/types/rrweb.ts","../node_modules/src/util/timestamp.ts","../node_modules/src/coreHandlers/util/addBreadcrumbEvent.ts","../node_modules/src/coreHandlers/util/domUtils.ts","../node_modules/src/coreHandlers/util/onWindowOpen.ts","../node_modules/src/coreHandlers/handleClick.ts","../node_modules/src/util/createBreadcrumb.ts","../../node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/src/coreHandlers/util/getAttributesToRecord.ts","../node_modules/src/coreHandlers/handleDom.ts","../node_modules/src/coreHandlers/handleKeyboardEvent.ts","../node_modules/src/util/createPerformanceEntries.ts","../node_modules/src/coreHandlers/performanceObserver.ts","../replay-worker/build/npm/esm/worker.ts","../node_modules/src/util/log.ts","../node_modules/src/eventBuffer/error.ts","../node_modules/src/eventBuffer/EventBufferArray.ts","../node_modules/src/eventBuffer/WorkerHandler.ts","../node_modules/src/eventBuffer/EventBufferCompressionWorker.ts","../node_modules/src/eventBuffer/EventBufferProxy.ts","../node_modules/src/eventBuffer/index.ts","../replay-worker/build/npm/esm/index.js","../node_modules/src/util/hasSessionStorage.ts","../node_modules/src/session/clearSession.ts","../node_modules/src/util/isSampled.ts","../node_modules/src/session/Session.ts","../node_modules/src/session/saveSession.ts","../node_modules/src/session/createSession.ts","../node_modules/src/util/isExpired.ts","../node_modules/src/util/isSessionExpired.ts","../node_modules/src/session/shouldRefreshSession.ts","../node_modules/src/session/loadOrCreateSession.ts","../node_modules/src/session/fetchSession.ts","../node_modules/src/util/addEvent.ts","../node_modules/src/util/eventUtils.ts","../node_modules/src/coreHandlers/handleAfterSendEvent.ts","../node_modules/src/coreHandlers/handleBeforeSendEvent.ts","../node_modules/src/coreHandlers/handleGlobalEvent.ts","../node_modules/src/coreHandlers/util/addFeedbackBreadcrumb.ts","../node_modules/src/util/isRrwebError.ts","../node_modules/src/coreHandlers/util/shouldSampleForBufferEvent.ts","../node_modules/src/util/createPerformanceSpans.ts","../node_modules/src/coreHandlers/handleHistory.ts","../node_modules/src/coreHandlers/util/addNetworkBreadcrumb.ts","../node_modules/src/util/shouldFilterRequest.ts","../node_modules/src/coreHandlers/handleXhr.ts","../node_modules/src/coreHandlers/util/networkUtils.ts","../node_modules/src/coreHandlers/util/fetchUtils.ts","../node_modules/src/coreHandlers/util/xhrUtils.ts","../node_modules/src/coreHandlers/handleNetworkBreadcrumbs.ts","../node_modules/src/coreHandlers/handleFetch.ts","../node_modules/src/coreHandlers/handleScope.ts","../node_modules/src/util/addGlobalListeners.ts","../node_modules/src/util/addMemoryEntry.ts","../node_modules/src/util/handleRecordingEmit.ts","../node_modules/src/util/sendReplayRequest.ts","../node_modules/src/util/prepareRecordingData.ts","../node_modules/src/util/prepareReplayEvent.ts","../node_modules/src/util/createReplayEnvelope.ts","../node_modules/src/util/sendReplay.ts","../node_modules/src/util/throttle.ts","../node_modules/src/replay.ts","../node_modules/src/util/debounce.ts","../node_modules/src/util/getPrivacyOptions.ts","../node_modules/src/integration.ts","../node_modules/src/util/maskAttribute.ts","../node_modules/src/util/sendFeedbackRequest.ts","../node_modules/src/util/prepareFeedbackEvent.ts","../node_modules/src/util/mergeOptions.ts","../node_modules/src/widget/Main.css.ts","../node_modules/src/widget/createShadowHost.ts","../node_modules/src/widget/Dialog.css.ts","../node_modules/src/util/handleFeedbackSubmit.ts","../node_modules/src/sendFeedback.ts","../node_modules/src/util/setAttributesNS.ts","../node_modules/src/widget/Icon.ts","../node_modules/src/widget/util/createElement.ts","../node_modules/src/widget/Actor.ts","../node_modules/src/widget/Form.ts","../node_modules/src/widget/SubmitButton.ts","../node_modules/src/widget/Logo.ts","../node_modules/src/widget/Dialog.ts","../node_modules/src/widget/SuccessIcon.ts","../node_modules/src/widget/SuccessMessage.ts","../node_modules/src/widget/createWidget.ts","../node_modules/src/widget/Actor.css.ts","../node_modules/@sentry/src/transports/offline.ts","../node_modules/src/transports/offline.ts","../node_modules/src/profiling/utils.ts","../node_modules/src/profiling/hubextensions.ts","../node_modules/src/profiling/integration.ts","../node_modules/src/index.ts","../node_modules/@sentry/src/instrument/console.ts","../node_modules/@sentry/src/severity.ts","../node_modules/src/integrations/breadcrumbs.ts","../node_modules/src/integrations/dedupe.ts","../node_modules/src/integrations/globalhandlers.ts","../node_modules/src/integrations/httpcontext.ts","../node_modules/src/integrations/linkederrors.ts","../node_modules/src/integrations/trycatch.ts","../node_modules/src/sdk.ts","../node_modules/@sentry/src/sdk.ts","../node_modules/src/stack-parsers.ts","../node_modules/src/transports/utils.ts","../node_modules/src/transports/fetch.ts","../node_modules/src/transports/xhr.ts","../node_modules/src/userfeedback.ts","../node_modules/@sentry/src/api.ts","../node_modules/@sentry/src/metrics/envelope.ts","../node_modules/@sentry/src/baseclient.ts","../node_modules/@sentry/src/envelope.ts","../node_modules/@sentry/src/exports.ts","../node_modules/@sentry/src/hub.ts","../node_modules/@sentry/src/integration.ts","../node_modules/@sentry/src/integrations/functiontostring.ts","../node_modules/@sentry/src/integrations/inboundfilters.ts","../node_modules/@sentry/src/metrics/constants.ts","../node_modules/@sentry/src/metrics/utils.ts","../node_modules/@sentry/src/scope.ts","../node_modules/@sentry/src/tracing/span.ts","../node_modules/@sentry/src/tracing/trace.ts","../node_modules/@sentry/src/tracing/utils.ts","../node_modules/@sentry/src/promisebuffer.ts","../node_modules/@sentry/src/transports/base.ts","../node_modules/@sentry/src/utils/applyScopeDataToEvent.ts","../node_modules/@sentry/src/utils/prepareEvent.ts","../node_modules/@sentry/fullstory/dist/index.es.js","../node_modules/@sentry/src/aggregate-errors.ts","../node_modules/@sentry/src/browser.ts","../node_modules/@sentry/src/dsn.ts","../node_modules/@sentry/src/env.ts","../node_modules/@sentry/src/error.ts","../node_modules/@sentry/src/instrument/dom.ts","../node_modules/@sentry/src/is.ts","../node_modules/@sentry/src/logger.ts","../node_modules/@sentry/src/misc.ts","../node_modules/@sentry/src/normalize.ts","../node_modules/@sentry/src/memo.ts","../node_modules/@sentry/src/object.ts","../node_modules/@sentry/src/ratelimit.ts","../node_modules/@sentry/src/stacktrace.ts","../node_modules/@sentry/src/string.ts","../node_modules/@sentry/src/supports.ts","../node_modules/@sentry/src/syncpromise.ts","../node_modules/@sentry/src/tracing.ts","../node_modules/@sentry/src/url.ts"],"sourcesContent":["import type { ClientReport, ClientReportEnvelope, ClientReportItem } from '@sentry/types';\n\nimport { createEnvelope } from './envelope';\nimport { dateTimestampInSeconds } from './time';\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 */\nexport function createClientReportEnvelope(\n discarded_events: ClientReport['discarded_events'],\n dsn?: string,\n timestamp?: number,\n): ClientReportEnvelope {\n const clientReportItem: ClientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n","import type { Scope } from '@sentry/core';\nimport { BaseClient, SDK_VERSION } from '@sentry/core';\nimport type {\n BrowserClientProfilingOptions,\n BrowserClientReplayOptions,\n ClientOptions,\n Event,\n EventHint,\n Options,\n ParameterizedString,\n Severity,\n SeverityLevel,\n UserFeedback,\n} from '@sentry/types';\nimport { createClientReportEnvelope, dsnToString, getSDKSource, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { eventFromException, eventFromMessage } from './eventbuilder';\nimport { WINDOW } from './helpers';\nimport type { BrowserTransportOptions } from './transports/types';\nimport { createUserFeedbackEnvelope } from './userfeedback';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\nexport type BrowserOptions = Options &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * Configuration options for the Sentry Browser SDK Client class\n * @see BrowserClient for more information.\n */\nexport type BrowserClientOptions = ClientOptions &\n BrowserClientReplayOptions &\n BrowserClientProfilingOptions;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n public constructor(options: BrowserClientOptions) {\n const 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 public eventFromException(exception: unknown, hint?: EventHint): PromiseLike {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n */\n public captureUserFeedback(feedback: UserFeedback): void {\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 protected _prepareEvent(event: Event, hint: EventHint, scope?: Scope): PromiseLike {\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 private _flushOutcomes(): void {\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","declare const __DEBUG_BUILD__: boolean;\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 */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n","import { getClient } from '@sentry/core';\nimport type {\n Event,\n EventHint,\n Exception,\n ParameterizedString,\n Severity,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isParameterizedString,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: 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 */\nexport function eventFromPlainObject(\n stackParser: StackParser,\n exception: Record,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const client = getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n\n const event: 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 as { values: Exception[] }).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const 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: Error & { framesToPop?: number }): number {\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: Error & { message: { error?: Error } }): string {\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 */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike {\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 */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike {\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 */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\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 as Record;\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 as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception: Record,\n { isUnhandledRejection }: { isUnhandledRejection?: boolean },\n): string {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: Prototype | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n","import { captureException, withScope } from '@sentry/core';\nimport type { DsnLike, Mechanism, WrappedFunction } from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n addExceptionMechanism,\n addExceptionTypeValue,\n addNonEnumerableProperty,\n getOriginalFunction,\n markFunctionWrapped,\n} from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\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 */\nexport function wrap(\n fn: WrappedFunction,\n options: {\n mechanism?: Mechanism;\n } = {},\n before?: WrappedFunction,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): any {\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: WrappedFunction = function (this: unknown): void {\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: any) => 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') as PropertyDescriptor;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get(): string {\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 */\nexport interface ReportDialogOptions {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n eventId?: string;\n dsn?: DsnLike;\n user?: {\n email?: string;\n name?: string;\n };\n lang?: string;\n title?: string;\n subtitle?: string;\n subtitle2?: string;\n labelName?: string;\n labelEmail?: string;\n labelComments?: string;\n labelClose?: string;\n labelSubmit?: string;\n errorGeneric?: string;\n errorFormEntry?: string;\n successMessage?: string;\n /** Callback after reportDialog showed up */\n onLoad?(this: void): void;\n /** Callback after reportDialog closed */\n onClose?(this: void): void;\n}\n","import type {\n Client,\n Event,\n EventHint,\n Exception,\n Extras,\n Hub,\n Mechanism,\n ParameterizedString,\n Severity,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\n\nimport { isError, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n const exception: 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: object): string {\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 as Record,\n )}`;\n }\n}\n\n/**\n * Builds and Event from a Exception\n *\n * TODO(v8): Remove getHub fallback\n * @hidden\n */\nexport function eventFromUnknownInput(\n getHubOrClient: (() => Hub) | Client | undefined,\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n): Event {\n const client = typeof getHubOrClient === 'function' ? getHubOrClient().getClient() : getHubOrClient;\n\n let ex: unknown = exception;\n const providedMechanism: Mechanism | undefined =\n hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n const mechanism: Mechanism = providedMechanism || {\n handled: true,\n type: 'generic',\n };\n\n let extras: Extras | undefined;\n\n if (!isError(exception)) {\n if (isPlainObject(exception)) {\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n extras = { ['__serialized__']: normalizeToSize(exception as Record, normalizeDepth) };\n\n const message = getMessageForObject(exception);\n ex = (hint && hint.syntheticException) || new Error(message);\n (ex as Error).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 as string);\n (ex as Error).message = exception as string;\n }\n mechanism.synthetic = true;\n }\n\n const event: Event = {\n exception: {\n values: [exceptionFromError(stackParser, ex as Error)],\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 */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): Event {\n const event: 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","import type { IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent, exceptionFromError } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration';\n\ninterface LinkedErrorsOptions {\n key?: string;\n limit?: number;\n}\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst linkedErrorsIntegration: IntegrationFn = (options: LinkedErrorsOptions = {}) => {\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\nexport const LinkedErrors = convertIntegrationFnToClass(INTEGRATION_NAME, linkedErrorsIntegration);\n","import type { Event, StackParser } from '@sentry/types';\nimport { 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: StackParser): void {\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\nexport function getMetadataForUrl(parser: StackParser, filename: string): any | undefined {\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 */\nexport function addMetadataToStackFrames(parser: StackParser, event: Event): void {\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 */\nexport function stripMetadataFromStackFrames(event: Event): void {\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","import type { EventItem, IntegrationFn } from '@sentry/types';\nimport { forEachEnvelopeItem } from '@sentry/utils';\nimport { convertIntegrationFnToClass } from '../integration';\n\nimport { addMetadataToStackFrames, stripMetadataFromStackFrames } from '../metadata';\n\nconst INTEGRATION_NAME = 'ModuleMetadata';\n\nconst moduleMetadataIntegration: IntegrationFn = () => {\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 as EventItem)[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\nexport const ModuleMetadata = convertIntegrationFnToClass(INTEGRATION_NAME, moduleMetadataIntegration);\n","import type {\n BaseTransportOptions,\n Envelope,\n EnvelopeItemType,\n Event,\n EventItem,\n Transport,\n TransportMakeRequestResponse,\n} from '@sentry/types';\nimport { dsnFromString, forEachEnvelopeItem } from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from '../api';\n\ninterface MatchParam {\n /** The envelope to be sent */\n envelope: Envelope;\n /**\n * A function that returns an event from the envelope if one exists. You can optionally pass an array of envelope item\n * types to filter by - only envelopes matching the given types will be multiplexed.\n * Allowed values are: 'event', 'transaction', 'profile', 'replay_event'\n *\n * @param types Defaults to ['event']\n */\n getEvent(types?: EnvelopeItemType[]): Event | undefined;\n}\n\ntype RouteTo = { dsn: string; release: string };\ntype Matcher = (param: MatchParam) => (string | RouteTo)[];\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nexport function eventFromEnvelope(env: Envelope, types: EnvelopeItemType[]): Event | undefined {\n let event: Event | undefined;\n\n forEachEnvelopeItem(env, (item, type) => {\n if (types.includes(type)) {\n event = Array.isArray(item) ? (item as EventItem)[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: (options: TO) => Transport,\n release: string,\n): (options: TO) => Transport {\n return options => {\n const transport = createTransport(options);\n\n return {\n send: async (envelope: Envelope): Promise => {\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 */\nexport function makeMultiplexedTransport(\n createTransport: (options: TO) => Transport,\n matcher: Matcher,\n): (options: TO) => Transport {\n return options => {\n const fallbackTransport = createTransport(options);\n const otherTransports: Record = {};\n\n function getTransport(dsn: string, release: string | undefined): Transport | undefined {\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: Envelope): Promise {\n function getEvent(types?: EnvelopeItemType[]): Event | undefined {\n const eventTypes: EnvelopeItemType[] = 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 is Transport => !!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: number | undefined): Promise {\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","import type { MetricInstance } from '@sentry/types';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { simpleHash } from './utils';\n\n/**\n * A metric instance representing a counter.\n */\nexport class CounterMetric implements MetricInstance {\n public constructor(private _value: number) {}\n\n /** @inheritDoc */\n public get weight(): number {\n return 1;\n }\n\n /** @inheritdoc */\n public add(value: number): void {\n this._value += value;\n }\n\n /** @inheritdoc */\n public toString(): string {\n return `${this._value}`;\n }\n}\n\n/**\n * A metric instance representing a gauge.\n */\nexport class GaugeMetric implements MetricInstance {\n private _last: number;\n private _min: number;\n private _max: number;\n private _sum: number;\n private _count: number;\n\n public constructor(value: number) {\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 public get weight(): number {\n return 5;\n }\n\n /** @inheritdoc */\n public add(value: number): void {\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 public toString(): string {\n return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}`;\n }\n}\n\n/**\n * A metric instance representing a distribution.\n */\nexport class DistributionMetric implements MetricInstance {\n private _value: number[];\n\n public constructor(first: number) {\n this._value = [first];\n }\n\n /** @inheritDoc */\n public get weight(): number {\n return this._value.length;\n }\n\n /** @inheritdoc */\n public add(value: number): void {\n this._value.push(value);\n }\n\n /** @inheritdoc */\n public toString(): string {\n return this._value.join(':');\n }\n}\n\n/**\n * A metric instance representing a set.\n */\nexport class SetMetric implements MetricInstance {\n private _value: Set;\n\n public constructor(public first: number | string) {\n this._value = new Set([first]);\n }\n\n /** @inheritDoc */\n public get weight(): number {\n return this._value.size;\n }\n\n /** @inheritdoc */\n public add(value: number | string): void {\n this._value.add(value);\n }\n\n /** @inheritdoc */\n public toString(): string {\n return Array.from(this._value)\n .map(val => (typeof val === 'string' ? simpleHash(val) : val))\n .join(':');\n }\n}\n\nexport const METRIC_MAP = {\n [COUNTER_METRIC_TYPE]: CounterMetric,\n [GAUGE_METRIC_TYPE]: GaugeMetric,\n [DISTRIBUTION_METRIC_TYPE]: DistributionMetric,\n [SET_METRIC_TYPE]: SetMetric,\n};\n","import type {\n Client,\n ClientOptions,\n MeasurementUnit,\n MetricBucketItem,\n MetricsAggregator,\n Primitive,\n} from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\nimport { DEFAULT_BROWSER_FLUSH_INTERVAL, NAME_AND_TAG_KEY_NORMALIZATION_REGEX } from './constants';\nimport { METRIC_MAP } from './instance';\nimport type { MetricBucket, MetricType } from './types';\nimport { getBucketKey, sanitizeTags } from './utils';\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 */\nexport class BrowserMetricsAggregator implements MetricsAggregator {\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 private _buckets: MetricBucket;\n private readonly _interval: ReturnType;\n\n public constructor(private readonly _client: Client) {\n this._buckets = new Map();\n this._interval = setInterval(() => this.flush(), DEFAULT_BROWSER_FLUSH_INTERVAL);\n }\n\n /**\n * @inheritDoc\n */\n public add(\n metricType: MetricType,\n unsanitizedName: string,\n value: number | string,\n unit: MeasurementUnit | undefined = 'none',\n unsanitizedTags: Record | undefined = {},\n maybeFloatTimestamp: number | undefined = timestampInSeconds(),\n ): void {\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: MetricBucketItem | undefined = 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 public flush(): void {\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 public close(): void {\n clearInterval(this._interval);\n this.flush();\n }\n}\n","import type { ClientOptions, IntegrationFn } from '@sentry/types';\nimport type { BaseClient } from '../baseclient';\nimport { convertIntegrationFnToClass } from '../integration';\nimport { BrowserMetricsAggregator } from './browser-aggregator';\n\nconst INTEGRATION_NAME = 'MetricsAggregator';\n\nconst metricsAggregatorIntegration: IntegrationFn = () => {\n return {\n name: INTEGRATION_NAME,\n setup(client: BaseClient) {\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\nexport const MetricsAggregator = convertIntegrationFnToClass(INTEGRATION_NAME, metricsAggregatorIntegration);\n","import type { ClientOptions, MeasurementUnit, Primitive } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport type { BaseClient } from '../baseclient';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getClient, getCurrentScope } from '../exports';\nimport { spanToJSON } from '../utils/spanUtils';\nimport { COUNTER_METRIC_TYPE, DISTRIBUTION_METRIC_TYPE, GAUGE_METRIC_TYPE, SET_METRIC_TYPE } from './constants';\nimport { MetricsAggregator } from './integration';\nimport type { MetricType } from './types';\n\ninterface MetricData {\n unit?: MeasurementUnit;\n tags?: Record;\n timestamp?: number;\n}\n\nfunction addToMetricsAggregator(\n metricType: MetricType,\n name: string,\n value: number | string,\n data: MetricData | undefined = {},\n): void {\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: Record = {};\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 */\nexport function increment(name: string, value: number = 1, data?: MetricData): void {\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 */\nexport function distribution(name: string, value: number, data?: MetricData): void {\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 */\nexport function set(name: string, value: number | string, data?: MetricData): void {\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 */\nexport function gauge(name: string, value: number, data?: MetricData): void {\n addToMetricsAggregator(GAUGE_METRIC_TYPE, name, value, data);\n}\n\nexport const metrics = {\n increment,\n distribution,\n set,\n gauge,\n MetricsAggregator,\n};\n","import type { MeasurementUnit } from '@sentry/types';\n\nimport { getActiveTransaction } from './utils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n // eslint-disable-next-line deprecation/deprecation\n const transaction = getActiveTransaction();\n if (transaction) {\n transaction.setMeasurement(name, value, unit);\n }\n}\n","import type { Client, DsnComponents, Hub } from '@sentry/types';\n\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 */\nexport function isSentryRequestUrl(url: string, hubOrClient: Hub | Client | undefined): boolean {\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: string, tunnel: string | undefined): boolean {\n if (!tunnel) {\n return false;\n }\n\n return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url: string, dsn: DsnComponents | undefined): boolean {\n return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str: string): string {\n return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\nfunction isHub(hubOrClient: Hub | Client | undefined): hubOrClient is Hub {\n return (hubOrClient as Hub).getClient !== undefined;\n}\n","import { isNodeEnv } from './node';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Returns true if we are in the browser.\n */\nexport function isBrowser(): boolean {\n // eslint-disable-next-line no-restricted-globals\n return typeof window !== 'undefined' && (!isNodeEnv() || isElectronNodeRenderer());\n}\n\ntype ElectronProcess = { type?: string };\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n (GLOBAL_OBJ as any).process !== undefined && ((GLOBAL_OBJ as any).process as ElectronProcess).type === 'renderer'\n );\n}\n","import { GLOBAL_OBJ } from '@sentry/utils';\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\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n\nexport const REPLAY_SESSION_KEY = 'sentryReplaySession';\nexport const REPLAY_EVENT_NAME = 'replay_event';\nexport const RECORDING_EVENT_NAME = 'replay_recording';\nexport const UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nexport const SESSION_IDLE_PAUSE_DURATION = 300_000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nexport const SESSION_IDLE_EXPIRE_DURATION = 900_000; // 15 minutes in ms\n\n/** Default flush delays */\nexport const DEFAULT_FLUSH_MIN_DELAY = 5_000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nexport const DEFAULT_FLUSH_MAX_DELAY = 5_500;\n\n/* How long to wait for error checkouts */\nexport const BUFFER_CHECKOUT_TIME = 60_000;\n\nexport const RETRY_BASE_INTERVAL = 5000;\nexport const RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nexport const NETWORK_BODY_MAX_SIZE = 150_000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nexport const CONSOLE_ARG_MAX_SIZE = 5_000;\n\n/* Min. time to wait before we consider something a slow click. */\nexport const SLOW_CLICK_THRESHOLD = 3_000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nexport const 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). */\nexport const REPLAY_MAX_EVENT_BUFFER_SIZE = 20_000_000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nexport const MIN_REPLAY_DURATION = 4_999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nexport const MIN_REPLAY_DURATION_LIMIT = 15_000;\n\n/** The max. length of a replay. */\nexport const MAX_REPLAY_DURATION = 3_600_000; // 60 minutes in ms;\n\n/** Default attributes to be ignored when `maskAllText` is enabled */\nexport const DEFAULT_IGNORED_ATTRIBUTES = ['title', 'placeholder'];\n\nexport const 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","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n?.host;\r\n return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n if (!n)\r\n return -1;\r\n const id = this.getMeta(n)?.id;\r\n return id ?? -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n if (tagName === 'OPTION') {\r\n tagName = 'SELECT';\r\n }\r\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n (type && maskInputOptions[type]) ||\r\n type === 'password' ||\r\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n let text = value || '';\r\n if (!isMasked) {\r\n return text;\r\n }\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n return el.getAttribute('value') || '';\r\n }\r\n return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n if (typeof maskAttributeFn === 'function') {\r\n return maskAttributeFn(name, value, element);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n try {\r\n if (unblockSelector && element.matches(unblockSelector)) {\r\n return false;\r\n }\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n for (let eIndex = el.classList.length; eIndex--;) {\r\n const className = el.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n if (!node)\r\n return -1;\r\n if (node.nodeType !== node.ELEMENT_NODE)\r\n return -1;\r\n if (distance > limit)\r\n return -1;\r\n if (matchPredicate(node))\r\n return distance;\r\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n return (node) => {\r\n const el = node;\r\n if (el === null)\r\n return false;\r\n if (className) {\r\n if (typeof className === 'string') {\r\n if (el.matches(`.${className}`))\r\n return true;\r\n }\r\n else if (elementClassMatchesRegex(el, className)) {\r\n return true;\r\n }\r\n }\r\n if (selector && el.matches(selector))\r\n return true;\r\n return false;\r\n };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n let maskDistance = -1;\r\n let unmaskDistance = -1;\r\n if (maskAllText) {\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n if (unmaskDistance < 0) {\r\n return true;\r\n }\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n }\r\n else {\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n if (maskDistance < 0) {\r\n return false;\r\n }\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n }\r\n return maskDistance >= 0\r\n ? unmaskDistance >= 0\r\n ? maskDistance <= unmaskDistance\r\n : true\r\n : unmaskDistance >= 0\r\n ? false\r\n : !!maskAllText;\r\n }\r\n catch (e) {\r\n }\r\n return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n inlineStylesheet,\r\n maskAttributeFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskTextFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if (n.parentNode.sheet?.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n textContent = maskInputFn\r\n ? maskInputFn(textContent, n.parentNode)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (parentTagName === 'OPTION' && textContent) {\r\n const isInputMasked = shouldMaskInput({\r\n type: null,\r\n tagName: parentTagName,\r\n maskInputOptions,\r\n });\r\n textContent = maskInputValue({\r\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n element: n,\r\n value: textContent,\r\n maskInputFn,\r\n });\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' ||\r\n tagName === 'textarea' ||\r\n tagName === 'select' ||\r\n tagName === 'option') {\r\n const el = n;\r\n const type = getInputType(el);\r\n const value = getInputValue(el, toUpperCase(tagName), type);\r\n const checked = el.checked;\r\n if (type !== 'submit' && type !== 'button' && value) {\r\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n type,\r\n tagName: toUpperCase(tagName),\r\n maskInputOptions,\r\n }));\r\n attributes.value = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value,\r\n maskInputFn,\r\n });\r\n }\r\n if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\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;\r\n let { preserveWhiteSpace = true } = options;\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\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 || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n }\r\n : maskAllInputs === false\r\n ? {}\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n const m = match(/^([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n return trim(m[0])\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n })\r\n .split(/\\s*(?![^(]*\\)),\\s*/)\r\n .map((s) => {\r\n return s.replace(/\\u200C/g, ',');\r\n });\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n if (cssText.length >= 1000000) {\r\n return cssText;\r\n }\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n ast.stylesheet.rules.forEach((rule) => {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n const result = cssText.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n cache?.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n doc.defaultView?.customElements &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n const child = doc.createTextNode(value);\r\n for (const c of Array.from(node.childNodes)) {\r\n if (c.nodeType === node.TEXT_NODE) {\r\n node.removeChild(c);\r\n }\r\n }\r\n node.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.setProperty('width', value.toString());\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.setProperty('height', value.toString());\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('');\r\n }\r\n else {\r\n doc.write('');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if (n?.type !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute };\n","import { distanceToMatch, IGNORED_NODE, isShadowRoot, createMatchPredicate } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch {\r\n return () => {\r\n };\r\n }\r\n}\r\nlet nowTimestamp = Date.now;\r\nif (!(/[1-9][0-9]{12}/.test(Date.now().toString()))) {\r\n nowTimestamp = () => new Date().getTime();\r\n}\r\nfunction getWindowScroll(win) {\r\n const doc = win.document;\r\n return {\r\n left: doc.scrollingElement\r\n ? doc.scrollingElement.scrollLeft\r\n : win.pageXOffset !== undefined\r\n ? win.pageXOffset\r\n : doc?.documentElement.scrollLeft ||\r\n doc?.body?.parentElement?.scrollLeft ||\r\n doc?.body?.scrollLeft ||\r\n 0,\r\n top: doc.scrollingElement\r\n ? doc.scrollingElement.scrollTop\r\n : win.pageYOffset !== undefined\r\n ? win.pageYOffset\r\n : doc?.documentElement.scrollTop ||\r\n doc?.body?.parentElement?.scrollTop ||\r\n doc?.body?.scrollTop ||\r\n 0,\r\n };\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (!el)\r\n return false;\r\n const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\r\n if (!checkAncestors) {\r\n const isUnblocked = unblockSelector && el.matches(unblockSelector);\r\n return blockedPredicate(el) && !isUnblocked;\r\n }\r\n const blockDistance = distanceToMatch(el, blockedPredicate);\r\n let unblockDistance = -1;\r\n if (blockDistance < 0) {\r\n return false;\r\n }\r\n if (unblockSelector) {\r\n unblockDistance = distanceToMatch(el, createMatchPredicate(null, unblockSelector));\r\n }\r\n if (blockDistance > -1 && unblockDistance < 0) {\r\n return true;\r\n }\r\n return blockDistance < unblockDistance;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction legacy_isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n const frameElement = node.ownerDocument?.defaultView?.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n?.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n return this.styleIDMap.get(stylesheet) ?? -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\r\nfunction getShadowHost(n) {\r\n let shadowHost = null;\r\n if (n.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n return shadowHost;\r\n}\r\nfunction getRootShadowHost(n) {\r\n let rootShadowHost = n;\r\n let shadowHost;\r\n while ((shadowHost = getShadowHost(rootShadowHost)))\r\n rootShadowHost = shadowHost;\r\n return rootShadowHost;\r\n}\r\nfunction shadowHostInDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n const shadowHost = getRootShadowHost(n);\r\n return doc.contains(shadowHost);\r\n}\r\nfunction inDom(n) {\r\n const doc = n.ownerDocument;\r\n if (!doc)\r\n return false;\r\n return doc.contains(n) || shadowHostInDom(n);\r\n}\r\nlet cachedRequestAnimationFrameImplementation;\r\nfunction getRequestAnimationFrameImplementation() {\r\n if (cachedRequestAnimationFrameImplementation) {\r\n return cachedRequestAnimationFrameImplementation;\r\n }\r\n const document = window.document;\r\n let requestAnimationFrameImplementation = window.requestAnimationFrame;\r\n if (document && typeof document.createElement === 'function') {\r\n try {\r\n const sandbox = document.createElement('iframe');\r\n sandbox.hidden = true;\r\n document.head.appendChild(sandbox);\r\n const contentWindow = sandbox.contentWindow;\r\n if (contentWindow && contentWindow.requestAnimationFrame) {\r\n requestAnimationFrameImplementation =\r\n contentWindow.requestAnimationFrame;\r\n }\r\n document.head.removeChild(sandbox);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return (cachedRequestAnimationFrameImplementation =\r\n requestAnimationFrameImplementation.bind(window));\r\n}\r\nfunction onRequestAnimationFrame(...rest) {\r\n return getRequestAnimationFrameImplementation()(...rest);\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getRootShadowHost, getShadowHost, getWindowHeight, getWindowScroll, getWindowWidth, hasShadowRoot, hookSetter, inDom, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, iterateResolveTree, legacy_isTouchEvent, nowTimestamp, on, onRequestAnimationFrame, patch, polyfill, queueToResolveTrees, shadowHostInDom, throttle, uniqueTextMutations };\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 */\nexport function _nullishCoalesce(lhs: unknown, rhsFn: () => unknown): unknown {\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","var 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 || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, PointerTypes, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue, ignoreAttribute, transformAttribute, toLowerCase, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, hasShadowRoot, inDom, getShadowHost, isSerializedIframe, isSerializedStylesheet } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n this.tail = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = current?.next || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n if (node.next === null) {\r\n this.tail = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n else {\r\n this.tail = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n else {\r\n this.tail = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addedIds = new Set();\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n if (!n.parentNode || !inDom(n)) {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(getShadowHost(n))\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskAllText: this.maskAllText,\r\n unblockSelector: this.unblockSelector,\r\n maskTextClass: this.maskTextClass,\r\n unmaskTextClass: this.unmaskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n unmaskTextSelector: this.unmaskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskAttributeFn: this.maskAttributeFn,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n addedIds.add(sn.id);\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of this.movedSet) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of this.addedSet) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n let tailNode = addList.tail;\r\n while (tailNode) {\r\n const _node = tailNode;\r\n tailNode = tailNode.previous;\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => ({\r\n id: this.mirror.getId(text.node),\r\n value: text.value,\r\n }))\r\n .filter((text) => !addedIds.has(text.id))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => {\r\n const { attributes } = attribute;\r\n if (typeof attributes.style === 'string') {\r\n const diffAsStr = JSON.stringify(attribute.styleDiff);\r\n const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\r\n if (diffAsStr.length < attributes.style.length) {\r\n if ((diffAsStr + unchangedAsStr).split('var(').length ===\r\n attributes.style.split('var(').length) {\r\n attributes.style = attribute.styleDiff;\r\n }\r\n }\r\n }\r\n return {\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attributes,\r\n };\r\n })\r\n .filter((attribute) => !addedIds.has(attribute.id))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n let unattachedDoc;\r\n try {\r\n unattachedDoc = document.implementation.createHTMLDocument();\r\n }\r\n catch (e) {\r\n unattachedDoc = this.doc;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, this.maskAllText) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value)\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let attributeName = m.attributeName;\r\n let value = m.target.getAttribute(attributeName);\r\n if (attributeName === 'value') {\r\n const type = getInputType(target);\r\n const tagName = target.tagName;\r\n value = getInputValue(target, tagName, type);\r\n const isInputMasked = shouldMaskInput({\r\n maskInputOptions: this.maskInputOptions,\r\n tagName,\r\n type,\r\n });\r\n const forceMask = needMaskingText(m.target, this.maskTextClass, this.maskTextSelector, this.unmaskTextClass, this.unmaskTextSelector, isInputMasked);\r\n value = maskInputValue({\r\n isMasked: forceMask,\r\n element: target,\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributes.find((a) => a.node === m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n styleDiff: {},\r\n _unchangedStyles: {},\r\n };\r\n this.attributes.push(item);\r\n }\r\n if (attributeName === 'type' &&\r\n target.tagName === 'INPUT' &&\r\n (m.oldValue || '').toLowerCase() === 'password') {\r\n target.setAttribute('data-rr-is-password', 'true');\r\n }\r\n if (!ignoreAttribute(target.tagName, attributeName)) {\r\n item.attributes[attributeName] = transformAttribute(this.doc, toLowerCase(target.tagName), toLowerCase(attributeName), value, target, this.maskAttributeFn);\r\n if (attributeName === 'style') {\r\n const old = unattachedDoc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n item.styleDiff[pname] = newValue;\r\n }\r\n else {\r\n item.styleDiff[pname] = [newValue, newPriority];\r\n }\r\n }\r\n else {\r\n item._unchangedStyles[pname] = [newValue, newPriority];\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n item.styleDiff[pname] = false;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, true)) {\r\n return;\r\n }\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, this.unblockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.processedNodeManager.inOtherBuffer(n, this))\r\n return;\r\n if (this.addedSet.has(n) || this.movedSet.has(n))\r\n return;\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, this.unblockSelector, false)) {\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n if (hasShadowRoot(n)) {\r\n n.shadowRoot.childNodes.forEach((childN) => {\r\n this.processedNodeManager.add(childN, this);\r\n this.genAdds(childN, n);\r\n });\r\n }\r\n }\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'unblockSelector',\r\n 'maskAllText',\r\n 'maskTextClass',\r\n 'unmaskTextClass',\r\n 'maskTextSelector',\r\n 'unmaskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskAttributeFn',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n 'processedNodeManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","let errorHandler;\r\nfunction registerErrorHandler(handler) {\r\n errorHandler = handler;\r\n}\r\nfunction unregisterErrorHandler() {\r\n errorHandler = undefined;\r\n}\r\nconst callbackWrapper = (cb) => {\r\n if (!errorHandler) {\r\n return cb;\r\n }\r\n const rrwebWrapped = ((...rest) => {\r\n try {\r\n return cb(...rest);\r\n }\r\n catch (error) {\r\n if (errorHandler && errorHandler(error) === true) {\r\n return () => {\r\n };\r\n }\r\n throw error;\r\n }\r\n });\r\n return rrwebWrapped;\r\n};\n\nexport { callbackWrapper, registerErrorHandler, unregisterErrorHandler };\n","import { toLowerCase, toUpperCase, getInputType, getInputValue, shouldMaskInput, needMaskingText, maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowScroll, hookSetter, patch, legacy_isTouchEvent, nowTimestamp, getWindowHeight, getWindowWidth } from '../utils.js';\nimport { MouseInteractions, IncrementalSource, PointerTypes } from '../../../types/dist/rrweb-types.js';\nimport MutationBuffer from './mutation.js';\nimport { callbackWrapper } from './error-handler.js';\n\nconst mutationBuffers = [];\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n }\r\n catch {\r\n }\r\n return event && event.target;\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = window?.Zone?.__symbol__?.('MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(callbackWrapper((mutations) => {\r\n if (options.onMutation && options.onMutation(mutations) === false) {\r\n return;\r\n }\r\n mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\r\n }));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle(callbackWrapper((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }), callbackThreshold);\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = legacy_isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = nowTimestamp();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: nowTimestamp() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }), threshold, {\r\n trailing: false,\r\n }));\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n let currentPointerType = null;\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n let pointerType = null;\r\n let thisEventKey = eventKey;\r\n if ('pointerType' in event) {\r\n switch (event.pointerType) {\r\n case 'mouse':\r\n pointerType = PointerTypes.Mouse;\r\n break;\r\n case 'touch':\r\n pointerType = PointerTypes.Touch;\r\n break;\r\n case 'pen':\r\n pointerType = PointerTypes.Pen;\r\n break;\r\n }\r\n if (pointerType === PointerTypes.Touch) {\r\n if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\r\n thisEventKey = 'TouchStart';\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\r\n thisEventKey = 'TouchEnd';\r\n }\r\n }\r\n else if (pointerType === PointerTypes.Pen) ;\r\n }\r\n else if (legacy_isTouchEvent(event)) {\r\n pointerType = PointerTypes.Touch;\r\n }\r\n if (pointerType !== null) {\r\n currentPointerType = pointerType;\r\n if ((thisEventKey.startsWith('Touch') &&\r\n pointerType === PointerTypes.Touch) ||\r\n (thisEventKey.startsWith('Mouse') &&\r\n pointerType === PointerTypes.Mouse)) {\r\n pointerType = null;\r\n }\r\n }\r\n else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\r\n pointerType = currentPointerType;\r\n currentPointerType = null;\r\n }\r\n const e = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n callbackWrapper(mouseInteractionCb)({\r\n type: MouseInteractions[thisEventKey],\r\n id,\r\n x: clientX,\r\n y: clientY,\r\n ...(pointerType !== null && { pointerType }),\r\n });\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n let eventName = toLowerCase(eventKey);\r\n const handler = getHandler(eventKey);\r\n if (window.PointerEvent) {\r\n switch (MouseInteractions[eventKey]) {\r\n case MouseInteractions.MouseDown:\r\n case MouseInteractions.MouseUp:\r\n eventName = eventName.replace('mouse', 'pointer');\r\n break;\r\n case MouseInteractions.TouchStart:\r\n case MouseInteractions.TouchEnd:\r\n return;\r\n }\r\n }\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, unblockSelector, sampling, }) {\r\n const updatePosition = callbackWrapper(throttle(callbackWrapper((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc && doc.defaultView) {\r\n const scrollLeftTop = getWindowScroll(doc.defaultView);\r\n scrollCb({\r\n id,\r\n x: scrollLeftTop.left,\r\n y: scrollLeftTop.top,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }), sampling.scroll || 100));\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = callbackWrapper(throttle(callbackWrapper(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }), 200));\r\n return on('resize', updateDimension, win);\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, unblockSelector, ignoreClass, ignoreSelector, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n const tagName = target && toUpperCase(target.tagName);\r\n if (tagName === 'OPTION')\r\n target = target.parentElement;\r\n if (!target ||\r\n !tagName ||\r\n INPUT_TAGS.indexOf(tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const el = target;\r\n if (el.classList.contains(ignoreClass) ||\r\n (ignoreSelector && el.matches(ignoreSelector))) {\r\n return;\r\n }\r\n const type = getInputType(target);\r\n let text = getInputValue(el, tagName, type);\r\n let isChecked = false;\r\n const isInputMasked = shouldMaskInput({\r\n maskInputOptions,\r\n tagName,\r\n type,\r\n });\r\n const forceMask = needMaskingText(target, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked);\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n text = maskInputValue({\r\n isMasked: forceMask,\r\n element: target,\r\n value: text,\r\n maskInputFn,\r\n });\r\n cbWithDedup(target, userTriggeredOnInput\r\n ? { text, isChecked, userTriggered }\r\n : { text, isChecked });\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n const text = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value: getInputValue(el, tagName, type),\r\n maskInputFn,\r\n });\r\n cbWithDedup(el, userTriggeredOnInput\r\n ? { text, isChecked: !isChecked, userTriggered: false }\r\n : { text, isChecked: !isChecked });\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n callbackWrapper(inputCb)({\r\n ...v,\r\n id,\r\n });\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, callbackWrapper(eventHandler), doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n callbackWrapper(eventHandler)({\r\n target: this,\r\n isTrusted: false,\r\n });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((hasNestedCSSRule('CSSGroupingRule') &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (hasNestedCSSRule('CSSMediaRule') &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (hasNestedCSSRule('CSSSupportsRule') &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (hasNestedCSSRule('CSSConditionRule') &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\r\n return () => {\r\n };\r\n }\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [text] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (canMonkeyPatchNestedCSSRule('CSSGroupingRule')) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (canMonkeyPatchNestedCSSRule('CSSMediaRule')) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSConditionRule')) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (canMonkeyPatchNestedCSSRule('CSSSupportsRule')) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = new Proxy(unmodifiedFunctions[typeKey].insertRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [rule, index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(thisArg),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n type.prototype.deleteRule = new Proxy(unmodifiedFunctions[typeKey].deleteRule, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [index] = argumentsList;\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(thisArg), index] },\r\n ],\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n });\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? host.defaultView?.Document\r\n : host.ownerDocument?.defaultView?.ShadowRoot;\r\n const originalPropertyDescriptor = patchTarget?.prototype\r\n ? Object.getOwnPropertyDescriptor(patchTarget?.prototype, 'adoptedStyleSheets')\r\n : undefined;\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n return originalPropertyDescriptor.get?.call(this);\r\n },\r\n set(sheets) {\r\n const result = originalPropertyDescriptor.set?.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return callbackWrapper(() => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n });\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [property, value, priority] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(thisArg, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\r\n apply: callbackWrapper((target, thisArg, argumentsList) => {\r\n const [property] = argumentsList;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(thisArg, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId(thisArg.parentRule?.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(thisArg.parentRule),\r\n });\r\n }\r\n return target.apply(thisArg, argumentsList);\r\n }),\r\n });\r\n return callbackWrapper(() => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n });\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, unblockSelector, mirror, sampling, doc, }) {\r\n const handler = callbackWrapper((type) => throttle(callbackWrapper((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n });\r\n }), sampling.media || 500));\r\n const handlers = [\r\n on('play', handler(0), doc),\r\n on('pause', handler(1), doc),\r\n on('seeked', handler(2), doc),\r\n on('volumechange', handler(3), doc),\r\n on('ratechange', handler(4), doc),\r\n ];\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(callbackWrapper(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }), 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return callbackWrapper(() => {\r\n handlers.forEach((h) => h());\r\n });\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, selectionCb, } = param;\r\n let collapsed = true;\r\n const updateSelection = callbackWrapper(() => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && selection?.isCollapsed))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, unblockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, unblockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n });\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction initCustomElementObserver({ doc, customElementCb, }) {\r\n const win = doc.defaultView;\r\n if (!win || !win.customElements) {\r\n return () => {\r\n };\r\n }\r\n const restoreHandler = patch(win.customElements, 'define', function (original) {\r\n return function (name, constructor, options) {\r\n try {\r\n customElementCb({\r\n define: {\r\n name,\r\n },\r\n });\r\n }\r\n catch (e) {\r\n }\r\n return original.apply(this, [name, constructor, options]);\r\n };\r\n });\r\n return restoreHandler;\r\n}\r\nfunction initObservers(o, _hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n const mutationObserver = initMutationObserver(o, o.doc);\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o, {\r\n win: currentWindow,\r\n });\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n const fontObserver = o.collectFonts\r\n ? initFontObserver(o)\r\n : () => {\r\n };\r\n const selectionObserver = initSelectionObserver(o);\r\n const customElementObserver = initCustomElementObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return callbackWrapper(() => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n customElementObserver();\r\n pluginHandlers.forEach((h) => h());\r\n });\r\n}\r\nfunction hasNestedCSSRule(prop) {\r\n return typeof window[prop] !== 'undefined';\r\n}\r\nfunction canMonkeyPatchNestedCSSRule(prop) {\r\n return Boolean(typeof window[prop] !== 'undefined' &&\r\n window[prop].prototype &&\r\n 'insertRule' in window[prop].prototype &&\r\n 'deleteRule' in window[prop].prototype);\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId, NodeType } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\n\nclass IframeManagerNoop {\r\n constructor() {\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n }\r\n addIframe() {\r\n }\r\n addLoadListener() {\r\n }\r\n attachIframe() {\r\n }\r\n}\r\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.crossOriginIframeRootIdMap = new WeakMap();\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n this.loadListener?.(iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n const crossOriginMessageEvent = message;\r\n if (crossOriginMessageEvent.data.type !== 'rrweb' ||\r\n crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\r\n return;\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, crossOriginMessageEvent.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, crossOriginMessageEvent.data.isCheckout);\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n const rootId = e.data.node.id;\r\n this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\r\n this.patchRootIdOnNode(e.data.node, rootId);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\r\n rootId && this.patchRootIdOnNode(n.node, rootId);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n e.data.styles?.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id', 'rootId']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n patchRootIdOnNode(node, rootId) {\r\n if (node.type !== NodeType.Document && !node.rootId)\r\n node.rootId = rootId;\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.patchRootIdOnNode(child, rootId);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager, IframeManagerNoop };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch, inDom } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManagerNoop {\r\n init() {\r\n }\r\n addShadowRoot() {\r\n }\r\n observeAttachShadow() {\r\n }\r\n reset() {\r\n }\r\n}\r\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restoreHandlers = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n this.init();\r\n }\r\n init() {\r\n this.reset();\r\n this.patchAttachShadow(Element, document);\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n const observer = initMutationObserver({\r\n ...this.bypassOptions,\r\n doc,\r\n mutationCb: this.mutationCb,\r\n mirror: this.mirror,\r\n shadowDomManager: this,\r\n }, shadowRoot);\r\n this.restoreHandlers.push(() => observer.disconnect());\r\n this.restoreHandlers.push(initScrollObserver({\r\n ...this.bypassOptions,\r\n scrollCb: this.scrollCb,\r\n doc: shadowRoot,\r\n mirror: this.mirror,\r\n }));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n this.restoreHandlers.push(initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot));\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (!iframeElement.contentWindow || !iframeElement.contentDocument)\r\n return;\r\n this.patchAttachShadow(iframeElement.contentWindow.Element, iframeElement.contentDocument);\r\n }\r\n patchAttachShadow(element, doc) {\r\n const manager = this;\r\n this.restoreHandlers.push(patch(element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot && inDom(this))\r\n manager.addShadowRoot(this.shadowRoot, doc);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n reset() {\r\n this.restoreHandlers.forEach((handler) => {\r\n try {\r\n handler();\r\n }\r\n catch (e) {\r\n }\r\n });\r\n this.restoreHandlers = [];\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager, ShadowDomManagerNoop };\n","import { onRequestAnimationFrame, isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/rrweb-types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport { getImageBitmapDataUrlWorkerURL as t } from '../../../../../rrweb-worker/es/rrweb-worker/index.js';\nimport { callbackWrapper } from '../../error-handler.js';\n\nclass CanvasManagerNoop {\r\n reset() {\r\n }\r\n freeze() {\r\n }\r\n unfreeze() {\r\n }\r\n lock() {\r\n }\r\n unlock() {\r\n }\r\n}\r\nclass CanvasManager {\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, unblockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n callbackWrapper(() => {\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, unblockSelector, {\r\n dataURLOptions,\r\n });\r\n })();\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new Worker(t());\r\n worker.onmessage = (e) => {\r\n const data = e.data;\r\n const { id } = data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in data))\r\n return;\r\n const { base64, type, width, height } = data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas().forEach((canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\r\n context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n createImageBitmap(canvas)\r\n .then((bitmap) => {\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n })\r\n .catch((error) => {\r\n callbackWrapper(() => {\r\n throw error;\r\n })();\r\n });\r\n });\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = onRequestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, false);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, unblockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n onRequestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n onRequestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const { type, ...rest } = value;\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager, CanvasManagerNoop };\n","import { stringifyRule } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n styles.push({\r\n styleId,\r\n rules: Array.from(sheet.rules || CSSRule, (r, index) => ({\r\n rule: stringifyRule(r),\r\n index,\r\n })),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","import { onRequestAnimationFrame } from '../utils.js';\n\nclass ProcessedNodeManager {\r\n constructor() {\r\n this.nodeMap = new WeakMap();\r\n this.loop = true;\r\n this.periodicallyClear();\r\n }\r\n periodicallyClear() {\r\n onRequestAnimationFrame(() => {\r\n this.clear();\r\n if (this.loop)\r\n this.periodicallyClear();\r\n });\r\n }\r\n inOtherBuffer(node, thisBuffer) {\r\n const buffers = this.nodeMap.get(node);\r\n return (buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer));\r\n }\r\n add(node, buffer) {\r\n this.nodeMap.set(node, (this.nodeMap.get(node) || new Set()).add(buffer));\r\n }\r\n clear() {\r\n this.nodeMap = new WeakMap();\r\n }\r\n destroy() {\r\n this.loop = false;\r\n }\r\n}\n\nexport { ProcessedNodeManager as default };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, nowTimestamp, getWindowWidth, getWindowHeight, getWindowScroll, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/rrweb-types.js';\nimport { IframeManagerNoop, IframeManager } from './iframe-manager.js';\nimport { ShadowDomManagerNoop, ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManagerNoop, CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\nimport ProcessedNodeManager from './processed-node-manager.js';\nimport { callbackWrapper, unregisterErrorHandler, registerErrorHandler } from './error-handler.js';\n\nfunction wrapEvent(e) {\r\n const eWithTime = e;\r\n eWithTime.timestamp = nowTimestamp();\r\n return eWithTime;\r\n}\r\nlet _wrappedEmit;\r\nlet _takeFullSnapshot;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\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'\r\n ? options.recordAfter\r\n : 'load', userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), errorHandler, onMutation, getCanvasManager, } = options;\r\n registerErrorHandler(errorHandler);\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n if (window.parent.document) {\r\n passEmitsToParent = false;\r\n }\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n radio: true,\r\n checkbox: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : {};\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn &&\r\n !passEmitsToParent) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n const wrappedEmit = (e, isCheckout) => {\r\n if (mutationBuffers[0]?.isFrozen() &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit?.(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n origin: window.location.origin,\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n _wrappedEmit = wrappedEmit;\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n ...m,\r\n },\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Scroll,\r\n ...p,\r\n },\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CanvasMutation,\r\n ...p,\r\n },\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.AdoptedStyleSheet,\r\n ...a,\r\n },\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === 'boolean' && __RRWEB_EXCLUDE_IFRAME__\r\n ? new IframeManagerNoop()\r\n : new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n const processedNodeManager = new ProcessedNodeManager();\r\n const canvasManager = _getCanvasManager(getCanvasManager, {\r\n recordCanvas,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n sampling: sampling['canvas'],\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === 'boolean' &&\r\n __RRWEB_EXCLUDE_SHADOW_DOM__\r\n ? new ShadowDomManagerNoop()\r\n : new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n onMutation,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n processedNodeManager,\r\n },\r\n mirror,\r\n });\r\n const takeFullSnapshot = (isCheckout = false) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n shadowDomManager.init();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskAttributeFn,\r\n maskInputFn,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: getWindowScroll(window),\r\n },\r\n }));\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n _takeFullSnapshot = takeFullSnapshot;\r\n try {\r\n const handlers = [];\r\n const observe = (doc) => {\r\n return callbackWrapper(initObservers)({\r\n onMutation,\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.MouseInteraction,\r\n ...d,\r\n },\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.ViewportResize,\r\n ...d,\r\n },\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Input,\r\n ...v,\r\n },\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.MediaInteraction,\r\n ...p,\r\n },\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.StyleSheetRule,\r\n ...r,\r\n },\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.StyleDeclaration,\r\n ...r,\r\n },\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Font,\r\n ...p,\r\n },\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Selection,\r\n ...p,\r\n },\r\n }));\r\n },\r\n customElementCb: (c) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CustomElement,\r\n ...c,\r\n },\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n ignoreSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskAttributeFn,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n unblockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n processedNodeManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: plugins\r\n ?.filter((p) => p.observer)\r\n ?.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n })) || [],\r\n }, {});\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n try {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n if (recordAfter === 'DOMContentLoaded')\r\n init();\r\n }));\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n if (recordAfter === 'load')\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n processedNodeManager.destroy();\r\n _takeFullSnapshot = undefined;\r\n unregisterErrorHandler();\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nfunction addCustomEvent(tag, payload) {\r\n if (!_wrappedEmit) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n _wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n}\r\nfunction freezePage() {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n}\r\nfunction takeFullSnapshot(isCheckout) {\r\n if (!_takeFullSnapshot) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n _takeFullSnapshot(isCheckout);\r\n}\r\nfunction wrappedEmit(e) {\r\n if (!_wrappedEmit) {\r\n return;\r\n }\r\n _wrappedEmit(e);\r\n}\r\nrecord.mirror = mirror;\r\nrecord.takeFullSnapshot = takeFullSnapshot;\r\nfunction _getCanvasManager(getCanvasManagerFn, options) {\r\n return getCanvasManagerFn\r\n ? getCanvasManagerFn({\r\n ...options,\r\n mirror,\r\n win: window,\r\n mutationCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CanvasMutation,\r\n ...p,\r\n },\r\n })),\r\n })\r\n : new CanvasManagerNoop();\r\n}\r\nfunction getCanvasManager(options) {\r\n return new CanvasManager(options);\r\n}\n\nexport { addCustomEvent, record as default, freezePage, getCanvasManager, mirror, takeFullSnapshot };\n","type ClassOption = string | RegExp;\n\n/** Duplicate this from @sentry-internal/rrweb so we can export this as well. */\nexport const ReplayEventTypeDomContentLoaded = 0;\nexport const ReplayEventTypeLoad = 1;\nexport const ReplayEventTypeFullSnapshot = 2;\nexport const ReplayEventTypeIncrementalSnapshot = 3;\nexport const ReplayEventTypeMeta = 4;\nexport const ReplayEventTypeCustom = 5;\nexport const ReplayEventTypePlugin = 6;\n\nexport type ReplayEventType =\n | typeof ReplayEventTypeDomContentLoaded\n | typeof ReplayEventTypeLoad\n | typeof ReplayEventTypeFullSnapshot\n | typeof ReplayEventTypeIncrementalSnapshot\n | typeof ReplayEventTypeMeta\n | typeof ReplayEventTypeCustom\n | typeof ReplayEventTypePlugin;\n\n/**\n * This is a partial copy of rrweb's eventWithTime type which only contains the properties\n * we specifcally need in the SDK.\n */\nexport type ReplayEventWithTime = {\n type: ReplayEventType;\n data: unknown;\n timestamp: number;\n delay?: number;\n};\n\n/**\n * This is a partial copy of rrweb's recording options which only contains the properties\n * we specifically us in the SDK. Users can specify additional properties, hence we add the\n * Record union type.\n */\nexport type RrwebRecordOptions = {\n maskAllText?: boolean;\n maskAllInputs?: boolean;\n blockClass?: ClassOption;\n ignoreClass?: string;\n maskTextClass?: ClassOption;\n maskTextSelector?: string;\n blockSelector?: string;\n maskInputOptions?: Record;\n} & Record;\n\nexport interface CanvasManagerInterface {\n reset(): void;\n freeze(): void;\n unfreeze(): void;\n lock(): void;\n unlock(): void;\n}\n\nexport interface GetCanvasManagerOptions {\n recordCanvas: boolean;\n blockClass: string | RegExp;\n blockSelector: string | null;\n unblockSelector: string | null;\n sampling?: 'all' | number;\n dataURLOptions: Partial<{\n type: string;\n quality: number;\n }>;\n}\n","/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nexport function timestampToMs(timestamp: number): number {\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 */\nexport function timestampToS(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a breadcrumb event to replay.\n */\nexport function addBreadcrumbEvent(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n if (breadcrumb.category === 'sentry.transaction') {\n return;\n }\n\n if (['ui.click', 'ui.input'].includes(breadcrumb.category as string)) {\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, 1_000),\n },\n });\n\n // Do not flush after console log messages\n return breadcrumb.category === 'console';\n });\n}\n","import type { INode } from '@sentry-internal/rrweb-snapshot';\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nexport function getClosestInteractive(element: Element): 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 */\nexport function getClickTargetNode(event: Event | MouseEvent | Node): Node | INode | null {\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. */\nexport function getTargetNode(event: Node | { target: EventTarget | null }): Node | INode | null {\n if (isEventWithTarget(event)) {\n return event.target as Node | null;\n }\n\n return event;\n}\n\nfunction isEventWithTarget(event: unknown): event is { target: EventTarget | null } {\n return typeof event === 'object' && !!event && 'target' in event;\n}\n","import { fill } from '@sentry/utils';\n\nimport { WINDOW } from '../../constants';\n\ntype WindowOpenHandler = () => void;\n\nlet handlers: undefined | WindowOpenHandler[];\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nexport function onWindowOpen(cb: WindowOpenHandler): () => void {\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 as WindowOpenHandler[]).splice(pos, 1);\n }\n };\n}\n\nfunction monkeyPatchWindowOpen(): void {\n fill(WINDOW, 'open', function (originalWindowOpen: () => void): () => void {\n return function (...args: unknown[]): void {\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","import { IncrementalSource, MouseInteractions, record } from '@sentry-internal/rrweb';\nimport type { Breadcrumb } from '@sentry/types';\n\nimport { WINDOW } from '../constants';\nimport type {\n RecordingEvent,\n ReplayClickDetector,\n ReplayContainer,\n ReplayMultiClickFrame,\n ReplaySlowClickFrame,\n SlowClickConfig,\n} from '../types';\nimport { ReplayEventTypeIncrementalSnapshot } from '../types';\nimport { timestampToS } from '../util/timestamp';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClosestInteractive } from './util/domUtils';\nimport { onWindowOpen } from './util/onWindowOpen';\n\ntype ClickBreadcrumb = Breadcrumb & {\n timestamp: number;\n};\n\ninterface Click {\n timestamp: number;\n mutationAfter?: number;\n scrollAfter?: number;\n clickBreadcrumb: ClickBreadcrumb;\n clickCount: number;\n node: HTMLElement;\n}\n\ntype IncrementalRecordingEvent = RecordingEvent & {\n type: typeof ReplayEventTypeIncrementalSnapshot;\n data: { source: IncrementalSource };\n};\n\ntype IncrementalMouseInteractionRecordingEvent = IncrementalRecordingEvent & {\n type: typeof ReplayEventTypeIncrementalSnapshot;\n data: { type: MouseInteractions; id: number };\n};\n\n/** Handle a click. */\nexport function handleClick(clickDetector: ReplayClickDetector, clickBreadcrumb: Breadcrumb, node: HTMLElement): void {\n clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nexport class ClickDetector implements ReplayClickDetector {\n // protected for testing\n protected _lastMutation: number;\n protected _lastScroll: number;\n\n private _clicks: Click[];\n private _teardown: undefined | (() => void);\n\n private _threshold: number;\n private _scollTimeout: number;\n private _timeout: number;\n private _ignoreSelector: string;\n\n private _replay: ReplayContainer;\n private _checkClickTimeout?: ReturnType;\n private _addBreadcrumbEvent: typeof addBreadcrumbEvent;\n\n public constructor(\n replay: ReplayContainer,\n slowClickConfig: 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 public addListeners(): void {\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 public removeListeners(): void {\n if (this._teardown) {\n this._teardown();\n }\n\n if (this._checkClickTimeout) {\n clearTimeout(this._checkClickTimeout);\n }\n }\n\n /** @inheritDoc */\n public handleClick(breadcrumb: Breadcrumb, node: HTMLElement): void {\n if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n return;\n }\n\n const newClick: Click = {\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 public registerMutation(timestamp = Date.now()): void {\n this._lastMutation = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n public registerScroll(timestamp = Date.now()): void {\n this._lastScroll = timestampToS(timestamp);\n }\n\n /** @inheritDoc */\n public registerClick(element: HTMLElement): void {\n const node = getClosestInteractive(element);\n this._handleMultiClick(node as HTMLElement);\n }\n\n /** Count multiple clicks on elements. */\n private _handleMultiClick(node: HTMLElement): void {\n this._getClicks(node).forEach(click => {\n click.clickCount++;\n });\n }\n\n /** Get all pending clicks for a given node. */\n private _getClicks(node: HTMLElement): Click[] {\n return this._clicks.filter(click => click.node === node);\n }\n\n /** Check the clicks that happened. */\n private _checkClicks(): void {\n const timedOutClicks: Click[] = [];\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 private _generateBreadcrumbs(click: Click): void {\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: ReplaySlowClickFrame = {\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: ReplayMultiClickFrame = {\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 private _scheduleCheckClicks(): void {\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 */\nexport function ignoreElement(node: HTMLElement, ignoreSelector: string): boolean {\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: Breadcrumb): breadcrumb is ClickBreadcrumb {\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(): number {\n return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nexport function updateClickDetectorForRecordingEvent(clickDetector: ReplayClickDetector, event: RecordingEvent): void {\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 {\n // ignore errors here, e.g. if accessing something that does not exist\n }\n}\n\nfunction isIncrementalEvent(event: RecordingEvent): event is IncrementalRecordingEvent {\n return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n event: IncrementalRecordingEvent,\n): event is IncrementalMouseInteractionRecordingEvent {\n return event.data.source === IncrementalSource.MouseInteraction;\n}\n","import type { ReplayBreadcrumbFrame } from '../types/replayFrame';\n\n/**\n * Create a breadcrumb for a replay.\n */\nexport function createBreadcrumb(\n breadcrumb: Omit & Partial>,\n): ReplayBreadcrumbFrame {\n return {\n timestamp: Date.now() / 1000,\n type: 'default',\n ...breadcrumb,\n };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n const host = n?.host;\r\n return Boolean(host?.shadowRoot === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction escapeImportStatement(rule) {\r\n const { cssText } = rule;\r\n if (cssText.split('\"').length < 3)\r\n return cssText;\r\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\r\n if (rule.layerName === '') {\r\n statement.push(`layer`);\r\n }\r\n else if (rule.layerName) {\r\n statement.push(`layer(${rule.layerName})`);\r\n }\r\n if (rule.supportsText) {\r\n statement.push(`supports(${rule.supportsText})`);\r\n }\r\n if (rule.media.length) {\r\n statement.push(rule.media.mediaText);\r\n }\r\n return statement.join(' ') + ';';\r\n}\r\nfunction stringifyStylesheet(s) {\r\n try {\r\n const rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules, stringifyRule).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction stringifyRule(rule) {\r\n let importStringified;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n importStringified =\r\n stringifyStylesheet(rule.styleSheet) ||\r\n escapeImportStatement(rule);\r\n }\r\n catch (error) {\r\n }\r\n }\r\n else if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\r\n return fixSafariColons(rule.cssText);\r\n }\r\n return importStringified || rule.cssText;\r\n}\r\nfunction fixSafariColons(cssStringified) {\r\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\r\n return cssStringified.replace(regex, '$1\\\\$2');\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nfunction isCSSStyleRule(rule) {\r\n return 'selectorText' in rule;\r\n}\r\nclass Mirror {\r\n constructor() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n getId(n) {\r\n if (!n)\r\n return -1;\r\n const id = this.getMeta(n)?.id;\r\n return id ?? -1;\r\n }\r\n getNode(id) {\r\n return this.idNodeMap.get(id) || null;\r\n }\r\n getIds() {\r\n return Array.from(this.idNodeMap.keys());\r\n }\r\n getMeta(n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n }\r\n removeNodeFromMap(n) {\r\n const id = this.getId(n);\r\n this.idNodeMap.delete(id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach((childNode) => this.removeNodeFromMap(childNode));\r\n }\r\n }\r\n has(id) {\r\n return this.idNodeMap.has(id);\r\n }\r\n hasNode(node) {\r\n return this.nodeMetaMap.has(node);\r\n }\r\n add(n, meta) {\r\n const id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n replace(id, n) {\r\n const oldNode = this.getNode(id);\r\n if (oldNode) {\r\n const meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n }\r\n reset() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n}\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction shouldMaskInput({ maskInputOptions, tagName, type, }) {\r\n if (tagName === 'OPTION') {\r\n tagName = 'SELECT';\r\n }\r\n return Boolean(maskInputOptions[tagName.toLowerCase()] ||\r\n (type && maskInputOptions[type]) ||\r\n type === 'password' ||\r\n (tagName === 'INPUT' && !type && maskInputOptions['text']));\r\n}\r\nfunction maskInputValue({ isMasked, element, value, maskInputFn, }) {\r\n let text = value || '';\r\n if (!isMasked) {\r\n return text;\r\n }\r\n if (maskInputFn) {\r\n text = maskInputFn(text, element);\r\n }\r\n return '*'.repeat(text.length);\r\n}\r\nfunction toLowerCase(str) {\r\n return str.toLowerCase();\r\n}\r\nfunction toUpperCase(str) {\r\n return str.toUpperCase();\r\n}\r\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n const chunkSize = 50;\r\n for (let x = 0; x < canvas.width; x += chunkSize) {\r\n for (let y = 0; y < canvas.height; y += chunkSize) {\r\n const getImageData = ctx.getImageData;\r\n const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n const pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some((pixel) => pixel !== 0))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isNodeMetaEqual(a, b) {\r\n if (!a || !b || a.type !== b.type)\r\n return false;\r\n if (a.type === NodeType.Document)\r\n return a.compatMode === b.compatMode;\r\n else if (a.type === NodeType.DocumentType)\r\n return (a.name === b.name &&\r\n a.publicId === b.publicId &&\r\n a.systemId === b.systemId);\r\n else if (a.type === NodeType.Comment ||\r\n a.type === NodeType.Text ||\r\n a.type === NodeType.CDATA)\r\n return a.textContent === b.textContent;\r\n else if (a.type === NodeType.Element)\r\n return (a.tagName === b.tagName &&\r\n JSON.stringify(a.attributes) ===\r\n JSON.stringify(b.attributes) &&\r\n a.isSVG === b.isSVG &&\r\n a.needBlock === b.needBlock);\r\n return false;\r\n}\r\nfunction getInputType(element) {\r\n const type = element.type;\r\n return element.hasAttribute('data-rr-is-password')\r\n ? 'password'\r\n : type\r\n ?\r\n toLowerCase(type)\r\n : null;\r\n}\r\nfunction getInputValue(el, tagName, type) {\r\n if (tagName === 'INPUT' && (type === 'radio' || type === 'checkbox')) {\r\n return el.getAttribute('value') || '';\r\n }\r\n return el.value;\r\n}\n\nlet _id = 1;\r\nconst tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nconst IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n const processedTagName = toLowerCase(element.tagName);\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction extractOrigin(url) {\r\n let origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nlet canvasService;\r\nlet canvasCtx;\r\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\r\nconst URL_WWW_MATCH = /^www\\..*/i;\r\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, (origin, quote1, path1, quote2, path2, path3) => {\r\n const filePath = path1 || path2 || path3;\r\n const maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\r\n }\r\n if (filePath[0] === '/') {\r\n return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\r\n }\r\n const stack = href.split('/');\r\n const parts = filePath.split('/');\r\n stack.pop();\r\n for (const part of parts) {\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\r\n });\r\n}\r\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n let pos = 0;\r\n function collectCharacters(regEx) {\r\n let chars;\r\n const match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n const output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n let url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n let descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n let inParens = false;\r\n while (true) {\r\n const c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n const a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n const a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\r\n if (!value) {\r\n return value;\r\n }\r\n if (name === 'src' ||\r\n (name === 'href' && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset') {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style') {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n if (typeof maskAttributeFn === 'function') {\r\n return maskAttributeFn(name, value, element);\r\n }\r\n return value;\r\n}\r\nfunction ignoreAttribute(tagName, name, _value) {\r\n return (tagName === 'video' || tagName === 'audio') && name === 'autoplay';\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\r\n try {\r\n if (unblockSelector && element.matches(unblockSelector)) {\r\n return false;\r\n }\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (let eIndex = element.classList.length; eIndex--;) {\r\n const className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n }\r\n catch (e) {\r\n }\r\n return false;\r\n}\r\nfunction elementClassMatchesRegex(el, regex) {\r\n for (let eIndex = el.classList.length; eIndex--;) {\r\n const className = el.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (checkAncestors) {\r\n return (distanceToMatch(node, (node) => elementClassMatchesRegex(node, regex)) >= 0);\r\n }\r\n else if (node.nodeType === node.ELEMENT_NODE) {\r\n return elementClassMatchesRegex(node, regex);\r\n }\r\n return false;\r\n}\r\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\r\n if (!node)\r\n return -1;\r\n if (node.nodeType !== node.ELEMENT_NODE)\r\n return -1;\r\n if (distance > limit)\r\n return -1;\r\n if (matchPredicate(node))\r\n return distance;\r\n return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\r\n}\r\nfunction createMatchPredicate(className, selector) {\r\n return (node) => {\r\n const el = node;\r\n if (el === null)\r\n return false;\r\n if (className) {\r\n if (typeof className === 'string') {\r\n if (el.matches(`.${className}`))\r\n return true;\r\n }\r\n else if (elementClassMatchesRegex(el, className)) {\r\n return true;\r\n }\r\n }\r\n if (selector && el.matches(selector))\r\n return true;\r\n return false;\r\n };\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\r\n try {\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n let maskDistance = -1;\r\n let unmaskDistance = -1;\r\n if (maskAllText) {\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector));\r\n if (unmaskDistance < 0) {\r\n return true;\r\n }\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector), unmaskDistance >= 0 ? unmaskDistance : Infinity);\r\n }\r\n else {\r\n maskDistance = distanceToMatch(el, createMatchPredicate(maskTextClass, maskTextSelector));\r\n if (maskDistance < 0) {\r\n return false;\r\n }\r\n unmaskDistance = distanceToMatch(el, createMatchPredicate(unmaskTextClass, unmaskTextSelector), maskDistance >= 0 ? maskDistance : Infinity);\r\n }\r\n return maskDistance >= 0\r\n ? unmaskDistance >= 0\r\n ? maskDistance <= unmaskDistance\r\n : true\r\n : unmaskDistance >= 0\r\n ? false\r\n : !!maskAllText;\r\n }\r\n catch (e) {\r\n }\r\n return !!maskAllText;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n const win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n let fired = false;\r\n let readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n const blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n let fired = false;\r\n let styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n const timer = setTimeout(() => {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', () => {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n const { doc, mirror, blockClass, blockSelector, unblockSelector, maskAllText, maskAttributeFn, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, inlineStylesheet, maskInputOptions = {}, maskTextFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, } = options;\r\n const rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode,\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId,\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n inlineStylesheet,\r\n maskAttributeFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n rootId,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n maskTextFn,\r\n maskInputOptions,\r\n maskInputFn,\r\n rootId,\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId,\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId,\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n const docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n const { maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, maskTextFn, maskInputOptions, maskInputFn, rootId, } = options;\r\n const parentTagName = n.parentNode && n.parentNode.tagName;\r\n let textContent = n.textContent;\r\n const isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n const isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n const isTextarea = parentTagName === 'TEXTAREA' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if (n.parentNode.sheet?.cssRules) {\r\n textContent = stringifyStylesheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(`Cannot get CSS styles from text's parentNode. Error: ${err}`, n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n const forceMask = needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText);\r\n if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\r\n textContent = maskInputFn\r\n ? maskInputFn(textContent, n.parentNode)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n if (parentTagName === 'OPTION' && textContent) {\r\n const isInputMasked = shouldMaskInput({\r\n type: null,\r\n tagName: parentTagName,\r\n maskInputOptions,\r\n });\r\n textContent = maskInputValue({\r\n isMasked: needMaskingText(n, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, isInputMasked),\r\n element: n,\r\n value: textContent,\r\n maskInputFn,\r\n });\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle,\r\n rootId,\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n const { doc, blockClass, blockSelector, unblockSelector, inlineStylesheet, maskInputOptions = {}, maskAttributeFn, maskInputFn, dataURLOptions = {}, inlineImages, recordCanvas, keepIframeSrcFn, newlyAddedElement = false, rootId, maskAllText, maskTextClass, unmaskTextClass, maskTextSelector, unmaskTextSelector, } = options;\r\n const needBlock = _isBlockedElement(n, blockClass, blockSelector, unblockSelector);\r\n const tagName = getValidTagName(n);\r\n let attributes = {};\r\n const len = n.attributes.length;\r\n for (let i = 0; i < len; i++) {\r\n const attr = n.attributes[i];\r\n if (!ignoreAttribute(tagName, attr.name, attr.value)) {\r\n attributes[attr.name] = transformAttribute(doc, tagName, toLowerCase(attr.name), attr.value, n, maskAttributeFn);\r\n }\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n const stylesheet = Array.from(doc.styleSheets).find((s) => {\r\n return s.href === n.href;\r\n });\r\n let cssText = null;\r\n if (stylesheet) {\r\n cssText = stringifyStylesheet(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n const cssText = stringifyStylesheet(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' ||\r\n tagName === 'textarea' ||\r\n tagName === 'select' ||\r\n tagName === 'option') {\r\n const el = n;\r\n const type = getInputType(el);\r\n const value = getInputValue(el, toUpperCase(tagName), type);\r\n const checked = el.checked;\r\n if (type !== 'submit' && type !== 'button' && value) {\r\n const forceMask = needMaskingText(el, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, shouldMaskInput({\r\n type,\r\n tagName: toUpperCase(tagName),\r\n maskInputOptions,\r\n }));\r\n attributes.value = maskInputValue({\r\n isMasked: forceMask,\r\n element: el,\r\n value,\r\n maskInputFn,\r\n });\r\n }\r\n if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n const canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n const blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n const blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n const image = n;\r\n const oldValue = image.crossOrigin;\r\n image.crossOrigin = 'anonymous';\r\n const recordInlineImage = () => {\r\n image.removeEventListener('load', recordInlineImage);\r\n try {\r\n canvasService.width = image.naturalWidth;\r\n canvasService.height = image.naturalHeight;\r\n canvasCtx.drawImage(image, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(`Cannot inline img src=${image.currentSrc}! Error: ${err}`);\r\n }\r\n oldValue\r\n ? (attributes.crossOrigin = oldValue)\r\n : image.removeAttribute('crossorigin');\r\n };\r\n if (image.complete && image.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image.addEventListener('load', recordInlineImage);\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n const { width, height } = n.getBoundingClientRect();\r\n attributes = {\r\n class: attributes.class,\r\n rr_width: `${width}px`,\r\n rr_height: `${height}px`,\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n let isCustomElement;\r\n try {\r\n if (customElements.get(tagName))\r\n isCustomElement = true;\r\n }\r\n catch (e) {\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName,\r\n attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock,\r\n rootId,\r\n isCustom: isCustomElement,\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined || maybeAttr === null) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n (sn.attributes.rel === 'preload' ||\r\n sn.attributes.rel === 'modulepreload') &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\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;\r\n let { preserveWhiteSpace = true } = options;\r\n const _serializedNode = serializeNode(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n keepIframeSrcFn,\r\n newlyAddedElement,\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n let id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n const serializedNode = Object.assign(_serializedNode, { id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n let recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n const shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n const bypassOptions = {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskAllText,\r\n unblockSelector,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n };\r\n for (const childN of Array.from(n.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (const childN of Array.from(n.shadowRoot.childNodes)) {\r\n const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, () => {\r\n const iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n const serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, () => {\r\n if (onStylesheetLoad) {\r\n const serializedLinkNode = serializeNodeWithId(n, {\r\n doc,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\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 || {};\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n }\r\n : maskAllInputs === false\r\n ? {}\r\n : maskAllInputs;\r\n const slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true,\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maskAllText,\r\n maskTextClass,\r\n unmaskTextClass,\r\n maskTextSelector,\r\n unmaskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n maskAttributeFn,\r\n maskTextFn,\r\n maskInputFn,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n inlineImages,\r\n recordCanvas,\r\n preserveWhiteSpace,\r\n onSerialize,\r\n onIframeLoad,\r\n iframeLoadTimeout,\r\n onStylesheetLoad,\r\n stylesheetLoadTimeout,\r\n keepIframeSrcFn,\r\n newlyAddedElement: false,\r\n });\r\n}\r\nfunction visitSnapshot(node, onVisit) {\r\n function walk(current) {\r\n onVisit(current);\r\n if (current.type === NodeType.Document ||\r\n current.type === NodeType.Element) {\r\n current.childNodes.forEach(walk);\r\n }\r\n }\r\n walk(node);\r\n}\r\nfunction cleanupSnapshot() {\r\n _id = 1;\r\n}\n\nconst commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options = {}) {\r\n let lineno = 1;\r\n let column = 1;\r\n function updatePosition(str) {\r\n const lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n const i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n const start = { line: lineno, column };\r\n return (node) => {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n class Position {\r\n constructor(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column };\r\n this.source = options.source;\r\n }\r\n }\r\n Position.prototype.content = css;\r\n const errorsList = [];\r\n function error(msg) {\r\n const err = new Error(`${options.source || ''}:${lineno}:${column}: ${msg}`);\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n const rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList,\r\n },\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n let node;\r\n const rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n const m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n const str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules = []) {\r\n let c;\r\n while ((c = comment())) {\r\n if (c) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n const pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n let i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n const str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str,\r\n });\r\n }\r\n function selector() {\r\n const m = match(/^([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n return trim(m[0])\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n })\r\n .split(/\\s*(?![^(]*\\)),\\s*/)\r\n .map((s) => {\r\n return s.replace(/\\u200C/g, ',');\r\n });\r\n }\r\n function declaration() {\r\n const pos = position();\r\n const propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n const prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(`property missing ':'`);\r\n }\r\n const val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n const ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : '',\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n const decls = [];\r\n if (!open()) {\r\n return error(`missing '{'`);\r\n }\r\n comments(decls);\r\n let decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(`missing '}'`);\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n let m;\r\n const vals = [];\r\n const pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations(),\r\n });\r\n }\r\n function atkeyframes() {\r\n const pos = position();\r\n let m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n const name = m[1];\r\n if (!open()) {\r\n return error(`@keyframes missing '{'`);\r\n }\r\n let frame;\r\n let frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@keyframes missing '}'`);\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name,\r\n vendor,\r\n keyframes: frames,\r\n });\r\n }\r\n function atsupports() {\r\n const pos = position();\r\n const m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const supports = trim(m[1]);\r\n if (!open()) {\r\n return error(`@supports missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@supports missing '}'`);\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports,\r\n rules: style,\r\n });\r\n }\r\n function athost() {\r\n const pos = position();\r\n const m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@host missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@host missing '}'`);\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style,\r\n });\r\n }\r\n function atmedia() {\r\n const pos = position();\r\n const m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const media = trim(m[1]);\r\n if (!open()) {\r\n return error(`@media missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@media missing '}'`);\r\n }\r\n return pos({\r\n type: 'media',\r\n media,\r\n rules: style,\r\n });\r\n }\r\n function atcustommedia() {\r\n const pos = position();\r\n const m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2]),\r\n });\r\n }\r\n function atpage() {\r\n const pos = position();\r\n const m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n const sel = selector() || [];\r\n if (!open()) {\r\n return error(`@page missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@page missing '}'`);\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls,\r\n });\r\n }\r\n function atdocument() {\r\n const pos = position();\r\n const m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const vendor = trim(m[1]);\r\n const doc = trim(m[2]);\r\n if (!open()) {\r\n return error(`@document missing '{'`);\r\n }\r\n const style = comments().concat(rules());\r\n if (!close()) {\r\n return error(`@document missing '}'`);\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor,\r\n rules: style,\r\n });\r\n }\r\n function atfontface() {\r\n const pos = position();\r\n const m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(`@font-face missing '{'`);\r\n }\r\n let decls = comments();\r\n let decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(`@font-face missing '}'`);\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls,\r\n });\r\n }\r\n const atimport = _compileAtrule('import');\r\n const atcharset = _compileAtrule('charset');\r\n const atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n const re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return () => {\r\n const pos = position();\r\n const m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n const ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n const pos = position();\r\n const sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations(),\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n const isNode = obj && typeof obj.type === 'string';\r\n const childParent = isNode ? obj : parent;\r\n for (const k of Object.keys(obj)) {\r\n const value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach((v) => {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null,\r\n });\r\n }\r\n return obj;\r\n}\n\nconst tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient',\r\n};\r\nfunction getTagName(n) {\r\n let tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nconst HOVER_SELECTOR = /([^\\\\]):hover/;\r\nconst HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n const cachedStyle = cache?.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n if (cssText.length >= 1000000) {\r\n return cssText;\r\n }\r\n const ast = parse(cssText, {\r\n silent: true,\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n const selectors = [];\r\n ast.stylesheet.rules.forEach((rule) => {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach((selector) => {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n const selectorMatcher = new RegExp(selectors\r\n .filter((selector, index) => selectors.indexOf(selector) === index)\r\n .sort((a, b) => b.length - a.length)\r\n .map((selector) => {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n const result = cssText.replace(selectorMatcher, (selector) => {\r\n const newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return `${selector}, ${newSelector}`;\r\n });\r\n cache?.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n const stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass,\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n const { doc, hackCss, cache } = options;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n const tagName = getTagName(n);\r\n let node;\r\n if (n.isSVG) {\r\n node = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n if (n.isCustom &&\r\n doc.defaultView?.customElements &&\r\n !doc.defaultView.customElements.get(n.tagName))\r\n doc.defaultView.customElements.define(n.tagName, class extends doc.defaultView.HTMLElement {\r\n });\r\n node = doc.createElement(tagName);\r\n }\r\n const specialAttributes = {};\r\n for (const name in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name)) {\r\n continue;\r\n }\r\n let value = n.attributes[name];\r\n if (tagName === 'option' &&\r\n name === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === null) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name.startsWith('rr_')) {\r\n specialAttributes[name] = value;\r\n continue;\r\n }\r\n const isTextarea = tagName === 'textarea' && name === 'value';\r\n const isRemoteOrDynamicCss = tagName === 'style' && name === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n const child = doc.createTextNode(value);\r\n for (const c of Array.from(node.childNodes)) {\r\n if (c.nodeType === node.TEXT_NODE) {\r\n node.removeChild(c);\r\n }\r\n }\r\n node.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name === 'xlink:href') {\r\n node.setAttributeNS('http://www.w3.org/1999/xlink', name, value.toString());\r\n }\r\n else if (name === 'onload' ||\r\n name === 'onclick' ||\r\n name.substring(0, 7) === 'onmouse') {\r\n node.setAttribute('_' + name, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name === 'content') {\r\n node.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n (n.attributes.rel === 'preload' ||\r\n n.attributes.rel === 'modulepreload') &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node.setAttribute(name, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n for (const name in specialAttributes) {\r\n const value = specialAttributes[name];\r\n if (tagName === 'canvas' && name === 'rr_dataURL') {\r\n const image = document.createElement('img');\r\n image.onload = () => {\r\n const ctx = node.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image, 0, 0, image.width, image.height);\r\n }\r\n };\r\n image.src = value.toString();\r\n if (node.RRNodeType)\r\n node.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name === 'rr_dataURL') {\r\n const image = node;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name === 'rr_width') {\r\n node.style.setProperty('width', value.toString());\r\n }\r\n else if (name === 'rr_height') {\r\n node.style.setProperty('height', value.toString());\r\n }\r\n else if (name === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node.currentTime = value;\r\n }\r\n else if (name === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node\r\n .play()\r\n .catch((e) => console.warn('media playback error', e));\r\n break;\r\n case 'paused':\r\n node.pause();\r\n break;\r\n }\r\n }\r\n }\r\n if (n.isShadowHost) {\r\n if (!node.shadowRoot) {\r\n node.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node.shadowRoot.firstChild) {\r\n node.shadowRoot.removeChild(node.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n const { doc, mirror, skipChild = false, hackCss = true, afterAppend, cache, } = options;\r\n if (mirror.has(n.id)) {\r\n const nodeInMirror = mirror.getNode(n.id);\r\n const meta = mirror.getMeta(nodeInMirror);\r\n if (isNodeMetaEqual(meta, n))\r\n return mirror.getNode(n.id);\r\n }\r\n let node = buildNode(n, { doc, hackCss, cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('');\r\n }\r\n else {\r\n doc.write('');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (const childN of n.childNodes) {\r\n const childNode = buildNodeWithSN(childN, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else if (n.type === NodeType.Document &&\r\n childN.type == NodeType.Element) {\r\n const htmlElement = childNode;\r\n let body = null;\r\n htmlElement.childNodes.forEach((child) => {\r\n if (child.nodeName === 'BODY')\r\n body = child;\r\n });\r\n if (body) {\r\n htmlElement.removeChild(body);\r\n node.appendChild(childNode);\r\n htmlElement.appendChild(body);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (const id of mirror.getIds()) {\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n const n = mirror.getMeta(node);\r\n if (n?.type !== NodeType.Element) {\r\n return;\r\n }\r\n const el = node;\r\n for (const name in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name) &&\r\n name.startsWith('rr_'))) {\r\n continue;\r\n }\r\n const value = n.attributes[name];\r\n if (name === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n const { doc, onVisit, hackCss = true, afterAppend, cache, mirror = new Mirror(), } = options;\r\n const node = buildNodeWithSN(n, {\r\n doc,\r\n mirror,\r\n skipChild: false,\r\n hackCss,\r\n afterAppend,\r\n cache,\r\n });\r\n visit(mirror, (visitedNode) => {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, cleanupSnapshot, createCache, createMatchPredicate, createMirror, distanceToMatch, escapeImportStatement, fixSafariColons, genId, getInputType, getInputValue, ignoreAttribute, is2DCanvasBlank, isCSSImportRule, isCSSStyleRule, isElement, isNativeShadowDom, isNodeMetaEqual, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, shouldMaskInput, snapshot, stringifyRule, stringifyStylesheet, toLowerCase, toUpperCase, transformAttribute, visitSnapshot };\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 */\nexport function getAttributesToRecord(attributes: Record): Record {\n const obj: Record = {};\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","import { record } from '@sentry-internal/rrweb';\nimport type { serializedElementNodeWithId, serializedNodeWithId } from '@sentry-internal/rrweb-snapshot';\nimport { NodeType } from '@sentry-internal/rrweb-snapshot';\nimport type { Breadcrumb, HandlerDataDom } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { handleClick } from './handleClick';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\nimport { getClickTargetNode, getTargetNode } from './util/domUtils';\nimport { getAttributesToRecord } from './util/getAttributesToRecord';\n\nexport const handleDomListener: (replay: ReplayContainer) => (handlerData: HandlerDataDom) => void = (\n replay: ReplayContainer,\n) => {\n return (handlerData: HandlerDataDom): void => {\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 as PointerEvent) : 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 as Breadcrumb & { timestamp: number; data: { nodeId: number } },\n getClickTargetNode(handlerData.event as Event) as HTMLElement,\n );\n }\n\n addBreadcrumbEvent(replay, result);\n };\n};\n\n/** Get the base DOM breadcrumb. */\nexport function getBaseDomBreadcrumb(target: Node | null, message: string): Breadcrumb {\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: serializedNodeWithId) => node.type === NodeType.Text && node.textContent)\n .filter(Boolean) // filter out empty values\n .map(text => (text as string).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 */\nexport function handleDom(handlerData: HandlerDataDom): Breadcrumb | null {\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: HandlerDataDom): { target: Node | null; message: string } {\n const isClick = handlerData.name === 'click';\n\n let message: string | undefined;\n let target: Node | null = null;\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = isClick ? getClickTargetNode(handlerData.event as Event) : getTargetNode(handlerData.event as Event);\n message = htmlTreeAsString(target, { maxStringLength: 200 }) || '';\n } catch (e) {\n message = '';\n }\n\n return { target, message };\n}\n\nfunction isElement(node: serializedNodeWithId): node is serializedElementNodeWithId {\n return node.type === NodeType.Element;\n}\n","import type { Breadcrumb } from '@sentry/types';\nimport { htmlTreeAsString } from '@sentry/utils';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { getBaseDomBreadcrumb } from './handleDom';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\n/** Handle keyboard events & create breadcrumbs. */\nexport function handleKeyboardEvent(replay: ReplayContainer, event: KeyboardEvent): void {\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 */\nexport function getKeyboardBreadcrumb(event: KeyboardEvent): Breadcrumb | null {\n const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n // never capture for input fields\n if (!target || isInputElement(target as HTMLElement) || !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 as Node, 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: HTMLElement): boolean {\n return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n","import { record } from '@sentry-internal/rrweb';\nimport { browserPerformanceTimeOrigin } from '@sentry/utils';\n\nimport { WINDOW } from '../constants';\nimport type {\n AllPerformanceEntry,\n AllPerformanceEntryData,\n ExperimentalPerformanceResourceTiming,\n LargestContentfulPaintData,\n NavigationData,\n PaintData,\n ReplayPerformanceEntry,\n ResourceData,\n} from '../types';\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES: Record<\n string,\n (entry: AllPerformanceEntry) => null | ReplayPerformanceEntry\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 */\nexport function createPerformanceEntries(\n entries: AllPerformanceEntry[],\n): ReplayPerformanceEntry[] {\n return entries.map(createPerformanceEntry).filter(Boolean) as ReplayPerformanceEntry[];\n}\n\nfunction createPerformanceEntry(entry: AllPerformanceEntry): ReplayPerformanceEntry | null {\n if (!ENTRY_TYPES[entry.entryType]) {\n return null;\n }\n\n return ENTRY_TYPES[entry.entryType](entry);\n}\n\nfunction getAbsoluteTime(time: number): number {\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: PerformancePaintTiming): ReplayPerformanceEntry {\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: PerformanceNavigationTiming): ReplayPerformanceEntry | null {\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: ExperimentalPerformanceResourceTiming,\n): ReplayPerformanceEntry | null {\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 */\nexport function getLargestContentfulPaint(metric: {\n value: number;\n entries: PerformanceEntry[];\n}): ReplayPerformanceEntry {\n const entries = metric.entries;\n const lastEntry = entries[entries.length - 1] as (PerformanceEntry & { element?: Element }) | undefined;\n const element = lastEntry ? lastEntry.element : undefined;\n\n const value = metric.value;\n\n const end = getAbsoluteTime(value);\n\n const data: ReplayPerformanceEntry = {\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","import { addLcpInstrumentationHandler, addPerformanceInstrumentationHandler } from '@sentry-internal/tracing';\n\nimport type { ReplayContainer } from '../types';\nimport { getLargestContentfulPaint } from '../util/createPerformanceEntries';\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nexport function setupPerformanceObserver(replay: ReplayContainer): () => void {\n function addPerformanceEntry(entry: PerformanceEntry): void {\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 }: { entries: PerformanceEntry[] }): void {\n entries.forEach(addPerformanceEntry);\n }\n\n const clearCallbacks: (() => void)[] = [];\n\n (['navigation', 'paint', 'resource'] as const).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","export default `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","import { addBreadcrumb } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Log a message in debug mode, and add a breadcrumb when _experiment.traceInternals is enabled.\n */\nexport function logInfo(message: string, shouldAddBreadcrumb?: boolean): void {\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 */\nexport function logInfoNextTick(message: string, shouldAddBreadcrumb?: boolean): void {\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: string): void {\n addBreadcrumb(\n {\n category: 'console',\n data: {\n logger: 'replay',\n },\n level: 'info',\n message,\n },\n { level: 'info' },\n );\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nexport class EventBufferSizeExceededError extends Error {\n public constructor() {\n super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n }\n}\n","import { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { EventBufferSizeExceededError } from './error';\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 */\nexport class EventBufferArray implements EventBuffer {\n /** All the events that are buffered to be sent. */\n public events: RecordingEvent[];\n\n /** @inheritdoc */\n public hasCheckout: boolean;\n\n private _totalSize: number;\n\n public constructor() {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public get hasEvents(): boolean {\n return this.events.length > 0;\n }\n\n /** @inheritdoc */\n public get type(): EventBufferType {\n return 'sync';\n }\n\n /** @inheritdoc */\n public destroy(): void {\n this.events = [];\n }\n\n /** @inheritdoc */\n public async addEvent(event: RecordingEvent): Promise {\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 public finish(): Promise {\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 public clear(): void {\n this.events = [];\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public getEarliestTimestamp(): number | null {\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","import { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { WorkerRequest, WorkerResponse } from '../types';\nimport { logInfo } from '../util/log';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class WorkerHandler {\n private _worker: Worker;\n private _id: number;\n private _ensureReadyPromise?: Promise;\n\n public constructor(worker: 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 public ensureReady(): Promise {\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 }: MessageEvent) => {\n if ((data as WorkerResponse).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 public destroy(): void {\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 public postMessage(method: WorkerRequest['method'], arg?: WorkerRequest['arg']): Promise {\n const id = this._getAndIncrementId();\n\n return new Promise((resolve, reject) => {\n const listener = ({ data }: MessageEvent): void => {\n const response = data as WorkerResponse;\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 as T);\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 private _getAndIncrementId(): number {\n return this._id++;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\nimport { logger } from '@sentry/utils';\nimport { REPLAY_MAX_EVENT_BUFFER_SIZE } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { timestampToMs } from '../util/timestamp';\nimport { WorkerHandler } from './WorkerHandler';\nimport { EventBufferSizeExceededError } from './error';\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nexport class EventBufferCompressionWorker implements EventBuffer {\n /** @inheritdoc */\n public hasCheckout: boolean;\n\n private _worker: WorkerHandler;\n private _earliestTimestamp: number | null;\n private _totalSize;\n\n public constructor(worker: Worker) {\n this._worker = new WorkerHandler(worker);\n this._earliestTimestamp = null;\n this._totalSize = 0;\n this.hasCheckout = false;\n }\n\n /** @inheritdoc */\n public get hasEvents(): boolean {\n return !!this._earliestTimestamp;\n }\n\n /** @inheritdoc */\n public get type(): EventBufferType {\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 public ensureReady(): Promise {\n return this._worker.ensureReady();\n }\n\n /**\n * Destroy the event buffer.\n */\n public destroy(): void {\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 public addEvent(event: RecordingEvent): Promise {\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 public finish(): Promise {\n return this._finishRequest();\n }\n\n /** @inheritdoc */\n public clear(): void {\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 public getEarliestTimestamp(): number | null {\n return this._earliestTimestamp;\n }\n\n /**\n * Send the event to the worker.\n */\n private _sendEventToWorker(data: string): Promise {\n return this._worker.postMessage('addEvent', data);\n }\n\n /**\n * Finish the request and return the compressed data from the worker.\n */\n private async _finishRequest(): Promise {\n const response = await this._worker.postMessage('finish');\n\n this._earliestTimestamp = null;\n this._totalSize = 0;\n\n return response;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { AddEventResult, EventBuffer, EventBufferType, RecordingEvent } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferCompressionWorker } from './EventBufferCompressionWorker';\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 */\nexport class EventBufferProxy implements EventBuffer {\n private _fallback: EventBufferArray;\n private _compression: EventBufferCompressionWorker;\n private _used: EventBuffer;\n private _ensureWorkerIsLoadedPromise: Promise;\n\n public constructor(worker: 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 public get type(): EventBufferType {\n return this._used.type;\n }\n\n /** @inheritDoc */\n public get hasEvents(): boolean {\n return this._used.hasEvents;\n }\n\n /** @inheritdoc */\n public get hasCheckout(): boolean {\n return this._used.hasCheckout;\n }\n /** @inheritdoc */\n public set hasCheckout(value: boolean) {\n this._used.hasCheckout = value;\n }\n\n /** @inheritDoc */\n public destroy(): void {\n this._fallback.destroy();\n this._compression.destroy();\n }\n\n /** @inheritdoc */\n public clear(): void {\n return this._used.clear();\n }\n\n /** @inheritdoc */\n public getEarliestTimestamp(): number | null {\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 public addEvent(event: RecordingEvent): Promise {\n return this._used.addEvent(event);\n }\n\n /** @inheritDoc */\n public async finish(): Promise {\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 public ensureWorkerIsLoaded(): Promise {\n return this._ensureWorkerIsLoadedPromise;\n }\n\n /** Actually check if the worker has been loaded. */\n private async _ensureWorkerIsLoaded(): Promise {\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 private async _switchToCompressionWorker(): Promise {\n const { events, hasCheckout } = this._fallback;\n\n const addEventPromises: Promise[] = [];\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","import { getWorkerURL } from '@sentry-internal/replay-worker';\n\nimport type { EventBuffer } from '../types';\nimport { logInfo } from '../util/log';\nimport { EventBufferArray } from './EventBufferArray';\nimport { EventBufferProxy } from './EventBufferProxy';\n\ninterface CreateEventBufferParams {\n useCompression: boolean;\n workerUrl?: string;\n}\n\n// Treeshakable guard to remove the code of the included compression worker\ndeclare const __SENTRY_EXCLUDE_REPLAY_WORKER__: boolean;\n\n/**\n * Create an event buffer for replays.\n */\nexport function createEventBuffer({\n useCompression,\n workerUrl: customWorkerUrl,\n}: CreateEventBufferParams): EventBuffer {\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?: string): EventBufferProxy | void {\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(): string {\n if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n return getWorkerURL();\n }\n\n return '';\n}\n","import r from\"./worker\";function e(){const e=new Blob([r]);return URL.createObjectURL(e)}export{e as getWorkerURL};\n","import { WINDOW } from '../constants';\n\n/** If sessionStorage is available. */\nexport function hasSessionStorage(): boolean {\n try {\n // This can throw, e.g. when being accessed in a sandboxed iframe\n return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n } catch {\n return false;\n }\n}\n","import { REPLAY_SESSION_KEY, WINDOW } from '../../src/constants';\nimport type { ReplayContainer } from '../../src/types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nexport function clearSession(replay: ReplayContainer): void {\n deleteSession();\n replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession(): void {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n } catch {\n // Ignore potential SecurityError exceptions\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 */\nexport function isSampled(sampleRate?: number): boolean {\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","import { uuid4 } from '@sentry/utils';\n\nimport type { Sampled, Session } from '../types';\n\n/**\n * Get a session with defaults & applied sampling.\n */\nexport function makeSession(session: Partial & { sampled: Sampled }): 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","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\n\n/**\n * Save a session to session storage.\n */\nexport function saveSession(session: Session): void {\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n } catch {\n // Ignore potential SecurityError exceptions\n }\n}\n","import type { Sampled, Session, SessionOptions } from '../types';\nimport { isSampled } from '../util/isSampled';\nimport { makeSession } from './Session';\nimport { saveSession } from './saveSession';\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nexport function getSessionSampleType(sessionSampleRate: number, allowBuffering: boolean): Sampled {\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 */\nexport function createSession(\n { sessionSampleRate, allowBuffering, stickySession = false }: SessionOptions,\n { previousSessionId }: { previousSessionId?: string } = {},\n): Session {\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 * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nexport function isExpired(\n initialTime: null | number,\n expiry: undefined | number,\n targetTime: number = +new Date(),\n): boolean {\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","import type { Session } from '../types';\nimport { isExpired } from './isExpired';\n\n/**\n * Checks to see if session is expired\n */\nexport function isSessionExpired(\n session: Session,\n {\n maxReplayDuration,\n sessionIdleExpire,\n targetTime = Date.now(),\n }: { maxReplayDuration: number; sessionIdleExpire: number; targetTime?: number },\n): boolean {\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","import type { Session } from '../types';\nimport { isSessionExpired } from '../util/isSessionExpired';\n\n/** If the session should be refreshed or not. */\nexport function shouldRefreshSession(\n session: Session,\n { sessionIdleExpire, maxReplayDuration }: { sessionIdleExpire: number; maxReplayDuration: number },\n): boolean {\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","import type { Session, SessionOptions } from '../types';\nimport { logInfoNextTick } from '../util/log';\nimport { createSession } from './createSession';\nimport { fetchSession } from './fetchSession';\nimport { shouldRefreshSession } from './shouldRefreshSession';\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nexport function loadOrCreateSession(\n {\n traceInternals,\n sessionIdleExpire,\n maxReplayDuration,\n previousSessionId,\n }: {\n sessionIdleExpire: number;\n maxReplayDuration: number;\n traceInternals?: boolean;\n previousSessionId?: string;\n },\n sessionOptions: SessionOptions,\n): Session {\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","import { REPLAY_SESSION_KEY, WINDOW } from '../constants';\nimport type { Session } from '../types';\nimport { hasSessionStorage } from '../util/hasSessionStorage';\nimport { logInfoNextTick } from '../util/log';\nimport { makeSession } from './Session';\n\n/**\n * Fetches a session from storage\n */\nexport function fetchSession(traceInternals?: boolean): Session | null {\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) as Session;\n\n logInfoNextTick('[Replay] Loading existing session', traceInternals);\n\n return makeSession(sessionObj);\n } catch {\n return null;\n }\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport { getClient } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { EventBufferSizeExceededError } from '../eventBuffer/error';\nimport type { AddEventResult, RecordingEvent, ReplayContainer, ReplayFrameEvent, ReplayPluginOptions } from '../types';\nimport { logInfo } from './log';\nimport { timestampToMs } from './timestamp';\n\nfunction isCustomEvent(event: RecordingEvent): event is ReplayFrameEvent {\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 */\nexport function addEventSync(replay: ReplayContainer, event: RecordingEvent, isCheckout?: boolean): boolean {\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 */\nexport function addEvent(\n replay: ReplayContainer,\n event: RecordingEvent,\n isCheckout?: boolean,\n): Promise {\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: ReplayContainer,\n event: RecordingEvent,\n isCheckout?: boolean,\n): Promise {\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. */\nexport function shouldAddEvent(replay: ReplayContainer, event: RecordingEvent): boolean {\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: RecordingEvent,\n callback: ReplayPluginOptions['beforeAddRecordingEvent'],\n): RecordingEvent | null | undefined {\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","import type { ErrorEvent, Event, FeedbackEvent, ReplayEvent, TransactionEvent } from '@sentry/types';\n\n/** If the event is an error event */\nexport function isErrorEvent(event: Event): event is ErrorEvent {\n return !event.type;\n}\n\n/** If the event is a transaction event */\nexport function isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nexport function isReplayEvent(event: Event): event is ReplayEvent {\n return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nexport function isFeedbackEvent(event: Event): event is FeedbackEvent {\n return event.type === 'feedback';\n}\n","import { getClient } from '@sentry/core';\nimport type { ErrorEvent, Event, TransactionEvent, Transport, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse | void) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\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: Event, sendResponse: TransportMakeRequestResponse | void) => {\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: ReplayContainer, event: TransactionEvent): void {\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 as string);\n }\n}\n\nfunction handleErrorEvent(replay: ReplayContainer, event: ErrorEvent): void {\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(): boolean {\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 as Transport['send'] & { __sentry__baseTransport__?: true }).__sentry__baseTransport__ || false\n );\n}\n","import type { ErrorEvent, Event } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { isErrorEvent } from '../util/eventUtils';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\ntype BeforeSendEventCallback = (event: Event) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleBeforeSendEvent(replay: ReplayContainer): BeforeSendEventCallback {\n return (event: Event) => {\n if (!replay.isEnabled() || !isErrorEvent(event)) {\n return;\n }\n\n handleHydrationError(replay, event);\n };\n}\n\nfunction handleHydrationError(replay: ReplayContainer, event: ErrorEvent): void {\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","import type { Event, EventHint } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isFeedbackEvent, isReplayEvent, isTransactionEvent } from '../util/eventUtils';\nimport { isRrwebError } from '../util/isRrwebError';\nimport { handleAfterSendEvent } from './handleAfterSendEvent';\nimport { addFeedbackBreadcrumb } from './util/addFeedbackBreadcrumb';\nimport { shouldSampleForBufferEvent } from './util/shouldSampleForBufferEvent';\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nexport function handleGlobalEventListener(\n replay: ReplayContainer,\n includeAfterSendEventHandling = false,\n): (event: Event, hint: EventHint) => Event | null {\n const afterSendHandler = includeAfterSendEventHandling ? handleAfterSendEvent(replay) : undefined;\n\n return Object.assign(\n (event: Event, hint: EventHint) => {\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","import { EventType } from '@sentry-internal/rrweb';\nimport type { FeedbackEvent } from '@sentry/types';\n\nimport type { ReplayContainer } from '../../types';\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nexport function addFeedbackBreadcrumb(replay: ReplayContainer, event: FeedbackEvent): void {\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","import type { Event, EventHint } from '@sentry/types';\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nexport function isRrwebError(event: Event, hint: EventHint): boolean {\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","import type { Event } from '@sentry/types';\n\nimport { UNABLE_TO_SEND_REPLAY } from '../../constants';\nimport type { ReplayContainer } from '../../types';\nimport { isSampled } from '../../util/isSampled';\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 */\nexport function shouldSampleForBufferEvent(replay: ReplayContainer, event: Event): boolean {\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","import { EventType } from '@sentry-internal/rrweb';\n\nimport type { AddEventResult, AllEntryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\n\n/**\n * Create a \"span\" for each performance entry.\n */\nexport function createPerformanceSpans(\n replay: ReplayContainer,\n entries: ReplayPerformanceEntry[],\n): Promise[] {\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","import type { HandlerDataHistory } from '@sentry/types';\n\nimport type { HistoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from '../util/createPerformanceSpans';\n\nfunction handleHistory(handlerData: HandlerDataHistory): ReplayPerformanceEntry {\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 */\nexport function handleHistorySpanListener(replay: ReplayContainer): (handlerData: HandlerDataHistory) => void {\n return (handlerData: HandlerDataHistory) => {\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","import type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../../types';\nimport { createPerformanceSpans } from '../../util/createPerformanceSpans';\nimport { shouldFilterRequest } from '../../util/shouldFilterRequest';\n\n/** Add a performance entry breadcrumb */\nexport function addNetworkBreadcrumb(\n replay: ReplayContainer,\n result: ReplayPerformanceEntry | null,\n): void {\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","import { getClient, isSentryRequestUrl } from '@sentry/core';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { ReplayContainer } from '../types';\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 */\nexport function shouldFilterRequest(replay: ReplayContainer, url: string): boolean {\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","import type { HandlerDataXhr } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY } from '@sentry/utils';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleXhr(handlerData: HandlerDataXhr): ReplayPerformanceEntry | null {\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 */\nexport function handleXhrSpanListener(replay: ReplayContainer): (handlerData: HandlerDataXhr) => void {\n return (handlerData: HandlerDataXhr) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleXhr(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n","import type { TextEncoderInternal } from '@sentry/types';\nimport { dropUndefinedKeys, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { NETWORK_BODY_MAX_SIZE, WINDOW } from '../../constants';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n NetworkBody,\n NetworkMetaWarning,\n NetworkRequestData,\n ReplayNetworkRequestData,\n ReplayNetworkRequestOrResponse,\n ReplayPerformanceEntry,\n} from '../../types';\n\n/** Get the size of a body. */\nexport function getBodySize(\n body: RequestInit['body'],\n textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\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 {\n // just return undefined\n }\n\n return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined. */\nexport function parseContentLengthHeader(header: string | null | undefined): number | undefined {\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. */\nexport function getBodyString(body: unknown): [string | undefined, NetworkMetaWarning?] {\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 {\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. */\nexport function mergeWarning(\n info: ReplayNetworkRequestOrResponse | undefined,\n warning: NetworkMetaWarning,\n): ReplayNetworkRequestOrResponse {\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. */\nexport function makeNetworkReplayBreadcrumb(\n type: string,\n data: ReplayNetworkRequestData | null,\n): ReplayPerformanceEntry | null {\n if (!data) {\n return null;\n }\n\n const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n const result: ReplayPerformanceEntry = {\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. */\nexport function buildSkippedNetworkRequestOrResponse(bodySize: number | undefined): ReplayNetworkRequestOrResponse {\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. */\nexport function buildNetworkRequestOrResponse(\n headers: Record,\n bodySize: number | undefined,\n body: string | undefined,\n): ReplayNetworkRequestOrResponse | undefined {\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: ReplayNetworkRequestOrResponse = {\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 */\nexport function getAllowedHeaders(headers: Record, allowedHeaders: string[]): Record {\n return Object.keys(headers).reduce((filteredHeaders: Record, key: string) => {\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: FormData): string {\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: string | undefined): {\n body: NetworkBody | undefined;\n warnings?: NetworkMetaWarning[];\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 {\n // fall back to just send the body as string\n }\n }\n\n return {\n body,\n };\n}\n\nfunction _strIsProbablyJson(str: string): boolean {\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. */\nexport function urlMatches(url: string, urls: (string | RegExp)[]): boolean {\n const fullUrl = getFullUrl(url);\n\n return stringMatchesSomePattern(fullUrl, urls);\n}\n\n/** exported for tests */\nexport function getFullUrl(url: string, baseURI = WINDOW.document.baseURI): string {\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","import type { Breadcrumb, FetchBreadcrumbData, TextEncoderInternal } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n FetchHint,\n NetworkMetaWarning,\n ReplayContainer,\n ReplayNetworkOptions,\n ReplayNetworkRequestData,\n ReplayNetworkRequestOrResponse,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n buildNetworkRequestOrResponse,\n buildSkippedNetworkRequestOrResponse,\n getAllowedHeaders,\n getBodySize,\n getBodyString,\n makeNetworkReplayBreadcrumb,\n mergeWarning,\n parseContentLengthHeader,\n urlMatches,\n} from './networkUtils';\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureFetchBreadcrumbToReplay(\n breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial,\n options: ReplayNetworkOptions & {\n textEncoder: TextEncoderInternal;\n replay: ReplayContainer;\n },\n): Promise {\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 */\nexport function enrichFetchBreadcrumb(\n breadcrumb: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial,\n options: { textEncoder: TextEncoderInternal },\n): void {\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: Breadcrumb & { data: FetchBreadcrumbData },\n hint: Partial,\n options: ReplayNetworkOptions & {\n textEncoder: TextEncoderInternal;\n },\n): Promise {\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 }: ReplayNetworkOptions,\n input: FetchHint['input'] | undefined,\n requestBodySize?: number,\n): ReplayNetworkRequestOrResponse | undefined {\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. */\nexport async function _getResponseInfo(\n captureDetails: boolean,\n {\n networkCaptureBodies,\n textEncoder,\n networkResponseHeaders,\n }: Pick & {\n textEncoder: TextEncoderInternal;\n },\n response: Response | undefined,\n responseBodySize?: number,\n): Promise {\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: string | undefined,\n {\n networkCaptureBodies,\n textEncoder,\n responseBodySize,\n captureDetails,\n headers,\n }: {\n captureDetails: boolean;\n networkCaptureBodies: boolean;\n responseBodySize: number | undefined;\n headers: Record;\n textEncoder: TextEncoderInternal;\n },\n): ReplayNetworkRequestOrResponse | undefined {\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: Response): Promise<[string | undefined, NetworkMetaWarning?]> {\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: unknown[] = []): RequestInit['body'] | undefined {\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] as RequestInit).body;\n}\n\nfunction getAllHeaders(headers: Headers, allowedHeaders: string[]): Record {\n const allHeaders: Record = {};\n\n allowedHeaders.forEach(header => {\n if (headers.get(header)) {\n allHeaders[header] = headers.get(header) as string;\n }\n });\n\n return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs: unknown[], allowedHeaders: string[]): Record {\n if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n return getHeadersFromOptions(fetchArgs[0] as Request | RequestInit, allowedHeaders);\n }\n\n if (fetchArgs.length === 2) {\n return getHeadersFromOptions(fetchArgs[1] as Request | RequestInit, allowedHeaders);\n }\n\n return {};\n}\n\nfunction getHeadersFromOptions(\n input: Request | RequestInit | undefined,\n allowedHeaders: string[],\n): Record {\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: Response): Response | void {\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: Response): Promise {\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 return _getResponseText(response);\n}\n\nasync function _getResponseText(response: Response): Promise {\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","import type { Breadcrumb, TextEncoderInternal, XhrBreadcrumbData } from '@sentry/types';\nimport { SENTRY_XHR_DATA_KEY, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type {\n NetworkMetaWarning,\n ReplayContainer,\n ReplayNetworkOptions,\n ReplayNetworkRequestData,\n XhrHint,\n} from '../../types';\nimport { addNetworkBreadcrumb } from './addNetworkBreadcrumb';\nimport {\n buildNetworkRequestOrResponse,\n buildSkippedNetworkRequestOrResponse,\n getAllowedHeaders,\n getBodySize,\n getBodyString,\n makeNetworkReplayBreadcrumb,\n mergeWarning,\n parseContentLengthHeader,\n urlMatches,\n} from './networkUtils';\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where approriate).\n */\nexport async function captureXhrBreadcrumbToReplay(\n breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial,\n options: ReplayNetworkOptions & { replay: ReplayContainer },\n): Promise {\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 */\nexport function enrichXhrBreadcrumb(\n breadcrumb: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial,\n options: { textEncoder: TextEncoderInternal },\n): void {\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: Breadcrumb & { data: XhrBreadcrumbData },\n hint: Partial,\n options: ReplayNetworkOptions,\n): ReplayNetworkRequestData | null {\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: XMLHttpRequest): Record {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc: Record, line: string) => {\n const [key, value] = line.split(': ');\n acc[key.toLowerCase()] = value;\n return acc;\n }, {});\n}\n\nfunction _getXhrResponseBody(xhr: XMLHttpRequest): [string | undefined, NetworkMetaWarning?] {\n // We collect errors that happen, but only log them if we can't get any response body\n const errors: unknown[] = [];\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 */\nexport function _parseXhrResponse(\n body: XMLHttpRequest['response'],\n responseType: XMLHttpRequest['responseType'],\n): [string | undefined, NetworkMetaWarning?] {\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 {\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: XMLHttpRequest['response'],\n responseType: XMLHttpRequest['responseType'],\n textEncoder: TextEncoder | TextEncoderInternal,\n): number | undefined {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr, textEncoder);\n } catch {\n return undefined;\n }\n}\n","import { getClient } from '@sentry/core';\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n FetchBreadcrumbData,\n TextEncoderInternal,\n XhrBreadcrumbData,\n} from '@sentry/types';\nimport { addFetchInstrumentationHandler, addXhrInstrumentationHandler, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { handleFetchSpanListener } from './handleFetch';\nimport { handleXhrSpanListener } from './handleXhr';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n replay: ReplayContainer;\n textEncoder: TextEncoderInternal;\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 */\nexport function handleNetworkBreadcrumbs(replay: ReplayContainer): void {\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: ExtendedNetworkBreadcrumbsOptions = {\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 {\n // Do nothing\n }\n}\n\n/** just exported for tests */\nexport function beforeAddNetworkBreadcrumb(\n options: ExtendedNetworkBreadcrumbsOptions,\n breadcrumb: Breadcrumb,\n hint?: BreadcrumbHint,\n): void {\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: Breadcrumb): breadcrumb is Breadcrumb & { data: XhrBreadcrumbData } {\n return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb: Breadcrumb): breadcrumb is Breadcrumb & { data: FetchBreadcrumbData } {\n return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint?: BreadcrumbHint): hint is XhrHint {\n return hint && hint.xhr;\n}\n\nfunction _isFetchHint(hint?: BreadcrumbHint): hint is FetchHint {\n return hint && hint.response;\n}\n","import type { HandlerDataFetch } from '@sentry/types';\n\nimport type { NetworkRequestData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { addNetworkBreadcrumb } from './util/addNetworkBreadcrumb';\n\n/** only exported for tests */\nexport function handleFetch(handlerData: HandlerDataFetch): null | ReplayPerformanceEntry {\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 as Response).status : undefined,\n },\n };\n}\n\n/**\n * Returns a listener to be added to `addFetchInstrumentationHandler(listener)`.\n */\nexport function handleFetchSpanListener(replay: ReplayContainer): (handlerData: HandlerDataFetch) => void {\n return (handlerData: HandlerDataFetch) => {\n if (!replay.isEnabled()) {\n return;\n }\n\n const result = handleFetch(handlerData);\n\n addNetworkBreadcrumb(replay, result);\n };\n}\n","import type { Breadcrumb, Scope } from '@sentry/types';\nimport { normalize } from '@sentry/utils';\n\nimport { CONSOLE_ARG_MAX_SIZE } from '../constants';\nimport type { ReplayContainer } from '../types';\nimport type { ReplayFrame } from '../types/replayFrame';\nimport { createBreadcrumb } from '../util/createBreadcrumb';\nimport { addBreadcrumbEvent } from './util/addBreadcrumbEvent';\n\nlet _LAST_BREADCRUMB: null | Breadcrumb = null;\n\ntype BreadcrumbWithCategory = Required>;\n\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n return !!breadcrumb.category;\n}\n\nexport const handleScopeListener: (replay: ReplayContainer) => (scope: Scope) => void =\n (replay: ReplayContainer) =>\n (scope: Scope): void => {\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 */\nexport function handleScope(scope: Scope): Breadcrumb | null {\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 */\nexport function normalizeConsoleBreadcrumb(\n breadcrumb: Omit & BreadcrumbWithCategory,\n): ReplayFrame {\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 {\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","import type { BaseClient } from '@sentry/core';\nimport { getCurrentScope } from '@sentry/core';\nimport { addEventProcessor, getClient } from '@sentry/core';\nimport type { Client, DynamicSamplingContext } from '@sentry/types';\nimport { addClickKeypressInstrumentationHandler, addHistoryInstrumentationHandler } from '@sentry/utils';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleBeforeSendEvent } from '../coreHandlers/handleBeforeSendEvent';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\nimport { handleScopeListener } from '../coreHandlers/handleScope';\nimport type { ReplayContainer } from '../types';\n\n/**\n * Add global listeners that cannot be removed.\n */\nexport function addGlobalListeners(replay: ReplayContainer): void {\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: DynamicSamplingContext) => {\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: Client | undefined): client is BaseClient {\n return !!(client && client.on);\n}\n","import { WINDOW } from '../constants';\nimport type { AddEventResult, MemoryData, ReplayContainer, ReplayPerformanceEntry } from '../types';\nimport { createPerformanceSpans } from './createPerformanceSpans';\n\ntype ReplayMemoryEntry = ReplayPerformanceEntry & { data: { memory: MemoryInfo } };\n\ninterface MemoryInfo {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nexport async function addMemoryEntry(replay: ReplayContainer): Promise> {\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: MemoryInfo): ReplayMemoryEntry {\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","import { EventType } from '@sentry-internal/rrweb';\nimport { logger } from '@sentry/utils';\n\nimport { updateClickDetectorForRecordingEvent } from '../coreHandlers/handleClick';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { saveSession } from '../session/saveSession';\nimport type { RecordingEvent, ReplayContainer, ReplayOptionFrameEvent } from '../types';\nimport { addEventSync } from './addEvent';\nimport { logInfo } from './log';\n\ntype RecordingEmitCallback = (event: RecordingEvent, isCheckout?: boolean) => void;\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 */\nexport function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCallback {\n let hadFirstEvent = false;\n\n return (event: RecordingEvent, _isCheckout?: boolean) => {\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 */\nexport function createOptionsEvent(replay: ReplayContainer): ReplayOptionFrameEvent {\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: ReplayContainer, isCheckout?: boolean): void {\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","import { getClient, getCurrentScope } from '@sentry/core';\nimport type { ReplayEvent, TransportMakeRequestResponse } from '@sentry/types';\nimport type { RateLimits } from '@sentry/utils';\nimport { isRateLimited, updateRateLimits } from '@sentry/utils';\n\nimport { REPLAY_EVENT_NAME, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport type { SendReplayData } from '../types';\nimport { createReplayEnvelope } from './createReplayEnvelope';\nimport { logInfo } from './log';\nimport { prepareRecordingData } from './prepareRecordingData';\nimport { prepareReplayEvent } from './prepareReplayEvent';\n\n/**\n * Send replay attachment using `fetch()`\n */\nexport async function sendReplayRequest({\n recordingData,\n replayId,\n segmentId: segment_id,\n eventContext,\n timestamp,\n session,\n}: SendReplayData): Promise {\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: ReplayEvent = {\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: void | TransportMakeRequestResponse;\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 {\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 */\nexport class TransportStatusCodeError extends Error {\n public constructor(statusCode: number) {\n super(`Transport returned status code ${statusCode}`);\n }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nexport class RateLimitError extends Error {\n public rateLimits: RateLimits;\n\n public constructor(rateLimits: RateLimits) {\n super('Rate limit hit');\n this.rateLimits = rateLimits;\n }\n}\n","import type { ReplayRecordingData } from '@sentry/types';\n\n/**\n * Prepare the recording data ready to be sent.\n */\nexport function prepareRecordingData({\n recordingData,\n headers,\n}: {\n recordingData: ReplayRecordingData;\n headers: Record;\n}): ReplayRecordingData {\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","import type { Scope } from '@sentry/core';\nimport { getIsolationScope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { IntegrationIndex } from '@sentry/core/build/types/integration';\nimport type { Client, EventHint, ReplayEvent } from '@sentry/types';\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nexport async function prepareReplayEvent({\n client,\n scope,\n replayId: event_id,\n event,\n}: {\n client: Client & { _integrations?: IntegrationIndex };\n scope: Scope;\n replayId: string;\n event: ReplayEvent;\n}): Promise {\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: 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 )) as ReplayEvent | null;\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","import type { DsnComponents, ReplayEnvelope, ReplayEvent, ReplayRecordingData } from '@sentry/types';\nimport { createEnvelope, createEventEnvelopeHeaders, getSdkMetadataForEnvelopeHeader } from '@sentry/utils';\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 */\nexport function createReplayEnvelope(\n replayEvent: ReplayEvent,\n recordingData: ReplayRecordingData,\n dsn: DsnComponents,\n tunnel?: string,\n): ReplayEnvelope {\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","import { captureException, setContext } from '@sentry/core';\n\nimport { RETRY_BASE_INTERVAL, RETRY_MAX_COUNT, UNABLE_TO_SEND_REPLAY } from '../constants';\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { SendReplayData } from '../types';\nimport { RateLimitError, TransportStatusCodeError, sendReplayRequest } from './sendReplayRequest';\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nexport async function sendReplay(\n replayData: SendReplayData,\n retryConfig = {\n count: 0,\n interval: RETRY_BASE_INTERVAL,\n },\n): Promise {\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 {\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","export const THROTTLED = '__THROTTLED';\nexport const 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\nexport function throttle any>(\n fn: T,\n maxCount: number,\n durationSeconds: number,\n): (...rest: Parameters) => ReturnType | typeof THROTTLED | typeof SKIPPED {\n const counter = new Map();\n\n const _cleanup = (now: number): void => {\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 = (): number => {\n return [...counter.values()].reduce((a, b) => a + b, 0);\n };\n\n let isThrottled = false;\n\n return (...rest: Parameters): ReturnType | typeof THROTTLED | typeof SKIPPED => {\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","/* eslint-disable max-lines */ // TODO: We might want to split this file up\nimport { EventType, record } from '@sentry-internal/rrweb';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n captureException,\n getClient,\n getCurrentScope,\n spanToJSON,\n} from '@sentry/core';\nimport type { ReplayRecordingMode, Transaction } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n BUFFER_CHECKOUT_TIME,\n CANVAS_QUALITY,\n SESSION_IDLE_EXPIRE_DURATION,\n SESSION_IDLE_PAUSE_DURATION,\n SLOW_CLICK_SCROLL_TIMEOUT,\n SLOW_CLICK_THRESHOLD,\n WINDOW,\n} from './constants';\nimport { ClickDetector } from './coreHandlers/handleClick';\nimport { handleKeyboardEvent } from './coreHandlers/handleKeyboardEvent';\nimport { setupPerformanceObserver } from './coreHandlers/performanceObserver';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventBuffer } from './eventBuffer';\nimport { clearSession } from './session/clearSession';\nimport { loadOrCreateSession } from './session/loadOrCreateSession';\nimport { saveSession } from './session/saveSession';\nimport { shouldRefreshSession } from './session/shouldRefreshSession';\nimport type {\n AddEventResult,\n AddUpdateCallback,\n AllPerformanceEntry,\n AllPerformanceEntryData,\n EventBuffer,\n InternalEventContext,\n PopEventContext,\n RecordingEvent,\n RecordingOptions,\n ReplayBreadcrumbFrame,\n ReplayContainer as ReplayContainerInterface,\n ReplayPerformanceEntry,\n ReplayPluginOptions,\n SendBufferedReplayOptions,\n Session,\n SlowClickConfig,\n Timeouts,\n} from './types';\nimport { ReplayEventTypeCustom } from './types';\nimport { addEvent, addEventSync } from './util/addEvent';\nimport { addGlobalListeners } from './util/addGlobalListeners';\nimport { addMemoryEntry } from './util/addMemoryEntry';\nimport { createBreadcrumb } from './util/createBreadcrumb';\nimport { createPerformanceEntries } from './util/createPerformanceEntries';\nimport { createPerformanceSpans } from './util/createPerformanceSpans';\nimport { debounce } from './util/debounce';\nimport { getHandleRecordingEmit } from './util/handleRecordingEmit';\nimport { isExpired } from './util/isExpired';\nimport { isSessionExpired } from './util/isSessionExpired';\nimport { logInfo, logInfoNextTick } from './util/log';\nimport { sendReplay } from './util/sendReplay';\nimport type { SKIPPED } from './util/throttle';\nimport { THROTTLED, throttle } from './util/throttle';\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nexport class ReplayContainer implements ReplayContainerInterface {\n public eventBuffer: EventBuffer | null;\n\n public performanceEntries: AllPerformanceEntry[];\n\n public replayPerformanceEntries: ReplayPerformanceEntry[];\n\n public session: Session | undefined;\n\n public clickDetector: ClickDetector | undefined;\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 public recordingMode: ReplayRecordingMode;\n\n /**\n * The current or last active transcation.\n * This is only available when performance is enabled.\n */\n public lastTransaction?: Transaction;\n\n /**\n * These are here so we can overwrite them in tests etc.\n * @hidden\n */\n public readonly timeouts: Timeouts;\n\n private _throttledAddEvent: (\n event: RecordingEvent,\n isCheckout?: boolean,\n ) => typeof THROTTLED | typeof SKIPPED | Promise;\n\n /**\n * Options to pass to `rrweb.record()`\n */\n private readonly _recordingOptions: RecordingOptions;\n\n private readonly _options: ReplayPluginOptions;\n\n private _performanceCleanupCallback?: () => void;\n\n private _debouncedFlush: ReturnType;\n private _flushLock: Promise | undefined;\n\n /**\n * Timestamp of the last user activity. This lives across sessions.\n */\n private _lastActivity: number;\n\n /**\n * Is the integration currently active?\n */\n private _isEnabled: boolean;\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 private _isPaused: boolean;\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 private _hasInitializedCoreListeners: boolean;\n\n /**\n * Function to stop recording\n */\n private _stopRecording: ReturnType | undefined;\n\n private _context: InternalEventContext;\n\n public constructor({\n options,\n recordingOptions,\n }: {\n options: ReplayPluginOptions;\n recordingOptions: RecordingOptions;\n }) {\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 } as const;\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: RecordingEvent, isCheckout?: boolean) => 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: SlowClickConfig | undefined = 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 public getContext(): InternalEventContext {\n return this._context;\n }\n\n /** If recording is currently enabled. */\n public isEnabled(): boolean {\n return this._isEnabled;\n }\n\n /** If recording is currently paused. */\n public isPaused(): boolean {\n return this._isPaused;\n }\n\n /** Get the replay integration options. */\n public getOptions(): ReplayPluginOptions {\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 public initializeSampling(previousSessionId?: string): void {\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 public start(): void {\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 public startBuffering(): void {\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 public startRecording(): void {\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 public stopRecording(): boolean {\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 public async stop({ forceFlush = false, reason }: { forceFlush?: boolean; reason?: string } = {}): Promise {\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 public pause(): void {\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 public resume(): void {\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 public async sendBufferedReplayOrFlush({ continueRecording = true }: SendBufferedReplayOptions = {}): Promise {\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 as ReplayRecordingMode) === '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 public addUpdate(cb: AddUpdateCallback): void {\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 public triggerUserActivity(): void {\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 public updateUserActivity(): void {\n this._updateUserActivity();\n this._updateSessionActivity();\n }\n\n /**\n * Only flush if `this.recordingMode === 'session'`\n */\n public conditionalFlush(): Promise {\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 public flush(): Promise {\n return this._debouncedFlush() as Promise;\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 public flushImmediate(): Promise {\n this._debouncedFlush();\n // `.flush` is provided by the debounced function, analogously to lodash.debounce\n return this._debouncedFlush.flush() as Promise;\n }\n\n /**\n * Cancels queued up flushes.\n */\n public cancelFlush(): void {\n this._debouncedFlush.cancel();\n }\n\n /** Get the current sesion (=replay) ID */\n public getSessionId(): string | undefined {\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 public checkAndHandleExpiredSession(): boolean | void {\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 public setInitialState(): void {\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 public throttledAddEvent(\n event: RecordingEvent,\n isCheckout?: boolean,\n ): typeof THROTTLED | typeof SKIPPED | Promise {\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 public getCurrentRoute(): string | undefined {\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 private _initializeRecording(): void {\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 private _handleException(error: unknown): void {\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 private _initializeSessionForSampling(previousSessionId?: string): void {\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 private _checkSession(): boolean {\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 private async _refreshSession(session: Session): Promise {\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 private _addListeners(): void {\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 private _removeListeners(): void {\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 private _handleVisibilityChange: () => void = () => {\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 private _handleWindowBlur: () => void = () => {\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 private _handleWindowFocus: () => void = () => {\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 private _handleKeyboardEvent: (event: KeyboardEvent) => void = (event: KeyboardEvent) => {\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 private _doChangeToBackgroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\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 private _doChangeToForegroundTasks(breadcrumb?: ReplayBreadcrumbFrame): void {\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 private _updateUserActivity(_lastActivity: number = Date.now()): void {\n this._lastActivity = _lastActivity;\n }\n\n /**\n * Updates the session's last activity timestamp\n */\n private _updateSessionActivity(_lastActivity: number = Date.now()): void {\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 private _createCustomBreadcrumb(breadcrumb: ReplayBreadcrumbFrame): void {\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 private _addPerformanceEntries(): Promise> {\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 private _clearContext(): void {\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 private _updateInitialTimestampFromEventBuffer(): void {\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 private _popEventContext(): 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 private async _runFlush(): Promise {\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 + 30_000) {\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 private _flush = async ({\n force = false,\n }: {\n /**\n * If true, flush while ignoring the `_isEnabled` state of\n * Replay integration. (By default, flush is noop if integration\n * is stopped).\n */\n force?: boolean;\n } = {}): Promise => {\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 + 5_000;\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 private _maybeSaveSession(): void {\n if (this.session && this._options.stickySession) {\n saveSession(this.session);\n }\n }\n\n /** Handler for rrweb.record.onMutation */\n private _onMutationHandler = (mutations: unknown[]): boolean => {\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","type DebouncedCallback = {\n (): void | unknown;\n flush: () => void | unknown;\n cancel: () => void;\n};\ntype CallbackFunction = () => unknown;\ntype DebounceOptions = { maxWait?: number };\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 */\nexport function debounce(func: CallbackFunction, wait: number, options?: DebounceOptions): DebouncedCallback {\n let callbackReturnValue: unknown;\n\n let timerId: ReturnType | undefined;\n let maxTimerId: ReturnType | undefined;\n\n const maxWait = options && options.maxWait ? Math.max(options.maxWait, wait) : 0;\n\n function invokeFunc(): unknown {\n cancelTimers();\n callbackReturnValue = func();\n return callbackReturnValue;\n }\n\n function cancelTimers(): void {\n timerId !== undefined && clearTimeout(timerId);\n maxTimerId !== undefined && clearTimeout(maxTimerId);\n timerId = maxTimerId = undefined;\n }\n\n function flush(): unknown {\n if (timerId !== undefined || maxTimerId !== undefined) {\n return invokeFunc();\n }\n return callbackReturnValue;\n }\n\n function debounced(): unknown {\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","import { consoleSandbox } from '@sentry/utils';\n\nimport type { DeprecatedPrivacyOptions, ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required> &\n Omit;\ninterface GetPrivacyReturn {\n maskTextSelector: string;\n unmaskTextSelector: string;\n blockSelector: string;\n unblockSelector: string;\n ignoreSelector: string;\n\n blockClass?: RegExp;\n maskTextClass?: RegExp;\n}\n\nfunction getOption(\n selectors: string[],\n defaultSelectors: string[],\n deprecatedClassOption?: string | RegExp,\n deprecatedSelectorOption?: string,\n): string {\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 */\nexport function 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}: GetPrivacyOptions): GetPrivacyReturn {\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: GetPrivacyReturn = {\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","import { getClient } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration } from '@sentry/types';\nimport { consoleSandbox, dropUndefinedKeys, isBrowser } from '@sentry/utils';\n\nimport {\n DEFAULT_FLUSH_MAX_DELAY,\n DEFAULT_FLUSH_MIN_DELAY,\n MAX_REPLAY_DURATION,\n MIN_REPLAY_DURATION,\n MIN_REPLAY_DURATION_LIMIT,\n} from './constants';\nimport { ReplayContainer } from './replay';\nimport type { RecordingOptions, ReplayConfiguration, ReplayPluginOptions, SendBufferedReplayOptions } from './types';\nimport { getPrivacyOptions } from './util/getPrivacyOptions';\nimport { maskAttribute } from './util/maskAttribute';\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\ntype InitialReplayPluginOptions = Omit &\n Partial>;\n\n/**\n * The main replay integration class, to be passed to `init({ integrations: [] })`.\n */\nexport class Replay implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'Replay';\n\n /**\n * @inheritDoc\n */\n public name: string;\n\n /**\n * Options to pass to `rrweb.record()`\n */\n private readonly _recordingOptions: RecordingOptions;\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 private readonly _initialOptions: InitialReplayPluginOptions;\n\n private _replay?: ReplayContainer;\n\n public 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 = 10_000,\n\n slowClickTimeout = 7_000,\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 }: ReplayConfiguration = {}) {\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: string, value: string, el: HTMLElement): string =>\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: Error & { __rrweb__?: boolean }) => {\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 protected get _isInitialized(): boolean {\n return _initialized;\n }\n\n /** Update _isInitialized */\n protected set _isInitialized(value: boolean) {\n _initialized = value;\n }\n\n /**\n * Setup and initialize replay container\n */\n public setupOnce(): void {\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 public start(): void {\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 public startBuffering(): void {\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 public stop(): Promise {\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 public flush(options?: SendBufferedReplayOptions): Promise {\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 public getReplayId(): string | undefined {\n if (!this._replay || !this._replay.isEnabled()) {\n return;\n }\n\n return this._replay.getSessionId();\n }\n /**\n * Initializes replay.\n */\n protected _initialize(): void {\n if (!this._replay) {\n return;\n }\n\n this._replay.initializeSampling();\n }\n\n /** Setup the integration. */\n private _setup(): void {\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}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions: InitialReplayPluginOptions): ReplayPluginOptions {\n const client = getClient();\n const opt = client && (client.getOptions() as BrowserClientReplayOptions);\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: string[]): string[] {\n return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n","import type { getPrivacyOptions } from './getPrivacyOptions';\n\ninterface MaskAttributeParams {\n maskAttributes: string[];\n maskAllText: boolean;\n privacyOptions: ReturnType;\n key: string;\n value: string;\n el: HTMLElement;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nexport function maskAttribute({\n el,\n key,\n maskAttributes,\n maskAllText,\n privacyOptions,\n value,\n}: MaskAttributeParams): string {\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","import { createEventEnvelope, getClient, withScope } from '@sentry/core';\nimport type { FeedbackEvent, TransportMakeRequestResponse } from '@sentry/types';\n\nimport { FEEDBACK_API_SOURCE, FEEDBACK_WIDGET_SOURCE } from '../constants';\nimport type { SendFeedbackData, SendFeedbackOptions } from '../types';\nimport { prepareFeedbackEvent } from './prepareFeedbackEvent';\n\n/**\n * Send feedback using transport\n */\nexport async function sendFeedbackRequest(\n { feedback: { message, email, name, source, url } }: SendFeedbackData,\n { includeReplay = true }: SendFeedbackOptions = {},\n): Promise {\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: FeedbackEvent = {\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: void | TransportMakeRequestResponse;\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 {\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","import type { Scope } from '@sentry/core';\nimport { getIsolationScope } from '@sentry/core';\nimport { prepareEvent } from '@sentry/core';\nimport type { Client, FeedbackEvent } from '@sentry/types';\n\ninterface PrepareFeedbackEventParams {\n client: Client;\n event: FeedbackEvent;\n scope: Scope;\n}\n/**\n * Prepare a feedback event & enrich it with the SDK metadata.\n */\nexport async function prepareFeedbackEvent({\n client,\n scope,\n event,\n}: PrepareFeedbackEventParams): Promise {\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 )) as FeedbackEvent | null;\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","import type { FeedbackInternalOptions, OptionalFeedbackConfiguration } from '../types';\n\n/**\n * Quick and dirty deep merge for the Feedback integration options\n */\nexport function mergeOptions(\n defaultOptions: FeedbackInternalOptions,\n optionOverrides: OptionalFeedbackConfiguration,\n): FeedbackInternalOptions {\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","import type { FeedbackTheme, FeedbackThemes } from '../types';\n\nfunction getThemedCssVariables(theme: FeedbackTheme): string {\n return `\n --background: ${theme.background};\n --background-hover: ${theme.backgroundHover};\n --foreground: ${theme.foreground};\n --error: ${theme.error};\n --success: ${theme.success};\n --border: ${theme.border};\n --box-shadow: ${theme.boxShadow};\n\n --submit-background: ${theme.submitBackground};\n --submit-background-hover: ${theme.submitBackgroundHover};\n --submit-border: ${theme.submitBorder};\n --submit-outline-focus: ${theme.submitOutlineFocus};\n --submit-foreground: ${theme.submitForeground};\n --submit-foreground-hover: ${theme.submitForegroundHover};\n\n --cancel-background: ${theme.cancelBackground};\n --cancel-background-hover: ${theme.cancelBackgroundHover};\n --cancel-border: ${theme.cancelBorder};\n --cancel-outline-focus: ${theme.cancelOutlineFocus};\n --cancel-foreground: ${theme.cancelForeground};\n --cancel-foreground-hover: ${theme.cancelForegroundHover};\n\n --input-background: ${theme.inputBackground};\n --input-foreground: ${theme.inputForeground};\n --input-border: ${theme.inputBorder};\n --input-outline-focus: ${theme.inputOutlineFocus};\n `;\n}\n\n/**\n * Creates