{"version":3,"file":"js/4217-30bec66f2017df9bceb3.js","mappings":"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","sources":["webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/client.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/debug-build.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/helpers.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/reportingobserver.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/httpclient.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/contextlines.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/feedbackAsync.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/feedbackSync.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/metrics.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/transports/offline.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/profiling/utils.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/profiling/startProfileForSpan.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/profiling/integration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/spotlight.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/utils/featureFlags.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/featureFlagsIntegration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/openfeature/integration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/sdk.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/tracing/request.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","webpack://artfully-walls/./node_modules/@sentry/browser/build/npm/esm/userfeedback.js"],"sourcesContent":["import { BaseClient, getSDKSource, applySdkMetadata, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/core Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const 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 eventFromException(exception, hint) {\n return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n }\n\n /**\n * @inheritDoc\n */\n eventFromMessage(\n message,\n level = 'info',\n hint,\n ) {\n return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n }\n\n /**\n * Sends user feedback to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\n captureUserFeedback(feedback) {\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture user feedback.');\n return;\n }\n\n const envelope = createUserFeedbackEnvelope(feedback, {\n metadata: this.getSdkMetadata(),\n dsn: this.getDsn(),\n tunnel: this.getOptions().tunnel,\n });\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, getClient, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/core';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception = {\n type: extractType(ex),\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\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 } ,\n ],\n },\n extra,\n } ;\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const 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) {\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) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception) {\n // Check for support\n // @ts-expect-error - WebAssembly.Exception is a valid class\n if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n // @ts-expect-error - WebAssembly.Exception is a valid class\n return exception instanceof WebAssembly.Exception;\n } else {\n return false;\n }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nfunction extractType(ex) {\n const name = ex && ex.name;\n\n // The name for WebAssembly.Exception Errors needs to be extracted differently.\n // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n if (!name && isWebAssemblyException(ex)) {\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n }\n\n return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n const message = ex && ex.message;\n\n if (!message) {\n return 'No error message';\n }\n\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n\n // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n if (isWebAssemblyException(ex) && Array.isArray(ex.message) && ex.message.length == 2) {\n return ex.message[1];\n }\n\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n stackParser,\n message,\n level = 'info',\n hint,\n attachStacktrace,\n) {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n stackParser,\n exception,\n syntheticException,\n attachStacktrace,\n isUnhandledRejection,\n) {\n let event;\n\n if (isErrorEvent(exception ) && (exception ).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception ;\n return eventFromError(stackParser, errorEvent.error );\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception) || isDOMException(exception )) {\n const domException = exception ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n // eslint-disable-next-line deprecation/deprecation\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception ;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\nfunction eventFromString(\n stackParser,\n message,\n syntheticException,\n attachStacktrace,\n) {\n const event = {};\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: message, stacktrace: { frames } }],\n };\n }\n addExceptionMechanism(event, { synthetic: true });\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n exception,\n { isUnhandledRejection },\n) {\n const keys = extractExceptionKeysForMessage(exception);\n const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n }\n\n if (isEvent(exception)) {\n const className = getObjectClassName(exception);\n return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n }\n\n return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n try {\n const prototype = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\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\nexport { eventFromException, eventFromMessage, eventFromUnknownInput, exceptionFromError, extractMessage, extractType };\n//# sourceMappingURL=eventbuilder.js.map\n","import { GLOBAL_OBJ, getOriginalFunction, markFunctionWrapped, addNonEnumerableProperty, withScope, addExceptionTypeValue, addExceptionMechanism, captureException } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError++;\n setTimeout(() => {\n ignoreOnError--;\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n fn,\n options\n\n = {},\n) {\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 function isFunction(fn) {\n return typeof fn === 'function';\n }\n\n if (!isFunction(fn)) {\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 if (typeof wrapper === 'function') {\n return wrapper;\n } else {\n // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n // that something messed with it. In that case we want to return the originally passed function.\n return fn;\n }\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 // Wrap the function itself\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n const sentryWrapped = function ( ...args) {\n try {\n // Also wrap arguments that are themselves functions\n const wrappedArguments = args.map(arg => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope(scope => {\n scope.addEventProcessor(event => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n } ;\n\n // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\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 (e2) {\n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n }\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n } catch (e3) {\n // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n // to save some bytes we simply try-catch this\n }\n\n return sentryWrapped;\n}\n\nexport { WINDOW, ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { getClient, SDK_VERSION } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n// This is a map of integration function method to bundle file name.\nconst LazyLoadableIntegrations = {\n replayIntegration: 'replay',\n replayCanvasIntegration: 'replay-canvas',\n feedbackIntegration: 'feedback',\n feedbackModalIntegration: 'feedback-modal',\n feedbackScreenshotIntegration: 'feedback-screenshot',\n captureConsoleIntegration: 'captureconsole',\n contextLinesIntegration: 'contextlines',\n linkedErrorsIntegration: 'linkederrors',\n debugIntegration: 'debug',\n dedupeIntegration: 'dedupe',\n extraErrorDataIntegration: 'extraerrordata',\n httpClientIntegration: 'httpclient',\n reportingObserverIntegration: 'reportingobserver',\n rewriteFramesIntegration: 'rewriteframes',\n sessionTimingIntegration: 'sessiontiming',\n browserProfilingIntegration: 'browserprofiling',\n moduleMetadataIntegration: 'modulemetadata',\n} ;\n\nconst WindowWithMaybeIntegration = WINDOW\n\n;\n\n/**\n * Lazy load an integration from the CDN.\n * Rejects if the integration cannot be loaded.\n */\nasync function lazyLoadIntegration(\n name,\n scriptNonce,\n) {\n const bundle = LazyLoadableIntegrations[name];\n\n // `window.Sentry` is only set when using a CDN bundle, but this method can also be used via the NPM package\n const sentryOnWindow = (WindowWithMaybeIntegration.Sentry = WindowWithMaybeIntegration.Sentry || {});\n\n if (!bundle) {\n throw new Error(`Cannot lazy load integration: ${name}`);\n }\n\n // Bail if the integration already exists\n const existing = sentryOnWindow[name];\n // The `feedbackIntegration` is loaded by default in the CDN bundles,\n // so we need to differentiate between the real integration and the shim.\n // if only the shim exists, we still want to lazy load the real integration.\n if (typeof existing === 'function' && !('_isShim' in existing)) {\n return existing;\n }\n\n const url = getScriptURL(bundle);\n const script = WINDOW.document.createElement('script');\n script.src = url;\n script.crossOrigin = 'anonymous';\n script.referrerPolicy = 'origin';\n\n if (scriptNonce) {\n script.setAttribute('nonce', scriptNonce);\n }\n\n const waitForLoad = new Promise((resolve, reject) => {\n script.addEventListener('load', () => resolve());\n script.addEventListener('error', reject);\n });\n\n const currentScript = WINDOW.document.currentScript;\n const parent = WINDOW.document.body || WINDOW.document.head || (currentScript && currentScript.parentElement);\n\n if (parent) {\n parent.appendChild(script);\n } else {\n throw new Error(`Could not find parent element to insert lazy-loaded ${name} script`);\n }\n\n try {\n await waitForLoad;\n } catch (e) {\n throw new Error(`Error when loading integration: ${name}`);\n }\n\n const integrationFn = sentryOnWindow[name];\n\n if (typeof integrationFn !== 'function') {\n throw new Error(`Could not load integration: ${name}`);\n }\n\n return integrationFn;\n}\n\nfunction getScriptURL(bundle) {\n const client = getClient();\n const options = client && client.getOptions();\n const baseURL = (options && options.cdnBaseUrl) || 'https://browser.sentry-cdn.com';\n\n return new URL(`/${SDK_VERSION}/${bundle}.min.js`, baseURL).toString();\n}\n\nexport { lazyLoadIntegration };\n//# sourceMappingURL=lazyLoadIntegration.js.map\n","import { defineIntegration, supportsReportingObserver, GLOBAL_OBJ, getClient, withScope, captureMessage } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst INTEGRATION_NAME = 'ReportingObserver';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _reportingObserverIntegration = ((options = {}) => {\n const types = options.types || ['crash', 'deprecation', 'intervention'];\n\n /** Handler for the reporting observer. */\n function handler(reports) {\n if (!SETUP_CLIENTS.has(getClient() )) {\n return;\n }\n\n for (const report of reports) {\n withScope(scope => {\n scope.setExtra('url', report.url);\n\n const label = `ReportingObserver [${report.type}]`;\n let details = 'No details available';\n\n if (report.body) {\n // Object.keys doesn't work on ReportBody, as all properties are inherited\n const plainBody\n\n = {};\n\n // eslint-disable-next-line guard-for-in\n for (const prop in report.body) {\n plainBody[prop] = report.body[prop];\n }\n\n scope.setExtra('body', plainBody);\n\n if (report.type === 'crash') {\n const body = report.body ;\n // A fancy way to create a message out of crashId OR reason OR both OR fallback\n details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n } else {\n const body = report.body ;\n details = body.message || details;\n }\n }\n\n captureMessage(`${label}: ${details}`);\n });\n }\n }\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n if (!supportsReportingObserver()) {\n return;\n }\n\n const observer = new (WINDOW ).ReportingObserver(\n handler,\n {\n buffered: true,\n types,\n },\n );\n\n observer.observe();\n },\n\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) ;\n\n/**\n * Reporting API integration - https://w3c.github.io/reporting/\n */\nconst reportingObserverIntegration = defineIntegration(_reportingObserverIntegration);\n\nexport { reportingObserverIntegration };\n//# sourceMappingURL=reportingobserver.js.map\n","import { addXhrInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, supportsNativeFetch, addFetchInstrumentationHandler, getClient, GLOBAL_OBJ, logger, captureEvent, isSentryRequestUrl, addExceptionMechanism } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'HttpClient';\n\nconst _httpClientIntegration = ((options = {}) => {\n const _options = {\n failedRequestStatusCodes: [[500, 599]],\n failedRequestTargets: [/.*/],\n ...options,\n };\n\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n _wrapFetch(client, _options);\n _wrapXHR(client, _options);\n },\n };\n}) ;\n\n/**\n * Create events for failed client side HTTP requests.\n */\nconst httpClientIntegration = defineIntegration(_httpClientIntegration);\n\n/**\n * Interceptor function for fetch requests\n *\n * @param requestInfo The Fetch API request info\n * @param response The Fetch API response\n * @param requestInit The request init object\n */\nfunction _fetchResponseHandler(\n options,\n requestInfo,\n response,\n requestInit,\n error,\n) {\n if (_shouldCaptureResponse(options, response.status, response.url)) {\n const request = _getRequest(requestInfo, requestInit);\n\n let requestHeaders, responseHeaders, requestCookies, responseCookies;\n\n if (_shouldSendDefaultPii()) {\n [requestHeaders, requestCookies] = _parseCookieHeaders('Cookie', request);\n [responseHeaders, responseCookies] = _parseCookieHeaders('Set-Cookie', response);\n }\n\n const event = _createEvent({\n url: request.url,\n method: request.method,\n status: response.status,\n requestHeaders,\n responseHeaders,\n requestCookies,\n responseCookies,\n error,\n });\n\n captureEvent(event);\n }\n}\n\nfunction _parseCookieHeaders(\n cookieHeader,\n obj,\n) {\n const headers = _extractFetchHeaders(obj.headers);\n let cookies;\n\n try {\n const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || undefined;\n\n if (cookieString) {\n cookies = _parseCookieString(cookieString);\n }\n } catch (e2) {\n // ignore it if parsing fails\n }\n\n return [headers, cookies];\n}\n\n/**\n * Interceptor function for XHR requests\n *\n * @param xhr The XHR request\n * @param method The HTTP method\n * @param headers The HTTP headers\n */\nfunction _xhrResponseHandler(\n options,\n xhr,\n method,\n headers,\n error,\n) {\n if (_shouldCaptureResponse(options, xhr.status, xhr.responseURL)) {\n let requestHeaders, responseCookies, responseHeaders;\n\n if (_shouldSendDefaultPii()) {\n try {\n const cookieString = xhr.getResponseHeader('Set-Cookie') || xhr.getResponseHeader('set-cookie') || undefined;\n\n if (cookieString) {\n responseCookies = _parseCookieString(cookieString);\n }\n } catch (e3) {\n // ignore it if parsing fails\n }\n\n try {\n responseHeaders = _getXHRResponseHeaders(xhr);\n } catch (e4) {\n // ignore it if parsing fails\n }\n\n requestHeaders = headers;\n }\n\n const event = _createEvent({\n url: xhr.responseURL,\n method,\n status: xhr.status,\n requestHeaders,\n // Can't access request cookies from XHR\n responseHeaders,\n responseCookies,\n error,\n });\n\n captureEvent(event);\n }\n}\n\n/**\n * Extracts response size from `Content-Length` header when possible\n *\n * @param headers\n * @returns The response size in bytes or undefined\n */\nfunction _getResponseSizeFromHeaders(headers) {\n if (headers) {\n const contentLength = headers['Content-Length'] || headers['content-length'];\n\n if (contentLength) {\n return parseInt(contentLength, 10);\n }\n }\n\n return undefined;\n}\n\n/**\n * Creates an object containing cookies from the given cookie string\n *\n * @param cookieString The cookie string to parse\n * @returns The parsed cookies\n */\nfunction _parseCookieString(cookieString) {\n return cookieString.split('; ').reduce((acc, cookie) => {\n const [key, value] = cookie.split('=');\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Extracts the headers as an object from the given Fetch API request or response object\n *\n * @param headers The headers to extract\n * @returns The extracted headers as an object\n */\nfunction _extractFetchHeaders(headers) {\n const result = {};\n\n headers.forEach((value, key) => {\n result[key] = value;\n });\n\n return result;\n}\n\n/**\n * Extracts the response headers as an object from the given XHR object\n *\n * @param xhr The XHR object to extract the response headers from\n * @returns The response headers as an object\n */\nfunction _getXHRResponseHeaders(xhr) {\n const headers = xhr.getAllResponseHeaders();\n\n if (!headers) {\n return {};\n }\n\n return headers.split('\\r\\n').reduce((acc, line) => {\n const [key, value] = line.split(': ');\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Checks if the given target url is in the given list of targets\n *\n * @param target The target url to check\n * @returns true if the target url is in the given list of targets, false otherwise\n */\nfunction _isInGivenRequestTargets(\n failedRequestTargets,\n target,\n) {\n return failedRequestTargets.some((givenRequestTarget) => {\n if (typeof givenRequestTarget === 'string') {\n return target.includes(givenRequestTarget);\n }\n\n return givenRequestTarget.test(target);\n });\n}\n\n/**\n * Checks if the given status code is in the given range\n *\n * @param status The status code to check\n * @returns true if the status code is in the given range, false otherwise\n */\nfunction _isInGivenStatusRanges(\n failedRequestStatusCodes,\n status,\n) {\n return failedRequestStatusCodes.some((range) => {\n if (typeof range === 'number') {\n return range === status;\n }\n\n return status >= range[0] && status <= range[1];\n });\n}\n\n/**\n * Wraps `fetch` function to capture request and response data\n */\nfunction _wrapFetch(client, options) {\n if (!supportsNativeFetch()) {\n return;\n }\n\n addFetchInstrumentationHandler(handlerData => {\n if (getClient() !== client) {\n return;\n }\n\n const { response, args, error, virtualError } = handlerData;\n const [requestInfo, requestInit] = args ;\n\n if (!response) {\n return;\n }\n\n _fetchResponseHandler(options, requestInfo, response , requestInit, error || virtualError);\n }, false);\n}\n\n/**\n * Wraps XMLHttpRequest to capture request and response data\n */\nfunction _wrapXHR(client, options) {\n if (!('XMLHttpRequest' in GLOBAL_OBJ)) {\n return;\n }\n\n addXhrInstrumentationHandler(handlerData => {\n if (getClient() !== client) {\n return;\n }\n\n const { error, virtualError } = handlerData;\n\n const xhr = handlerData.xhr ;\n\n const sentryXhrData = xhr[SENTRY_XHR_DATA_KEY];\n\n if (!sentryXhrData) {\n return;\n }\n\n const { method, request_headers: headers } = sentryXhrData;\n\n try {\n _xhrResponseHandler(options, xhr, method, headers, error || virtualError);\n } catch (e) {\n DEBUG_BUILD && logger.warn('Error while extracting response event form XHR response', e);\n }\n });\n}\n\n/**\n * Checks whether to capture given response as an event\n *\n * @param status response status code\n * @param url response url\n */\nfunction _shouldCaptureResponse(options, status, url) {\n return (\n _isInGivenStatusRanges(options.failedRequestStatusCodes, status) &&\n _isInGivenRequestTargets(options.failedRequestTargets, url) &&\n !isSentryRequestUrl(url, getClient())\n );\n}\n\n/**\n * Creates a synthetic Sentry event from given response data\n *\n * @param data response data\n * @returns event\n */\nfunction _createEvent(data\n\n) {\n const client = getClient();\n const virtualStackTrace = client && data.error && data.error instanceof Error ? data.error.stack : undefined;\n // Remove the first frame from the stack as it's the HttpClient call\n const stack = virtualStackTrace && client ? client.getOptions().stackParser(virtualStackTrace, 0, 1) : undefined;\n const message = `HTTP Client Error with status code: ${data.status}`;\n\n const event = {\n message,\n exception: {\n values: [\n {\n type: 'Error',\n value: message,\n stacktrace: stack ? { frames: stack } : undefined,\n },\n ],\n },\n request: {\n url: data.url,\n method: data.method,\n headers: data.requestHeaders,\n cookies: data.requestCookies,\n },\n contexts: {\n response: {\n status_code: data.status,\n headers: data.responseHeaders,\n cookies: data.responseCookies,\n body_size: _getResponseSizeFromHeaders(data.responseHeaders),\n },\n },\n };\n\n addExceptionMechanism(event, {\n type: 'http.client',\n handled: false,\n });\n\n return event;\n}\n\nfunction _getRequest(requestInfo, requestInit) {\n if (!requestInit && requestInfo instanceof Request) {\n return requestInfo;\n }\n\n // If both are set, we try to construct a new Request with the given arguments\n // However, if e.g. the original request has a `body`, this will throw an error because it was already accessed\n // In this case, as a fallback, we just use the original request - using both is rather an edge case\n if (requestInfo instanceof Request && requestInfo.bodyUsed) {\n return requestInfo;\n }\n\n return new Request(requestInfo, requestInit);\n}\n\nfunction _shouldSendDefaultPii() {\n const client = getClient();\n return client ? Boolean(client.getOptions().sendDefaultPii) : false;\n}\n\nexport { httpClientIntegration };\n//# sourceMappingURL=httpclient.js.map\n","import { defineIntegration, stripUrlQueryAndFragment, addContextToFrame, GLOBAL_OBJ } from '@sentry/core';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\nconst INTEGRATION_NAME = 'ContextLines';\n\nconst _contextLinesIntegration = ((options = {}) => {\n const contextLines = options.frameContextLines != null ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(event) {\n return addSourceContext(event, contextLines);\n },\n };\n}) ;\n\n/**\n * Collects source context lines around the lines of stackframes pointing to JS embedded in\n * the current page's HTML.\n *\n * This integration DOES NOT work for stack frames pointing to JS files that are loaded by the browser.\n * For frames pointing to files, context lines are added during ingestion and symbolication\n * by attempting to download the JS files to the Sentry backend.\n *\n * Use this integration if you have inline JS code in HTML pages that can't be accessed\n * by our backend (e.g. due to a login-protected page).\n */\nconst contextLinesIntegration = defineIntegration(_contextLinesIntegration);\n\n/**\n * Processes an event and adds context lines.\n */\nfunction addSourceContext(event, contextLines) {\n const doc = WINDOW.document;\n const htmlFilename = WINDOW.location && stripUrlQueryAndFragment(WINDOW.location.href);\n if (!doc || !htmlFilename) {\n return event;\n }\n\n const exceptions = event.exception && event.exception.values;\n if (!exceptions || !exceptions.length) {\n return event;\n }\n\n const html = doc.documentElement.innerHTML;\n if (!html) {\n return event;\n }\n\n const htmlLines = ['', '', ...html.split('\\n'), ''];\n\n exceptions.forEach(exception => {\n const stacktrace = exception.stacktrace;\n if (stacktrace && stacktrace.frames) {\n stacktrace.frames = stacktrace.frames.map(frame =>\n applySourceContextToFrame(frame, htmlLines, htmlFilename, contextLines),\n );\n }\n });\n\n return event;\n}\n\n/**\n * Only exported for testing\n */\nfunction applySourceContextToFrame(\n frame,\n htmlLines,\n htmlFilename,\n linesOfContext,\n) {\n if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) {\n return frame;\n }\n\n addContextToFrame(htmlLines, frame, linesOfContext);\n\n return frame;\n}\n\nexport { applySourceContextToFrame, contextLinesIntegration };\n//# sourceMappingURL=contextlines.js.map\n","import { buildFeedbackIntegration } from '@sentry-internal/feedback';\nimport { lazyLoadIntegration } from './utils/lazyLoadIntegration.js';\n\n/**\n * An integration to add user feedback to your application,\n * while loading most of the code lazily only when it's needed.\n */\nconst feedbackAsyncIntegration = buildFeedbackIntegration({\n lazyLoadIntegration,\n});\n\nexport { feedbackAsyncIntegration };\n//# sourceMappingURL=feedbackAsync.js.map\n","import { buildFeedbackIntegration, feedbackModalIntegration, feedbackScreenshotIntegration } from '@sentry-internal/feedback';\nimport { lazyLoadIntegration } from './utils/lazyLoadIntegration.js';\n\n/** Add a widget to capture user feedback to your application. */\nconst feedbackSyncIntegration = buildFeedbackIntegration({\n lazyLoadIntegration,\n getModalIntegration: () => feedbackModalIntegration,\n getScreenshotIntegration: () => feedbackScreenshotIntegration,\n});\n\nexport { feedbackSyncIntegration };\n//# sourceMappingURL=feedbackSync.js.map\n","import { metrics as metrics$1, BrowserMetricsAggregator } from '@sentry/core';\n\n/**\n * Adds a value to a counter metric\n *\n * @deprecated The Sentry metrics beta has ended. This method will be removed in a future release.\n */\nfunction increment(name, value = 1, data) {\n // eslint-disable-next-line deprecation/deprecation\n metrics$1.increment(BrowserMetricsAggregator, name, value, data);\n}\n\n/**\n * Adds a value to a distribution metric\n *\n * @deprecated The Sentry metrics beta has ended. This method will be removed in a future release.\n */\nfunction distribution(name, value, data) {\n // eslint-disable-next-line deprecation/deprecation\n metrics$1.distribution(BrowserMetricsAggregator, name, value, data);\n}\n\n/**\n * Adds a value to a set metric. Value must be a string or integer.\n *\n * @deprecated The Sentry metrics beta has ended. This method will be removed in a future release.\n */\nfunction set(name, value, data) {\n // eslint-disable-next-line deprecation/deprecation\n metrics$1.set(BrowserMetricsAggregator, name, value, data);\n}\n\n/**\n * Adds a value to a gauge metric\n *\n * @deprecated The Sentry metrics beta has ended. This method will be removed in a future release.\n */\nfunction gauge(name, value, data) {\n // eslint-disable-next-line deprecation/deprecation\n metrics$1.gauge(BrowserMetricsAggregator, name, value, data);\n}\n\n/**\n * Adds a timing metric.\n * The metric is added as a distribution metric.\n *\n * You can either directly capture a numeric `value`, or wrap a callback function in `timing`.\n * In the latter case, the duration of the callback execution will be captured as a span & a metric.\n *\n * @deprecated The Sentry metrics beta has ended. This method will be removed in a future release.\n */\n\nfunction timing(\n name,\n value,\n unit = 'second',\n data,\n) {\n // eslint-disable-next-line deprecation/deprecation\n return metrics$1.timing(BrowserMetricsAggregator, name, value, unit, data);\n}\n\n/**\n * The metrics API is used to capture custom metrics in Sentry.\n *\n * @deprecated The Sentry metrics beta has ended. This export will be removed in a future release.\n */\nconst metrics = {\n increment,\n distribution,\n set,\n gauge,\n timing,\n};\n\nexport { metrics };\n//# sourceMappingURL=metrics.js.map\n","import { makeOfflineTransport, serializeEnvelope, parseEnvelope } from '@sentry/core';\nimport { makeFetchTransport } from './fetch.js';\n\n// 'Store', 'promisifyRequest' and 'createStore' were originally copied from the 'idb-keyval' package before being\n// modified and simplified: https://github.com/jakearchibald/idb-keyval\n//\n// At commit: 0420a704fd6cbb4225429c536b1f61112d012fca\n// Original license:\n\n// Copyright 2016, Jake Archibald\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-expect-error - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-expect-error - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\n\n/** Create or open an IndexedDb store */\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n\n return callback => dbp.then(db => callback(db.transaction(storeName, 'readwrite').objectStore(storeName)));\n}\n\nfunction keys(store) {\n return promisifyRequest(store.getAllKeys() );\n}\n\n/** Insert into the end of the store */\nfunction push(store, value, maxQueueSize) {\n return store(store => {\n return keys(store).then(keys => {\n if (keys.length >= maxQueueSize) {\n return;\n }\n\n // We insert with an incremented key so that the entries are popped in order\n store.put(value, Math.max(...keys, 0) + 1);\n return promisifyRequest(store.transaction);\n });\n });\n}\n\n/** Insert into the front of the store */\nfunction unshift(store, value, maxQueueSize) {\n return store(store => {\n return keys(store).then(keys => {\n if (keys.length >= maxQueueSize) {\n return;\n }\n\n // We insert with an decremented key so that the entries are popped in order\n store.put(value, Math.min(...keys, 0) - 1);\n return promisifyRequest(store.transaction);\n });\n });\n}\n\n/** Pop the oldest value from the store */\nfunction shift(store) {\n return store(store => {\n return keys(store).then(keys => {\n const firstKey = keys[0];\n if (firstKey == null) {\n return undefined;\n }\n\n return promisifyRequest(store.get(firstKey)).then(value => {\n store.delete(firstKey);\n return promisifyRequest(store.transaction).then(() => value);\n });\n });\n });\n}\n\nfunction createIndexedDbStore(options) {\n let store;\n\n // Lazily create the store only when it's needed\n function getStore() {\n if (store == undefined) {\n store = createStore(options.dbName || 'sentry-offline', options.storeName || 'queue');\n }\n\n return store;\n }\n\n return {\n push: async (env) => {\n try {\n const serialized = await serializeEnvelope(env);\n await push(getStore(), serialized, options.maxQueueSize || 30);\n } catch (_) {\n //\n }\n },\n unshift: async (env) => {\n try {\n const serialized = await serializeEnvelope(env);\n await unshift(getStore(), serialized, options.maxQueueSize || 30);\n } catch (_) {\n //\n }\n },\n shift: async () => {\n try {\n const deserialized = await shift(getStore());\n if (deserialized) {\n return parseEnvelope(deserialized);\n }\n } catch (_) {\n //\n }\n\n return undefined;\n },\n };\n}\n\nfunction makeIndexedDbOfflineTransport(\n createTransport,\n) {\n return options => createTransport({ ...options, createStore: createIndexedDbStore });\n}\n\n/**\n * Creates a transport that uses IndexedDb to store events when offline.\n */\nfunction makeBrowserOfflineTransport(\n createTransport = makeFetchTransport,\n) {\n return makeIndexedDbOfflineTransport(makeOfflineTransport(createTransport));\n}\n\nexport { createStore, makeBrowserOfflineTransport, push, shift, unshift };\n//# sourceMappingURL=offline.js.map\n","import { spanToJSON, forEachEnvelopeItem, logger, getClient, timestampInSeconds, DEFAULT_ENVIRONMENT, uuid4, getDebugImagesForResources, browserPerformanceTimeOrigin } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\nconst MS_TO_NS = 1e6;\n// Use 0 as main thread id which is identical to threadId in node:worker_threads\n// where main logs 0 and workers seem to log in increments of 1\nconst THREAD_ID_STRING = String(0);\nconst THREAD_NAME = 'main';\n\n// Machine properties (eval only once)\nlet OS_PLATFORM = '';\nlet OS_PLATFORM_VERSION = '';\nlet OS_ARCH = '';\nlet OS_BROWSER = (WINDOW.navigator && WINDOW.navigator.userAgent) || '';\nlet OS_MODEL = '';\nconst OS_LOCALE =\n (WINDOW.navigator && WINDOW.navigator.language) ||\n (WINDOW.navigator && WINDOW.navigator.languages && WINDOW.navigator.languages[0]) ||\n '';\n\nfunction isUserAgentData(data) {\n return typeof data === 'object' && data !== null && 'getHighEntropyValues' in data;\n}\n\n// @ts-expect-error userAgentData is not part of the navigator interface yet\nconst userAgentData = WINDOW.navigator && WINDOW.navigator.userAgentData;\n\nif (isUserAgentData(userAgentData)) {\n userAgentData\n .getHighEntropyValues(['architecture', 'model', 'platform', 'platformVersion', 'fullVersionList'])\n .then((ua) => {\n OS_PLATFORM = ua.platform || '';\n OS_ARCH = ua.architecture || '';\n OS_MODEL = ua.model || '';\n OS_PLATFORM_VERSION = ua.platformVersion || '';\n\n if (ua.fullVersionList && ua.fullVersionList.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1];\n OS_BROWSER = `${firstUa.brand} ${firstUa.version}`;\n }\n })\n .catch(e => void e);\n}\n\nfunction isProcessedJSSelfProfile(profile) {\n return !('thread_metadata' in profile);\n}\n\n// Enriches the profile with threadId of the current thread.\n// This is done in node as we seem to not be able to get the info from C native code.\n/**\n *\n */\nfunction enrichWithThreadInformation(profile) {\n if (!isProcessedJSSelfProfile(profile)) {\n return profile;\n }\n\n return convertJSSelfProfileToSampledFormat(profile);\n}\n\n// Profile is marked as optional because it is deleted from the metadata\n// by the integration before the event is processed by other integrations.\n\nfunction getTraceId(event) {\n const traceId = event && event.contexts && event.contexts['trace'] && event.contexts['trace']['trace_id'];\n // Log a warning if the profile has an invalid traceId (should be uuidv4).\n // All profiles and transactions are rejected if this is the case and we want to\n // warn users that this is happening if they enable debug flag\n if (typeof traceId === 'string' && traceId.length !== 32) {\n if (DEBUG_BUILD) {\n logger.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`);\n }\n }\n if (typeof traceId !== 'string') {\n return '';\n }\n\n return traceId;\n}\n/**\n * Creates a profiling event envelope from a Sentry event. If profile does not pass\n * validation, returns null.\n * @param event\n * @param dsn\n * @param metadata\n * @param tunnel\n * @returns {EventEnvelope | null}\n */\n\n/**\n * Creates a profiling event envelope from a Sentry event.\n */\nfunction createProfilePayload(\n profile_id,\n start_timestamp,\n processed_profile,\n event,\n) {\n if (event.type !== 'transaction') {\n // createProfilingEventEnvelope should only be called for transactions,\n // we type guard this behavior with isProfiledTransactionEvent.\n throw new TypeError('Profiling events may only be attached to transactions, this should never occur.');\n }\n\n if (processed_profile === undefined || processed_profile === null) {\n throw new TypeError(\n `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.`,\n );\n }\n\n const traceId = getTraceId(event);\n const enrichedThreadProfile = enrichWithThreadInformation(processed_profile);\n const transactionStartMs = start_timestamp\n ? start_timestamp\n : typeof event.start_timestamp === 'number'\n ? event.start_timestamp * 1000\n : timestampInSeconds() * 1000;\n const transactionEndMs = typeof event.timestamp === 'number' ? event.timestamp * 1000 : timestampInSeconds() * 1000;\n\n const profile = {\n event_id: profile_id,\n timestamp: new Date(transactionStartMs).toISOString(),\n platform: 'javascript',\n version: '1',\n release: event.release || '',\n environment: event.environment || DEFAULT_ENVIRONMENT,\n runtime: {\n name: 'javascript',\n version: WINDOW.navigator.userAgent,\n },\n os: {\n name: OS_PLATFORM,\n version: OS_PLATFORM_VERSION,\n build_number: OS_BROWSER,\n },\n device: {\n locale: OS_LOCALE,\n model: OS_MODEL,\n manufacturer: OS_BROWSER,\n architecture: OS_ARCH,\n is_emulator: false,\n },\n debug_meta: {\n images: applyDebugMetadata(processed_profile.resources),\n },\n profile: enrichedThreadProfile,\n transactions: [\n {\n name: event.transaction || '',\n id: event.event_id || uuid4(),\n trace_id: traceId,\n active_thread_id: THREAD_ID_STRING,\n relative_start_ns: '0',\n relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0),\n },\n ],\n };\n\n return profile;\n}\n\n/*\n See packages/browser-utils/src/browser/router.ts\n*/\n/**\n *\n */\nfunction isAutomatedPageLoadSpan(span) {\n return spanToJSON(span).op === 'pageload';\n}\n\n/**\n * Converts a JSSelfProfile to a our sampled format.\n * Does not currently perform stack indexing.\n */\nfunction convertJSSelfProfileToSampledFormat(input) {\n let EMPTY_STACK_ID = undefined;\n let STACK_ID = 0;\n\n // Initialize the profile that we will fill with data\n const profile = {\n samples: [],\n stacks: [],\n frames: [],\n thread_metadata: {\n [THREAD_ID_STRING]: { name: THREAD_NAME },\n },\n };\n\n const firstSample = input.samples[0];\n if (!firstSample) {\n return profile;\n }\n\n // We assert samples.length > 0 above and timestamp should always be present\n const start = firstSample.timestamp;\n // The JS SDK might change it's time origin based on some heuristic (see See packages/utils/src/time.ts)\n // when that happens, we need to ensure we are correcting the profile timings so the two timelines stay in sync.\n // Since JS self profiling time origin is always initialized to performance.timeOrigin, we need to adjust for\n // the drift between the SDK selected value and our profile time origin.\n const origin =\n typeof performance.timeOrigin === 'number' ? performance.timeOrigin : browserPerformanceTimeOrigin || 0;\n const adjustForOriginChange = origin - (browserPerformanceTimeOrigin || origin);\n\n input.samples.forEach((jsSample, i) => {\n // If sample has no stack, add an empty sample\n if (jsSample.stackId === undefined) {\n if (EMPTY_STACK_ID === undefined) {\n EMPTY_STACK_ID = STACK_ID;\n profile.stacks[EMPTY_STACK_ID] = [];\n STACK_ID++;\n }\n\n profile['samples'][i] = {\n // convert ms timestamp to ns\n elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n stack_id: EMPTY_STACK_ID,\n thread_id: THREAD_ID_STRING,\n };\n return;\n }\n\n let stackTop = input.stacks[jsSample.stackId];\n\n // Functions in top->down order (root is last)\n // We follow the stackTop.parentId trail and collect each visited frameId\n const stack = [];\n\n while (stackTop) {\n stack.push(stackTop.frameId);\n\n const frame = input.frames[stackTop.frameId];\n\n // If our frame has not been indexed yet, index it\n if (frame && profile.frames[stackTop.frameId] === undefined) {\n profile.frames[stackTop.frameId] = {\n function: frame.name,\n abs_path: typeof frame.resourceId === 'number' ? input.resources[frame.resourceId] : undefined,\n lineno: frame.line,\n colno: frame.column,\n };\n }\n\n stackTop = stackTop.parentId === undefined ? undefined : input.stacks[stackTop.parentId];\n }\n\n const sample = {\n // convert ms timestamp to ns\n elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n stack_id: STACK_ID,\n thread_id: THREAD_ID_STRING,\n };\n\n profile['stacks'][STACK_ID] = stack;\n profile['samples'][i] = sample;\n STACK_ID++;\n });\n\n return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nfunction addProfilesToEnvelope(envelope, profiles) {\n if (!profiles.length) {\n return envelope;\n }\n\n for (const profile of profiles) {\n envelope[1].push([{ type: 'profile' }, profile]);\n }\n return envelope;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nfunction findProfiledTransactionsFromEnvelope(envelope) {\n const events = [];\n\n forEachEnvelopeItem(envelope, (item, type) => {\n if (type !== 'transaction') {\n return;\n }\n\n for (let j = 1; j < item.length; j++) {\n const event = item[j] ;\n\n if (event && event.contexts && event.contexts['profile'] && event.contexts['profile']['profile_id']) {\n events.push(item[j] );\n }\n }\n });\n\n return events;\n}\n\n/**\n * Applies debug meta data to an event from a list of paths to resources (sourcemaps)\n */\nfunction applyDebugMetadata(resource_paths) {\n const client = getClient();\n const options = client && client.getOptions();\n const stackParser = options && options.stackParser;\n\n if (!stackParser) {\n return [];\n }\n\n return getDebugImagesForResources(stackParser, resource_paths);\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate) {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) {\n DEBUG_BUILD &&\n logger.warn(\n `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n rate,\n )} of type ${JSON.stringify(typeof rate)}.`,\n );\n return false;\n }\n\n // Boolean sample rates are always valid\n if (rate === true || rate === false) {\n return true;\n }\n\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n DEBUG_BUILD && logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`);\n return false;\n }\n return true;\n}\n\nfunction isValidProfile(profile) {\n if (profile.samples.length < 2) {\n if (DEBUG_BUILD) {\n // Log a warning if the profile has less than 2 samples so users can know why\n // they are not seeing any profiling data and we cant avoid the back and forth\n // of asking them to provide us with a dump of the profile data.\n logger.log('[Profiling] Discarding profile because it contains less than 2 samples');\n }\n return false;\n }\n\n if (!profile.frames.length) {\n if (DEBUG_BUILD) {\n logger.log('[Profiling] Discarding profile because it contains no frames');\n }\n return false;\n }\n\n return true;\n}\n\n// Keep a flag value to avoid re-initializing the profiler constructor. If it fails\n// once, it will always fail and this allows us to early return.\nlet PROFILING_CONSTRUCTOR_FAILED = false;\nconst MAX_PROFILE_DURATION_MS = 30000;\n\n/**\n * Check if profiler constructor is available.\n * @param maybeProfiler\n */\nfunction isJSProfilerSupported(maybeProfiler) {\n return typeof maybeProfiler === 'function';\n}\n\n/**\n * Starts the profiler and returns the profiler instance.\n */\nfunction startJSSelfProfile() {\n // Feature support check first\n const JSProfilerConstructor = WINDOW.Profiler;\n\n if (!isJSProfilerSupported(JSProfilerConstructor)) {\n if (DEBUG_BUILD) {\n logger.log(\n '[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.',\n );\n }\n return;\n }\n\n // From initial testing, it seems that the minimum value for sampleInterval is 10ms.\n const samplingIntervalMS = 10;\n // Start the profiler\n const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS);\n\n // Attempt to initialize the profiler constructor, if it fails, we disable profiling for the current user session.\n // This is likely due to a missing 'Document-Policy': 'js-profiling' header. We do not want to throw an error if this happens\n // as we risk breaking the user's application, so just disable profiling and log an error.\n try {\n return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples });\n } catch (e) {\n if (DEBUG_BUILD) {\n logger.log(\n \"[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header.\",\n );\n logger.log('[Profiling] Disabling profiling for current user session.');\n }\n PROFILING_CONSTRUCTOR_FAILED = true;\n }\n\n return;\n}\n\n/**\n * Determine if a profile should be profiled.\n */\nfunction shouldProfileSpan(span) {\n // If constructor failed once, it will always fail, so we can early return.\n if (PROFILING_CONSTRUCTOR_FAILED) {\n if (DEBUG_BUILD) {\n logger.log('[Profiling] Profiling has been disabled for the duration of the current user session.');\n }\n return false;\n }\n\n if (!span.isRecording()) {\n if (DEBUG_BUILD) {\n logger.log('[Profiling] Discarding profile because transaction was not sampled.');\n }\n return false;\n }\n\n const client = getClient();\n const options = client && client.getOptions();\n if (!options) {\n DEBUG_BUILD && logger.log('[Profiling] Profiling disabled, no options found.');\n return false;\n }\n\n // @ts-expect-error profilesSampleRate is not part of the browser options yet\n const profilesSampleRate = options.profilesSampleRate;\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(profilesSampleRate)) {\n DEBUG_BUILD && logger.warn('[Profiling] Discarding profile because of invalid sample rate.');\n return false;\n }\n\n // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped\n if (!profilesSampleRate) {\n DEBUG_BUILD &&\n logger.log(\n '[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0',\n );\n return false;\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 sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate;\n // Check if we should sample this profile\n if (!sampled) {\n DEBUG_BUILD &&\n logger.log(\n `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number(\n profilesSampleRate,\n )})`,\n );\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nfunction createProfilingEvent(\n profile_id,\n start_timestamp,\n profile,\n event,\n) {\n if (!isValidProfile(profile)) {\n return null;\n }\n\n return createProfilePayload(profile_id, start_timestamp, profile, event);\n}\n\n// TODO (v8): We need to obtain profile ids in @sentry-internal/tracing,\n// but we don't have access to this map because importing this map would\n// cause a circular dependency. We need to resolve this in v8.\nconst PROFILE_MAP = new Map();\n/**\n *\n */\nfunction getActiveProfilesCount() {\n return PROFILE_MAP.size;\n}\n\n/**\n * Retrieves profile from global cache and removes it.\n */\nfunction takeProfileFromGlobalCache(profile_id) {\n const profile = PROFILE_MAP.get(profile_id);\n if (profile) {\n PROFILE_MAP.delete(profile_id);\n }\n return profile;\n}\n/**\n * Adds profile to global cache and evicts the oldest profile if the cache is full.\n */\nfunction addProfileToGlobalCache(profile_id, profile) {\n PROFILE_MAP.set(profile_id, profile);\n\n if (PROFILE_MAP.size > 30) {\n const last = PROFILE_MAP.keys().next().value;\n PROFILE_MAP.delete(last);\n }\n}\n\nexport { MAX_PROFILE_DURATION_MS, addProfileToGlobalCache, addProfilesToEnvelope, applyDebugMetadata, convertJSSelfProfileToSampledFormat, createProfilePayload, createProfilingEvent, enrichWithThreadInformation, findProfiledTransactionsFromEnvelope, getActiveProfilesCount, isAutomatedPageLoadSpan, isValidSampleRate, shouldProfileSpan, startJSSelfProfile, takeProfileFromGlobalCache };\n//# sourceMappingURL=utils.js.map\n","import { timestampInSeconds, logger, spanToJSON, uuid4, getCurrentScope } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { isAutomatedPageLoadSpan, startJSSelfProfile, MAX_PROFILE_DURATION_MS, addProfileToGlobalCache } from './utils.js';\n\n/**\n * Wraps startTransaction and stopTransaction with profiling related logic.\n * startProfileForTransaction is called after the call to startTransaction in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n */\nfunction startProfileForSpan(span) {\n // Start the profiler and get the profiler instance.\n let startTimestamp;\n if (isAutomatedPageLoadSpan(span)) {\n startTimestamp = timestampInSeconds() * 1000;\n }\n\n const profiler = startJSSelfProfile();\n\n // We failed to construct the profiler, so we skip.\n // No need to log anything as this has already been logged in startProfile.\n if (!profiler) {\n return;\n }\n\n if (DEBUG_BUILD) {\n logger.log(`[Profiling] started profiling span: ${spanToJSON(span).description}`);\n }\n\n // We create \"unique\" span names to avoid concurrent spans with same names\n // from being ignored by the profiler. From here on, only this span name should be used when\n // calling the profiler methods. Note: we log the original name to the user to avoid confusion.\n const profileId = uuid4();\n\n getCurrentScope().setContext('profile', {\n profile_id: profileId,\n start_timestamp: startTimestamp,\n });\n\n /**\n * Idempotent handler for profile stop\n */\n async function onProfileHandler() {\n // Check if the profile exists and return it the behavior has to be idempotent as users may call span.finish multiple times.\n if (!span) {\n return;\n }\n // Satisfy the type checker, but profiler will always be defined here.\n if (!profiler) {\n return;\n }\n\n return profiler\n .stop()\n .then((profile) => {\n if (maxDurationTimeoutID) {\n WINDOW.clearTimeout(maxDurationTimeoutID);\n maxDurationTimeoutID = undefined;\n }\n\n if (DEBUG_BUILD) {\n logger.log(`[Profiling] stopped profiling of span: ${spanToJSON(span).description}`);\n }\n\n // In case of an overlapping span, stopProfiling may return null and silently ignore the overlapping profile.\n if (!profile) {\n if (DEBUG_BUILD) {\n logger.log(\n `[Profiling] profiler returned null profile for: ${spanToJSON(span).description}`,\n 'this may indicate an overlapping span or a call to stopProfiling with a profile title that was never started',\n );\n }\n return;\n }\n\n addProfileToGlobalCache(profileId, profile);\n })\n .catch(error => {\n if (DEBUG_BUILD) {\n logger.log('[Profiling] error while stopping profiler:', error);\n }\n });\n }\n\n // Enqueue a timeout to prevent profiles from running over max duration.\n let maxDurationTimeoutID = WINDOW.setTimeout(() => {\n if (DEBUG_BUILD) {\n logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', spanToJSON(span).description);\n }\n // If the timeout exceeds, we want to stop profiling, but not finish the span\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onProfileHandler();\n }, MAX_PROFILE_DURATION_MS);\n\n // We need to reference the original end call to avoid creating an infinite loop\n const originalEnd = span.end.bind(span);\n\n /**\n * Wraps span `end()` with profiling related logic.\n * startProfiling is called after the call to spanStart in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to spanEnd.\n */\n function profilingWrappedSpanEnd() {\n if (!span) {\n return originalEnd();\n }\n // onProfileHandler should always return the same profile even if this is called multiple times.\n // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared.\n void onProfileHandler().then(\n () => {\n originalEnd();\n },\n () => {\n // If onProfileHandler fails, we still want to call the original finish method.\n originalEnd();\n },\n );\n\n return span;\n }\n\n span.end = profilingWrappedSpanEnd;\n}\n\nexport { startProfileForSpan };\n//# sourceMappingURL=startProfileForSpan.js.map\n","import { defineIntegration, getActiveSpan, getRootSpan, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { startProfileForSpan } from './startProfileForSpan.js';\nimport { isAutomatedPageLoadSpan, shouldProfileSpan, getActiveProfilesCount, findProfiledTransactionsFromEnvelope, takeProfileFromGlobalCache, createProfilingEvent, addProfilesToEnvelope } from './utils.js';\n\nconst INTEGRATION_NAME = 'BrowserProfiling';\n\nconst _browserProfilingIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n\n if (rootSpan && isAutomatedPageLoadSpan(rootSpan)) {\n if (shouldProfileSpan(rootSpan)) {\n startProfileForSpan(rootSpan);\n }\n }\n\n client.on('spanStart', (span) => {\n if (span === getRootSpan(span) && shouldProfileSpan(span)) {\n startProfileForSpan(span);\n }\n });\n\n client.on('beforeEnvelope', (envelope) => {\n // if not profiles are in queue, there is nothing to add to the envelope.\n if (!getActiveProfilesCount()) {\n return;\n }\n\n const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope);\n if (!profiledTransactionEvents.length) {\n return;\n }\n\n const profilesToAddToEnvelope = [];\n\n for (const profiledTransaction of profiledTransactionEvents) {\n const context = profiledTransaction && profiledTransaction.contexts;\n const profile_id = context && context['profile'] && context['profile']['profile_id'];\n const start_timestamp = context && context['profile'] && context['profile']['start_timestamp'];\n\n if (typeof profile_id !== 'string') {\n DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a span without a profile context');\n continue;\n }\n\n if (!profile_id) {\n DEBUG_BUILD && logger.log('[Profiling] cannot find profile for a span without a profile context');\n continue;\n }\n\n // Remove the profile from the span context before sending, relay will take care of the rest.\n if (context && context['profile']) {\n delete context.profile;\n }\n\n const profile = takeProfileFromGlobalCache(profile_id);\n if (!profile) {\n DEBUG_BUILD && logger.log(`[Profiling] Could not retrieve profile for span: ${profile_id}`);\n continue;\n }\n\n const profileEvent = createProfilingEvent(\n profile_id,\n start_timestamp ,\n profile,\n profiledTransaction ,\n );\n if (profileEvent) {\n profilesToAddToEnvelope.push(profileEvent);\n }\n }\n\n addProfilesToEnvelope(envelope , profilesToAddToEnvelope);\n });\n },\n };\n}) ;\n\nconst browserProfilingIntegration = defineIntegration(_browserProfilingIntegration);\n\nexport { browserProfilingIntegration };\n//# sourceMappingURL=integration.js.map\n","import { getNativeImplementation } from '@sentry-internal/browser-utils';\nimport { defineIntegration, logger, serializeEnvelope } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'SpotlightBrowser';\n\nconst _spotlightIntegration = ((options = {}) => {\n const sidecarUrl = options.sidecarUrl || 'http://localhost:8969/stream';\n\n return {\n name: INTEGRATION_NAME,\n setup: () => {\n DEBUG_BUILD && logger.log('Using Sidecar URL', sidecarUrl);\n },\n // We don't want to send interaction transactions/root spans created from\n // clicks within Spotlight to Sentry. Neither do we want them to be sent to\n // spotlight.\n processEvent: event => (isSpotlightInteraction(event) ? null : event),\n afterAllSetup: (client) => {\n setupSidecarForwarding(client, sidecarUrl);\n },\n };\n}) ;\n\nfunction setupSidecarForwarding(client, sidecarUrl) {\n const makeFetch = getNativeImplementation('fetch');\n let failCount = 0;\n\n client.on('beforeEnvelope', (envelope) => {\n if (failCount > 3) {\n logger.warn('[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests:', failCount);\n return;\n }\n\n makeFetch(sidecarUrl, {\n method: 'POST',\n body: serializeEnvelope(envelope),\n headers: {\n 'Content-Type': 'application/x-sentry-envelope',\n },\n mode: 'cors',\n }).then(\n res => {\n if (res.status >= 200 && res.status < 400) {\n // Reset failed requests counter on success\n failCount = 0;\n }\n },\n err => {\n failCount++;\n logger.error(\n \"Sentry SDK can't connect to Sidecar is it running? See: https://spotlightjs.com/sidecar/npx/\",\n err,\n );\n },\n );\n });\n}\n\n/**\n * Use this integration to send errors and transactions to Spotlight.\n *\n * Learn more about spotlight at https://spotlightjs.com\n */\nconst spotlightBrowserIntegration = defineIntegration(_spotlightIntegration);\n\n/**\n * Flags if the event is a transaction created from an interaction with the spotlight UI.\n */\nfunction isSpotlightInteraction(event) {\n return Boolean(\n event.type === 'transaction' &&\n event.spans &&\n event.contexts &&\n event.contexts.trace &&\n event.contexts.trace.op === 'ui.action.click' &&\n event.spans.some(({ description }) => description && description.includes('#sentry-spotlight')),\n );\n}\n\nexport { INTEGRATION_NAME, isSpotlightInteraction, spotlightBrowserIntegration };\n//# sourceMappingURL=spotlight.js.map\n","import { getCurrentScope, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\n/**\n * Ordered LRU cache for storing feature flags in the scope context. The name\n * of each flag in the buffer is unique, and the output of getAll() is ordered\n * from oldest to newest.\n */\n\n/**\n * Max size of the LRU flag buffer stored in Sentry scope and event contexts.\n */\nconst FLAG_BUFFER_SIZE = 100;\n\n/**\n * Copies feature flags that are in current scope context to the event context\n */\nfunction copyFlagsFromScopeToEvent(event) {\n const scope = getCurrentScope();\n const flagContext = scope.getScopeData().contexts.flags;\n const flagBuffer = flagContext ? flagContext.values : [];\n\n if (!flagBuffer.length) {\n return event;\n }\n\n if (event.contexts === undefined) {\n event.contexts = {};\n }\n event.contexts.flags = { values: [...flagBuffer] };\n return event;\n}\n\n/**\n * Creates a feature flags values array in current context if it does not exist\n * and inserts the flag into a FeatureFlag array while maintaining ordered LRU\n * properties. Not thread-safe. After inserting:\n * - `flags` is sorted in order of recency, with the newest flag at the end.\n * - No other flags with the same name exist in `flags`.\n * - The length of `flags` does not exceed `maxSize`. The oldest flag is evicted\n * as needed.\n *\n * @param name Name of the feature flag to insert.\n * @param value Value of the feature flag.\n * @param maxSize Max number of flags the buffer should store. It's recommended\n * to keep this consistent across insertions. Default is FLAG_BUFFER_SIZE\n */\nfunction insertFlagToScope(name, value, maxSize = FLAG_BUFFER_SIZE) {\n const scopeContexts = getCurrentScope().getScopeData().contexts;\n if (!scopeContexts.flags) {\n scopeContexts.flags = { values: [] };\n }\n const flags = scopeContexts.flags.values ;\n insertToFlagBuffer(flags, name, value, maxSize);\n}\n\n/**\n * Exported for tests. Currently only accepts boolean values (otherwise no-op).\n */\nfunction insertToFlagBuffer(flags, name, value, maxSize) {\n if (typeof value !== 'boolean') {\n return;\n }\n\n if (flags.length > maxSize) {\n DEBUG_BUILD && logger.error(`[Feature Flags] insertToFlagBuffer called on a buffer larger than maxSize=${maxSize}`);\n return;\n }\n\n // Check if the flag is already in the buffer - O(n)\n const index = flags.findIndex(f => f.flag === name);\n\n if (index !== -1) {\n // The flag was found, remove it from its current position - O(n)\n flags.splice(index, 1);\n }\n\n if (flags.length === maxSize) {\n // If at capacity, pop the earliest flag - O(n)\n flags.shift();\n }\n\n // Push the flag to the end - O(1)\n flags.push({\n flag: name,\n result: value,\n });\n}\n\nexport { FLAG_BUFFER_SIZE, copyFlagsFromScopeToEvent, insertFlagToScope, insertToFlagBuffer };\n//# sourceMappingURL=featureFlags.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../utils/featureFlags.js';\n\n/**\n * Sentry integration for buffering feature flags manually with an API, and\n * capturing them on error events. We recommend you do this on each flag\n * evaluation. Flags are buffered per Sentry scope and limited to 100 per event.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import { type FeatureFlagsIntegration } from '@sentry/browser';\n *\n * // Setup\n * Sentry.init(..., integrations: [Sentry.featureFlagsIntegration()])\n *\n * // Verify\n * const flagsIntegration = Sentry.getClient()?.getIntegrationByName('FeatureFlags');\n * if (flagsIntegration) {\n * flagsIntegration.addFeatureFlag('my-flag', true);\n * } else {\n * // check your setup\n * }\n * Sentry.captureException(Exception('broke')); // 'my-flag' should be captured to this Sentry event.\n * ```\n */\nconst featureFlagsIntegration = defineIntegration(() => {\n return {\n name: 'FeatureFlags',\n\n processEvent(event, _hint, _client) {\n return copyFlagsFromScopeToEvent(event);\n },\n\n addFeatureFlag(name, value) {\n insertFlagToScope(name, value);\n },\n };\n}) ;\n\nexport { featureFlagsIntegration };\n//# sourceMappingURL=featureFlagsIntegration.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags.js';\n\n/**\n * Sentry integration for capturing feature flags from LaunchDarkly.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import {launchDarklyIntegration, buildLaunchDarklyFlagUsedInspector} from '@sentry/browser';\n * import * as LaunchDarkly from 'launchdarkly-js-client-sdk';\n *\n * Sentry.init(..., integrations: [launchDarklyIntegration()])\n * const ldClient = LaunchDarkly.initialize(..., {inspectors: [buildLaunchDarklyFlagUsedHandler()]});\n * ```\n */\nconst launchDarklyIntegration = defineIntegration(() => {\n return {\n name: 'LaunchDarkly',\n\n processEvent(event, _hint, _client) {\n return copyFlagsFromScopeToEvent(event);\n },\n };\n}) ;\n\n/**\n * LaunchDarkly hook that listens for flag evaluations and updates the `flags`\n * context in our Sentry scope. This needs to be registered as an\n * 'inspector' in LaunchDarkly initialize() options, separately from\n * `launchDarklyIntegration`. Both are needed to collect feature flags on error.\n */\nfunction buildLaunchDarklyFlagUsedHandler() {\n return {\n name: 'sentry-flag-auditor',\n type: 'flag-used',\n\n synchronous: true,\n\n /**\n * Handle a flag evaluation by storing its name and value on the current scope.\n */\n method: (flagKey, flagDetail, _context) => {\n insertFlagToScope(flagKey, flagDetail.value);\n },\n };\n}\n\nexport { buildLaunchDarklyFlagUsedHandler, launchDarklyIntegration };\n//# sourceMappingURL=integration.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { copyFlagsFromScopeToEvent, insertFlagToScope } from '../../../utils/featureFlags.js';\n\nconst openFeatureIntegration = defineIntegration(() => {\n return {\n name: 'OpenFeature',\n\n processEvent(event, _hint, _client) {\n return copyFlagsFromScopeToEvent(event);\n },\n };\n}) ;\n\n/**\n * OpenFeature Hook class implementation.\n */\nclass OpenFeatureIntegrationHook {\n /**\n * Successful evaluation result.\n */\n after(_hookContext, evaluationDetails) {\n insertFlagToScope(evaluationDetails.flagKey, evaluationDetails.value);\n }\n\n /**\n * On error evaluation result.\n */\n error(hookContext, _error, _hookHints) {\n insertFlagToScope(hookContext.flagKey, hookContext.defaultValue);\n }\n}\n\nexport { OpenFeatureIntegrationHook, openFeatureIntegration };\n//# sourceMappingURL=integration.js.map\n","import { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getClient, addBreadcrumb, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/* eslint-disable max-lines */\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 = {}) => {\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}) ;\n\nconst breadcrumbsIntegration = defineIntegration(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n return function addSentryBreadcrumb(event) {\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 creates 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,\n dom,\n) {\n return function _innerDomBreadcrumb(handlerData) {\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 ;\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 = {\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) {\n return function _consoleBreadcrumb(handlerData) {\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) {\n return function _xhrBreadcrumb(handlerData) {\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 = {\n method,\n url,\n status_code,\n };\n\n const hint = {\n xhr: handlerData.xhr,\n input: body,\n startTimestamp,\n endTimestamp,\n };\n\n const level = getBreadcrumbLogLevelFromHttpStatusCode(status_code);\n\n addBreadcrumb(\n {\n category: 'xhr',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n return function _fetchBreadcrumb(handlerData) {\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 = handlerData.fetchData;\n const hint = {\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 ;\n const data = {\n ...handlerData.fetchData,\n status_code: response && response.status,\n };\n const hint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(data.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data,\n type: 'http',\n level,\n },\n hint,\n );\n }\n };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n return function _historyBreadcrumb(handlerData) {\n if (getClient() !== client) {\n return;\n }\n\n let from = handlerData.from;\n let to = 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) {\n return !!event && !!(event ).target;\n}\n\nexport { breadcrumbsIntegration };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { defineIntegration, fill, getFunctionName, getOriginalFunction } from '@sentry/core';\nimport { WINDOW, wrap } from '../helpers.js';\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\nconst _browserApiErrorsIntegration = ((options = {}) => {\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}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = defineIntegration(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n return function ( ...args) {\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\nfunction _wrapRAF(original) {\n return function ( callback) {\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) {\n return function ( ...args) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const xhr = this;\n const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n fill(xhr, prop, function (original) {\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) {\n const globalObject = WINDOW ;\n const targetObj = globalObject[target];\n const proto = targetObj && targetObj.prototype;\n\n // eslint-disable-next-line no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original)\n\n {\n return function ( eventName, fn, options) {\n try {\n if (isEventListenerObject(fn)) {\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 (e2) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n wrap(fn, {\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(proto, 'removeEventListener', function (originalRemoveEventListener)\n\n {\n return function ( eventName, fn, options) {\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 try {\n const originalEventHandler = (fn ).__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, fn, options);\n };\n });\n}\n\nfunction isEventListenerObject(obj) {\n return typeof (obj ).handleEvent === 'function';\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\nimport { defineIntegration, logger, startSession, captureSession } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * When added, automatically creates sessions which allow you to track adoption and crashes (crash free rate) in your Releases in Sentry.\n * More information: https://docs.sentry.io/product/releases/health/\n *\n * Note: In order for session tracking to work, you need to set up Releases: https://docs.sentry.io/product/releases/\n */\nconst browserSessionIntegration = defineIntegration(() => {\n return {\n name: 'BrowserSession',\n setupOnce() {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD &&\n logger.warn('Using the `browserSessionIntegration` in non-browser environments 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\nexport { browserSessionIntegration };\n//# sourceMappingURL=browsersession.js.map\n","import { defineIntegration, addGlobalErrorInstrumentationHandler, getClient, captureEvent, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION, logger } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\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}) ;\n\nconst globalHandlersIntegration = defineIntegration(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\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) {\n addGlobalUnhandledRejectionInstrumentationHandler(e => {\n const { stackParser, attachStacktrace } = getOptions();\n\n if (getClient() !== client || shouldIgnoreOnError()) {\n return;\n }\n\n const error = _getUnhandledRejectionError(e );\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) {\n if (isPrimitive(error)) {\n return error;\n }\n\n // dig the object of the rejection out of known event types\n try {\n\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 )) {\n return (error ).reason;\n }\n\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 ) && 'reason' in (error ).detail) {\n return (error ).detail.reason;\n }\n } catch (e2) {} // 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) {\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\nfunction _enhanceEventWithInitialFrame(\n event,\n url,\n line,\n column,\n) {\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 = column;\n const lineno = 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) {\n DEBUG_BUILD && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n const client = getClient();\n const options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return options;\n}\n\nexport { globalHandlersIntegration };\n//# sourceMappingURL=globalhandlers.js.map\n","import { defineIntegration } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nconst 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\nexport { httpContextIntegration };\n//# sourceMappingURL=httpcontext.js.map\n","import { defineIntegration, applyAggregateErrorsToEvent } from '@sentry/core';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n const limit = options.limit || DEFAULT_LIMIT;\n const key = options.key || DEFAULT_KEY;\n\n return {\n name: INTEGRATION_NAME,\n preprocessEvent(event, hint, client) {\n const options = client.getOptions();\n\n applyAggregateErrorsToEvent(\n // 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}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = defineIntegration(_linkedErrorsIntegration);\n\nexport { linkedErrorsIntegration };\n//# sourceMappingURL=linkederrors.js.map\n","import { inboundFiltersIntegration, functionToStringIntegration, dedupeIntegration, consoleSandbox, supportsFetch, logger, stackParserFromStackParserOptions, getIntegrationsToSetup, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, getClient } from '@sentry/core';\nimport { BrowserClient } from './client.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './helpers.js';\nimport { breadcrumbsIntegration } from './integrations/breadcrumbs.js';\nimport { browserApiErrorsIntegration } from './integrations/browserapierrors.js';\nimport { browserSessionIntegration } from './integrations/browsersession.js';\nimport { globalHandlersIntegration } from './integrations/globalhandlers.js';\nimport { httpContextIntegration } from './integrations/httpcontext.js';\nimport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport { makeFetchTransport } from './transports/fetch.js';\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(options) {\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 const integrations = [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n ];\n\n // eslint-disable-next-line deprecation/deprecation\n if (options.autoSessionTracking !== false) {\n integrations.push(browserSessionIntegration());\n }\n\n return integrations;\n}\n\nfunction applyDefaultOptions(optionsArg = {}) {\n const defaultOptions = {\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 // TODO: Instead of dropping just `defaultIntegrations`, we should simply\n // call `dropUndefinedKeys` on the entire `optionsArg`.\n // However, for this to work we need to adjust the `hasTracingEnabled()` logic\n // first as it differentiates between `undefined` and the key not being in the object.\n if (optionsArg.defaultIntegrations == null) {\n delete optionsArg.defaultIntegrations;\n }\n\n return { ...defaultOptions, ...optionsArg };\n}\n\nfunction shouldShowBrowserExtensionError() {\n const windowWithMaybeExtension =\n typeof WINDOW.window !== 'undefined' && (WINDOW );\n if (!windowWithMaybeExtension) {\n // No need to show the error if we're not in a browser window environment (e.g. service workers)\n return false;\n }\n\n const 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:', 'safari-web-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 // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n // see: https://github.com/getsentry/sentry-javascript/issues/12668\n const isNWjs = typeof windowWithMaybeExtension.nw !== 'undefined';\n\n return !!runtimeId && !isDedicatedExtensionPage && !isNWjs;\n}\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\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 */\nfunction init(browserOptions = {}) {\n const options = applyDefaultOptions(browserOptions);\n\n if (!options.skipBrowserExtensionCheck && 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 = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || makeFetchTransport,\n };\n\n return initAndBind(BrowserClient, clientOptions);\n}\n\n/**\n * All properties the report dialog supports\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 */\nfunction showReportDialog(options = {}) {\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) => {\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 */\nfunction forceLoad() {\n // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n callback();\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\nfunction captureUserFeedback(feedback) {\n const client = getClient();\n if (client) {\n // eslint-disable-next-line deprecation/deprecation\n client.captureUserFeedback(feedback);\n }\n}\n\nexport { captureUserFeedback, forceLoad, getDefaultIntegrations, init, onLoad, showReportDialog };\n//# sourceMappingURL=sdk.js.map\n","import { createStackParser, UNKNOWN_FUNCTION } from '@sentry/core';\n\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\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n const frame = {\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// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\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 = line => {\n // If the stack line has no function name, we need to parse it differently\n const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n if (noFnParts) {\n const [, filename, line, col] = noFnParts;\n return createFrame(filename, UNKNOWN_FUNCTION, +line, +col);\n }\n\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\nconst chromeStackLineParser = [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 = 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\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = 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\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n const parts = opera10Regex.exec(line) ;\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = 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\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst 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, filename) => {\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\nexport { chromeStackLineParser, defaultStackLineParsers, defaultStackParser, geckoStackLineParser, opera10StackLineParser, opera11StackLineParser, winjsStackLineParser };\n//# sourceMappingURL=stack-parsers.js.map\n","import { startTrackingWebVitals, startTrackingINP, startTrackingLongAnimationFrames, startTrackingLongTasks, startTrackingInteractions, addHistoryInstrumentationHandler, registerInpInteractionListener, addPerformanceEntries } from '@sentry-internal/browser-utils';\nimport { TRACING_DEFAULTS, registerSpanErrorInstrumentation, GLOBAL_OBJ, getClient, propagationContextFromHeaders, getCurrentScope, spanToJSON, getRootSpan, spanIsSampled, getDynamicSamplingContextFromSpan, browserPerformanceTimeOrigin, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, getActiveSpan, getIsolationScope, generateTraceId, getDomElement, startIdleSpan, logger, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\n\n/* eslint-disable max-lines */\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n ...TRACING_DEFAULTS,\n instrumentNavigation: true,\n instrumentPageLoad: true,\n markBackgroundSpan: true,\n enableLongTask: true,\n enableLongAnimationFrame: 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 */\nconst browserTracingIntegration = ((_options = {}) => {\n registerSpanErrorInstrumentation();\n\n const {\n enableInp,\n enableLongTask,\n enableLongAnimationFrame,\n _experiments: { enableInteractions, enableStandaloneClsSpans },\n beforeStartSpan,\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n markBackgroundSpan,\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n instrumentPageLoad,\n instrumentNavigation,\n } = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n };\n\n const _collectWebVitals = startTrackingWebVitals({ recordClsStandaloneSpans: enableStandaloneClsSpans || false });\n\n if (enableInp) {\n startTrackingINP();\n }\n\n if (\n enableLongAnimationFrame &&\n GLOBAL_OBJ.PerformanceObserver &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n ) {\n startTrackingLongAnimationFrames();\n } else if (enableLongTask) {\n startTrackingLongTasks();\n }\n\n if (enableInteractions) {\n startTrackingInteractions();\n }\n\n const latestRoute = {\n name: undefined,\n source: undefined,\n };\n\n /** Create routing idle transaction. */\n function _createRouteSpan(client, startSpanOptions) {\n const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n const finalStartSpanOptions = 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, { recordClsOnPageloadSpan: !enableStandaloneClsSpans });\n },\n });\n\n function emitFinish() {\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;\n let startingUrl = WINDOW.location && WINDOW.location.href;\n\n function maybeEndActiveSpan() {\n if (activeSpan && !spanToJSON(activeSpan).timestamp) {\n DEBUG_BUILD && logger.log(`[Tracing] Finishing current active span with op: ${spanToJSON(activeSpan).op}`);\n // If there's an open active span, we need to finish it before creating an new one.\n activeSpan.end();\n }\n }\n\n client.on('startNavigationSpan', startSpanOptions => {\n if (getClient() !== client) {\n return;\n }\n\n maybeEndActiveSpan();\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 maybeEndActiveSpan();\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 if (enableInp) {\n registerInpInteractionListener();\n }\n\n instrumentOutgoingRequests(client, {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n tracePropagationTargets: client.getOptions().tracePropagationTargets,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n });\n },\n };\n}) ;\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 */\nfunction startBrowserTracingPageLoadSpan(\n client,\n spanOptions,\n traceOptions,\n) {\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 */\nfunction startBrowserTracingNavigationSpan(client, spanOptions) {\n getIsolationScope().setPropagationContext({ traceId: generateTraceId() });\n getCurrentScope().setPropagationContext({ traceId: generateTraceId() });\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 */\nfunction getMetaContent(metaName) {\n // Can't specify generic to `getDomElement` because tracing can be used\n // in a variety of environments, have to disable `no-unsafe-member-access`\n // as a result.\n const metaTag = getDomElement(`meta[name=${metaName}]`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return metaTag ? metaTag.getAttribute('content') : undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n idleTimeout,\n finalTimeout,\n childSpanTimeout,\n latestRoute,\n) {\n let inflightInteractionSpan;\n const registerInteractionTransaction = () => {\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 )) {\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\nexport { BROWSER_TRACING_INTEGRATION_ID, browserTracingIntegration, getMetaContent, startBrowserTracingNavigationSpan, startBrowserTracingPageLoadSpan };\n//# sourceMappingURL=browserTracingIntegration.js.map\n","import { getActiveSpan, getRootSpan, spanToJSON, logger, SPAN_STATUS_ERROR } from '@sentry/core';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (WINDOW && WINDOW.document) {\n WINDOW.document.addEventListener('visibilitychange', () => {\n 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\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","import { addXhrInstrumentationHandler, addPerformanceInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { addFetchEndInstrumentationHandler, addFetchInstrumentationHandler, instrumentFetchRequest, parseUrl, spanToJSON, browserPerformanceTimeOrigin, hasTracingEnabled, setHttpStatus, getActiveSpan, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_OP, SentryNonRecordingSpan, getTraceData, stringMatchesSomePattern } from '@sentry/core';\nimport { WINDOW } from '../helpers.js';\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n enableHTTPTimings: true,\n trackFetchStreamPerformance: false,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(client, _options) {\n const {\n traceFetch,\n traceXHR,\n trackFetchStreamPerformance,\n shouldCreateSpanForRequest,\n enableHTTPTimings,\n tracePropagationTargets,\n } = {\n traceFetch: defaultRequestInstrumentationOptions.traceFetch,\n traceXHR: defaultRequestInstrumentationOptions.traceXHR,\n trackFetchStreamPerformance: defaultRequestInstrumentationOptions.trackFetchStreamPerformance,\n ..._options,\n };\n\n const shouldCreateSpan =\n typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n const spans = {};\n\n if (traceFetch) {\n // Keeping track of http requests, whose body payloads resolved later than the initial resolved request\n // e.g. streaming using server sent events (SSE)\n client.addEventProcessor(event => {\n if (event.type === 'transaction' && event.spans) {\n event.spans.forEach(span => {\n if (span.op === 'http.client') {\n const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n if (updatedTimestamp) {\n span.timestamp = updatedTimestamp / 1000;\n spanIdToEndTimestamp.delete(span.span_id);\n }\n }\n });\n }\n return event;\n });\n\n if (trackFetchStreamPerformance) {\n addFetchEndInstrumentationHandler(handlerData => {\n if (handlerData.response) {\n const span = responseToSpanId.get(handlerData.response);\n if (span && handlerData.endTimestamp) {\n spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n }\n }\n });\n }\n\n addFetchInstrumentationHandler(handlerData => {\n const createdSpan = instrumentFetchRequest(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n if (handlerData.response && handlerData.fetchData.__span) {\n responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n }\n\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) {\n return (\n entry.entryType === 'resource' &&\n 'initiatorType' in entry &&\n typeof (entry ).nextHopProtocol === 'string' &&\n (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n const { url } = spanToJSON(span).data || {};\n\n if (!url || typeof url !== 'string') {\n return;\n }\n\n const cleanup = addPerformanceInstrumentationHandler('resource', ({ entries }) => {\n entries.forEach(entry => {\n if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n const spanData = resourceTimingEntryToSpanData(entry);\n spanData.forEach(data => span.setAttribute(...data));\n // In the next tick, clean this handler up\n // We have to wait here because otherwise this cleans itself up before it is fully done\n setTimeout(cleanup);\n }\n });\n });\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n let name = 'unknown';\n let version = 'unknown';\n let _name = '';\n for (const char of nextHopProtocol) {\n // http/1.1 etc.\n if (char === '/') {\n [name, version] = nextHopProtocol.split('/') ;\n break;\n }\n // h2, h3 etc.\n if (!isNaN(Number(char))) {\n name = _name === 'h' ? 'http' : _name;\n version = nextHopProtocol.split(_name)[1] ;\n break;\n }\n _name += char;\n }\n if (_name === nextHopProtocol) {\n // webrtc, ftp, etc.\n name = _name;\n }\n return { name, version };\n}\n\nfunction getAbsoluteTime(time = 0) {\n return ((browserPerformanceTimeOrigin || performance.timeOrigin) + time) / 1000;\n}\n\nfunction resourceTimingEntryToSpanData(resourceTiming) {\n const { name, version } = extractNetworkProtocol(resourceTiming.nextHopProtocol);\n\n const timingSpanData = [];\n\n timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n\n if (!browserPerformanceTimeOrigin) {\n return timingSpanData;\n }\n return [\n ...timingSpanData,\n ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n ];\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n targetUrl,\n tracePropagationTargets,\n) {\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 = 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 */\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n shouldAttachHeaders,\n spans,\n) {\n const xhr = handlerData.xhr;\n const sentryXhrData = xhr && xhr[SENTRY_XHR_DATA_KEY];\n\n if (!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 if (shouldAttachHeaders(sentryXhrData.url)) {\n addTracingHeadersToXhrRequest(\n xhr,\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, span) {\n const { 'sentry-trace': sentryTrace, baggage } = getTraceData({ span });\n\n if (sentryTrace) {\n setHeaderOnXhr(xhr, sentryTrace, baggage);\n }\n}\n\nfunction setHeaderOnXhr(\n xhr,\n sentryTraceHeader,\n sentryBaggageHeader,\n) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n if (sentryBaggageHeader) {\n // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n // We can therefore simply set a baggage header without checking what was there before\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n xhr.setRequestHeader('baggage', 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) {\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 (e2) {\n return undefined;\n }\n}\n\nexport { defaultRequestInstrumentationOptions, extractNetworkProtocol, instrumentOutgoingRequests, shouldAttachHeaders, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport, rejectedSyncPromise } from '@sentry/core';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n options,\n nativeFetch = getNativeImplementation('fetch'),\n) {\n let pendingBodySize = 0;\n let pendingCount = 0;\n\n function makeRequest(request) {\n const requestSize = request.body.length;\n pendingBodySize += requestSize;\n pendingCount++;\n\n const requestOptions = {\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. when finishing 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 <= 60000 && 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 // TODO: This may need a `suppressTracing` call in the future when we switch the browser SDK to OTEL\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\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { dsnToString, createEnvelope } from '@sentry/core';\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n feedback,\n {\n metadata,\n tunnel,\n dsn,\n }\n\n,\n) {\n const headers = {\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) {\n const feedbackHeaders = {\n type: 'user_report',\n };\n return [feedbackHeaders, feedback];\n}\n\nexport { createUserFeedbackEnvelope };\n//# sourceMappingURL=userfeedback.js.map\n"],"names":["BrowserClient","constructor","options","opts","parentSpanIsAlwaysRootSpan","sdkSource","SENTRY_SDK_SOURCE","super","sendClientReports","document","addEventListener","visibilityState","this","_flushOutcomes","eventFromException","exception","hint","_options","stackParser","attachStacktrace","eventFromMessage","message","level","captureUserFeedback","feedback","_isEnabled","warn","envelope","metadata","getSdkMetadata","dsn","getDsn","tunnel","getOptions","sendEnvelope","_prepareEvent","event","scope","platform","DEBUG_BUILD","__SENTRY_DEBUG__","exceptionFromError","ex","frames","parseStackFrames","type","extractType","value","extractMessage","length","stacktrace","undefined","eventFromPlainObject","syntheticException","isUnhandledRejection","client","normalizeDepth","errorFromProp","obj","prop","Object","prototype","hasOwnProperty","call","Error","getErrorPropertyFromObject","extra","__serialized__","values","name","getNonErrorObjectExceptionValue","eventFromError","stack","skipLines","reactMinifiedRegexp","test","getSkipFirstStackStringLines","framesToPop","getPopFirstTopFrames","e","isWebAssemblyException","WebAssembly","Exception","Array","isArray","error","eventFromUnknownInput","event_id","eventFromString","domException","tags","code","synthetic","__sentry_template_string__","__sentry_template_values__","logentry","params","keys","captureType","getPrototypeOf","getObjectClassName","WINDOW","ignoreOnError","shouldIgnoreOnError","wrap","fn","isFunction","wrapper","__sentry_wrapped__","sentryWrapped","args","wrappedArguments","map","arg","apply","setTimeout","addEventProcessor","mechanism","arguments","property","e2","getOwnPropertyDescriptor","configurable","defineProperty","get","e3","LazyLoadableIntegrations","replayIntegration","replayCanvasIntegration","feedbackIntegration","feedbackModalIntegration","feedbackScreenshotIntegration","captureConsoleIntegration","contextLinesIntegration","linkedErrorsIntegration","debugIntegration","dedupeIntegration","extraErrorDataIntegration","httpClientIntegration","reportingObserverIntegration","rewriteFramesIntegration","sessionTimingIntegration","browserProfilingIntegration","moduleMetadataIntegration","WindowWithMaybeIntegration","async","lazyLoadIntegration","scriptNonce","bundle","sentryOnWindow","Sentry","existing","url","baseURL","cdnBaseUrl","URL","toString","getScriptURL","script","createElement","src","crossOrigin","referrerPolicy","setAttribute","waitForLoad","Promise","resolve","reject","currentScript","parent","body","head","parentElement","appendChild","integrationFn","SETUP_CLIENTS","WeakMap","types","handler","reports","has","report","setExtra","label","details","plainBody","crashId","reason","join","trim","setupOnce","supports","ReportingObserver","buffered","observe","setup","set","failedRequestStatusCodes","failedRequestTargets","handlerData","response","virtualError","requestInfo","requestInit","_shouldCaptureResponse","status","request","Request","bodyUsed","_getRequest","requestHeaders","responseHeaders","requestCookies","responseCookies","_shouldSendDefaultPii","_parseCookieHeaders","_createEvent","method","_fetchResponseHandler","_wrapFetch","xhr","sentryXhrData","request_headers","headers","responseURL","cookieString","getResponseHeader","_parseCookieString","getAllResponseHeaders","split","reduce","acc","line","key","_getXHRResponseHeaders","e4","_xhrResponseHandler","logger","_wrapXHR","cookieHeader","result","forEach","_extractFetchHeaders","cookies","toLowerCase","_getResponseSizeFromHeaders","contentLength","parseInt","cookie","some","range","_isInGivenStatusRanges","target","givenRequestTarget","includes","isSentryRequestUrl","data","virtualStackTrace","contexts","status_code","body_size","handled","Boolean","sendDefaultPii","contextLines","frameContextLines","processEvent","doc","htmlFilename","location","href","exceptions","html","documentElement","innerHTML","htmlLines","frame","linesOfContext","filename","lineno","applySourceContextToFrame","addSourceContext","feedbackAsyncIntegration","feedbackSyncIntegration","getModalIntegration","getScreenshotIntegration","metrics","increment","distribution","gauge","timing","unit","promisifyRequest","oncomplete","onsuccess","onabort","onerror","store","getAllKeys","createIndexedDbStore","getStore","dbName","storeName","indexedDB","open","onupgradeneeded","createObjectStore","dbp","callback","then","db","transaction","objectStore","createStore","push","env","serialized","maxQueueSize","put","Math","max","_","unshift","min","shift","deserialized","firstKey","delete","makeBrowserOfflineTransport","createTransport","makeIndexedDbOfflineTransport","MS_TO_NS","THREAD_ID_STRING","String","THREAD_NAME","OS_PLATFORM","OS_PLATFORM_VERSION","OS_ARCH","OS_BROWSER","navigator","userAgent","OS_MODEL","OS_LOCALE","language","languages","userAgentData","enrichWithThreadInformation","profile","isProcessedJSSelfProfile","input","EMPTY_STACK_ID","STACK_ID","samples","stacks","thread_metadata","firstSample","start","timestamp","origin","performance","timeOrigin","adjustForOriginChange","jsSample","i","stackId","elapsed_since_start_ns","toFixed","stack_id","thread_id","stackTop","frameId","function","abs_path","resourceId","resources","colno","column","parentId","sample","convertJSSelfProfileToSampledFormat","createProfilePayload","profile_id","start_timestamp","processed_profile","TypeError","traceId","log","getTraceId","enrichedThreadProfile","transactionStartMs","time","transactionEndMs","Date","toISOString","version","release","environment","runtime","os","build_number","device","locale","model","manufacturer","architecture","is_emulator","debug_meta","images","applyDebugMetadata","transactions","id","trace_id","active_thread_id","relative_start_ns","relative_end_ns","isAutomatedPageLoadSpan","span","op","resource_paths","getHighEntropyValues","ua","platformVersion","fullVersionList","firstUa","brand","catch","PROFILING_CONSTRUCTOR_FAILED","shouldProfileSpan","isRecording","profilesSampleRate","rate","isNaN","JSON","stringify","random","Number","createProfilingEvent","isValidProfile","PROFILE_MAP","Map","takeProfileFromGlobalCache","startProfileForSpan","startTimestamp","profiler","JSProfilerConstructor","Profiler","maxSamples","floor","MAX_PROFILE_DURATION_MS","sampleInterval","maxBufferSize","startJSSelfProfile","description","profileId","onProfileHandler","stop","maxDurationTimeoutID","clearTimeout","size","last","next","addProfileToGlobalCache","setContext","originalEnd","end","bind","activeSpan","rootSpan","on","profiledTransactionEvents","events","item","j","findProfiledTransactionsFromEnvelope","profilesToAddToEnvelope","profiledTransaction","context","profileEvent","profiles","addProfilesToEnvelope","spotlightBrowserIntegration","sidecarUrl","spans","trace","isSpotlightInteraction","afterAllSetup","makeFetch","getNativeImplementation","failCount","mode","res","err","setupSidecarForwarding","FLAG_BUFFER_SIZE","copyFlagsFromScopeToEvent","flagContext","getScopeData","flags","flagBuffer","insertFlagToScope","maxSize","scopeContexts","index","findIndex","f","flag","splice","insertToFlagBuffer","featureFlagsIntegration","_hint","_client","addFeatureFlag","launchDarklyIntegration","buildLaunchDarklyFlagUsedHandler","synchronous","flagKey","flagDetail","_context","openFeatureIntegration","OpenFeatureIntegrationHook","after","_hookContext","evaluationDetails","hookContext","_error","_hookHints","defaultValue","MAX_ALLOWED_STRING_LENGTH","breadcrumbsIntegration","console","dom","fetch","history","sentry","breadcrumb","category","slice","_getConsoleBreadcrumbHandler","componentName","keyAttrs","serializeAttribute","maxStringLength","element","_isEvent","global","_getDomBreadcrumbHandler","endTimestamp","_getXhrBreadcrumbHandler","fetchData","match","_getFetchBreadcrumbHandler","from","to","parsedLoc","parsedFrom","parsedTo","path","protocol","host","relative","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","DEFAULT_EVENT_TARGET","browserApiErrorsIntegration","XMLHttpRequest","eventTarget","requestAnimationFrame","setInterval","_wrapTimeFunction","_wrapRAF","eventTargetOption","_wrapEventTarget","original","originalCallback","originalSend","wrapOptions","originalFunction","targetObj","proto","eventName","handleEvent","originalRemoveEventListener","originalEventHandler","browserSessionIntegration","ignoreDuration","globalHandlersIntegration","onunhandledrejection","stackTraceLimit","msg","ev","ev0","ev0s","ev0sf","in_app","_enhanceEventWithInitialFrame","originalException","_installGlobalOnErrorHandler","globalHandlerLog","detail","_getUnhandledRejectionError","_installGlobalOnUnhandledRejectionHandler","httpContextIntegration","preprocessEvent","referrer","Referer","limit","maxValueLength","getDefaultIntegrations","integrations","autoSessionTracking","init","browserOptions","optionsArg","defaultOptions","defaultIntegrations","__SENTRY_RELEASE__","SENTRY_RELEASE","applyDefaultOptions","skipBrowserExtensionCheck","windowWithMaybeExtension","window","extensionObject","chrome","runtimeId","isDedicatedExtensionPage","top","startsWith","isNWjs","nw","shouldShowBrowserExtensionError","clientOptions","transport","showReportDialog","getClient","user","getUser","eventId","onLoad","onload","onClose","reportDialogClosedMessageHandler","removeEventListener","injectionPoint","forceLoad","createFrame","func","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackLineParser","noFnParts","exec","col","parts","indexOf","subMatch","extractSafariExtensionDetails","geckoREgex","geckoEvalRegex","geckoStackLineParser","winjsRegex","winjsStackLineParser","opera10Regex","opera10StackLineParser","opera11Regex","opera11StackLineParser","defaultStackLineParsers","defaultStackParser","isSafariExtension","isSafariWebExtension","DEFAULT_BROWSER_TRACING_OPTIONS","instrumentNavigation","instrumentPageLoad","markBackgroundSpan","enableLongTask","enableLongAnimationFrame","enableInp","_experiments","browserTracingIntegration","enableInteractions","enableStandaloneClsSpans","beforeStartSpan","idleTimeout","finalTimeout","childSpanTimeout","traceFetch","traceXHR","trackFetchStreamPerformance","shouldCreateSpanForRequest","enableHTTPTimings","_collectWebVitals","recordClsStandaloneSpans","PerformanceObserver","supportedEntryTypes","latestRoute","source","_createRouteSpan","startSpanOptions","isPageloadTransaction","finalStartSpanOptions","attributes","idleSpan","disableAutoFinish","beforeSpanEnd","recordClsOnPageloadSpan","emitFinish","readyState","emit","startingUrl","maybeEndActiveSpan","traceOptions","sentryTrace","getMetaContent","baggage","propagationContext","setPropagationContext","oldPropagationContext","getPropagationContext","sampled","dsc","startBrowserTracingPageLoadSpan","pathname","startTime","startBrowserTracingNavigationSpan","hidden","cancelledStatus","setStatus","inflightInteractionSpan","registerInteractionTransaction","currentRootSpanOp","once","capture","registerInteractionListener","tracePropagationTargets","spanOptions","setTransactionName","metaName","metaTag","getAttribute","responseToSpanId","spanIdToEndTimestamp","defaultRequestInstrumentationOptions","instrumentOutgoingRequests","shouldCreateSpan","shouldAttachHeadersWithTargets","targetUrl","resolvedUrl","currentOrigin","isSameOriginRequest","isRelativeSameOriginRequest","shouldAttachHeaders","updatedTimestamp","span_id","createdSpan","__span","fullUrl","getFullURL","setAttributes","addHTTPTimings","__sentry_own_request__","shouldCreateSpanResult","spanId","__sentry_xhr_span_id__","hasParent","spanContext","sentryTraceHeader","sentryBaggageHeader","setRequestHeader","setHeaderOnXhr","addTracingHeadersToXhrRequest","xhrCallback","cleanup","entries","entry","entryType","nextHopProtocol","initiatorType","isPerformanceResourceTiming","endsWith","resourceTiming","_name","char","extractNetworkProtocol","timingSpanData","getAbsoluteTime","redirectStart","fetchStart","domainLookupStart","domainLookupEnd","connectStart","secureConnectionStart","connectEnd","requestStart","responseStart","responseEnd","resourceTimingEntryToSpanData","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","requestSize","requestOptions","keepalive","fetchOptions","statusCode","createUserFeedbackEnvelope","sent_at","sdk","createUserFeedbackEnvelopeItem"],"sourceRoot":""}