{"version":3,"file":"static/js/main.b9afd2d1.js","mappings":"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","sources":["../node_modules/deepmerge/dist/cjs.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-innertext/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/scroll/index.js","../node_modules/scrollparent/scrollparent.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../node_modules/@sentry/src/debug-build.ts","../node_modules/@sentry/src/version.ts","../node_modules/@sentry/src/worldwide.ts","../node_modules/@sentry/src/logger.ts","../node_modules/@sentry/src/is.ts","../node_modules/@sentry/src/browser.ts","../node_modules/@sentry/src/string.ts","../node_modules/@sentry/src/object.ts","../node_modules/@sentry/src/misc.ts","../node_modules/@sentry/src/integration.ts","../node_modules/@sentry/src/integrations/inboundfilters.ts","../node_modules/@sentry/src/carrier.ts","../node_modules/@sentry/src/propagationContext.ts","../node_modules/@sentry/src/time.ts","../node_modules/@sentry/src/session.ts","../node_modules/@sentry/src/utils/spanOnScope.ts","../node_modules/@sentry/src/scope.ts","../node_modules/@sentry/src/asyncContext/stackStrategy.ts","../node_modules/@sentry/src/defaultScopes.ts","../node_modules/@sentry/src/asyncContext/index.ts","../node_modules/@sentry/src/currentScopes.ts","../node_modules/@sentry/src/integrations/functiontostring.ts","../node_modules/@sentry/src/integrations/dedupe.ts","../node_modules/@sentry/src/sdk.ts","../node_modules/@sentry/src/constants.ts","../node_modules/@sentry/src/stacktrace.ts","../node_modules/@sentry/src/normalize.ts","../node_modules/@sentry/src/memo.ts","../node_modules/@sentry/src/syncpromise.ts","../node_modules/@sentry/src/eventProcessors.ts","../node_modules/@sentry/src/semanticAttributes.ts","../node_modules/@sentry/src/baggage.ts","../node_modules/@sentry/src/tracing.ts","../node_modules/@sentry/src/metrics/metric-summary.ts","../node_modules/@sentry/src/tracing/spanstatus.ts","../node_modules/@sentry/src/utils/spanUtils.ts","../node_modules/@sentry/src/tracing/dynamicSamplingContext.ts","../node_modules/@sentry/src/utils/applyScopeDataToEvent.ts","../node_modules/@sentry/src/utils/prepareEvent.ts","../node_modules/@sentry/src/exports.ts","../node_modules/@sentry/src/supports.ts","../node_modules/@sentry/src/instrument/handlers.ts","../node_modules/@sentry/src/vendor/supportsHistory.ts","../node_modules/@sentry-internal/src/types.ts","../node_modules/@sentry-internal/src/instrument/history.ts","../node_modules/@sentry/src/dsn.ts","../node_modules/@sentry/src/envelope.ts","../node_modules/@sentry/src/error.ts","../node_modules/@sentry/src/api.ts","../node_modules/@sentry/src/utils/parseSampleRate.ts","../node_modules/@sentry/src/baseclient.ts","../node_modules/@sentry/src/utils/sdkMetadata.ts","../node_modules/src/debug-build.ts","../node_modules/src/eventbuilder.ts","../node_modules/src/helpers.ts","../node_modules/src/client.ts","../node_modules/@sentry/src/env.ts","../node_modules/src/userfeedback.ts","../node_modules/@sentry/src/clientreport.ts","../node_modules/@sentry-internal/src/instrument/dom.ts","../node_modules/@sentry-internal/src/instrument/xhr.ts","../node_modules/@sentry/src/breadcrumbs.ts","../node_modules/@sentry/src/instrument/console.ts","../node_modules/@sentry/src/instrument/fetch.ts","../node_modules/@sentry/src/severity.ts","../node_modules/@sentry/src/url.ts","../node_modules/src/integrations/breadcrumbs.ts","../node_modules/src/integrations/browserapierrors.ts","../node_modules/@sentry/src/instrument/globalError.ts","../node_modules/@sentry/src/instrument/globalUnhandledRejection.ts","../node_modules/src/integrations/globalhandlers.ts","../node_modules/src/integrations/httpcontext.ts","../node_modules/@sentry/src/aggregate-errors.ts","../node_modules/src/integrations/linkederrors.ts","../node_modules/src/stack-parsers.ts","../node_modules/@sentry-internal/src/debug-build.ts","../node_modules/@sentry-internal/src/getNativeImplementation.ts","../node_modules/@sentry/src/promisebuffer.ts","../node_modules/@sentry/src/ratelimit.ts","../node_modules/@sentry/src/transports/base.ts","../node_modules/src/transports/fetch.ts","../node_modules/src/sdk.ts","../node_modules/@sentry/src/utils/hasTracingEnabled.ts","../node_modules/@sentry/src/tracing/sentryNonRecordingSpan.ts","../node_modules/@sentry/src/tracing/measurement.ts","../node_modules/@sentry/src/tracing/utils.ts","../node_modules/@sentry/src/tracing/sentrySpan.ts","../node_modules/@sentry/src/tracing/logSpans.ts","../node_modules/@sentry/src/tracing/trace.ts","../node_modules/@sentry/src/tracing/sampling.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/bindReporter.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/getNavigationEntry.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/getActivationStart.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/initMetric.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/generateUniqueID.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/observe.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/onHidden.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/runOnce.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/getVisibilityWatcher.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/whenActivated.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/onFCP.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/getCLS.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/getFID.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/getINP.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/getLCP.ts","../node_modules/@sentry-internal/src/metrics/web-vitals/onTTFB.ts","../node_modules/@sentry-internal/src/metrics/instrument.ts","../node_modules/@sentry-internal/src/metrics/utils.ts","../node_modules/@sentry-internal/src/metrics/browserMetrics.ts","../node_modules/@sentry-internal/src/metrics/inp.ts","../node_modules/@sentry/src/tracing/idleSpan.ts","../node_modules/@sentry/src/tracing/errors.ts","../node_modules/@sentry/src/fetch.ts","../node_modules/src/tracing/request.ts","../node_modules/src/tracing/browserTracingIntegration.ts","../node_modules/@sentry/src/buildPolyfills/_optionalChain.ts","../node_modules/@sentry/src/utils/isSentryRequestUrl.ts","../node_modules/@sentry/src/node.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/handleBreadcrumbs.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/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/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","instrument.js","../node_modules/src/tracing/backgroundtab.ts","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/jwt-decode/build/esm/index.js","context/NotificationContext.js","context/UrlContext.js","context/AuthContext.js","utils/PrivateRoute.js","utils/RoleChecks.js","components/Header/Header.js","components/Footer/Footer.js","pages/SetPassword/SetPassword.js","pages/LoginPage/LoginPage.js","pages/StudyStudentLogin/StudyStudentLogin.js","pages/CreateTeacher.js","utils/api.js","pages/CreateAnyRole.js","components/ToDo/ToDo.js","components/FinishedStudy/FinishedStudy.js","components/HealthCheck/AccountHealthCheck.js","../node_modules/@fortawesome/free-solid-svg-icons/index.mjs","../node_modules/@fortawesome/fontawesome-svg-core/index.mjs","../node_modules/@fortawesome/react-fontawesome/index.es.js","components/HealthCheck/ToDoHealthCheck.js","pages/HomePage/HomePage.js","components/CreateSchool.js","pages/Schools.js","components/SchoolTeachers.js","pages/ShowSchool.js","components/CreateCourse.js","pages/Courses/Courses.js","components/CreateBulkStudents.js","components/CourseStudents.js","components/CourseToDoDates.js","pages/ShowCourse/ShowCourse.js","pages/StudySentences.js","components/DeleteAccount.js","components/ChangeUsername.js","pages/UserSettings/UserSettings.js","pages/SentenceDisplay.js","components/DeleteAccountConfirm.js","pages/FirstQuestionnaire/FirstQuestionnaire.js","pages/EmailQuestionnaire/EmailQuestionnaire.js","../node_modules/@gilbarbara/deep-equal/src/helpers.ts","../node_modules/@gilbarbara/deep-equal/src/index.ts","../node_modules/is-lite/src/helpers.ts","../node_modules/is-lite/src/index.ts","../node_modules/tree-changes/src/helpers.ts","../node_modules/tree-changes/src/index.ts","../node_modules/popper.js/src/utils/isBrowser.js","../node_modules/popper.js/src/utils/debounce.js","../node_modules/popper.js/src/utils/isFunction.js","../node_modules/popper.js/src/utils/getStyleComputedProperty.js","../node_modules/popper.js/src/utils/getParentNode.js","../node_modules/popper.js/src/utils/getScrollParent.js","../node_modules/popper.js/src/utils/getReferenceNode.js","../node_modules/popper.js/src/utils/isIE.js","../node_modules/popper.js/src/utils/getOffsetParent.js","../node_modules/popper.js/src/utils/getRoot.js","../node_modules/popper.js/src/utils/findCommonOffsetParent.js","../node_modules/popper.js/src/utils/isOffsetContainer.js","../node_modules/popper.js/src/utils/getScroll.js","../node_modules/popper.js/src/utils/getBordersSize.js","../node_modules/popper.js/src/utils/getWindowSizes.js","../node_modules/popper.js/src/utils/getClientRect.js","../node_modules/popper.js/src/utils/getBoundingClientRect.js","../node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js","../node_modules/popper.js/src/utils/includeScroll.js","../node_modules/popper.js/src/utils/isFixed.js","../node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js","../node_modules/popper.js/src/utils/getBoundaries.js","../node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../node_modules/popper.js/src/utils/computeAutoPlacement.js","../node_modules/popper.js/src/utils/getReferenceOffsets.js","../node_modules/popper.js/src/utils/getOuterSizes.js","../node_modules/popper.js/src/utils/getOppositePlacement.js","../node_modules/popper.js/src/utils/getPopperOffsets.js","../node_modules/popper.js/src/utils/find.js","../node_modules/popper.js/src/utils/runModifiers.js","../node_modules/popper.js/src/utils/findIndex.js","../node_modules/popper.js/src/methods/update.js","../node_modules/popper.js/src/utils/isModifierEnabled.js","../node_modules/popper.js/src/utils/getSupportedPropertyName.js","../node_modules/popper.js/src/methods/destroy.js","../node_modules/popper.js/src/utils/getWindow.js","../node_modules/popper.js/src/utils/setupEventListeners.js","../node_modules/popper.js/src/methods/enableEventListeners.js","../node_modules/popper.js/src/methods/disableEventListeners.js","../node_modules/popper.js/src/utils/removeEventListeners.js","../node_modules/popper.js/src/utils/isNumeric.js","../node_modules/popper.js/src/utils/setStyles.js","../node_modules/popper.js/src/modifiers/computeStyle.js","../node_modules/popper.js/src/utils/isModifierRequired.js","../node_modules/popper.js/src/methods/placements.js","../node_modules/popper.js/src/utils/clockwise.js","../node_modules/popper.js/src/modifiers/flip.js","../node_modules/popper.js/src/modifiers/offset.js","../node_modules/popper.js/src/modifiers/index.js","../node_modules/popper.js/src/modifiers/shift.js","../node_modules/popper.js/src/modifiers/preventOverflow.js","../node_modules/popper.js/src/modifiers/keepTogether.js","../node_modules/popper.js/src/modifiers/arrow.js","../node_modules/popper.js/src/utils/getOppositeVariation.js","../node_modules/popper.js/src/modifiers/inner.js","../node_modules/popper.js/src/modifiers/hide.js","../node_modules/popper.js/src/utils/getRoundedOffsets.js","../node_modules/popper.js/src/modifiers/applyStyle.js","../node_modules/popper.js/src/utils/setAttributes.js","../node_modules/popper.js/src/methods/defaults.js","../node_modules/popper.js/src/index.js","../node_modules/react-floater/node_modules/is-lite/src/index.ts","../node_modules/react-floater/node_modules/@gilbarbara/deep-equal/src/helpers.ts","../node_modules/react-floater/node_modules/@gilbarbara/deep-equal/src/index.ts","../node_modules/react-floater/node_modules/tree-changes/src/helpers.ts","../node_modules/react-floater/es/index.js","../node_modules/react-floater/node_modules/tree-changes/src/index.ts","../node_modules/react-joyride/src/literals/index.ts","../node_modules/react-joyride/src/modules/dom.ts","../node_modules/react-joyride/src/modules/helpers.ts","../node_modules/react-joyride/src/defaults.ts","../node_modules/react-joyride/src/styles.ts","../node_modules/react-joyride/src/modules/step.ts","../node_modules/react-joyride/src/modules/store.ts","../node_modules/react-joyride/src/components/Spotlight.tsx","../node_modules/react-joyride/src/components/Overlay.tsx","../node_modules/react-joyride/src/components/Portal.tsx","../node_modules/react-joyride/src/modules/scope.ts","../node_modules/react-joyride/src/components/Beacon.tsx","../node_modules/react-joyride/src/components/Tooltip/CloseButton.tsx","../node_modules/react-joyride/src/components/Tooltip/Container.tsx","../node_modules/react-joyride/src/components/Tooltip/index.tsx","../node_modules/react-joyride/src/components/Step.tsx","../node_modules/react-joyride/src/components/index.tsx","pages/Tutorial.js","components/Textarea.js","components/SpeechSynthesis.js","context/AudioRecordingContext.js","components/RecordingButton.js","components/DisplayResult.js","components/RestrictedAccessOverlay.js","components/AudioVisualizer.js","components/AusspracheTrainer/AusspracheTrainer.js","components/ProgressBar.js","pages/PronunciationTest.js","pages/FinalQuestionnaire/FinalQuestionnaire.js","pages/RequestPasswordReset/RequestPasswordReset.js","pages/ForgotUsername/ForgotUsername.js","pages/TutorialPage.js","pages/Legal/Contact.js","pages/Legal/Privacy.js","App.js","index.js"],"sourcesContent":["'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","var E_NOSCROLL = new Error('Element already at target scroll position')\nvar E_CANCELLED = new Error('Scroll cancelled')\nvar min = Math.min\nvar ms = Date.now\n\nmodule.exports = {\n left: make('scrollLeft'),\n top: make('scrollTop')\n}\n\nfunction make (prop) {\n return function scroll (el, to, opts, cb) {\n opts = opts || {}\n\n if (typeof opts == 'function') cb = opts, opts = {}\n if (typeof cb != 'function') cb = noop\n\n var start = ms()\n var from = el[prop]\n var ease = opts.ease || inOutSine\n var duration = !isNaN(opts.duration) ? +opts.duration : 350\n var cancelled = false\n\n return from === to ?\n cb(E_NOSCROLL, el[prop]) :\n requestAnimationFrame(animate), cancel\n\n function cancel () {\n cancelled = true\n }\n\n function animate (timestamp) {\n if (cancelled) return cb(E_CANCELLED, el[prop])\n\n var now = ms()\n var time = min(1, ((now - start) / duration))\n var eased = ease(time)\n\n el[prop] = (eased * (to - from)) + from\n\n time < 1 ?\n requestAnimationFrame(animate) :\n requestAnimationFrame(function () {\n cb(null, el[prop])\n })\n }\n }\n}\n\nfunction inOutSine (n) {\n return 0.5 * (1 - Math.cos(Math.PI * n))\n}\n\nfunction noop () {}\n","(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Scrollparent = factory();\n }\n}(this, function () {\n function isScrolling(node) {\n var overflow = getComputedStyle(node, null).getPropertyValue(\"overflow\");\n\n return overflow.indexOf(\"scroll\") > -1 || overflow.indexOf(\"auto\") > - 1;\n }\n\n function scrollParent(node) {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return undefined;\n }\n\n var current = node.parentNode;\n while (current.parentNode) {\n if (isScrolling(current)) {\n return current;\n }\n\n current = current.parentNode;\n }\n\n return document.scrollingElement || document.documentElement;\n }\n\n return scrollParent;\n}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\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","export const SDK_VERSION = '8.7.0';\n","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Client, MetricsAggregator, Scope } from '@sentry/types';\n\nimport type { SdkSource } from './env';\nimport { SDK_VERSION } from './version';\n\ninterface SentryCarrier {\n acs?: any;\n stack?: any;\n\n globalScope?: Scope;\n defaultIsolationScope?: Scope;\n defaultCurrentScope?: Scope;\n globalMetricsAggregators: WeakMap | undefined;\n\n /** Overwrites TextEncoder used in `@sentry/utils`, need for `react-native@0.73` and older */\n encodePolyfill?: (input: string) => Uint8Array;\n /** Overwrites TextDecoder used in `@sentry/utils`, need for `react-native@0.73` and older */\n decodePolyfill?: (input: Uint8Array) => string;\n}\n\n// TODO(v9): Clean up or remove this type\ntype BackwardsCompatibleSentryCarrier = SentryCarrier & {\n // pre-v7 hub (replaced by .stack)\n hub: any;\n integrations?: any[];\n logger: any;\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n};\n\n/** Internal global with common properties and Sentry extensions */\nexport type InternalGlobal = {\n navigator?: { userAgent?: string };\n console: Console;\n Sentry?: any;\n onerror?: {\n (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n onunhandledrejection?: {\n (event: unknown): boolean;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n SENTRY_ENVIRONMENT?: string;\n SENTRY_DSN?: string;\n SENTRY_RELEASE?: {\n id?: string;\n };\n SENTRY_SDK_SOURCE?: SdkSource;\n /**\n * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n * file.\n */\n _sentryDebugIds?: Record;\n __SENTRY__: Record, SentryCarrier> & {\n version?: string;\n } & BackwardsCompatibleSentryCarrier;\n /**\n * Raw module metadata that is injected by bundler plugins.\n *\n * Keys are `error.stack` strings, values are the metadata.\n */\n _sentryModuleMetadata?: Record;\n _sentryEsmLoaderHookRegistered?: boolean;\n};\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ = globalThis as unknown as InternalGlobal;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton(name: keyof SentryCarrier, creator: () => T, obj?: unknown): T {\n const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n disable(): void;\n enable(): void;\n isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox(callback: () => T): T {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console as Console;\n const wrappedFuncs: Partial = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] as LoggerMethod;\n });\n }\n}\n\nfunction makeLogger(): Logger {\n let enabled = false;\n const logger: Partial = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args: any[]) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger as Logger;\n}\n\nexport const logger = makeLogger();\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\ninterface VueViewModel {\n // Vue3\n __isVue?: boolean;\n // Vue2\n _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n","import { isString } from './is';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n elem: unknown,\n options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n if (!elem) {\n return '';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n const elem = el as {\n tagName?: string;\n id?: string;\n className?: string;\n getAttribute(key: string): string;\n };\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement(selector: string): E | null {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) as unknown as E;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precendence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n","import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n value: string,\n pattern: RegExp | string,\n requireExactStringMatch: boolean = false,\n): boolean {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n testString: string,\n patterns: Array = [],\n requireExactStringMatch: boolean = false,\n): boolean {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] as () => any;\n const wrapped = replacementFactory(original) as WrappedFunction;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nexport function convertToPlainObject(\n value: V,\n):\n | {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n }\n | {\n [ownProps: string]: unknown;\n message: string;\n name: string;\n stack?: string;\n }\n | V {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj: {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n } = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps: { [key: string]: unknown } = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj as Record)[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record, maxLength: number = 40): string {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys(inputValue: T): T {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue: T, memoizationMap: Map): T {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: { [key: string]: any } = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue as T;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: unknown[] = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item: unknown) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue as unknown as T;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n return !name || name === 'Object';\n } catch {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat as any).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n getRandomValues(array: Uint8Array): Uint8Array;\n randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n msCrypto?: CryptoInternal;\n crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = (): number => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial): void {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n major?: number;\n minor?: number;\n patch?: number;\n prerelease?: string;\n buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception as any).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify(maybeArray: T | T[]): T[] {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n","import type { Client, Event, EventHint, Integration, IntegrationFn, Options } from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\nimport { getClient } from './currentScopes';\n\nimport { DEBUG_BUILD } from './debug-build';\n\ndeclare module '@sentry/types' {\n interface Integration {\n isDefaultInstance?: boolean;\n }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n const integrationsByName: { [key: string]: Integration } = {};\n\n integrations.forEach(currentInstance => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick): Integration[] {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach(integration => {\n integration.isDefaultInstance = true;\n });\n\n let integrations: Integration[];\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n integrations = arrayify(userIntegrations(defaultIntegrations));\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n if (debugIndex !== -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n const integrationIndex: IntegrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration && integration.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n integration.setupOnce();\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nexport function addIntegration(integration: Integration): void {\n const client = getClient();\n\n if (!client) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex(arr: T[], callback: (item: T) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n if (callback(arr[i]) === true) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration(fn: Fn): (...args: Parameters) => Integration {\n return fn;\n}\n","import type { Event, IntegrationFn, StackFrame } from '@sentry/types';\nimport { getEventDescription, logger, stringMatchesSomePattern } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { defineIntegration } from '../integration';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/,\n /^Cannot redefine property: googletag$/,\n];\n\n/** Options for the InboundFilters integration */\nexport interface InboundFiltersOptions {\n allowUrls: Array;\n denyUrls: Array;\n ignoreErrors: Array;\n ignoreTransactions: Array;\n ignoreInternal: boolean;\n disableErrorDefaults: boolean;\n}\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options: Partial = {}) => {\n return {\n name: INTEGRATION_NAME,\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n}) satisfies IntegrationFn;\n\nexport const inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\nfunction _mergeOptions(\n internalOptions: Partial = {},\n clientOptions: Partial = {},\n): Partial {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event: Event, options: Partial): boolean {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event: Event, ignoreErrors?: Array): boolean {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event: Event, ignoreTransactions?: Array): boolean {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event: Event, denyUrls?: Array): boolean {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event: Event, allowUrls?: Array): boolean {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event: Event): string[] {\n const possibleMessages: string[] = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event: Event): boolean {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames: StackFrame[] = []): string | null {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event: Event): string | null {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n","import type { Client, Integration, MetricsAggregator, Scope } from '@sentry/types';\nimport { GLOBAL_OBJ, SDK_VERSION } from '@sentry/utils';\nimport type { AsyncContextStack } from './asyncContext/stackStrategy';\nimport type { AsyncContextStrategy } from './asyncContext/types';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: VersionedCarrier;\n}\n\ntype VersionedCarrier = {\n version?: string;\n} & Record, SentryCarrier>;\n\ninterface SentryCarrier {\n acs?: AsyncContextStrategy;\n stack?: AsyncContextStack;\n\n globalScope?: Scope;\n defaultIsolationScope?: Scope;\n defaultCurrentScope?: Scope;\n globalMetricsAggregators?: WeakMap | undefined;\n\n // TODO(v9): Remove these properties - they are no longer used and were left over in v8\n integrations?: Integration[];\n extensions?: {\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nexport function getSentryCarrier(carrier: Carrier): SentryCarrier {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n","import type { PropagationContext } from '@sentry/types';\nimport { uuid4 } from './misc';\n\n/**\n * Returns a new minimal propagation context\n */\nexport function generatePropagationContext(): PropagationContext {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n","import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n /**\n * The millisecond timestamp at which measurement began, measured in Unix time.\n */\n timeOrigin: number;\n /**\n * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n */\n now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n","import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit): Session {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session: Session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude): void {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n","import type { Scope, Span } from '@sentry/types';\nimport { addNonEnumerableProperty } from '@sentry/utils';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\ntype ScopeWithMaybeSpan = Scope & {\n [SCOPE_SPAN_FIELD]?: Span;\n};\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _setSpanForScope(scope: Scope, span: Span | undefined): void {\n if (span) {\n addNonEnumerableProperty(scope as ScopeWithMaybeSpan, SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope as ScopeWithMaybeSpan)[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _getSpanForScope(scope: ScopeWithMaybeSpan): Span | undefined {\n return scope[SCOPE_SPAN_FIELD];\n}\n","/* eslint-disable max-lines */\nimport type {\n Attachment,\n Breadcrumb,\n CaptureContext,\n Client,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n PropagationContext,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n ScopeData,\n Session,\n SeverityLevel,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, generatePropagationContext, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { updateSession } from './session';\nimport { _getSpanForScope, _setSpanForScope } from './utils/spanOnScope';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void>;\n\n /** Callback list that will be called during event processing. */\n protected _eventProcessors: EventProcessor[];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[];\n\n /** User */\n protected _user: User;\n\n /** Tags */\n protected _tags: { [key: string]: Primitive };\n\n /** Extra */\n protected _extra: Extras;\n\n /** Contexts */\n protected _contexts: Contexts;\n\n /** Attachments */\n protected _attachments: Attachment[];\n\n /** Propagation Context for distributed tracing */\n protected _propagationContext: PropagationContext;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n protected _level?: SeverityLevel;\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n protected _transactionName?: string;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /** The client on this scope */\n protected _client?: Client;\n\n /** Contains the last event id of a captured event. */\n protected _lastEventId?: string;\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n public constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * @inheritDoc\n */\n public clone(): ScopeClass {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n public setClient(client: Client | undefined): void {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n public setLastEventId(lastEventId: string | undefined): void {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public getClient(): C | undefined {\n return this._client as C | undefined;\n }\n\n /**\n * @inheritDoc\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(level: SeverityLevel): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext as ScopeContext, (captureContext as ScopeContext).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getLastBreadcrumb(): Breadcrumb | undefined {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n public getScopeData(): ScopeData {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setPropagationContext(context: PropagationContext): this {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getPropagationContext(): PropagationContext {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n// NOTE: By exporting this here as const & type, instead of doing `export class`,\n// We can get the correct class when importing from `@sentry/core`, but the original type (from `@sentry/types`)\n// This is helpful for interop, e.g. when doing `import type { Scope } from '@sentry/node';` (which re-exports this)\n\n/**\n * Holds additional event information.\n */\nexport const Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\nexport type Scope = ScopeInterface;\n","import type { Client, Scope as ScopeInterface } from '@sentry/types';\nimport { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes';\nimport { Scope } from '../scope';\n\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport type { AsyncContextStrategy } from './types';\n\ninterface Layer {\n client?: Client;\n scope: ScopeInterface;\n}\n\n/**\n * This is an object that holds a stack of scopes.\n */\nexport class AsyncContextStack {\n private readonly _stack: Layer[];\n private _isolationScope: ScopeInterface;\n\n public constructor(scope?: ScopeInterface, isolationScope?: ScopeInterface) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n public withScope(callback: (scope: ScopeInterface) => T): T {\n const scope = this._pushScope();\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n public getClient(): C | undefined {\n return this.getStackTop().client as C;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n public getScope(): ScopeInterface {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n public getIsolationScope(): ScopeInterface {\n return this._isolationScope;\n }\n\n /**\n * Returns the scope stack for domains or the process.\n */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * Push a scope to the stack.\n */\n private _pushScope(): ScopeInterface {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n private _popScope(): boolean {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack(): AsyncContextStack {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback: (scope: ScopeInterface) => T): T {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope: ScopeInterface, callback: (scope: ScopeInterface) => T): T {\n const stack = getAsyncContextStack() as AsyncContextStack;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback: (isolationScope: ScopeInterface) => T): T {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nexport function getStackAsyncContextStrategy(): AsyncContextStrategy {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope: ScopeInterface, callback: (isolationScope: ScopeInterface) => T) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n","import type { Scope } from '@sentry/types';\nimport { getGlobalSingleton } from '@sentry/utils';\nimport { Scope as ScopeClass } from './scope';\n\n/** Get the default current scope. */\nexport function getDefaultCurrentScope(): Scope {\n return getGlobalSingleton('defaultCurrentScope', () => new ScopeClass());\n}\n\n/** Get the default isolation scope. */\nexport function getDefaultIsolationScope(): Scope {\n return getGlobalSingleton('defaultIsolationScope', () => new ScopeClass());\n}\n","import type { Carrier } from './../carrier';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport { getStackAsyncContextStrategy } from './stackStrategy';\nimport type { AsyncContextStrategy } from './types';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nexport function getAsyncContextStrategy(carrier: Carrier): AsyncContextStrategy {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n","import type { Scope } from '@sentry/types';\nimport type { Client } from '@sentry/types';\nimport { getGlobalSingleton } from '@sentry/utils';\nimport { getAsyncContextStrategy } from './asyncContext';\nimport { getMainCarrier } from './carrier';\nimport { Scope as ScopeClass } from './scope';\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context.\n */\nexport function getIsolationScope(): Scope {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): Scope {\n return getGlobalSingleton('globalScope', () => new ScopeClass());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\nexport function withScope(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope(scope: Scope | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope(\n ...rest: [callback: (scope: Scope) => T] | [scope: Scope | undefined, callback: (scope: Scope) => T]\n): T {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\nexport function withIsolationScope(callback: (isolationScope: Scope) => T): T;\n/**\n * Set the provided isolation scope as active in the given callback. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * If you pass in `undefined` as a scope, it will fork a new isolation scope, the same as if no scope is passed.\n */\nexport function withIsolationScope(isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T): T;\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nexport function withIsolationScope(\n ...rest:\n | [callback: (isolationScope: Scope) => T]\n | [isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T]\n): T {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient(): C | undefined {\n return getCurrentScope().getClient();\n}\n","import type { Client, IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../currentScopes';\nimport { defineIntegration } from '../integration';\n\nlet originalFunctionToString: () => void;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Function.prototype.toString = function (this: WrappedFunction, ...args: any[]): string {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() as Client) && originalFunction !== undefined ? originalFunction : this;\n return originalFunctionToString.apply(context, args);\n };\n } catch {\n // ignore errors here, just don't patch this\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n * integrations: [\n * functionToStringIntegration(),\n * ],\n * });\n * ```\n */\nexport const functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n","import type { Event, Exception, IntegrationFn, StackFrame } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport { defineIntegration } from '../integration';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent: Event | undefined;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Deduplication filter.\n */\nexport const dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nexport function _shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean {\n let currentFrames = _getFramesFromEvent(currentEvent);\n let previousFrames = _getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames as StackFrame[];\n previousFrames = previousFrames as StackFrame[];\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n const frameA = previousFrames[i];\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint as string[];\n previousFingerprint = previousFingerprint as string[];\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event: Event): Exception | undefined {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nfunction _getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n try {\n // @ts-expect-error Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n","import type { Client, ClientOptions } from '@sentry/types';\nimport { consoleSandbox, logger } from '@sentry/utils';\nimport { getCurrentScope } from './currentScopes';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/** A class object that can instantiate Client objects. */\nexport type ClientClass = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind(\n clientClass: ClientClass,\n options: O,\n): void {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n setCurrentClient(client);\n client.init();\n}\n\n/**\n * Make the given client the current client.\n */\nexport function setCurrentClient(client: Client): void {\n getCurrentScope().setClient(client);\n}\n","export const DEFAULT_ENVIRONMENT = 'production';\n","import type { StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\nexport const UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack: string, skipFirstLines: number = 0, framesToPop: number = 0): StackFrame[] => {\n const frames: StackFrame[] = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i];\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n","import type { Primitive } from '@sentry/types';\n\nimport { isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nexport function normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: { [key: string]: any },\n // Default Node.js REPL depth\n depth: number = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize: number = 100 * 1024,\n): T {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key: string,\n value: unknown,\n depth: number = +Infinity,\n maxProperties: number = +Infinity,\n memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n (['number', 'boolean', 'string'].includes(typeof value) && !Number.isNaN(value))\n ) {\n return value as Primitive;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value as ObjOrArray)['__sentry_skip_normalization__']) {\n return value as ObjOrArray;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value as ObjOrArray)['__sentry_override_normalization_depth__'] === 'number'\n ? ((value as ObjOrArray)['__sentry_override_normalization_depth__'] as number)\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value as ObjOrArray);\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key: unknown,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value: Exclude,\n): string {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n // memoize\n (obj: any) => boolean,\n // unmemoize\n (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner: any = hasWeakSet ? new WeakSet() : [];\n function memoize(obj: any): boolean {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj: any): void {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n /** Pending */\n PENDING = 0,\n /** Resolved / OK */\n RESOLVED = 1,\n /** Rejected / Error */\n REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike;\nexport function resolvedSyncPromise(value: T | PromiseLike): PromiseLike;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise(value?: T | PromiseLike): PromiseLike {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise(reason?: any): PromiseLike {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise implements PromiseLike {\n private _state: States;\n private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n private _value: any;\n\n public constructor(\n executor: (resolve: (value?: T | PromiseLike | null) => void, reject: (reason?: any) => void) => void,\n ) {\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n public then(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike) | null,\n ): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result as any);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n public catch(\n onrejected?: ((reason: any) => TResult | PromiseLike) | null,\n ): PromiseLike {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n public finally(onfinally?: (() => void) | null): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n let val: TResult | any;\n let isRejected: boolean;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val as unknown as any);\n });\n });\n }\n\n /** JSDoc */\n private readonly _resolve = (value?: T | PromiseLike | null) => {\n this._setResult(States.RESOLVED, value);\n };\n\n /** JSDoc */\n private readonly _reject = (reason?: any) => {\n this._setResult(States.REJECTED, reason);\n };\n\n /** JSDoc */\n private readonly _setResult = (state: States, value?: T | PromiseLike | any) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value as PromiseLike).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n /** JSDoc */\n private readonly _executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value as unknown as any);\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };\n}\n\nexport { SyncPromise };\n","import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n processors: EventProcessor[],\n event: Event | null,\n hint: EventHint,\n index: number = 0,\n): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) as Event | null;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * The id of the profile that this span occured in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nexport const SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n","import type { DynamicSamplingContext } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { isString } from './is';\nimport { logger } from './logger';\n\nexport const BAGGAGE_HEADER_NAME = 'baggage';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nexport const SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nexport const MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nexport function baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader: string | string[] | number | null | undefined | boolean,\n): Partial | undefined {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce>((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext as Partial;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nexport function dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext?: Partial,\n): string | undefined {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce>(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nexport function parseBaggageHeader(\n baggageHeader: string | string[] | number | null | undefined | boolean,\n): Record | undefined {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n return baggageHeader.reduce>((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n for (const key of Object.keys(currBaggageObject)) {\n acc[key] = currBaggageObject[key];\n }\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader: string): Record {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce>((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object: Record): string | undefined {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n","import type { PropagationContext, TraceparentData } from '@sentry/types';\n\nimport { baggageHeaderToDynamicSamplingContext } from './baggage';\nimport { uuid4 } from './misc';\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nexport const TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nexport function extractTraceparentData(traceparent?: string): TraceparentData | undefined {\n if (!traceparent) {\n return undefined;\n }\n\n const matches = traceparent.match(TRACEPARENT_REGEXP);\n if (!matches) {\n return undefined;\n }\n\n let parentSampled: boolean | undefined;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nexport function propagationContextFromHeaders(\n sentryTrace: string | undefined,\n baggage: string | number | boolean | string[] | null | undefined,\n): PropagationContext {\n const traceparentData = extractTraceparentData(sentryTrace);\n const dynamicSamplingContext = baggageHeaderToDynamicSamplingContext(baggage);\n\n const { traceId, parentSpanId, parentSampled } = traceparentData || {};\n\n if (!traceparentData) {\n return {\n traceId: traceId || uuid4(),\n spanId: uuid4().substring(16),\n };\n } else {\n return {\n traceId: traceId || uuid4(),\n parentSpanId: parentSpanId || uuid4().substring(16),\n spanId: uuid4().substring(16),\n sampled: parentSampled,\n dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n };\n }\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nexport function generateSentryTraceHeader(\n traceId: string = uuid4(),\n spanId: string = uuid4().substring(16),\n sampled?: boolean,\n): string {\n let sampledString = '';\n if (sampled !== undefined) {\n sampledString = sampled ? '-1' : '-0';\n }\n return `${traceId}-${spanId}${sampledString}`;\n}\n","import type { MeasurementUnit, Span } from '@sentry/types';\nimport type { MetricSummary } from '@sentry/types';\nimport type { Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport type { MetricType } from './types';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\ntype MetricSummaryStorage = Map;\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\ntype SpanWithPotentialMetrics = Span & {\n [METRICS_SPAN_FIELD]?: MetricSummaryStorage;\n};\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nexport function getMetricSummaryJsonForSpan(span: Span): Record> | undefined {\n const storage = (span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output: Record> = {};\n\n for (const [, [exportKey, summary]] of storage) {\n if (!output[exportKey]) {\n output[exportKey] = [];\n }\n\n output[exportKey].push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nexport function updateMetricSummaryOnSpan(\n span: Span,\n metricType: MetricType,\n sanitizedName: string,\n value: number,\n unit: MeasurementUnit,\n tags: Record,\n bucketKey: string,\n): void {\n const existingStorage = (span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD] = new Map());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n","import type { Span, SpanStatus } from '@sentry/types';\n\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1;\nexport const SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatus {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n","import type {\n MeasurementUnit,\n Primitive,\n Span,\n SpanAttributes,\n SpanJSON,\n SpanOrigin,\n SpanStatus,\n SpanTimeInput,\n TraceContext,\n} from '@sentry/types';\nimport {\n addNonEnumerableProperty,\n dropUndefinedKeys,\n generateSentryTraceHeader,\n timestampInSeconds,\n} from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport { getCurrentScope } from '../currentScopes';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary';\nimport type { MetricType } from '../metrics/types';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes';\nimport type { SentrySpan } from '../tracing/sentrySpan';\nimport { SPAN_STATUS_OK, SPAN_STATUS_UNSET } from '../tracing/spanstatus';\nimport { _getSpanForScope } from './spanOnScope';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nexport function spanToTransactionTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { parent_span_id } = spanToJSON(span);\n\n return dropUndefinedKeys({ parent_span_id, span_id, trace_id });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nexport function spanToJSON(span: Span): Partial {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span: Span): span is OpenTelemetrySdkTraceBaseSpan {\n const castSpan = span as OpenTelemetrySdkTraceBaseSpan;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\nexport interface OpenTelemetrySdkTraceBaseSpan extends Span {\n attributes: SpanAttributes;\n startTime: SpanTimeInput;\n name: string;\n status: SpanStatus;\n endTime: SpanTimeInput;\n parentSpanId?: string;\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span: Span): span is SentrySpan {\n return typeof (span as SentrySpan).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nexport function getStatusMessage(status: SpanStatus | undefined): string | undefined {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\ntype SpanWithPotentialChildren = Span & {\n [CHILD_SPANS_FIELD]?: Set;\n [ROOT_SPAN_FIELD]?: Span;\n};\n\n/**\n * Adds an opaque child span reference to a span.\n */\nexport function addChildSpanToSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan as SpanWithPotentialChildren, ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nexport function removeChildSpanFromSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nexport function getSpanDescendants(span: SpanWithPotentialChildren): Span[] {\n const resultSet = new Set();\n\n function addSpanChildren(span: SpanWithPotentialChildren): void {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nexport function getRootSpan(span: SpanWithPotentialChildren): Span {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nexport function updateMetricSummaryOnActiveSpan(\n metricType: MetricType,\n sanitizedName: string,\n value: number,\n unit: MeasurementUnit,\n tags: Record,\n bucketKey: string,\n): void {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n","import type { Client, DynamicSamplingContext, Span } from '@sentry/types';\nimport {\n addNonEnumerableProperty,\n dropUndefinedKeys,\n dynamicSamplingContextToSentryBaggageHeader,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient } from '../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\ntype SpanWithMaybeDsc = Span & {\n [FROZEN_DSC_FIELD]?: Partial | undefined;\n};\n\n/**\n * Freeze the given DSC on the given span.\n */\nexport function freezeDscOnSpan(span: Span, dsc: Partial): void {\n const spanWithMaybeDsc = span as SpanWithMaybeDsc;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(trace_id: string, client: Client): DynamicSamplingContext {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) as DynamicSamplingContext;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly> {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client);\n\n const rootSpan = getRootSpan(span);\n if (!rootSpan) {\n return dsc;\n }\n\n const frozenDsc = (rootSpan as SpanWithMaybeDsc)[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n if (source && source !== 'url') {\n dsc.transaction = jsonSpan.description;\n }\n\n dsc.sampled = String(spanIsSampled(rootSpan));\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nexport function spanToBaggageHeader(span: Span): string | undefined {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n","import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan, spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n if (mergeVal && Object.keys(mergeVal).length) {\n // Clone object\n data[prop] = { ...data[prop] };\n for (const key in mergeVal) {\n if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n data[prop][key] = mergeVal[key];\n }\n }\n }\n}\n\n/** Exported only for tests */\nexport function mergeArray(\n event: Event,\n prop: Prop,\n mergeVal: ScopeData[Prop],\n): void {\n const prevVal = event[prop];\n // If we are not merging any new values,\n // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n if (!mergeVal.length && (!prevVal || prevVal.length)) {\n return;\n }\n\n const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n","import type {\n CaptureContext,\n Client,\n ClientOptions,\n Event,\n EventHint,\n Scope as ScopeInterface,\n ScopeContext,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalScope } from '../currentScopes';\nimport { notifyEventProcessors } from '../eventProcessors';\nimport { Scope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n scope?: ScopeInterface,\n client?: Client,\n isolationScope?: ScopeInterface,\n): PromiseLike {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n const prepared: Event = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\nconst debugIdStackParserCache = new WeakMap>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n if (!debugIdMap) {\n return;\n }\n\n let debugIdStackFramesCache: Map;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = Object.keys(debugIdMap).reduce>((acc, debugIdStackTrace) => {\n let parsedStack: StackFrame[];\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n if (stackFrame.filename) {\n acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n break;\n }\n }\n return acc;\n }, {});\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event!.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\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 * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap: Record = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\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 if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.keys(filenameDebugIdMap).forEach(filename => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id: filenameDebugIdMap[filename],\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n if (!event) {\n return null;\n }\n\n const normalized: Event = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope: ScopeInterface | undefined,\n captureContext: CaptureContext | undefined,\n): ScopeInterface | undefined {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial | EventHint): hint is Partial {\n return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n","import type {\n CaptureContext,\n CheckIn,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n FinishedCheckIn,\n MonitorConfig,\n Primitive,\n Session,\n SessionContext,\n SeverityLevel,\n User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception: any,\n hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param exception The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): void {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor(\n monitorSlug: CheckIn['monitorSlug'],\n callback: () => T,\n upsertMonitorConfig?: MonitorConfig,\n): T {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status: FinishedCheckIn['status']): void {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n () => {\n finishCheckIn('error');\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n const client = getClient();\n return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n","import { DEBUG_BUILD } from './debug-build';\nimport { logger } from './logger';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\ndeclare const EdgeRuntime: string | undefined;\n\nexport { supportsHistory } from './vendor/supportsHistory';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-expect-error It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n if (!('fetch' in WINDOW)) {\n return false;\n }\n\n try {\n new Headers();\n new Request('http://www.example.com');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNativeFunction(func: Function): boolean {\n return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n if (typeof EdgeRuntime === 'string') {\n return true;\n }\n\n if (!supportsFetch()) {\n return false;\n }\n\n // Fast path to avoid DOM I/O\n // eslint-disable-next-line @typescript-eslint/unbound-method\n if (isNativeFunction(WINDOW.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n const doc = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (doc && typeof (doc.createElement as unknown) === 'function') {\n try {\n const sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n result = isNativeFunction(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n DEBUG_BUILD &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReferrerPolicy(): boolean {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' as ReferrerPolicy,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n","import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n Object.keys(handlers).forEach(key => {\n handlers[key as InstrumentHandlerType] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n","// Based on https://github.com/angular/angular.js/pull/13945/files\n// The MIT License\n\n// Copyright (c) 2010-2016 Google, Inc. http://angularjs.org\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\n// all 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\n// THE SOFTWARE.\n\nimport { GLOBAL_OBJ } from '../worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsHistory(): boolean {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n /* eslint-disable @typescript-eslint/no-unsafe-member-access */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const chromeVar = (WINDOW as any).chrome;\n const isChromePackagedApp = chromeVar && chromeVar.app && chromeVar.app.runtime;\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n const hasHistoryApi = 'history' in WINDOW && !!WINDOW.history.pushState && !!WINDOW.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n","import { GLOBAL_OBJ } from '@sentry/utils';\n\nexport const WINDOW = GLOBAL_OBJ as typeof GLOBAL_OBJ &\n // document is not available in all browser environments (webworkers). We make it optional so you have to explicitly check for it\n Omit &\n Partial>;\n","import type { HandlerDataHistory } from '@sentry/types';\nimport { addHandler, fill, maybeInstrument, supportsHistory, triggerHandlers } from '@sentry/utils';\nimport { WINDOW } from '../types';\n\nlet lastHref: string | undefined;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addHistoryInstrumentationHandler(handler: (data: HandlerDataHistory) => void): void {\n const type = 'history';\n addHandler(type, handler);\n maybeInstrument(type, instrumentHistory);\n}\n\nfunction instrumentHistory(): void {\n if (!supportsHistory()) {\n return;\n }\n\n const oldOnPopState = WINDOW.onpopstate;\n WINDOW.onpopstate = function (this: WindowEventHandlers, ...args: unknown[]) {\n const to = WINDOW.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n const from = lastHref;\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n return function (this: History, ...args: unknown[]): void {\n const url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n const from = lastHref;\n const to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n const handlerData: HandlerDataHistory = { from, to };\n triggerHandlers('history', handlerData);\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(WINDOW.history, 'pushState', historyReplacementFunction);\n fill(WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n","import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() as string;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents: ReadonlyArray = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n","import type {\n Attachment,\n AttachmentItem,\n BaseEnvelopeHeaders,\n BaseEnvelopeItemHeaders,\n DataCategory,\n DsnComponents,\n Envelope,\n EnvelopeItemType,\n Event,\n EventEnvelopeHeaders,\n SdkInfo,\n SdkMetadata,\n SpanItem,\n SpanJSON,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope(headers: E[0], items: E[1] = []): E {\n return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope(envelope: E, newItem: E[1][number]): E {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem(\n envelope: Envelope,\n callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input: string): Uint8Array {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input)\n : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input: Uint8Array): string {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input)\n : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope): string | Uint8Array {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n function append(next: string | Uint8Array): void {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload: string;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(env: string | Uint8Array): Envelope {\n let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n function readBinary(length: number): Uint8Array {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson(): T {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(decodeUTF8(readBinary(i))) as T;\n }\n\n const envelopeHeader = readJson();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items: [any, any][] = [];\n\n while (buffer.length) {\n const itemHeader = readJson();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nexport function createSpanEnvelopeItem(spanJson: Partial): SpanItem {\n const spanHeaders: SpanItem[0] = {\n type: 'span',\n };\n\n return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(attachment: Attachment): AttachmentItem {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n event: Event,\n sdkInfo: SdkInfo | undefined,\n tunnel: string | undefined,\n dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n","import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n /** Display name of this error instance. */\n public name: string;\n\n public logLevel: ConsoleLevel;\n\n public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n super(message);\n\n this.name = new.target.prototype.constructor.name;\n // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n // instances of `SentryError` fail `obj instanceof SentryError` checks.\n Object.setPrototypeOf(this, new.target.prototype);\n this.logLevel = logLevel;\n }\n}\n","import type { DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(dsn: DsnComponents, tunnel?: string, sdkInfo?: SdkInfo): string {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n dsnLike: DsnLike,\n dialogOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n user?: { name?: string; email?: string };\n },\n): string {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n","import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nexport function parseSampleRate(sampleRate: unknown): number | undefined {\n if (typeof sampleRate === 'boolean') {\n return Number(sampleRate);\n }\n\n const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n sampleRate,\n )} of type ${JSON.stringify(typeof sampleRate)}.`,\n );\n return undefined;\n }\n\n return rate;\n}\n","/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n ClientOptions,\n DataCategory,\n DsnComponents,\n DynamicSamplingContext,\n Envelope,\n ErrorEvent,\n Event,\n EventDropReason,\n EventHint,\n EventProcessor,\n FeedbackEvent,\n Integration,\n Outcome,\n ParameterizedString,\n SdkMetadata,\n Session,\n SessionAggregates,\n SeverityLevel,\n Span,\n SpanAttributes,\n SpanContextData,\n SpanJSON,\n StartSpanOptions,\n TransactionEvent,\n Transport,\n TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n SentryError,\n SyncPromise,\n addItemToEnvelope,\n checkOrSetAlreadyCaught,\n createAttachmentEnvelopeItem,\n dropUndefinedKeys,\n isParameterizedString,\n isPlainObject,\n isPrimitive,\n isThenable,\n logger,\n makeDsn,\n rejectedSyncPromise,\n resolvedSyncPromise,\n uuid4,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { parseSampleRate } from './utils/parseSampleRate';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nexport abstract class BaseClient implements Client {\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n protected readonly _dsn?: DsnComponents;\n\n protected readonly _transport?: Transport;\n\n /** Array of set up integrations. */\n protected _integrations: IntegrationIndex;\n\n /** Number of calls being processed */\n protected _numProcessing: number;\n\n protected _eventProcessors: EventProcessor[];\n\n /** Holds flushable */\n private _outcomes: { [key: string]: number };\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _hooks: Record;\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n protected constructor(options: O) {\n this._options = options;\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(\n message: ParameterizedString,\n level?: SeverityLevel,\n hint?: EventHint,\n currentScope?: Scope,\n ): string {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, currentScope?: Scope): string {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(session: Session): void {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getDsn(): DsnComponents | undefined {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n public getOptions(): O {\n return this._options;\n }\n\n /**\n * @see SdkMetadata in @sentry/types\n *\n * @return The metadata of the SDK\n */\n public getSdkMetadata(): SdkMetadata | undefined {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport | undefined {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n public flush(timeout?: number): PromiseLike {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /** Get all installed event processors. */\n public getEventProcessors(): EventProcessor[] {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n public addEventProcessor(eventProcessor: EventProcessor): void {\n this._eventProcessors.push(eventProcessor);\n }\n\n /** @inheritdoc */\n public init(): void {\n if (this._isEnabled()) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n public getIntegrationByName(integrationName: string): T | undefined {\n return this._integrations[integrationName] as T | undefined;\n }\n\n /**\n * @inheritDoc\n */\n public addIntegration(integration: Integration): void {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event, hint: EventHint = {}): void {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n\n const promise = this.sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session | SessionAggregates): void {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n // Note: we use `event` in replay, where we overwrite this hook.\n\n if (this._options.sendClientReports) {\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Adding outcome: \"${key}\"`);\n\n // The following works because undefined + 1 === NaN and NaN is falsy\n this._outcomes[key] = this._outcomes[key] + 1 || 1;\n }\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n public on(hook: 'spanStart', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'spanEnd', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'idleSpanEnableAutoFinish', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'afterSendEvent', callback: (event: Event, sendResponse: TransportMakeRequestResponse) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSendFeedback',\n callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n ): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSampling',\n callback: (\n samplingData: {\n spanAttributes: SpanAttributes;\n spanName: string;\n parentSampled?: boolean;\n parentContext?: SpanContextData;\n },\n samplingDecision: { decision: boolean },\n ) => void,\n ): void;\n\n /** @inheritdoc */\n public on(\n hook: 'startPageLoadSpan',\n callback: (\n options: StartSpanOptions,\n traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n ) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => void): void;\n\n public on(hook: 'flush', callback: () => void): void;\n\n public on(hook: 'close', callback: () => void): void;\n\n /** @inheritdoc */\n public on(hook: string, callback: unknown): void {\n if (!this._hooks[hook]) {\n this._hooks[hook] = [];\n }\n\n // @ts-expect-error We assue the types are correct\n this._hooks[hook].push(callback);\n }\n\n /** @inheritdoc */\n public emit(\n hook: 'beforeSampling',\n samplingData: {\n spanAttributes: SpanAttributes;\n spanName: string;\n parentSampled?: boolean;\n parentContext?: SpanContextData;\n },\n samplingDecision: { decision: boolean },\n ): void;\n\n /** @inheritdoc */\n public emit(hook: 'spanStart', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'spanEnd', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'idleSpanEnableAutoFinish', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n /** @inheritdoc */\n public emit(\n hook: 'startPageLoadSpan',\n options: StartSpanOptions,\n traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n ): void;\n\n /** @inheritdoc */\n public emit(hook: 'startNavigationSpan', options: StartSpanOptions): void;\n\n /** @inheritdoc */\n public emit(hook: 'flush'): void;\n\n /** @inheritdoc */\n public emit(hook: 'close'): void;\n\n /** @inheritdoc */\n public emit(hook: string, ...rest: unknown[]): void {\n if (this._hooks[hook]) {\n this._hooks[hook].forEach(callback => callback(...rest));\n }\n }\n\n /**\n * @inheritdoc\n */\n public sendEnvelope(envelope: Envelope): PromiseLike {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending event:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n protected _setupIntegrations(): void {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n protected _updateSessionFromEvent(session: Session, event: Event): void {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n protected _isClientDoneProcessing(timeout?: number): PromiseLike {\n return new SyncPromise(resolve => {\n let ticked: number = 0;\n const tick: number = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n protected _isEnabled(): boolean {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n currentScope?: Scope,\n isolationScope = getIsolationScope(),\n ): PromiseLike {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n const propagationContext = {\n ...isolationScope.getPropagationContext(),\n ...(currentScope ? currentScope.getPropagationContext() : undefined),\n };\n\n const trace = evt.contexts && evt.contexts.trace;\n if (!trace && propagationContext) {\n const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n evt.contexts = {\n trace: dropUndefinedKeys({\n trace_id,\n span_id: spanId,\n parent_span_id: parentSpanId,\n }),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n }\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n const sentryError = reason as SentryError;\n if (sentryError.logLevel === 'log') {\n logger.log(sentryError.message);\n } else {\n logger.warn(sentryError);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n protected _processEvent(event: Event, hint: EventHint, currentScope?: Scope): PromiseLike {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope && currentScope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n protected _process(promise: PromiseLike): void {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n protected _clearOutcomes(): Outcome[] {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.keys(outcomes).map(key => {\n const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n });\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike;\n\n /**\n * @inheritDoc\n */\n public abstract eventFromMessage(\n _message: ParameterizedString,\n _level?: SeverityLevel,\n _hint?: EventHint,\n ): PromiseLike;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult: PromiseLike | Event | null,\n beforeSendLabel: string,\n): PromiseLike | Event | null {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n): PromiseLike | Event | null {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event)) {\n if (event.spans && beforeSendSpan) {\n const processedSpans: SpanJSON[] = [];\n for (const span of event.spans) {\n const processedSpan = beforeSendSpan(span);\n if (processedSpan) {\n processedSpans.push(processedSpan);\n }\n }\n event.spans = processedSpans;\n }\n\n if (beforeSendTransaction) {\n return beforeSendTransaction(event, hint);\n }\n }\n\n return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n","import type { Options } from '@sentry/types';\nimport { SDK_VERSION } from '@sentry/utils';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nexport function applySdkMetadata(options: Options, name: string, names = [name], source = 'npm'): void {\n const metadata = options._metadata || {};\n\n if (!metadata.sdk) {\n metadata.sdk = {\n name: `sentry.javascript.${name}`,\n packages: names.map(name => ({\n name: `${source}:@sentry/${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n };\n }\n\n options._metadata = metadata;\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 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\nfunction 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 // If we can, we extract an exception from the object properties\n const errorFromProp = getErrorPropertyFromObject(exception);\n\n const extra = {\n __serialized__: normalizeToSize(exception, normalizeDepth),\n };\n\n if (errorFromProp) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, errorFromProp)],\n },\n extra,\n };\n }\n\n const event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n } as Exception,\n ],\n },\n extra,\n } satisfies Event;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n event.exception.values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const skipLines = getSkipFirstStackStringLines(ex);\n const framesToPop = getPopFirstTopFrames(ex);\n\n try {\n return stackParser(stacktrace, skipLines, framesToPop);\n } catch (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\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex: Error): number {\n if (ex && reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n\n return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex: Error & { framesToPop?: unknown }): number {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n/**\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 level: 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\nfunction eventFromString(\n stackParser: StackParser,\n message: ParameterizedString,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n }\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\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record): Error | undefined {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n","import { captureException, withScope } from '@sentry/core';\nimport type { 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","import type { Scope } from '@sentry/core';\nimport { applySdkMetadata } from '@sentry/core';\nimport { BaseClient } from '@sentry/core';\nimport type {\n BrowserClientProfilingOptions,\n BrowserClientReplayOptions,\n ClientOptions,\n Event,\n EventHint,\n Options,\n ParameterizedString,\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 /** If configured, this URL will be used as base URL for lazy loading integration. */\n cdnBaseUrl?: string;\n };\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\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 opts = {\n // We default this to true, as it is the safer scenario\n parentSpanIsAlwaysRootSpan: true,\n ...options,\n };\n const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();\n applySdkMetadata(opts, 'browser', ['browser'], sdkSource);\n\n super(opts);\n\n if (opts.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 level: 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 * @deprecated Use `captureFeedback` instead.\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","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\ndeclare const __SENTRY_BROWSER_BUNDLE__: boolean | undefined;\n\nexport type SdkSource = 'npm' | 'cdn' | 'loader';\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nexport function isBrowserBundle(): boolean {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nexport function getSDKSource(): SdkSource {\n // @ts-expect-error __SENTRY_SDK_SOURCE__ is injected by rollup during build process\n return __SENTRY_SDK_SOURCE__;\n}\n","import type { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback, UserFeedbackItem } from '@sentry/types';\nimport { createEnvelope, dsnToString } from '@sentry/utils';\n\n/**\n * Creates an envelope from a user feedback.\n */\nexport function createUserFeedbackEnvelope(\n feedback: UserFeedback,\n {\n metadata,\n tunnel,\n dsn,\n }: {\n metadata: SdkMetadata | undefined;\n tunnel: string | undefined;\n dsn: DsnComponents | undefined;\n },\n): EventEnvelope {\n const headers: EventEnvelope[0] = {\n event_id: feedback.event_id,\n sent_at: new Date().toISOString(),\n ...(metadata &&\n metadata.sdk && {\n sdk: {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n },\n }),\n ...(!!tunnel && !!dsn && { dsn: dsnToString(dsn) }),\n };\n const item = createUserFeedbackEnvelopeItem(feedback);\n\n return createEnvelope(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback: UserFeedback): UserFeedbackItem {\n const feedbackHeaders: UserFeedbackItem[0] = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n","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 { HandlerDataDom } from '@sentry/types';\n\nimport { addHandler, addNonEnumerableProperty, fill, maybeInstrument, triggerHandlers, uuid4 } from '@sentry/utils';\nimport { WINDOW } from '../types';\n\ntype SentryWrappedTarget = HTMLElement & { _sentryId?: string };\n\ntype AddEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n) => void;\ntype RemoveEventListener = (\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n) => void;\n\ntype InstrumentedElement = Element & {\n __sentry_instrumentation_handlers__?: {\n [key in 'click' | 'keypress']?: {\n handler?: unknown;\n /** The number of custom listeners attached to this element */\n refCount: number;\n };\n };\n};\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID: number | undefined;\nlet lastCapturedEventType: string | undefined;\nlet lastCapturedEventTargetId: string | undefined;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addClickKeypressInstrumentationHandler(handler: (data: HandlerDataDom) => void): void {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nexport function instrumentDOM(): void {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n const proto = (WINDOW as any)[target] && (WINDOW as any)[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener: AddEventListener): AddEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): AddEventListener {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener: RemoveEventListener): RemoveEventListener {\n return function (\n this: Element,\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this as InstrumentedElement;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event: Event): boolean {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target as SentryWrappedTarget)._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType: string, target: SentryWrappedTarget | null): boolean {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler: (data: HandlerDataDom) => void,\n globalListener: boolean = false,\n): (event: Event) => void {\n return (event: Event & { _sentryCaptured?: true }): void => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData: HandlerDataDom = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event: Event): SentryWrappedTarget | null {\n try {\n return event.target as SentryWrappedTarget | null;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n","import type { HandlerDataXhr, SentryWrappedXMLHttpRequest, WrappedFunction } from '@sentry/types';\n\nimport { addHandler, fill, isString, maybeInstrument, timestampInSeconds, triggerHandlers } from '@sentry/utils';\nimport { WINDOW } from '../types';\n\nexport const SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\ntype WindowWithXhr = Window & { XMLHttpRequest?: typeof XMLHttpRequest };\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addXhrInstrumentationHandler(handler: (data: HandlerDataXhr) => void): void {\n const type = 'xhr';\n addHandler(type, handler);\n maybeInstrument(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nexport function instrumentXHR(): void {\n if (!(WINDOW as WindowWithXhr).XMLHttpRequest) {\n return;\n }\n\n const xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: unknown[]): void {\n const startTimestamp = timestampInSeconds() * 1000;\n\n // open() should always be called with two or more arguments\n // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n const method = isString(args[0]) ? args[0].toUpperCase() : undefined;\n const url = parseUrl(args[1]);\n\n if (!method || !url) {\n return originalOpen.apply(this, args);\n }\n\n this[SENTRY_XHR_DATA_KEY] = {\n method,\n url,\n request_headers: {},\n };\n\n // if Sentry key appears in URL, don't capture it as a request\n if (method === 'POST' && url.match(/sentry_key/)) {\n this.__sentry_own_request__ = true;\n }\n\n const onreadystatechangeHandler: () => void = () => {\n // For whatever reason, this is not the same instance here as from the outer method\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (!xhrInfo) {\n return;\n }\n\n if (this.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = this.status;\n } catch (e) {\n /* do nothing */\n }\n\n const handlerData: HandlerDataXhr = {\n endTimestamp: timestampInSeconds() * 1000,\n startTimestamp,\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n }\n };\n\n if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') {\n fill(this, 'onreadystatechange', function (original: WrappedFunction) {\n return function (this: SentryWrappedXMLHttpRequest, ...readyStateArgs: unknown[]): void {\n onreadystatechangeHandler();\n return original.apply(this, readyStateArgs);\n };\n });\n } else {\n this.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n fill(this, 'setRequestHeader', function (original: WrappedFunction) {\n return function (this: SentryWrappedXMLHttpRequest, ...setRequestHeaderArgs: unknown[]): void {\n const [header, value] = setRequestHeaderArgs;\n\n const xhrInfo = this[SENTRY_XHR_DATA_KEY];\n\n if (xhrInfo && isString(header) && isString(value)) {\n xhrInfo.request_headers[header.toLowerCase()] = value;\n }\n\n return original.apply(this, setRequestHeaderArgs);\n };\n });\n\n return originalOpen.apply(this, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend: () => void): () => void {\n return function (this: XMLHttpRequest & SentryWrappedXMLHttpRequest, ...args: unknown[]): void {\n const sentryXhrData = this[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return originalSend.apply(this, args);\n }\n\n if (args[0] !== undefined) {\n sentryXhrData.body = args[0];\n }\n\n const handlerData: HandlerDataXhr = {\n startTimestamp: timestampInSeconds() * 1000,\n xhr: this,\n };\n triggerHandlers('xhr', handlerData);\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nfunction parseUrl(url: string | unknown): string | undefined {\n if (isString(url)) {\n return url;\n }\n\n try {\n // url can be a string or URL\n // but since URL is not available in IE11, we do not check for it,\n // but simply assume it is an URL and return `toString()` from it (which returns the full URL)\n // If that fails, we just return undefined\n return (url as URL).toString();\n } catch {} // eslint-disable-line no-empty\n\n return undefined;\n}\n","import type { Breadcrumb, BreadcrumbHint } from '@sentry/types';\nimport { consoleSandbox, dateTimestampInSeconds } from '@sentry/utils';\nimport { getClient, getIsolationScope } from './currentScopes';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nexport function addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n const client = getClient();\n const isolationScope = getIsolationScope();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\nimport type { ConsoleLevel, HandlerDataConsole } from '@sentry/types';\n\nimport { CONSOLE_LEVELS, originalConsoleMethods } from '../logger';\nimport { fill } from '../object';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addConsoleInstrumentationHandler(handler: (data: HandlerDataConsole) => void): void {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole(): void {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level: ConsoleLevel): void {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod: () => any): Function {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args: any[]): void {\n const handlerData: HandlerDataConsole = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { HandlerDataFetch } from '@sentry/types';\n\nimport { fill } from '../object';\nimport { supportsNativeFetch } from '../supports';\nimport { timestampInSeconds } from '../time';\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\ntype FetchResource = string | { toString(): string } | { url: string };\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addFetchInstrumentationHandler(handler: (data: HandlerDataFetch) => void): void {\n const type = 'fetch';\n addHandler(type, handler);\n maybeInstrument(type, instrumentFetch);\n}\n\nfunction instrumentFetch(): void {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(GLOBAL_OBJ, 'fetch', function (originalFetch: () => void): () => void {\n return function (...args: any[]): void {\n const { method, url } = parseFetchArgs(args);\n\n const handlerData: HandlerDataFetch = {\n args,\n fetchData: {\n method,\n url,\n },\n startTimestamp: timestampInSeconds() * 1000,\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return originalFetch.apply(GLOBAL_OBJ, args).then(\n (response: Response) => {\n const finishedHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n response,\n };\n\n triggerHandlers('fetch', finishedHandlerData);\n return response;\n },\n (error: Error) => {\n const erroredHandlerData: HandlerDataFetch = {\n ...handlerData,\n endTimestamp: timestampInSeconds() * 1000,\n error,\n };\n\n triggerHandlers('fetch', erroredHandlerData);\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\nfunction hasProp(obj: unknown, prop: T): obj is Record {\n return !!obj && typeof obj === 'object' && !!(obj as Record)[prop];\n}\n\nfunction getUrlFromResource(resource: FetchResource): string {\n if (typeof resource === 'string') {\n return resource;\n }\n\n if (!resource) {\n return '';\n }\n\n if (hasProp(resource, 'url')) {\n return resource.url;\n }\n\n if (resource.toString) {\n return resource.toString();\n }\n\n return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nexport function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: string } {\n if (fetchArgs.length === 0) {\n return { method: 'GET', url: '' };\n }\n\n if (fetchArgs.length === 2) {\n const [url, options] = fetchArgs as [FetchResource, object];\n\n return {\n url: getUrlFromResource(url),\n method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n };\n }\n\n const arg = fetchArgs[0];\n return {\n url: getUrlFromResource(arg as FetchResource),\n method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n };\n}\n","import type { SeverityLevel } from '@sentry/types';\n\n// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nexport const validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nexport function severityLevelFromString(level: SeverityLevel | string): SeverityLevel {\n return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') as SeverityLevel;\n}\n","type PartialURL = {\n host?: string;\n path?: string;\n protocol?: string;\n relative?: string;\n search?: string;\n hash?: string;\n};\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(url: string): PartialURL {\n if (!url) {\n return {};\n }\n\n const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n const query = match[6] || '';\n const fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n search: query,\n hash: fragment,\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nexport function stripUrlQueryAndFragment(urlPath: string): string {\n // eslint-disable-next-line no-useless-escape\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nexport function getNumberOfUrlSegments(url: string): number {\n // split at '/' or at '\\/' to split regex urls correctly\n return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nexport function getSanitizedUrlString(url: PartialURL): string {\n const { protocol, host, path } = url;\n\n const filteredHost =\n (host &&\n host\n // Always filter out authority\n .replace(/^.*@/, '[filtered]:[filtered]@')\n // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n // TODO: Use new URL global if it exists\n .replace(/(:80)$/, '')\n .replace(/(:443)$/, '')) ||\n '';\n\n return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n","import {\n SENTRY_XHR_DATA_KEY,\n addClickKeypressInstrumentationHandler,\n addHistoryInstrumentationHandler,\n addXhrInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport { addBreadcrumb, defineIntegration, getClient } from '@sentry/core';\nimport type {\n Breadcrumb,\n Client,\n Event as SentryEvent,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataConsole,\n HandlerDataDom,\n HandlerDataFetch,\n HandlerDataHistory,\n HandlerDataXhr,\n IntegrationFn,\n XhrBreadcrumbData,\n XhrBreadcrumbHint,\n} from '@sentry/types';\nimport {\n addConsoleInstrumentationHandler,\n addFetchInstrumentationHandler,\n getComponentName,\n getEventDescription,\n htmlTreeAsString,\n logger,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\ninterface BreadcrumbsOptions {\n console: boolean;\n dom:\n | boolean\n | {\n serializeAttribute?: string | string[];\n maxStringLength?: number;\n };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options: Partial = {}) => {\n const _options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n if (_options.console) {\n addConsoleInstrumentationHandler(_getConsoleBreadcrumbHandler(client));\n }\n if (_options.dom) {\n addClickKeypressInstrumentationHandler(_getDomBreadcrumbHandler(client, _options.dom));\n }\n if (_options.xhr) {\n addXhrInstrumentationHandler(_getXhrBreadcrumbHandler(client));\n }\n if (_options.fetch) {\n addFetchInstrumentationHandler(_getFetchBreadcrumbHandler(client));\n }\n if (_options.history) {\n addHistoryInstrumentationHandler(_getHistoryBreadcrumbHandler(client));\n }\n if (_options.sentry) {\n client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client: Client): (event: SentryEvent) => void {\n return function addSentryBreadcrumb(event: SentryEvent): void {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n event_id: event.event_id,\n level: event.level,\n message: getEventDescription(event),\n },\n {\n event,\n },\n );\n };\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client: Client,\n dom: BreadcrumbsOptions['dom'],\n): (handlerData: HandlerDataDom) => void {\n return function _innerDomBreadcrumb(handlerData: HandlerDataDom): void {\n if (getClient() !== client) {\n return;\n }\n\n let target;\n let componentName;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n let maxStringLength =\n typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n );\n maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n }\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n const event = handlerData.event as Event | Node;\n const element = _isEvent(event) ? event.target : event;\n\n target = htmlTreeAsString(element, { keyAttrs, maxStringLength });\n componentName = getComponentName(element);\n } catch (e) {\n target = '';\n }\n\n if (target.length === 0) {\n return;\n }\n\n const breadcrumb: Breadcrumb = {\n category: `ui.${handlerData.name}`,\n message: target,\n };\n\n if (componentName) {\n breadcrumb.data = { 'ui.component_name': componentName };\n }\n\n addBreadcrumb(breadcrumb, {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client: Client): (handlerData: HandlerDataConsole) => void {\n return function _consoleBreadcrumb(handlerData: HandlerDataConsole): void {\n if (getClient() !== client) {\n return;\n }\n\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client: Client): (handlerData: HandlerDataXhr) => void {\n return function _xhrBreadcrumb(handlerData: HandlerDataXhr): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n const sentryXhrData = handlerData.xhr[SENTRY_XHR_DATA_KEY];\n\n // We only capture complete, non-sentry requests\n if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n return;\n }\n\n const { method, url, status_code, body } = sentryXhrData;\n\n const data: XhrBreadcrumbData = {\n method,\n url,\n status_code,\n };\n\n const hint: XhrBreadcrumbHint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client: Client): (handlerData: HandlerDataFetch) => void {\n return function _fetchBreadcrumb(handlerData: HandlerDataFetch): void {\n if (getClient() !== client) {\n return;\n }\n\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n const data: FetchBreadcrumbData = handlerData.fetchData;\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response as Response | undefined;\n const data: FetchBreadcrumbData = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client: Client): (handlerData: HandlerDataHistory) => void {\n return function _historyBreadcrumb(handlerData: HandlerDataHistory): void {\n if (getClient() !== client) {\n return;\n }\n\n let from: string | undefined = handlerData.from;\n let to: string | undefined = handlerData.to;\n const parsedLoc = parseUrl(WINDOW.location.href);\n let parsedFrom = from ? parseUrl(from) : undefined;\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom || !parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n };\n}\n\nfunction _isEvent(event: unknown): event is Event {\n return !!event && !!(event as Record).target;\n}\n","import { defineIntegration } from '@sentry/core';\nimport type { IntegrationFn, WrappedFunction } from '@sentry/types';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\n\nimport { WINDOW, wrap } from '../helpers';\n\nconst DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'BroadcastChannel',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'SharedWorker',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\ntype XMLHttpRequestProp = 'onload' | 'onerror' | 'onprogress' | 'onreadystatechange';\n\ninterface BrowserApiErrorsOptions {\n setTimeout: boolean;\n setInterval: boolean;\n requestAnimationFrame: boolean;\n XMLHttpRequest: boolean;\n eventTarget: boolean | string[];\n}\n\nconst _browserApiErrorsIntegration = ((options: Partial = {}) => {\n const _options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n // TODO: This currently only works for the first client this is setup\n // We may want to adjust this to check for client etc.\n setupOnce() {\n if (_options.setTimeout) {\n fill(WINDOW, 'setTimeout', _wrapTimeFunction);\n }\n\n if (_options.setInterval) {\n fill(WINDOW, 'setInterval', _wrapTimeFunction);\n }\n\n if (_options.requestAnimationFrame) {\n fill(WINDOW, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (_options.XMLHttpRequest && 'XMLHttpRequest' in WINDOW) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n const eventTargetOption = _options.eventTarget;\n if (eventTargetOption) {\n const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nexport const browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original: () => void): () => number {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, ...args: any[]): number {\n const originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: false,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original: any): (callback: () => void) => any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: any, callback: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend: () => void): () => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (this: XMLHttpRequest, ...args: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps: XMLHttpRequestProp[] = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fill(xhr, prop, function (original: WrappedFunction): () => any {\n const wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n const originalFunction = getOriginalFunction(original);\n if (originalFunction) {\n wrapOptions.mechanism.data.handler = getFunctionName(originalFunction);\n }\n\n // Otherwise wrap directly\n return wrap(original, wrapOptions);\n });\n }\n });\n\n return originalSend.apply(this, args);\n };\n}\n\nfunction _wrapEventTarget(target: string): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalObject = WINDOW as { [key: string]: any };\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = globalObject[target] && globalObject[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original: VoidFunction,): (\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ) => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | AddEventListenerOptions,\n ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n try {\n if (typeof fn.handleEvent === 'function') {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn as any as WrappedFunction, {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener: () => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this: any,\n eventName: string,\n fn: EventListenerObject,\n options?: boolean | EventListenerOptions,\n ): () => void {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn as unknown as WrappedFunction;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n","import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n GLOBAL_OBJ.onerror = function (\n msg: string | object,\n url?: string,\n line?: number,\n column?: number,\n error?: Error,\n ): boolean {\n const handlerData: HandlerDataError = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n const handlerData: HandlerDataUnhandledRejection = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n","import { captureEvent, defineIntegration, getClient } from '@sentry/core';\nimport type { Client, Event, IntegrationFn, Primitive, StackParser } from '@sentry/types';\nimport {\n UNKNOWN_FUNCTION,\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n getLocationHref,\n isPrimitive,\n isString,\n logger,\n} from '@sentry/utils';\n\nimport type { BrowserClient } from '../client';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { eventFromUnknownInput } from '../eventbuilder';\nimport { shouldIgnoreOnError } from '../helpers';\n\ntype GlobalHandlersIntegrationsOptionKeys = 'onerror' | 'onunhandledrejection';\n\ntype GlobalHandlersIntegrations = Record;\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options: Partial = {}) => {\n const _options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n Error.stackTraceLimit = 50;\n },\n setup(client) {\n if (_options.onerror) {\n _installGlobalOnErrorHandler(client);\n globalHandlerLog('onerror');\n }\n if (_options.onunhandledrejection) {\n _installGlobalOnUnhandledRejectionHandler(client);\n globalHandlerLog('onunhandledrejection');\n }\n },\n };\n}) satisfies IntegrationFn;\n\nexport const globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client: Client): void {\n addGlobalErrorInstrumentationHandler(data => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const { msg, url, line, column, error } = data;\n\n const event = _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onerror',\n },\n });\n });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client: Client): void {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e as unknown);\n\n const event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n captureEvent(event, {\n originalException: error,\n mechanism: {\n handled: false,\n type: 'onunhandledrejection',\n },\n });\n });\n}\n\nfunction _getUnhandledRejectionError(error: unknown): unknown {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n type ErrorWithReason = { reason: unknown };\n // PromiseRejectionEvents store the object of the rejection under 'reason'\n // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n if ('reason' in (error as ErrorWithReason)) {\n return (error as ErrorWithReason).reason;\n }\n\n type CustomEventWithDetail = { detail: { reason: unknown } };\n // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n // https://github.com/getsentry/sentry-javascript/issues/2380\n if ('detail' in (error as CustomEventWithDetail) && 'reason' in (error as CustomEventWithDetail).detail) {\n return (error as CustomEventWithDetail).detail.reason;\n }\n } catch {} // eslint-disable-line no-empty\n\n return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason: Primitive): Event {\n return {\n exception: {\n values: [\n {\n type: 'UnhandledRejection',\n // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n },\n ],\n },\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event: Event, url: any, line: any, column: any): Event {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type: string): void {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions(): { stackParser: StackParser; attachStacktrace?: boolean } {\n const client = getClient();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n","import { defineIntegration } from '@sentry/core';\nimport { WINDOW } from '../helpers';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nexport const httpContextIntegration = defineIntegration(() => {\n return {\n name: 'HttpContext',\n preprocessEvent(event) {\n // if none of the information we want exists, don't bother\n if (!WINDOW.navigator && !WINDOW.location && !WINDOW.document) {\n return;\n }\n\n // grab as much info as exists and add it to the event\n const url = (event.request && event.request.url) || (WINDOW.location && WINDOW.location.href);\n const { referrer } = WINDOW.document || {};\n const { userAgent } = WINDOW.navigator || {};\n\n const headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n const request = { ...event.request, ...(url && { url }), headers };\n\n event.request = request;\n },\n };\n});\n","import type { Event, EventHint, Exception, ExtendedError, StackParser } from '@sentry/types';\n\nimport { isInstanceOf } from './is';\nimport { truncate } from './string';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nexport function applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n maxValueLimit: number = 250,\n key: string,\n limit: number,\n event: Event,\n hint?: EventHint,\n): void {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException: Exception | undefined =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException as ExtendedError,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation: (stackParser: StackParser, ex: Error) => Exception,\n parser: StackParser,\n limit: number,\n error: ExtendedError,\n key: string,\n prevExceptions: Exception[],\n exception: Exception,\n exceptionId: number,\n): Exception[] {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n // Recursively call this function in order to walk down a chain of errors\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception: Exception, exceptionId: number): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception: Exception,\n source: string,\n exceptionId: number,\n parentId: number | undefined,\n): void {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions: Exception[], maxValueLength: number): Exception[] {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n","import { defineIntegration } from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/types';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder';\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 = ((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 // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n exceptionFromError,\n options.stackParser,\n options.maxValueLength,\n key,\n limit,\n event,\n hint,\n );\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Aggregrate linked errors in an event.\n */\nexport const linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n","// This was originally forked from https://github.com/csnover/TraceKit, and was largely\n// re - written as part of raven - js.\n//\n// This code was later copied to the JavaScript mono - repo and further modified and\n// refactored over the years.\n\n// Copyright (c) 2013 Onur Can Cakmak onur.cakmak@gmail.com and all TraceKit contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files(the 'Software'), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE\n// OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { StackFrame, StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { UNKNOWN_FUNCTION, createStackParser } from '@sentry/utils';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename: string, func: string, lineno?: number, colno?: number): StackFrame {\n const frame: StackFrame = {\n filename,\n function: func === '' ? UNKNOWN_FUNCTION : func,\n in_app: true, // All browser frames are considered in_app\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn: StackLineParserFn = line => {\n const parts = chromeRegex.exec(line);\n\n if (parts) {\n const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n const subMatch = chromeEvalRegex.exec(parts[2]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = subMatch[1]; // url\n parts[3] = subMatch[2]; // line\n parts[4] = subMatch[3]; // column\n }\n }\n\n // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n const [func, filename] = extractSafariExtensionDetails(parts[1] || UNKNOWN_FUNCTION, parts[2]);\n\n return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n }\n\n return;\n};\n\nexport const chromeStackLineParser: StackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko: StackLineParserFn = line => {\n const parts = geckoREgex.exec(line);\n\n if (parts) {\n const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n const subMatch = geckoEvalRegex.exec(parts[3]);\n\n if (subMatch) {\n // throw out eval line/column and use top-most line number\n parts[1] = parts[1] || 'eval';\n parts[3] = subMatch[1];\n parts[4] = subMatch[2];\n parts[5] = ''; // no column when eval\n }\n }\n\n let filename = parts[3];\n let func = parts[1] || UNKNOWN_FUNCTION;\n [func, filename] = extractSafariExtensionDetails(func, filename);\n\n return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n }\n\n return;\n};\n\nexport const geckoStackLineParser: StackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs: StackLineParserFn = line => {\n const parts = winjsRegex.exec(line);\n\n return parts\n ? createFrame(parts[2], parts[1] || UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n : undefined;\n};\n\nexport const winjsStackLineParser: StackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10: StackLineParserFn = line => {\n const parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nexport const opera10StackLineParser: StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11: StackLineParserFn = line => {\n const parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nexport const opera11StackLineParser: StackLineParser = [OPERA11_PRIORITY, opera11];\n\nexport const defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nexport const defaultStackParser = createStackParser(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n * at function@url:row:col\n * at function@url:row:col\n * at function@url:row:col\n *\n * it produces something like:\n *\n * function@url:row:col\n * function@url:row:col\n * function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func: string, filename: string): [string, string] => {\n const isSafariExtension = func.indexOf('safari-extension') !== -1;\n const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n return isSafariExtension || isSafariWebExtension\n ? [\n func.indexOf('@') !== -1 ? func.split('@')[0] : UNKNOWN_FUNCTION,\n isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n ]\n : [func, filename];\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 { isNativeFunction, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build';\nimport { WINDOW } from './types';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\ninterface CacheableImplementations {\n setTimeout: typeof WINDOW.setTimeout;\n fetch: typeof WINDOW.fetch;\n}\n\nconst cachedImplementations: Partial = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nexport function getNativeImplementation(\n name: T,\n): CacheableImplementations[T] {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n\n let impl = WINDOW[name] as CacheableImplementations[T];\n\n // Fast path to avoid DOM I/O\n if (isNativeFunction(impl)) {\n return (cachedImplementations[name] = impl.bind(WINDOW) as CacheableImplementations[T]);\n }\n\n const document = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl = contentWindow[name] as CacheableImplementations[T];\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n // Could not create sandbox iframe, just use window.xxx\n DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl) {\n return impl;\n }\n\n return (cachedImplementations[name] = impl.bind(WINDOW) as CacheableImplementations[T]);\n}\n\n/** Clear a cached implementation. */\nexport function clearCachedImplementation(name: keyof CacheableImplementations): void {\n cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nexport function fetch(...rest: Parameters): ReturnType {\n return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nexport function setTimeout(...rest: Parameters): ReturnType {\n return getNativeImplementation('setTimeout')(...rest);\n}\n","import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer {\n // exposes the internal array so tests can assert on the state of it.\n // XXX: this really should not be public api.\n $: Array>;\n add(taskProducer: () => PromiseLike): PromiseLike;\n drain(timeout?: number): PromiseLike;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer(limit?: number): PromiseBuffer {\n const buffer: Array> = [];\n\n function isReady(): boolean {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike\n * @returns Removed promise.\n */\n function remove(task: PromiseLike): PromiseLike {\n return buffer.splice(buffer.indexOf(task), 1)[0];\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike; In previous versions this used to be `task:\n * PromiseLike`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer: () => PromiseLike): PromiseLike {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout?: number): PromiseLike {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n","import type { DataCategory, TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n limits: RateLimits,\n { statusCode, headers }: TransportMakeRequestResponse,\n now: number = Date.now(),\n): RateLimits {\n const updatedRateLimits: RateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
,
,..\n * where each
is of the form\n * : : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n * Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n","import type {\n Envelope,\n EnvelopeItem,\n EnvelopeItemType,\n Event,\n EventDropReason,\n EventItem,\n InternalBaseTransportOptions,\n Transport,\n TransportMakeRequestResponse,\n TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n SentryError,\n createEnvelope,\n envelopeItemTypeToDataCategory,\n forEachEnvelopeItem,\n isRateLimited,\n logger,\n makePromiseBuffer,\n resolvedSyncPromise,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n options: InternalBaseTransportOptions,\n makeRequest: TransportRequestExecutor,\n buffer: PromiseBuffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n): Transport {\n let rateLimits: RateLimits = {};\n const flush = (timeout?: number): PromiseLike => buffer.drain(timeout);\n\n function send(envelope: Envelope): PromiseLike {\n const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise({});\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason: EventDropReason): void => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = (): PromiseLike =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise({});\n } else {\n throw error;\n }\n },\n );\n }\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n","import { clearCachedImplementation, getNativeImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport } from '@sentry/core';\nimport type { Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/types';\nimport { rejectedSyncPromise } from '@sentry/utils';\nimport type { WINDOW } from '../helpers';\n\nimport type { BrowserTransportOptions } from './types';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nexport function makeFetchTransport(\n options: BrowserTransportOptions,\n nativeFetch: typeof WINDOW.fetch | undefined = getNativeImplementation('fetch'),\n): Transport {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request: TransportRequest): PromiseLike {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions: RequestInit = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 60_000 && pendingCount < 15,\n ...options.fetchOptions,\n };\n\n if (!nativeFetch) {\n clearCachedImplementation('fetch');\n return rejectedSyncPromise('No fetch implementation available');\n }\n\n try {\n return nativeFetch(options.url, requestOptions).then(response => {\n pendingBodySize -= requestSize;\n pendingCount--;\n return {\n statusCode: response.status,\n headers: {\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n 'retry-after': response.headers.get('Retry-After'),\n },\n };\n });\n } catch (e) {\n clearCachedImplementation('fetch');\n pendingBodySize -= requestSize;\n pendingCount--;\n return rejectedSyncPromise(e);\n }\n }\n\n return createTransport(options, makeRequest);\n}\n","import { getCurrentScope } from '@sentry/core';\nimport { functionToStringIntegration, inboundFiltersIntegration } from '@sentry/core';\nimport {\n captureSession,\n getClient,\n getIntegrationsToSetup,\n getReportDialogEndpoint,\n initAndBind,\n lastEventId,\n startSession,\n} from '@sentry/core';\nimport type { DsnLike, Integration, Options, UserFeedback } from '@sentry/types';\nimport { consoleSandbox, logger, stackParserFromStackParserOptions, supportsFetch } from '@sentry/utils';\n\nimport { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { dedupeIntegration } from '@sentry/core';\nimport type { BrowserClientOptions, BrowserOptions } from './client';\nimport { BrowserClient } from './client';\nimport { DEBUG_BUILD } from './debug-build';\nimport { WINDOW } from './helpers';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors';\nimport { globalHandlersIntegration } from './integrations/globalhandlers';\nimport { httpContextIntegration } from './integrations/httpcontext';\nimport { linkedErrorsIntegration } from './integrations/linkederrors';\nimport { defaultStackParser } from './stack-parsers';\nimport { makeFetchTransport } from './transports/fetch';\n\n/** Get the default integrations for the browser SDK. */\nexport function getDefaultIntegrations(_options: Options): Integration[] {\n /**\n * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n * `getDefaultIntegrations` but with an adjusted set of integrations.\n */\n return [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n ];\n}\n\nfunction applyDefaultOptions(optionsArg: BrowserOptions = {}): BrowserOptions {\n const defaultOptions: BrowserOptions = {\n defaultIntegrations: getDefaultIntegrations(optionsArg),\n release:\n typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n ? __SENTRY_RELEASE__\n : WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id // This supports the variable that sentry-webpack-plugin injects\n ? WINDOW.SENTRY_RELEASE.id\n : undefined,\n autoSessionTracking: true,\n sendClientReports: true,\n };\n\n return { ...defaultOptions, ...optionsArg };\n}\n\ntype ExtensionProperties = {\n chrome?: Runtime;\n browser?: Runtime;\n};\ntype Runtime = {\n runtime?: {\n id?: string;\n };\n};\n\nfunction shouldShowBrowserExtensionError(): boolean {\n const windowWithMaybeExtension = WINDOW as typeof WINDOW & ExtensionProperties;\n\n const extensionKey = windowWithMaybeExtension.chrome ? 'chrome' : 'browser';\n const extensionObject = windowWithMaybeExtension[extensionKey];\n\n const runtimeId = extensionObject && extensionObject.runtime && extensionObject.runtime.id;\n const href = (WINDOW.location && WINDOW.location.href) || '';\n\n const extensionProtocols = ['chrome-extension:', 'moz-extension:', 'ms-browser-extension:'];\n\n // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n const isDedicatedExtensionPage =\n !!runtimeId && WINDOW === WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}//`));\n\n return !!runtimeId && !isDedicatedExtensionPage;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\ndeclare const __SENTRY_RELEASE__: string | undefined;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n * dsn: '__DSN__',\n * // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n * message: 'My Breadcrumb',\n * // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n * message: 'Manual',\n * stacktrace: [\n * // ...\n * ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nexport function init(browserOptions: BrowserOptions = {}): void {\n const options = applyDefaultOptions(browserOptions);\n\n if (shouldShowBrowserExtensionError()) {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(\n '[Sentry] You cannot run Sentry this way in a browser extension, check: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n );\n });\n return;\n }\n\n if (DEBUG_BUILD) {\n if (!supportsFetch()) {\n logger.warn(\n 'No Fetch API detected. The Sentry SDK requires a Fetch API compatible environment to send events. Please add a Fetch API polyfill.',\n );\n }\n }\n const clientOptions: BrowserClientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || makeFetchTransport,\n };\n\n initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n}\n\n/**\n * All properties the report dialog supports\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\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n // doesn't work without a document (React Native)\n if (!WINDOW.document) {\n DEBUG_BUILD && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const scope = getCurrentScope();\n const client = scope.getClient();\n const dsn = client && client.getDsn();\n\n if (!dsn) {\n DEBUG_BUILD && logger.error('DSN not configured for showReportDialog call');\n return;\n }\n\n if (scope) {\n options.user = {\n ...scope.getUser(),\n ...options.user,\n };\n }\n\n if (!options.eventId) {\n const eventId = lastEventId();\n if (eventId) {\n options.eventId = eventId;\n }\n }\n\n const script = WINDOW.document.createElement('script');\n script.async = true;\n script.crossOrigin = 'anonymous';\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n const { onClose } = options;\n if (onClose) {\n const reportDialogClosedMessageHandler = (event: MessageEvent): void => {\n if (event.data === '__sentry_reportdialog_closed__') {\n try {\n onClose();\n } finally {\n WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n }\n }\n };\n WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n }\n\n const injectionPoint = WINDOW.document.head || WINDOW.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n DEBUG_BUILD && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n callback();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking(): void {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\nexport function captureUserFeedback(feedback: UserFeedback): void {\n const client = getClient();\n if (client) {\n // eslint-disable-next-line deprecation/deprecation\n client.captureUserFeedback(feedback);\n }\n}\n","import type { Options } from '@sentry/types';\nimport { getClient } from '../currentScopes';\n\n// Treeshakable guard to remove all code related to tracing\ndeclare const __SENTRY_TRACING__: boolean | undefined;\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nexport function hasTracingEnabled(\n maybeOptions?: Pick | undefined,\n): boolean {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const options = maybeOptions || getClientOptions();\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nfunction getClientOptions(): Options | undefined {\n const client = getClient();\n return client && client.getOptions();\n}\n","import type {\n SentrySpanArguments,\n Span,\n SpanAttributeValue,\n SpanAttributes,\n SpanContextData,\n SpanStatus,\n SpanTimeInput,\n} from '@sentry/types';\nimport { uuid4 } from '@sentry/utils';\nimport { TRACE_FLAG_NONE } from '../utils/spanUtils';\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nexport class SentryNonRecordingSpan implements Span {\n private _traceId: string;\n private _spanId: string;\n\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n return {\n spanId: this._spanId,\n traceId: this._traceId,\n traceFlags: TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public end(_timestamp?: SpanTimeInput): void {}\n\n /** @inheritdoc */\n public setAttribute(_key: string, _value: SpanAttributeValue | undefined): this {\n return this;\n }\n\n /** @inheritdoc */\n public setAttributes(_values: SpanAttributes): this {\n return this;\n }\n\n /** @inheritdoc */\n public setStatus(_status: SpanStatus): this {\n return this;\n }\n\n /** @inheritdoc */\n public updateName(_name: string): this {\n return this;\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return false;\n }\n\n /** @inheritdoc */\n public addEvent(\n _name: string,\n _attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n _startTime?: SpanTimeInput,\n ): this {\n return this;\n }\n}\n","import type { MeasurementUnit, Measurements, TimedEvent } from '@sentry/types';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n} from '../semanticAttributes';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\n\n/**\n * Adds a measurement to the current active transaction.\n */\nexport function setMeasurement(name: string, value: number, unit: MeasurementUnit): void {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n if (rootSpan) {\n rootSpan.addEvent(name, {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit as string,\n });\n }\n}\n\n/**\n * Convert timed events to measurements.\n */\nexport function timedEventsToMeasurements(events: TimedEvent[]): Measurements | undefined {\n if (!events || events.length === 0) {\n return undefined;\n }\n\n const measurements: Measurements = {};\n events.forEach(event => {\n const attributes = event.attributes || {};\n const unit = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] as MeasurementUnit | undefined;\n const value = attributes[SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] as number | undefined;\n\n if (typeof unit === 'string' && typeof value === 'number') {\n measurements[event.name] = { value, unit };\n }\n });\n\n return measurements;\n}\n","import type { Span } from '@sentry/types';\nimport type { Scope } from '@sentry/types';\nimport { addNonEnumerableProperty } from '@sentry/utils';\n\n// so it can be used in manual instrumentation without necessitating a hard dependency on @sentry/utils\nexport { stripUrlQueryAndFragment } from '@sentry/utils';\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\ntype SpanWithScopes = Span & {\n [SCOPE_ON_START_SPAN_FIELD]?: Scope;\n [ISOLATION_SCOPE_ON_START_SPAN_FIELD]?: Scope;\n};\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nexport function setCapturedScopesOnSpan(span: Span | undefined, scope: Scope, isolationScope: Scope): void {\n if (span) {\n addNonEnumerableProperty(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n addNonEnumerableProperty(span, SCOPE_ON_START_SPAN_FIELD, scope);\n }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nexport function getCapturedScopesOnSpan(span: Span): { scope?: Scope; isolationScope?: Scope } {\n return {\n scope: (span as SpanWithScopes)[SCOPE_ON_START_SPAN_FIELD],\n isolationScope: (span as SpanWithScopes)[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n };\n}\n","import type {\n SentrySpanArguments,\n Span,\n SpanAttributeValue,\n SpanAttributes,\n SpanContextData,\n SpanEnvelope,\n SpanJSON,\n SpanOrigin,\n SpanStatus,\n SpanTimeInput,\n TimedEvent,\n TransactionEvent,\n TransactionSource,\n} from '@sentry/types';\nimport { dropUndefinedKeys, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes';\nimport { DEBUG_BUILD } from '../debug-build';\n\nimport { createSpanEnvelope } from '../envelope';\nimport { getMetricSummaryJsonForSpan } from '../metrics/metric-summary';\nimport {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_PROFILE_ID,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n} from '../semanticAttributes';\nimport {\n TRACE_FLAG_NONE,\n TRACE_FLAG_SAMPLED,\n getRootSpan,\n getSpanDescendants,\n getStatusMessage,\n spanTimeInputToSeconds,\n spanToJSON,\n spanToTransactionTraceContext,\n} from '../utils/spanUtils';\nimport { getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanEnd } from './logSpans';\nimport { timedEventsToMeasurements } from './measurement';\nimport { getCapturedScopesOnSpan } from './utils';\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nexport class SentrySpan implements Span {\n protected _traceId: string;\n protected _spanId: string;\n protected _parentSpanId?: string | undefined;\n protected _sampled: boolean | undefined;\n protected _name?: string | undefined;\n protected _attributes: SpanAttributes;\n /** Epoch timestamp in seconds when the span started. */\n protected _startTime: number;\n /** Epoch timestamp in seconds when the span ended. */\n protected _endTime?: number | undefined;\n /** Internal keeper of the status */\n protected _status?: SpanStatus;\n /** The timed events added to this span. */\n protected _events: TimedEvent[];\n\n /** if true, treat span as a standalone span (not part of a transaction) */\n private _isStandaloneSpan?: boolean;\n\n /**\n * You should never call the constructor manually, always use `Sentry.startSpan()`\n * or other span methods.\n * @internal\n * @hideconstructor\n * @hidden\n */\n public constructor(spanContext: SentrySpanArguments = {}) {\n this._traceId = spanContext.traceId || uuid4();\n this._spanId = spanContext.spanId || uuid4().substring(16);\n this._startTime = spanContext.startTimestamp || timestampInSeconds();\n\n this._attributes = {};\n this.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n ...spanContext.attributes,\n });\n\n this._name = spanContext.name;\n\n if (spanContext.parentSpanId) {\n this._parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this._sampled = spanContext.sampled;\n }\n if (spanContext.endTimestamp) {\n this._endTime = spanContext.endTimestamp;\n }\n\n this._events = [];\n\n this._isStandaloneSpan = spanContext.isStandalone;\n\n // If the span is already ended, ensure we finalize the span immediately\n if (this._endTime) {\n this._onSpanEnded();\n }\n }\n\n /** @inheritdoc */\n public spanContext(): SpanContextData {\n const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n return {\n spanId,\n traceId,\n traceFlags: sampled ? TRACE_FLAG_SAMPLED : TRACE_FLAG_NONE,\n };\n }\n\n /** @inheritdoc */\n public setAttribute(key: string, value: SpanAttributeValue | undefined): void {\n if (value === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._attributes[key];\n } else {\n this._attributes[key] = value;\n }\n }\n\n /** @inheritdoc */\n public setAttributes(attributes: SpanAttributes): void {\n Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n }\n\n /**\n * This should generally not be used,\n * but we need it for browser tracing where we want to adjust the start time afterwards.\n * USE THIS WITH CAUTION!\n *\n * @hidden\n * @internal\n */\n public updateStartTime(timeInput: SpanTimeInput): void {\n this._startTime = spanTimeInputToSeconds(timeInput);\n }\n\n /**\n * @inheritDoc\n */\n public setStatus(value: SpanStatus): this {\n this._status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public updateName(name: string): this {\n this._name = name;\n return this;\n }\n\n /** @inheritdoc */\n public end(endTimestamp?: SpanTimeInput): void {\n // If already ended, skip\n if (this._endTime) {\n return;\n }\n\n this._endTime = spanTimeInputToSeconds(endTimestamp);\n logSpanEnd(this);\n\n this._onSpanEnded();\n }\n\n /**\n * Get JSON representation of this span.\n *\n * @hidden\n * @internal This method is purely for internal purposes and should not be used outside\n * of SDK code. If you need to get a JSON representation of a span,\n * use `spanToJSON(span)` instead.\n */\n public getSpanJSON(): SpanJSON {\n return dropUndefinedKeys({\n data: this._attributes,\n description: this._name,\n op: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n parent_span_id: this._parentSpanId,\n span_id: this._spanId,\n start_timestamp: this._startTime,\n status: getStatusMessage(this._status),\n timestamp: this._endTime,\n trace_id: this._traceId,\n origin: this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n profile_id: this._attributes[SEMANTIC_ATTRIBUTE_PROFILE_ID] as string | undefined,\n exclusive_time: this._attributes[SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] as number | undefined,\n measurements: timedEventsToMeasurements(this._events),\n is_segment: (this._isStandaloneSpan && getRootSpan(this) === this) || undefined,\n segment_id: this._isStandaloneSpan ? getRootSpan(this).spanContext().spanId : undefined,\n });\n }\n\n /** @inheritdoc */\n public isRecording(): boolean {\n return !this._endTime && !!this._sampled;\n }\n\n /**\n * @inheritdoc\n */\n public addEvent(\n name: string,\n attributesOrStartTime?: SpanAttributes | SpanTimeInput,\n startTime?: SpanTimeInput,\n ): this {\n DEBUG_BUILD && logger.log('[Tracing] Adding an event to span:', name);\n\n const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || timestampInSeconds();\n const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n const event: TimedEvent = {\n name,\n time: spanTimeInputToSeconds(time),\n attributes,\n };\n\n this._events.push(event);\n\n return this;\n }\n\n /**\n * This method should generally not be used,\n * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n * USE THIS WITH CAUTION!\n * @internal\n * @hidden\n * @experimental\n */\n public isStandaloneSpan(): boolean {\n return !!this._isStandaloneSpan;\n }\n\n /** Emit `spanEnd` when the span is ended. */\n private _onSpanEnded(): void {\n const client = getClient();\n if (client) {\n client.emit('spanEnd', this);\n }\n\n // A segment span is basically the root span of a local span tree.\n // So for now, this is either what we previously refer to as the root span,\n // or a standalone span.\n const isSegmentSpan = this._isStandaloneSpan || this === getRootSpan(this);\n\n if (!isSegmentSpan) {\n return;\n }\n\n // if this is a standalone span, we send it immediately\n if (this._isStandaloneSpan) {\n sendSpanEnvelope(createSpanEnvelope([this], client));\n return;\n }\n\n const transactionEvent = this._convertSpanToTransaction();\n if (transactionEvent) {\n const scope = getCapturedScopesOnSpan(this).scope || getCurrentScope();\n scope.captureEvent(transactionEvent);\n }\n }\n\n /**\n * Finish the transaction & prepare the event to send to Sentry.\n */\n private _convertSpanToTransaction(): TransactionEvent | undefined {\n // We can only convert finished spans\n if (!isFullFinishedSpan(spanToJSON(this))) {\n return undefined;\n }\n\n if (!this._name) {\n DEBUG_BUILD && logger.warn('Transaction has no name, falling back to ``.');\n this._name = '';\n }\n\n const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = getCapturedScopesOnSpan(this);\n const scope = capturedSpanScope || getCurrentScope();\n const client = scope.getClient() || getClient();\n\n if (this._sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n DEBUG_BUILD && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n // The transaction span itself as well as any potential standalone spans should be filtered out\n const finishedSpans = getSpanDescendants(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n const spans = finishedSpans.map(span => spanToJSON(span)).filter(isFullFinishedSpan);\n\n const source = this._attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] as TransactionSource | undefined;\n\n const transaction: TransactionEvent = {\n contexts: {\n trace: spanToTransactionTraceContext(this),\n },\n spans:\n // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n // we do not use spans anymore after this point\n spans.length > MAX_SPAN_COUNT\n ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n : spans,\n start_timestamp: this._startTime,\n timestamp: this._endTime,\n transaction: this._name,\n type: 'transaction',\n sdkProcessingMetadata: {\n capturedSpanScope,\n capturedSpanIsolationScope,\n ...dropUndefinedKeys({\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(this),\n }),\n },\n _metrics_summary: getMetricSummaryJsonForSpan(this),\n ...(source && {\n transaction_info: {\n source,\n },\n }),\n };\n\n const measurements = timedEventsToMeasurements(this._events);\n const hasMeasurements = measurements && Object.keys(measurements).length;\n\n if (hasMeasurements) {\n DEBUG_BUILD &&\n logger.log('[Measurements] Adding measurements to transaction', JSON.stringify(measurements, undefined, 2));\n transaction.measurements = measurements;\n }\n\n return transaction;\n }\n}\n\nfunction isSpanTimeInput(value: undefined | SpanAttributes | SpanTimeInput): value is SpanTimeInput {\n return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input: Partial): input is SpanJSON {\n return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span: Span): boolean {\n return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope: SpanEnvelope): void {\n const client = getClient();\n if (!client) {\n return;\n }\n\n const spanItems = envelope[1];\n if (!spanItems || spanItems.length === 0) {\n client.recordDroppedEvent('before_send', 'span');\n return;\n }\n\n const transport = client.getTransport();\n if (transport) {\n transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending span:', reason);\n });\n }\n}\n","import type { Span } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * Print a log message for a started span.\n */\nexport function logSpanStart(span: Span): void {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = spanToJSON(span);\n const { spanId } = span.spanContext();\n\n const sampled = spanIsSampled(span);\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n const infoParts: string[] = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n if (parentSpanId) {\n infoParts.push(`parent ID: ${parentSpanId}`);\n }\n\n if (!isRootSpan) {\n const { op, description } = spanToJSON(rootSpan);\n infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n if (op) {\n infoParts.push(`root op: ${op}`);\n }\n if (description) {\n infoParts.push(`root description: ${description}`);\n }\n }\n\n logger.log(`${header}\n ${infoParts.join('\\n ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nexport function logSpanEnd(span: Span): void {\n if (!DEBUG_BUILD) return;\n\n const { description = '< unknown name >', op = '< unknown op >' } = spanToJSON(span);\n const { spanId } = span.spanContext();\n const rootSpan = getRootSpan(span);\n const isRootSpan = rootSpan === span;\n\n const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n logger.log(msg);\n}\n","import type { ClientOptions, Scope, SentrySpanArguments, Span, SpanTimeInput, StartSpanOptions } from '@sentry/types';\nimport { generatePropagationContext, logger, propagationContextFromHeaders } from '@sentry/utils';\nimport type { AsyncContextStrategy } from '../asyncContext/types';\nimport { getMainCarrier } from '../carrier';\n\nimport { getClient, getCurrentScope, getIsolationScope, withScope } from '../currentScopes';\n\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { handleCallbackErrors } from '../utils/handleCallbackErrors';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { _getSpanForScope, _setSpanForScope } from '../utils/spanOnScope';\nimport { addChildSpanToSpan, getRootSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON } from '../utils/spanUtils';\nimport { freezeDscOnSpan, getDynamicSamplingContextFromSpan } from './dynamicSamplingContext';\nimport { logSpanStart } from './logSpans';\nimport { sampleSpan } from './sampling';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { SentrySpan } from './sentrySpan';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\nimport { setCapturedScopesOnSpan } from './utils';\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpan(context: StartSpanOptions, callback: (span: Span) => T): T {\n const acs = getAcs();\n if (acs.startSpan) {\n return acs.startSpan(context, callback);\n }\n\n const spanContext = normalizeContext(context);\n\n return withScope(context.scope, scope => {\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n return handleCallbackErrors(\n () => callback(activeSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n () => activeSpan.end(),\n );\n });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. You'll have to call `span.end()` manually.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startSpanManual(context: StartSpanOptions, callback: (span: Span, finish: () => void) => T): T {\n const acs = getAcs();\n if (acs.startSpanManual) {\n return acs.startSpanManual(context, callback);\n }\n\n const spanContext = normalizeContext(context);\n\n return withScope(context.scope, scope => {\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n const activeSpan = shouldSkipSpan\n ? new SentryNonRecordingSpan()\n : createChildOrRootSpan({\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope,\n });\n\n _setSpanForScope(scope, activeSpan);\n\n function finishAndSetSpan(): void {\n activeSpan.end();\n }\n\n return handleCallbackErrors(\n () => callback(activeSpan, finishAndSetSpan),\n () => {\n // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n const { status } = spanToJSON(activeSpan);\n if (activeSpan.isRecording() && (!status || status === 'ok')) {\n activeSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n },\n );\n });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nexport function startInactiveSpan(context: StartSpanOptions): Span {\n const acs = getAcs();\n if (acs.startInactiveSpan) {\n return acs.startInactiveSpan(context);\n }\n\n const spanContext = normalizeContext(context);\n\n const scope = context.scope || getCurrentScope();\n const parentSpan = getParentSpan(scope);\n\n const shouldSkipSpan = context.onlyIfParent && !parentSpan;\n\n if (shouldSkipSpan) {\n return new SentryNonRecordingSpan();\n }\n\n return createChildOrRootSpan({\n parentSpan,\n spanContext,\n forceTransaction: context.forceTransaction,\n scope,\n });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from ``\n * and `` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nexport const continueTrace = (\n {\n sentryTrace,\n baggage,\n }: {\n sentryTrace: Parameters[0];\n baggage: Parameters[1];\n },\n callback: () => V,\n): V => {\n return withScope(scope => {\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n scope.setPropagationContext(propagationContext);\n return callback();\n });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nexport function withActiveSpan(span: Span | null, callback: (scope: Scope) => T): T {\n const acs = getAcs();\n if (acs.withActiveSpan) {\n return acs.withActiveSpan(span, callback);\n }\n\n return withScope(scope => {\n _setSpanForScope(scope, span || undefined);\n return callback(scope);\n });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nexport function suppressTracing(callback: () => T): T {\n const acs = getAcs();\n\n if (acs.suppressTracing) {\n return acs.suppressTracing(callback);\n }\n\n return withScope(scope => {\n scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n return callback();\n });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n * or page will automatically create a new trace.\n */\nexport function startNewTrace(callback: () => T): T {\n return withScope(scope => {\n scope.setPropagationContext(generatePropagationContext());\n DEBUG_BUILD && logger.info(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n return withActiveSpan(null, callback);\n });\n}\n\nfunction createChildOrRootSpan({\n parentSpan,\n spanContext,\n forceTransaction,\n scope,\n}: {\n parentSpan: SentrySpan | undefined;\n spanContext: SentrySpanArguments;\n forceTransaction?: boolean;\n scope: Scope;\n}): Span {\n if (!hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const isolationScope = getIsolationScope();\n\n let span: Span;\n if (parentSpan && !forceTransaction) {\n span = _startChildSpan(parentSpan, scope, spanContext);\n addChildSpanToSpan(parentSpan, span);\n } else if (parentSpan) {\n // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n const dsc = getDynamicSamplingContextFromSpan(parentSpan);\n const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n const parentSampled = spanIsSampled(parentSpan);\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanContext,\n },\n scope,\n parentSampled,\n );\n\n freezeDscOnSpan(span, dsc);\n } else {\n const {\n traceId,\n dsc,\n parentSpanId,\n sampled: parentSampled,\n } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n span = _startRootSpan(\n {\n traceId,\n parentSpanId,\n ...spanContext,\n },\n scope,\n parentSampled,\n );\n\n if (dsc) {\n freezeDscOnSpan(span, dsc);\n }\n }\n\n logSpanStart(span);\n\n setCapturedScopesOnSpan(span, scope, isolationScope);\n\n return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n *\n * Eventually the StartSpanOptions will be more aligned with OpenTelemetry.\n */\nfunction normalizeContext(context: StartSpanOptions): SentrySpanArguments {\n const exp = context.experimental || {};\n const initialCtx: SentrySpanArguments = {\n isStandalone: exp.standalone,\n ...context,\n };\n\n if (context.startTime) {\n const ctx: SentrySpanArguments & { startTime?: SpanTimeInput } = { ...initialCtx };\n ctx.startTimestamp = spanTimeInputToSeconds(context.startTime);\n delete ctx.startTime;\n return ctx;\n }\n\n return initialCtx;\n}\n\nfunction getAcs(): AsyncContextStrategy {\n const carrier = getMainCarrier();\n return getAsyncContextStrategy(carrier);\n}\n\nfunction _startRootSpan(spanArguments: SentrySpanArguments, scope: Scope, parentSampled?: boolean): SentrySpan {\n const client = getClient();\n const options: Partial = (client && client.getOptions()) || {};\n\n const { name = '', attributes } = spanArguments;\n const [sampled, sampleRate] = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY]\n ? [false]\n : sampleSpan(options, {\n name,\n parentSampled,\n attributes,\n transactionContext: {\n name,\n parentSampled,\n },\n });\n\n const rootSpan = new SentrySpan({\n ...spanArguments,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n ...spanArguments.attributes,\n },\n sampled,\n });\n if (sampleRate !== undefined) {\n rootSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, sampleRate);\n }\n\n if (client) {\n client.emit('spanStart', rootSpan);\n }\n\n return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan: Span, scope: Scope, spanArguments: SentrySpanArguments): Span {\n const { spanId, traceId } = parentSpan.spanContext();\n const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : spanIsSampled(parentSpan);\n\n const childSpan = sampled\n ? new SentrySpan({\n ...spanArguments,\n parentSpanId: spanId,\n traceId,\n sampled,\n })\n : new SentryNonRecordingSpan({ traceId });\n\n addChildSpanToSpan(parentSpan, childSpan);\n\n const client = getClient();\n if (client) {\n client.emit('spanStart', childSpan);\n // If it has an endTimestamp, it's already ended\n if (spanArguments.endTimestamp) {\n client.emit('spanEnd', childSpan);\n }\n }\n\n return childSpan;\n}\n\nfunction getParentSpan(scope: Scope): SentrySpan | undefined {\n const span = _getSpanForScope(scope) as SentrySpan | undefined;\n\n if (!span) {\n return undefined;\n }\n\n const client = getClient();\n const options: Partial = client ? client.getOptions() : {};\n if (options.parentSpanIsAlwaysRootSpan) {\n return getRootSpan(span) as SentrySpan;\n }\n\n return span;\n}\n","import type { Options, SamplingContext } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { parseSampleRate } from '../utils/parseSampleRate';\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nexport function sampleSpan(\n options: Pick,\n samplingContext: SamplingContext,\n): [sampled: boolean, sampleRate?: number] {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n return [false];\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` nor `enableTracing` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n } else if (typeof options.tracesSampleRate !== 'undefined') {\n sampleRate = options.tracesSampleRate;\n } else {\n // When `enableTracing === true`, we use a sample rate of 100%\n sampleRate = 1;\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n // (The only valid values are booleans or numbers between 0 and 1.)\n const parsedSampleRate = parseSampleRate(sampleRate);\n\n if (parsedSampleRate === undefined) {\n DEBUG_BUILD && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n return [false];\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!parsedSampleRate) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n return [false, parsedSampleRate];\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n const shouldSample = Math.random() < parsedSampleRate;\n\n // if we're not going to keep it, we're done\n if (!shouldSample) {\n DEBUG_BUILD &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return [false, parsedSampleRate];\n }\n\n return [true, parsedSampleRate];\n}\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { MetricRatingThresholds, MetricType } from '../types';\n\nconst getRating = (value: number, thresholds: MetricRatingThresholds): MetricType['rating'] => {\n if (value > thresholds[1]) {\n return 'poor';\n }\n if (value > thresholds[0]) {\n return 'needs-improvement';\n }\n return 'good';\n};\n\nexport const bindReporter = (\n callback: (metric: Extract) => void,\n metric: Extract,\n thresholds: MetricRatingThresholds,\n reportAllChanges?: boolean,\n) => {\n let prevValue: number;\n let delta: number;\n return (forceReport?: boolean) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (delta || prevValue === undefined) {\n prevValue = metric.value;\n metric.delta = delta;\n metric.rating = getRating(metric.value, thresholds);\n callback(metric);\n }\n }\n }\n };\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\nimport type { NavigationTimingPolyfillEntry } from '../types';\n\nexport const getNavigationEntry = (): PerformanceNavigationTiming | NavigationTimingPolyfillEntry | undefined => {\n return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const getActivationStart = (): number => {\n const navEntry = getNavigationEntry();\n return (navEntry && navEntry.activationStart) || 0;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\nimport type { MetricType } from '../types';\nimport { generateUniqueID } from './generateUniqueID';\nimport { getActivationStart } from './getActivationStart';\nimport { getNavigationEntry } from './getNavigationEntry';\n\nexport const initMetric = (name: MetricName, value?: number) => {\n const navEntry = getNavigationEntry();\n let navigationType: MetricType['navigationType'] = 'navigate';\n\n if (navEntry) {\n if ((WINDOW.document && WINDOW.document.prerendering) || getActivationStart() > 0) {\n navigationType = 'prerender';\n } else if (WINDOW.document && WINDOW.document.wasDiscarded) {\n navigationType = 'restore';\n } else if (navEntry.type) {\n navigationType = navEntry.type.replace(/_/g, '-') as MetricType['navigationType'];\n }\n }\n\n // Use `entries` type specific for the metric.\n const entries: Extract['entries'] = [];\n\n return {\n name,\n value: typeof value === 'undefined' ? -1 : value,\n rating: 'good' as const, // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n delta: 0,\n entries,\n id: generateUniqueID(),\n navigationType,\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nexport const generateUniqueID = () => {\n return `v3-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { FirstInputPolyfillEntry, NavigationTimingPolyfillEntry } from '../types';\n\ninterface PerformanceEntryMap {\n event: PerformanceEventTiming[];\n paint: PerformancePaintTiming[];\n 'layout-shift': LayoutShift[];\n 'largest-contentful-paint': LargestContentfulPaint[];\n 'first-input': PerformanceEventTiming[] | FirstInputPolyfillEntry[];\n navigation: PerformanceNavigationTiming[] | NavigationTimingPolyfillEntry[];\n resource: PerformanceResourceTiming[];\n longtask: PerformanceEntry[];\n}\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nexport const observe = (\n type: K,\n callback: (entries: PerformanceEntryMap[K]) => void,\n opts?: PerformanceObserverInit,\n): PerformanceObserver | undefined => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n const po = new PerformanceObserver(list => {\n // Delay by a microtask to workaround a bug in Safari where the\n // callback is invoked immediately, rather than in a separate task.\n // See: https://github.com/GoogleChrome/web-vitals/issues/277\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n callback(list.getEntries() as PerformanceEntryMap[K]);\n });\n });\n po.observe(\n Object.assign(\n {\n type,\n buffered: true,\n },\n opts || {},\n ) as PerformanceObserverInit,\n );\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nexport interface OnHiddenCallback {\n (event: Event): void;\n}\n\nexport const onHidden = (cb: OnHiddenCallback) => {\n const onHiddenOrPageHide = (event: Event) => {\n if (event.type === 'pagehide' || (WINDOW.document && WINDOW.document.visibilityState === 'hidden')) {\n cb(event);\n }\n };\n\n if (WINDOW.document) {\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n }\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface RunOnceCallback {\n (arg: unknown): void;\n}\n\nexport const runOnce = (cb: RunOnceCallback) => {\n let called = false;\n return (arg: unknown) => {\n if (!called) {\n cb(arg);\n called = true;\n }\n };\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n // If the document is hidden when this code runs, assume it was always\n // hidden and the page was loaded in the background, with the one exception\n // that visibility state is always 'hidden' during prerendering, so we have\n // to ignore that case until prerendering finishes (see: `prerenderingchange`\n // event logic below).\n firstHiddenTime = WINDOW.document!.visibilityState === 'hidden' && !WINDOW.document!.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event: Event) => {\n // If the document is 'hidden' and no previous hidden timestamp has been\n // set, update it based on the current event data.\n if (WINDOW.document!.visibilityState === 'hidden' && firstHiddenTime > -1) {\n // If the event is a 'visibilitychange' event, it means the page was\n // visible prior to this change, so the event timestamp is the first\n // hidden time.\n // However, if the event is not a 'visibilitychange' event, then it must\n // be a 'prerenderingchange' event, and the fact that the document is\n // still 'hidden' from the above check means the tab was activated\n // in a background state and so has always been hidden.\n firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n // Remove all listeners now that a `firstHiddenTime` value has been set.\n removeEventListener('visibilitychange', onVisibilityUpdate, true);\n removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n }\n};\n\nconst addChangeListeners = () => {\n addEventListener('visibilitychange', onVisibilityUpdate, true);\n // IMPORTANT: when a page is prerendering, its `visibilityState` is\n // 'hidden', so in order to account for cases where this module checks for\n // visibility during prerendering, an additional check after prerendering\n // completes is also required.\n addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nexport const getVisibilityWatcher = () => {\n if (WINDOW.document && firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n initHiddenTime();\n addChangeListeners();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../../types';\n\nexport const whenActivated = (callback: () => void) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n addEventListener('prerenderingchange', () => callback(), true);\n } else {\n callback();\n }\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { whenActivated } from './lib/whenActivated';\nimport type { FCPMetric, FCPReportCallback, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nexport const FCPThresholds: MetricRatingThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nexport const onFCP = (onReport: FCPReportCallback, opts: ReportOpts = {}): void => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FCP');\n let report: ReturnType;\n\n const handleEntries = (entries: FCPMetric['entries']) => {\n (entries as PerformancePaintTiming[]).forEach(entry => {\n if (entry.name === 'first-contentful-paint') {\n po!.disconnect();\n\n // Only report if the page wasn't hidden prior to the first paint.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n // The activationStart reference is used because FCP should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the FCP, this time should be clamped at 0.\n metric.value = Math.max(entry.startTime - getActivationStart(), 0);\n metric.entries.push(entry);\n report(true);\n }\n }\n });\n };\n\n const po = observe('paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, FCPThresholds, opts!.reportAllChanges);\n }\n });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { onFCP } from './onFCP';\nimport type { CLSMetric, CLSReportCallback, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nexport const CLSThresholds: MetricRatingThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onCLS = (onReport: CLSReportCallback, opts: ReportOpts = {}): void => {\n // Start monitoring FCP so we can only report CLS if FCP is also reported.\n // Note: this is done to match the current behavior of CrUX.\n onFCP(\n runOnce(() => {\n const metric = initMetric('CLS', 0);\n let report: ReturnType;\n\n let sessionValue = 0;\n let sessionEntries: LayoutShift[] = [];\n\n const handleEntries = (entries: LayoutShift[]): void => {\n entries.forEach(entry => {\n // Only count layout shifts without recent user input.\n if (!entry.hadRecentInput) {\n const firstSessionEntry = sessionEntries[0];\n const lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry\n // and less than 5 seconds after the first entry in the session,\n // include the entry in the current session. Otherwise, start a new\n // session.\n if (\n sessionValue &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n }\n });\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n report();\n }\n };\n\n const po = observe('layout-shift', handleEntries);\n if (po) {\n report = bindReporter(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n onHidden(() => {\n handleEntries(po.takeRecords() as CLSMetric['entries']);\n report(true);\n });\n\n // Queue a task to report (if nothing else triggers a report first).\n // This allows CLS to be reported as soon as FCP fires when\n // `reportAllChanges` is true.\n setTimeout(report, 0);\n }\n }),\n );\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bindReporter } from './lib/bindReporter';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { whenActivated } from './lib/whenActivated';\nimport type { FIDMetric, FIDReportCallback, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nexport const FIDThresholds: MetricRatingThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nexport const onFID = (onReport: FIDReportCallback, opts: ReportOpts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('FID');\n // eslint-disable-next-line prefer-const\n let report: ReturnType;\n\n const handleEntry = (entry: PerformanceEventTiming): void => {\n // Only report if the page wasn't hidden prior to the first input.\n if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n const handleEntries = (entries: FIDMetric['entries']) => {\n (entries as PerformanceEventTiming[]).forEach(handleEntry);\n };\n\n const po = observe('first-input', handleEntries);\n report = bindReporter(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n if (po) {\n onHidden(\n runOnce(() => {\n handleEntries(po.takeRecords() as FIDMetric['entries']);\n po.disconnect();\n }),\n );\n }\n });\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Metric } from '../../types';\nimport { observe } from '../observe';\n\ndeclare global {\n interface Performance {\n interactionCount: number;\n }\n}\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries: Metric['entries']): void => {\n (entries as PerformanceEventTiming[]).forEach(e => {\n if (e.interactionId) {\n minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n }\n });\n};\n\nlet po: PerformanceObserver | undefined;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nexport const getInteractionCount = (): number => {\n return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nexport const initInteractionCountPolyfill = (): void => {\n if ('interactionCount' in performance || po) return;\n\n po = observe('event', updateEstimate, {\n type: 'event',\n buffered: true,\n durationThreshold: 0,\n } as PerformanceObserverInit);\n};\n","/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { getInteractionCount, initInteractionCountPolyfill } from './lib/polyfills/interactionCountPolyfill';\nimport { whenActivated } from './lib/whenActivated';\nimport type { INPMetric, INPReportCallback, MetricRatingThresholds, ReportOpts } from './types';\n\ninterface Interaction {\n id: number;\n latency: number;\n entries: PerformanceEventTiming[];\n}\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nexport const INPThresholds: MetricRatingThresholds = [200, 500];\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nconst prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n return getInteractionCount() - prevInteractionCount;\n};\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// A list of longest interactions on the page (by latency) sorted so the\n// longest one is first. The list is as most MAX_INTERACTIONS_TO_CONSIDER long.\nconst longestInteractionList: Interaction[] = [];\n\n// A mapping of longest interactions by their interaction ID.\n// This is used for faster lookup.\nconst longestInteractionMap: { [interactionId: string]: Interaction } = {};\n\n/**\n * Takes a performance entry and adds it to the list of worst interactions\n * if its duration is long enough to make it among the worst. If the\n * entry is part of an existing interaction, it is merged and the latency\n * and entries list is updated as needed.\n */\nconst processEntry = (entry: PerformanceEventTiming) => {\n // The least-long of the 10 longest interactions.\n const minLongestInteraction = longestInteractionList[longestInteractionList.length - 1];\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const existingInteraction = longestInteractionMap[entry.interactionId!];\n\n // Only process the entry if it's possibly one of the ten longest,\n // or if it's part of an existing interaction.\n if (\n existingInteraction ||\n longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n entry.duration > minLongestInteraction.latency\n ) {\n // If the interaction already exists, update it. Otherwise create one.\n if (existingInteraction) {\n existingInteraction.entries.push(entry);\n existingInteraction.latency = Math.max(existingInteraction.latency, entry.duration);\n } else {\n const interaction = {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n id: entry.interactionId!,\n latency: entry.duration,\n entries: [entry],\n };\n longestInteractionMap[interaction.id] = interaction;\n longestInteractionList.push(interaction);\n }\n\n // Sort the entries by latency (descending) and keep only the top ten.\n longestInteractionList.sort((a, b) => b.latency - a.latency);\n longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER).forEach(i => {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete longestInteractionMap[i.id];\n });\n }\n};\n\n/**\n * Returns the estimated p98 longest interaction based on the stored\n * interaction candidates and the interaction count for the current page.\n */\nconst estimateP98LongestInteraction = () => {\n const candidateInteractionIndex = Math.min(\n longestInteractionList.length - 1,\n Math.floor(getInteractionCountForNavigation() / 50),\n );\n\n return longestInteractionList[candidateInteractionIndex];\n};\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed to\n * control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 are\n * reported as 0. Note that this will not affect your 75th percentile INP value\n * unless that value is also less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nexport const onINP = (onReport: INPReportCallback, opts: ReportOpts = {}) => {\n whenActivated(() => {\n // TODO(philipwalton): remove once the polyfill is no longer needed.\n initInteractionCountPolyfill();\n\n const metric = initMetric('INP');\n // eslint-disable-next-line prefer-const\n let report: ReturnType;\n\n const handleEntries = (entries: INPMetric['entries']) => {\n entries.forEach(entry => {\n if (entry.interactionId) {\n processEntry(entry);\n }\n\n // Entries of type `first-input` don't currently have an `interactionId`,\n // so to consider them in INP we have to first check that an existing\n // entry doesn't match the `duration` and `startTime`.\n // Note that this logic assumes that `event` entries are dispatched\n // before `first-input` entries. This is true in Chrome (the only browser\n // that currently supports INP).\n // TODO(philipwalton): remove once crbug.com/1325826 is fixed.\n if (entry.entryType === 'first-input') {\n const noMatchingEntry = !longestInteractionList.some(interaction => {\n return interaction.entries.some(prevEntry => {\n return entry.duration === prevEntry.duration && entry.startTime === prevEntry.startTime;\n });\n });\n if (noMatchingEntry) {\n processEntry(entry);\n }\n }\n });\n\n const inp = estimateP98LongestInteraction();\n\n if (inp && inp.latency !== metric.value) {\n metric.value = inp.latency;\n metric.entries = inp.entries;\n report();\n }\n };\n\n const po = observe('event', handleEntries, {\n // Event Timing entries have their durations rounded to the nearest 8ms,\n // so a duration of 40ms would be any event that spans 2.5 or more frames\n // at 60Hz. This threshold is chosen to strike a balance between usefulness\n // and performance. Running this callback for any interaction that spans\n // just one or two frames is likely not worth the insight that could be\n // gained.\n durationThreshold: opts.durationThreshold != null ? opts.durationThreshold : 40,\n } as PerformanceObserverInit);\n\n report = bindReporter(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n if (po) {\n // If browser supports interactionId (and so supports INP), also\n // observe entries of type `first-input`. This is useful in cases\n // where the first interaction is less than the `durationThreshold`.\n if ('PerformanceEventTiming' in WINDOW && 'interactionId' in PerformanceEventTiming.prototype) {\n po.observe({ type: 'first-input', buffered: true });\n }\n\n onHidden(() => {\n handleEntries(po.takeRecords() as INPMetric['entries']);\n\n // If the interaction count shows that there were interactions but\n // none were captured by the PerformanceObserver, report a latency of 0.\n if (metric.value < 0 && getInteractionCountForNavigation() > 0) {\n metric.value = 0;\n metric.entries = [];\n }\n\n report(true);\n });\n }\n });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher';\nimport { initMetric } from './lib/initMetric';\nimport { observe } from './lib/observe';\nimport { onHidden } from './lib/onHidden';\nimport { runOnce } from './lib/runOnce';\nimport { whenActivated } from './lib/whenActivated';\nimport type { LCPMetric, LCPReportCallback, MetricRatingThresholds, ReportOpts } from './types';\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nexport const LCPThresholds: MetricRatingThresholds = [2500, 4000];\n\nconst reportedMetricIDs: Record = {};\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nexport const onLCP = (onReport: LCPReportCallback, opts: ReportOpts = {}) => {\n whenActivated(() => {\n const visibilityWatcher = getVisibilityWatcher();\n const metric = initMetric('LCP');\n let report: ReturnType;\n\n const handleEntries = (entries: LCPMetric['entries']) => {\n const lastEntry = entries[entries.length - 1] as LargestContentfulPaint;\n if (lastEntry) {\n // Only report if the page wasn't hidden prior to LCP.\n if (lastEntry.startTime < visibilityWatcher.firstHiddenTime) {\n // The startTime attribute returns the value of the renderTime if it is\n // not 0, and the value of the loadTime otherwise. The activationStart\n // reference is used because LCP should be relative to page activation\n // rather than navigation start if the page was prerendered. But in cases\n // where `activationStart` occurs after the LCP, this time should be\n // clamped at 0.\n metric.value = Math.max(lastEntry.startTime - getActivationStart(), 0);\n metric.entries = [lastEntry];\n report();\n }\n }\n };\n\n const po = observe('largest-contentful-paint', handleEntries);\n\n if (po) {\n report = bindReporter(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n const stopListening = runOnce(() => {\n if (!reportedMetricIDs[metric.id]) {\n handleEntries(po.takeRecords() as LCPMetric['entries']);\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n });\n\n // Stop listening after input. Note: while scrolling is an input that\n // stops LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n if (WINDOW.document) {\n // Wrap in a setTimeout so the callback is run in a separate task\n // to avoid extending the keyboard/click handler to reduce INP impact\n // https://github.com/GoogleChrome/web-vitals/issues/383\n addEventListener(type, () => setTimeout(stopListening, 0), true);\n }\n });\n\n onHidden(stopListening);\n }\n });\n};\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { WINDOW } from '../../types';\nimport { bindReporter } from './lib/bindReporter';\nimport { getActivationStart } from './lib/getActivationStart';\nimport { getNavigationEntry } from './lib/getNavigationEntry';\nimport { initMetric } from './lib/initMetric';\nimport { whenActivated } from './lib/whenActivated';\nimport type { MetricRatingThresholds, ReportOpts, TTFBReportCallback } from './types';\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nexport const TTFBThresholds: MetricRatingThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback: () => void) => {\n if (WINDOW.document && WINDOW.document.prerendering) {\n whenActivated(() => whenReady(callback));\n } else if (WINDOW.document && WINDOW.document.readyState !== 'complete') {\n addEventListener('load', () => whenReady(callback), true);\n } else {\n // Queue a task so the callback runs after `loadEventEnd`.\n setTimeout(callback, 0);\n }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nexport const onTTFB = (onReport: TTFBReportCallback, opts: ReportOpts = {}) => {\n const metric = initMetric('TTFB');\n const report = bindReporter(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n whenReady(() => {\n const navEntry = getNavigationEntry();\n\n if (navEntry) {\n const responseStart = navEntry.responseStart;\n\n // In some cases no value is reported by the browser (for\n // privacy/security reasons), and in other cases (bugs) the value is\n // negative or is larger than the current page time. Ignore these cases:\n // https://github.com/GoogleChrome/web-vitals/issues/137\n // https://github.com/GoogleChrome/web-vitals/issues/162\n // https://github.com/GoogleChrome/web-vitals/issues/275\n if (responseStart <= 0 || responseStart > performance.now()) return;\n\n // The activationStart reference is used because TTFB should be\n // relative to page activation rather than navigation start if the\n // page was prerendered. But in cases where `activationStart` occurs\n // after the first byte is received, this time should be clamped at 0.\n metric.value = Math.max(responseStart - getActivationStart(), 0);\n\n metric.entries = [navEntry];\n report(true);\n }\n });\n};\n","import { getFunctionName, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { onCLS } from './web-vitals/getCLS';\nimport { onFID } from './web-vitals/getFID';\nimport { onINP } from './web-vitals/getINP';\nimport { onLCP } from './web-vitals/getLCP';\nimport { observe } from './web-vitals/lib/observe';\nimport { onTTFB } from './web-vitals/onTTFB';\n\ntype InstrumentHandlerTypePerformanceObserver = 'longtask' | 'event' | 'navigation' | 'paint' | 'resource';\n\ntype InstrumentHandlerTypeMetric = 'cls' | 'lcp' | 'fid' | 'ttfb' | 'inp';\n\n// We provide this here manually instead of relying on a global, as this is not available in non-browser environements\n// And we do not want to expose such types\ninterface PerformanceEntry {\n readonly duration: number;\n readonly entryType: string;\n readonly name: string;\n readonly startTime: number;\n toJSON(): Record;\n}\ninterface PerformanceEventTiming extends PerformanceEntry {\n processingStart: number;\n processingEnd: number;\n duration: number;\n cancelable?: boolean;\n target?: unknown | null;\n interactionId?: number;\n}\n\ninterface Metric {\n /**\n * The name of the metric (in acronym form).\n */\n name: 'CLS' | 'FCP' | 'FID' | 'INP' | 'LCP' | 'TTFB';\n\n /**\n * The current value of the metric.\n */\n value: number;\n\n /**\n * The rating as to whether the metric value is within the \"good\",\n * \"needs improvement\", or \"poor\" thresholds of the metric.\n */\n rating: 'good' | 'needs-improvement' | 'poor';\n\n /**\n * The delta between the current value and the last-reported value.\n * On the first report, `delta` and `value` will always be the same.\n */\n delta: number;\n\n /**\n * A unique ID representing this particular metric instance. This ID can\n * be used by an analytics tool to dedupe multiple values sent for the same\n * metric instance, or to group multiple deltas together and calculate a\n * total. It can also be used to differentiate multiple different metric\n * instances sent from the same page, which can happen if the page is\n * restored from the back/forward cache (in that case new metrics object\n * get created).\n */\n id: string;\n\n /**\n * Any performance entries relevant to the metric value calculation.\n * The array may also be empty if the metric value was not based on any\n * entries (e.g. a CLS value of 0 given no layout shifts).\n */\n entries: PerformanceEntry[];\n\n /**\n * The type of navigation\n *\n * Navigation Timing API (or `undefined` if the browser doesn't\n * support that API). For pages that are restored from the bfcache, this\n * value will be 'back-forward-cache'.\n */\n navigationType: 'navigate' | 'reload' | 'back-forward' | 'back-forward-cache' | 'prerender' | 'restore';\n}\n\ntype InstrumentHandlerType = InstrumentHandlerTypeMetric | InstrumentHandlerTypePerformanceObserver;\n\ntype StopListening = undefined | void | (() => void);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstrumentHandlerCallback = (data: any) => void;\n\ntype CleanupHandlerCallback = () => void;\n\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\nlet _previousCls: Metric | undefined;\nlet _previousFid: Metric | undefined;\nlet _previousLcp: Metric | undefined;\nlet _previousTtfb: Metric | undefined;\nlet _previousInp: Metric | undefined;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nexport function addClsInstrumentationHandler(\n callback: (data: { metric: Metric }) => void,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nexport function addLcpInstrumentationHandler(\n callback: (data: { metric: Metric }) => void,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addFidInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nexport function addTtfbInstrumentationHandler(callback: (data: { metric: Metric }) => void): CleanupHandlerCallback {\n return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addInpInstrumentationHandler(\n callback: (data: { metric: Omit & { entries: PerformanceEventTiming[] } }) => void,\n): CleanupHandlerCallback {\n return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\nexport function addPerformanceInstrumentationHandler(\n type: 'event',\n callback: (data: { entries: ((PerformanceEntry & { target?: unknown | null }) | PerformanceEventTiming)[] }) => void,\n): CleanupHandlerCallback;\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback;\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nexport function addPerformanceInstrumentationHandler(\n type: InstrumentHandlerTypePerformanceObserver,\n callback: (data: { entries: PerformanceEntry[] }) => void,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n if (!instrumented[type]) {\n instrumentPerformanceObserver(type);\n instrumented[type] = true;\n }\n\n return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = handlers[type];\n\n if (!typeHandlers || !typeHandlers.length) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\nfunction instrumentCls(): StopListening {\n return onCLS(\n metric => {\n triggerHandlers('cls', {\n metric,\n });\n _previousCls = metric;\n },\n // We want the callback to be called whenever the CLS value updates.\n // By default, the callback is only called when the tab goes to the background.\n { reportAllChanges: true },\n );\n}\n\nfunction instrumentFid(): void {\n return onFID(metric => {\n triggerHandlers('fid', {\n metric,\n });\n _previousFid = metric;\n });\n}\n\nfunction instrumentLcp(): StopListening {\n return onLCP(metric => {\n triggerHandlers('lcp', {\n metric,\n });\n _previousLcp = metric;\n });\n}\n\nfunction instrumentTtfb(): StopListening {\n return onTTFB(metric => {\n triggerHandlers('ttfb', {\n metric,\n });\n _previousTtfb = metric;\n });\n}\n\nfunction instrumentInp(): void {\n return onINP(metric => {\n triggerHandlers('inp', {\n metric,\n });\n _previousInp = metric;\n });\n}\n\nfunction addMetricObserver(\n type: InstrumentHandlerTypeMetric,\n callback: InstrumentHandlerCallback,\n instrumentFn: () => StopListening,\n previousValue: Metric | undefined,\n stopOnCallback = false,\n): CleanupHandlerCallback {\n addHandler(type, callback);\n\n let stopListening: StopListening | undefined;\n\n if (!instrumented[type]) {\n stopListening = instrumentFn();\n instrumented[type] = true;\n }\n\n if (previousValue) {\n callback({ metric: previousValue });\n }\n\n return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type: InstrumentHandlerTypePerformanceObserver): void {\n const options: PerformanceObserverInit = {};\n\n // Special per-type options we want to use\n if (type === 'event') {\n options.durationThreshold = 0;\n }\n\n observe(\n type,\n entries => {\n triggerHandlers(type, { entries });\n },\n options,\n );\n}\n\nfunction addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n type: InstrumentHandlerType,\n callback: InstrumentHandlerCallback,\n stopListening: StopListening,\n): CleanupHandlerCallback {\n return () => {\n if (stopListening) {\n stopListening();\n }\n\n const typeHandlers = handlers[type];\n\n if (!typeHandlers) {\n return;\n }\n\n const index = typeHandlers.indexOf(callback);\n if (index !== -1) {\n typeHandlers.splice(index, 1);\n }\n };\n}\n","import type { SentrySpan } from '@sentry/core';\nimport { spanToJSON, startInactiveSpan, withActiveSpan } from '@sentry/core';\nimport type { Span, SpanTimeInput, StartSpanOptions } from '@sentry/types';\nimport { WINDOW } from '../types';\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nexport function isMeasurementValue(value: unknown): value is number {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nexport function startAndEndSpan(\n parentSpan: Span,\n startTimeInSeconds: number,\n endTime: SpanTimeInput,\n { ...ctx }: StartSpanOptions,\n): Span | undefined {\n const parentStartTime = spanToJSON(parentSpan).start_timestamp;\n if (parentStartTime && parentStartTime > startTimeInSeconds) {\n // We can only do this for SentrySpans...\n if (typeof (parentSpan as Partial).updateStartTime === 'function') {\n (parentSpan as SentrySpan).updateStartTime(startTimeInSeconds);\n }\n }\n\n // The return value only exists for tests\n return withActiveSpan(parentSpan, () => {\n const span = startInactiveSpan({\n startTime: startTimeInSeconds,\n ...ctx,\n });\n\n if (span) {\n span.end(endTime);\n }\n\n return span;\n });\n}\n\n/** Get the browser performance API. */\nexport function getBrowserPerformanceAPI(): Performance | undefined {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n return WINDOW && WINDOW.addEventListener && WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nexport function msToSec(time: number): number {\n return time / 1000;\n}\n","/* eslint-disable max-lines */\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, startInactiveSpan } from '@sentry/core';\nimport { setMeasurement } from '@sentry/core';\nimport type { Measurements, Span, SpanAttributes, StartSpanOptions } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, getComponentName, htmlTreeAsString, logger, parseUrl } from '@sentry/utils';\n\nimport { spanToJSON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../types';\nimport {\n addClsInstrumentationHandler,\n addFidInstrumentationHandler,\n addLcpInstrumentationHandler,\n addPerformanceInstrumentationHandler,\n addTtfbInstrumentationHandler,\n} from './instrument';\nimport { getBrowserPerformanceAPI, isMeasurementValue, msToSec, startAndEndSpan } from './utils';\nimport { getNavigationEntry } from './web-vitals/lib/getNavigationEntry';\nimport { getVisibilityWatcher } from './web-vitals/lib/getVisibilityWatcher';\n\ninterface NavigatorNetworkInformation {\n readonly connection?: NetworkInformation;\n}\n\n// http://wicg.github.io/netinfo/#connection-types\ntype ConnectionType = 'bluetooth' | 'cellular' | 'ethernet' | 'mixed' | 'none' | 'other' | 'unknown' | 'wifi' | 'wimax';\n\n// http://wicg.github.io/netinfo/#effectiveconnectiontype-enum\ntype EffectiveConnectionType = '2g' | '3g' | '4g' | 'slow-2g';\n\n// http://wicg.github.io/netinfo/#dom-megabit\ntype Megabit = number;\n// http://wicg.github.io/netinfo/#dom-millisecond\ntype Millisecond = number;\n\n// http://wicg.github.io/netinfo/#networkinformation-interface\ninterface NetworkInformation extends EventTarget {\n // http://wicg.github.io/netinfo/#type-attribute\n readonly type?: ConnectionType;\n // http://wicg.github.io/netinfo/#effectivetype-attribute\n readonly effectiveType?: EffectiveConnectionType;\n // http://wicg.github.io/netinfo/#downlinkmax-attribute\n readonly downlinkMax?: Megabit;\n // http://wicg.github.io/netinfo/#downlink-attribute\n readonly downlink?: Megabit;\n // http://wicg.github.io/netinfo/#rtt-attribute\n readonly rtt?: Millisecond;\n // http://wicg.github.io/netinfo/#savedata-attribute\n readonly saveData?: boolean;\n // http://wicg.github.io/netinfo/#handling-changes-to-the-underlying-connection\n onchange?: EventListener;\n}\n\n// https://w3c.github.io/device-memory/#sec-device-memory-js-api\ninterface NavigatorDeviceMemory {\n readonly deviceMemory?: number;\n}\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor: number = 0;\n\nlet _measurements: Measurements = {};\nlet _lcpEntry: LargestContentfulPaint | undefined;\nlet _clsEntry: LayoutShift | undefined;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nexport function startTrackingWebVitals(): () => void {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n if (performance.mark) {\n WINDOW.performance.mark('sentry-tracing-init');\n }\n const fidCallback = _trackFID();\n const clsCallback = _trackCLS();\n const lcpCallback = _trackLCP();\n const ttfbCallback = _trackTtfb();\n\n return (): void => {\n fidCallback();\n clsCallback();\n lcpCallback();\n ttfbCallback();\n };\n }\n\n return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nexport function startTrackingLongTasks(): void {\n addPerformanceInstrumentationHandler('longtask', ({ entries }) => {\n for (const entry of entries) {\n if (!getActiveSpan()) {\n return;\n }\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const span = startInactiveSpan({\n name: 'Main UI thread blocked',\n op: 'ui.long-task',\n startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n if (span) {\n span.end(startTime + duration);\n }\n }\n });\n}\n\n/**\n * Start tracking interaction events.\n */\nexport function startTrackingInteractions(): void {\n addPerformanceInstrumentationHandler('event', ({ entries }) => {\n for (const entry of entries) {\n if (!getActiveSpan()) {\n return;\n }\n\n if (entry.name === 'click') {\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(entry.duration);\n\n const spanOptions: StartSpanOptions & Required> = {\n name: htmlTreeAsString(entry.target),\n op: `ui.interaction.${entry.name}`,\n startTime: startTime,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n };\n\n const componentName = getComponentName(entry.target);\n if (componentName) {\n spanOptions.attributes['ui.component_name'] = componentName;\n }\n\n const span = startInactiveSpan(spanOptions);\n if (span) {\n span.end(startTime + duration);\n }\n }\n }\n });\n}\n\nexport { startTrackingINP } from './inp';\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS(): () => void {\n return addClsInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS');\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry as LayoutShift;\n }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(): () => void {\n return addLcpInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _lcpEntry = entry as LargestContentfulPaint;\n }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID(): () => void {\n return addFidInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n const timeOrigin = msToSec(browserPerformanceTimeOrigin as number);\n const startTime = msToSec(entry.startTime);\n DEBUG_BUILD && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\nfunction _trackTtfb(): () => void {\n return addTtfbInstrumentationHandler(({ metric }) => {\n const entry = metric.entries[metric.entries.length - 1];\n if (!entry) {\n return;\n }\n\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n });\n}\n\n/** Add performance related spans to a transaction */\nexport function addPerformanceEntries(span: Span): void {\n const performance = getBrowserPerformanceAPI();\n if (!performance || !WINDOW.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n DEBUG_BUILD && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n const timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n const performanceEntries = performance.getEntries();\n\n const { op, start_timestamp: transactionStartTime } = spanToJSON(span);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n performanceEntries.slice(_performanceCursor).forEach((entry: Record) => {\n const startTime = msToSec(entry.startTime);\n const duration = msToSec(entry.duration);\n\n if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(span, entry, timeOrigin);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n _addMeasureSpans(span, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n const firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n DEBUG_BUILD && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n }\n break;\n }\n case 'resource': {\n _addResourceSpans(span, entry, entry.name as string, startTime, duration, timeOrigin);\n break;\n }\n default:\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(span);\n\n // Measurements are only available for pageload transactions\n if (op === 'pageload') {\n _addTtfbRequestTimeToMeasurements(_measurements);\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!_measurements[name] || !transactionStartTime || timeOrigin >= transactionStartTime) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the span span data, so these web vitals will need\n // to be adjusted to be relative to span.startTimestamp.\n const oldValue = _measurements[name].value;\n const measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n const normalizedValue = Math.abs((measurementTimestamp - transactionStartTime) * 1000);\n const delta = normalizedValue - oldValue;\n\n DEBUG_BUILD && logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n _measurements[name].value = normalizedValue;\n });\n\n const fidMark = _measurements['mark.fid'];\n if (fidMark && _measurements['fid']) {\n // create span for FID\n startAndEndSpan(span, fidMark.value, fidMark.value + msToSec(_measurements['fid'].value), {\n name: 'first input delay',\n op: 'ui.action',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n\n // Delete mark.fid as we don't want it to be part of final payload\n delete _measurements['mark.fid'];\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in _measurements)) {\n delete _measurements.cls;\n }\n\n Object.keys(_measurements).forEach(measurementName => {\n setMeasurement(measurementName, _measurements[measurementName].value, _measurements[measurementName].unit);\n });\n\n _tagMetricInfo(span);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nexport function _addMeasureSpans(\n span: Span,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): number {\n const measureStartTimestamp = timeOrigin + startTime;\n const measureEndTimestamp = measureStartTimestamp + duration;\n\n startAndEndSpan(span, measureStartTimestamp, measureEndTimestamp, {\n name: entry.name as string,\n op: entry.entryType as string,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n },\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addNavigationSpans(span: Span, entry: Record, timeOrigin: number): void {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n span: Span,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n entry: Record,\n event: string,\n timeOrigin: number,\n name?: string,\n eventEnd?: string,\n): void {\n const end = eventEnd ? (entry[eventEnd] as number | undefined) : (entry[`${event}End`] as number | undefined);\n const start = entry[`${event}Start`] as number | undefined;\n if (!start || !end) {\n return;\n }\n startAndEndSpan(span, timeOrigin + msToSec(start), timeOrigin + msToSec(end), {\n op: 'browser',\n name: name || event,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n });\n}\n\n/** Create request and response related spans */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _addRequest(span: Span, entry: Record, timeOrigin: number): void {\n if (entry.responseEnd) {\n // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n startAndEndSpan(\n span,\n timeOrigin + msToSec(entry.requestStart as number),\n timeOrigin + msToSec(entry.responseEnd as number),\n {\n op: 'browser',\n name: 'request',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n },\n );\n\n startAndEndSpan(\n span,\n timeOrigin + msToSec(entry.responseStart as number),\n timeOrigin + msToSec(entry.responseEnd as number),\n {\n op: 'browser',\n name: 'response',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n },\n },\n );\n }\n}\n\nexport interface ResourceEntry extends Record {\n initiatorType?: string;\n transferSize?: number;\n encodedBodySize?: number;\n decodedBodySize?: number;\n renderBlockingStatus?: string;\n}\n\n/** Create resource-related spans */\nexport function _addResourceSpans(\n span: Span,\n entry: ResourceEntry,\n resourceUrl: string,\n startTime: number,\n duration: number,\n timeOrigin: number,\n): void {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n const parsedUrl = parseUrl(resourceUrl);\n\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n };\n setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n if ('renderBlockingStatus' in entry) {\n attributes['resource.render_blocking_status'] = entry.renderBlockingStatus;\n }\n if (parsedUrl.protocol) {\n attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n }\n\n if (parsedUrl.host) {\n attributes['server.address'] = parsedUrl.host;\n }\n\n attributes['url.same_origin'] = resourceUrl.includes(WINDOW.location.origin);\n\n const startTimestamp = timeOrigin + startTime;\n const endTimestamp = startTimestamp + duration;\n\n startAndEndSpan(span, startTimestamp, endTimestamp, {\n name: resourceUrl.replace(WINDOW.location.origin, ''),\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other',\n attributes,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span: Span): void {\n const navigator = WINDOW.navigator as null | (Navigator & NavigatorNetworkInformation & NavigatorDeviceMemory);\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n const connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n span.setAttribute('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n span.setAttribute('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _tagMetricInfo(span: Span): void {\n if (_lcpEntry) {\n DEBUG_BUILD && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n span.setAttribute('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n span.setAttribute('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n span.setAttribute('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n DEBUG_BUILD && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n span.setAttribute(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nfunction setResourceEntrySizeData(\n attributes: SpanAttributes,\n entry: ResourceEntry,\n key: keyof Pick,\n dataKey: 'http.response_transfer_size' | 'http.response_content_length' | 'http.decoded_response_content_length',\n): void {\n const entryVal = entry[key];\n if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n attributes[dataKey] = entryVal;\n }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements: Measurements): void {\n const navEntry = getNavigationEntry();\n if (!navEntry) {\n return;\n }\n\n const { responseStart, requestStart } = navEntry;\n\n if (requestStart <= responseStart) {\n DEBUG_BUILD && logger.log('[Measurements] Adding TTFB Request Time');\n _measurements['ttfb.requestTime'] = {\n value: responseStart - requestStart,\n unit: 'millisecond',\n };\n }\n}\n","import {\n SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME,\n SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT,\n SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE,\n getActiveSpan,\n getClient,\n getCurrentScope,\n getRootSpan,\n spanToJSON,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { Integration, SpanAttributes } from '@sentry/types';\nimport { browserPerformanceTimeOrigin, dropUndefinedKeys, htmlTreeAsString } from '@sentry/utils';\nimport { addInpInstrumentationHandler } from './instrument';\nimport { getBrowserPerformanceAPI, msToSec } from './utils';\n\n/**\n * Start tracking INP webvital events.\n */\nexport function startTrackingINP(): () => void {\n const performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n const inpCallback = _trackINP();\n\n return (): void => {\n inpCallback();\n };\n }\n\n return () => undefined;\n}\n\nconst INP_ENTRY_MAP: Record = {\n click: 'click',\n pointerdown: 'click',\n pointerup: 'click',\n mousedown: 'click',\n mouseup: 'click',\n touchstart: 'click',\n touchend: 'click',\n mouseover: 'hover',\n mouseout: 'hover',\n mouseenter: 'hover',\n mouseleave: 'hover',\n pointerover: 'hover',\n pointerout: 'hover',\n pointerenter: 'hover',\n pointerleave: 'hover',\n dragstart: 'drag',\n dragend: 'drag',\n drag: 'drag',\n dragenter: 'drag',\n dragleave: 'drag',\n dragover: 'drag',\n drop: 'drag',\n keydown: 'press',\n keyup: 'press',\n keypress: 'press',\n input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. */\nfunction _trackINP(): () => void {\n return addInpInstrumentationHandler(({ metric }) => {\n const client = getClient();\n if (!client || metric.value == undefined) {\n return;\n }\n\n const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n if (!entry) {\n return;\n }\n\n const interactionType = INP_ENTRY_MAP[entry.name];\n\n const options = client.getOptions();\n /** Build the INP span, create an envelope from the span, and then send the envelope */\n const startTime = msToSec((browserPerformanceTimeOrigin as number) + entry.startTime);\n const duration = msToSec(metric.value);\n const scope = getCurrentScope();\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan ? getRootSpan(activeSpan) : undefined;\n\n const routeName = rootSpan ? spanToJSON(rootSpan).description : undefined;\n const user = scope.getUser();\n\n // We need to get the replay, user, and activeTransaction from the current scope\n // so that we can associate replay id, profile id, and a user display to the span\n const replay = client.getIntegrationByName string }>('Replay');\n\n const replayId = replay && replay.getReplayId();\n\n const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n let profileId: string | undefined = undefined;\n try {\n // @ts-expect-error skip optional chaining to save bundle size with try catch\n profileId = scope.getScopeData().contexts.profile.profile_id;\n } catch {\n // do nothing\n }\n\n const name = htmlTreeAsString(entry.target);\n const attributes: SpanAttributes = dropUndefinedKeys({\n release: options.release,\n environment: options.environment,\n transaction: routeName,\n [SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: metric.value,\n user: userDisplay || undefined,\n profile_id: profileId || undefined,\n replay_id: replayId || undefined,\n });\n\n const span = startInactiveSpan({\n name,\n op: `ui.interaction.${interactionType}`,\n attributes,\n startTime: startTime,\n experimental: {\n standalone: true,\n },\n });\n\n span.addEvent('inp', {\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n [SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n });\n\n span.end(startTime + duration);\n });\n}\n","import type { Span, SpanAttributes, StartSpanOptions } from '@sentry/types';\nimport { logger, timestampInSeconds } from '@sentry/utils';\nimport { getClient, getCurrentScope } from '../currentScopes';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '../semanticAttributes';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled';\nimport { _setSpanForScope } from '../utils/spanOnScope';\nimport {\n getActiveSpan,\n getSpanDescendants,\n removeChildSpanFromSpan,\n spanTimeInputToSeconds,\n spanToJSON,\n} from '../utils/spanUtils';\nimport { SentryNonRecordingSpan } from './sentryNonRecordingSpan';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\nimport { startInactiveSpan } from './trace';\n\nexport const TRACING_DEFAULTS = {\n idleTimeout: 1_000,\n finalTimeout: 30_000,\n childSpanTimeout: 15_000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\nconst FINISH_REASON_CANCELLED = 'cancelled';\n\n// unused\nconst FINISH_REASON_DOCUMENT_HIDDEN = 'documentHidden';\n\n// unusued in this file, but used in BrowserTracing\nconst FINISH_REASON_INTERRUPTED = 'interactionInterrupted';\n\ntype IdleSpanFinishReason =\n | typeof FINISH_REASON_CANCELLED\n | typeof FINISH_REASON_DOCUMENT_HIDDEN\n | typeof FINISH_REASON_EXTERNAL_FINISH\n | typeof FINISH_REASON_FINAL_TIMEOUT\n | typeof FINISH_REASON_HEARTBEAT_FAILED\n | typeof FINISH_REASON_IDLE_TIMEOUT\n | typeof FINISH_REASON_INTERRUPTED;\n\ninterface IdleSpanOptions {\n /**\n * The time that has to pass without any span being created.\n * If this time is exceeded, the idle span will finish.\n */\n idleTimeout: number;\n /**\n * The max. time an idle span may run.\n * If this time is exceeded, the idle span will finish no matter what.\n */\n finalTimeout: number;\n /**\n * The max. time a child span may run.\n * If the time since the last span was started exceeds this time, the idle span will finish.\n */\n childSpanTimeout?: number;\n /**\n * When set to `true`, will disable the idle timeout and child timeout\n * until the `idleSpanEnableAutoFinish` hook is emitted for the idle span.\n * The final timeout mechanism will not be affected by this option,\n * meaning the idle span will definitely be finished when the final timeout is\n * reached, no matter what this option is configured to.\n *\n * Defaults to `false`.\n */\n disableAutoFinish?: boolean;\n /** Allows to configure a hook that is called when the idle span is ended, before it is processed. */\n beforeSpanEnd?: (span: Span) => void;\n}\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nexport function startIdleSpan(startSpanOptions: StartSpanOptions, options: Partial = {}): Span {\n // Activities store a list of active spans\n const activities = new Map();\n\n // We should not use heartbeat if we finished a span\n let _finished = false;\n\n // Timer that tracks idleTimeout\n let _idleTimeoutID: ReturnType | undefined;\n\n // Timer that tracks maxSpanTime for child spans\n let _childSpanTimeoutID: ReturnType | undefined;\n\n // The reason why the span was finished\n let _finishReason: IdleSpanFinishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n let _autoFinishAllowed: boolean = !options.disableAutoFinish;\n\n const {\n idleTimeout = TRACING_DEFAULTS.idleTimeout,\n finalTimeout = TRACING_DEFAULTS.finalTimeout,\n childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n beforeSpanEnd,\n } = options;\n\n const client = getClient();\n\n if (!client || !hasTracingEnabled()) {\n return new SentryNonRecordingSpan();\n }\n\n const scope = getCurrentScope();\n const previousActiveSpan = getActiveSpan();\n const span = _startIdleSpan(startSpanOptions);\n\n function _endSpan(timestamp: number = timestampInSeconds()): void {\n // Ensure we end with the last span timestamp, if possible\n const spans = getSpanDescendants(span).filter(child => child !== span);\n\n // If we have no spans, we just end, nothing else to do here\n if (!spans.length) {\n span.end(timestamp);\n return;\n }\n\n const childEndTimestamps = spans\n .map(span => spanToJSON(span).timestamp)\n .filter(timestamp => !!timestamp) as number[];\n const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n const spanEndTimestamp = spanTimeInputToSeconds(timestamp);\n // In reality this should always exist here, but type-wise it may be undefined...\n const spanStartTimestamp = spanToJSON(span).start_timestamp;\n\n // The final endTimestamp should:\n // * Never be before the span start timestamp\n // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n // * Otherwise be the passed end timestamp\n // Final timestamp can never be after finalTimeout\n const endTimestamp = Math.min(\n spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n );\n\n span.end(endTimestamp);\n }\n\n /**\n * Cancels the existing idle timeout, if there is one.\n */\n function _cancelIdleTimeout(): void {\n if (_idleTimeoutID) {\n clearTimeout(_idleTimeoutID);\n _idleTimeoutID = undefined;\n }\n }\n\n /**\n * Cancels the existing child span timeout, if there is one.\n */\n function _cancelChildSpanTimeout(): void {\n if (_childSpanTimeoutID) {\n clearTimeout(_childSpanTimeoutID);\n _childSpanTimeoutID = undefined;\n }\n }\n\n /**\n * Restarts idle timeout, if there is no running idle timeout it will start one.\n */\n function _restartIdleTimeout(endTimestamp?: number): void {\n _cancelIdleTimeout();\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n _endSpan(endTimestamp);\n }\n }, idleTimeout);\n }\n\n /**\n * Restarts child span timeout, if there is none running it will start one.\n */\n function _restartChildSpanTimeout(endTimestamp?: number): void {\n _cancelChildSpanTimeout();\n _idleTimeoutID = setTimeout(() => {\n if (!_finished && _autoFinishAllowed) {\n _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n _endSpan(endTimestamp);\n }\n }, childSpanTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n function _pushActivity(spanId: string): void {\n _cancelIdleTimeout();\n activities.set(spanId, true);\n\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n function _popActivity(spanId: string): void {\n if (activities.has(spanId)) {\n activities.delete(spanId);\n }\n\n if (activities.size === 0) {\n const endTimestamp = timestampInSeconds();\n // We need to add the timeout here to have the real endtimestamp of the idle span\n // Remember timestampInSeconds is in seconds, timeout is in ms\n _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n _cancelChildSpanTimeout();\n }\n }\n\n function onIdleSpanEnded(): void {\n _finished = true;\n activities.clear();\n\n if (beforeSpanEnd) {\n beforeSpanEnd(span);\n }\n\n _setSpanForScope(scope, previousActiveSpan);\n\n const spanJSON = spanToJSON(span);\n\n const { timestamp: endTimestamp, start_timestamp: startTimestamp } = spanJSON;\n // This should never happen, but to make TS happy...\n if (!endTimestamp || !startTimestamp) {\n return;\n }\n\n const attributes: SpanAttributes = spanJSON.data || {};\n if (!attributes[SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n }\n\n logger.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n const childSpans = getSpanDescendants(span).filter(child => child !== span);\n\n let discardedSpans = 0;\n childSpans.forEach(childSpan => {\n // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n if (childSpan.isRecording()) {\n childSpan.setStatus({ code: SPAN_STATUS_ERROR, message: 'cancelled' });\n childSpan.end(endTimestamp);\n DEBUG_BUILD &&\n logger.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n }\n\n const childSpanJSON = spanToJSON(childSpan);\n const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n // Add a delta with idle timeout so that we prevent false positives\n const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp < timeoutWithMarginOfError;\n\n if (DEBUG_BUILD) {\n const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n if (!spanStartedBeforeIdleSpanEnd) {\n logger.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n } else if (!spanEndedBeforeFinalTimeout) {\n logger.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n }\n }\n\n if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n removeChildSpanFromSpan(span, childSpan);\n discardedSpans++;\n }\n });\n\n if (discardedSpans > 0) {\n span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n }\n }\n\n client.on('spanStart', startedSpan => {\n // If we already finished the idle span,\n // or if this is the idle span itself being started,\n // or if the started span has already been closed,\n // we don't care about it for activity\n if (_finished || startedSpan === span || !!spanToJSON(startedSpan).timestamp) {\n return;\n }\n\n const allSpans = getSpanDescendants(span);\n\n // If the span that was just started is a child of the idle span, we should track it\n if (allSpans.includes(startedSpan)) {\n _pushActivity(startedSpan.spanContext().spanId);\n }\n });\n\n client.on('spanEnd', endedSpan => {\n if (_finished) {\n return;\n }\n\n _popActivity(endedSpan.spanContext().spanId);\n\n if (endedSpan === span) {\n onIdleSpanEnded();\n }\n });\n\n client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n if (spanToAllowAutoFinish === span) {\n _autoFinishAllowed = true;\n _restartIdleTimeout();\n\n if (activities.size) {\n _restartChildSpanTimeout();\n }\n }\n });\n\n // We only start the initial idle timeout if we are not delaying the auto finish\n if (!options.disableAutoFinish) {\n _restartIdleTimeout();\n }\n\n setTimeout(() => {\n if (!_finished) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n _endSpan();\n }\n }, finalTimeout);\n\n return span;\n}\n\nfunction _startIdleSpan(options: StartSpanOptions): Span {\n const span = startInactiveSpan(options);\n\n _setSpanForScope(getCurrentScope(), span);\n\n DEBUG_BUILD && logger.log('[Tracing] Started span is an idle span');\n\n return span;\n}\n","import {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\n\nlet errorsInstrumented = false;\n\n/** Only exposed for testing */\nexport function _resetErrorsInstrumented(): void {\n errorsInstrumented = false;\n}\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nexport function registerSpanErrorInstrumentation(): void {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback(): void {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const message = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occured`);\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n","import type { Client, HandlerDataFetch, Scope, Span, SpanOrigin } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n isInstanceOf,\n parseUrl,\n} from '@sentry/utils';\nimport { getClient, getCurrentScope, getIsolationScope } from './currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from './semanticAttributes';\nimport {\n SPAN_STATUS_ERROR,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n setHttpStatus,\n startInactiveSpan,\n} from './tracing';\nimport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan';\nimport { hasTracingEnabled } from './utils/hasTracingEnabled';\nimport { getActiveSpan, spanToTraceHeader } from './utils/spanUtils';\n\ntype PolymorphicRequestHeaders =\n | Record\n | Array<[string, string]>\n // the below is not preicsely the Header type used in Request, but it'll pass duck-typing\n | {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n append: (key: string, value: string) => void;\n get: (key: string) => string | null | undefined;\n };\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function instrumentFetchRequest(\n handlerData: HandlerDataFetch,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record,\n spanOrigin: SpanOrigin = 'auto.http.browser',\n): Span | undefined {\n if (!handlerData.fetchData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(handlerData.fetchData.url);\n\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span) {\n endSpan(span, handlerData);\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const scope = getCurrentScope();\n const client = getClient();\n\n const { method, url } = handlerData.fetchData;\n\n const fullUrl = getFullURL(url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${method} ${url}`,\n attributes: {\n url,\n type: 'fetch',\n 'http.method': method,\n 'http.url': fullUrl,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n handlerData.fetchData.__span = span.spanContext().spanId;\n spans[span.spanContext().spanId] = span;\n\n if (shouldAttachHeaders(handlerData.fetchData.url) && client) {\n const request: string | Request = handlerData.args[0];\n\n // In case the user hasn't set the second argument of a fetch call we default it to `{}`.\n handlerData.args[1] = handlerData.args[1] || {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const options: { [key: string]: any } = handlerData.args[1];\n\n options.headers = addTracingHeadersToFetchRequest(\n request,\n client,\n scope,\n options,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers\n */\nexport function addTracingHeadersToFetchRequest(\n request: string | unknown, // unknown is actually type Request but we can't export DOM types from this package,\n client: Client,\n scope: Scope,\n options: {\n headers?:\n | {\n [key: string]: string[] | string | undefined;\n }\n | PolymorphicRequestHeaders;\n },\n span?: Span,\n): PolymorphicRequestHeaders | undefined {\n const isolationScope = getIsolationScope();\n\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader = span ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n );\n\n const headers =\n options.headers ||\n (typeof Request !== 'undefined' && isInstanceOf(request, Request) ? (request as Request).headers : undefined);\n\n if (!headers) {\n return { 'sentry-trace': sentryTraceHeader, baggage: sentryBaggageHeader };\n } else if (typeof Headers !== 'undefined' && isInstanceOf(headers, Headers)) {\n const newHeaders = new Headers(headers as Headers);\n\n newHeaders.append('sentry-trace', sentryTraceHeader);\n\n if (sentryBaggageHeader) {\n // If the same header is appended multiple times the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.append(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else if (Array.isArray(headers)) {\n const newHeaders = [...headers, ['sentry-trace', sentryTraceHeader]];\n\n if (sentryBaggageHeader) {\n // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n newHeaders.push([BAGGAGE_HEADER_NAME, sentryBaggageHeader]);\n }\n\n return newHeaders as PolymorphicRequestHeaders;\n } else {\n const existingBaggageHeader = 'baggage' in headers ? headers.baggage : undefined;\n const newBaggageHeaders: string[] = [];\n\n if (Array.isArray(existingBaggageHeader)) {\n newBaggageHeaders.push(...existingBaggageHeader);\n } else if (existingBaggageHeader) {\n newBaggageHeaders.push(existingBaggageHeader);\n }\n\n if (sentryBaggageHeader) {\n newBaggageHeaders.push(sentryBaggageHeader);\n }\n\n return {\n ...(headers as Exclude),\n 'sentry-trace': sentryTraceHeader,\n baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n };\n }\n}\n\nfunction getFullURL(url: string): string | undefined {\n try {\n const parsed = new URL(url);\n return parsed.href;\n } catch {\n return undefined;\n }\n}\n\nfunction endSpan(span: Span, handlerData: HandlerDataFetch): void {\n if (handlerData.response) {\n setHttpStatus(span, handlerData.response.status);\n\n const contentLength =\n handlerData.response && handlerData.response.headers && handlerData.response.headers.get('content-length');\n\n if (contentLength) {\n const contentLengthNum = parseInt(contentLength);\n if (contentLengthNum > 0) {\n span.setAttribute('http.response_content_length', contentLengthNum);\n }\n }\n } else if (handlerData.error) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n span.end();\n}\n","import {\n SENTRY_XHR_DATA_KEY,\n addPerformanceInstrumentationHandler,\n addXhrInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SentryNonRecordingSpan,\n getActiveSpan,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n getIsolationScope,\n hasTracingEnabled,\n instrumentFetchRequest,\n setHttpStatus,\n spanToJSON,\n spanToTraceHeader,\n startInactiveSpan,\n} from '@sentry/core';\nimport type { Client, HandlerDataXhr, SentryWrappedXMLHttpRequest, Span } from '@sentry/types';\nimport {\n BAGGAGE_HEADER_NAME,\n addFetchInstrumentationHandler,\n browserPerformanceTimeOrigin,\n dynamicSamplingContextToSentryBaggageHeader,\n generateSentryTraceHeader,\n parseUrl,\n stringMatchesSomePattern,\n} from '@sentry/utils';\nimport { WINDOW } from '../helpers';\n\n/** Options for Request Instrumentation */\nexport interface RequestInstrumentationOptions {\n /**\n * List of strings and/or Regular Expressions used to determine which outgoing requests will have `sentry-trace` and `baggage`\n * headers attached.\n *\n * **Default:** If this option is not provided, tracing headers will be attached to all outgoing requests.\n * If you are using a browser SDK, by default, tracing headers will only be attached to outgoing requests to the same origin.\n *\n * **Disclaimer:** Carelessly setting this option in browser environments may result into CORS errors!\n * Only attach tracing headers to requests to the same origin, or to requests to services you can control CORS headers of.\n * Cross-origin requests, meaning requests to a different domain, for example a request to `https://api.example.com/` while you're on `https://example.com/`, take special care.\n * If you are attaching headers to cross-origin requests, make sure the backend handling the request returns a `\"Access-Control-Allow-Headers: sentry-trace, baggage\"` header to ensure your requests aren't blocked.\n *\n * If you provide a `tracePropagationTargets` array, the entries you provide will be matched against the entire URL of the outgoing request.\n * If you are using a browser SDK, the entries will also be matched against the pathname of the outgoing requests.\n * This is so you can have matchers for relative requests, for example, `/^\\/api/` if you want to trace requests to your `/api` routes on the same domain.\n *\n * If any of the two match any of the provided values, tracing headers will be attached to the outgoing request.\n * Both, the string values, and the RegExes you provide in the array will match if they partially match the URL or pathname.\n *\n * Examples:\n * - `tracePropagationTargets: [/^\\/api/]` and request to `https://same-origin.com/api/posts`:\n * - Tracing headers will be attached because the request is sent to the same origin and the regex matches the pathname \"/api/posts\".\n * - `tracePropagationTargets: [/^\\/api/]` and request to `https://different-origin.com/api/posts`:\n * - Tracing headers will not be attached because the pathname will only be compared when the request target lives on the same origin.\n * - `tracePropagationTargets: [/^\\/api/, 'https://external-api.com']` and request to `https://external-api.com/v1/data`:\n * - Tracing headers will be attached because the request URL matches the string `'https://external-api.com'`.\n */\n tracePropagationTargets?: Array;\n\n /**\n * Flag to disable patching all together for fetch requests.\n *\n * Default: true\n */\n traceFetch: boolean;\n\n /**\n * Flag to disable patching all together for xhr requests.\n *\n * Default: true\n */\n traceXHR: boolean;\n\n /**\n * If true, Sentry will capture http timings and add them to the corresponding http spans.\n *\n * Default: true\n */\n enableHTTPTimings: boolean;\n\n /**\n * This function will be called before creating a span for a request with the given url.\n * Return false if you don't want a span for the given url.\n *\n * Default: (url: string) => true\n */\n shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nexport const defaultRequestInstrumentationOptions: RequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n};\n\n/** Registers span creators for xhr and fetch requests */\nexport function instrumentOutgoingRequests(_options?: Partial): void {\n const { traceFetch, traceXHR, shouldCreateSpanForRequest, enableHTTPTimings, tracePropagationTargets } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_: string) => true;\n\n const shouldAttachHeadersWithTargets = (url: string): boolean => shouldAttachHeaders(url, tracePropagationTargets);\n\n const spans: Record = {};\n\n if (traceFetch) {\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n // We cannot use `window.location` in the generic fetch instrumentation,\n // but we need it for reliable `server.address` attribute.\n // so we extend this in here\n if (createdSpan) {\n const fullUrl = getFullURL(handlerData.fetchData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n createdSpan.setAttributes({\n 'http.url': fullUrl,\n 'server.address': host,\n });\n }\n\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n\n if (traceXHR) {\n addXhrInstrumentationHandler(handlerData => {\n const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n if (enableHTTPTimings && createdSpan) {\n addHTTPTimings(createdSpan);\n }\n });\n }\n}\n\nfunction isPerformanceResourceTiming(entry: PerformanceEntry): entry is PerformanceResourceTiming {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry as PerformanceResourceTiming).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span: Span): void {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nexport function extractNetworkProtocol(nextHopProtocol: string): { name: string; version: string } {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/');\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1];\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time: number = 0): number {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming: PerformanceResourceTiming): [string, string | number][] {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData: [string, string | number][] = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nexport function shouldAttachHeaders(\n targetUrl: string,\n tracePropagationTargets: (string | RegExp)[] | undefined,\n): boolean {\n // window.location.href not being defined is an edge case in the browser but we need to handle it.\n // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n const href: string | undefined = WINDOW.location && WINDOW.location.href;\n\n if (!href) {\n // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n // so we need a to exclude those requests, because they might be cross origin.\n const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n if (!tracePropagationTargets) {\n return isRelativeSameOriginRequest;\n } else {\n return stringMatchesSomePattern(targetUrl, tracePropagationTargets);\n }\n } else {\n let resolvedUrl;\n let currentOrigin;\n\n // URL parsing may fail, we default to not attaching trace headers in that case.\n try {\n resolvedUrl = new URL(targetUrl, href);\n currentOrigin = new URL(href).origin;\n } catch (e) {\n return false;\n }\n\n const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n if (!tracePropagationTargets) {\n return isSameOriginRequest;\n } else {\n return (\n stringMatchesSomePattern(resolvedUrl.toString(), tracePropagationTargets) ||\n (isSameOriginRequest && stringMatchesSomePattern(resolvedUrl.pathname, tracePropagationTargets))\n );\n }\n }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nexport function xhrCallback(\n handlerData: HandlerDataXhr,\n shouldCreateSpan: (url: string) => boolean,\n shouldAttachHeaders: (url: string) => boolean,\n spans: Record,\n): Span | undefined {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n return undefined;\n }\n\n const shouldCreateSpanResult = hasTracingEnabled() && shouldCreateSpan(sentryXhrData.url);\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp && shouldCreateSpanResult) {\n const spanId = xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n const span = spans[spanId];\n if (span && sentryXhrData.status_code !== undefined) {\n setHttpStatus(span, sentryXhrData.status_code);\n span.end();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete spans[spanId];\n }\n return undefined;\n }\n\n const fullUrl = getFullURL(sentryXhrData.url);\n const host = fullUrl ? parseUrl(fullUrl).host : undefined;\n\n const hasParent = !!getActiveSpan();\n\n const span =\n shouldCreateSpanResult && hasParent\n ? startInactiveSpan({\n name: `${sentryXhrData.method} ${sentryXhrData.url}`,\n attributes: {\n type: 'xhr',\n 'http.method': sentryXhrData.method,\n 'http.url': fullUrl,\n url: sentryXhrData.url,\n 'server.address': host,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n },\n })\n : new SentryNonRecordingSpan();\n\n xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n spans[xhr.__sentry_xhr_span_id__] = span;\n\n const client = getClient();\n\n if (xhr.setRequestHeader && shouldAttachHeaders(sentryXhrData.url) && client) {\n addTracingHeadersToXhrRequest(\n xhr,\n client,\n // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n // we do not want to use the span as base for the trace headers,\n // which means that the headers will be generated from the scope and the sampling decision is deferred\n hasTracingEnabled() && hasParent ? span : undefined,\n );\n }\n\n return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr: SentryWrappedXMLHttpRequest, client: Client, span?: Span): void {\n const scope = getCurrentScope();\n const isolationScope = getIsolationScope();\n const { traceId, spanId, sampled, dsc } = {\n ...isolationScope.getPropagationContext(),\n ...scope.getPropagationContext(),\n };\n\n const sentryTraceHeader =\n span && hasTracingEnabled() ? spanToTraceHeader(span) : generateSentryTraceHeader(traceId, spanId, sampled);\n\n const sentryBaggageHeader = dynamicSamplingContextToSentryBaggageHeader(\n dsc || (span ? getDynamicSamplingContextFromSpan(span) : getDynamicSamplingContextFromClient(traceId, client)),\n );\n\n setHeaderOnXhr(xhr, sentryTraceHeader, sentryBaggageHeader);\n}\n\nfunction setHeaderOnXhr(\n xhr: SentryWrappedXMLHttpRequest,\n sentryTraceHeader: string,\n sentryBaggageHeader: string | undefined,\n): void {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader!(BAGGAGE_HEADER_NAME, sentryBaggageHeader);\n }\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n}\n\nfunction getFullURL(url: string): string | undefined {\n try {\n // By adding a base URL to new URL(), this will also work for relative urls\n // If `url` is a full URL, the base URL is ignored anyhow\n const parsed = new URL(url, WINDOW.location.origin);\n return parsed.href;\n } catch {\n return undefined;\n }\n}\n","/* eslint-disable max-lines */\nimport {\n addHistoryInstrumentationHandler,\n addPerformanceEntries,\n startTrackingINP,\n startTrackingInteractions,\n startTrackingLongTasks,\n startTrackingWebVitals,\n} from '@sentry-internal/browser-utils';\nimport {\n SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n TRACING_DEFAULTS,\n getActiveSpan,\n getClient,\n getCurrentScope,\n getDynamicSamplingContextFromSpan,\n getIsolationScope,\n getRootSpan,\n registerSpanErrorInstrumentation,\n spanIsSampled,\n spanToJSON,\n startIdleSpan,\n} from '@sentry/core';\nimport type { Client, IntegrationFn, StartSpanOptions, TransactionSource } from '@sentry/types';\nimport type { Span } from '@sentry/types';\nimport {\n browserPerformanceTimeOrigin,\n generatePropagationContext,\n getDomElement,\n logger,\n propagationContextFromHeaders,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\nimport { registerBackgroundTabDetection } from './backgroundtab';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request';\n\nexport const BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\nexport interface BrowserTracingOptions {\n /**\n * The time that has to pass without any span being created.\n * If this time is exceeded, the idle span will finish.\n *\n * Default: 1000 (ms)\n */\n idleTimeout: number;\n\n /**\n * The max. time an idle span may run.\n * If this time is exceeded, the idle span will finish no matter what.\n *\n * Default: 30000 (ms)\n */\n finalTimeout: number;\n\n /**\n The max. time an idle span may run.\n * If this time is exceeded, the idle span will finish no matter what.\n *\n * Default: 15000 (ms)\n */\n childSpanTimeout: number;\n\n /**\n * If a span should be created on page load.\n * If this is set to `false`, this integration will not start the default page load span.\n * Default: true\n */\n instrumentPageLoad: boolean;\n\n /**\n * If a span should be created on navigation (history change).\n * If this is set to `false`, this integration will not start the default navigation spans.\n * Default: true\n */\n instrumentNavigation: boolean;\n\n /**\n * Flag spans where tabs moved to background with \"cancelled\". Browser background tab timing is\n * not suited towards doing precise measurements of operations. By default, we recommend that this option\n * be enabled as background transactions can mess up your statistics in nondeterministic ways.\n *\n * Default: true\n */\n markBackgroundSpan: boolean;\n\n /**\n * If true, Sentry will capture long tasks and add them to the corresponding transaction.\n *\n * Default: true\n */\n enableLongTask: boolean;\n\n /**\n * If true, Sentry will capture first input delay and add it to the corresponding transaction.\n *\n * Default: true\n */\n enableInp: boolean;\n\n /**\n * Flag to disable patching all together for fetch requests.\n *\n * Default: true\n */\n traceFetch: boolean;\n\n /**\n * Flag to disable patching all together for xhr requests.\n *\n * Default: true\n */\n traceXHR: boolean;\n\n /**\n * If true, Sentry will capture http timings and add them to the corresponding http spans.\n *\n * Default: true\n */\n enableHTTPTimings: boolean;\n\n /**\n * _experiments allows the user to send options to define how this integration works.\n *\n * Default: undefined\n */\n _experiments: Partial<{\n enableInteractions: boolean;\n }>;\n\n /**\n * A callback which is called before a span for a pageload or navigation is started.\n * It receives the options passed to `startSpan`, and expects to return an updated options object.\n */\n beforeStartSpan?: (options: StartSpanOptions) => StartSpanOptions;\n\n /**\n * This function will be called before creating a span for a request with the given url.\n * Return false if you don't want a span for the given url.\n *\n * Default: (url: string) => true\n */\n shouldCreateSpanForRequest?(this: void, url: string): boolean;\n}\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS: BrowserTracingOptions = {\n ...TRACING_DEFAULTS,\n instrumentNavigation: true,\n instrumentPageLoad: true,\n markBackgroundSpan: true,\n enableLongTask: true,\n enableInp: true,\n _experiments: {},\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nexport const browserTracingIntegration = ((_options: Partial = {}) => {\n registerSpanErrorInstrumentation();\n\n const {\n enableInp,\n enableLongTask,\n _experiments: { enableInteractions },\n beforeStartSpan,\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n markBackgroundSpan,\n traceFetch,\n traceXHR,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n instrumentPageLoad,\n instrumentNavigation,\n } = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n const _collectWebVitals = startTrackingWebVitals();\n\n if (enableInp) {\n startTrackingINP();\n }\n\n if (enableLongTask) {\n startTrackingLongTasks();\n }\n if (enableInteractions) {\n startTrackingInteractions();\n }\n\n const latestRoute: { name: string | undefined; source: TransactionSource | undefined } = {\n name: undefined,\n source: undefined,\n };\n\n /** Create routing idle transaction. */\n function _createRouteSpan(client: Client, startSpanOptions: StartSpanOptions): Span {\n const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n const finalStartSpanOptions: StartSpanOptions = beforeStartSpan\n ? beforeStartSpan(startSpanOptions)\n : startSpanOptions;\n\n const attributes = finalStartSpanOptions.attributes || {};\n\n // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n if (startSpanOptions.name !== finalStartSpanOptions.name) {\n attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n finalStartSpanOptions.attributes = attributes;\n }\n\n latestRoute.name = finalStartSpanOptions.name;\n latestRoute.source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n const idleSpan = startIdleSpan(finalStartSpanOptions, {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n // should wait for finish signal if it's a pageload transaction\n disableAutoFinish: isPageloadTransaction,\n beforeSpanEnd: span => {\n _collectWebVitals();\n addPerformanceEntries(span);\n },\n });\n\n function emitFinish(): void {\n if (['interactive', 'complete'].includes(WINDOW.document.readyState)) {\n client.emit('idleSpanEnableAutoFinish', idleSpan);\n }\n }\n\n if (isPageloadTransaction && WINDOW.document) {\n WINDOW.document.addEventListener('readystatechange', () => {\n emitFinish();\n });\n\n emitFinish();\n }\n\n return idleSpan;\n }\n\n return {\n name: BROWSER_TRACING_INTEGRATION_ID,\n afterAllSetup(client) {\n let activeSpan: Span | undefined;\n let startingUrl: string | undefined = WINDOW.location && WINDOW.location.href;\n\n client.on('startNavigationSpan', startSpanOptions => {\n if (getClient() !== client) {\n return;\n }\n\n if (activeSpan) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeSpan.end();\n }\n activeSpan = _createRouteSpan(client, {\n op: 'navigation',\n ...startSpanOptions,\n });\n });\n\n client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n if (getClient() !== client) {\n return;\n }\n\n if (activeSpan) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current root span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeSpan.end();\n }\n\n const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n const propagationContext = propagationContextFromHeaders(sentryTrace, baggage);\n getCurrentScope().setPropagationContext(propagationContext);\n\n activeSpan = _createRouteSpan(client, {\n op: 'pageload',\n ...startSpanOptions,\n });\n });\n\n // A trace should to stay the consistent over the entire time span of one route.\n // Therefore, when the initial pageload or navigation root span ends, we update the\n // scope's propagation context to keep span-specific attributes like the `sampled` decision and\n // the dynamic sampling context valid, even after the root span has ended.\n // This ensures that the trace data is consistent for the entire duration of the route.\n client.on('spanEnd', span => {\n const op = spanToJSON(span).op;\n if (span !== getRootSpan(span) || (op !== 'navigation' && op !== 'pageload')) {\n return;\n }\n\n const scope = getCurrentScope();\n const oldPropagationContext = scope.getPropagationContext();\n\n scope.setPropagationContext({\n ...oldPropagationContext,\n sampled: oldPropagationContext.sampled !== undefined ? oldPropagationContext.sampled : spanIsSampled(span),\n dsc: oldPropagationContext.dsc || getDynamicSamplingContextFromSpan(span),\n });\n });\n\n if (WINDOW.location) {\n if (instrumentPageLoad) {\n startBrowserTracingPageLoadSpan(client, {\n name: WINDOW.location.pathname,\n // pageload should always start at timeOrigin (and needs to be in s, not ms)\n startTime: browserPerformanceTimeOrigin ? browserPerformanceTimeOrigin / 1000 : undefined,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n },\n });\n }\n\n if (instrumentNavigation) {\n addHistoryInstrumentationHandler(({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n startBrowserTracingNavigationSpan(client, {\n name: WINDOW.location.pathname,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n },\n });\n }\n });\n }\n }\n\n if (markBackgroundSpan) {\n registerBackgroundTabDetection();\n }\n\n if (enableInteractions) {\n registerInteractionListener(idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracePropagationTargets: client.getOptions().tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the tags.\n */\nexport function startBrowserTracingPageLoadSpan(\n client: Client,\n spanOptions: StartSpanOptions,\n traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n): Span | undefined {\n client.emit('startPageLoadSpan', spanOptions, traceOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'pageload' ? span : undefined;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nexport function startBrowserTracingNavigationSpan(client: Client, spanOptions: StartSpanOptions): Span | undefined {\n getIsolationScope().setPropagationContext(generatePropagationContext());\n getCurrentScope().setPropagationContext(generatePropagationContext());\n\n client.emit('startNavigationSpan', spanOptions);\n\n getCurrentScope().setTransactionName(spanOptions.name);\n\n const span = getActiveSpan();\n const op = span && spanToJSON(span).op;\n return op === 'navigation' ? span : undefined;\n}\n\n/** Returns the value of a meta tag */\nexport function getMetaContent(metaName: string): string | undefined {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n idleTimeout: BrowserTracingOptions['idleTimeout'],\n finalTimeout: BrowserTracingOptions['finalTimeout'],\n childSpanTimeout: BrowserTracingOptions['childSpanTimeout'],\n latestRoute: { name: string | undefined; source: TransactionSource | undefined },\n): void {\n let inflightInteractionSpan: Span | undefined;\n const registerInteractionTransaction = (): void => {\n const op = 'ui.action.click';\n\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const currentRootSpanOp = spanToJSON(rootSpan).op;\n if (['navigation', 'pageload'].includes(currentRootSpanOp as string)) {\n DEBUG_BUILD &&\n logger.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n return undefined;\n }\n }\n\n if (inflightInteractionSpan) {\n inflightInteractionSpan.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n inflightInteractionSpan.end();\n inflightInteractionSpan = undefined;\n }\n\n if (!latestRoute.name) {\n DEBUG_BUILD && logger.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n return undefined;\n }\n\n inflightInteractionSpan = startIdleSpan(\n {\n name: latestRoute.name,\n op,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n },\n },\n {\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n },\n );\n };\n\n if (WINDOW.document) {\n addEventListener('click', registerInteractionTransaction, { once: false, capture: true });\n }\n}\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\nimport type { GenericFunction } from './types';\n\n/**\n * Polyfill for the optional chain operator, `?.`, given previous conversion of the expression into an array of values,\n * descriptors, and functions.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n * See https://github.com/alangpierce/sucrase/blob/265887868966917f3b924ce38dfad01fbab1329f/src/transformers/OptionalChainingNullishTransformer.ts#L15\n *\n * @param ops Array result of expression conversion\n * @returns The value of the expression\n */\nexport function _optionalChain(ops: unknown[]): unknown {\n let lastAccessLHS: unknown = undefined;\n let value = ops[0];\n let i = 1;\n while (i < ops.length) {\n const op = ops[i] as string;\n const fn = ops[i + 1] as (intermediateValue: unknown) => unknown;\n i += 2;\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n // really we're meaning to return `undefined` as an actual value here, but it saves bytes not to write it\n return;\n }\n if (op === 'access' || op === 'optionalAccess') {\n lastAccessLHS = value;\n value = fn(value);\n } else if (op === 'call' || op === 'optionalCall') {\n value = fn((...args: unknown[]) => (value as GenericFunction).call(lastAccessLHS, ...args));\n lastAccessLHS = undefined;\n }\n }\n return value;\n}\n\n// Sucrase version\n// function _optionalChain(ops) {\n// let lastAccessLHS = undefined;\n// let value = ops[0];\n// let i = 1;\n// while (i < ops.length) {\n// const op = ops[i];\n// const fn = ops[i + 1];\n// i += 2;\n// if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {\n// return undefined;\n// }\n// if (op === 'access' || op === 'optionalAccess') {\n// lastAccessLHS = value;\n// value = fn(value);\n// } else if (op === 'call' || op === 'optionalCall') {\n// value = fn((...args) => value.call(lastAccessLHS, ...args));\n// lastAccessLHS = undefined;\n// }\n// }\n// return value;\n// }\n","import type { Client, DsnComponents } from '@sentry/types';\n\n/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nexport function isSentryRequestUrl(url: string, client: Client | undefined): boolean {\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\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","/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\nimport { isBrowserBundle } from './env';\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function dynamicRequire(mod: any, request: string): any {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nexport function loadModule(moduleName: string): T | undefined {\n let mod: T | undefined;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;\n } catch (e) {\n // no-empty\n }\n\n return mod;\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","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 try {\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 catch {\r\n return false;\r\n }\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 if (el.tagName === 'INPUT') {\r\n const autocomplete = el.getAttribute('autocomplete');\r\n const disallowedAutocompleteValues = [\r\n 'current-password',\r\n 'new-password',\r\n 'cc-number',\r\n 'cc-exp',\r\n 'cc-exp-month',\r\n 'cc-exp-year',\r\n 'cc-csc',\r\n ];\r\n if (disallowedAutocompleteValues.includes(autocomplete)) {\r\n return true;\r\n }\r\n }\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, n.parentElement)\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 (attr.name && !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 whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n let currentStringChar = null;\r\n for (const char of input) {\r\n const hasStringEscape = currentSegment.endsWith('\\\\');\r\n if (currentStringChar) {\r\n if (currentStringChar === char && !hasStringEscape) {\r\n currentStringChar = null;\r\n }\r\n }\r\n else if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n else if ('\\'\"'.includes(char)) {\r\n currentStringChar = char;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\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 closestElementOfNode(node) {\r\n if (!node) {\r\n return null;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n return el;\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = closestElementOfNode(node);\r\n if (!el) {\r\n return false;\r\n }\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\nconst cachedImplementations = {};\r\nfunction getImplementation(name) {\r\n const cached = cachedImplementations[name];\r\n if (cached) {\r\n return cached;\r\n }\r\n const document = window.document;\r\n let impl = window[name];\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[name]) {\r\n impl =\r\n contentWindow[name];\r\n }\r\n document.head.removeChild(sandbox);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return (cachedImplementations[name] = impl.bind(window));\r\n}\r\nfunction onRequestAnimationFrame(...rest) {\r\n return getImplementation('requestAnimationFrame')(...rest);\r\n}\r\nfunction setTimeout(...rest) {\r\n return getImplementation('setTimeout')(...rest);\r\n}\r\nfunction clearTimeout(...rest) {\r\n return getImplementation('clearTimeout')(...rest);\r\n}\n\nexport { StyleSheetMirror, _mirror, clearTimeout, closestElementOfNode, 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, setTimeout, 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, closestElementOfNode, 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.attributeMap = new WeakMap();\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.attributeMap = new WeakMap();\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 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, closestElementOfNode(m.target))\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.attributeMap.get(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 this.attributeMap.set(m.target, 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 if (!this.unattachedDoc) {\r\n try {\r\n this.unattachedDoc =\r\n document.implementation.createHTMLDocument();\r\n }\r\n catch (e) {\r\n this.unattachedDoc = this.doc;\r\n }\r\n }\r\n const old = this.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, setTimeout, 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 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 { setTimeout, 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, registerErrorHandler } 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 snapshot() {\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, maxCanvasSize, recordCanvas, dataURLOptions, errorHandler, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n this.options = options;\r\n if (errorHandler) {\r\n registerErrorHandler(errorHandler);\r\n }\r\n if (options.enableManualSnapshot) {\r\n return;\r\n }\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, maxCanvasSize, {\r\n dataURLOptions,\r\n });\r\n })();\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, true);\r\n const rafId = this.takeSnapshot(false, fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, options.dataURLOptions);\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 snapshot(canvasElement) {\r\n const { options } = this;\r\n const rafId = this.takeSnapshot(true, options.sampling === 'all' ? 2 : options.sampling || 2, options.win, options.blockClass, options.blockSelector, options.unblockSelector, options.maxCanvasSize, options.dataURLOptions, canvasElement);\r\n this.resetObservers = () => {\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n takeSnapshot(isManualSnapshot, fps, win, blockClass, blockSelector, unblockSelector, maxCanvasSize, dataURLOptions, canvasElement) {\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 width,\r\n height,\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 = (canvasElement) => {\r\n if (canvasElement) {\r\n return [canvasElement];\r\n }\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(canvasElement).forEach((canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n if (!canvas.width || !canvas.height)\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (!isManualSnapshot &&\r\n ['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,\r\n maxCanvasSize,\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 return rafId;\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 } from './observers/canvas/canvas-manager.js';\nexport { 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\nlet wrappedEmit;\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, maxCanvasSize = null, 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 wrappedEmit = (r, isCheckout) => {\r\n const e = r;\r\n e.timestamp = nowTimestamp();\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 lastFullSnapshotEvent &&\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({\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({\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({\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({\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 mirror,\r\n win: window,\r\n mutationCb: (p) => wrappedEmit({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.CanvasMutation,\r\n ...p,\r\n },\r\n }),\r\n recordCanvas,\r\n blockClass,\r\n blockSelector,\r\n unblockSelector,\r\n maxCanvasSize,\r\n sampling: sampling['canvas'],\r\n dataURLOptions,\r\n errorHandler,\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({\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({\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({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n }),\r\n mouseInteractionCb: (d) => wrappedEmit({\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({\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({\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({\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({\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({\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({\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({\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({\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({\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({\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({\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({\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\nrecord.mirror = mirror;\r\nrecord.takeFullSnapshot = takeFullSnapshot;\r\nfunction _getCanvasManager(getCanvasManagerFn, options) {\r\n try {\r\n return getCanvasManagerFn\r\n ? getCanvasManagerFn(options)\r\n : new CanvasManagerNoop();\r\n }\r\n catch {\r\n console.warn('Unable to initialize CanvasManager');\r\n return new CanvasManagerNoop();\r\n }\r\n}\n\nexport { addCustomEvent, record as default, freezePage, 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 snapshot(): void;\n}\n\nexport interface CanvasManagerOptions {\n recordCanvas: boolean;\n enableManualSnapshot?: 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 mutationCb: (p: any) => void;\n win: typeof globalThis & Window;\n mirror: any;\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 { setTimeout } from '@sentry-internal/browser-utils';\nimport { 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 try {\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 catch {\r\n return false;\r\n }\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 if (el.tagName === 'INPUT') {\r\n const autocomplete = el.getAttribute('autocomplete');\r\n const disallowedAutocompleteValues = [\r\n 'current-password',\r\n 'new-password',\r\n 'cc-number',\r\n 'cc-exp',\r\n 'cc-exp-month',\r\n 'cc-exp-year',\r\n 'cc-csc',\r\n ];\r\n if (disallowedAutocompleteValues.includes(autocomplete)) {\r\n return true;\r\n }\r\n }\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, n.parentElement)\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 (attr.name && !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 whitespace();\r\n while (css[0] == '}') {\r\n error('extra closing bracket');\r\n css = css.slice(1);\r\n whitespace();\r\n }\r\n const m = match(/^((\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^{])+)/);\r\n if (!m) {\r\n return;\r\n }\r\n const cleanedInput = m[0]\r\n .trim()\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, (m) => {\r\n return m.replace(/,/g, '\\u200C');\r\n });\r\n return customSplit(cleanedInput).map((s) => s.replace(/\\u200C/g, ',').trim());\r\n }\r\n function customSplit(input) {\r\n const result = [];\r\n let currentSegment = '';\r\n let depthParentheses = 0;\r\n let depthBrackets = 0;\r\n let currentStringChar = null;\r\n for (const char of input) {\r\n const hasStringEscape = currentSegment.endsWith('\\\\');\r\n if (currentStringChar) {\r\n if (currentStringChar === char && !hasStringEscape) {\r\n currentStringChar = null;\r\n }\r\n }\r\n else if (char === '(') {\r\n depthParentheses++;\r\n }\r\n else if (char === ')') {\r\n depthParentheses--;\r\n }\r\n else if (char === '[') {\r\n depthBrackets++;\r\n }\r\n else if (char === ']') {\r\n depthBrackets--;\r\n }\r\n else if ('\\'\"'.includes(char)) {\r\n currentStringChar = char;\r\n }\r\n if (char === ',' && depthParentheses === 0 && depthBrackets === 0) {\r\n result.push(currentSegment);\r\n currentSegment = '';\r\n }\r\n else {\r\n currentSegment += char;\r\n }\r\n }\r\n if (currentSegment) {\r\n result.push(currentSegment);\r\n }\r\n return result;\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 if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n attributes['data-sentry-component'] = attributes['data-sentry-element'];\n }\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/browser-utils';\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;return{p:function(n){for(var r=t,e=0;e>>8;t=r},d:function(){return~t}}},L=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}}},O=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)},j=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},q=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&&j(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)}},B=function(t){return 10+(t.filename?t.filename.length+1:0)},G=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(O(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}();var H=function(){function t(t,n){this.c=L(),this.v=1,G.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),G.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=O(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=L();i.p(n.dictionary),j(t,2,i.d())}}(r,this.o),this.v=0),n&&j(r,r.length-4,this.c.d()),this.ondata(r,n)},t}(),J=\"undefined\"!=typeof TextEncoder&&new TextEncoder,K=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{K.decode(F,{stream:!0})}catch(t){}var N=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(P(t),this.d=n||!1)},t}();function P(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)}function Q(t){return function(t,n){n||(n={});var r=S(),e=t.length;r.p(t);var i=O(t,n,B(n),8),a=i.length;return q(i,n),j(i,a-8,r.d()),j(i,a-4,e),i}(P(t))}const R=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 N(((t,n)=>{this.deflate.push(t,n)})),this.stream.push(\"[\")}},V={clear:()=>{R.clear()},addEvent:t=>R.addEvent(t),finish:()=>R.finish(),compress:t=>Q(t)};addEventListener(\"message\",(function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in V&&\"function\"==typeof V[n])try{const t=V[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 { setTimeout } from '@sentry-internal/browser-utils';\nimport { 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 { setTimeout } from '@sentry-internal/browser-utils';\nimport type { ErrorEvent, Event, TransactionEvent, TransportMakeRequestResponse } from '@sentry/types';\n\nimport type { ReplayContainer } from '../types';\nimport { isErrorEvent, isTransactionEvent } from '../util/eventUtils';\n\ntype AfterSendEventCallback = (event: Event, sendResponse: TransportMakeRequestResponse) => void;\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nexport function handleAfterSendEvent(replay: ReplayContainer): AfterSendEventCallback {\n return (event: Event, sendResponse: TransportMakeRequestResponse) => {\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 (!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","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 // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n exceptionValue.match(\n /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n ) ||\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 { getClient } from '@sentry/core';\nimport type { Breadcrumb } 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\ntype BreadcrumbWithCategory = Required>;\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nexport function handleBreadcrumbs(replay: ReplayContainer): void {\n const client = getClient();\n\n if (!client) {\n return;\n }\n\n client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay: ReplayContainer, breadcrumb: Breadcrumb): void {\n if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n return;\n }\n\n const result = normalizeBreadcrumb(breadcrumb);\n if (result) {\n addBreadcrumbEvent(replay, result);\n }\n}\n\n/** Exported only for tests. */\nexport function normalizeBreadcrumb(breadcrumb: Breadcrumb): Breadcrumb | null {\n if (\n !isBreadcrumbWithCategory(breadcrumb) ||\n [\n // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n 'fetch',\n 'xhr',\n // These two are breadcrumbs for emitted sentry events, we don't care about them\n 'sentry.event',\n 'sentry.transaction',\n ].includes(breadcrumb.category) ||\n // We capture UI breadcrumbs separately\n breadcrumb.category.startsWith('ui.')\n ) {\n return null;\n }\n\n if (breadcrumb.category === 'console') {\n return normalizeConsoleBreadcrumb(breadcrumb);\n }\n\n return createBreadcrumb(breadcrumb);\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\nfunction isBreadcrumbWithCategory(breadcrumb: Breadcrumb): breadcrumb is BreadcrumbWithCategory {\n return !!breadcrumb.category;\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 { 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(replay: ReplayContainer): (event: Event, hint: EventHint) => Event | null {\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 return event;\n },\n { id: 'Replay' },\n );\n}\n","import { EventType } from '@sentry-internal/rrweb';\nimport type { FeedbackEvent } from '@sentry/types';\n\nimport type { ReplayBreadcrumbFrameEvent, 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 tag: 'breadcrumb',\n payload: {\n timestamp: event.timestamp,\n type: 'default',\n category: 'sentry.feedback',\n data: {\n feedbackId: event.event_id,\n },\n },\n },\n } as ReplayBreadcrumbFrameEvent);\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 { 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(body: RequestInit['body']): number | undefined {\n if (!body) {\n return undefined;\n }\n\n const textEncoder = new TextEncoder();\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 { setTimeout } from '@sentry-internal/browser-utils';\nimport type { Breadcrumb, FetchBreadcrumbData } 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 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): void {\n const { input, response } = hint;\n\n const body = input ? _getFetchRequestArgBody(input) : undefined;\n const reqSize = getBodySize(body);\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): 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 networkResponseHeaders,\n }: Pick,\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\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 responseBodySize,\n captureDetails,\n headers,\n }: {\n captureDetails: boolean;\n networkCaptureBodies: boolean;\n responseBodySize: number | undefined;\n headers: Record;\n },\n): ReplayNetworkRequestOrResponse | undefined {\n try {\n const size =\n bodyText && bodyText.length && responseBodySize === undefined ? getBodySize(bodyText) : 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 { SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport type { Breadcrumb, XhrBreadcrumbData } from '@sentry/types';\nimport { 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): void {\n const { xhr, input } = hint;\n\n if (!xhr) {\n return;\n }\n\n const reqSize = getBodySize(input);\n const resSize = xhr.getResponseHeader('content-length')\n ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n : _getBodySize(xhr.response, xhr.responseType);\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): number | undefined {\n try {\n const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n return getBodySize(bodyStr);\n } catch {\n return undefined;\n }\n}\n","import { getClient } from '@sentry/core';\nimport type { Breadcrumb, BreadcrumbHint, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport type { FetchHint, ReplayContainer, ReplayNetworkOptions, XhrHint } from '../types';\nimport { captureFetchBreadcrumbToReplay, enrichFetchBreadcrumb } from './util/fetchUtils';\nimport { captureXhrBreadcrumbToReplay, enrichXhrBreadcrumb } from './util/xhrUtils';\n\ninterface ExtendedNetworkBreadcrumbsOptions extends ReplayNetworkOptions {\n replay: ReplayContainer;\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 {\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n } = replay.getOptions();\n\n const options: ExtendedNetworkBreadcrumbsOptions = {\n replay,\n networkDetailAllowUrls,\n networkDetailDenyUrls,\n networkCaptureBodies,\n networkRequestHeaders,\n networkResponseHeaders,\n };\n\n if (client) {\n client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\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);\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);\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 {\n addClickKeypressInstrumentationHandler,\n addHistoryInstrumentationHandler,\n} from '@sentry-internal/browser-utils';\nimport { addEventProcessor, getClient } from '@sentry/core';\nimport type { DynamicSamplingContext } from '@sentry/types';\n\nimport { handleAfterSendEvent } from '../coreHandlers/handleAfterSendEvent';\nimport { handleBeforeSendEvent } from '../coreHandlers/handleBeforeSendEvent';\nimport { handleBreadcrumbs } from '../coreHandlers/handleBreadcrumbs';\nimport { handleDomListener } from '../coreHandlers/handleDom';\nimport { handleGlobalEventListener } from '../coreHandlers/handleGlobalEvent';\nimport { handleHistorySpanListener } from '../coreHandlers/handleHistory';\nimport { handleNetworkBreadcrumbs } from '../coreHandlers/handleNetworkBreadcrumbs';\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 client = getClient();\n\n addClickKeypressInstrumentationHandler(handleDomListener(replay));\n addHistoryInstrumentationHandler(handleHistorySpanListener(replay));\n handleBreadcrumbs(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);\n addEventProcessor(eventProcessor);\n\n // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n if (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('spanStart', span => {\n replay.lastActiveSpan = span;\n });\n\n // We may be missing the initial spanStart due to timing issues,\n // so we capture it on finish again.\n client.on('spanEnd', span => {\n replay.lastActiveSpan = span;\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 if (feedbackEvent.contexts && feedbackEvent.contexts.feedback) {\n feedbackEvent.contexts.feedback.replay_id = replayId;\n }\n }\n });\n }\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 shouldRecordCanvas: replay.isRecordingCanvas(),\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 { resolvedSyncPromise } 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 resolvedSyncPromise({});\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 resolvedSyncPromise({});\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: 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 // 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 { IntegrationIndex } from '@sentry/core';\nimport { getIsolationScope, prepareEvent } from '@sentry/core';\nimport type { Client, EventHint, ReplayEvent, Scope } 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 client.emit('preprocessEvent', event, eventHint);\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();\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 { setTimeout } from '@sentry-internal/browser-utils';\nimport { 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 getActiveSpan,\n getClient,\n getRootSpan,\n spanToJSON,\n} from '@sentry/core';\nimport type { ReplayRecordingMode, Span } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport {\n BUFFER_CHECKOUT_TIME,\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';\n\nimport type {\n AddEventResult,\n AddUpdateCallback,\n AllPerformanceEntry,\n AllPerformanceEntryData,\n EventBuffer,\n InternalEventContext,\n PopEventContext,\n RecordingEvent,\n RecordingOptions,\n ReplayBreadcrumbFrame,\n ReplayCanvasIntegrationOptions,\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 span.\n * This is only available when performance is enabled.\n */\n public lastActiveSpan?: Span;\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 /**\n * Internal use for canvas recording options\n */\n private _canvas: ReplayCanvasIntegrationOptions | undefined;\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 /**\n * Determine if canvas recording is enabled\n */\n public isRecordingCanvas(): boolean {\n return Boolean(this._canvas);\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 // Required as user activity is initially set in\n // constructor, so if `start()` is called after\n // session idle expiration, a replay will not be\n // created due to an idle timeout.\n this._updateUserActivity();\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 canvasOptions = this._canvas;\n\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 ...(canvasOptions\n ? {\n recordCanvas: canvasOptions.recordCanvas,\n getCanvasManager: canvasOptions.getCanvasManager,\n sampling: canvasOptions.sampling,\n dataURLOptions: canvasOptions.dataURLOptions,\n }\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 const lastActiveSpan = this.lastActiveSpan || getActiveSpan();\n const lastRootSpan = lastActiveSpan && getRootSpan(lastActiveSpan);\n\n const attributes = (lastRootSpan && spanToJSON(lastRootSpan).data) || {};\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n return undefined;\n }\n\n return spanToJSON(lastRootSpan).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","import { setTimeout } from '@sentry-internal/browser-utils';\n\ntype 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 type { ReplayIntegrationPrivacyOptions } from '../types';\n\ntype GetPrivacyOptions = Required>;\n\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(selectors: string[], defaultSelectors: string[]): string {\n return [\n ...selectors,\n // sentry defaults\n ...defaultSelectors,\n ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nexport function getPrivacyOptions({ mask, unmask, block, unblock, ignore }: GetPrivacyOptions): GetPrivacyReturn {\n const defaultBlockedElements = ['base[href=\"/\"]'];\n\n const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n const unmaskSelector = getOption(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(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n unblockSelector: getOption(unblock, []),\n ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n };\n\n return options;\n}\n","import { getClient, parseSampleRate } from '@sentry/core';\nimport type { BrowserClientReplayOptions, Integration, IntegrationFn } 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 {\n InitialReplayPluginOptions,\n RecordingOptions,\n ReplayCanvasIntegrationOptions,\n ReplayConfiguration,\n ReplayPluginOptions,\n SendBufferedReplayOptions,\n} 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\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n * dsn: '__DSN__',\n * integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nexport const replayIntegration = ((options?: ReplayConfiguration) => {\n return new Replay(options);\n}) satisfies IntegrationFn;\n\n/**\n * Replay integration\n *\n * TODO: Rewrite this to be functional integration\n * Exported for tests.\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 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 }: ReplayConfiguration = {}) {\n this.name = Replay.id;\n\n const privacyOptions = getPrivacyOptions({\n mask,\n unmask,\n block,\n unblock,\n ignore,\n });\n\n this._recordingOptions = {\n maskAllInputs,\n maskAllText,\n 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 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 (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 /**\n * Initializes replay.\n */\n protected _initialize(): void {\n if (!this._replay) {\n return;\n }\n\n // We have to run this in _initialize, because this runs in setTimeout\n // So when this runs all integrations have been added\n // Before this, we cannot access integrations on the client,\n // so we need to mutate the options here\n this._maybeLoadFromReplayCanvasIntegration();\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 /** Get canvas options from ReplayCanvas integration, if it is also added. */\n private _maybeLoadFromReplayCanvasIntegration(): void {\n // To save bundle size, we skip checking for stuff here\n // and instead just try-catch everything - as generally this should all be defined\n /* eslint-disable @typescript-eslint/no-non-null-assertion */\n try {\n const client = getClient()!;\n const canvasIntegration = client.getIntegrationByName('ReplayCanvas') as Integration & {\n getOptions(): ReplayCanvasIntegrationOptions;\n };\n if (!canvasIntegration) {\n return;\n }\n\n this._replay!['_canvas'] = canvasIntegration.getOptions();\n } catch {\n // ignore errors here\n }\n /* eslint-enable @typescript-eslint/no-non-null-assertion */\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: ReplayPluginOptions = {\n sessionSampleRate: 0,\n errorSampleRate: 0,\n ...dropUndefinedKeys(initialOptions),\n };\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 const replaysSessionSampleRate = parseSampleRate(opt.replaysSessionSampleRate);\n const replaysOnErrorSampleRate = parseSampleRate(opt.replaysOnErrorSampleRate);\n\n if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\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 (replaysSessionSampleRate != null) {\n finalOptions.sessionSampleRate = replaysSessionSampleRate;\n }\n\n if (replaysOnErrorSampleRate != null) {\n finalOptions.errorSampleRate = 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 * as Sentry from \"@sentry/react\";\n\nSentry.init({\n dsn: \"https://23c513e1b7c81dbb482b45e498bcc150@o4505771582750720.ingest.us.sentry.io/4507363378790400\",\n integrations: [\n Sentry.browserTracingIntegration(),\n Sentry.replayIntegration(),\n ],\n // Performance Monitoring\n tracesSampleRate: 1.0, // Capture 100% of the transactions\n // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled\n // tracePropagationTargets: [\"localhost\", /^https:\\/\\/studie.aussprachetrainer\\.org\\/api/],\n // Session Replay\n replaysSessionSampleRate: 1.0, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production.\n replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur.\n});","import { SPAN_STATUS_ERROR, getActiveSpan, getRootSpan } from '@sentry/core';\nimport { spanToJSON } from '@sentry/core';\nimport { logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { WINDOW } from '../helpers';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nexport function registerBackgroundTabDetection(): void {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n const activeSpan = getActiveSpan();\n if (!activeSpan) {\n return;\n }\n\n const rootSpan = getRootSpan(activeSpan);\n\n if (WINDOW.document.hidden && rootSpan) {\n const cancelledStatus = 'cancelled';\n\n const { op, status } = spanToJSON(rootSpan);\n\n if (DEBUG_BUILD) {\n logger.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n }\n\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!status) {\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message: cancelledStatus });\n }\n\n rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n rootSpan.end();\n }\n });\n } else {\n DEBUG_BUILD && logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n reloadDocument?: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (args: LoaderFunctionArgs):\n | Promise\n | DataFunctionValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs):\n | Promise\n | DataFunctionValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: number[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(branches[i], decoded);\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nfunction decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === matches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n ActionFunction,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n AgnosticRouteObject,\n DataResult,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n ImmutableRouteKey,\n LoaderFunction,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized: boolean;\n let hasLazyRoutes = initialMatches.some((m) => m.route.lazy);\n let hasLoaders = initialMatches.some((m) => m.route.loader);\n if (hasLazyRoutes) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!hasLoaders) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) return true;\n // Explicitly opting-in to running on hydration\n if (m.route.loader.hydrate === true) return false;\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(routesToUse);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace, flushSync }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionData,\n pendingError\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n if (\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration)\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(state, redirect.result, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action && !match.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(state, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n { [match.route.id]: actionResult.data },\n undefined // No need to send through errors since we short circuit above\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(state, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(state, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(state.location, redirect.location, {\n _isRedirect: true,\n });\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.reloadDocument) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(redirect.location)) {\n const url = init.history.createURL(redirect.location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(redirect.location);\n } else {\n routerWindow.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n )\n ),\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n return callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, f.controller.signal),\n f.match,\n f.matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath\n );\n } else {\n let error: ErrorResult = {\n type: ResultType.error,\n error: getInternalRouterError(404, { pathname: f.path }),\n };\n return error;\n }\n }),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n manifest,\n mapRouteProperties,\n basename,\n future.v7_relativeSplatPath,\n { isStaticRequest: true, isRouteRequest, requestContext }\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.includes(key)) {\n // Always revalidate if the fetcher was cancelled\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate: isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n basename: string,\n v7_relativeSplatPath: boolean,\n opts: {\n isStaticRequest?: boolean;\n isRouteRequest?: boolean;\n requestContext?: unknown;\n } = {}\n): Promise {\n let resultType;\n let result;\n let onReject: (() => void) | undefined;\n\n let runHandler = (handler: ActionFunction | LoaderFunction) => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n return Promise.race([\n handler({\n request,\n params: match.params,\n context: opts.requestContext,\n }),\n abortPromise,\n ]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let values = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError) {\n throw handlerError;\n }\n result = values[0];\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still run even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, data: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n location = normalizeTo(\n new URL(request.url),\n matches.slice(0, matches.indexOf(match) + 1),\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n } else if (!opts.isStaticRequest) {\n // Strip off the protocol+origin for same-origin + same-basename absolute\n // redirects. If this is a static request, we can let it go back to the\n // browser as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (opts.isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n reloadDocument: result.headers.get(\"X-Remix-Reload-Document\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (opts.isRouteRequest) {\n let queryRouteResponse: QueryRouteResponse = {\n type:\n resultType === ResultType.error ? ResultType.error : ResultType.data,\n response: result,\n };\n throw queryRouteResponse;\n }\n\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponseImpl(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || obj.type === ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a