{"version":3,"file":"DSro-Vg3.js","sources":["../../../../node_modules/@sentry/utils/build/esm/aggregate-errors.js","../../../../node_modules/@sentry/utils/build/esm/breadcrumb-log-level.js","../../../../node_modules/@sentry/utils/build/esm/error.js","../../../../node_modules/@sentry/utils/build/esm/instrument/console.js","../../../../node_modules/@sentry/utils/build/esm/env.js","../../../../node_modules/@sentry/utils/build/esm/promisebuffer.js","../../../../node_modules/@sentry/utils/build/esm/severity.js","../../../../node_modules/@sentry/utils/build/esm/clientreport.js","../../../../node_modules/@sentry/utils/build/esm/ratelimit.js","../../../../node_modules/@sentry/core/build/esm/api.js","../../../../node_modules/@sentry/core/build/esm/baseclient.js","../../../../node_modules/@sentry/core/build/esm/sdk.js","../../../../node_modules/@sentry/core/build/esm/transports/base.js","../../../../node_modules/@sentry/core/build/esm/utils/sdkMetadata.js","../../../../node_modules/@sentry/core/build/esm/breadcrumbs.js","../../../../node_modules/@sentry/core/build/esm/integrations/functiontostring.js","../../../../node_modules/@sentry/core/build/esm/integrations/inboundfilters.js","../../../../node_modules/@sentry/core/build/esm/integrations/dedupe.js","../../../../node_modules/@sentry/browser/build/npm/esm/eventbuilder.js","../../../../node_modules/@sentry/browser/build/npm/esm/userfeedback.js","../../../../node_modules/@sentry/browser/build/npm/esm/client.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js","../../../../node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js","../../../../node_modules/@sentry/browser/build/npm/esm/transports/fetch.js","../../../../node_modules/@sentry/browser/build/npm/esm/stack-parsers.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js","../../../../node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js","../../../../node_modules/@sentry/browser/build/npm/esm/sdk.js","../../../../node_modules/@sentry/nuxt/build/esm/client/sdk.js","../../../../sentry.client.config.ts"],"sourcesContent":["import { isInstanceOf } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n exceptionFromErrorImplementation,\n parser,\n maxValueLimit = 250,\n key,\n limit,\n event,\n hint,\n) {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return;\n }\n\n // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n const originalException =\n event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n // We only create exception grouping if there is an exception in the event.\n if (originalException) {\n event.exception.values = truncateAggregateExceptions(\n aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n hint.originalException ,\n key,\n event.exception.values,\n originalException,\n 0,\n ),\n maxValueLimit,\n );\n }\n}\n\nfunction aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error,\n key,\n prevExceptions,\n exception,\n exceptionId,\n) {\n if (prevExceptions.length >= limit + 1) {\n return prevExceptions;\n }\n\n let newExceptions = [...prevExceptions];\n\n // Recursively call this function in order to walk down a chain of errors\n if (isInstanceOf(error[key], Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, error[key]);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n error[key],\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n\n // This will create exception grouping for AggregateErrors\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n if (Array.isArray(error.errors)) {\n error.errors.forEach((childError, i) => {\n if (isInstanceOf(childError, Error)) {\n applyExceptionGroupFieldsForParentException(exception, exceptionId);\n const newException = exceptionFromErrorImplementation(parser, childError);\n const newExceptionId = newExceptions.length;\n applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n newExceptions = aggregateExceptionsFromError(\n exceptionFromErrorImplementation,\n parser,\n limit,\n childError,\n key,\n [newException, ...newExceptions],\n newException,\n newExceptionId,\n );\n }\n });\n }\n\n return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n exception_id: exceptionId,\n };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n exception,\n source,\n exceptionId,\n parentId,\n) {\n // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n exception.mechanism = {\n ...exception.mechanism,\n type: 'chained',\n source,\n exception_id: exceptionId,\n parent_id: parentId,\n };\n}\n\n/**\n * Truncate the message (exception.value) of all exceptions in the event.\n * Because this event processor is ran after `applyClientOptions`,\n * we need to truncate the message of the added exceptions here.\n */\nfunction truncateAggregateExceptions(exceptions, maxValueLength) {\n return exceptions.map(exception => {\n if (exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n return exception;\n });\n}\n\nexport { applyAggregateErrorsToEvent };\n//# sourceMappingURL=aggregate-errors.js.map\n","/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nfunction getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n // NOTE: undefined defaults to 'info' in Sentry\n if (statusCode === undefined) {\n return undefined;\n } else if (statusCode >= 400 && statusCode < 500) {\n return 'warning';\n } else if (statusCode >= 500) {\n return 'error';\n } else {\n return undefined;\n }\n}\n\nexport { getBreadcrumbLogLevelFromHttpStatusCode };\n//# sourceMappingURL=breadcrumb-log-level.js.map\n","/** An error emitted by Sentry SDKs and related utilities. */\nclass SentryError extends Error {\n /** Display name of this error instance. */\n\n constructor( message, logLevel = 'warn') {\n super(message);this.message = message;\n this.name = new.target.prototype.constructor.name;\n // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n // instances of `SentryError` fail `obj instanceof SentryError` checks.\n Object.setPrototypeOf(this, new.target.prototype);\n this.logLevel = logLevel;\n }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { CONSOLE_LEVELS, originalConsoleMethods } from '../logger.js';\nimport { fill } from '../object.js';\nimport { GLOBAL_OBJ } from '../worldwide.js';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers.js';\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n const type = 'console';\n addHandler(type, handler);\n maybeInstrument(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n if (!('console' in GLOBAL_OBJ)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in GLOBAL_OBJ.console)) {\n return;\n }\n\n fill(GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n originalConsoleMethods[level] = originalConsoleMethod;\n\n return function (...args) {\n const handlerData = { args, level };\n triggerHandlers('console', handlerData);\n\n const log = originalConsoleMethods[level];\n log && log.apply(GLOBAL_OBJ.console, args);\n };\n });\n });\n}\n\nexport { addConsoleInstrumentationHandler };\n//# sourceMappingURL=console.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n\nexport { getSDKSource, isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { SentryError } from './error.js';\nimport { rejectedSyncPromise, SyncPromise, resolvedSyncPromise } from './syncpromise.js';\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n const buffer = [];\n\n function isReady() {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike\n * @returns Removed promise.\n */\n function remove(task) {\n return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike; In previous versions this used to be `task:\n * PromiseLike`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer) {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout) {\n return new SyncPromise((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n\nexport { makePromiseBuffer };\n//# sourceMappingURL=promisebuffer.js.map\n","// Note: Ideally the `SeverityLevel` type would be derived from `validSeverityLevels`, but that would mean either\n//\n// a) moving `validSeverityLevels` to `@sentry/types`,\n// b) moving the`SeverityLevel` type here, or\n// c) importing `validSeverityLevels` from here into `@sentry/types`.\n//\n// Option A would make `@sentry/types` a runtime dependency of `@sentry/utils` (not good), and options B and C would\n// create a circular dependency between `@sentry/types` and `@sentry/utils` (also not good). So a TODO accompanying the\n// type, reminding anyone who changes it to change this list also, will have to do.\n\nconst validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n return (level === 'warn' ? 'warning' : validSeverityLevels.includes(level) ? level : 'log') ;\n}\n\nexport { severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { createEnvelope } from './envelope.js';\nimport { dateTimestampInSeconds } from './time.js';\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n discarded_events,\n dsn,\n timestamp,\n) {\n const clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n limits,\n { statusCode, headers },\n now = Date.now(),\n) {\n const updatedRateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n *
,
,..\n * where each
is of the form\n * : : : : \n * where\n * is a delay in seconds\n * is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * ;;...\n * is what's being limited (org, project, or key) - ignored by SDK\n * is an arbitrary string like \"org_quota\" - ignored by SDK\n * Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5) ;\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits };\n//# sourceMappingURL=ratelimit.js.map\n","import { makeDsn, dsnToString, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(\n dsnLike,\n dialogOptions\n\n,\n) {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint };\n//# sourceMappingURL=api.js.map\n","import { makeDsn, logger, uuid4, checkOrSetAlreadyCaught, isParameterizedString, isPrimitive, resolvedSyncPromise, addItemToEnvelope, createAttachmentEnvelopeItem, SyncPromise, dropUndefinedKeys, rejectedSyncPromise, SentryError, createClientReportEnvelope, dsnToString, isThenable, isPlainObject } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { getIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegration, afterSetupIntegrations, setupIntegrations } from './integration.js';\nimport { updateSession } from './session.js';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext.js';\nimport { parseSampleRate } from './utils/parseSampleRate.js';\nimport { prepareEvent } from './utils/prepareEvent.js';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nclass BaseClient {\n /** Options passed to the SDK. */\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n /** Array of set up integrations. */\n\n /** Number of calls being processed */\n\n /** Holds flushable */\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {\n this._options = options;\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n captureException(exception, hint, scope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n currentScope,\n ) {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint, currentScope) {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n captureSession(session) {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n getDsn() {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n getOptions() {\n return this._options;\n }\n\n /**\n * @see SdkMetadata in @sentry/types\n *\n * @return The metadata of the SDK\n */\n getSdkMetadata() {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n getTransport() {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n flush(timeout) {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n close(timeout) {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /** Get all installed event processors. */\n getEventProcessors() {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n addEventProcessor(eventProcessor) {\n this._eventProcessors.push(eventProcessor);\n }\n\n /** @inheritdoc */\n init() {\n if (\n this._isEnabled() ||\n // Force integrations to be setup even if no DSN was set when we have\n // Spotlight enabled. This is particularly important for browser as we\n // don't support the `spotlight` option there and rely on the users\n // adding the `spotlightBrowserIntegration()` to their integrations which\n // wouldn't get initialized with the check below when there's no DSN set.\n this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n ) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n getIntegrationByName(integrationName) {\n return this._integrations[integrationName] ;\n }\n\n /**\n * @inheritDoc\n */\n addIntegration(integration) {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendEvent(event, hint = {}) {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n\n const promise = this.sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendSession(session) {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n recordDroppedEvent(reason, category, eventOrCount) {\n if (this._options.sendClientReports) {\n // TODO v9: We do not need the `event` passed as third argument anymore, and can possibly remove this overload\n // If event is passed as third argument, we assume this is a count of 1\n const count = typeof eventOrCount === 'number' ? eventOrCount : 1;\n\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n this._outcomes[key] = (this._outcomes[key] || 0) + count;\n }\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n on(hook, callback) {\n const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n // @ts-expect-error We assue the types are correct\n hooks.push(callback);\n\n // This function returns a callback execution handler that, when invoked,\n // deregisters a callback. This is crucial for managing instances where callbacks\n // need to be unregistered to prevent self-referencing in callback closures,\n // ensuring proper garbage collection.\n return () => {\n // @ts-expect-error We assue the types are correct\n const cbIndex = hooks.indexOf(callback);\n if (cbIndex > -1) {\n hooks.splice(cbIndex, 1);\n }\n };\n }\n\n /** @inheritdoc */\n\n /** @inheritdoc */\n emit(hook, ...rest) {\n const callbacks = this._hooks[hook];\n if (callbacks) {\n callbacks.forEach(callback => callback(...rest));\n }\n }\n\n /**\n * @inheritdoc\n */\n sendEnvelope(envelope) {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending event:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n _setupIntegrations() {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n _isClientDoneProcessing(timeout) {\n return new SyncPromise(resolve => {\n let ticked = 0;\n const tick = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n _isEnabled() {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(\n event,\n hint,\n currentScope,\n isolationScope = getIsolationScope(),\n ) {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n const propagationContext = {\n ...isolationScope.getPropagationContext(),\n ...(currentScope ? currentScope.getPropagationContext() : undefined),\n };\n\n const trace = evt.contexts && evt.contexts.trace;\n if (!trace && propagationContext) {\n const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n evt.contexts = {\n trace: dropUndefinedKeys({\n trace_id,\n span_id: spanId,\n parent_span_id: parentSpanId,\n }),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n }\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n _captureEvent(event, hint = {}, scope) {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n const sentryError = reason ;\n if (sentryError.logLevel === 'log') {\n logger.log(sentryError.message);\n } else {\n logger.warn(sentryError);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n _processEvent(event, hint, currentScope) {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(this, options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n if (isTransaction) {\n const spans = event.spans || [];\n // the transaction itself counts as one span, plus all the child spans that are added\n const spanCount = 1 + spans.length;\n this.recordDroppedEvent('before_send', 'span', spanCount);\n }\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope && currentScope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n if (isTransaction) {\n const spanCountBefore =\n (processedEvent.sdkProcessingMetadata && processedEvent.sdkProcessingMetadata.spanCountBeforeProcessing) ||\n 0;\n const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n const droppedSpanCount = spanCountBefore - spanCountAfter;\n if (droppedSpanCount > 0) {\n this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n }\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n _process(promise) {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.entries(outcomes).map(([key, quantity]) => {\n const [reason, category] = key.split(':') ;\n return {\n reason,\n category,\n quantity,\n };\n });\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n DEBUG_BUILD && logger.log('Flushing outcomes...');\n\n const outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n DEBUG_BUILD && logger.log('No outcomes to send');\n return;\n }\n\n // This is really the only place where we want to check for a DSN and only send outcomes then\n if (!this._dsn) {\n DEBUG_BUILD && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n DEBUG_BUILD && logger.log('Sending outcomes:', outcomes);\n\n const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult,\n beforeSendLabel,\n) {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n client,\n options,\n event,\n hint,\n) {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event)) {\n if (event.spans && beforeSendSpan) {\n const processedSpans = [];\n for (const span of event.spans) {\n const processedSpan = beforeSendSpan(span);\n if (processedSpan) {\n processedSpans.push(processedSpan);\n } else {\n client.recordDroppedEvent('before_send', 'span');\n }\n }\n event.spans = processedSpans;\n }\n\n if (beforeSendTransaction) {\n if (event.spans) {\n // We store the # of spans before processing in SDK metadata,\n // so we can compare it afterwards to determine how many spans were dropped\n const spanCountBefore = event.spans.length;\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n spanCountBeforeProcessing: spanCountBefore,\n };\n }\n return beforeSendTransaction(event, hint);\n }\n }\n\n return event;\n}\n\nfunction isErrorEvent(event) {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n return event.type === 'transaction';\n}\n\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map\n","import { logger, consoleSandbox } from '@sentry/utils';\nimport { getCurrentScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n clientClass,\n options,\n) {\n if (options.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new clientClass(options);\n setCurrentClient(client);\n client.init();\n return client;\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n getCurrentScope().setClient(client);\n}\n\nexport { initAndBind, setCurrentClient };\n//# sourceMappingURL=sdk.js.map\n","import { makePromiseBuffer, forEachEnvelopeItem, envelopeItemTypeToDataCategory, isRateLimited, resolvedSyncPromise, createEnvelope, SentryError, logger, serializeEnvelope, updateRateLimits } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n options,\n makeRequest,\n buffer = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n) {\n let rateLimits = {};\n const flush = (timeout) => buffer.drain(timeout);\n\n function send(envelope) {\n const filteredEnvelopeItems = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise({});\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason) => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = () =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise({});\n } else {\n throw error;\n }\n },\n );\n }\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item, type) {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item )[1] : undefined;\n}\n\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { SDK_VERSION } from '@sentry/utils';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n const metadata = options._metadata || {};\n\n if (!metadata.sdk) {\n metadata.sdk = {\n name: `sentry.javascript.${name}`,\n packages: names.map(name => ({\n name: `${source}:@sentry/${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n };\n }\n\n options._metadata = metadata;\n}\n\nexport { applySdkMetadata };\n//# sourceMappingURL=sdkMetadata.js.map\n","import { dateTimestampInSeconds, consoleSandbox } from '@sentry/utils';\nimport { getClient, getIsolationScope } from './currentScopes.js';\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nfunction addBreadcrumb(breadcrumb, hint) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n\n if (!client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\nexport { addBreadcrumb };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getOriginalFunction } from '@sentry/utils';\nimport { getClient } from '../currentScopes.js';\nimport { defineIntegration } from '../integration.js';\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n originalFunctionToString = Function.prototype.toString;\n\n // intrinsics (like Function.prototype) might be immutable in some environments\n // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Function.prototype.toString = function ( ...args) {\n const originalFunction = getOriginalFunction(this);\n const context =\n SETUP_CLIENTS.has(getClient() ) && originalFunction !== undefined ? originalFunction : this;\n return originalFunctionToString.apply(context, args);\n };\n } catch (e) {\n // ignore errors here, just don't patch this\n }\n },\n setup(client) {\n SETUP_CLIENTS.set(client, true);\n },\n };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n * integrations: [\n * functionToStringIntegration(),\n * ],\n * });\n * ```\n */\nconst functionToStringIntegration = defineIntegration(_functionToStringIntegration);\n\nexport { functionToStringIntegration };\n//# sourceMappingURL=functiontostring.js.map\n","import { logger, getEventDescription, stringMatchesSomePattern } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { defineIntegration } from '../integration.js';\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n /^Script error\\.?$/,\n /^Javascript error: Script error\\.? on line 0$/,\n /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n \"undefined is not an object (evaluating 'a.L')\", // Random error that happens but not actionable or noticeable to end-users.\n 'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n];\n\n/** Options for the InboundFilters integration */\n\nconst INTEGRATION_NAME = 'InboundFilters';\nconst _inboundFiltersIntegration = ((options = {}) => {\n return {\n name: INTEGRATION_NAME,\n processEvent(event, _hint, client) {\n const clientOptions = client.getOptions();\n const mergedOptions = _mergeOptions(options, clientOptions);\n return _shouldDropEvent(event, mergedOptions) ? null : event;\n },\n };\n}) ;\n\nconst inboundFiltersIntegration = defineIntegration(_inboundFiltersIntegration);\n\nfunction _mergeOptions(\n internalOptions = {},\n clientOptions = {},\n) {\n return {\n allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n ignoreErrors: [\n ...(internalOptions.ignoreErrors || []),\n ...(clientOptions.ignoreErrors || []),\n ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n ],\n ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\nfunction _shouldDropEvent(event, options) {\n if (options.ignoreInternal && _isSentryError(event)) {\n DEBUG_BUILD &&\n logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n return true;\n }\n if (_isIgnoredError(event, options.ignoreErrors)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isUselessError(event)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${getEventDescription(\n event,\n )}`,\n );\n return true;\n }\n if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n if (!_isAllowedUrl(event, options.allowUrls)) {\n DEBUG_BUILD &&\n logger.warn(\n `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${getEventDescription(\n event,\n )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n );\n return true;\n }\n return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n // If event.type, this is not an error\n if (event.type || !ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message => stringMatchesSomePattern(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n if (event.type !== 'transaction' || !ignoreTransactions || !ignoreTransactions.length) {\n return false;\n }\n\n const name = event.transaction;\n return name ? stringMatchesSomePattern(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n const url = _getEventFilterUrl(event);\n return !url ? false : stringMatchesSomePattern(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n const url = _getEventFilterUrl(event);\n return !url ? true : stringMatchesSomePattern(url, allowUrls);\n}\n\nfunction _getPossibleEventMessages(event) {\n const possibleMessages = [];\n\n if (event.message) {\n possibleMessages.push(event.message);\n }\n\n let lastException;\n try {\n // @ts-expect-error Try catching to save bundle size\n lastException = event.exception.values[event.exception.values.length - 1];\n } catch (e) {\n // try catching to save bundle size checking existence of variables\n }\n\n if (lastException) {\n if (lastException.value) {\n possibleMessages.push(lastException.value);\n if (lastException.type) {\n possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n }\n }\n }\n\n return possibleMessages;\n}\n\nfunction _isSentryError(event) {\n try {\n // @ts-expect-error can't be a sentry error if undefined\n return event.exception.values[0].type === 'SentryError';\n } catch (e) {\n // ignore\n }\n return false;\n}\n\nfunction _getLastValidUrl(frames = []) {\n for (let i = frames.length - 1; i >= 0; i--) {\n const frame = frames[i];\n\n if (frame && frame.filename !== '' && frame.filename !== '[native code]') {\n return frame.filename || null;\n }\n }\n\n return null;\n}\n\nfunction _getEventFilterUrl(event) {\n try {\n let frames;\n try {\n // @ts-expect-error we only care about frames if the whole thing here is defined\n frames = event.exception.values[0].stacktrace.frames;\n } catch (e) {\n // ignore\n }\n return frames ? _getLastValidUrl(frames) : null;\n } catch (oO) {\n DEBUG_BUILD && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n\nfunction _isUselessError(event) {\n if (event.type) {\n // event is not an error\n return false;\n }\n\n // We only want to consider events for dropping that actually have recorded exception values.\n if (!event.exception || !event.exception.values || event.exception.values.length === 0) {\n return false;\n }\n\n return (\n // No top-level message\n !event.message &&\n // There are no exception values that have a stacktrace, a non-generic-Error type or value\n !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n );\n}\n\nexport { inboundFiltersIntegration };\n//# sourceMappingURL=inboundfilters.js.map\n","import { logger, getFramesFromEvent } from '@sentry/utils';\nimport { defineIntegration } from '../integration.js';\nimport { DEBUG_BUILD } from '../debug-build.js';\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n let previousEvent;\n\n return {\n name: INTEGRATION_NAME,\n processEvent(currentEvent) {\n // We want to ignore any non-error type events, e.g. transactions or replays\n // These should never be deduped, and also not be compared against as _previousEvent.\n if (currentEvent.type) {\n return currentEvent;\n }\n\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, previousEvent)) {\n DEBUG_BUILD && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {} // eslint-disable-line no-empty\n\n return (previousEvent = currentEvent);\n },\n };\n}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = defineIntegration(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n if (!previousEvent) {\n return false;\n }\n\n if (_isSameMessageEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n return true;\n }\n\n return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n const currentMessage = currentEvent.message;\n const previousMessage = previousEvent.message;\n\n // If neither event has a message property, they were both exceptions, so bail out\n if (!currentMessage && !previousMessage) {\n return false;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n return false;\n }\n\n if (currentMessage !== previousMessage) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n const previousException = _getExceptionFromEvent(previousEvent);\n const currentException = _getExceptionFromEvent(currentEvent);\n\n if (!previousException || !currentException) {\n return false;\n }\n\n if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n return false;\n }\n\n if (!_isSameFingerprint(currentEvent, previousEvent)) {\n return false;\n }\n\n if (!_isSameStacktrace(currentEvent, previousEvent)) {\n return false;\n }\n\n return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n let currentFrames = getFramesFromEvent(currentEvent);\n let previousFrames = getFramesFromEvent(previousEvent);\n\n // If neither event has a stacktrace, they are assumed to be the same\n if (!currentFrames && !previousFrames) {\n return true;\n }\n\n // If only one event has a stacktrace, but not the other one, they are not the same\n if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n return false;\n }\n\n currentFrames = currentFrames ;\n previousFrames = previousFrames ;\n\n // If number of frames differ, they are not the same\n if (previousFrames.length !== currentFrames.length) {\n return false;\n }\n\n // Otherwise, compare the two\n for (let i = 0; i < previousFrames.length; i++) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameA = previousFrames[i];\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const frameB = currentFrames[i];\n\n if (\n frameA.filename !== frameB.filename ||\n frameA.lineno !== frameB.lineno ||\n frameA.colno !== frameB.colno ||\n frameA.function !== frameB.function\n ) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n let currentFingerprint = currentEvent.fingerprint;\n let previousFingerprint = previousEvent.fingerprint;\n\n // If neither event has a fingerprint, they are assumed to be the same\n if (!currentFingerprint && !previousFingerprint) {\n return true;\n }\n\n // If only one event has a fingerprint, but not the other one, they are not the same\n if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n return false;\n }\n\n currentFingerprint = currentFingerprint ;\n previousFingerprint = previousFingerprint ;\n\n // Otherwise, compare the two\n try {\n return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n } catch (_oO) {\n return false;\n }\n}\n\nfunction _getExceptionFromEvent(event) {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\nexport { _shouldDropEvent, dedupeIntegration };\n//# sourceMappingURL=dedupe.js.map\n","import { getClient } from '@sentry/core';\nimport { addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject, isEvent, isParameterizedString, normalizeToSize, extractExceptionKeysForMessage } from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception = {\n type: 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 }\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 { dsnToString, createEnvelope } from '@sentry/utils';\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","import { BaseClient, applySdkMetadata } from '@sentry/core';\nimport { getSDKSource, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { WINDOW } from './helpers.js';\nimport { createUserFeedbackEnvelope } from './userfeedback.js';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see @sentry/types Options for more information.\n */\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends BaseClient {\n /**\n * Creates a new Browser SDK instance.\n *\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n const 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","import { addHandler, maybeInstrument, triggerHandlers, fill, addNonEnumerableProperty, uuid4 } from '@sentry/utils';\nimport { WINDOW } from '../types.js';\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n const type = 'dom';\n addHandler(type, handler);\n maybeInstrument(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n if (!WINDOW.document) {\n return;\n }\n\n // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n const triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n // guaranteed to fire at least once.)\n ['EventTarget', 'Node'].forEach((target) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n const proto = (WINDOW )[target] && (WINDOW )[target].prototype;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (originalAddEventListener) {\n return function (\n\n type,\n listener,\n options,\n ) {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this ;\n const handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n const handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount++;\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalAddEventListener.call(this, type, listener, options);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (originalRemoveEventListener) {\n return function (\n\n type,\n listener,\n options,\n ) {\n if (type === 'click' || type == 'keypress') {\n try {\n const el = this ;\n const handlers = el.__sentry_instrumentation_handlers__ || {};\n const handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount--;\n // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n if (handlerForType.refCount <= 0) {\n originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n handlerForType.handler = undefined;\n delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n }\n\n // If there are no longer any custom handlers of any type on this element, cleanup everything.\n if (Object.keys(handlers).length === 0) {\n delete el.__sentry_instrumentation_handlers__;\n }\n }\n } catch (e) {\n // Accessing dom properties is always fragile.\n // Also allows us to skip `addEventListenrs` calls with no proper `this` context.\n }\n }\n\n return originalRemoveEventListener.call(this, type, listener, options);\n };\n },\n );\n });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (event.type !== lastCapturedEventType) {\n return false;\n }\n\n try {\n // If both events have the same type, it's still possible that actions were performed on different targets.\n // e.g. 2 clicks on different buttons.\n if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n return false;\n }\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n }\n\n // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n // to which an event listener was attached), we treat them as the same action, as we want to capture\n // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n // We are only interested in filtering `keypress` events for now.\n if (eventType !== 'keypress') {\n return false;\n }\n\n if (!target || !target.tagName) {\n return true;\n }\n\n // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n // e.g.tabbing through elements, hotkeys, etc.\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n handler,\n globalListener = false,\n) {\n return (event) => {\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors).\n // Ignore if we've already captured that event.\n if (!event || event['_sentryCaptured']) {\n return;\n }\n\n const target = getEventTarget(event);\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event.type, target)) {\n return;\n }\n\n // Mark event as \"seen\"\n addNonEnumerableProperty(event, '_sentryCaptured', true);\n\n if (target && !target._sentryId) {\n // Add UUID to event target so we can identify if\n addNonEnumerableProperty(target, '_sentryId', uuid4());\n }\n\n const name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n if (!isSimilarToLastCapturedEvent(event)) {\n const handlerData = { event, name, global: globalListener };\n handler(handlerData);\n lastCapturedEventType = event.type;\n lastCapturedEventTargetId = target ? target._sentryId : undefined;\n }\n\n // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n clearTimeout(debounceTimerID);\n debounceTimerID = WINDOW.setTimeout(() => {\n lastCapturedEventTargetId = undefined;\n lastCapturedEventType = undefined;\n }, DEBOUNCE_DURATION);\n };\n}\n\nfunction getEventTarget(event) {\n try {\n return event.target ;\n } catch (e) {\n // just accessing `target` property can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/sentry-javascript/issues/838\n return null;\n }\n}\n\nexport { addClickKeypressInstrumentationHandler, instrumentDOM };\n//# sourceMappingURL=dom.js.map\n","import { isNativeFunction, logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { WINDOW } from './types.js';\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n name,\n) {\n const cached = cachedImplementations[name];\n if (cached) {\n return cached;\n }\n\n let impl = WINDOW[name] ;\n\n // Fast path to avoid DOM I/O\n if (isNativeFunction(impl)) {\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n }\n\n const document = WINDOW.document;\n // eslint-disable-next-line deprecation/deprecation\n if (document && typeof document.createElement === 'function') {\n try {\n const sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n const contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow[name]) {\n impl = contentWindow[name] ;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n // Could not create sandbox iframe, just use window.xxx\n DEBUG_BUILD && logger.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n }\n }\n\n // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n if (!impl) {\n return impl;\n }\n\n return (cachedImplementations[name] = impl.bind(WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n * const p = f.apply(this, arguments);\n *\n * p.then(function() {\n * console.log('hi.');\n * });\n *\n * return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome: Failed to fetch\n * Edge: Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari: resource blocked by content blocker\n */\nfunction fetch(...rest) {\n return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n return getNativeImplementation('setTimeout')(...rest);\n}\n\nexport { clearCachedImplementation, fetch, getNativeImplementation, setTimeout };\n//# sourceMappingURL=getNativeImplementation.js.map\n","import { getNativeImplementation, clearCachedImplementation } from '@sentry-internal/browser-utils';\nimport { createTransport } from '@sentry/core';\nimport { rejectedSyncPromise } from '@sentry/utils';\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. whenfinishing navigation transactions).\n // Gotchas:\n // - `keepalive` isn't supported by Firefox\n // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n // We will therefore only activate the flag when we're below that limit.\n // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n keepalive: pendingBodySize <= 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 `suppresTracing` 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 { createStackParser, UNKNOWN_FUNCTION } from '@sentry/utils';\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, 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 { addClickKeypressInstrumentationHandler, addXhrInstrumentationHandler, addHistoryInstrumentationHandler, SENTRY_XHR_DATA_KEY } from '@sentry-internal/browser-utils';\nimport { defineIntegration, getClient, addBreadcrumb } from '@sentry/core';\nimport { addConsoleInstrumentationHandler, addFetchInstrumentationHandler, getEventDescription, logger, htmlTreeAsString, getComponentName, severityLevelFromString, safeJoin, getBreadcrumbLogLevelFromHttpStatusCode, parseUrl } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build.js';\nimport { WINDOW } from '../helpers.js';\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 creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n client,\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 } from '@sentry/core';\nimport { fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _wrapRAF(original) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function ( callback) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: false,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\nfunction _wrapXHR(originalSend) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const globalObject = WINDOW ;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const proto = globalObject[target] && globalObject[target].prototype;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, no-prototype-builtins\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original,)\n\n {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n eventName,\n fn,\n options,\n ) {\n try {\n if (typeof fn.handleEvent === 'function') {\n // ESlint disable explanation:\n // First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n // introduce a bug here, because bind returns a new function that doesn't have our\n // flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n // Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n });\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n return original.apply(this, [\n eventName,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrap(fn , {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: false,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) {\n return function (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n eventName,\n fn,\n options,\n ) {\n /**\n * There are 2 possible scenarios here:\n *\n * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n * as a pass-through, and call original `removeEventListener` with it.\n *\n * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n *\n * When someone adds a handler prior to initialization, and then do it again, but after,\n * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n * to get rid of the initial handler and it'd stick there forever.\n */\n const wrappedEventHandler = fn ;\n try {\n const originalEventHandler = wrappedEventHandler && wrappedEventHandler.__sentry_wrapped__;\n if (originalEventHandler) {\n originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n }\n } catch (e) {\n // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n }\n return originalRemoveEventListener.call(this, eventName, wrappedEventHandler, options);\n };\n },\n );\n}\n\nexport { browserApiErrorsIntegration };\n//# sourceMappingURL=browserapierrors.js.map\n","import { defineIntegration, getClient, captureEvent } from '@sentry/core';\nimport { addGlobalErrorInstrumentationHandler, addGlobalUnhandledRejectionInstrumentationHandler, isPrimitive, isString, getLocationHref, UNKNOWN_FUNCTION, logger } from '@sentry/utils';\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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _enhanceEventWithInitialFrame(event, url, line, column) {\n // event.exception\n const e = (event.exception = event.exception || {});\n // event.exception.values\n const ev = (e.values = e.values || []);\n // event.exception.values[0]\n const ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n const colno = isNaN(parseInt(column, 10)) ? undefined : column;\n const lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n const filename = isString(url) && url.length > 0 ? url : getLocationHref();\n\n // event.exception.values[0].stacktrace.frames\n if (ev0sf.length === 0) {\n ev0sf.push({\n colno,\n filename,\n function: UNKNOWN_FUNCTION,\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type) {\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 } from '@sentry/core';\nimport { applyAggregateErrorsToEvent } from '@sentry/utils';\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, getIntegrationsToSetup, initAndBind, getCurrentScope, lastEventId, getReportDialogEndpoint, startSession, captureSession, getClient } from '@sentry/core';\nimport { consoleSandbox, supportsFetch, logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport { addHistoryInstrumentationHandler } from '@sentry-internal/browser-utils';\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 { 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 return [\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n browserApiErrorsIntegration(),\n breadcrumbsIntegration(),\n globalHandlersIntegration(),\n linkedErrorsIntegration(),\n dedupeIntegration(),\n httpContextIntegration(),\n ];\n}\n\nfunction applyDefaultOptions(optionsArg = {}) {\n const defaultOptions = {\n defaultIntegrations: getDefaultIntegrations(),\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 (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 const client = initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n\n return client;\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 * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n if (typeof WINDOW.document === 'undefined') {\n DEBUG_BUILD && logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n // The session duration for browser sessions does not track a meaningful\n // concept that can be used as a metric.\n // Automatically captured sessions are akin to page views, and thus we\n // discard their duration.\n startSession({ ignoreDuration: true });\n captureSession();\n\n // We want to create a session for every navigation as well\n addHistoryInstrumentationHandler(({ from, to }) => {\n // Don't create an additional session for the initial route or if the location did not change\n if (from !== undefined && from !== to) {\n startSession({ ignoreDuration: true });\n captureSession();\n }\n });\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n *\n * @deprecated Use `captureFeedback` instead.\n */\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 { getDefaultIntegrations, init as init$1 } from '@sentry/browser';\nimport { applySdkMetadata } from '@sentry/core';\n\n/**\n * Initializes the client-side of the Nuxt SDK\n *\n * @param options Configuration options for the SDK.\n */\nfunction init(options) {\n const sentryOptions = {\n /* BrowserTracing is added later with the Nuxt client plugin */\n defaultIntegrations: [...getDefaultIntegrations(options)],\n ...options,\n };\n\n applySdkMetadata(sentryOptions, 'nuxt', ['nuxt', 'vue']);\n\n return init$1(sentryOptions);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","import * as Sentry from \"@sentry/nuxt\";\n\nSentry.init({\n environment: import.meta.env.VITE_ENV_NAME || 'localhost',\n debug: false,\n dsn: 'https://66ac5f865e724a9a834f7bc536b63363@o4504580912119808.ingest.sentry.io/4504632174837760',\n replaysSessionSampleRate: 0.1,\n replaysOnErrorSampleRate: 1.0,\n tracePropagationTargets: [import.meta.env.VITE_BASE_URL.slice(8), /^\\//],\n tracesSampleRate: 0.25,\n })\n"],"names":["applyAggregateErrorsToEvent","exceptionFromErrorImplementation","parser","maxValueLimit","key","limit","event","hint","isInstanceOf","originalException","truncateAggregateExceptions","aggregateExceptionsFromError","error","prevExceptions","exception","exceptionId","newExceptions","applyExceptionGroupFieldsForParentException","newException","newExceptionId","applyExceptionGroupFieldsForChildException","childError","i","source","parentId","exceptions","maxValueLength","truncate","getBreadcrumbLogLevelFromHttpStatusCode","statusCode","SentryError","message","logLevel","addConsoleInstrumentationHandler","handler","type","addHandler","maybeInstrument","instrumentConsole","GLOBAL_OBJ","CONSOLE_LEVELS","level","fill","originalConsoleMethod","originalConsoleMethods","args","triggerHandlers","log","getSDKSource","makePromiseBuffer","buffer","isReady","remove","task","add","taskProducer","rejectedSyncPromise","drain","timeout","SyncPromise","resolve","reject","counter","capturedSetTimeout","item","resolvedSyncPromise","validSeverityLevels","severityLevelFromString","createClientReportEnvelope","discarded_events","dsn","timestamp","clientReportItem","dateTimestampInSeconds","createEnvelope","DEFAULT_RETRY_AFTER","parseRetryAfterHeader","header","now","headerDelay","headerDate","disabledUntil","limits","dataCategory","isRateLimited","updateRateLimits","headers","updatedRateLimits","rateLimitHeader","retryAfterHeader","retryAfter","categories","namespaces","delay","category","SENTRY_API_VERSION","getBaseApiEndpoint","protocol","port","_getIngestEndpoint","_encodedAuth","sdkInfo","urlEncode","getEnvelopeEndpointWithUrlEncodedAuth","tunnel","ALREADY_SEEN_ERROR","BaseClient","options","makeDsn","DEBUG_BUILD","logger","url","scope","eventId","uuid4","checkOrSetAlreadyCaught","hintWithEventId","currentScope","eventMessage","isParameterizedString","promisedEvent","isPrimitive","capturedSpanScope","session","updateSession","transport","clientFinished","transportFlushed","result","eventProcessor","name","integrationName","integration","isAlreadyInstalled","setupIntegration","afterSetupIntegrations","env","createEventEnvelope","attachment","addItemToEnvelope","createAttachmentEnvelopeItem","promise","sendResponse","createSessionEnvelope","reason","eventOrCount","count","hook","callback","hooks","cbIndex","rest","callbacks","envelope","integrations","setupIntegrations","crashed","errored","ex","mechanism","sessionNonTerminal","ticked","tick","interval","isolationScope","getIsolationScope","prepareEvent","evt","propagationContext","trace_id","spanId","parentSpanId","dsc","dropUndefinedKeys","dynamicSamplingContext","getDynamicSamplingContextFromClient","finalEvent","sentryError","sampleRate","isTransaction","isTransactionEvent","isError","isErrorEvent","eventType","beforeSendLabel","parsedSampleRate","parseSampleRate","capturedSpanIsolationScope","prepared","processBeforeSend","_validateBeforeSendResult","processedEvent","spanCount","spanCountBefore","spanCountAfter","droppedSpanCount","transactionInfo","value","outcomes","quantity","dsnToString","beforeSendResult","invalidValueError","isThenable","isPlainObject","e","client","beforeSend","beforeSendTransaction","beforeSendSpan","processedSpans","span","processedSpan","initAndBind","clientClass","consoleSandbox","getCurrentScope","setCurrentClient","DEFAULT_TRANSPORT_BUFFER_SIZE","createTransport","makeRequest","rateLimits","flush","send","filteredEnvelopeItems","forEachEnvelopeItem","envelopeItemTypeToDataCategory","getEventForEnvelopeItem","filteredEnvelope","recordEnvelopeLoss","requestTask","serializeEnvelope","response","applySdkMetadata","names","metadata","SDK_VERSION","DEFAULT_BREADCRUMBS","addBreadcrumb","breadcrumb","getClient","beforeBreadcrumb","maxBreadcrumbs","mergedBreadcrumb","finalBreadcrumb","originalFunctionToString","INTEGRATION_NAME","SETUP_CLIENTS","_functionToStringIntegration","originalFunction","getOriginalFunction","context","functionToStringIntegration","defineIntegration","DEFAULT_IGNORE_ERRORS","_inboundFiltersIntegration","_hint","clientOptions","mergedOptions","_mergeOptions","_shouldDropEvent","inboundFiltersIntegration","internalOptions","_isSentryError","getEventDescription","_isIgnoredError","_isUselessError","_isIgnoredTransaction","_isDeniedUrl","_getEventFilterUrl","_isAllowedUrl","ignoreErrors","_getPossibleEventMessages","stringMatchesSomePattern","ignoreTransactions","denyUrls","allowUrls","possibleMessages","lastException","_getLastValidUrl","frames","frame","_dedupeIntegration","previousEvent","currentEvent","dedupeIntegration","_isSameMessageEvent","_isSameExceptionEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","previousException","_getExceptionFromEvent","currentException","currentFrames","getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","previousFingerprint","exceptionFromError","stackParser","parseStackFrames","extractType","extractMessage","eventFromPlainObject","syntheticException","isUnhandledRejection","normalizeDepth","errorFromProp","getErrorPropertyFromObject","extra","normalizeToSize","isEvent","getNonErrorObjectExceptionValue","eventFromError","stacktrace","skipLines","getSkipFirstStackStringLines","framesToPop","getPopFirstTopFrames","reactMinifiedRegexp","isWebAssemblyException","eventFromException","attachStacktrace","eventFromUnknownInput","addExceptionMechanism","eventFromMessage","eventFromString","isDOMError","isDOMException","domException","addExceptionTypeValue","__sentry_template_string__","__sentry_template_values__","keys","extractExceptionKeysForMessage","captureType","getObjectClassName","obj","prototype","prop","createUserFeedbackEnvelope","feedback","createUserFeedbackEnvelopeItem","BrowserClient","opts","sdkSource","WINDOW","DEBOUNCE_DURATION","debounceTimerID","lastCapturedEventType","lastCapturedEventTargetId","addClickKeypressInstrumentationHandler","instrumentDOM","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","target","proto","originalAddEventListener","listener","el","handlers","handlerForType","originalRemoveEventListener","isSimilarToLastCapturedEvent","shouldSkipDOMEvent","globalListener","getEventTarget","addNonEnumerableProperty","cachedImplementations","getNativeImplementation","cached","impl","isNativeFunction","document","sandbox","contentWindow","clearCachedImplementation","makeFetchTransport","nativeFetch","pendingBodySize","pendingCount","request","requestSize","requestOptions","CHROME_PRIORITY","GECKO_PRIORITY","createFrame","filename","func","lineno","colno","UNKNOWN_FUNCTION","chromeRegexNoFnName","chromeRegex","chromeEvalRegex","chromeStackParserFn","line","noFnParts","col","parts","subMatch","extractSafariExtensionDetails","chromeStackLineParser","geckoREgex","geckoEvalRegex","gecko","geckoStackLineParser","defaultStackLineParsers","defaultStackParser","createStackParser","isSafariExtension","isSafariWebExtension","MAX_ALLOWED_STRING_LENGTH","_breadcrumbsIntegration","_options","_getConsoleBreadcrumbHandler","_getDomBreadcrumbHandler","addXhrInstrumentationHandler","_getXhrBreadcrumbHandler","addFetchInstrumentationHandler","_getFetchBreadcrumbHandler","addHistoryInstrumentationHandler","_getHistoryBreadcrumbHandler","_getSentryBreadcrumbHandler","breadcrumbsIntegration","dom","handlerData","componentName","keyAttrs","maxStringLength","element","_isEvent","htmlTreeAsString","getComponentName","safeJoin","startTimestamp","endTimestamp","sentryXhrData","SENTRY_XHR_DATA_KEY","method","status_code","body","data","from","to","parsedLoc","parseUrl","parsedFrom","parsedTo","DEFAULT_EVENT_TARGET","_browserApiErrorsIntegration","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","browserApiErrorsIntegration","original","originalCallback","wrap","getFunctionName","originalSend","xhr","wrapOptions","globalObject","eventName","fn","wrappedEventHandler","originalEventHandler","_globalHandlersIntegration","_installGlobalOnErrorHandler","globalHandlerLog","_installGlobalOnUnhandledRejectionHandler","globalHandlersIntegration","addGlobalErrorInstrumentationHandler","getOptions","shouldIgnoreOnError","msg","column","_enhanceEventWithInitialFrame","captureEvent","addGlobalUnhandledRejectionInstrumentationHandler","_getUnhandledRejectionError","_eventFromRejectionWithPrimitive","ev","ev0","ev0s","ev0sf","isString","getLocationHref","httpContextIntegration","referrer","userAgent","DEFAULT_KEY","DEFAULT_LIMIT","_linkedErrorsIntegration","linkedErrorsIntegration","getDefaultIntegrations","applyDefaultOptions","optionsArg","defaultOptions","shouldShowBrowserExtensionError","windowWithMaybeExtension","extensionKey","extensionObject","runtimeId","href","extensionProtocols","isDedicatedExtensionPage","isNWjs","init","browserOptions","supportsFetch","stackParserFromStackParserOptions","getIntegrationsToSetup","startSessionTracking","startSession","captureSession","sentryOptions","init$1","Sentry.init"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]}