{"version":3,"file":"static/chunks/pages/_app-4a4df399b92c29c5.js","mappings":"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","sources":["webpack://_N_E/./node_modules/@sentry/core/esm/integrations/inboundfilters.js","webpack://_N_E/./node_modules/@sentry/core/esm/integrations/functiontostring.js","webpack://_N_E/./node_modules/@sentry/core/esm/integration.js","webpack://_N_E/./node_modules/@sentry/utils/esm/error.js","webpack://_N_E/./node_modules/@sentry/utils/esm/dsn.js","webpack://_N_E/./node_modules/@sentry/utils/esm/envelope.js","webpack://_N_E/./node_modules/@sentry/utils/esm/normalize.js","webpack://_N_E/./node_modules/@sentry/utils/esm/memo.js","webpack://_N_E/./node_modules/@sentry/core/esm/api.js","webpack://_N_E/./node_modules/@sentry/core/esm/envelope.js","webpack://_N_E/./node_modules/@sentry/core/esm/baseclient.js","webpack://_N_E/./node_modules/@sentry/browser/esm/eventbuilder.js","webpack://_N_E/./node_modules/@sentry/utils/esm/severity.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/breadcrumbs.js","webpack://_N_E/./node_modules/@sentry/browser/esm/transports/utils.js","webpack://_N_E/./node_modules/@sentry/browser/esm/client.js","webpack://_N_E/./node_modules/@sentry/utils/esm/clientreport.js","webpack://_N_E/./node_modules/@sentry/browser/esm/stack-parsers.js","webpack://_N_E/./node_modules/@sentry/browser/esm/helpers.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/trycatch.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/globalhandlers.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/linkederrors.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/dedupe.js","webpack://_N_E/./node_modules/@sentry/browser/esm/integrations/httpcontext.js","webpack://_N_E/./node_modules/@sentry/utils/esm/promisebuffer.js","webpack://_N_E/./node_modules/@sentry/utils/esm/ratelimit.js","webpack://_N_E/./node_modules/@sentry/core/esm/transports/base.js","webpack://_N_E/./node_modules/@sentry/browser/esm/transports/fetch.js","webpack://_N_E/./node_modules/@sentry/browser/esm/transports/xhr.js","webpack://_N_E/./node_modules/@sentry/browser/esm/sdk.js","webpack://_N_E/./node_modules/@sentry/core/esm/sdk.js","webpack://_N_E/./node_modules/@sentry/core/esm/version.js","webpack://_N_E/./node_modules/@sentry/hub/esm/exports.js","webpack://_N_E/./node_modules/@sentry/hub/esm/hub.js","webpack://_N_E/./node_modules/@sentry/hub/esm/scope.js","webpack://_N_E/./node_modules/@sentry/hub/esm/session.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/errors.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/hubextensions.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/idletransaction.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/span.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/transaction.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/utils.js","webpack://_N_E/./node_modules/@sentry/utils/esm/baggage.js","webpack://_N_E/./node_modules/@sentry/utils/esm/browser.js","webpack://_N_E/./node_modules/@sentry/utils/esm/buildPolyfills/_nullishCoalesce.js","webpack://_N_E/./node_modules/@sentry/utils/esm/global.js","webpack://_N_E/./node_modules/@sentry/utils/esm/instrument.js","webpack://_N_E/./node_modules/@sentry/utils/esm/is.js","webpack://_N_E/./node_modules/@sentry/utils/esm/logger.js","webpack://_N_E/./node_modules/@sentry/utils/esm/misc.js","webpack://_N_E/./node_modules/@sentry/utils/esm/node.js","webpack://_N_E/./node_modules/@sentry/utils/esm/env.js","webpack://_N_E/./node_modules/@sentry/utils/esm/object.js","webpack://_N_E/./node_modules/@sentry/utils/esm/stacktrace.js","webpack://_N_E/./node_modules/@sentry/utils/esm/string.js","webpack://_N_E/./node_modules/@sentry/utils/esm/supports.js","webpack://_N_E/./node_modules/@sentry/utils/esm/syncpromise.js","webpack://_N_E/./node_modules/@sentry/utils/esm/time.js","webpack://_N_E/./node_modules/@sentry/webpack-plugin/src/sentry-webpack.module.js","webpack://_N_E/./node_modules/bezier-easing/src/index.js","webpack://_N_E/?ed95","webpack://_N_E/./context/index.js","webpack://_N_E/./pages/_app.js","webpack://_N_E/./node_modules/@sentry/utils/esm/tracing.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/backgroundtab.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/bindReporter.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/initMetric.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/generateUniqueID.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/observe.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/onHidden.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/lib/getVisibilityWatcher.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/getLCP.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/metrics/utils.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/metrics/index.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/getCLS.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/web-vitals/getFID.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/request.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/router.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/browser/browsertracing.js","webpack://_N_E/./node_modules/@sentry/tracing/esm/index.js","webpack://_N_E/./node_modules/@sentry/nextjs/esm/performance/client.js","webpack://_N_E/./node_modules/@sentry/nextjs/esm/utils/userIntegrations.js","webpack://_N_E/./node_modules/@sentry/nextjs/esm/index.client.js","webpack://_N_E/./node_modules/@sentry/nextjs/esm/utils/metadata.js","webpack://_N_E/./node_modules/@sentry/react/esm/sdk.js","webpack://_N_E/./sentry.client.config.js","webpack://_N_E/./node_modules/next/head.js","webpack://_N_E/./node_modules/next/router.js","webpack://_N_E/./node_modules/process/browser.js","webpack://_N_E/./node_modules/parallax-controller/dist/parallax-controller.esm.js","webpack://_N_E/./node_modules/react-scroll-parallax/dist/react-scroll-parallax.esm.js","webpack://_N_E/./node_modules/@swc/helpers/src/_define_property.mjs","webpack://_N_E/./node_modules/@swc/helpers/src/_object_spread.mjs","webpack://_N_E/./node_modules/@swc/helpers/src/_object_spread_props.mjs"],"sourcesContent":["import { logger, getEventDescription, isMatchingPattern } from '@sentry/utils';\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.\nvar DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\n/** Options for the InboundFilters integration */\n\n/** Inbound filters configurable by the user */\nclass InboundFilters {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'InboundFilters';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = InboundFilters.id;}\n\n constructor( _options = {}) {;this._options = _options;InboundFilters.prototype.__init.call(this);}\n\n /**\n * @inheritDoc\n */\n setupOnce(addGlobalEventProcessor, getCurrentHub) {\n var eventProcess = (event) => {\n var hub = getCurrentHub();\n if (hub) {\n var self = hub.getIntegration(InboundFilters);\n if (self) {\n var client = hub.getClient();\n var clientOptions = client ? client.getOptions() : {};\n var options = _mergeOptions(self._options, clientOptions);\n return _shouldDropEvent(event, options) ? null : event;\n }\n }\n return event;\n };\n\n eventProcess.id = this.name;\n addGlobalEventProcessor(eventProcess);\n }\n} InboundFilters.__initStatic();\n\n/** JSDoc */\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 ...DEFAULT_IGNORE_ERRORS,\n ],\n ignoreInternal: internalOptions.ignoreInternal !== undefined ? internalOptions.ignoreInternal : true,\n };\n}\n\n/** JSDoc */\nfunction _shouldDropEvent(event, options) {\n if (options.ignoreInternal && _isSentryError(event)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\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 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(\n `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n );\n return true;\n }\n if (_isDeniedUrl(event, options.denyUrls)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\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 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\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 (!ignoreErrors || !ignoreErrors.length) {\n return false;\n }\n\n return _getPossibleEventMessages(event).some(message =>\n ignoreErrors.some(pattern => isMatchingPattern(message, pattern)),\n );\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n // TODO: Use Glob instead?\n if (!denyUrls || !denyUrls.length) {\n return false;\n }\n var url = _getEventFilterUrl(event);\n return !url ? false : denyUrls.some(pattern => isMatchingPattern(url, pattern));\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n // TODO: Use Glob instead?\n if (!allowUrls || !allowUrls.length) {\n return true;\n }\n var url = _getEventFilterUrl(event);\n return !url ? true : allowUrls.some(pattern => isMatchingPattern(url, pattern));\n}\n\nfunction _getPossibleEventMessages(event) {\n if (event.message) {\n return [event.message];\n }\n if (event.exception) {\n try {\n const { type = '', value = '' } = (event.exception.values && event.exception.values[0]) || {};\n return [`${value}`, `${type}: ${value}`];\n } catch (oO) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(`Cannot extract message for event ${getEventDescription(event)}`);\n return [];\n }\n }\n return [];\n}\n\nfunction _isSentryError(event) {\n try {\n // @ts-ignore 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 var 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-ignore 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 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n return null;\n }\n}\n\nexport { InboundFilters, _mergeOptions, _shouldDropEvent };\n//# sourceMappingURL=inboundfilters.js.map\n","import { getOriginalFunction } from '@sentry/utils';\n\nlet originalFunctionToString;\n\n/** Patch toString calls to return proper name for wrapped functions */\nclass FunctionToString {constructor() { FunctionToString.prototype.__init.call(this); }\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'FunctionToString';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = FunctionToString.id;}\n\n /**\n * @inheritDoc\n */\n setupOnce() {\n originalFunctionToString = Function.prototype.toString;\n\n Function.prototype.toString = function ( ...args) {\n var context = getOriginalFunction(this) || this;\n return originalFunctionToString.apply(context, args);\n };\n }\n} FunctionToString.__initStatic();\n\nexport { FunctionToString };\n//# sourceMappingURL=functiontostring.js.map\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { logger } from '@sentry/utils';\n\nvar installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * @private\n */\nfunction filterDuplicates(integrations) {\n return integrations.reduce((acc, integrations) => {\n if (acc.every(accIntegration => integrations.name !== accIntegration.name)) {\n acc.push(integrations);\n }\n return acc;\n }, [] );\n}\n\n/** Gets integration to install */\nfunction getIntegrationsToSetup(options) {\n var defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];\n var userIntegrations = options.integrations;\n\n let integrations = [...filterDuplicates(defaultIntegrations)];\n\n if (Array.isArray(userIntegrations)) {\n // Filter out integrations that are also included in user options\n integrations = [\n ...integrations.filter(integrations =>\n userIntegrations.every(userIntegration => userIntegration.name !== integrations.name),\n ),\n // And filter out duplicated user options integrations\n ...filterDuplicates(userIntegrations),\n ];\n } else if (typeof userIntegrations === 'function') {\n integrations = userIntegrations(integrations);\n integrations = Array.isArray(integrations) ? integrations : [integrations];\n }\n\n // Make sure that if present, `Debug` integration will always run last\n var integrationsNames = integrations.map(i => i.name);\n var alwaysLastToRun = 'Debug';\n if (integrationsNames.indexOf(alwaysLastToRun) !== -1) {\n integrations.push(...integrations.splice(integrationsNames.indexOf(alwaysLastToRun), 1));\n }\n\n return integrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(integrations) {\n var integrationIndex = {};\n\n integrations.forEach(integration => {\n integrationIndex[integration.name] = integration;\n\n if (installedIntegrations.indexOf(integration.name) === -1) {\n integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n installedIntegrations.push(integration.name);\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`Integration installed: ${integration.name}`);\n }\n });\n\n return integrationIndex;\n}\n\nexport { getIntegrationsToSetup, installedIntegrations, setupIntegrations };\n//# sourceMappingURL=integration.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\n constructor( message) {\n super(message);this.message = message;;\n\n this.name = new.target.prototype.constructor.name;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport { SentryError };\n//# sourceMappingURL=error.js.map\n","import { SentryError } from './error.js';\n\n/** Regular expression used to parse a Dsn. */\nvar DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents\n */\nfunction dsnFromString(str) {\n var match = DSN_REGEX.exec(str);\n\n if (!match) {\n throw new SentryError(`Invalid Sentry Dsn: ${str}`);\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n var split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() ;\n }\n\n if (projectId) {\n var projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn) {\n if (!(typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n return;\n }\n\n const { port, projectId, protocol } = dsn;\n\n var requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n requiredComponents.forEach(component => {\n if (!dsn[component]) {\n throw new SentryError(`Invalid Sentry Dsn: ${component} missing`);\n }\n });\n\n if (!projectId.match(/^\\d+$/)) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n }\n\n if (!isValidProtocol(protocol)) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n throw new SentryError(`Invalid Sentry Dsn: Invalid port ${port}`);\n }\n\n return true;\n}\n\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nfunction makeDsn(from) {\n var components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n validateDsn(components);\n return components;\n}\n\nexport { dsnFromString, dsnToString, makeDsn };\n//# sourceMappingURL=dsn.js.map\n","import { dropUndefinedKeys } from './object.js';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n */\nfunction forEachEnvelopeItem(\n envelope,\n callback,\n) {\n var envelopeItems = envelope[1];\n envelopeItems.forEach((envelopeItem) => {\n var envelopeItemType = envelopeItem[0].type;\n callback(envelopeItem, envelopeItemType);\n });\n}\n\nfunction encodeUTF8(input, textEncoder) {\n var utf8 = textEncoder || new TextEncoder();\n return utf8.encode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope, textEncoder) {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts = JSON.stringify(envHeaders);\n\n function append(next) {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next);\n }\n }\n\n for (var item of items) {\n const [itemHeaders, payload] = item ;\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n append(typeof payload === 'string' || payload instanceof Uint8Array ? payload : JSON.stringify(payload));\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n var totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n var merged = new Uint8Array(totalLength);\n let offset = 0;\n for (var buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(\n attachment,\n textEncoder,\n) {\n var buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nvar ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, envelopeItemTypeToDataCategory, forEachEnvelopeItem, serializeEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { isNaN, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output..\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\nfunction normalize(input, depth = +Infinity, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n var normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (value === null || (['number', 'boolean', 'string'].includes(typeof value) && !isNaN(value))) {\n return value ;\n }\n\n var stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We're also done if we've reached the max depth\n if (depth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n var valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n var jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, depth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n var normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n var visitable = convertToPlainObject(value );\n\n for (var visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n var visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, depth - 1, maxProperties, memo);\n\n numAdded += 1;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n // this catches `undefined` (but not `null`, which is a primitive and can be serialized on its own)\n if (value === void 0) {\n return '[undefined]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n return `[object ${(Object.getPrototypeOf(value) ).constructor.name}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nexport { normalize, normalizeToSize, visit as walk };\n//# sourceMappingURL=normalize.js.map\n","/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n var hasWeakSet = typeof WeakSet === 'function';\n var inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n for (let i = 0; i < inner.length; i++) {\n var value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { urlEncode, makeDsn, dsnToString } from '@sentry/utils';\n\nvar SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n var protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n var 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(\n dsn,\n // TODO (v8): Remove `tunnelOrOptions` in favor of `options`, and use the substitute code below\n // options: ClientOptions = {} as ClientOptions,\n tunnelOrOptions = {} ,\n) {\n // TODO (v8): Use this code instead\n // const { tunnel, _metadata = {} } = options;\n // return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, _metadata.sdk)}`;\n\n var tunnel = typeof tunnelOrOptions === 'string' ? tunnelOrOptions : tunnelOrOptions.tunnel;\n var sdkInfo =\n typeof tunnelOrOptions === 'string' || !tunnelOrOptions._metadata ? undefined : tunnelOrOptions._metadata.sdk;\n\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 var dsn = makeDsn(dsnLike);\n var endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (var key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'user') {\n var 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 { dsnToString, createEnvelope, dropUndefinedKeys, getSentryBaggageItems } from '@sentry/utils';\n\n/** Extract sdk info from from the API metadata */\nfunction getSdkMetadataForEnvelopeHeader(metadata) {\n if (!metadata || !metadata.sdk) {\n return;\n }\n const { name, version } = metadata.sdk;\n return { name, version };\n}\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n session,\n dsn,\n metadata,\n tunnel,\n) {\n var sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n var envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && { dsn: dsnToString(dsn) }),\n };\n\n var envelopeItem =\n 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session];\n\n return createEnvelope(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n event,\n dsn,\n metadata,\n tunnel,\n) {\n var sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n var eventType = event.type || 'event';\n\n const { transactionSampling } = event.sdkProcessingMetadata || {};\n const { method: samplingMethod, rate: sampleRate } = transactionSampling || {};\n\n enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n var envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete event.sdkProcessingMetadata;\n\n var eventItem = [\n {\n type: eventType,\n sample_rates: [{ id: samplingMethod, rate: sampleRate }],\n },\n event,\n ];\n return createEnvelope(envelopeHeaders, [eventItem]);\n}\n\nfunction createEventEnvelopeHeaders(\n event,\n sdkInfo,\n tunnel,\n dsn,\n) {\n var baggage = event.sdkProcessingMetadata && event.sdkProcessingMetadata.baggage;\n var dynamicSamplingContext = baggage && getSentryBaggageItems(baggage);\n\n return {\n event_id: event.event_id ,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && { dsn: dsnToString(dsn) }),\n ...(event.type === 'transaction' &&\n dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }) ,\n }),\n };\n}\n\nexport { createEventEnvelope, createSessionEnvelope };\n//# sourceMappingURL=envelope.js.map\n","import { updateSession, Scope } from '@sentry/hub';\nimport { makeDsn, logger, checkOrSetAlreadyCaught, isPrimitive, resolvedSyncPromise, addItemToEnvelope, createAttachmentEnvelopeItem, SyncPromise, uuid4, dateTimestampInSeconds, normalize, truncate, rejectedSyncPromise, SentryError, isThenable, isPlainObject } from '@sentry/utils';\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api.js';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope.js';\nimport { setupIntegrations } from './integration.js';\n\nvar 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\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n \n\n /** Array of set up integrations. */\n __init() {this._integrations = {};}\n\n /** Indicates whether this client's integrations have been set up. */\n __init2() {this._integrationsInitialized = false;}\n\n /** Number of calls being processed */\n __init3() {this._numProcessing = 0;}\n\n /** Holds flushable */\n __init4() {this._outcomes = {};}\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n constructor(options) {;BaseClient.prototype.__init.call(this);BaseClient.prototype.__init2.call(this);BaseClient.prototype.__init3.call(this);BaseClient.prototype.__init4.call(this);\n this._options = options;\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n var url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, options);\n this._transport = options.transport({\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('No DSN provided, client will not do anything.');\n }\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint, scope) {\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId = hint && hint.event_id;\n\n this._process(\n this.eventFromException(exception, hint)\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n scope,\n ) {\n let eventId = hint && hint.event_id;\n\n var promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(String(message), level, hint)\n : this.eventFromException(message, hint);\n\n this._process(\n promisedEvent\n .then(event => this._captureEvent(event, hint, scope))\n .then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint, scope) {\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(ALREADY_SEEN_ERROR);\n return;\n }\n\n let eventId = hint && hint.event_id;\n\n this._process(\n this._captureEvent(event, hint, scope).then(result => {\n eventId = result;\n }),\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureSession(session) {\n if (!this._isEnabled()) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('SDK not enabled, will not capture session.');\n return;\n }\n\n if (!(typeof session.release === 'string')) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && 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 * @inheritDoc\n */\n getTransport() {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n flush(timeout) {\n var transport = this._transport;\n if (transport) {\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 return result;\n });\n }\n\n /**\n * Sets up the integrations\n */\n setupIntegrations() {\n if (this._isEnabled() && !this._integrationsInitialized) {\n this._integrations = setupIntegrations(this._options.integrations);\n this._integrationsInitialized = true;\n }\n }\n\n /**\n * Gets an installed integration by its `id`.\n *\n * @returns The installed integration or `undefined` if no integration with that `id` was installed.\n */\n getIntegrationById(integrationId) {\n return this._integrations[integrationId];\n }\n\n /**\n * @inheritDoc\n */\n getIntegration(integration) {\n try {\n return (this._integrations[integration.id] ) || null;\n } catch (_oO) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n sendEvent(event, hint = {}) {\n if (this._dsn) {\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (var attachment of hint.attachments || []) {\n env = addItemToEnvelope(\n env,\n createAttachmentEnvelopeItem(\n attachment,\n this._options.transportOptions && this._options.transportOptions.textEncoder,\n ),\n );\n }\n\n this._sendEnvelope(env);\n }\n }\n\n /**\n * @inheritDoc\n */\n sendSession(session) {\n if (this._dsn) {\n var env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n this._sendEnvelope(env);\n }\n }\n\n /**\n * @inheritDoc\n */\n recordDroppedEvent(reason, category) {\n if (this._options.sendClientReports) {\n // We want to track each category (error, transaction, session) 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 var key = `${reason}:${category}`;\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`Adding outcome: \"${key}\"`);\n\n // The following works because undefined + 1 === NaN and NaN is falsy\n this._outcomes[key] = this._outcomes[key] + 1 || 1;\n }\n }\n\n /** Updates existing session based on the provided event */\n _updateSessionFromEvent(session, event) {\n let crashed = false;\n let errored = false;\n var exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (var ex of exceptions) {\n var 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 var sessionNonTerminal = session.status === 'ok';\n var 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 var tick = 1;\n\n var 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 valid Dsn is present. */\n _isEnabled() {\n return this.getOptions().enabled !== false && this._dsn !== 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 scope A scope containing event metadata.\n * @returns A new event with more information.\n */\n _prepareEvent(event, hint, scope) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = this.getOptions();\n var prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n\n this._applyClientOptions(prepared);\n this._applyIntegrationsMetadata(prepared);\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n let finalScope = scope;\n if (hint.captureContext) {\n finalScope = Scope.clone(finalScope).update(hint.captureContext);\n }\n\n // We prepare the result here with a resolved Event.\n let result = resolvedSyncPromise(prepared);\n\n // This should be the last thing called, since we want that\n // {@link Hub.addEventProcessor} gets the finished prepared event.\n if (finalScope) {\n // Collect attachments from the hint and scope\n var attachments = [...(hint.attachments || []), ...finalScope.getAttachments()];\n\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n // In case we have a hub we reassign it.\n result = finalScope.applyToEvent(prepared, hint);\n }\n\n return result.then(evt => {\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return this._normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n }\n\n /**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\n _normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n var normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n // We cannot use the spread operator here because `toJSON` on `span` is non-enumerable\n if (span.data) {\n span.data = normalize(span.data, depth, maxBreadth);\n }\n return span;\n });\n }\n\n return normalized;\n }\n\n /**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\n _applyClientOptions(event) {\n var options = this.getOptions();\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : 'production';\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n var exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n var request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n }\n\n /**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\n _applyIntegrationsMetadata(event) {\n var integrationsArray = Object.keys(this._integrations);\n if (integrationsArray.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationsArray];\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 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(reason);\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 scope 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, scope) {\n const { beforeSend, sampleRate } = this.getOptions();\n\n if (!this._isEnabled()) {\n return rejectedSyncPromise(new SentryError('SDK not enabled, will not capture event.'));\n }\n\n var isTransaction = event.type === 'transaction';\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n if (!isTransaction && typeof sampleRate === 'number' && Math.random() > sampleRate) {\n this.recordDroppedEvent('sample_rate', 'error');\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n ),\n );\n }\n\n return this._prepareEvent(event, hint, scope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', event.type || 'error');\n throw new SentryError('An event processor returned null, will not send event.');\n }\n\n var isInternalException = hint.data && (hint.data ).__sentry__ === true;\n if (isInternalException || isTransaction || !beforeSend) {\n return prepared;\n }\n\n var beforeSendResult = beforeSend(prepared, hint);\n return _ensureBeforeSendRv(beforeSendResult);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', event.type || 'error');\n throw new SentryError('`beforeSend` returned `null`, will not send event.');\n }\n\n var session = scope && scope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\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 += 1;\n void promise.then(\n value => {\n this._numProcessing -= 1;\n return value;\n },\n reason => {\n this._numProcessing -= 1;\n return reason;\n },\n );\n }\n\n /**\n * @inheritdoc\n */\n _sendEnvelope(envelope) {\n if (this._transport && this._dsn) {\n this._transport.send(envelope).then(null, reason => {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Error while sending event:', reason);\n });\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Transport disabled');\n }\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n _clearOutcomes() {\n var outcomes = this._outcomes;\n this._outcomes = {};\n return Object.keys(outcomes).map(key => {\n const [reason, category] = key.split(':') ;\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n });\n }\n\n /**\n * @inheritDoc\n */\n \n\n}\n\n/**\n * Verifies that return value of configured `beforeSend` is of expected type.\n */\nfunction _ensureBeforeSendRv(rv) {\n var nullErr = '`beforeSend` method has to return `null` or a valid event.';\n if (isThenable(rv)) {\n return rv.then(\n event => {\n if (!(isPlainObject(event) || event === null)) {\n throw new SentryError(nullErr);\n }\n return event;\n },\n e => {\n throw new SentryError(`beforeSend rejected with ${e}`);\n },\n );\n } else if (!(isPlainObject(rv) || rv === null)) {\n throw new SentryError(nullErr);\n }\n return rv;\n}\n\nexport { BaseClient };\n//# sourceMappingURL=baseclient.js.map\n","import { isEvent, extractExceptionKeysForMessage, normalizeToSize, addExceptionMechanism, resolvedSyncPromise, isErrorEvent, isDOMError, isDOMException, addExceptionTypeValue, isError, isPlainObject } 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 var frames = parseStackFrames(stackParser, ex);\n\n var exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nfunction eventFromPlainObject(\n stackParser,\n exception,\n syntheticException,\n isUnhandledRejection,\n) {\n var event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n isUnhandledRejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n var frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception ).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromError(stackParser, ex) {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n stackParser,\n ex,\n) {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n var stacktrace = ex.stacktrace || ex.stack || '';\n\n var popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nvar reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex) {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n var message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n stackParser,\n exception,\n hint,\n attachStacktrace,\n) {\n var syntheticException = (hint && hint.syntheticException) || undefined;\n var 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 var syntheticException = (hint && hint.syntheticException) || undefined;\n var 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 var 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 var domException = exception ;\n\n if ('stack' in (exception )) {\n event = eventFromError(stackParser, exception );\n } else {\n var name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n var 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 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 var objectException = exception ;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nfunction eventFromString(\n stackParser,\n input,\n syntheticException,\n attachStacktrace,\n) {\n var event = {\n message: input,\n };\n\n if (attachStacktrace && syntheticException) {\n var frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: input, stacktrace: { frames } }],\n };\n }\n }\n\n return event;\n}\n\nexport { eventFromError, eventFromException, eventFromMessage, eventFromPlainObject, eventFromString, eventFromUnknownInput, exceptionFromError, parseStackFrames };\n//# sourceMappingURL=eventbuilder.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\nvar validSeverityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'];\n\n/**\n * Converts a string-based level into a member of the deprecated {@link Severity} enum.\n *\n * @deprecated `severityFromString` is deprecated. Please use `severityLevelFromString` instead.\n *\n * @param level String representation of Severity\n * @returns Severity\n */\nfunction severityFromString(level) {\n return severityLevelFromString(level) ;\n}\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 { severityFromString, severityLevelFromString, validSeverityLevels };\n//# sourceMappingURL=severity.js.map\n","import { getCurrentHub } from '@sentry/core';\nimport { addInstrumentationHandler, htmlTreeAsString, severityLevelFromString, safeJoin, getGlobalObject, parseUrl } from '@sentry/utils';\n\n/** JSDoc */\n\nvar BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nclass Breadcrumbs {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = BREADCRUMB_INTEGRATION_ID;}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = Breadcrumbs.id;}\n\n /**\n * Options of the breadcrumbs integration.\n */\n // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.\n \n\n /**\n * @inheritDoc\n */\n constructor(options) {;Breadcrumbs.prototype.__init.call(this);\n this.options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n setupOnce() {\n if (this.options.console) {\n addInstrumentationHandler('console', _consoleBreadcrumb);\n }\n if (this.options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));\n }\n if (this.options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this.options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this.options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n} Breadcrumbs.__initStatic();\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 _domBreadcrumb(dom) {\n function _innerDomBreadcrumb(handlerData) {\n let target;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\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 target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target , keyAttrs)\n : htmlTreeAsString(handlerData.event , keyAttrs);\n } catch (e) {\n target = '';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _consoleBreadcrumb(handlerData) {\n var 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 getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _xhrBreadcrumb(handlerData) {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _fetchBreadcrumb(handlerData) {\n // We only capture complete fetch requests\n if (!handlerData.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 getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: 'error',\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _historyBreadcrumb(handlerData) {\n var global = getGlobalObject();\n let from = handlerData.from;\n let to = handlerData.to;\n var parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n var parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!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 getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n}\n\nexport { BREADCRUMB_INTEGRATION_ID, Breadcrumbs };\n//# sourceMappingURL=breadcrumbs.js.map\n","import { getGlobalObject, isNativeFetch, logger, supportsFetch } from '@sentry/utils';\n\nvar global = getGlobalObject();\nlet cachedFetchImpl;\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 * var f = window.fetch;\n * window.fetch = function () {\n * var 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 getNativeFetchImplementation() {\n if (cachedFetchImpl) {\n return cachedFetchImpl;\n }\n\n // Fast path to avoid DOM I/O\n if (isNativeFetch(global.fetch)) {\n return (cachedFetchImpl = global.fetch.bind(global));\n }\n\n var document = global.document;\n let fetchImpl = global.fetch;\n if (document && typeof document.createElement === 'function') {\n try {\n var sandbox = document.createElement('iframe');\n sandbox.hidden = true;\n document.head.appendChild(sandbox);\n var contentWindow = sandbox.contentWindow;\n if (contentWindow && contentWindow.fetch) {\n fetchImpl = contentWindow.fetch;\n }\n document.head.removeChild(sandbox);\n } catch (e) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', e);\n }\n }\n\n return (cachedFetchImpl = fetchImpl.bind(global));\n }\n\n/**\n * Sends sdk client report using sendBeacon or fetch as a fallback if available\n *\n * @param url report endpoint\n * @param body report payload\n */\nfunction sendReport(url, body) {\n var isRealNavigator = Object.prototype.toString.call(global && global.navigator) === '[object Navigator]';\n var hasSendBeacon = isRealNavigator && typeof global.navigator.sendBeacon === 'function';\n\n if (hasSendBeacon) {\n // Prevent illegal invocations - https://xgwang.me/posts/you-may-not-know-beacon/#it-may-throw-error%2C-be-sure-to-catch\n var sendBeacon = global.navigator.sendBeacon.bind(global.navigator);\n sendBeacon(url, body);\n } else if (supportsFetch()) {\n var fetch = getNativeFetchImplementation();\n fetch(url, {\n body,\n method: 'POST',\n credentials: 'omit',\n keepalive: true,\n }).then(null, error => {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(error);\n });\n }\n}\n\nexport { getNativeFetchImplementation, sendReport };\n//# sourceMappingURL=utils.js.map\n","import { BaseClient, SDK_VERSION, getCurrentHub, getEnvelopeEndpointWithUrlEncodedAuth } from '@sentry/core';\nimport { getGlobalObject, getEventDescription, logger, createClientReportEnvelope, dsnToString, serializeEnvelope } from '@sentry/utils';\nimport { eventFromException, eventFromMessage } from './eventbuilder.js';\nimport { BREADCRUMB_INTEGRATION_ID } from './integrations/breadcrumbs.js';\nimport { sendReport } from './transports/utils.js';\n\nvar globalObject = getGlobalObject();\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 options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.browser',\n packages: [\n {\n name: 'npm:@sentry/browser',\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n\n super(options);\n\n if (options.sendClientReports && globalObject.document) {\n globalObject.document.addEventListener('visibilitychange', () => {\n if (globalObject.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 * @inheritDoc\n */\n sendEvent(event, hint) {\n // We only want to add the sentry event breadcrumb when the user has the breadcrumb integration installed and\n // activated its `sentry` option.\n // We also do not want to use the `Breadcrumbs` class here directly, because we do not want it to be included in\n // bundles, if it is not used by the SDK.\n // This all sadly is a bit ugly, but we currently don't have a \"pre-send\" hook on the integrations so we do it this\n // way for now.\n var breadcrumbIntegration = this.getIntegrationById(BREADCRUMB_INTEGRATION_ID) ;\n if (\n breadcrumbIntegration &&\n // We check for definedness of `options`, even though it is not strictly necessary, because that access to\n // `.sentry` below does not throw, in case users provided their own integration with id \"Breadcrumbs\" that does\n // not have an`options` field\n breadcrumbIntegration.options &&\n breadcrumbIntegration.options.sentry\n ) {\n getCurrentHub().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 super.sendEvent(event, hint);\n }\n\n /**\n * @inheritDoc\n */\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n return super._prepareEvent(event, hint, scope);\n }\n\n /**\n * Sends client reports as an envelope.\n */\n _flushOutcomes() {\n var outcomes = this._clearOutcomes();\n\n if (outcomes.length === 0) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('No outcomes to send');\n return;\n }\n\n if (!this._dsn) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('No dsn provided, will not send outcomes');\n return;\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('Sending outcomes:', outcomes);\n\n var url = getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, this._options);\n var envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));\n\n try {\n sendReport(url, serializeEnvelope(envelope));\n } catch (e) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error(e);\n }\n }\n}\n\nexport { BrowserClient };\n//# sourceMappingURL=client.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 var clientReportItem = [\n { type: 'client_report' },\n {\n timestamp: timestamp || dateTimestampInSeconds(),\n discarded_events,\n },\n ];\n return createEnvelope(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\nexport { createClientReportEnvelope };\n//# sourceMappingURL=clientreport.js.map\n","import { createStackParser } from '@sentry/utils';\n\n// global reference to slice\nvar UNKNOWN_FUNCTION = '?';\n\nvar OPERA10_PRIORITY = 10;\nvar OPERA11_PRIORITY = 20;\nvar CHROME_PRIORITY = 30;\nvar WINJS_PRIORITY = 40;\nvar GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n var frame = {\n filename,\n function: func,\n // All browser frames are considered in_app\n in_app: true,\n };\n\n if (lineno !== undefined) {\n frame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n frame.colno = colno;\n }\n\n return frame;\n}\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\nvar chromeRegex =\n /^\\s*at (?:(.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack||[-a-z]+:|.*bundle|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nvar chrome = line => {\n var parts = chromeRegex.exec(line);\n\n if (parts) {\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n if (isEval) {\n var 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\nvar chromeStackLineParser = [CHROME_PRIORITY, chrome];\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.\nvar geckoREgex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|capacitor).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nvar gecko = line => {\n var parts = geckoREgex.exec(line);\n\n if (parts) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval) {\n var 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\nvar geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nvar winjsRegex =\n /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nvar winjs = line => {\n var 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\nvar winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nvar opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nvar opera10 = line => {\n var parts = opera10Regex.exec(line);\n return parts ? createFrame(parts[2], parts[3] || UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nvar opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nvar opera11Regex =\n / line (\\d+), column (\\d+)\\s*(?:in (?:]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nvar opera11 = line => {\n var parts = opera11Regex.exec(line);\n return parts ? createFrame(parts[5], parts[3] || parts[4] || UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nvar opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nvar defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser, winjsStackLineParser];\n\nvar 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 */\nvar extractSafariExtensionDetails = (func, filename) => {\n var isSafariExtension = func.indexOf('safari-extension') !== -1;\n var 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 { withScope, captureException } from '@sentry/core';\nimport { getOriginalFunction, addExceptionTypeValue, addExceptionMechanism, markFunctionWrapped, addNonEnumerableProperty } from '@sentry/utils';\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n // onerror should trigger before setTimeout\n ignoreOnError += 1;\n setTimeout(() => {\n ignoreOnError -= 1;\n });\n}\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n fn,\n options\n\n = {},\n before,\n ) {\n // for future readers what this does is wrap a function and then create\n // a bi-directional wrapping between them.\n //\n // example: wrapped = wrap(original);\n // original.__sentry_wrapped__ -> wrapped\n // wrapped.__sentry_original__ -> original\n\n if (typeof fn !== 'function') {\n return fn;\n }\n\n try {\n // if we're dealing with a function that was previously wrapped, return\n // the original wrapper.\n var wrapper = fn.__sentry_wrapped__;\n if (wrapper) {\n return wrapper;\n }\n\n // We don't wanna wrap it twice\n if (getOriginalFunction(fn)) {\n return fn;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return fn;\n }\n\n // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n var sentryWrapped = function () {\n var args = Array.prototype.slice.call(arguments);\n\n try {\n if (before && typeof before === 'function') {\n before.apply(this, arguments);\n }\n\n var wrappedArguments = args.map((arg) => wrap(arg, options));\n\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means the sentry.javascript SDK caught an error invoking your application code. This\n // is expected behavior and NOT indicative of a bug with sentry.javascript.\n return fn.apply(this, wrappedArguments);\n } catch (ex) {\n ignoreNextOnError();\n\n withScope((scope) => {\n scope.addEventProcessor((event) => {\n if (options.mechanism) {\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, options.mechanism);\n }\n\n event.extra = {\n ...event.extra,\n arguments: args,\n };\n\n return event;\n });\n\n captureException(ex);\n });\n\n throw ex;\n }\n };\n \n // Accessing some objects may throw\n // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n try {\n for (var property in fn) {\n if (Object.prototype.hasOwnProperty.call(fn, property)) {\n sentryWrapped[property] = fn[property];\n }\n }\n } catch (_oO) {} \n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n markFunctionWrapped(sentryWrapped, fn);\n\n addNonEnumerableProperty(fn, '__sentry_wrapped__', sentryWrapped);\n\n // Restore original function name (not all browsers allow that)\n try {\n var descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') ;\n if (descriptor.configurable) {\n Object.defineProperty(sentryWrapped, 'name', {\n get() {\n return fn.name;\n },\n });\n }\n } catch (_oO) {}\n\n return sentryWrapped;\n}\n\n/**\n * All properties the report dialog supports\n */\n\nexport { ignoreNextOnError, shouldIgnoreOnError, wrap };\n//# sourceMappingURL=helpers.js.map\n","import { getGlobalObject, fill, getFunctionName, getOriginalFunction } from '@sentry/utils';\nimport { wrap } from '../helpers.js';\n\nvar DEFAULT_EVENT_TARGET = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\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 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload',\n];\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nclass TryCatch {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'TryCatch';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = TryCatch.id;}\n\n /** JSDoc */\n \n\n /**\n * @inheritDoc\n */\n constructor(options) {;TryCatch.prototype.__init.call(this);\n this._options = {\n XMLHttpRequest: true,\n eventTarget: true,\n requestAnimationFrame: true,\n setInterval: true,\n setTimeout: true,\n ...options,\n };\n }\n\n /**\n * Wrap timer functions and event targets to catch errors\n * and provide better metadata.\n */\n setupOnce() {\n var global = getGlobalObject();\n\n if (this._options.setTimeout) {\n fill(global, 'setTimeout', _wrapTimeFunction);\n }\n\n if (this._options.setInterval) {\n fill(global, 'setInterval', _wrapTimeFunction);\n }\n\n if (this._options.requestAnimationFrame) {\n fill(global, 'requestAnimationFrame', _wrapRAF);\n }\n\n if (this._options.XMLHttpRequest && 'XMLHttpRequest' in global) {\n fill(XMLHttpRequest.prototype, 'send', _wrapXHR);\n }\n\n var eventTargetOption = this._options.eventTarget;\n if (eventTargetOption) {\n var eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n eventTarget.forEach(_wrapEventTarget);\n }\n }\n} TryCatch.__initStatic();\n\n/** JSDoc */\nfunction _wrapTimeFunction(original) {\n return function ( ...args) {\n var originalCallback = args[0];\n args[0] = wrap(originalCallback, {\n mechanism: {\n data: { function: getFunctionName(original) },\n handled: true,\n type: 'instrument',\n },\n });\n return original.apply(this, args);\n };\n}\n\n/** JSDoc */\nfunction _wrapRAF(original) {\n return function ( callback) {\n return original.apply(this, [\n wrap(callback, {\n mechanism: {\n data: {\n function: 'requestAnimationFrame',\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n }),\n ]);\n };\n}\n\n/** JSDoc */\nfunction _wrapXHR(originalSend) {\n return function ( ...args) {\n var xhr = this;\n var xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n xmlHttpRequestProps.forEach(prop => {\n if (prop in xhr && typeof xhr[prop] === 'function') {\n fill(xhr, prop, function (original) {\n var wrapOptions = {\n mechanism: {\n data: {\n function: prop,\n handler: getFunctionName(original),\n },\n handled: true,\n type: 'instrument',\n },\n };\n\n // If Instrument integration has been called before TryCatch, get the name of original function\n var 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\n/** JSDoc */\nfunction _wrapEventTarget(target) {\n var global = getGlobalObject() ;\n var proto = global[target] && global[target].prototype;\n\n if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n return;\n }\n\n fill(proto, 'addEventListener', function (original)\n\n {\n return function (\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 fn.handleEvent = wrap(fn.handleEvent, {\n mechanism: {\n data: {\n function: 'handleEvent',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\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 wrap(fn , {\n mechanism: {\n data: {\n function: 'addEventListener',\n handler: getFunctionName(fn),\n target,\n },\n handled: true,\n type: 'instrument',\n },\n }),\n options,\n ]);\n };\n });\n\n fill(\n proto,\n 'removeEventListener',\n function (\n originalRemoveEventListener,\n ) {\n return function (\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 var wrappedEventHandler = fn ;\n try {\n var 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 { TryCatch };\n//# sourceMappingURL=trycatch.js.map\n","import { getCurrentHub } from '@sentry/core';\nimport { addInstrumentationHandler, isString, isPrimitive, isErrorEvent, getLocationHref, logger, addExceptionMechanism } from '@sentry/utils';\nimport { eventFromUnknownInput } from '../eventbuilder.js';\nimport { shouldIgnoreOnError } from '../helpers.js';\n\n/** Global handlers */\nclass GlobalHandlers {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'GlobalHandlers';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = GlobalHandlers.id;}\n\n /** JSDoc */\n \n\n /**\n * Stores references functions to installing handlers. Will set to undefined\n * after they have been run so that they are not used twice.\n */\n __init2() {this._installFunc = {\n onerror: _installGlobalOnErrorHandler,\n onunhandledrejection: _installGlobalOnUnhandledRejectionHandler,\n };}\n\n /** JSDoc */\n constructor(options) {;GlobalHandlers.prototype.__init.call(this);GlobalHandlers.prototype.__init2.call(this);\n this._options = {\n onerror: true,\n onunhandledrejection: true,\n ...options,\n };\n }\n /**\n * @inheritDoc\n */\n setupOnce() {\n Error.stackTraceLimit = 50;\n var options = this._options;\n\n // We can disable guard-for-in as we construct the options object above + do checks against\n // `this._installFunc` for the property.\n for (var key in options) {\n var installFunc = this._installFunc[key ];\n if (installFunc && options[key ]) {\n globalHandlerLog(key);\n installFunc();\n this._installFunc[key ] = undefined;\n }\n }\n }\n} GlobalHandlers.__initStatic();\n\n/** JSDoc */\nfunction _installGlobalOnErrorHandler() {\n addInstrumentationHandler(\n 'error',\n (data) => {\n const [hub, stackParser, attachStacktrace] = getHubAndOptions();\n if (!hub.getIntegration(GlobalHandlers)) {\n return;\n }\n const { msg, url, line, column, error } = data;\n if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n return;\n }\n\n var event =\n error === undefined && isString(msg)\n ? _eventFromIncompleteOnError(msg, url, line, column)\n : _enhanceEventWithInitialFrame(\n eventFromUnknownInput(stackParser, error || msg, undefined, attachStacktrace, false),\n url,\n line,\n column,\n );\n\n event.level = 'error';\n\n addMechanismAndCapture(hub, error, event, 'onerror');\n },\n );\n}\n\n/** JSDoc */\nfunction _installGlobalOnUnhandledRejectionHandler() {\n addInstrumentationHandler(\n 'unhandledrejection',\n (e) => {\n const [hub, stackParser, attachStacktrace] = getHubAndOptions();\n if (!hub.getIntegration(GlobalHandlers)) {\n return;\n }\n let error = e;\n\n // dig the object of the rejection out of known event types\n try {\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 e) {\n error = e.reason;\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 else if ('detail' in e && 'reason' in e.detail) {\n error = e.detail.reason;\n }\n } catch (_oO) {\n // no-empty\n }\n\n if (shouldIgnoreOnError() || (error && error.__sentry_own_request__)) {\n return true;\n }\n\n var event = isPrimitive(error)\n ? _eventFromRejectionWithPrimitive(error)\n : eventFromUnknownInput(stackParser, error, undefined, attachStacktrace, true);\n\n event.level = 'error';\n\n addMechanismAndCapture(hub, error, event, 'onunhandledrejection');\n return;\n },\n );\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/**\n * This function creates a stack from an old, error-less onerror handler.\n */\nfunction _eventFromIncompleteOnError(msg, url, line, column) {\n var ERROR_TYPES_RE =\n /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;\n\n // If 'message' is ErrorEvent, get real message from inside\n let message = isErrorEvent(msg) ? msg.message : msg;\n let name = 'Error';\n\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n\n var event = {\n exception: {\n values: [\n {\n type: name,\n value: message,\n },\n ],\n },\n };\n\n return _enhanceEventWithInitialFrame(event, url, line, column);\n}\n\n/** JSDoc */\nfunction _enhanceEventWithInitialFrame(event, url, line, column) {\n // event.exception\n var e = (event.exception = event.exception || {});\n // event.exception.values\n var ev = (e.values = e.values || []);\n // event.exception.values[0]\n var ev0 = (ev[0] = ev[0] || {});\n // event.exception.values[0].stacktrace\n var ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n // event.exception.values[0].stacktrace.frames\n var ev0sf = (ev0s.frames = ev0s.frames || []);\n\n var colno = isNaN(parseInt(column, 10)) ? undefined : column;\n var lineno = isNaN(parseInt(line, 10)) ? undefined : line;\n var 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: '?',\n in_app: true,\n lineno,\n });\n }\n\n return event;\n}\n\nfunction globalHandlerLog(type) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`Global Handler attached: ${type}`);\n}\n\nfunction addMechanismAndCapture(hub, error, event, type) {\n addExceptionMechanism(event, {\n handled: false,\n type,\n });\n hub.captureEvent(event, {\n originalException: error,\n });\n}\n\nfunction getHubAndOptions() {\n var hub = getCurrentHub();\n var client = hub.getClient();\n var options = (client && client.getOptions()) || {\n stackParser: () => [],\n attachStacktrace: false,\n };\n return [hub, options.stackParser, options.attachStacktrace];\n}\n\nexport { GlobalHandlers };\n//# sourceMappingURL=globalhandlers.js.map\n","import { getCurrentHub, addGlobalEventProcessor } from '@sentry/core';\nimport { isInstanceOf } from '@sentry/utils';\nimport { exceptionFromError } from '../eventbuilder.js';\n\nvar DEFAULT_KEY = 'cause';\nvar DEFAULT_LIMIT = 5;\n\n/** Adds SDK info to an event. */\nclass LinkedErrors {\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'LinkedErrors';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = LinkedErrors.id;}\n\n /**\n * @inheritDoc\n */\n \n\n /**\n * @inheritDoc\n */\n \n\n /**\n * @inheritDoc\n */\n constructor(options = {}) {;LinkedErrors.prototype.__init.call(this);\n this._key = options.key || DEFAULT_KEY;\n this._limit = options.limit || DEFAULT_LIMIT;\n }\n\n /**\n * @inheritDoc\n */\n setupOnce() {\n var client = getCurrentHub().getClient();\n if (!client) {\n return;\n }\n addGlobalEventProcessor((event, hint) => {\n var self = getCurrentHub().getIntegration(LinkedErrors);\n return self ? _handler(client.getOptions().stackParser, self._key, self._limit, event, hint) : event;\n });\n }\n} LinkedErrors.__initStatic();\n\n/**\n * @inheritDoc\n */\nfunction _handler(\n parser,\n key,\n limit,\n event,\n hint,\n) {\n if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {\n return event;\n }\n var linkedErrors = _walkErrorTree(parser, limit, hint.originalException , key);\n event.exception.values = [...linkedErrors, ...event.exception.values];\n return event;\n}\n\n/**\n * JSDOC\n */\nfunction _walkErrorTree(\n parser,\n limit,\n error,\n key,\n stack = [],\n) {\n if (!isInstanceOf(error[key], Error) || stack.length + 1 >= limit) {\n return stack;\n }\n var exception = exceptionFromError(parser, error[key]);\n return _walkErrorTree(parser, limit, error[key], key, [exception, ...stack]);\n}\n\nexport { LinkedErrors, _handler, _walkErrorTree };\n//# sourceMappingURL=linkederrors.js.map\n","import { logger } from '@sentry/utils';\n\n/** Deduplication filter */\nclass Dedupe {constructor() { Dedupe.prototype.__init.call(this); }\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'Dedupe';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = Dedupe.id;}\n\n /**\n * @inheritDoc\n */\n \n\n /**\n * @inheritDoc\n */\n setupOnce(addGlobalEventProcessor, getCurrentHub) {\n var eventProcessor = currentEvent => {\n var self = getCurrentHub().getIntegration(Dedupe);\n if (self) {\n // Juuust in case something goes wrong\n try {\n if (_shouldDropEvent(currentEvent, self._previousEvent)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Event dropped due to being a duplicate of previously captured event.');\n return null;\n }\n } catch (_oO) {\n return (self._previousEvent = currentEvent);\n }\n\n return (self._previousEvent = currentEvent);\n }\n return currentEvent;\n };\n\n eventProcessor.id = this.name;\n addGlobalEventProcessor(eventProcessor);\n }\n} Dedupe.__initStatic();\n\n/** JSDoc */\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\n/** JSDoc */\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n var currentMessage = currentEvent.message;\n var 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\n/** JSDoc */\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n var previousException = _getExceptionFromEvent(previousEvent);\n var 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\n/** JSDoc */\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 var frameA = previousFrames[i];\n var 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\n/** JSDoc */\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\n/** JSDoc */\nfunction _getExceptionFromEvent(event) {\n return event.exception && event.exception.values && event.exception.values[0];\n}\n\n/** JSDoc */\nfunction _getFramesFromEvent(event) {\n var exception = event.exception;\n\n if (exception) {\n try {\n // @ts-ignore Object could be undefined\n return exception.values[0].stacktrace.frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { Dedupe };\n//# sourceMappingURL=dedupe.js.map\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { getGlobalObject } from '@sentry/utils';\n\nvar global = getGlobalObject();\n\n/** HttpContext integration collects information about HTTP request headers */\nclass HttpContext {constructor() { HttpContext.prototype.__init.call(this); }\n /**\n * @inheritDoc\n */\n static __initStatic() {this.id = 'HttpContext';}\n\n /**\n * @inheritDoc\n */\n __init() {this.name = HttpContext.id;}\n\n /**\n * @inheritDoc\n */\n setupOnce() {\n addGlobalEventProcessor((event) => {\n if (getCurrentHub().getIntegration(HttpContext)) {\n // if none of the information we want exists, don't bother\n if (!global.navigator && !global.location && !global.document) {\n return event;\n }\n\n // grab as much info as exists and add it to the event\n var url = (event.request && event.request.url) || (global.location && global.location.href);\n const { referrer } = global.document || {};\n const { userAgent } = global.navigator || {};\n\n var headers = {\n ...(event.request && event.request.headers),\n ...(referrer && { Referer: referrer }),\n ...(userAgent && { 'User-Agent': userAgent }),\n };\n var request = { ...(url && { url }), headers };\n\n return { ...event, request };\n }\n return event;\n });\n }\n} HttpContext.__initStatic();\n\nexport { HttpContext };\n//# sourceMappingURL=httpcontext.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 var 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];\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 due to buffer limit reached.'));\n }\n\n // start the task and add its promise to the queue\n var 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 var 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","// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nvar 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 var headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n var 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 given category is disabled until for rate limiting\n */\nfunction disabledUntil(limits, category) {\n return limits[category] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, category, now = Date.now()) {\n return disabledUntil(limits, category) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n * Returns true if headers contains a non-empty rate limiting header.\n */\nfunction updateRateLimits(\n limits,\n { statusCode, headers },\n now = Date.now(),\n) {\n var updatedRateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n var rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n var 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 */\n for (var limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories] = limit.split(':', 2);\n var headerDelay = parseInt(retryAfter, 10);\n var delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (var category of categories.split(';')) {\n updatedRateLimits[category] = now + delay;\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 { makePromiseBuffer, forEachEnvelopeItem, envelopeItemTypeToDataCategory, isRateLimited, resolvedSyncPromise, createEnvelope, serializeEnvelope, logger, updateRateLimits, SentryError } from '@sentry/utils';\n\nvar DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\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(options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE),\n) {\n let rateLimits = {};\n\n var flush = (timeout) => buffer.drain(timeout);\n\n function send(envelope) {\n var filteredEnvelopeItems = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n var envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory);\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 var filteredEnvelope = createEnvelope(envelope[0], filteredEnvelopeItems );\n\n // Creates client report for each item in an envelope\n var recordEnvelopeLoss = (reason) => {\n forEachEnvelopeItem(filteredEnvelope, (_, type) => {\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type));\n });\n };\n\n var requestTask = () =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).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 (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n },\n error => {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Failed while sending event:', error);\n recordEnvelopeLoss('network_error');\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Skipped sending event due to full buffer');\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\nexport { DEFAULT_TRANSPORT_BUFFER_SIZE, createTransport };\n//# sourceMappingURL=base.js.map\n","import { createTransport } from '@sentry/core';\nimport { getNativeFetchImplementation } from './utils.js';\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n options,\n nativeFetch = getNativeFetchImplementation(),\n) {\n function makeRequest(request) {\n var requestOptions = {\n body: request.body,\n method: 'POST',\n referrerPolicy: 'origin',\n headers: options.headers,\n ...options.fetchOptions,\n };\n\n return nativeFetch(options.url, requestOptions).then(response => ({\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\n return createTransport(options, makeRequest);\n}\n\nexport { makeFetchTransport };\n//# sourceMappingURL=fetch.js.map\n","import { createTransport } from '@sentry/core';\nimport { SyncPromise } from '@sentry/utils';\n\n/**\n * The DONE ready state for XmlHttpRequest\n *\n * Defining it here as a constant b/c XMLHttpRequest.DONE is not always defined\n * (e.g. during testing, it is `undefined`)\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState}\n */\nvar XHR_READYSTATE_DONE = 4;\n\n/**\n * Creates a Transport that uses the XMLHttpRequest API to send events to Sentry.\n */\nfunction makeXHRTransport(options) {\n function makeRequest(request) {\n return new SyncPromise((resolve, reject) => {\n var xhr = new XMLHttpRequest();\n\n xhr.onerror = reject;\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XHR_READYSTATE_DONE) {\n resolve({\n statusCode: xhr.status,\n headers: {\n 'x-sentry-rate-limits': xhr.getResponseHeader('X-Sentry-Rate-Limits'),\n 'retry-after': xhr.getResponseHeader('Retry-After'),\n },\n });\n }\n };\n\n xhr.open('POST', options.url);\n\n for (var header in options.headers) {\n if (Object.prototype.hasOwnProperty.call(options.headers, header)) {\n xhr.setRequestHeader(header, options.headers[header]);\n }\n }\n\n xhr.send(request.body);\n });\n }\n\n return createTransport(options, makeRequest);\n}\n\nexport { makeXHRTransport };\n//# sourceMappingURL=xhr.js.map\n","import { Integrations, getIntegrationsToSetup, initAndBind, getCurrentHub, getReportDialogEndpoint } from '@sentry/core';\nimport { getGlobalObject, stackParserFromStackParserOptions, supportsFetch, logger, resolvedSyncPromise, addInstrumentationHandler } from '@sentry/utils';\nimport { BrowserClient } from './client.js';\nimport { wrap as wrap$1 } from './helpers.js';\nimport './integrations/index.js';\nimport { defaultStackParser } from './stack-parsers.js';\nimport './transports/index.js';\nimport { TryCatch } from './integrations/trycatch.js';\nimport { Breadcrumbs } from './integrations/breadcrumbs.js';\nimport { GlobalHandlers } from './integrations/globalhandlers.js';\nimport { LinkedErrors } from './integrations/linkederrors.js';\nimport { Dedupe } from './integrations/dedupe.js';\nimport { HttpContext } from './integrations/httpcontext.js';\nimport { makeFetchTransport } from './transports/fetch.js';\nimport { makeXHRTransport } from './transports/xhr.js';\n\nvar defaultIntegrations = [\n new Integrations.InboundFilters(),\n new Integrations.FunctionToString(),\n new TryCatch(),\n new Breadcrumbs(),\n new GlobalHandlers(),\n new LinkedErrors(),\n new Dedupe(),\n new HttpContext(),\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 { configureScope } from '@sentry/browser';\n * configureScope((scope: Scope) => {\n * scope.setExtra({ battery: 0.7 });\n * scope.setTag({ user_mode: 'admin' });\n * scope.setUser({ id: '4711' });\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(options = {}) {\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = defaultIntegrations;\n }\n if (options.release === undefined) {\n var window = getGlobalObject();\n // This supports the variable that sentry-webpack-plugin injects\n if (window.SENTRY_RELEASE && window.SENTRY_RELEASE.id) {\n options.release = window.SENTRY_RELEASE.id;\n }\n }\n if (options.autoSessionTracking === undefined) {\n options.autoSessionTracking = true;\n }\n if (options.sendClientReports === undefined) {\n options.sendClientReports = true;\n }\n\n var clientOptions = {\n ...options,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup(options),\n transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),\n };\n\n initAndBind(BrowserClient, clientOptions);\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\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 = {}, hub = getCurrentHub()) {\n // doesn't work without a document (React Native)\n var global = getGlobalObject();\n if (!global.document) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Global document not defined in showReportDialog call');\n return;\n }\n\n const { client, scope } = hub.getStackTop();\n var dsn = options.dsn || (client && client.getDsn());\n if (!dsn) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && 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 options.eventId = hub.lastEventId();\n }\n\n var script = global.document.createElement('script');\n script.async = true;\n script.src = getReportDialogEndpoint(dsn, options);\n\n if (options.onLoad) {\n script.onload = options.onLoad;\n }\n\n var injectionPoint = global.document.head || global.document.body;\n if (injectionPoint) {\n injectionPoint.appendChild(script);\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Not injecting report dialog. No injection point found in HTML');\n }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nfunction lastEventId() {\n return getCurrentHub().lastEventId();\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 * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nfunction flush(timeout) {\n var client = getCurrentHub().getClient();\n if (client) {\n return client.flush(timeout);\n }\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Cannot flush events. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nfunction close(timeout) {\n var client = getCurrentHub().getClient();\n if (client) {\n return client.close(timeout);\n }\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return resolvedSyncPromise(false);\n}\n\n/**\n * Wrap code within a try/catch block so the SDK is able to capture errors.\n *\n * @param fn A function to wrap.\n *\n * @returns The result of wrapped function call.\n */\nfunction wrap(fn) {\n return wrap$1(fn)();\n}\n\nfunction startSessionOnHub(hub) {\n hub.startSession({ ignoreDuration: true });\n hub.captureSession();\n}\n\n/**\n * Enable automatic Session Tracking for the initial page load.\n */\nfunction startSessionTracking() {\n var window = getGlobalObject();\n var document = window.document;\n\n if (typeof document === 'undefined') {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');\n return;\n }\n\n var hub = getCurrentHub();\n\n // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and\n // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are\n // pinned at the same version in package.json, but there are edge cases where it's possible. See\n // https://github.com/getsentry/sentry-javascript/issues/3207 and\n // https://github.com/getsentry/sentry-javascript/issues/3234 and\n // https://github.com/getsentry/sentry-javascript/issues/3278.\n if (!hub.captureSession) {\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 startSessionOnHub(hub);\n\n // We want to create a session for every navigation as well\n addInstrumentationHandler('history', ({ 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 startSessionOnHub(getCurrentHub());\n }\n });\n}\n\nexport { close, defaultIntegrations, flush, forceLoad, init, lastEventId, onLoad, showReportDialog, wrap };\n//# sourceMappingURL=sdk.js.map\n","import { getCurrentHub } from '@sentry/hub';\nimport { logger } from '@sentry/utils';\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 ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\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 console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n }\n }\n var hub = getCurrentHub();\n var scope = hub.getScope();\n if (scope) {\n scope.update(options.initialScope);\n }\n\n var client = new clientClass(options);\n hub.bindClient(client);\n}\n\nexport { initAndBind };\n//# sourceMappingURL=sdk.js.map\n","var SDK_VERSION = '7.7.0';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { getCurrentHub } from './hub.js';\n\n// Note: All functions in this file are typed with a return value of `ReturnType`,\n// where HUB_FUNCTION is some method on the Hub class.\n//\n// This is done to make sure the top level SDK methods stay in sync with the hub methods.\n// Although every method here has an explicit return type, some of them (that map to void returns) do not\n// contain `return` keywords. This is done to save on bundle size, as `return` is not minifiable.\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @param captureContext Additional scope data to apply to exception event.\n * @returns The generated eventId.\n */\nfunction captureException(exception, captureContext) {\n return getCurrentHub().captureException(exception, { captureContext });\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param Severity Define the level of the message.\n * @returns The generated eventId.\n */\nfunction captureMessage(\n message,\n captureContext,\n) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n var level = typeof captureContext === 'string' ? captureContext : undefined;\n var context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentHub().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @returns The generated eventId.\n */\nfunction captureEvent(event, hint) {\n return getCurrentHub().captureEvent(event, hint);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nfunction configureScope(callback) {\n getCurrentHub().configureScope(callback);\n}\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 *\n * @param breadcrumb The breadcrumb to record.\n */\nfunction addBreadcrumb(breadcrumb) {\n getCurrentHub().addBreadcrumb(breadcrumb);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nfunction setContext(name, context) {\n getCurrentHub().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getCurrentHub().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getCurrentHub().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getCurrentHub().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getCurrentHub().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getCurrentHub().setUser(user);\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\nfunction withScope(callback) {\n getCurrentHub().withScope(callback);\n}\n\n/**\n * Starts a new `Transaction` and returns it. This is the entry point to manual tracing instrumentation.\n *\n * A tree structure can be built by adding child spans to the transaction, and child spans to other spans. To start a\n * new child span within the transaction or any span, call the respective `.startChild()` method.\n *\n * Every child span must be finished before the transaction is finished, otherwise the unfinished spans are discarded.\n *\n * The transaction must be finished with a call to its `.finish()` method, at which point the transaction with all its\n * finished child spans will be sent to Sentry.\n *\n * NOTE: This function should only be used for *manual* instrumentation. Auto-instrumentation should call\n * `startTransaction` directly on the hub.\n *\n * @param context Properties of the new `Transaction`.\n * @param customSamplingContext Information given to the transaction sampling function (along with context-dependent\n * default values). See {@link Options.tracesSampler}.\n *\n * @returns The transaction which was just started\n */\nfunction startTransaction(\n context,\n customSamplingContext,\n) {\n return getCurrentHub().startTransaction(\n {\n metadata: { source: 'custom' },\n ...context,\n },\n customSamplingContext,\n );\n}\n\nexport { addBreadcrumb, captureEvent, captureException, captureMessage, configureScope, setContext, setExtra, setExtras, setTag, setTags, setUser, startTransaction, withScope };\n//# sourceMappingURL=exports.js.map\n","import { uuid4, dateTimestampInSeconds, consoleSandbox, logger, getGlobalObject, getGlobalSingleton, isNodeEnv } from '@sentry/utils';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nvar API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nvar DEFAULT_BREADCRUMBS = 100;\n\n/**\n * A layer in the process stack.\n * @hidden\n */\n\n/**\n * @inheritDoc\n */\nclass Hub {\n /** Is a {@link Layer}[] containing the client and scope */\n __init() {this._stack = [{}];}\n\n /** Contains the last event id of a captured event. */\n \n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n constructor(client, scope = new Scope(), _version = API_VERSION) {;this._version = _version;Hub.prototype.__init.call(this);\n this.getStackTop().scope = scope;\n if (client) {\n this.bindClient(client);\n }\n }\n\n /**\n * @inheritDoc\n */\n isOlderThan(version) {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n bindClient(client) {\n var top = this.getStackTop();\n top.client = client;\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n */\n pushScope() {\n // We want to clone the content of prev scope\n var scope = Scope.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n */\n popScope() {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n withScope(callback) {\n var scope = this.pushScope();\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /** Returns the scope of the top stack. */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /** Returns the scope stack for domains or the process. */\n getStack() {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n getStackTop() {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var syntheticException = new Error('Sentry syntheticException');\n this._withClient((client, scope) => {\n client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n ) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var syntheticException = new Error(message);\n this._withClient((client, scope) => {\n client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n var eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (event.type !== 'transaction') {\n this._lastEventId = eventId;\n }\n\n this._withClient((client, scope) => {\n client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, hint) {\n const { scope, client } = this.getStackTop();\n\n if (!scope || !client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n var timestamp = dateTimestampInSeconds();\n var mergedBreadcrumb = { timestamp, ...breadcrumb };\n var finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n var scope = this.getScope();\n if (scope) scope.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n var scope = this.getScope();\n if (scope) scope.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n var scope = this.getScope();\n if (scope) scope.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n var scope = this.getScope();\n if (scope) scope.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n var scope = this.getScope();\n if (scope) scope.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n setContext(name, context) {\n var scope = this.getScope();\n if (scope) scope.setContext(name, context);\n }\n\n /**\n * @inheritDoc\n */\n configureScope(callback) {\n const { scope, client } = this.getStackTop();\n if (scope && client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n run(callback) {\n var oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n getIntegration(integration) {\n var client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n startTransaction(context, customSamplingContext) {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n }\n\n /**\n * @inheritDoc\n */\n traceHeaders() {\n return this._callExtensionMethod('traceHeaders');\n }\n\n /**\n * @inheritDoc\n */\n captureSession(endSession = false) {\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n */\n endSession() {\n var layer = this.getStackTop();\n var scope = layer && layer.scope;\n var session = scope && scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n if (scope) {\n scope.setSession();\n }\n }\n\n /**\n * @inheritDoc\n */\n startSession(context) {\n const { scope, client } = this.getStackTop();\n const { release, environment } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n var global = getGlobalObject();\n const { userAgent } = global.navigator || {};\n\n var session = makeSession({\n release,\n environment,\n ...(scope && { user: scope.getUser() }),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n if (scope) {\n // End existing session if there's one\n var currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n }\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n */\n shouldSendDefaultPii() {\n var client = this.getClient();\n var options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n _sendSessionUpdate() {\n const { scope, client } = this.getStackTop();\n if (!scope) return;\n\n var session = scope.getSession();\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n _withClient(callback) {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(client, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n _callExtensionMethod(method, ...args) {\n var carrier = getMainCarrier();\n var sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n var carrier = getGlobalObject();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return carrier;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nfunction makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier();\n\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Prefer domains over global if they are there (applicable only to Node environment)\n if (isNodeEnv()) {\n return getHubFromActiveDomain(registry);\n }\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n try {\n var sentry = getMainCarrier().__SENTRY__;\n var activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n\n // If there's no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n }\n\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nfunction getHubFromCarrier(carrier) {\n return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) return false;\n var __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n\nexport { API_VERSION, Hub, getCurrentHub, getHubFromCarrier, getMainCarrier, makeMain, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","import { isPlainObject, dateTimestampInSeconds, getGlobalSingleton, SyncPromise, logger, isThenable } from '@sentry/utils';\nimport { updateSession } from './session.js';\n\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\nvar MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nclass Scope {\n /** Flag if notifying is happening. */\n \n\n /** Callback for client to receive scope changes. */\n \n\n /** Callback list that will be called after {@link applyToEvent}. */\n \n\n /** Array of breadcrumbs. */\n \n\n /** User */\n \n\n /** Tags */\n \n\n /** Extra */\n \n\n /** Contexts */\n \n\n /** Attachments */\n \n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n \n\n /** Fingerprint */\n \n\n /** Severity */\n \n\n /** Transaction Name */\n \n\n /** Span */\n \n\n /** Session */\n \n\n /** Request Mode Session Status */\n \n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n }\n\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n static clone(scope) {\n var newScope = new Scope();\n if (scope) {\n newScope._breadcrumbs = [...scope._breadcrumbs];\n newScope._tags = { ...scope._tags };\n newScope._extra = { ...scope._extra };\n newScope._contexts = { ...scope._contexts };\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = [...scope._eventProcessors];\n newScope._requestSession = scope._requestSession;\n newScope._attachments = [...scope._attachments];\n }\n return newScope;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n this._user = user || {};\n if (this._session) {\n updateSession(this._session, { user });\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(\n level,\n ) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n delete this._contexts[key];\n } else {\n this._contexts = { ...this._contexts, [key]: context };\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSpan(span) {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSpan() {\n return this._span;\n }\n\n /**\n * @inheritDoc\n */\n getTransaction() {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n var span = this.getSpan();\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n var updatedScope = (captureContext )(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = { ...this._tags, ...captureContext._tags };\n this._extra = { ...this._extra, ...captureContext._extra };\n this._contexts = { ...this._contexts, ...captureContext._contexts };\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n } else if (isPlainObject(captureContext)) {\n captureContext = captureContext ;\n this._tags = { ...this._tags, ...captureContext.tags };\n this._extra = { ...this._extra, ...captureContext.extra };\n this._contexts = { ...this._contexts, ...captureContext.contexts };\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n var maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n var mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n this._breadcrumbs = [...this._breadcrumbs, mergedBreadcrumb].slice(-maxCrumbs);\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getAttachments() {\n return this._attachments;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /**\n * Applies the current context and fingerprint to the event.\n * Note that breadcrumbs will be added by the client.\n * Also if the event has already breadcrumbs on it, we do not merge them.\n * @param event Event\n * @param hint May contain additional information about the original exception.\n * @hidden\n */\n applyToEvent(event, hint = {}) {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = { ...this._extra, ...event.extra };\n }\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = { ...this._tags, ...event.tags };\n }\n if (this._user && Object.keys(this._user).length) {\n event.user = { ...this._user, ...event.user };\n }\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = { ...this._contexts, ...event.contexts };\n }\n if (this._level) {\n event.level = this._level;\n }\n if (this._transactionName) {\n event.transaction = this._transactionName;\n }\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (this._span) {\n event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n var transactionName = this._span.transaction && this._span.transaction.name;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n\n this._applyFingerprint(event);\n\n event.breadcrumbs = [...(event.breadcrumbs || []), ...this._breadcrumbs];\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n\n event.sdkProcessingMetadata = { ...event.sdkProcessingMetadata, ...this._sdkProcessingMetadata };\n\n return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n _notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n ) {\n return new SyncPromise((resolve, reject) => {\n var processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n var result = processor({ ...event }, hint) ;\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n processor.id &&\n result === null &&\n logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void this._notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n _applyFingerprint(event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint\n ? Array.isArray(event.fingerprint)\n ? event.fingerprint\n : [event.fingerprint]\n : [];\n\n // If we have something on the scope, then merge it with event\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n }\n}\n\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nfunction addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}\n\nexport { Scope, addGlobalEventProcessor };\n//# sourceMappingURL=scope.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n var startingTime = timestampInSeconds();\n\n var session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n var duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { addInstrumentationHandler, logger } from '@sentry/utils';\nimport { getActiveTransaction } from './utils.js';\n\n/**\n * Configures global error listeners\n */\nfunction registerErrorInstrumentation() {\n addInstrumentationHandler('error', errorCallback);\n addInstrumentationHandler('unhandledrejection', errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active transaction as failed\n */\nfunction errorCallback() {\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n var status = 'internal_error';\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] Transaction: ${status} -> Global error occured`);\n activeTransaction.setStatus(status);\n }\n}\n\nexport { registerErrorInstrumentation };\n//# sourceMappingURL=errors.js.map\n","import { getMainCarrier } from '@sentry/hub';\nimport { logger, isNaN, dynamicRequire, loadModule, isNodeEnv } from '@sentry/utils';\nimport { registerErrorInstrumentation } from './errors.js';\nimport { IdleTransaction } from './idletransaction.js';\nimport { Transaction } from './transaction.js';\nimport { hasTracingEnabled } from './utils.js';\n\n/** Returns all trace headers that are currently on the top scope. */\nfunction traceHeaders() {\n var scope = this.getScope();\n if (scope) {\n var span = scope.getSpan();\n if (span) {\n return {\n 'sentry-trace': span.toTraceparent(),\n };\n }\n }\n return {};\n}\n\n/**\n * Makes a sampling decision for the given transaction and stores it on the transaction.\n *\n * Called every time a transaction is created. Only transactions which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n *\n * @param transaction: The transaction needing a sampling decision\n * @param options: The current client's options, so we can access `tracesSampleRate` and/or `tracesSampler`\n * @param samplingContext: Default and user-provided data which may be used to help make the decision\n *\n * @returns The given transaction with its `sampled` value set\n */\nfunction sample(\n transaction,\n options,\n samplingContext,\n) {\n // nothing to do if tracing is not enabled\n if (!hasTracingEnabled(options)) {\n transaction.sampled = false;\n return transaction;\n }\n\n // if the user has forced a sampling decision by passing a `sampled` value in their transaction context, go with that\n if (transaction.sampled !== undefined) {\n transaction.setMetadata({\n transactionSampling: { method: 'explicitly_set' },\n });\n return transaction;\n }\n\n // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n // work; prefer the hook if so\n let sampleRate;\n if (typeof options.tracesSampler === 'function') {\n sampleRate = options.tracesSampler(samplingContext);\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_sampler',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n } else if (samplingContext.parentSampled !== undefined) {\n sampleRate = samplingContext.parentSampled;\n transaction.setMetadata({\n transactionSampling: { method: 'inheritance' },\n });\n } else {\n sampleRate = options.tracesSampleRate;\n transaction.setMetadata({\n transactionSampling: {\n method: 'client_rate',\n // cast to number in case it's a boolean\n rate: Number(sampleRate),\n },\n });\n }\n\n // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n // only valid values are booleans or numbers between 0 and 1.)\n if (!isValidSampleRate(sampleRate)) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('[Tracing] Discarding transaction because of invalid sample rate.');\n transaction.sampled = false;\n return transaction;\n }\n\n // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n if (!sampleRate) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(\n `[Tracing] Discarding transaction because ${\n typeof options.tracesSampler === 'function'\n ? 'tracesSampler returned 0 or false'\n : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n }`,\n );\n transaction.sampled = false;\n return transaction;\n }\n\n // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n transaction.sampled = Math.random() < (sampleRate );\n\n // if we're not going to keep it, we're done\n if (!transaction.sampled) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(\n `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n sampleRate,\n )})`,\n );\n return transaction;\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] starting ${transaction.op} transaction - ${transaction.name}`);\n return transaction;\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate) {\n // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n if (isNaN(rate) || !(typeof rate === 'number' || typeof rate === 'boolean')) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n rate,\n )} of type ${JSON.stringify(typeof rate)}.`,\n );\n return false;\n }\n\n // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n if (rate < 0 || rate > 1) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${rate}.`);\n return false;\n }\n return true;\n}\n\n/**\n * Creates a new transaction and adds a sampling decision if it doesn't yet have one.\n *\n * The Hub.startTransaction method delegates to this method to do its work, passing the Hub instance in as `this`, as if\n * it had been called on the hub directly. Exists as a separate function so that it can be injected into the class as an\n * \"extension method.\"\n *\n * @param this: The Hub starting the transaction\n * @param transactionContext: Data used to configure the transaction\n * @param CustomSamplingContext: Optional data to be provided to the `tracesSampler` function (if any)\n *\n * @returns The new transaction\n *\n * @see {@link Hub.startTransaction}\n */\nfunction _startTransaction(\n \n transactionContext,\n customSamplingContext,\n) {\n var client = this.getClient();\n var options = (client && client.getOptions()) || {};\n\n let transaction = new Transaction(transactionContext, this);\n transaction = sample(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans ));\n }\n return transaction;\n}\n\n/**\n * Create new idle transaction.\n */\nfunction startIdleTransaction(\n hub,\n transactionContext,\n idleTimeout,\n finalTimeout,\n onScope,\n customSamplingContext,\n) {\n var client = hub.getClient();\n var options = (client && client.getOptions()) || {};\n\n let transaction = new IdleTransaction(transactionContext, hub, idleTimeout, finalTimeout, onScope);\n transaction = sample(transaction, options, {\n parentSampled: transactionContext.parentSampled,\n transactionContext,\n ...customSamplingContext,\n });\n if (transaction.sampled) {\n transaction.initSpanRecorder(options._experiments && (options._experiments.maxSpans ));\n }\n return transaction;\n}\n\n/**\n * @private\n */\nfunction _addTracingExtensions() {\n var carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {};\n if (!carrier.__SENTRY__.extensions.startTransaction) {\n carrier.__SENTRY__.extensions.startTransaction = _startTransaction;\n }\n if (!carrier.__SENTRY__.extensions.traceHeaders) {\n carrier.__SENTRY__.extensions.traceHeaders = traceHeaders;\n }\n}\n\n/**\n * @private\n */\nfunction _autoloadDatabaseIntegrations() {\n var carrier = getMainCarrier();\n if (!carrier.__SENTRY__) {\n return;\n }\n\n var packageToIntegrationMapping = {\n mongodb() {\n var integration = dynamicRequire(module, './integrations/node/mongo') \n\n;\n return new integration.Mongo();\n },\n mongoose() {\n var integration = dynamicRequire(module, './integrations/node/mongo') \n\n;\n return new integration.Mongo({ mongoose: true });\n },\n mysql() {\n var integration = dynamicRequire(module, './integrations/node/mysql') \n\n;\n return new integration.Mysql();\n },\n pg() {\n var integration = dynamicRequire(module, './integrations/node/postgres') \n\n;\n return new integration.Postgres();\n },\n };\n\n var mappedPackages = Object.keys(packageToIntegrationMapping)\n .filter(moduleName => !!loadModule(moduleName))\n .map(pkg => {\n try {\n return packageToIntegrationMapping[pkg]();\n } catch (e) {\n return undefined;\n }\n })\n .filter(p => p) ;\n\n if (mappedPackages.length > 0) {\n carrier.__SENTRY__.integrations = [...(carrier.__SENTRY__.integrations || []), ...mappedPackages];\n }\n}\n\n/**\n * This patches the global object and injects the Tracing extensions methods\n */\nfunction addExtensionMethods() {\n _addTracingExtensions();\n\n // Detect and automatically load specified integrations.\n if (isNodeEnv()) {\n _autoloadDatabaseIntegrations();\n }\n\n // If an error happens globally, we should make sure transaction status is set to error.\n registerErrorInstrumentation();\n}\n\nexport { _addTracingExtensions, addExtensionMethods, startIdleTransaction };\n//# sourceMappingURL=hubextensions.js.map\n","import { timestampWithMs, logger } from '@sentry/utils';\nimport { SpanRecorder } from './span.js';\nimport { Transaction } from './transaction.js';\n\nvar DEFAULT_IDLE_TIMEOUT = 1000;\nvar DEFAULT_FINAL_TIMEOUT = 30000;\nvar HEARTBEAT_INTERVAL = 5000;\n\n/**\n * @inheritDoc\n */\nclass IdleTransactionSpanRecorder extends SpanRecorder {\n constructor(\n _pushActivity,\n _popActivity,\n transactionSpanId,\n maxlen,\n ) {\n super(maxlen);this._pushActivity = _pushActivity;this._popActivity = _popActivity;this.transactionSpanId = transactionSpanId;;\n }\n\n /**\n * @inheritDoc\n */\n add(span) {\n // We should make sure we do not push and pop activities for\n // the transaction that this span recorder belongs to.\n if (span.spanId !== this.transactionSpanId) {\n // We patch span.finish() to pop an activity after setting an endTimestamp.\n span.finish = (endTimestamp) => {\n span.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n this._popActivity(span.spanId);\n };\n\n // We should only push new activities if the span does not have an end timestamp.\n if (span.endTimestamp === undefined) {\n this._pushActivity(span.spanId);\n }\n }\n\n super.add(span);\n }\n}\n\n/**\n * An IdleTransaction is a transaction that automatically finishes. It does this by tracking child spans as activities.\n * You can have multiple IdleTransactions active, but if the `onScope` option is specified, the idle transaction will\n * put itself on the scope on creation.\n */\nclass IdleTransaction extends Transaction {\n // Activities store a list of active spans\n __init() {this.activities = {};}\n\n // Track state of activities in previous heartbeat\n \n\n // Amount of times heartbeat has counted. Will cause transaction to finish after 3 beats.\n __init2() {this._heartbeatCounter = 0;}\n\n // We should not use heartbeat if we finished a transaction\n __init3() {this._finished = false;}\n\n __init4() {this._beforeFinishCallbacks = [];}\n\n /**\n * Timer that tracks Transaction idleTimeout\n */\n \n\n constructor(\n transactionContext,\n _idleHub,\n /**\n * The time to wait in ms until the idle transaction will be finished. This timer is started each time\n * there are no active spans on this transaction.\n */\n _idleTimeout = DEFAULT_IDLE_TIMEOUT,\n /**\n * The final value in ms that a transaction cannot exceed\n */\n _finalTimeout = DEFAULT_FINAL_TIMEOUT,\n // Whether or not the transaction should put itself on the scope when it starts and pop itself off when it ends\n _onScope = false,\n ) {\n super(transactionContext, _idleHub);this._idleHub = _idleHub;this._idleTimeout = _idleTimeout;this._finalTimeout = _finalTimeout;this._onScope = _onScope;IdleTransaction.prototype.__init.call(this);IdleTransaction.prototype.__init2.call(this);IdleTransaction.prototype.__init3.call(this);IdleTransaction.prototype.__init4.call(this);;\n\n if (_onScope) {\n // There should only be one active transaction on the scope\n clearActiveTransaction(_idleHub);\n\n // We set the transaction here on the scope so error events pick up the trace\n // context and attach it to the error.\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`Setting idle transaction on scope. Span ID: ${this.spanId}`);\n _idleHub.configureScope(scope => scope.setSpan(this));\n }\n\n this._startIdleTimeout();\n setTimeout(() => {\n if (!this._finished) {\n this.setStatus('deadline_exceeded');\n this.finish();\n }\n }, this._finalTimeout);\n }\n\n /** {@inheritDoc} */\n finish(endTimestamp = timestampWithMs()) {\n this._finished = true;\n this.activities = {};\n\n if (this.spanRecorder) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log('[Tracing] finishing IdleTransaction', new Date(endTimestamp * 1000).toISOString(), this.op);\n\n for (var callback of this._beforeFinishCallbacks) {\n callback(this, endTimestamp);\n }\n\n this.spanRecorder.spans = this.spanRecorder.spans.filter((span) => {\n // If we are dealing with the transaction itself, we just return it\n if (span.spanId === this.spanId) {\n return true;\n }\n\n // We cancel all pending spans with status \"cancelled\" to indicate the idle transaction was finished early\n if (!span.endTimestamp) {\n span.endTimestamp = endTimestamp;\n span.setStatus('cancelled');\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log('[Tracing] cancelling span since transaction ended early', JSON.stringify(span, undefined, 2));\n }\n\n var keepSpan = span.startTimestamp < endTimestamp;\n if (!keepSpan) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(\n '[Tracing] discarding Span since it happened after Transaction was finished',\n JSON.stringify(span, undefined, 2),\n );\n }\n return keepSpan;\n });\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] flushing IdleTransaction');\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] No active IdleTransaction');\n }\n\n // if `this._onScope` is `true`, the transaction put itself on the scope when it started\n if (this._onScope) {\n clearActiveTransaction(this._idleHub);\n }\n\n return super.finish(endTimestamp);\n }\n\n /**\n * Register a callback function that gets excecuted before the transaction finishes.\n * Useful for cleanup or if you want to add any additional spans based on current context.\n *\n * This is exposed because users have no other way of running something before an idle transaction\n * finishes.\n */\n registerBeforeFinishCallback(callback) {\n this._beforeFinishCallbacks.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n initSpanRecorder(maxlen) {\n if (!this.spanRecorder) {\n var pushActivity = (id) => {\n if (this._finished) {\n return;\n }\n this._pushActivity(id);\n };\n var popActivity = (id) => {\n if (this._finished) {\n return;\n }\n this._popActivity(id);\n };\n\n this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen);\n\n // Start heartbeat so that transactions do not run forever.\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('Starting heartbeat');\n this._pingHeartbeat();\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * Cancels the existing idletimeout, if there is one\n */\n _cancelIdleTimeout() {\n if (this._idleTimeoutID) {\n clearTimeout(this._idleTimeoutID);\n this._idleTimeoutID = undefined;\n }\n }\n\n /**\n * Creates an idletimeout\n */\n _startIdleTimeout(endTimestamp) {\n this._cancelIdleTimeout();\n this._idleTimeoutID = setTimeout(() => {\n if (!this._finished && Object.keys(this.activities).length === 0) {\n this.finish(endTimestamp);\n }\n }, this._idleTimeout);\n }\n\n /**\n * Start tracking a specific activity.\n * @param spanId The span id that represents the activity\n */\n _pushActivity(spanId) {\n this._cancelIdleTimeout();\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] pushActivity: ${spanId}`);\n this.activities[spanId] = true;\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n /**\n * Remove an activity from usage\n * @param spanId The span id that represents the activity\n */\n _popActivity(spanId) {\n if (this.activities[spanId]) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] popActivity ${spanId}`);\n delete this.activities[spanId];\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] new activities count', Object.keys(this.activities).length);\n }\n\n if (Object.keys(this.activities).length === 0) {\n // We need to add the timeout here to have the real endtimestamp of the transaction\n // Remember timestampWithMs is in seconds, timeout is in ms\n var endTimestamp = timestampWithMs() + this._idleTimeout / 1000;\n this._startIdleTimeout(endTimestamp);\n }\n }\n\n /**\n * Checks when entries of this.activities are not changing for 3 beats.\n * If this occurs we finish the transaction.\n */\n _beat() {\n // We should not be running heartbeat if the idle transaction is finished.\n if (this._finished) {\n return;\n }\n\n var heartbeatString = Object.keys(this.activities).join('');\n\n if (heartbeatString === this._prevHeartbeatString) {\n this._heartbeatCounter += 1;\n } else {\n this._heartbeatCounter = 1;\n }\n\n this._prevHeartbeatString = heartbeatString;\n\n if (this._heartbeatCounter >= 3) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] Transaction finished because of no change for 3 heart beats');\n this.setStatus('deadline_exceeded');\n this.finish();\n } else {\n this._pingHeartbeat();\n }\n }\n\n /**\n * Pings the heartbeat\n */\n _pingHeartbeat() {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`);\n setTimeout(() => {\n this._beat();\n }, HEARTBEAT_INTERVAL);\n }\n}\n\n/**\n * Reset transaction on scope to `undefined`\n */\nfunction clearActiveTransaction(hub) {\n var scope = hub.getScope();\n if (scope) {\n var transaction = scope.getTransaction();\n if (transaction) {\n scope.setSpan(undefined);\n }\n }\n}\n\nexport { DEFAULT_FINAL_TIMEOUT, DEFAULT_IDLE_TIMEOUT, HEARTBEAT_INTERVAL, IdleTransaction, IdleTransactionSpanRecorder };\n//# sourceMappingURL=idletransaction.js.map\n","import { _nullishCoalesce } from '@sentry/utils/esm/buildPolyfills';\nimport { uuid4, timestampWithMs, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Keeps track of finished spans for a given transaction\n * @internal\n * @hideconstructor\n * @hidden\n */\nclass SpanRecorder {\n __init() {this.spans = [];}\n\n constructor(maxlen = 1000) {;SpanRecorder.prototype.__init.call(this);\n this._maxlen = maxlen;\n }\n\n /**\n * This is just so that we don't run out of memory while recording a lot\n * of spans. At some point we just stop and flush out the start of the\n * trace tree (i.e.the first n spans with the smallest\n * start_timestamp).\n */\n add(span) {\n if (this.spans.length > this._maxlen) {\n span.spanRecorder = undefined;\n } else {\n this.spans.push(span);\n }\n }\n}\n\n/**\n * Span contains all data about a span\n */\nclass Span {\n /**\n * @inheritDoc\n */\n __init2() {this.traceId = uuid4();}\n\n /**\n * @inheritDoc\n */\n __init3() {this.spanId = uuid4().substring(16);}\n\n /**\n * @inheritDoc\n */\n \n\n /**\n * Internal keeper of the status\n */\n \n\n /**\n * @inheritDoc\n */\n \n\n /**\n * Timestamp in seconds when the span was created.\n */\n __init4() {this.startTimestamp = timestampWithMs();}\n\n /**\n * Timestamp in seconds when the span ended.\n */\n \n\n /**\n * @inheritDoc\n */\n \n\n /**\n * @inheritDoc\n */\n \n\n /**\n * @inheritDoc\n */\n __init5() {this.tags = {};}\n\n /**\n * @inheritDoc\n */\n __init6() {this.data = {};}\n\n /**\n * List of spans that were finalized\n */\n \n\n /**\n * @inheritDoc\n */\n \n\n /**\n * You should never call the constructor manually, always use `Sentry.startTransaction()`\n * or call `startChild()` on an existing span.\n * @internal\n * @hideconstructor\n * @hidden\n */\n constructor(spanContext) {;Span.prototype.__init2.call(this);Span.prototype.__init3.call(this);Span.prototype.__init4.call(this);Span.prototype.__init5.call(this);Span.prototype.__init6.call(this);\n if (!spanContext) {\n return this;\n }\n if (spanContext.traceId) {\n this.traceId = spanContext.traceId;\n }\n if (spanContext.spanId) {\n this.spanId = spanContext.spanId;\n }\n if (spanContext.parentSpanId) {\n this.parentSpanId = spanContext.parentSpanId;\n }\n // We want to include booleans as well here\n if ('sampled' in spanContext) {\n this.sampled = spanContext.sampled;\n }\n if (spanContext.op) {\n this.op = spanContext.op;\n }\n if (spanContext.description) {\n this.description = spanContext.description;\n }\n if (spanContext.data) {\n this.data = spanContext.data;\n }\n if (spanContext.tags) {\n this.tags = spanContext.tags;\n }\n if (spanContext.status) {\n this.status = spanContext.status;\n }\n if (spanContext.startTimestamp) {\n this.startTimestamp = spanContext.startTimestamp;\n }\n if (spanContext.endTimestamp) {\n this.endTimestamp = spanContext.endTimestamp;\n }\n }\n\n /**\n * @inheritDoc\n */\n startChild(\n spanContext,\n ) {\n var childSpan = new Span({\n ...spanContext,\n parentSpanId: this.spanId,\n sampled: this.sampled,\n traceId: this.traceId,\n });\n\n childSpan.spanRecorder = this.spanRecorder;\n if (childSpan.spanRecorder) {\n childSpan.spanRecorder.add(childSpan);\n }\n\n childSpan.transaction = this.transaction;\n\n return childSpan;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this.tags = { ...this.tags, [key]: value };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setData(key, value) {\n this.data = { ...this.data, [key]: value };\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setStatus(value) {\n this.status = value;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setHttpStatus(httpStatus) {\n this.setTag('http.status_code', String(httpStatus));\n var spanStatus = spanStatusfromHttpCode(httpStatus);\n if (spanStatus !== 'unknown_error') {\n this.setStatus(spanStatus);\n }\n return this;\n }\n\n /**\n * @inheritDoc\n */\n isSuccess() {\n return this.status === 'ok';\n }\n\n /**\n * @inheritDoc\n */\n finish(endTimestamp) {\n this.endTimestamp = typeof endTimestamp === 'number' ? endTimestamp : timestampWithMs();\n }\n\n /**\n * @inheritDoc\n */\n toTraceparent() {\n let sampledString = '';\n if (this.sampled !== undefined) {\n sampledString = this.sampled ? '-1' : '-0';\n }\n return `${this.traceId}-${this.spanId}${sampledString}`;\n }\n\n /**\n * @inheritDoc\n */\n toContext() {\n return dropUndefinedKeys({\n data: this.data,\n description: this.description,\n endTimestamp: this.endTimestamp,\n op: this.op,\n parentSpanId: this.parentSpanId,\n sampled: this.sampled,\n spanId: this.spanId,\n startTimestamp: this.startTimestamp,\n status: this.status,\n tags: this.tags,\n traceId: this.traceId,\n });\n }\n\n /**\n * @inheritDoc\n */\n updateWithContext(spanContext) {\n this.data = _nullishCoalesce(spanContext.data, () => ( {}));\n this.description = spanContext.description;\n this.endTimestamp = spanContext.endTimestamp;\n this.op = spanContext.op;\n this.parentSpanId = spanContext.parentSpanId;\n this.sampled = spanContext.sampled;\n this.spanId = _nullishCoalesce(spanContext.spanId, () => ( this.spanId));\n this.startTimestamp = _nullishCoalesce(spanContext.startTimestamp, () => ( this.startTimestamp));\n this.status = spanContext.status;\n this.tags = _nullishCoalesce(spanContext.tags, () => ( {}));\n this.traceId = _nullishCoalesce(spanContext.traceId, () => ( this.traceId));\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getTraceContext()\n\n {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n trace_id: this.traceId,\n });\n }\n\n /**\n * @inheritDoc\n */\n toJSON()\n\n {\n return dropUndefinedKeys({\n data: Object.keys(this.data).length > 0 ? this.data : undefined,\n description: this.description,\n op: this.op,\n parent_span_id: this.parentSpanId,\n span_id: this.spanId,\n start_timestamp: this.startTimestamp,\n status: this.status,\n tags: Object.keys(this.tags).length > 0 ? this.tags : undefined,\n timestamp: this.endTimestamp,\n trace_id: this.traceId,\n });\n }\n}\n\n/**\n * Converts a HTTP status code into a {@link SpanStatusType}.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\nfunction spanStatusfromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return 'ok';\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return 'unauthenticated';\n case 403:\n return 'permission_denied';\n case 404:\n return 'not_found';\n case 409:\n return 'already_exists';\n case 413:\n return 'failed_precondition';\n case 429:\n return 'resource_exhausted';\n default:\n return 'invalid_argument';\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return 'unimplemented';\n case 503:\n return 'unavailable';\n case 504:\n return 'deadline_exceeded';\n default:\n return 'internal_error';\n }\n }\n\n return 'unknown_error';\n}\n\nexport { Span, SpanRecorder, spanStatusfromHttpCode };\n//# sourceMappingURL=span.js.map\n","import { _nullishCoalesce } from '@sentry/utils/esm/buildPolyfills';\nimport { getCurrentHub } from '@sentry/hub';\nimport { logger, dropUndefinedKeys, isBaggageMutable, createBaggage, getSentryBaggageItems } from '@sentry/utils';\nimport { Span, SpanRecorder } from './span.js';\n\n/** JSDoc */\nclass Transaction extends Span {\n \n\n /**\n * The reference to the current hub.\n */\n \n\n __init() {this._measurements = {};}\n\n /**\n * This constructor should never be called manually. Those instrumenting tracing should use\n * `Sentry.startTransaction()`, and internal methods should use `hub.startTransaction()`.\n * @internal\n * @hideconstructor\n * @hidden\n */\n constructor(transactionContext, hub) {\n super(transactionContext);Transaction.prototype.__init.call(this);;\n\n this._hub = hub || getCurrentHub();\n\n this._name = transactionContext.name || '';\n\n this.metadata = transactionContext.metadata || {};\n this._trimEnd = transactionContext.trimEnd;\n\n // this is because transactions are also spans, and spans have a transaction pointer\n this.transaction = this;\n }\n\n /** Getter for `name` property */\n get name() {\n return this._name;\n }\n\n /** Setter for `name` property, which also sets `source` */\n set name(newName) {\n this._name = newName;\n this.metadata.source = 'custom';\n }\n\n /**\n * JSDoc\n */\n setName(name, source = 'custom') {\n this.name = name;\n this.metadata.source = source;\n }\n\n /**\n * Attaches SpanRecorder to the span itself\n * @param maxlen maximum number of spans that can be recorded\n */\n initSpanRecorder(maxlen = 1000) {\n if (!this.spanRecorder) {\n this.spanRecorder = new SpanRecorder(maxlen);\n }\n this.spanRecorder.add(this);\n }\n\n /**\n * @inheritDoc\n */\n setMeasurement(name, value, unit = '') {\n this._measurements[name] = { value, unit };\n }\n\n /**\n * @inheritDoc\n */\n setMetadata(newMetadata) {\n this.metadata = { ...this.metadata, ...newMetadata };\n }\n\n /**\n * @inheritDoc\n */\n finish(endTimestamp) {\n // This transaction is already finished, so we should not flush it again.\n if (this.endTimestamp !== undefined) {\n return undefined;\n }\n\n if (!this.name) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Transaction has no name, falling back to ``.');\n this.name = '';\n }\n\n // just sets the end timestamp\n super.finish(endTimestamp);\n\n if (this.sampled !== true) {\n // At this point if `sampled !== true` we want to discard the transaction.\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] Discarding transaction because its trace was not chosen to be sampled.');\n\n var client = this._hub.getClient();\n if (client) {\n client.recordDroppedEvent('sample_rate', 'transaction');\n }\n\n return undefined;\n }\n\n var finishedSpans = this.spanRecorder ? this.spanRecorder.spans.filter(s => s !== this && s.endTimestamp) : [];\n\n if (this._trimEnd && finishedSpans.length > 0) {\n this.endTimestamp = finishedSpans.reduce((prev, current) => {\n if (prev.endTimestamp && current.endTimestamp) {\n return prev.endTimestamp > current.endTimestamp ? prev : current;\n }\n return prev;\n }).endTimestamp;\n }\n\n var metadata = this.metadata;\n\n var transaction = {\n contexts: {\n trace: this.getTraceContext(),\n },\n spans: finishedSpans,\n start_timestamp: this.startTimestamp,\n tags: this.tags,\n timestamp: this.endTimestamp,\n transaction: this.name,\n type: 'transaction',\n sdkProcessingMetadata: {\n ...metadata,\n baggage: this.getBaggage(),\n },\n ...(metadata.source && {\n transaction_info: {\n source: metadata.source,\n },\n }),\n };\n\n var hasMeasurements = Object.keys(this._measurements).length > 0;\n\n if (hasMeasurements) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(\n '[Measurements] Adding measurements to transaction',\n JSON.stringify(this._measurements, undefined, 2),\n );\n transaction.measurements = this._measurements;\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] Finishing ${this.op} transaction: ${this.name}.`);\n\n return this._hub.captureEvent(transaction);\n }\n\n /**\n * @inheritDoc\n */\n toContext() {\n var spanContext = super.toContext();\n\n return dropUndefinedKeys({\n ...spanContext,\n name: this.name,\n trimEnd: this._trimEnd,\n });\n }\n\n /**\n * @inheritDoc\n */\n updateWithContext(transactionContext) {\n super.updateWithContext(transactionContext);\n\n this.name = _nullishCoalesce(transactionContext.name, () => ( ''));\n\n this._trimEnd = transactionContext.trimEnd;\n\n return this;\n }\n\n /**\n * @inheritdoc\n *\n * @experimental\n */\n getBaggage() {\n var existingBaggage = this.metadata.baggage;\n\n // Only add Sentry baggage items to baggage, if baggage does not exist yet or it is still\n // empty and mutable\n var finalBaggage =\n !existingBaggage || isBaggageMutable(existingBaggage)\n ? this._populateBaggageWithSentryValues(existingBaggage)\n : existingBaggage;\n\n // Update the baggage stored on the transaction.\n this.metadata.baggage = finalBaggage;\n\n return finalBaggage;\n }\n\n /**\n * Collects and adds data to the passed baggage object.\n *\n * Note: This function does not explicitly check if the passed baggage object is allowed\n * to be modified. Implicitly, `setBaggageValue` will not make modification to the object\n * if it was already set immutable.\n *\n * After adding the data, the baggage object is set immutable to prevent further modifications.\n *\n * @param baggage\n *\n * @returns modified and immutable baggage object\n */\n _populateBaggageWithSentryValues(baggage = createBaggage({})) {\n var hub = this._hub || getCurrentHub();\n var client = hub && hub.getClient();\n\n if (!client) return baggage;\n\n const { environment, release } = client.getOptions() || {};\n const { publicKey: public_key } = client.getDsn() || {};\n\n var rate = this.metadata && this.metadata.transactionSampling && this.metadata.transactionSampling.rate;\n var sample_rate =\n rate !== undefined\n ? rate.toLocaleString('fullwide', { useGrouping: false, maximumFractionDigits: 16 })\n : undefined;\n\n var scope = hub.getScope();\n const { segment: user_segment } = (scope && scope.getUser()) || {};\n\n var source = this.metadata.source;\n var transaction = source && source !== 'url' ? this.name : undefined;\n\n return createBaggage(\n dropUndefinedKeys({\n environment,\n release,\n transaction,\n user_segment,\n public_key,\n trace_id: this.traceId,\n sample_rate,\n ...getSentryBaggageItems(baggage), // keep user-added values\n } ),\n '',\n false, // set baggage immutable\n );\n }\n}\n\nexport { Transaction };\n//# sourceMappingURL=transaction.js.map\n","import { getCurrentHub } from '@sentry/hub';\nexport { TRACEPARENT_REGEXP, extractTraceparentData, stripUrlQueryAndFragment } from '@sentry/utils';\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n var client = getCurrentHub().getClient();\n var options = maybeOptions || (client && client.getOptions());\n return !!options && ('tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\n/** Grabs active transaction off scope, if any */\nfunction getActiveTransaction(maybeHub) {\n var hub = maybeHub || getCurrentHub();\n var scope = hub.getScope();\n return scope && (scope.getTransaction() );\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n return time / 1000;\n}\n\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\nfunction secToMs(time) {\n return time * 1000;\n}\n\nexport { getActiveTransaction, hasTracingEnabled, msToSec, secToMs };\n//# sourceMappingURL=utils.js.map\n","import { isString } from './is.js';\nimport { logger } from './logger.js';\n\nvar BAGGAGE_HEADER_NAME = 'baggage';\n\nvar SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nvar SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nvar MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/** Create an instance of Baggage */\nfunction createBaggage(initItems, baggageString = '', mutable = true) {\n return [{ ...initItems }, baggageString, mutable];\n}\n\n/** Get a value from baggage */\nfunction getBaggageValue(baggage, key) {\n return baggage[0][key];\n}\n\n/** Add a value to baggage */\nfunction setBaggageValue(baggage, key, value) {\n if (isBaggageMutable(baggage)) {\n baggage[0][key] = value;\n }\n}\n\n/** Check if the Sentry part of the passed baggage (i.e. the first element in the tuple) is empty */\nfunction isSentryBaggageEmpty(baggage) {\n return Object.keys(baggage[0]).length === 0;\n}\n\n/** Returns Sentry specific baggage values */\nfunction getSentryBaggageItems(baggage) {\n return baggage[0];\n}\n\n/**\n * Returns 3rd party baggage string of @param baggage\n * @param baggage\n */\nfunction getThirdPartyBaggage(baggage) {\n return baggage[1];\n}\n\n/**\n * Checks if baggage is mutable\n * @param baggage\n * @returns true if baggage is mutable, else false\n */\nfunction isBaggageMutable(baggage) {\n return baggage[2];\n}\n\n/**\n * Sets the passed baggage immutable\n * @param baggage\n */\nfunction setBaggageImmutable(baggage) {\n baggage[2] = false;\n}\n\n/** Serialize a baggage object */\nfunction serializeBaggage(baggage) {\n return Object.keys(baggage[0]).reduce((prev, key) => {\n var val = baggage[0][key] ;\n var baggageEntry = `${SENTRY_BAGGAGE_KEY_PREFIX}${encodeURIComponent(key)}=${encodeURIComponent(val)}`;\n var newVal = prev === '' ? baggageEntry : `${prev},${baggageEntry}`;\n if (newVal.length > MAX_BAGGAGE_STRING_LENGTH) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(`Not adding key: ${key} with val: ${val} to baggage due to exceeding baggage size limits.`);\n return prev;\n } else {\n return newVal;\n }\n }, baggage[1]);\n}\n\n/**\n * Parse a baggage header from a string or a string array and return a Baggage object\n *\n * If @param includeThirdPartyEntries is set to true, third party baggage entries are added to the Baggage object\n * (This is necessary for merging potentially pre-existing baggage headers in outgoing requests with\n * our `sentry-` values)\n */\nfunction parseBaggageHeader(\n inputBaggageValue,\n includeThirdPartyEntries = false,\n) {\n // Adding this check here because we got reports of this function failing due to the input value\n // not being a string. This debug log might help us determine what's going on here.\n if ((!Array.isArray(inputBaggageValue) && !isString(inputBaggageValue)) || typeof inputBaggageValue === 'number') {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(\n '[parseBaggageHeader] Received input value of incompatible type: ',\n typeof inputBaggageValue,\n inputBaggageValue,\n );\n\n // Gonna early-return an empty baggage object so that we don't fail later on\n return createBaggage({}, '');\n }\n\n var baggageEntries = (isString(inputBaggageValue) ? inputBaggageValue : inputBaggageValue.join(','))\n .split(',')\n .map(entry => entry.trim())\n .filter(entry => entry !== '' && (includeThirdPartyEntries || SENTRY_BAGGAGE_KEY_PREFIX_REGEX.test(entry)));\n\n return baggageEntries.reduce(\n ([baggageObj, baggageString], curr) => {\n const [key, val] = curr.split('=');\n if (SENTRY_BAGGAGE_KEY_PREFIX_REGEX.test(key)) {\n var baggageKey = decodeURIComponent(key.split('-')[1]);\n return [\n {\n ...baggageObj,\n [baggageKey]: decodeURIComponent(val),\n },\n baggageString,\n true,\n ];\n } else {\n return [baggageObj, baggageString === '' ? curr : `${baggageString},${curr}`, true];\n }\n },\n [{}, '', true],\n );\n}\n\n/**\n * Merges the baggage header we saved from the incoming request (or meta tag) with\n * a possibly created or modified baggage header by a third party that's been added\n * to the outgoing request header.\n *\n * In case @param headerBaggageString exists, we can safely add the the 3rd party part of @param headerBaggage\n * with our @param incomingBaggage. This is possible because if we modified anything beforehand,\n * it would only affect parts of the sentry baggage (@see Baggage interface).\n *\n * @param incomingBaggage the baggage header of the incoming request that might contain sentry entries\n * @param thirdPartyBaggageHeader possibly existing baggage header string or string[] added from a third\n * party to the request headers\n *\n * @return a merged and serialized baggage string to be propagated with the outgoing request\n */\nfunction mergeAndSerializeBaggage(incomingBaggage, thirdPartyBaggageHeader) {\n if (!incomingBaggage && !thirdPartyBaggageHeader) {\n return '';\n }\n\n var headerBaggage = (thirdPartyBaggageHeader && parseBaggageHeader(thirdPartyBaggageHeader, true)) || undefined;\n var thirdPartyHeaderBaggage = headerBaggage && getThirdPartyBaggage(headerBaggage);\n\n var finalBaggage = createBaggage((incomingBaggage && incomingBaggage[0]) || {}, thirdPartyHeaderBaggage || '');\n return serializeBaggage(finalBaggage);\n}\n\n/**\n * Helper function that takes a raw baggage string (if available) and the processed sentry-trace header\n * data (if available), parses the baggage string and creates a Baggage object\n * If there is no baggage string, it will create an empty Baggage object.\n * In a second step, this functions determines if the created Baggage object should be set immutable\n * to prevent mutation of the Sentry data.\n *\n * Extracted this logic to a function because it's duplicated in a lot of places.\n *\n * @param rawBaggageValue\n * @param sentryTraceHeader\n */\nfunction parseBaggageSetMutability(\n rawBaggageValue,\n sentryTraceHeader,\n) {\n var baggage = parseBaggageHeader(rawBaggageValue || '');\n\n // Because we are always creating a Baggage object by calling `parseBaggageHeader` above\n // (either a filled one or an empty one, even if we didn't get a `baggage` header),\n // we only need to check if we have a sentry-trace header or not. As soon as we have it,\n // we set baggage immutable. In case we don't get a sentry-trace header, we can assume that\n // this SDK is the head of the trace and thus we still permit mutation at this time.\n // There is one exception though, which is that we get a baggage-header with `sentry-`\n // items but NO sentry-trace header. In this case we also set the baggage immutable for now\n // but if smoething like this would ever happen, we should revisit this and determine\n // what this would actually mean for the trace (i.e. is this SDK the head?, what happened\n // before that we don't have a sentry-trace header?, etc)\n (sentryTraceHeader || !isSentryBaggageEmpty(baggage)) && setBaggageImmutable(baggage);\n\n return baggage;\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, createBaggage, getBaggageValue, getSentryBaggageItems, getThirdPartyBaggage, isBaggageMutable, isSentryBaggageEmpty, mergeAndSerializeBaggage, parseBaggageHeader, parseBaggageSetMutability, serializeBaggage, setBaggageImmutable, setBaggageValue };\n//# sourceMappingURL=baggage.js.map\n","import { getGlobalObject } from './global.js';\nimport { isString } from './is.js';\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(elem, keyAttrs) {\n \n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n var MAX_TRAVERSE_HEIGHT = 5;\n var MAX_OUTPUT_LEN = 80;\n var out = [];\n let height = 0;\n let len = 0;\n var separator = ' > ';\n var sepLength = separator.length;\n let nextStr;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n var elem = el \n\n;\n\n var out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n var keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n var allowedAttrs = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n var global = getGlobalObject();\n try {\n return global.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\nexport { getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * Polyfill for the nullish coalescing operator (`??`).\n *\n * Note that the RHS is wrapped in a function so that if it's a computed value, that evaluation won't happen unless the\n * LHS evaluates to a nullish value, to mimic the operator's short-circuiting behavior.\n *\n * Adapted from Sucrase (https://github.com/alangpierce/sucrase)\n *\n * @param lhs The value of the expression to the left of the `??`\n * @param rhsFn A function returning the value of the expression to the right of the `??`\n * @returns The LHS value, unless it's `null` or `undefined`, in which case, the RHS value\n */\nfunction _nullishCoalesce(lhs, rhsFn) {\n // by checking for loose equality to `null`, we catch both `null` and `undefined`\n return lhs != null ? lhs : rhsFn();\n}\n\n// Sucrase version:\n// function _nullishCoalesce(lhs, rhsFn) {\n// if (lhs != null) {\n// return lhs;\n// } else {\n// return rhsFn();\n// }\n// }\n\nexport { _nullishCoalesce };\n//# sourceMappingURL=_nullishCoalesce.js.map\n","import { isNodeEnv } from './node.js';\n\n/** Internal */\n\nvar fallbackGlobalObject = {};\n\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nfunction getGlobalObject() {\n return (\n isNodeEnv()\n ? global\n : typeof window !== 'undefined' ? window : typeof self !== 'undefined'\n ? self\n : fallbackGlobalObject\n ) ;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `getGlobalObject`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n var global = (obj || getGlobalObject()) ;\n var __SENTRY__ = (global.__SENTRY__ = global.__SENTRY__ || {});\n var singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n\nexport { getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=global.js.map\n","import { getGlobalObject } from './global.js';\nimport { isInstanceOf, isString } from './is.js';\nimport { logger, CONSOLE_LEVELS } from './logger.js';\nimport { fill } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\nimport { supportsNativeFetch, supportsHistory } from './supports.js';\n\nvar global = getGlobalObject();\n\n/**\n * Instrument native APIs to call handlers that can be used to create breadcrumbs, APM spans etc.\n * - Console API\n * - Fetch API\n * - XHR API\n * - History API\n * - DOM API (click/typing)\n * - Error API\n * - UnhandledRejection API\n */\n\nvar handlers = {};\nvar instrumented = {};\n\n/** Instruments given API */\nfunction instrument(type) {\n if (instrumented[type]) {\n return;\n }\n\n instrumented[type] = true;\n\n switch (type) {\n case 'console':\n instrumentConsole();\n break;\n case 'dom':\n instrumentDOM();\n break;\n case 'xhr':\n instrumentXHR();\n break;\n case 'fetch':\n instrumentFetch();\n break;\n case 'history':\n instrumentHistory();\n break;\n case 'error':\n instrumentError();\n break;\n case 'unhandledrejection':\n instrumentUnhandledRejection();\n break;\n default:\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('unknown instrumentation type:', type);\n return;\n }\n}\n\n/**\n * Add handler that will be called when given type of instrumentation triggers.\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addInstrumentationHandler(type, callback) {\n handlers[type] = handlers[type] || [];\n (handlers[type] ).push(callback);\n instrument(type);\n}\n\n/** JSDoc */\nfunction triggerHandlers(type, data) {\n if (!type || !handlers[type]) {\n return;\n }\n\n for (var handler of handlers[type] || []) {\n try {\n handler(data);\n } catch (e) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n\n/** JSDoc */\nfunction instrumentConsole() {\n if (!('console' in global)) {\n return;\n }\n\n CONSOLE_LEVELS.forEach(function (level) {\n if (!(level in global.console)) {\n return;\n }\n\n fill(global.console, level, function (originalConsoleMethod) {\n return function (...args) {\n triggerHandlers('console', { args, level });\n\n // this fails for some browsers. :(\n if (originalConsoleMethod) {\n originalConsoleMethod.apply(global.console, args);\n }\n };\n });\n });\n}\n\n/** JSDoc */\nfunction instrumentFetch() {\n if (!supportsNativeFetch()) {\n return;\n }\n\n fill(global, 'fetch', function (originalFetch) {\n return function (...args) {\n var handlerData = {\n args,\n fetchData: {\n method: getFetchMethod(args),\n url: getFetchUrl(args),\n },\n startTimestamp: Date.now(),\n };\n\n triggerHandlers('fetch', {\n ...handlerData,\n });\n\n return originalFetch.apply(global, args).then(\n (response) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n response,\n });\n return response;\n },\n (error) => {\n triggerHandlers('fetch', {\n ...handlerData,\n endTimestamp: Date.now(),\n error,\n });\n // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n // it means the sentry.javascript SDK caught an error invoking your application code.\n // This is expected behavior and NOT indicative of a bug with sentry.javascript.\n throw error;\n },\n );\n };\n });\n}\n\n/** Extract `method` from fetch call arguments */\nfunction getFetchMethod(fetchArgs = []) {\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) {\n return String(fetchArgs[0].method).toUpperCase();\n }\n if (fetchArgs[1] && fetchArgs[1].method) {\n return String(fetchArgs[1].method).toUpperCase();\n }\n return 'GET';\n}\n\n/** Extract `url` from fetch call arguments */\nfunction getFetchUrl(fetchArgs = []) {\n if (typeof fetchArgs[0] === 'string') {\n return fetchArgs[0];\n }\n if ('Request' in global && isInstanceOf(fetchArgs[0], Request)) {\n return fetchArgs[0].url;\n }\n return String(fetchArgs[0]);\n}\n\n/** JSDoc */\nfunction instrumentXHR() {\n if (!('XMLHttpRequest' in global)) {\n return;\n }\n\n var xhrproto = XMLHttpRequest.prototype;\n\n fill(xhrproto, 'open', function (originalOpen) {\n return function ( ...args) {\n var xhr = this;\n var url = args[1];\n var xhrInfo = (xhr.__sentry_xhr__ = {\n method: isString(args[0]) ? args[0].toUpperCase() : args[0],\n url: args[1],\n });\n\n // if Sentry key appears in URL, don't capture it as a request\n if (isString(url) && xhrInfo.method === 'POST' && url.match(/sentry_key/)) {\n xhr.__sentry_own_request__ = true;\n }\n\n var onreadystatechangeHandler = function () {\n if (xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhrInfo.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n triggerHandlers('xhr', {\n args,\n endTimestamp: Date.now(),\n startTimestamp: Date.now(),\n xhr,\n });\n }\n };\n\n if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n fill(xhr, 'onreadystatechange', function (original) {\n return function (...readyStateArgs) {\n onreadystatechangeHandler();\n return original.apply(xhr, readyStateArgs);\n };\n });\n } else {\n xhr.addEventListener('readystatechange', onreadystatechangeHandler);\n }\n\n return originalOpen.apply(xhr, args);\n };\n });\n\n fill(xhrproto, 'send', function (originalSend) {\n return function ( ...args) {\n if (this.__sentry_xhr__ && args[0] !== undefined) {\n this.__sentry_xhr__.body = args[0];\n }\n\n triggerHandlers('xhr', {\n args,\n startTimestamp: Date.now(),\n xhr: this,\n });\n\n return originalSend.apply(this, args);\n };\n });\n}\n\nlet lastHref;\n\n/** JSDoc */\nfunction instrumentHistory() {\n if (!supportsHistory()) {\n return;\n }\n\n var oldOnPopState = global.onpopstate;\n global.onpopstate = function ( ...args) {\n var to = global.location.href;\n // keep track of the current URL state, as we always receive only the updated state\n var from = lastHref;\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n if (oldOnPopState) {\n // Apparently this can throw in Firefox when incorrectly implemented plugin is installed.\n // https://github.com/getsentry/sentry-javascript/issues/3344\n // https://github.com/bugsnag/bugsnag-js/issues/469\n try {\n return oldOnPopState.apply(this, args);\n } catch (_oO) {\n // no-empty\n }\n }\n };\n\n /** @hidden */\n function historyReplacementFunction(originalHistoryFunction) {\n return function ( ...args) {\n var url = args.length > 2 ? args[2] : undefined;\n if (url) {\n // coerce to string (this is what pushState does)\n var from = lastHref;\n var to = String(url);\n // keep track of the current URL state, as we always receive only the updated state\n lastHref = to;\n triggerHandlers('history', {\n from,\n to,\n });\n }\n return originalHistoryFunction.apply(this, args);\n };\n }\n\n fill(global.history, 'pushState', historyReplacementFunction);\n fill(global.history, 'replaceState', historyReplacementFunction);\n}\n\nvar debounceDuration = 1000;\nlet debounceTimerID;\nlet lastCapturedEvent;\n\n/**\n * Decide whether the current event should finish the debounce of previously captured one.\n * @param previous previously captured event\n * @param current event to be captured\n */\nfunction shouldShortcircuitPreviousDebounce(previous, current) {\n // If there was no previous event, it should always be swapped for the new one.\n if (!previous) {\n return true;\n }\n\n // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n if (previous.type !== current.type) {\n return true;\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 (previous.target !== current.target) {\n return true;\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 false;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(event) {\n // We are only interested in filtering `keypress` events for now.\n if (event.type !== 'keypress') {\n return false;\n }\n\n try {\n var target = event.target ;\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 } 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 return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param handler function that will be triggered\n * @param globalListener indicates whether event was captured by the global event listener\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nfunction makeDOMEventHandler(handler, globalListener = false) {\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 || lastCapturedEvent === event) {\n return;\n }\n\n // We always want to skip _some_ events.\n if (shouldSkipDOMEvent(event)) {\n return;\n }\n\n var name = event.type === 'keypress' ? 'input' : event.type;\n\n // If there is no debounce timer, it means that we can safely capture the new event and store it for future comparisons.\n if (debounceTimerID === undefined) {\n handler({\n event: event,\n name,\n global: globalListener,\n });\n lastCapturedEvent = event;\n }\n // If there is a debounce awaiting, 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 else if (shouldShortcircuitPreviousDebounce(lastCapturedEvent, event)) {\n handler({\n event: event,\n name,\n global: globalListener,\n });\n lastCapturedEvent = event;\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 = global.setTimeout(() => {\n debounceTimerID = undefined;\n }, debounceDuration);\n };\n}\n\n/** JSDoc */\nfunction instrumentDOM() {\n if (!('document' in global)) {\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 var triggerDOMHandler = triggerHandlers.bind(null, 'dom');\n var globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n global.document.addEventListener('click', globalDOMEventHandler, false);\n global.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 var proto = (global )[target] && (global )[target].prototype;\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 var el = this ;\n var handlers = (el.__sentry_instrumentation_handlers__ = el.__sentry_instrumentation_handlers__ || {});\n var handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n if (!handlerForType.handler) {\n var handler = makeDOMEventHandler(triggerDOMHandler);\n handlerForType.handler = handler;\n originalAddEventListener.call(this, type, handler, options);\n }\n\n handlerForType.refCount += 1;\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 var el = this ;\n var handlers = el.__sentry_instrumentation_handlers__ || {};\n var handlerForType = handlers[type];\n\n if (handlerForType) {\n handlerForType.refCount -= 1;\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]; }\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\nlet _oldOnErrorHandler = null;\n/** JSDoc */\nfunction instrumentError() {\n _oldOnErrorHandler = global.onerror;\n\n global.onerror = function (msg, url, line, column, error) {\n triggerHandlers('error', {\n column,\n error,\n line,\n msg,\n url,\n });\n\n if (_oldOnErrorHandler) {\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n}\n\nlet _oldOnUnhandledRejectionHandler = null;\n/** JSDoc */\nfunction instrumentUnhandledRejection() {\n _oldOnUnhandledRejectionHandler = global.onunhandledrejection;\n\n global.onunhandledrejection = function (e) {\n triggerHandlers('unhandledrejection', e);\n\n if (_oldOnUnhandledRejectionHandler) {\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n}\n\nexport { addInstrumentationHandler };\n//# sourceMappingURL=instrument.js.map\n","var objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n\nfunction isBuiltin(wat, ty) {\n return objectToString.call(wat) === `[object ${ty}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable };\n//# sourceMappingURL=is.js.map\n","import { getGlobalObject, getGlobalSingleton } from './global.js';\n\n// TODO: Implement different loggers for different environments\nvar global = getGlobalObject();\n\n/** Prefix for logging strings */\nvar PREFIX = 'Sentry Logger ';\n\nvar CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'] ;\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n var global = getGlobalObject();\n\n if (!('console' in global)) {\n return callback();\n }\n\n var originalConsole = global.console ;\n var wrappedLevels = {};\n\n // Restore all wrapped console methods\n CONSOLE_LEVELS.forEach(level => {\n // TODO(v7): Remove this check as it's only needed for Node 6\n var originalWrappedFunc =\n originalConsole[level] && (originalConsole[level] ).__sentry_original__;\n if (level in global.console && originalWrappedFunc) {\n wrappedLevels[level] = originalConsole[level] ;\n originalConsole[level] = originalWrappedFunc ;\n }\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n Object.keys(wrappedLevels).forEach(level => {\n originalConsole[level] = wrappedLevels[level ];\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n var logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n };\n\n if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n global.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nlet logger;\nif ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n logger = getGlobalSingleton('logger', makeLogger);\n} else {\n logger = makeLogger();\n}\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger };\n//# sourceMappingURL=logger.js.map\n","import { getGlobalObject } from './global.js';\nimport { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\n\n/**\n * Extended Window interface that allows for Crypto API usage in IE browsers\n */\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n var global = getGlobalObject() ;\n var crypto = global.crypto || global.msCrypto;\n\n if (!(crypto === void 0) && crypto.getRandomValues) {\n // Use window.crypto API if available\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = (num) => {\n let v = num.toString(16);\n while (v.length < 4) {\n v = `0${v}`;\n }\n return v;\n };\n\n return (\n pad(arr[0]) + pad(arr[1]) + pad(arr[2]) + pad(arr[3]) + pad(arr[4]) + pad(arr[5]) + pad(arr[6]) + pad(arr[7])\n );\n }\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, c => {\n var r = (Math.random() * 16) | 0;\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url)\n\n {\n if (!url) {\n return {};\n }\n\n var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n if (!match) {\n return {};\n }\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n host: match[4],\n path: match[5],\n protocol: match[2],\n relative: match[5] + query + fragment, // everything minus origin\n };\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n var firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n var exception = (event.exception = event.exception || {});\n var values = (exception.values = exception.values || []);\n var firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n var firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n var defaultMechanism = { type: 'generic', handled: true };\n var currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n var mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n var match = input.match(SEMVER_REGEXP) || [];\n var major = parseInt(match[1], 10);\n var minor = parseInt(match[2], 10);\n var patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n var lineno = frame.lineno || 0;\n var maxLines = lines.length;\n var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n return urlPath.split(/[\\?#]/, 1)[0];\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n if (exception && (exception ).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, checkOrSetAlreadyCaught, getEventDescription, parseSemver, parseUrl, stripUrlQueryAndFragment, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\nfunction dynamicRequire(mod, request) {\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nfunction loadModule(moduleName) {\n let mod;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) ;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.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 fags 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\nexport { isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n var original = source[name] ;\n var wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n try {\n markFunctionWrapped(wrapped, original);\n } catch (_Oo) {\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n var proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(\n value,\n)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n var newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n var extractedProps = {};\n for (var property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n var keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n var serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n var memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPlainObject(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n var memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n var returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (var key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n var memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n var returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { _optionalChain } from './buildPolyfills';\n\nvar STACKTRACE_LIMIT = 50;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n var sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirst = 0) => {\n var frames = [];\n\n for (var line of stack.split('\\n').slice(skipFirst)) {\n for (var parser of sortedParsers) {\n var frame = parser(line);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n }\n\n return stripSentryFramesAndReverse(frames);\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n let localStack = stack;\n\n var firstFrameFunction = localStack[0].function || '';\n var lastFrameFunction = localStack[localStack.length - 1].function || '';\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (firstFrameFunction.indexOf('captureMessage') !== -1 || firstFrameFunction.indexOf('captureException') !== -1) {\n localStack = localStack.slice(1);\n }\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (lastFrameFunction.indexOf('sentryWrapped') !== -1) {\n localStack = localStack.slice(0, -1);\n }\n\n // The frame where the crash happened, should be the last entry in the array\n return localStack\n .slice(0, STACKTRACE_LIMIT)\n .map(frame => ({\n ...frame,\n filename: frame.filename || localStack[0].filename,\n function: frame.function || '?',\n }))\n .reverse();\n}\n\nvar defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\nfunction node(getModule) {\n var FILENAME_MATCH = /^\\s*[-]{4,}$/;\n var FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+?):(\\d+)(?::(\\d+))?|([^)]+))\\)?/;\n\n return (line) => {\n if (line.match(FILENAME_MATCH)) {\n return {\n filename: line,\n };\n }\n\n var lineMatch = line.match(FULL_MATCH);\n if (!lineMatch) {\n return undefined;\n }\n\n let object;\n let method;\n let functionName;\n let typeName;\n let methodName;\n\n if (lineMatch[1]) {\n functionName = lineMatch[1];\n\n let methodStart = functionName.lastIndexOf('.');\n if (functionName[methodStart - 1] === '.') {\n methodStart--;\n }\n\n if (methodStart > 0) {\n object = functionName.substr(0, methodStart);\n method = functionName.substr(methodStart + 1);\n var objectEnd = object.indexOf('.Module');\n if (objectEnd > 0) {\n functionName = functionName.substr(objectEnd + 1);\n object = object.substr(0, objectEnd);\n }\n }\n typeName = undefined;\n }\n\n if (method) {\n typeName = object;\n methodName = method;\n }\n\n if (method === '') {\n methodName = undefined;\n functionName = undefined;\n }\n\n if (functionName === undefined) {\n methodName = methodName || '';\n functionName = typeName ? `${typeName}.${methodName}` : methodName;\n }\n\n var filename = _optionalChain([lineMatch, 'access', _ => _[2], 'optionalAccess', _2 => _2.startsWith, 'call', _3 => _3('file://')]) ? lineMatch[2].substr(7) : lineMatch[2];\n var isNative = lineMatch[5] === 'native';\n var isInternal =\n isNative || (filename && !filename.startsWith('/') && !filename.startsWith('.') && filename.indexOf(':\\\\') !== 1);\n\n // in_app is all that's not an internal Node function or a module within node_modules\n // note that isNative appears to return true even for node core libraries\n // see https://github.com/getsentry/raven-node/issues/176\n var in_app = !isInternal && filename !== undefined && !filename.includes('node_modules/');\n\n return {\n filename,\n module: _optionalChain([getModule, 'optionalCall', _4 => _4(filename)]),\n function: functionName,\n lineno: parseInt(lineMatch[3], 10) || undefined,\n colno: parseInt(lineMatch[4], 10) || undefined,\n in_app,\n };\n };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nfunction nodeStackLineParser(getModule) {\n return [90, node(getModule)];\n}\n\nexport { createStackParser, getFunctionName, nodeStackLineParser, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.substr(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n var lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n var output = [];\n for (let i = 0; i < input.length; i++) {\n var value = input[i];\n try {\n output.push(String(value));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the value matches a regex or includes the string\n * @param value The string value to be checked against\n * @param pattern Either a regex or a string that must be contained in value\n */\nfunction isMatchingPattern(value, pattern) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (typeof pattern === 'string') {\n return value.indexOf(pattern) !== -1;\n }\n return false;\n}\n\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * Based on https://github.com/sindresorhus/escape-string-regexp. Vendored to a) reduce the size by skipping the runtime\n * type-checking, and b) ensure it gets down-compiled for old versions of Node (the published package only supports Node\n * 12+).\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nfunction escapeStringForRegex(regexString) {\n // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n\nexport { escapeStringForRegex, isMatchingPattern, safeJoin, snipLine, truncate };\n//# sourceMappingURL=string.js.map\n","import { getGlobalObject } from './global.js';\nimport { logger } from './logger.js';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n try {\n // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n // 1 argument required, but only 0 present.\n // @ts-ignore It really needs 1 argument, not 0.\n new DOMError('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n try {\n new DOMException('');\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsFetch() {\n if (!('fetch' in getGlobalObject())) {\n return false;\n }\n\n try {\n new Headers();\n new Request('');\n new Response();\n return true;\n } catch (e) {\n return false;\n }\n}\n/**\n * isNativeFetch checks if the given function is a native implementation of fetch()\n */\nfunction isNativeFetch(func) {\n return func && /^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n if (!supportsFetch()) {\n return false;\n }\n\n var global = getGlobalObject();\n\n // Fast path to avoid DOM I/O\n if (isNativeFetch(global.fetch)) {\n return true;\n }\n\n // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n // so create a \"pure\" iframe to see if that has native fetch\n let result = false;\n var doc = global.document;\n if (doc && typeof (doc.createElement ) === 'function') {\n try {\n var sandbox = doc.createElement('iframe');\n sandbox.hidden = true;\n doc.head.appendChild(sandbox);\n if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n result = isNativeFetch(sandbox.contentWindow.fetch);\n }\n doc.head.removeChild(sandbox);\n } catch (err) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n }\n }\n\n return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n return 'ReportingObserver' in getGlobalObject();\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReferrerPolicy() {\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n // (see https://caniuse.com/#feat=referrer-policy),\n // it doesn't. And it throws an exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n\n if (!supportsFetch()) {\n return false;\n }\n\n try {\n new Request('_', {\n referrerPolicy: 'origin' ,\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var global = getGlobalObject();\n var chrome = (global ).chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n\n return !isChromePackagedApp && hasHistoryApi;\n}\n\nexport { isNativeFetch, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsHistory, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver };\n//# sourceMappingURL=supports.js.map\n","import { isThenable } from './is.js';\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n var PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n var RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n var REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n __init() {this._state = States.PENDING;}\n __init2() {this._handlers = [];}\n \n\n constructor(\n executor,\n ) {;SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);SyncPromise.prototype.__init5.call(this);SyncPromise.prototype.__init6.call(this);\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init3() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init4() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init5() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init6() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n var cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { getGlobalObject } from './global.js';\nimport { dynamicRequire, isNodeEnv } from './node.js';\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nvar dateTimestampSource = {\n nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n return undefined;\n }\n\n // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n var timeOrigin = Date.now() - performance.now();\n\n return {\n now: () => performance.now(),\n timeOrigin,\n };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n try {\n var perfHooks = dynamicRequire(module, 'perf_hooks') ;\n return perfHooks.performance;\n } catch (_) {\n return undefined;\n }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nvar platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nvar timestampSource =\n platformPerformance === undefined\n ? dateTimestampSource\n : {\n nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nvar dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nvar timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n\n// Re-exported with an old name for backwards-compatibility.\nvar timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nvar usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nvar browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n var threshold = 3600 * 1000;\n var performanceNow = performance.now();\n var dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n var timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n var timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n var navigationStart = performance.timing && performance.timing.navigationStart;\n var hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n var navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n var navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs, usingPerformanceAPI };\n//# sourceMappingURL=time.js.map\n","var _global = (typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}); _global.SENTRY_RELEASE={id:\"8231acad724b47551c47a20dd01e44e1c0389aa9\"};","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_app\",\n function () {\n return require(\"private-next-pages/_app.js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_app\"])\n });\n }\n ","import { createContext, useReducer } from 'react';\n\nconst initialState = {\n environment: undefined,\n dynamicGridParam: {}, // store for multiple dynamic grids params grouped by dynamic grid's queryTagsKey\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'SET_ENVIRONMENT':\n return {\n ...state,\n environment: action.payload,\n };\n //set a dynamic grid params based on its queryTagsKey (ex. dynamicGridParam.recipe_grid )\n case 'SET_DYNAMIC_GRID_PARAMS':\n return {\n ...state,\n dynamicGridParam: {\n ...state.dynamicGridParam,\n [action.payload.queryTagsKey]: {\n ...state.dynamicGridParam[action.payload.queryTagsKey],\n ...(action.payload.queryTagIds && {\n queryTagIds: action.payload.queryTagIds,\n }),\n ...(action.payload.paginationNo && {\n paginationNo: action.payload.paginationNo,\n }),\n ...(action.payload.paginationLimit && {\n paginationLimit: action.payload.paginationLimit,\n }),\n ...(action.payload.isFiltering !== undefined && {\n isFiltering: action.payload.isFiltering,\n }),\n ...(action.payload.filterParams !== undefined && {\n filterParams: action.payload.filterParams,\n }),\n offset: action.payload.offset,\n },\n },\n };\n }\n};\n\nconst StateContext = createContext(initialState);\nconst DispatchContext = createContext(() => {});\n\nconst ContextProvider = ({ children }) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n \n {children}\n \n );\n};\n\nexport { StateContext, DispatchContext, ContextProvider };\n","import { useRouter } from 'next/router';\nimport { useEffect, useState } from 'react';\nimport { ParallaxProvider } from 'react-scroll-parallax';\nimport Head from 'next/head';\n\nimport { ContextProvider } from '@/context/index';\n\nimport 'swiper/css';\nimport 'swiper/css/autoplay';\nimport 'swiper/css/effect-fade';\nimport 'swiper/css/navigation';\nimport 'swiper/css/pagination';\nimport '../styles/globals.css';\n\nfunction MyApp({ Component, pageProps }) {\n const router = useRouter();\n const [key, setKey] = useState('home');\n useEffect(() => {\n if (router.asPath) {\n const k = router.asPath.split('?')[0];\n setKey(k[1]);\n }\n\n if (window?.history?.scrollRestoration) {\n window.history.scrollRestoration = 'manual';\n }\n }, [router.asPath]);\n\n return (\n <>\n \n \n \n\n \n \n \n \n \n \n );\n}\n\nexport default MyApp;\n","var TRACEPARENT_REGEXP = new RegExp(\n '^[ \\\\t]*' + // whitespace\n '([0-9a-f]{32})?' + // trace_id\n '-?([0-9a-f]{16})?' + // span_id\n '-?([01])?' + // sampled\n '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nfunction extractTraceparentData(traceparent) {\n var matches = traceparent.match(TRACEPARENT_REGEXP);\n if (matches) {\n let parentSampled;\n if (matches[3] === '1') {\n parentSampled = true;\n } else if (matches[3] === '0') {\n parentSampled = false;\n }\n return {\n traceId: matches[1],\n parentSampled,\n parentSpanId: matches[2],\n };\n }\n return undefined;\n}\n\nexport { TRACEPARENT_REGEXP, extractTraceparentData };\n//# sourceMappingURL=tracing.js.map\n","import { getGlobalObject, logger } from '@sentry/utils';\nimport { getActiveTransaction } from '../utils.js';\n\nvar global = getGlobalObject();\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n if (global && global.document) {\n global.document.addEventListener('visibilitychange', () => {\n var activeTransaction = getActiveTransaction() ;\n if (global.document.hidden && activeTransaction) {\n var statusType = 'cancelled';\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(\n `[Tracing] Transaction: ${statusType} -> since tab moved to the background, op: ${activeTransaction.op}`,\n );\n // We should not set status if it is already set, this prevent important statuses like\n // error or data loss from being overwritten on transaction.\n if (!activeTransaction.status) {\n activeTransaction.setStatus(statusType);\n }\n activeTransaction.setTag('visibilitychange', 'document.hidden');\n activeTransaction.finish();\n }\n });\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n }\n}\n\nexport { registerBackgroundTabDetection };\n//# sourceMappingURL=backgroundtab.js.map\n","var bindReporter = (\n callback,\n metric,\n reportAllChanges,\n) => {\n let prevValue;\n return (forceReport) => {\n if (metric.value >= 0) {\n if (forceReport || reportAllChanges) {\n metric.delta = metric.value - (prevValue || 0);\n\n // Report the metric if there's a non-zero delta or if no previous\n // value exists (which can happen in the case of the document becoming\n // hidden when the metric value is 0).\n // See: https://github.com/GoogleChrome/web-vitals/issues/14\n if (metric.delta || prevValue === undefined) {\n prevValue = metric.value;\n callback(metric);\n }\n }\n }\n };\n};\n\nexport { bindReporter };\n//# sourceMappingURL=bindReporter.js.map\n","import { _nullishCoalesce } from '@sentry/utils/esm/buildPolyfills';\nimport { generateUniqueID } from './generateUniqueID.js';\n\nvar initMetric = (name, value) => {\n return {\n name,\n value: _nullishCoalesce(value, () => ( -1)),\n delta: 0,\n entries: [],\n id: generateUniqueID(),\n };\n};\n\nexport { initMetric };\n//# sourceMappingURL=initMetric.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nvar generateUniqueID = () => {\n return `v2-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\nexport { generateUniqueID };\n//# sourceMappingURL=generateUniqueID.js.map\n","/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nvar observe = (type, callback) => {\n try {\n if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n // More extensive feature detect needed for Firefox due to:\n // https://github.com/GoogleChrome/web-vitals/issues/142\n if (type === 'first-input' && !('PerformanceEventTiming' in self)) {\n return;\n }\n\n var po = new PerformanceObserver(l => l.getEntries().map(callback));\n\n po.observe({ type, buffered: true });\n return po;\n }\n } catch (e) {\n // Do nothing.\n }\n return;\n};\n\nexport { observe };\n//# sourceMappingURL=observe.js.map\n","import { getGlobalObject } from '@sentry/utils';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar onHidden = (cb, once) => {\n var onHiddenOrPageHide = (event) => {\n if (event.type === 'pagehide' || getGlobalObject().document.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n\nexport { onHidden };\n//# sourceMappingURL=onHidden.js.map\n","import { getGlobalObject } from '@sentry/utils';\nimport { onHidden } from './onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet firstHiddenTime = -1;\n\nvar initHiddenTime = () => {\n return getGlobalObject().document.visibilityState === 'hidden' ? 0 : Infinity;\n};\n\nvar trackChanges = () => {\n // Update the time if/when the document becomes hidden.\n onHidden(({ timeStamp }) => {\n firstHiddenTime = timeStamp;\n }, true);\n};\n\nvar getVisibilityWatcher = (\n\n) => {\n if (firstHiddenTime < 0) {\n // If the document is hidden when this code runs, assume it was hidden\n // since navigation start. This isn't a perfect heuristic, but it's the\n // best we can do until an API is available to support querying past\n // visibilityState.\n firstHiddenTime = initHiddenTime();\n trackChanges();\n }\n return {\n get firstHiddenTime() {\n return firstHiddenTime;\n },\n };\n};\n\nexport { getVisibilityWatcher };\n//# sourceMappingURL=getVisibilityWatcher.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// https://wicg.github.io/largest-contentful-paint/#sec-largest-contentful-paint-interface\n\nvar reportedMetricIDs = {};\n\nvar getLCP = (onReport, reportAllChanges) => {\n var visibilityWatcher = getVisibilityWatcher();\n var metric = initMetric('LCP');\n let report;\n\n var entryHandler = (entry) => {\n // The startTime attribute returns the value of the renderTime if it is not 0,\n // and the value of the loadTime otherwise.\n var value = entry.startTime;\n\n // If the page was hidden prior to paint time of the entry,\n // ignore it and mark the metric as final, otherwise add the entry.\n if (value < visibilityWatcher.firstHiddenTime) {\n metric.value = value;\n metric.entries.push(entry);\n }\n\n if (report) {\n report();\n }\n };\n\n var po = observe('largest-contentful-paint', entryHandler);\n\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n\n var stopListening = () => {\n if (!reportedMetricIDs[metric.id]) {\n po.takeRecords().map(entryHandler );\n po.disconnect();\n reportedMetricIDs[metric.id] = true;\n report(true);\n }\n };\n\n // Stop listening after input. Note: while scrolling is an input that\n // stop LCP observation, it's unreliable since it can be programmatically\n // generated. See: https://github.com/GoogleChrome/web-vitals/issues/75\n ['keydown', 'click'].forEach(type => {\n addEventListener(type, stopListening, { once: true, capture: true });\n });\n\n onHidden(stopListening, true);\n }\n};\n\nexport { getLCP };\n//# sourceMappingURL=getLCP.js.map\n","/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction _startChild(transaction, { startTimestamp, ...ctx }) {\n if (startTimestamp && transaction.startTimestamp > startTimestamp) {\n transaction.startTimestamp = startTimestamp;\n }\n\n return transaction.startChild({\n startTimestamp,\n ...ctx,\n });\n}\n\nexport { _startChild, isMeasurementValue };\n//# sourceMappingURL=utils.js.map\n","import { _nullishCoalesce } from '@sentry/utils/esm/buildPolyfills';\nimport { getGlobalObject, browserPerformanceTimeOrigin, logger, htmlTreeAsString } from '@sentry/utils';\nimport { msToSec } from '../../utils.js';\nimport { getCLS } from '../web-vitals/getCLS.js';\nimport { getFID } from '../web-vitals/getFID.js';\nimport { getLCP } from '../web-vitals/getLCP.js';\nimport { getVisibilityWatcher } from '../web-vitals/lib/getVisibilityWatcher.js';\nimport { _startChild, isMeasurementValue } from './utils.js';\n\nvar global = getGlobalObject();\n\nfunction getBrowserPerformanceAPI() {\n return global && global.addEventListener && global.performance;\n}\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals\n */\nfunction startTrackingWebVitals(reportAllChanges = false) {\n var performance = getBrowserPerformanceAPI();\n if (performance && browserPerformanceTimeOrigin) {\n if (performance.mark) {\n global.performance.mark('sentry-tracing-init');\n }\n _trackCLS();\n _trackLCP(reportAllChanges);\n _trackFID();\n }\n}\n\n/** Starts tracking the Cumulative Layout Shift on the current page. */\nfunction _trackCLS() {\n // See:\n // https://web.dev/evolving-cls/\n // https://web.dev/cls-web-tooling/\n getCLS(metric => {\n var entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding CLS');\n _measurements['cls'] = { value: metric.value, unit: '' };\n _clsEntry = entry ;\n });\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP(reportAllChanges) {\n getLCP(metric => {\n var entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n var timeOrigin = msToSec(browserPerformanceTimeOrigin );\n var startTime = msToSec(entry.startTime);\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding LCP');\n _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.lcp'] = { value: timeOrigin + startTime, unit: 'second' };\n _lcpEntry = entry ;\n }, reportAllChanges);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n getFID(metric => {\n var entry = metric.entries.pop();\n if (!entry) {\n return;\n }\n\n var timeOrigin = msToSec(browserPerformanceTimeOrigin );\n var startTime = msToSec(entry.startTime);\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding FID');\n _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(transaction) {\n var performance = getBrowserPerformanceAPI();\n if (!performance || !global.performance.getEntries || !browserPerformanceTimeOrigin) {\n // Gatekeeper if performance API not available\n return;\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Tracing] Adding & adjusting spans using Performance API');\n var timeOrigin = msToSec(browserPerformanceTimeOrigin);\n\n var performanceEntries = performance.getEntries();\n\n let responseStartTimestamp;\n let requestStartTimestamp;\n\n performanceEntries.slice(_performanceCursor).forEach((entry) => {\n var startTime = msToSec(entry.startTime);\n var duration = msToSec(entry.duration);\n\n if (transaction.op === 'navigation' && timeOrigin + startTime < transaction.startTimestamp) {\n return;\n }\n\n switch (entry.entryType) {\n case 'navigation': {\n _addNavigationSpans(transaction, entry, timeOrigin);\n responseStartTimestamp = timeOrigin + msToSec(entry.responseStart);\n requestStartTimestamp = timeOrigin + msToSec(entry.requestStart);\n break;\n }\n case 'mark':\n case 'paint':\n case 'measure': {\n var startTimestamp = _addMeasureSpans(transaction, entry, startTime, duration, timeOrigin);\n\n // capture web vitals\n var firstHidden = getVisibilityWatcher();\n // Only report if the page wasn't hidden prior to the web vital.\n var shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n if (entry.name === 'first-paint' && shouldRecord) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding FP');\n _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n _measurements['mark.fp'] = { value: startTimestamp, unit: 'second' };\n }\n if (entry.name === 'first-contentful-paint' && shouldRecord) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding FCP');\n _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n _measurements['mark.fcp'] = { value: startTimestamp, unit: 'second' };\n }\n break;\n }\n case 'resource': {\n var resourceName = (entry.name ).replace(global.location.origin, '');\n _addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin);\n break;\n }\n default:\n // Ignore other entry types.\n }\n });\n\n _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n _trackNavigator(transaction);\n\n // Measurements are only available for pageload transactions\n if (transaction.op === 'pageload') {\n // Generate TTFB (Time to First Byte), which measured as the time between the beginning of the transaction and the\n // start of the response in milliseconds\n if (typeof responseStartTimestamp === 'number') {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding TTFB');\n _measurements['ttfb'] = {\n value: (responseStartTimestamp - transaction.startTimestamp) * 1000,\n unit: 'millisecond',\n };\n\n if (typeof requestStartTimestamp === 'number' && requestStartTimestamp <= responseStartTimestamp) {\n // Capture the time spent making the request and receiving the first byte of the response.\n // This is the time between the start of the request and the start of the response in milliseconds.\n _measurements['ttfb.requestTime'] = {\n value: (responseStartTimestamp - requestStartTimestamp) * 1000,\n unit: 'millisecond',\n };\n }\n }\n\n ['fcp', 'fp', 'lcp'].forEach(name => {\n if (!_measurements[name] || timeOrigin >= transaction.startTimestamp) {\n return;\n }\n // The web vitals, fcp, fp, lcp, and ttfb, all measure relative to timeOrigin.\n // Unfortunately, timeOrigin is not captured within the transaction span data, so these web vitals will need\n // to be adjusted to be relative to transaction.startTimestamp.\n var oldValue = _measurements[name].value;\n var measurementTimestamp = timeOrigin + msToSec(oldValue);\n\n // normalizedValue should be in milliseconds\n var normalizedValue = Math.abs((measurementTimestamp - transaction.startTimestamp) * 1000);\n var delta = normalizedValue - oldValue;\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(`[Measurements] Normalized ${name} from ${oldValue} to ${normalizedValue} (${delta})`);\n _measurements[name].value = normalizedValue;\n });\n\n if (_measurements['mark.fid'] && _measurements['fid']) {\n // create span for FID\n _startChild(transaction, {\n description: 'first input delay',\n endTimestamp: _measurements['mark.fid'].value + msToSec(_measurements['fid'].value),\n op: 'web.vitals',\n startTimestamp: _measurements['mark.fid'].value,\n });\n }\n\n // If FCP is not recorded we should not record the cls value\n // according to the new definition of CLS.\n if (!('fcp' in _measurements)) {\n delete _measurements.cls;\n }\n\n Object.keys(_measurements).forEach(measurementName => {\n transaction.setMeasurement(\n measurementName,\n _measurements[measurementName].value,\n _measurements[measurementName].unit,\n );\n });\n\n _tagMetricInfo(transaction);\n }\n\n _lcpEntry = undefined;\n _clsEntry = undefined;\n _measurements = {};\n}\n\n/** Create measure related spans */\nfunction _addMeasureSpans(\n transaction,\n entry,\n startTime,\n duration,\n timeOrigin,\n) {\n var measureStartTimestamp = timeOrigin + startTime;\n var measureEndTimestamp = measureStartTimestamp + duration;\n\n _startChild(transaction, {\n description: entry.name ,\n endTimestamp: measureEndTimestamp,\n op: entry.entryType ,\n startTimestamp: measureStartTimestamp,\n });\n\n return measureStartTimestamp;\n}\n\n/** Instrument navigation entries */\nfunction _addNavigationSpans(transaction, entry, timeOrigin) {\n ['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach(event => {\n _addPerformanceNavigationTiming(transaction, entry, event, timeOrigin);\n });\n _addPerformanceNavigationTiming(transaction, entry, 'secureConnection', timeOrigin, 'TLS/SSL', 'connectEnd');\n _addPerformanceNavigationTiming(transaction, entry, 'fetch', timeOrigin, 'cache', 'domainLookupStart');\n _addPerformanceNavigationTiming(transaction, entry, 'domainLookup', timeOrigin, 'DNS');\n _addRequest(transaction, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n transaction,\n entry,\n event,\n timeOrigin,\n description,\n eventEnd,\n) {\n var end = eventEnd ? (entry[eventEnd] ) : (entry[`${event}End`] );\n var start = entry[`${event}Start`] ;\n if (!start || !end) {\n return;\n }\n _startChild(transaction, {\n op: 'browser',\n description: _nullishCoalesce(description, () => ( event)),\n startTimestamp: timeOrigin + msToSec(start),\n endTimestamp: timeOrigin + msToSec(end),\n });\n}\n\n/** Create request and response related spans */\nfunction _addRequest(transaction, entry, timeOrigin) {\n _startChild(transaction, {\n op: 'browser',\n description: 'request',\n startTimestamp: timeOrigin + msToSec(entry.requestStart ),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n });\n\n _startChild(transaction, {\n op: 'browser',\n description: 'response',\n startTimestamp: timeOrigin + msToSec(entry.responseStart ),\n endTimestamp: timeOrigin + msToSec(entry.responseEnd ),\n });\n}\n\n/** Create resource-related spans */\nfunction _addResourceSpans(\n transaction,\n entry,\n resourceName,\n startTime,\n duration,\n timeOrigin,\n) {\n // we already instrument based on fetch and xhr, so we don't need to\n // duplicate spans here.\n if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n return;\n }\n\n var data = {};\n if ('transferSize' in entry) {\n data['Transfer Size'] = entry.transferSize;\n }\n if ('encodedBodySize' in entry) {\n data['Encoded Body Size'] = entry.encodedBodySize;\n }\n if ('decodedBodySize' in entry) {\n data['Decoded Body Size'] = entry.decodedBodySize;\n }\n\n var startTimestamp = timeOrigin + startTime;\n var endTimestamp = startTimestamp + duration;\n\n _startChild(transaction, {\n description: resourceName,\n endTimestamp,\n op: entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource',\n startTimestamp,\n data,\n });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(transaction) {\n var navigator = global.navigator ;\n if (!navigator) {\n return;\n }\n\n // track network connectivity\n var connection = navigator.connection;\n if (connection) {\n if (connection.effectiveType) {\n transaction.setTag('effectiveConnectionType', connection.effectiveType);\n }\n\n if (connection.type) {\n transaction.setTag('connectionType', connection.type);\n }\n\n if (isMeasurementValue(connection.rtt)) {\n _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n }\n\n if (isMeasurementValue(connection.downlink)) {\n _measurements['connection.downlink'] = { value: connection.downlink, unit: '' }; // unit is empty string for now, while relay doesn't support download speed units\n }\n }\n\n if (isMeasurementValue(navigator.deviceMemory)) {\n transaction.setTag('deviceMemory', `${navigator.deviceMemory} GB`);\n }\n\n if (isMeasurementValue(navigator.hardwareConcurrency)) {\n transaction.setTag('hardwareConcurrency', String(navigator.hardwareConcurrency));\n }\n}\n\n/** Add LCP / CLS data to transaction to allow debugging */\nfunction _tagMetricInfo(transaction) {\n if (_lcpEntry) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding LCP Data');\n\n // Capture Properties of the LCP element that contributes to the LCP.\n\n if (_lcpEntry.element) {\n transaction.setTag('lcp.element', htmlTreeAsString(_lcpEntry.element));\n }\n\n if (_lcpEntry.id) {\n transaction.setTag('lcp.id', _lcpEntry.id);\n }\n\n if (_lcpEntry.url) {\n // Trim URL to the first 200 characters.\n transaction.setTag('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n }\n\n transaction.setTag('lcp.size', _lcpEntry.size);\n }\n\n // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift\n if (_clsEntry && _clsEntry.sources) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('[Measurements] Adding CLS Data');\n _clsEntry.sources.forEach((source, index) =>\n transaction.setTag(`cls.source.${index + 1}`, htmlTreeAsString(source.node)),\n );\n }\n}\n\nexport { _addMeasureSpans, _addResourceSpans, addPerformanceEntries, startTrackingWebVitals };\n//# sourceMappingURL=index.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// https://wicg.github.io/layout-instability/#sec-layout-shift\n\nvar getCLS = (onReport, reportAllChanges) => {\n var metric = initMetric('CLS', 0);\n let report;\n\n let sessionValue = 0;\n let sessionEntries = [];\n\n var entryHandler = (entry) => {\n // Only count layout shifts without recent user input.\n // TODO: Figure out why entry can be undefined\n if (entry && !entry.hadRecentInput) {\n var firstSessionEntry = sessionEntries[0];\n var lastSessionEntry = sessionEntries[sessionEntries.length - 1];\n\n // If the entry occurred less than 1 second after the previous entry and\n // less than 5 seconds after the first entry in the session, include the\n // entry in the current session. Otherwise, start a new session.\n if (\n sessionValue &&\n sessionEntries.length !== 0 &&\n entry.startTime - lastSessionEntry.startTime < 1000 &&\n entry.startTime - firstSessionEntry.startTime < 5000\n ) {\n sessionValue += entry.value;\n sessionEntries.push(entry);\n } else {\n sessionValue = entry.value;\n sessionEntries = [entry];\n }\n\n // If the current session value is larger than the current CLS value,\n // update CLS and the entries contributing to it.\n if (sessionValue > metric.value) {\n metric.value = sessionValue;\n metric.entries = sessionEntries;\n if (report) {\n report();\n }\n }\n }\n };\n\n var po = observe('layout-shift', entryHandler );\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n\n onHidden(() => {\n po.takeRecords().map(entryHandler );\n report(true);\n });\n }\n};\n\nexport { getCLS };\n//# sourceMappingURL=getCLS.js.map\n","import { bindReporter } from './lib/bindReporter.js';\nimport { getVisibilityWatcher } from './lib/getVisibilityWatcher.js';\nimport { initMetric } from './lib/initMetric.js';\nimport { observe } from './lib/observe.js';\nimport { onHidden } from './lib/onHidden.js';\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar getFID = (onReport, reportAllChanges) => {\n var visibilityWatcher = getVisibilityWatcher();\n var metric = initMetric('FID');\n let report;\n\n var entryHandler = (entry) => {\n // Only report if the page wasn't hidden prior to the first input.\n if (report && entry.startTime < visibilityWatcher.firstHiddenTime) {\n metric.value = entry.processingStart - entry.startTime;\n metric.entries.push(entry);\n report(true);\n }\n };\n\n var po = observe('first-input', entryHandler );\n if (po) {\n report = bindReporter(onReport, metric, reportAllChanges);\n onHidden(() => {\n po.takeRecords().map(entryHandler );\n po.disconnect();\n }, true);\n }\n};\n\nexport { getFID };\n//# sourceMappingURL=getFID.js.map\n","import { isMatchingPattern, addInstrumentationHandler, isInstanceOf, BAGGAGE_HEADER_NAME, mergeAndSerializeBaggage } from '@sentry/utils';\nimport { hasTracingEnabled, getActiveTransaction } from '../utils.js';\n\nvar DEFAULT_TRACING_ORIGINS = ['localhost', /^\\//];\n\n/** Options for Request Instrumentation */\n\nvar defaultRequestInstrumentationOptions = {\n traceFetch: true,\n traceXHR: true,\n tracingOrigins: DEFAULT_TRACING_ORIGINS,\n};\n\n/** Registers span creators for xhr and fetch requests */\nfunction instrumentOutgoingRequests(_options) {\n const { traceFetch, traceXHR, tracingOrigins, shouldCreateSpanForRequest } = {\n ...defaultRequestInstrumentationOptions,\n ..._options,\n };\n\n // We should cache url -> decision so that we don't have to compute\n // regexp everytime we create a request.\n var urlMap = {};\n\n var defaultShouldCreateSpan = (url) => {\n if (urlMap[url]) {\n return urlMap[url];\n }\n var origins = tracingOrigins;\n urlMap[url] =\n origins.some((origin) => isMatchingPattern(url, origin)) &&\n !isMatchingPattern(url, 'sentry_key');\n return urlMap[url];\n };\n\n // We want that our users don't have to re-implement shouldCreateSpanForRequest themselves\n // That's why we filter out already unwanted Spans from tracingOrigins\n let shouldCreateSpan = defaultShouldCreateSpan;\n if (typeof shouldCreateSpanForRequest === 'function') {\n shouldCreateSpan = (url) => {\n return defaultShouldCreateSpan(url) && shouldCreateSpanForRequest(url);\n };\n }\n\n var spans = {};\n\n if (traceFetch) {\n addInstrumentationHandler('fetch', (handlerData) => {\n fetchCallback(handlerData, shouldCreateSpan, spans);\n });\n }\n\n if (traceXHR) {\n addInstrumentationHandler('xhr', (handlerData) => {\n xhrCallback(handlerData, shouldCreateSpan, spans);\n });\n }\n}\n\n/**\n * Create and track fetch request spans\n */\nfunction fetchCallback(\n handlerData,\n shouldCreateSpan,\n spans,\n) {\n if (!hasTracingEnabled() || !(handlerData.fetchData && shouldCreateSpan(handlerData.fetchData.url))) {\n return;\n }\n\n if (handlerData.endTimestamp) {\n var spanId = handlerData.fetchData.__span;\n if (!spanId) return;\n\n var span = spans[spanId];\n if (span) {\n if (handlerData.response) {\n // TODO (kmclb) remove this once types PR goes through\n span.setHttpStatus(handlerData.response.status);\n } else if (handlerData.error) {\n span.setStatus('internal_error');\n }\n span.finish();\n\n delete spans[spanId];\n }\n return;\n }\n\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n var span = activeTransaction.startChild({\n data: {\n ...handlerData.fetchData,\n type: 'fetch',\n },\n description: `${handlerData.fetchData.method} ${handlerData.fetchData.url}`,\n op: 'http.client',\n });\n\n handlerData.fetchData.__span = span.spanId;\n spans[span.spanId] = span;\n\n var request = (handlerData.args[0] = handlerData.args[0] );\n var options = (handlerData.args[1] = (handlerData.args[1] ) || {});\n options.headers = addTracingHeaders(request, activeTransaction.getBaggage(), span, options);\n }\n}\n\nfunction addTracingHeaders(\n request,\n incomingBaggage,\n span,\n options,\n) {\n let headers = options.headers;\n\n if (isInstanceOf(request, Request)) {\n headers = (request ).headers;\n }\n\n if (headers) {\n if (typeof headers.append === 'function') {\n headers.append('sentry-trace', span.toTraceparent());\n headers.append(BAGGAGE_HEADER_NAME, mergeAndSerializeBaggage(incomingBaggage, headers.get(BAGGAGE_HEADER_NAME)));\n } else if (Array.isArray(headers)) {\n const [, headerBaggageString] = headers.find(([key, _]) => key === BAGGAGE_HEADER_NAME);\n headers = [\n ...headers,\n ['sentry-trace', span.toTraceparent()],\n [BAGGAGE_HEADER_NAME, mergeAndSerializeBaggage(incomingBaggage, headerBaggageString)],\n ];\n } else {\n headers = {\n ...headers,\n 'sentry-trace': span.toTraceparent(),\n baggage: mergeAndSerializeBaggage(incomingBaggage, headers.baggage),\n };\n }\n } else {\n headers = { 'sentry-trace': span.toTraceparent(), baggage: mergeAndSerializeBaggage(incomingBaggage) };\n }\n return headers;\n}\n\n/**\n * Create and track xhr request spans\n */\nfunction xhrCallback(\n handlerData,\n shouldCreateSpan,\n spans,\n) {\n if (\n !hasTracingEnabled() ||\n (handlerData.xhr && handlerData.xhr.__sentry_own_request__) ||\n !(handlerData.xhr && handlerData.xhr.__sentry_xhr__ && shouldCreateSpan(handlerData.xhr.__sentry_xhr__.url))\n ) {\n return;\n }\n\n var xhr = handlerData.xhr.__sentry_xhr__;\n\n // check first if the request has finished and is tracked by an existing span which should now end\n if (handlerData.endTimestamp) {\n var spanId = handlerData.xhr.__sentry_xhr_span_id__;\n if (!spanId) return;\n\n var span = spans[spanId];\n if (span) {\n span.setHttpStatus(xhr.status_code);\n span.finish();\n\n delete spans[spanId];\n }\n return;\n }\n\n // if not, create a new span to track it\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n var span = activeTransaction.startChild({\n data: {\n ...xhr.data,\n type: 'xhr',\n method: xhr.method,\n url: xhr.url,\n },\n description: `${xhr.method} ${xhr.url}`,\n op: 'http.client',\n });\n\n handlerData.xhr.__sentry_xhr_span_id__ = span.spanId;\n spans[handlerData.xhr.__sentry_xhr_span_id__] = span;\n\n if (handlerData.xhr.setRequestHeader) {\n try {\n handlerData.xhr.setRequestHeader('sentry-trace', span.toTraceparent());\n\n var headerBaggageString =\n handlerData.xhr.getRequestHeader && handlerData.xhr.getRequestHeader(BAGGAGE_HEADER_NAME);\n\n handlerData.xhr.setRequestHeader(\n BAGGAGE_HEADER_NAME,\n mergeAndSerializeBaggage(activeTransaction.getBaggage(), headerBaggageString),\n );\n } catch (_) {\n // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n }\n }\n }\n}\n\nexport { DEFAULT_TRACING_ORIGINS, defaultRequestInstrumentationOptions, fetchCallback, instrumentOutgoingRequests, xhrCallback };\n//# sourceMappingURL=request.js.map\n","import { getGlobalObject, logger, addInstrumentationHandler } from '@sentry/utils';\n\nvar global = getGlobalObject();\n\n/**\n * Default function implementing pageload and navigation transactions\n */\nfunction instrumentRoutingWithDefaults(\n customStartTransaction,\n startTransactionOnPageLoad = true,\n startTransactionOnLocationChange = true,\n) {\n if (!global || !global.location) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Could not initialize routing instrumentation due to invalid location');\n return;\n }\n\n let startingUrl = global.location.href;\n\n let activeTransaction;\n if (startTransactionOnPageLoad) {\n activeTransaction = customStartTransaction({\n name: global.location.pathname,\n op: 'pageload',\n metadata: { source: 'url' },\n });\n }\n\n if (startTransactionOnLocationChange) {\n addInstrumentationHandler('history', ({ to, from }) => {\n /**\n * This early return is there to account for some cases where a navigation transaction starts right after\n * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n * create an uneccessary navigation transaction.\n *\n * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n * only be caused in certain development environments where the usage of a hot module reloader is causing\n * errors.\n */\n if (from === undefined && startingUrl && startingUrl.indexOf(to) !== -1) {\n startingUrl = undefined;\n return;\n }\n\n if (from !== to) {\n startingUrl = undefined;\n if (activeTransaction) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] Finishing current transaction with op: ${activeTransaction.op}`);\n // If there's an open transaction on the scope, we need to finish it before creating an new one.\n activeTransaction.finish();\n }\n activeTransaction = customStartTransaction({\n name: global.location.pathname,\n op: 'navigation',\n metadata: { source: 'url' },\n });\n }\n });\n }\n}\n\nexport { instrumentRoutingWithDefaults };\n//# sourceMappingURL=router.js.map\n","import { logger, getGlobalObject, extractTraceparentData, parseBaggageSetMutability } from '@sentry/utils';\nimport { startIdleTransaction } from '../hubextensions.js';\nimport { DEFAULT_IDLE_TIMEOUT, DEFAULT_FINAL_TIMEOUT } from '../idletransaction.js';\nimport '../utils.js';\nimport { registerBackgroundTabDetection } from './backgroundtab.js';\nimport { startTrackingWebVitals, addPerformanceEntries } from './metrics/index.js';\nimport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './request.js';\nimport { instrumentRoutingWithDefaults } from './router.js';\n\nvar BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\n/** Options for Browser Tracing integration */\n\nvar DEFAULT_BROWSER_TRACING_OPTIONS = {\n idleTimeout: DEFAULT_IDLE_TIMEOUT,\n finalTimeout: DEFAULT_FINAL_TIMEOUT,\n markBackgroundTransactions: true,\n routingInstrumentation: instrumentRoutingWithDefaults,\n startTransactionOnLocationChange: true,\n startTransactionOnPageLoad: true,\n ...defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library. This integration uses {@see IdleTransaction} to create transactions.\n */\nclass BrowserTracing {\n // This class currently doesn't have a static `id` field like the other integration classes, because it prevented\n // @sentry/tracing from being treeshaken. Tree shakers do not like static fields, because they behave like side effects.\n // TODO: Come up with a better plan, than using static fields on integration classes, and use that plan on all\n // integrations.\n\n /** Browser Tracing integration options */\n \n\n /**\n * @inheritDoc\n */\n __init() {this.name = BROWSER_TRACING_INTEGRATION_ID;}\n\n constructor(_options) {;BrowserTracing.prototype.__init.call(this);\n let tracingOrigins = defaultRequestInstrumentationOptions.tracingOrigins;\n // NOTE: Logger doesn't work in constructors, as it's initialized after integrations instances\n if (_options) {\n if (_options.tracingOrigins && Array.isArray(_options.tracingOrigins) && _options.tracingOrigins.length !== 0) {\n tracingOrigins = _options.tracingOrigins;\n } else {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && (this._emitOptionsWarning = true);\n }\n }\n\n this.options = {\n ...DEFAULT_BROWSER_TRACING_OPTIONS,\n ..._options,\n tracingOrigins,\n };\n\n const { _metricOptions } = this.options;\n startTrackingWebVitals(_metricOptions && _metricOptions._reportAllChanges);\n }\n\n /**\n * @inheritDoc\n */\n setupOnce(_, getCurrentHub) {\n this._getCurrentHub = getCurrentHub;\n\n if (this._emitOptionsWarning) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(\n '[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace.',\n );\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(\n `[Tracing] We added a reasonable default for you: ${defaultRequestInstrumentationOptions.tracingOrigins}`,\n );\n }\n\n const {\n routingInstrumentation: instrumentRouting,\n startTransactionOnLocationChange,\n startTransactionOnPageLoad,\n markBackgroundTransactions,\n traceFetch,\n traceXHR,\n tracingOrigins,\n shouldCreateSpanForRequest,\n } = this.options;\n\n instrumentRouting(\n (context) => this._createRouteTransaction(context),\n startTransactionOnPageLoad,\n startTransactionOnLocationChange,\n );\n\n if (markBackgroundTransactions) {\n registerBackgroundTabDetection();\n }\n\n instrumentOutgoingRequests({ traceFetch, traceXHR, tracingOrigins, shouldCreateSpanForRequest });\n }\n\n /** Create routing idle transaction. */\n _createRouteTransaction(context) {\n if (!this._getCurrentHub) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.warn(`[Tracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`);\n return undefined;\n }\n\n const { beforeNavigate, idleTimeout, finalTimeout } = this.options;\n\n var parentContextFromHeader = context.op === 'pageload' ? extractTraceDataFromMetaTags() : undefined;\n\n var expandedContext = {\n ...context,\n ...parentContextFromHeader,\n ...(parentContextFromHeader && {\n metadata: {\n ...context.metadata,\n ...parentContextFromHeader.metadata,\n },\n }),\n trimEnd: true,\n };\n var modifiedContext = typeof beforeNavigate === 'function' ? beforeNavigate(expandedContext) : expandedContext;\n\n // For backwards compatibility reasons, beforeNavigate can return undefined to \"drop\" the transaction (prevent it\n // from being sent to Sentry).\n var finalContext = modifiedContext === undefined ? { ...expandedContext, sampled: false } : modifiedContext;\n\n // If `beforeNavigate` set a custom name, record that fact\n finalContext.metadata =\n finalContext.name !== expandedContext.name\n ? { ...finalContext.metadata, source: 'custom' }\n : finalContext.metadata;\n\n if (finalContext.sampled === false) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n logger.log(`[Tracing] Will not send ${finalContext.op} transaction because of beforeNavigate.`);\n }\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log(`[Tracing] Starting ${finalContext.op} transaction on scope`);\n\n var hub = this._getCurrentHub();\n const { location } = getGlobalObject() ;\n\n var idleTransaction = startIdleTransaction(\n hub,\n finalContext,\n idleTimeout,\n finalTimeout,\n true,\n { location }, // for use in the tracesSampler\n );\n idleTransaction.registerBeforeFinishCallback(transaction => {\n addPerformanceEntries(transaction);\n transaction.setTag(\n 'sentry_reportAllChanges',\n Boolean(this.options._metricOptions && this.options._metricOptions._reportAllChanges),\n );\n });\n\n return idleTransaction ;\n }\n}\n\n/**\n * Gets transaction context data from `sentry-trace` and `baggage` tags.\n * @returns Transaction context data or undefined neither tag exists or has valid data\n */\nfunction extractTraceDataFromMetaTags() {\n var sentrytraceValue = getMetaContent('sentry-trace');\n var baggageValue = getMetaContent('baggage');\n\n var sentrytraceData = sentrytraceValue ? extractTraceparentData(sentrytraceValue) : undefined;\n var baggage = parseBaggageSetMutability(baggageValue, sentrytraceValue);\n\n // TODO more extensive checks for baggage validity/emptyness?\n if (sentrytraceData || baggage) {\n return {\n ...(sentrytraceData && sentrytraceData),\n ...(baggage && { metadata: { baggage } }),\n };\n }\n\n return undefined;\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n var globalObject = getGlobalObject();\n\n // DOM/querySelector is not available in all environments\n if (globalObject.document && globalObject.document.querySelector) {\n var el = globalObject.document.querySelector(`meta[name=${metaName}]`);\n return el ? el.getAttribute('content') : null;\n } else {\n return null;\n }\n}\n\nexport { BROWSER_TRACING_INTEGRATION_ID, BrowserTracing, extractTraceDataFromMetaTags, getMetaContent };\n//# sourceMappingURL=browsertracing.js.map\n","import { addExtensionMethods } from './hubextensions.js';\nexport { addExtensionMethods, startIdleTransaction } from './hubextensions.js';\nimport * as index from './integrations/index.js';\nexport { index as Integrations };\nimport './browser/index.js';\nexport { Span, spanStatusfromHttpCode } from './span.js';\nexport { SpanStatus } from './spanstatus.js';\nexport { Transaction } from './transaction.js';\nexport { IdleTransaction } from './idletransaction.js';\nexport { getActiveTransaction, hasTracingEnabled } from './utils.js';\nexport { BROWSER_TRACING_INTEGRATION_ID, BrowserTracing } from './browser/browsertracing.js';\nexport { defaultRequestInstrumentationOptions, instrumentOutgoingRequests } from './browser/request.js';\nexport { TRACEPARENT_REGEXP, extractTraceparentData, stripUrlQueryAndFragment } from '@sentry/utils';\n\n;\n;\n\n// Treeshakable guard to remove all code related to tracing\n\n// Guard for tree\nif (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) {\n // We are patching the global object with our hub extension methods\n addExtensionMethods();\n}\n//# sourceMappingURL=index.js.map\n","import { getGlobalObject, stripUrlQueryAndFragment, fill } from '@sentry/utils';\nimport Router from 'next/router';\n\nvar global = getGlobalObject();\n\nvar DEFAULT_TAGS = {\n 'routing.instrumentation': 'next-router',\n} ;\n\nlet activeTransaction = undefined;\nlet prevTransactionName = undefined;\nlet startTransaction = undefined;\n\n/**\n * Creates routing instrumention for Next Router. Only supported for\n * client side routing. Works for Next >= 10.\n *\n * Leverages the SingletonRouter from the `next/router` to\n * generate pageload/navigation transactions and parameterize\n * transaction names.\n */\nfunction nextRouterInstrumentation(\n startTransactionCb,\n startTransactionOnPageLoad = true,\n startTransactionOnLocationChange = true,\n) {\n startTransaction = startTransactionCb;\n Router.ready(() => {\n // We can only start the pageload transaction when we have access to the parameterized\n // route name. Setting the transaction name after the transaction is started could lead\n // to possible race conditions with the router, so this approach was taken.\n if (startTransactionOnPageLoad) {\n var pathIsRoute = Router.route !== null;\n\n prevTransactionName = pathIsRoute ? stripUrlQueryAndFragment(Router.route) : global.location.pathname;\n activeTransaction = startTransactionCb({\n name: prevTransactionName,\n op: 'pageload',\n tags: DEFAULT_TAGS,\n metadata: {\n source: pathIsRoute ? 'route' : 'url',\n },\n });\n }\n\n // Spans that aren't attached to any transaction are lost; so if transactions aren't\n // created (besides potentially the onpageload transaction), no need to wrap the router.\n if (!startTransactionOnLocationChange) return;\n\n // `withRouter` uses `useRouter` underneath:\n // https://github.com/vercel/next.js/blob/de42719619ae69fbd88e445100f15701f6e1e100/packages/next/client/with-router.tsx#L21\n // Router events also use the router:\n // https://github.com/vercel/next.js/blob/de42719619ae69fbd88e445100f15701f6e1e100/packages/next/client/router.ts#L92\n // `Router.changeState` handles the router state changes, so it may be enough to only wrap it\n // (instead of wrapping all of the Router's functions).\n var routerPrototype = Object.getPrototypeOf(Router.router);\n fill(routerPrototype, 'changeState', changeStateWrapper);\n });\n}\n\n/**\n * Wraps Router.changeState()\n * https://github.com/vercel/next.js/blob/da97a18dafc7799e63aa7985adc95f213c2bf5f3/packages/next/next-server/lib/router/router.ts#L1204\n * Start a navigation transaction every time the router changes state.\n */\nfunction changeStateWrapper(originalChangeStateWrapper) {\n var wrapper = function (\n \n method,\n // The parameterized url, ex. posts/[id]/[comment]\n url,\n // The actual url, ex. posts/85/my-comment\n as,\n options,\n // At the moment there are no additional arguments (meaning the rest parameter is empty).\n // This is meant to protect from future additions to Next.js API, especially since this is an\n // internal API.\n ...args\n ) {\n var newTransactionName = stripUrlQueryAndFragment(url);\n // do not start a transaction if it's from the same page\n if (startTransaction !== undefined && prevTransactionName !== newTransactionName) {\n if (activeTransaction) {\n activeTransaction.finish();\n }\n var tags = {\n ...DEFAULT_TAGS,\n method,\n ...options,\n };\n if (prevTransactionName) {\n tags.from = prevTransactionName;\n }\n prevTransactionName = newTransactionName;\n activeTransaction = startTransaction({\n name: prevTransactionName,\n op: 'navigation',\n tags,\n metadata: { source: 'route' },\n });\n }\n return originalChangeStateWrapper.call(this, method, url, as, options, ...args);\n };\n return wrapper;\n}\n\nexport { nextRouterInstrumentation };\n//# sourceMappingURL=client.js.map\n","/**\n * Recursively traverses an object to update an existing nested key.\n * Note: The provided key path must include existing properties,\n * the function will not create objects while traversing.\n *\n * @param obj An object to update\n * @param value The value to update the nested key with\n * @param keyPath The path to the key to update ex. fizz.buzz.foo\n */\nfunction setNestedKey(obj, keyPath, value) {\n // Ex. foo.bar.zoop will extract foo and bar.zoop\n var match = keyPath.match(/([a-z]+)\\.(.*)/i);\n if (match === null) {\n obj[keyPath] = value;\n } else {\n setNestedKey(obj[match[1]], match[2], value);\n }\n}\n\n/**\n * Retrieves the patched integrations with the provided integration.\n *\n * The integration must be present in the final user integrations, and they are compared\n * by integration name. If the user has defined one, there's nothing to patch; if not,\n * the provided integration is added.\n *\n * @param integration The integration to patch, if necessary.\n * @param userIntegrations Integrations defined by the user.\n * @param options options to update for a particular integration\n * @returns Final integrations, patched if necessary.\n */\nfunction addIntegration(\n integration,\n userIntegrations,\n options = {},\n) {\n if (Array.isArray(userIntegrations)) {\n return addIntegrationToArray(integration, userIntegrations, options);\n } else {\n return addIntegrationToFunction(integration, userIntegrations, options);\n }\n}\n\nfunction addIntegrationToArray(\n integration,\n userIntegrations,\n options,\n) {\n let includesName = false;\n for (let x = 0; x < userIntegrations.length; x++) {\n if (userIntegrations[x].name === integration.name) {\n includesName = true;\n }\n\n var op = options[userIntegrations[x].name];\n if (op) {\n setNestedKey(userIntegrations[x], op.keyPath, op.value);\n }\n }\n\n if (includesName) {\n return userIntegrations;\n }\n return [...userIntegrations, integration];\n}\n\nfunction addIntegrationToFunction(\n integration,\n userIntegrationsFunc,\n options,\n) {\n var wrapper = defaultIntegrations => {\n var userFinalIntegrations = userIntegrationsFunc(defaultIntegrations);\n return addIntegrationToArray(integration, userFinalIntegrations, options);\n };\n return wrapper;\n}\n\nexport { addIntegration };\n//# sourceMappingURL=userIntegrations.js.map\n","import { init as init$1, configureScope } from '@sentry/react';\nexport * from '@sentry/react';\nexport { Integrations } from '@sentry/react';\nimport { BrowserTracing, defaultRequestInstrumentationOptions } from '@sentry/tracing';\nexport { BrowserTracing } from '@sentry/tracing';\nimport { nextRouterInstrumentation } from './performance/client.js';\nexport { nextRouterInstrumentation } from './performance/client.js';\nimport { buildMetadata } from './utils/metadata.js';\nimport { addIntegration } from './utils/userIntegrations.js';\nexport { captureUnderscoreErrorException } from './utils/_error.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/** Inits the Sentry NextJS SDK on the browser with the React SDK. */\nfunction init(options) {\n buildMetadata(options, ['nextjs', 'react']);\n options.environment = options.environment || process.env.NODE_ENV;\n\n let integrations = options.integrations;\n\n // Guard below evaluates to true unless __SENTRY_TRACING__ is text-replaced with \"false\"\n if (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) {\n // Only add BrowserTracing if a tracesSampleRate or tracesSampler is set\n if (options.tracesSampleRate !== undefined || options.tracesSampler !== undefined) {\n integrations = createClientIntegrations(options.integrations);\n }\n }\n\n init$1({\n ...options,\n integrations,\n });\n\n configureScope(scope => {\n scope.setTag('runtime', 'browser');\n var filterTransactions = event =>\n event.type === 'transaction' && event.transaction === '/404' ? null : event;\n filterTransactions.id = 'NextClient404Filter';\n scope.addEventProcessor(filterTransactions);\n });\n}\n\nfunction createClientIntegrations(integrations) {\n var defaultBrowserTracingIntegration = new BrowserTracing({\n tracingOrigins: [...defaultRequestInstrumentationOptions.tracingOrigins, /^(api\\/)/],\n routingInstrumentation: nextRouterInstrumentation,\n });\n\n if (integrations) {\n return addIntegration(defaultBrowserTracingIntegration, integrations, {\n BrowserTracing: { keyPath: 'options.routingInstrumentation', value: nextRouterInstrumentation },\n });\n } else {\n return [defaultBrowserTracingIntegration];\n }\n}\n\nexport { init };\n//# sourceMappingURL=index.client.js.map\n","import { SDK_VERSION } from '@sentry/core';\n\nvar PACKAGE_NAME_PREFIX = 'npm:@sentry/';\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n * @param options sdk options object that gets mutated\n * @param names list of package names\n */\nfunction buildMetadata(options, names) {\n options._metadata = options._metadata || {};\n options._metadata.sdk =\n options._metadata.sdk ||\n ({\n name: 'sentry.javascript.nextjs',\n packages: names.map(name => ({\n name: `${PACKAGE_NAME_PREFIX}${name}`,\n version: SDK_VERSION,\n })),\n version: SDK_VERSION,\n } );\n}\n\nexport { buildMetadata };\n//# sourceMappingURL=metadata.js.map\n","import { SDK_VERSION, init as init$1 } from '@sentry/browser';\n\n/**\n * Inits the React SDK\n */\nfunction init(options) {\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'sentry.javascript.react',\n packages: [\n {\n name: 'npm:@sentry/react',\n version: SDK_VERSION,\n },\n ],\n version: SDK_VERSION,\n };\n init$1(options);\n}\n\nexport { init };\n//# sourceMappingURL=sdk.js.map\n","// This file configures the initialization of Sentry on the browser.\n// The config you add here will be used whenever a page is visited.\n// https://docs.sentry.io/platforms/javascript/guides/nextjs/\n\nimport * as Sentry from '@sentry/nextjs';\n\nconst SENTRY_DSN = process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN;\n\nSentry.init({\n dsn: SENTRY_DSN || 'https://ee557f44152b4c54940205c27aae727c@o1302711.ingest.sentry.io/6540720',\n // Adjust this value in production, or use tracesSampler for greater control\n tracesSampleRate: 1.0,\n environment: process.env.NEXT_PUBLIC_APP_ENV + '-nextjs-client',\n // ...\n // Note: if you want to override the automatic release value, do not set a\n // `release` value here - use the environment variable `SENTRY_RELEASE`, so\n // that it will also get attached to your source maps\n});\n","module.exports = require('./dist/shared/lib/head')\n","module.exports = require('./dist/client/router')\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import bezier from 'bezier-easing';\n\nvar Limits = function Limits(properties) {\n this.startX = properties.startX;\n this.startY = properties.startY;\n this.endX = properties.endX;\n this.endY = properties.endY; // Used to calculate the progress of the element\n\n this.totalX = this.endX - this.startX;\n this.totalY = this.endY - this.startY; // Used to scale translate effects\n\n this.startMultiplierX = properties.startMultiplierX || 1;\n this.endMultiplierX = properties.endMultiplierX || 1;\n this.startMultiplierY = properties.startMultiplierY || 1;\n this.endMultiplierY = properties.endMultiplierY || 1;\n};\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar ValidCSSEffects;\n\n(function (ValidCSSEffects) {\n ValidCSSEffects[\"speed\"] = \"speed\";\n ValidCSSEffects[\"translateX\"] = \"translateX\";\n ValidCSSEffects[\"translateY\"] = \"translateY\";\n ValidCSSEffects[\"rotate\"] = \"rotate\";\n ValidCSSEffects[\"rotateX\"] = \"rotateX\";\n ValidCSSEffects[\"rotateY\"] = \"rotateY\";\n ValidCSSEffects[\"rotateZ\"] = \"rotateZ\";\n ValidCSSEffects[\"scale\"] = \"scale\";\n ValidCSSEffects[\"scaleX\"] = \"scaleX\";\n ValidCSSEffects[\"scaleY\"] = \"scaleY\";\n ValidCSSEffects[\"scaleZ\"] = \"scaleZ\";\n ValidCSSEffects[\"opacity\"] = \"opacity\";\n})(ValidCSSEffects || (ValidCSSEffects = {}));\n\nvar Units;\n\n(function (Units) {\n Units[\"px\"] = \"px\";\n Units[\"%\"] = \"%\";\n Units[\"vh\"] = \"vh\";\n Units[\"vw\"] = \"vw\";\n})(Units || (Units = {}));\n\nvar RotationUnits;\n\n(function (RotationUnits) {\n RotationUnits[\"deg\"] = \"deg\";\n RotationUnits[\"turn\"] = \"turn\";\n RotationUnits[\"rad\"] = \"rad\";\n})(RotationUnits || (RotationUnits = {}));\n\nvar ScaleUnits;\n\n(function (ScaleUnits) {\n ScaleUnits[\"\"] = \"\";\n})(ScaleUnits || (ScaleUnits = {}));\n\nvar ScrollAxis;\n\n(function (ScrollAxis) {\n ScrollAxis[\"vertical\"] = \"vertical\";\n ScrollAxis[\"horizontal\"] = \"horizontal\";\n})(ScrollAxis || (ScrollAxis = {}));\n\nvar EasingPreset;\n\n(function (EasingPreset) {\n EasingPreset[\"ease\"] = \"ease\";\n EasingPreset[\"easeIn\"] = \"easeIn\";\n EasingPreset[\"easeOut\"] = \"easeOut\";\n EasingPreset[\"easeInOut\"] = \"easeInOut\";\n EasingPreset[\"easeInQuad\"] = \"easeInQuad\";\n EasingPreset[\"easeInCubic\"] = \"easeInCubic\";\n EasingPreset[\"easeInQuart\"] = \"easeInQuart\";\n EasingPreset[\"easeInQuint\"] = \"easeInQuint\";\n EasingPreset[\"easeInSine\"] = \"easeInSine\";\n EasingPreset[\"easeInExpo\"] = \"easeInExpo\";\n EasingPreset[\"easeInCirc\"] = \"easeInCirc\";\n EasingPreset[\"easeOutQuad\"] = \"easeOutQuad\";\n EasingPreset[\"easeOutCubic\"] = \"easeOutCubic\";\n EasingPreset[\"easeOutQuart\"] = \"easeOutQuart\";\n EasingPreset[\"easeOutQuint\"] = \"easeOutQuint\";\n EasingPreset[\"easeOutSine\"] = \"easeOutSine\";\n EasingPreset[\"easeOutExpo\"] = \"easeOutExpo\";\n EasingPreset[\"easeOutCirc\"] = \"easeOutCirc\";\n EasingPreset[\"easeInOutQuad\"] = \"easeInOutQuad\";\n EasingPreset[\"easeInOutCubic\"] = \"easeInOutCubic\";\n EasingPreset[\"easeInOutQuart\"] = \"easeInOutQuart\";\n EasingPreset[\"easeInOutQuint\"] = \"easeInOutQuint\";\n EasingPreset[\"easeInOutSine\"] = \"easeInOutSine\";\n EasingPreset[\"easeInOutExpo\"] = \"easeInOutExpo\";\n EasingPreset[\"easeInOutCirc\"] = \"easeInOutCirc\";\n EasingPreset[\"easeInBack\"] = \"easeInBack\";\n EasingPreset[\"easeOutBack\"] = \"easeOutBack\";\n EasingPreset[\"easeInOutBack\"] = \"easeInOutBack\";\n})(EasingPreset || (EasingPreset = {}));\n\n/**\r\n * Creates a unique id to distinguish parallax elements.\r\n */\nvar id = 0;\nfunction createId() {\n ++id;\n return id;\n}\n\nvar Rect = /*#__PURE__*/function () {\n function Rect(options) {\n var rect = options.el.getBoundingClientRect(); // rect is based on viewport -- must adjust for relative scroll container\n\n if (options.view.scrollContainer) {\n var scrollRect = options.view.scrollContainer.getBoundingClientRect();\n rect = _extends({}, rect, {\n top: rect.top - scrollRect.top,\n right: rect.right - scrollRect.left,\n bottom: rect.bottom - scrollRect.top,\n left: rect.left - scrollRect.left\n });\n }\n\n this.height = options.el.offsetHeight;\n this.width = options.el.offsetWidth;\n this.left = rect.left;\n this.right = rect.right;\n this.top = rect.top;\n this.bottom = rect.bottom;\n\n if (options.rootMargin) {\n this._setRectWithRootMargin(options.rootMargin);\n }\n }\n /**\r\n * Apply root margin to all properties\r\n */\n\n\n var _proto = Rect.prototype;\n\n _proto._setRectWithRootMargin = function _setRectWithRootMargin(rootMargin) {\n var totalRootY = rootMargin.top + rootMargin.bottom;\n var totalRootX = rootMargin.left + rootMargin.right;\n this.top -= rootMargin.top;\n this.right += rootMargin.right;\n this.bottom += rootMargin.bottom;\n this.left -= rootMargin.left;\n this.height += totalRootY;\n this.width += totalRootX;\n };\n\n return Rect;\n}();\n\nvar VALID_UNITS = [ScaleUnits[''], Units.px, Units['%'], Units['vh'], Units['vw'], RotationUnits.deg, RotationUnits.turn, RotationUnits.rad];\n/**\r\n * Determines the unit of a string and parses the value\r\n */\n\nfunction parseValueAndUnit(str, defaultUnit) {\n if (defaultUnit === void 0) {\n defaultUnit = Units['%'];\n }\n\n var out = {\n value: 0,\n unit: defaultUnit\n };\n if (typeof str === 'undefined') return out;\n var isValid = typeof str === 'number' || typeof str === 'string';\n\n if (!isValid) {\n throw new Error('Invalid value provided. Must provide a value as a string or number');\n }\n\n str = String(str);\n out.value = parseFloat(str); // @ts-ignore\n\n out.unit = str.match(/[\\d.\\-+]*\\s*(.*)/)[1] || defaultUnit; // @ts-expect-error\n\n var isValidUnit = VALID_UNITS.includes(out.unit);\n\n if (!isValidUnit) {\n throw new Error('Invalid unit provided.');\n }\n\n return out;\n}\n\nvar easingPresets = {\n ease: [0.25, 0.1, 0.25, 1.0],\n easeIn: [0.42, 0.0, 1.0, 1.0],\n easeOut: [0.0, 0.0, 0.58, 1.0],\n easeInOut: [0.42, 0.0, 0.58, 1.0],\n\n /* Ease IN curves */\n easeInQuad: [0.55, 0.085, 0.68, 0.53],\n easeInCubic: [0.55, 0.055, 0.675, 0.19],\n easeInQuart: [0.895, 0.03, 0.685, 0.22],\n easeInQuint: [0.755, 0.05, 0.855, 0.06],\n easeInSine: [0.47, 0.0, 0.745, 0.715],\n easeInExpo: [0.95, 0.05, 0.795, 0.035],\n easeInCirc: [0.6, 0.04, 0.98, 0.335],\n\n /* Ease Out Curves */\n easeOutQuad: [0.25, 0.46, 0.45, 0.94],\n easeOutCubic: [0.215, 0.61, 0.355, 1.0],\n easeOutQuart: [0.165, 0.84, 0.44, 1.0],\n easeOutQuint: [0.23, 1.0, 0.32, 1.0],\n easeOutSine: [0.39, 0.575, 0.565, 1.0],\n easeOutExpo: [0.19, 1.0, 0.22, 1.0],\n easeOutCirc: [0.075, 0.82, 0.165, 1.0],\n\n /* Ease IN Out Curves */\n easeInOutQuad: [0.455, 0.03, 0.515, 0.955],\n easeInOutCubic: [0.645, 0.045, 0.355, 1.0],\n easeInOutQuart: [0.77, 0.0, 0.175, 1.0],\n easeInOutQuint: [0.86, 0.0, 0.07, 1.0],\n easeInOutSine: [0.445, 0.05, 0.55, 0.95],\n easeInOutExpo: [1.0, 0.0, 0.0, 1.0],\n easeInOutCirc: [0.785, 0.135, 0.15, 0.86],\n\n /* Ease Bounce Curves */\n easeInBack: [0.6, -0.28, 0.735, 0.045],\n easeOutBack: [0.175, 0.885, 0.32, 1.275],\n easeInOutBack: [0.68, -0.55, 0.265, 1.55]\n};\n\nfunction createEasingFunction(easing) {\n if (Array.isArray(easing)) {\n return bezier(easing[0], easing[1], easing[2], easing[3]);\n }\n\n if (typeof easing === 'string' && typeof easingPresets[easing] !== 'undefined') {\n var params = easingPresets[easing];\n return bezier(params[0], params[1], params[2], params[3]);\n }\n\n return;\n}\n\nvar PARALLAX_EFFECTS = /*#__PURE__*/Object.values(ValidCSSEffects);\nvar MAP_EFFECT_TO_DEFAULT_UNIT = {\n speed: 'px',\n translateX: '%',\n translateY: '%',\n rotate: 'deg',\n rotateX: 'deg',\n rotateY: 'deg',\n rotateZ: 'deg',\n scale: '',\n scaleX: '',\n scaleY: '',\n scaleZ: '',\n opacity: ''\n};\n/**\r\n * Takes a parallax element effects and parses the properties to get the start and end values and units.\r\n */\n\nfunction parseElementTransitionEffects(props, scrollAxis) {\n var parsedEffects = {};\n PARALLAX_EFFECTS.forEach(function (key) {\n var defaultValue = MAP_EFFECT_TO_DEFAULT_UNIT[key]; // If the provided type is a number, this must be the speed prop\n // in which case we need to construct the proper translate config\n\n if (typeof (props == null ? void 0 : props[key]) === 'number') {\n var value = props == null ? void 0 : props[key];\n var startSpeed = (value || 0) * 10 + \"px\";\n var endSpeed = (value || 0) * -10 + \"px\";\n var startParsed = parseValueAndUnit(startSpeed);\n var endParsed = parseValueAndUnit(endSpeed);\n var speedConfig = {\n start: startParsed.value,\n end: endParsed.value,\n unit: startParsed.unit\n }; // Manually set translate y value\n\n if (scrollAxis === ScrollAxis.vertical) {\n parsedEffects.translateY = speedConfig;\n } // Manually set translate y value\n\n\n if (scrollAxis === ScrollAxis.horizontal) {\n parsedEffects.translateX = speedConfig;\n }\n } // The rest are standard effect being parsed\n\n\n if (Array.isArray(props == null ? void 0 : props[key])) {\n var _value = props == null ? void 0 : props[key];\n\n if (typeof _value[0] !== 'undefined' && typeof _value[1] !== 'undefined') {\n var _startParsed = parseValueAndUnit(_value == null ? void 0 : _value[0], defaultValue);\n\n var _endParsed = parseValueAndUnit(_value == null ? void 0 : _value[1], defaultValue);\n\n var easing = createEasingFunction(_value == null ? void 0 : _value[2]);\n parsedEffects[key] = {\n start: _startParsed.value,\n end: _endParsed.value,\n unit: _startParsed.unit,\n easing: easing\n };\n\n if (_startParsed.unit !== _endParsed.unit) {\n throw new Error('Must provide matching units for the min and max offset values of each axis.');\n }\n }\n }\n });\n return parsedEffects;\n}\n\n/**\r\n * Returns the percent (0 - 100) moved based on position in the viewport\r\n */\nfunction getProgressAmount(\n/*\r\n * The start value from cache\r\n */\nstart,\n/*\r\n * total dist the element has to move to be 100% complete (view width/height + element width/height)\r\n */\ntotalDist,\n/*\r\n * Current scroll value\r\n */\ncurrentScroll,\n/*\r\n * an optional easing function to apply\r\n */\neasing) {\n // adjust cached value\n var startAdjustedScroll = currentScroll - start; // Amount the element has moved based on current and total distance to move\n\n var amount = startAdjustedScroll / totalDist; // Apply bezier easing if provided\n\n if (easing) {\n amount = easing(amount);\n }\n\n return amount;\n}\n\n/**\r\n * Takes two values (start, end) and returns whether the current scroll is within range\r\n * @param {number} start - start of scroll (x/y)\r\n * @param {number} end - end of scroll (x/y)\r\n * @param {number} scroll - current scroll (x/y)\r\n * @return {boolean} isInView\r\n */\nfunction isElementInView(start, end, scroll) {\n var isInView = scroll >= start && scroll <= end;\n return isInView;\n}\n\n// Scale between AKA normalize\nfunction scaleBetween(value, newMin, newMax, oldMin, oldMax) {\n return (newMax - newMin) * (value - oldMin) / (oldMax - oldMin) + newMin;\n}\n\n/**\r\n * Scales a start and end value of an effect based on percent moved and easing function\r\n */\n\nfunction scaleEffectByProgress(effect, progress) {\n var value = scaleBetween(typeof effect.easing === 'function' ? effect.easing(progress) : progress, (effect == null ? void 0 : effect.start) || 0, (effect == null ? void 0 : effect.end) || 0, 0, 1);\n return {\n value: value,\n unit: effect == null ? void 0 : effect.unit\n };\n}\n\nvar TRANSFORM_EFFECTS = /*#__PURE__*/Object.values(ValidCSSEffects).filter(function (v) {\n return v !== 'opacity';\n});\nfunction setWillChangeStyles(el, effects) {\n var keys = Object.keys(effects);\n var hasOpacity = keys.includes('opacity');\n var willChange = \"transform\" + (hasOpacity ? ',opacity' : '');\n el.style.willChange = willChange;\n}\nfunction setElementStyles(effects, progress, el) {\n if (!el) return;\n var transform = getTransformStyles(effects, progress);\n var opacity = getOpacityStyles(effects, progress);\n el.style.transform = transform;\n el.style.opacity = opacity;\n}\nfunction getOpacityStyles(effects, progress) {\n var scaledOpacity = effects['opacity'] && scaleEffectByProgress(effects['opacity'], progress);\n\n if (typeof scaledOpacity === 'undefined' || typeof scaledOpacity.value === 'undefined' || typeof scaledOpacity.unit === 'undefined') {\n return '';\n }\n\n var styleStr = \"\" + scaledOpacity.value;\n return styleStr;\n}\nfunction getTransformStyles(effects, progress) {\n var transform = TRANSFORM_EFFECTS.reduce(function (acc, key) {\n var scaledEffect = // @ts-expect-error\n effects[key] && scaleEffectByProgress(effects[key], progress);\n\n if (typeof scaledEffect === 'undefined' || typeof scaledEffect.value === 'undefined' || typeof scaledEffect.unit === 'undefined') {\n return acc;\n }\n\n var styleStr = key + \"(\" + scaledEffect.value + scaledEffect.unit + \")\";\n return acc + styleStr;\n }, '');\n return transform;\n}\n/**\r\n * Takes a parallax element and removes parallax offset styles.\r\n * @param {object} element\r\n */\n\nfunction resetStyles(element) {\n var el = element.el;\n if (!el) return;\n el.style.transform = '';\n el.style.opacity = '';\n}\n\nfunction createLimitsForRelativeElements(rect, view, scroll, shouldAlwaysCompleteAnimation) {\n var startY = rect.top - view.height;\n var startX = rect.left - view.width;\n var endY = rect.bottom;\n var endX = rect.right; // add scroll\n\n startX += scroll.x;\n endX += scroll.x;\n startY += scroll.y;\n endY += scroll.y;\n\n if (shouldAlwaysCompleteAnimation) {\n if (scroll.y + rect.top < view.height) {\n startY = 0;\n }\n\n if (scroll.x + rect.left < view.width) {\n startX = 0;\n }\n\n if (endY > view.scrollHeight - view.height) {\n endY = view.scrollHeight - view.height;\n }\n\n if (endX > view.scrollWidth - view.width) {\n endX = view.scrollWidth - view.width;\n }\n }\n\n var limits = new Limits({\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY\n });\n return limits;\n}\n\nfunction getTranslateScalar(startTranslatePx, endTranslatePx, totalDist) {\n var slow = endTranslatePx > startTranslatePx; // calculating necessary scale to increase translations\n\n var totalAbsOff = (Math.abs(startTranslatePx) + Math.abs(endTranslatePx)) * (slow ? -1 : 1);\n var totalDistTrue = totalDist + totalAbsOff; // Determine multiple to scale by, only values greater than 1\n\n var scale = Math.max(totalDist / totalDistTrue, 1);\n return scale;\n}\n\n/**\r\n * Return the start and end pixel values for an elements translations\r\n */\nfunction getStartEndValueInPx(translate, elementSize) {\n var start = translate.start,\n end = translate.end,\n unit = translate.unit;\n\n if (unit === '%') {\n var scale = elementSize / 100;\n start = start * scale;\n end = end * scale;\n }\n\n if (unit === 'vw') {\n var startScale = start / 100;\n var endScale = end / 100;\n start = window.innerWidth * startScale;\n end = window.innerWidth * endScale;\n }\n\n if (unit === 'vh') {\n var _startScale = start / 100;\n\n var _endScale = end / 100;\n\n start = window.innerHeight * _startScale;\n end = window.innerHeight * _endScale;\n }\n\n return {\n start: start,\n end: end\n };\n}\n\nvar DEFAULT_VALUE = {\n start: 0,\n end: 0,\n unit: ''\n};\nfunction createLimitsWithTranslationsForRelativeElements(rect, view, effects, scroll, scrollAxis, shouldAlwaysCompleteAnimation) {\n // get start and end accounting for percent effects\n var translateX = effects.translateX || DEFAULT_VALUE;\n var translateY = effects.translateY || DEFAULT_VALUE;\n\n var _getStartEndValueInPx = getStartEndValueInPx(translateX, rect.width),\n startTranslateXPx = _getStartEndValueInPx.start,\n endTranslateXPx = _getStartEndValueInPx.end;\n\n var _getStartEndValueInPx2 = getStartEndValueInPx(translateY, rect.height),\n startTranslateYPx = _getStartEndValueInPx2.start,\n endTranslateYPx = _getStartEndValueInPx2.end; // default starting values\n\n\n var startY = rect.top - view.height;\n var startX = rect.left - view.width;\n var endY = rect.bottom;\n var endX = rect.right;\n var startMultiplierY = 1;\n var endMultiplierY = 1;\n\n if (scrollAxis === ScrollAxis.vertical) {\n startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, view.height + rect.height);\n endMultiplierY = startMultiplierY;\n }\n\n var startMultiplierX = 1;\n var endMultiplierX = 1;\n\n if (scrollAxis === ScrollAxis.horizontal) {\n startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, view.width + rect.width);\n endMultiplierX = startMultiplierX;\n } // Apply the scale to initial values\n\n\n if (startTranslateYPx < 0) {\n startY = startY + startTranslateYPx * startMultiplierY;\n }\n\n if (endTranslateYPx > 0) {\n endY = endY + endTranslateYPx * endMultiplierY;\n }\n\n if (startTranslateXPx < 0) {\n startX = startX + startTranslateXPx * startMultiplierX;\n }\n\n if (endTranslateXPx > 0) {\n endX = endX + endTranslateXPx * endMultiplierX;\n } // add scroll\n\n\n startX += scroll.x;\n endX += scroll.x;\n startY += scroll.y;\n endY += scroll.y; // NOTE: please refactor and isolate this :(\n\n if (shouldAlwaysCompleteAnimation) {\n var topBeginsInView = scroll.y + rect.top < view.height;\n var leftBeginsInView = scroll.x + rect.left < view.width;\n var bottomEndsInView = scroll.y + rect.bottom > view.scrollHeight - view.height;\n var rightEndsInView = scroll.x + rect.right > view.scrollWidth - view.height;\n\n if (topBeginsInView && bottomEndsInView) {\n startMultiplierY = 1;\n endMultiplierY = 1;\n startY = 0;\n endY = view.scrollHeight - view.height;\n }\n\n if (leftBeginsInView && rightEndsInView) {\n startMultiplierX = 1;\n endMultiplierX = 1;\n startX = 0;\n endX = view.scrollWidth - view.width;\n }\n\n if (!topBeginsInView && bottomEndsInView) {\n startY = rect.top - view.height + scroll.y;\n endY = view.scrollHeight - view.height;\n var totalDist = endY - startY;\n startMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, totalDist);\n endMultiplierY = 1;\n\n if (startTranslateYPx < 0) {\n startY = startY + startTranslateYPx * startMultiplierY;\n }\n }\n\n if (!leftBeginsInView && rightEndsInView) {\n startX = rect.left - view.width + scroll.x;\n endX = view.scrollWidth - view.width;\n\n var _totalDist = endX - startX;\n\n startMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, _totalDist);\n endMultiplierX = 1;\n\n if (startTranslateXPx < 0) {\n startX = startX + startTranslateXPx * startMultiplierX;\n }\n }\n\n if (topBeginsInView && !bottomEndsInView) {\n startY = 0;\n endY = rect.bottom + scroll.y;\n\n var _totalDist2 = endY - startY;\n\n startMultiplierY = 1;\n endMultiplierY = getTranslateScalar(startTranslateYPx, endTranslateYPx, _totalDist2);\n\n if (endTranslateYPx > 0) {\n endY = endY + endTranslateYPx * endMultiplierY;\n }\n }\n\n if (leftBeginsInView && !rightEndsInView) {\n startX = 0;\n endX = rect.right + scroll.x;\n\n var _totalDist3 = endX - startX;\n\n startMultiplierX = 1;\n endMultiplierX = getTranslateScalar(startTranslateXPx, endTranslateXPx, _totalDist3);\n\n if (endTranslateXPx > 0) {\n endX = endX + endTranslateXPx * endMultiplierX;\n }\n }\n }\n\n var limits = new Limits({\n startX: startX,\n startY: startY,\n endX: endX,\n endY: endY,\n startMultiplierX: startMultiplierX,\n endMultiplierX: endMultiplierX,\n startMultiplierY: startMultiplierY,\n endMultiplierY: endMultiplierY\n });\n return limits;\n}\n\nfunction scaleTranslateEffectsForSlowerScroll(effects, limits) {\n var effectsCopy = _extends({}, effects);\n\n if (effectsCopy.translateX) {\n effectsCopy.translateX = _extends({}, effects.translateX, {\n start: effectsCopy.translateX.start * limits.startMultiplierX,\n end: effectsCopy.translateX.end * limits.endMultiplierX\n });\n }\n\n if (effectsCopy.translateY) {\n effectsCopy.translateY = _extends({}, effects.translateY, {\n start: effectsCopy.translateY.start * limits.startMultiplierY,\n end: effectsCopy.translateY.end * limits.endMultiplierY\n });\n }\n\n return effectsCopy;\n}\n\nfunction getShouldScaleTranslateEffects(props, effects, scrollAxis) {\n if (props.rootMargin || props.targetElement || props.shouldDisableScalingTranslations) {\n return false;\n }\n\n if (!!effects.translateX && scrollAxis === ScrollAxis.horizontal || !!effects.translateY && scrollAxis === ScrollAxis.vertical) {\n return true;\n }\n\n return false;\n}\n\nvar clamp = function clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n};\n\nvar Element = /*#__PURE__*/function () {\n function Element(options) {\n this.el = options.el;\n this.props = options.props;\n this.scrollAxis = options.scrollAxis;\n this.id = createId();\n this.effects = parseElementTransitionEffects(this.props, this.scrollAxis);\n this.isInView = null;\n this.progress = 0;\n\n this._setElementEasing(options.props.easing);\n\n setWillChangeStyles(options.el, this.effects);\n }\n\n var _proto = Element.prototype;\n\n _proto.updateProps = function updateProps(nextProps) {\n this.props = _extends({}, this.props, nextProps);\n this.effects = parseElementTransitionEffects(nextProps, this.scrollAxis);\n\n this._setElementEasing(nextProps.easing);\n\n return this;\n };\n\n _proto.setCachedAttributes = function setCachedAttributes(view, scroll) {\n // NOTE: Must reset styles before getting the rect, as it might impact the natural position\n resetStyles(this);\n this.rect = new Rect({\n el: this.props.targetElement || this.el,\n rootMargin: this.props.rootMargin,\n view: view\n });\n var shouldScaleTranslateEffects = getShouldScaleTranslateEffects(this.props, this.effects, this.scrollAxis);\n\n if (typeof this.props.startScroll === 'number' && typeof this.props.endScroll === 'number') {\n this.limits = new Limits({\n startX: this.props.startScroll,\n startY: this.props.startScroll,\n endX: this.props.endScroll,\n endY: this.props.endScroll\n }); // Undo the reset -- place it back at current position with styles\n\n this._setElementStyles();\n\n return this;\n }\n\n if (shouldScaleTranslateEffects) {\n this.limits = createLimitsWithTranslationsForRelativeElements(this.rect, view, this.effects, scroll, this.scrollAxis, this.props.shouldAlwaysCompleteAnimation);\n this.scaledEffects = scaleTranslateEffectsForSlowerScroll(this.effects, this.limits);\n } else {\n this.limits = createLimitsForRelativeElements(this.rect, view, scroll, this.props.shouldAlwaysCompleteAnimation);\n } // Undo the reset -- place it back at current position with styles\n\n\n this._setElementStyles();\n\n return this;\n };\n\n _proto._updateElementIsInView = function _updateElementIsInView(nextIsInView) {\n // NOTE: Check if this is the first change to make sure onExit isn't called\n var isFirstChange = this.isInView === null;\n\n if (nextIsInView !== this.isInView) {\n if (nextIsInView) {\n this.props.onEnter && this.props.onEnter(this);\n } else if (!isFirstChange) {\n this._setFinalProgress();\n\n this._setElementStyles();\n\n this.props.onExit && this.props.onExit(this);\n }\n }\n\n this.isInView = nextIsInView;\n };\n\n _proto._setFinalProgress = function _setFinalProgress() {\n var finalProgress = clamp(Math.round(this.progress), 0, 1);\n\n this._updateElementProgress(finalProgress);\n };\n\n _proto._setElementStyles = function _setElementStyles() {\n if (this.props.disabled) return;\n var effects = this.scaledEffects || this.effects;\n setElementStyles(effects, this.progress, this.el);\n };\n\n _proto._updateElementProgress = function _updateElementProgress(nextProgress) {\n this.progress = nextProgress;\n this.props.onProgressChange && this.props.onProgressChange(this.progress);\n this.props.onChange && this.props.onChange(this);\n };\n\n _proto._setElementEasing = function _setElementEasing(easing) {\n this.easing = createEasingFunction(easing);\n };\n\n _proto.updatePosition = function updatePosition(scroll) {\n if (!this.limits) return this;\n var isVertical = this.scrollAxis === ScrollAxis.vertical;\n var isFirstChange = this.isInView === null; // based on scroll axis\n\n var start = isVertical ? this.limits.startY : this.limits.startX;\n var end = isVertical ? this.limits.endY : this.limits.endX;\n var total = isVertical ? this.limits.totalY : this.limits.totalX;\n var s = isVertical ? scroll.y : scroll.x; // check if in view\n\n var nextIsInView = isElementInView(start, end, s);\n\n this._updateElementIsInView(nextIsInView); // set the progress if in view or this is the first change\n\n\n if (nextIsInView) {\n var nextProgress = getProgressAmount(start, total, s, this.easing);\n\n this._updateElementProgress(nextProgress);\n\n this._setElementStyles();\n } else if (isFirstChange) {\n // NOTE: this._updateElementProgress -- dont use this because it will trigger onChange\n this.progress = clamp(Math.round(getProgressAmount(start, total, s, this.easing)), 0, 1);\n\n this._setElementStyles();\n }\n\n return this;\n };\n\n return Element;\n}();\n\nvar View = /*#__PURE__*/function () {\n function View(config) {\n this.scrollContainer = config.scrollContainer;\n this.width = config.width;\n this.height = config.height;\n this.scrollHeight = config.scrollHeight;\n this.scrollWidth = config.scrollWidth;\n }\n\n var _proto = View.prototype;\n\n _proto.hasChanged = function hasChanged(params) {\n if (params.width !== this.width || params.height !== this.height || params.scrollWidth !== this.scrollWidth || params.scrollHeight !== this.scrollHeight) {\n return true;\n }\n\n return false;\n };\n\n _proto.setSize = function setSize(params) {\n this.width = params.width;\n this.height = params.height;\n this.scrollHeight = params.scrollHeight;\n this.scrollWidth = params.scrollWidth;\n return this;\n };\n\n return View;\n}();\n\nvar Scroll = /*#__PURE__*/function () {\n function Scroll(x, y) {\n this.x = x;\n this.y = y;\n this.dx = 0;\n this.dy = 0;\n }\n\n var _proto = Scroll.prototype;\n\n _proto.setScroll = function setScroll(x, y) {\n this.dx = x - this.x;\n this.dy = y - this.y;\n this.x = x;\n this.y = y;\n return this;\n };\n\n return Scroll;\n}();\n\nfunction testForPassiveScroll() {\n var supportsPassiveOption = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassiveOption = true;\n return true;\n }\n }); // @ts-expect-error\n\n window.addEventListener('test', null, opts); // @ts-expect-error\n\n window.removeEventListener('test', null, opts);\n } catch (e) {}\n\n return supportsPassiveOption;\n}\n\n/**\r\n * -------------------------------------------------------\r\n * Parallax Controller\r\n * -------------------------------------------------------\r\n *\r\n * The global controller for setting up and managing a scroll view of elements.\r\n *\r\n */\n\nvar ParallaxController = /*#__PURE__*/function () {\n function ParallaxController(_ref) {\n var _ref$scrollAxis = _ref.scrollAxis,\n scrollAxis = _ref$scrollAxis === void 0 ? ScrollAxis.vertical : _ref$scrollAxis,\n scrollContainer = _ref.scrollContainer;\n this.scrollAxis = scrollAxis; // All parallax elements to be updated\n\n this.elements = [];\n this._hasScrollContainer = !!scrollContainer;\n this.viewEl = scrollContainer != null ? scrollContainer : window; // Scroll and View\n\n var _this$_getScrollPosit = this._getScrollPosition(),\n x = _this$_getScrollPosit[0],\n y = _this$_getScrollPosit[1];\n\n this.scroll = new Scroll(x, y);\n this.view = new View({\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n scrollContainer: this._hasScrollContainer ? scrollContainer : undefined\n }); // Ticking\n\n this._ticking = false; // Passive support\n\n this._supportsPassive = testForPassiveScroll(); // Bind methods to class\n\n this._bindAllMethods();\n\n this._addListeners(this.viewEl);\n\n this._addResizeObserver();\n\n this._setViewSize();\n }\n /**\r\n * Static method to instantiate the ParallaxController.\r\n * @returns {Class} ParallaxController\r\n */\n\n\n ParallaxController.init = function init(options) {\n var hasWindow = typeof window !== 'undefined';\n\n if (!hasWindow) {\n throw new Error('Looks like ParallaxController.init() was called on the server. This method must be called on the client.');\n }\n\n return new ParallaxController(options);\n };\n\n var _proto = ParallaxController.prototype;\n\n _proto._bindAllMethods = function _bindAllMethods() {\n var _this = this;\n\n ['_addListeners', '_removeListeners', '_getScrollPosition', '_handleScroll', '_handleUpdateCache', '_updateAllElements', '_updateElementPosition', '_setViewSize', '_addResizeObserver', '_checkIfViewHasChanged', '_getViewParams', 'getElements', 'createElement', 'removeElementById', 'resetElementStyles', 'updateElementPropsById', 'update', 'updateScrollContainer', 'destroy'].forEach(function (method) {\n // @ts-expect-error\n _this[method] = _this[method].bind(_this);\n });\n };\n\n _proto._addListeners = function _addListeners(el) {\n el.addEventListener('scroll', this._handleScroll, this._supportsPassive ? {\n passive: true\n } : false);\n window.addEventListener('resize', this._handleUpdateCache, false);\n window.addEventListener('blur', this._handleUpdateCache, false);\n window.addEventListener('focus', this._handleUpdateCache, false);\n window.addEventListener('load', this._handleUpdateCache, false);\n };\n\n _proto._removeListeners = function _removeListeners(el) {\n var _this$_resizeObserver;\n\n el.removeEventListener('scroll', this._handleScroll, false);\n window.removeEventListener('resize', this._handleUpdateCache, false);\n window.removeEventListener('blur', this._handleUpdateCache, false);\n window.removeEventListener('focus', this._handleUpdateCache, false);\n window.removeEventListener('load', this._handleUpdateCache, false);\n (_this$_resizeObserver = this._resizeObserver) == null ? void 0 : _this$_resizeObserver.disconnect();\n };\n\n _proto._addResizeObserver = function _addResizeObserver() {\n var _this2 = this;\n\n try {\n var observedEl = this._hasScrollContainer ? this.viewEl : document.documentElement;\n this._resizeObserver = new ResizeObserver(function () {\n return _this2.update();\n });\n\n this._resizeObserver.observe(observedEl);\n } catch (e) {\n console.warn('Failed to create the resize observer in the ParallaxContoller');\n }\n };\n\n _proto._getScrollPosition = function _getScrollPosition() {\n // Save current scroll\n // Supports IE 9 and up.\n var nx = this._hasScrollContainer ? // @ts-expect-error\n this.viewEl.scrollLeft : window.pageXOffset;\n var ny = this._hasScrollContainer ? // @ts-expect-error\n this.viewEl.scrollTop : window.pageYOffset;\n return [nx, ny];\n }\n /**\r\n * Window scroll handler sets scroll position\r\n * and then calls '_updateAllElements()'.\r\n */\n ;\n\n _proto._handleScroll = function _handleScroll() {\n var _this$_getScrollPosit2 = this._getScrollPosition(),\n nx = _this$_getScrollPosit2[0],\n ny = _this$_getScrollPosit2[1];\n\n this.scroll.setScroll(nx, ny); // Only called if the last animation request has been\n // completed and there are parallax elements to update\n\n if (!this._ticking && this.elements.length > 0) {\n this._ticking = true; // @ts-ignore\n\n window.requestAnimationFrame(this._updateAllElements);\n }\n }\n /**\r\n * Window resize handler. Sets the new window inner height\r\n * then updates parallax element attributes and positions.\r\n */\n ;\n\n _proto._handleUpdateCache = function _handleUpdateCache() {\n this._setViewSize();\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Update element positions.\r\n * Determines if the element is in view based on the cached\r\n * attributes, if so set the elements parallax styles.\r\n */\n ;\n\n _proto._updateAllElements = function _updateAllElements(_temp) {\n var _this3 = this;\n\n var _ref2 = _temp === void 0 ? {} : _temp,\n updateCache = _ref2.updateCache;\n\n if (this.elements) {\n this.elements.forEach(function (element) {\n if (updateCache) {\n element.setCachedAttributes(_this3.view, _this3.scroll);\n }\n\n _this3._updateElementPosition(element);\n });\n } // reset ticking so more animations can be called\n\n\n this._ticking = false;\n }\n /**\r\n * Update element positions.\r\n * Determines if the element is in view based on the cached\r\n * attributes, if so set the elements parallax styles.\r\n */\n ;\n\n _proto._updateElementPosition = function _updateElementPosition(element) {\n if (element.props.disabled) return;\n element.updatePosition(this.scroll);\n }\n /**\r\n * Gets the params to set in the View from the scroll container or the window\r\n */\n ;\n\n _proto._getViewParams = function _getViewParams() {\n if (this._hasScrollContainer) {\n // @ts-expect-error\n var _width = this.viewEl.offsetWidth; // @ts-expect-error\n\n var _height = this.viewEl.offsetHeight; // @ts-expect-error\n\n var _scrollHeight = this.viewEl.scrollHeight; // @ts-expect-error\n\n var _scrollWidth = this.viewEl.scrollWidth;\n return this.view.setSize({\n width: _width,\n height: _height,\n scrollHeight: _scrollHeight,\n scrollWidth: _scrollWidth\n });\n }\n\n var html = document.documentElement;\n var width = window.innerWidth || html.clientWidth;\n var height = window.innerHeight || html.clientHeight;\n var scrollHeight = html.scrollHeight;\n var scrollWidth = html.scrollWidth;\n return {\n width: width,\n height: height,\n scrollHeight: scrollHeight,\n scrollWidth: scrollWidth\n };\n }\n /**\r\n * Cache the view attributes\r\n */\n ;\n\n _proto._setViewSize = function _setViewSize() {\n return this.view.setSize(this._getViewParams());\n }\n /**\r\n * Checks if any of the cached attributes of the view have changed.\r\n * @returns boolean\r\n */\n ;\n\n _proto._checkIfViewHasChanged = function _checkIfViewHasChanged() {\n return this.view.hasChanged(this._getViewParams());\n }\n /**\r\n * -------------------------------------------------------\r\n * Public methods\r\n * -------------------------------------------------------\r\n */\n\n /**\r\n * Returns all the parallax elements in the controller\r\n */\n ;\n\n _proto.getElements = function getElements() {\n return this.elements;\n }\n /**\r\n * Creates and returns new parallax element with provided options to be managed by the controller.\r\n */\n ;\n\n _proto.createElement = function createElement(options) {\n var newElement = new Element(_extends({}, options, {\n scrollAxis: this.scrollAxis\n }));\n newElement.setCachedAttributes(this.view, this.scroll);\n this.elements = this.elements ? [].concat(this.elements, [newElement]) : [newElement];\n\n this._updateElementPosition(newElement); // NOTE: This checks if the view has changed then update the controller and all elements if it has\n // This shouldn't always be necessary with a resize observer watching the view element\n // but there seems to be cases where the resize observer does not catch and update.\n\n\n if (this._checkIfViewHasChanged()) {\n this.update();\n }\n\n return newElement;\n }\n /**\r\n * Remove an element by id\r\n */\n ;\n\n _proto.removeElementById = function removeElementById(id) {\n if (!this.elements) return;\n this.elements = this.elements.filter(function (el) {\n return el.id !== id;\n });\n }\n /**\r\n * Updates an existing parallax element object with new options.\r\n */\n ;\n\n _proto.updateElementPropsById = function updateElementPropsById(id, props) {\n if (this.elements) {\n this.elements = this.elements.map(function (el) {\n if (el.id === id) {\n return el.updateProps(props);\n }\n\n return el;\n });\n }\n\n this.update();\n }\n /**\r\n * Remove a target elements parallax styles\r\n */\n ;\n\n _proto.resetElementStyles = function resetElementStyles(element) {\n resetStyles(element);\n }\n /**\r\n * Updates all cached attributes on parallax elements.\r\n */\n ;\n\n _proto.update = function update() {\n // Save the latest scroll position because window.scroll\n // may be called and the handle scroll event may not be called.\n var _this$_getScrollPosit3 = this._getScrollPosition(),\n nx = _this$_getScrollPosit3[0],\n ny = _this$_getScrollPosit3[1];\n\n this.scroll.setScroll(nx, ny);\n\n this._setViewSize();\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Updates the scroll container of the parallax controller\r\n */\n ;\n\n _proto.updateScrollContainer = function updateScrollContainer(el) {\n // remove existing listeners with current el first\n this._removeListeners(this.viewEl);\n\n this.viewEl = el;\n this._hasScrollContainer = !!el;\n this.view = new View({\n width: 0,\n height: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n scrollContainer: el\n });\n\n this._setViewSize();\n\n this._addListeners(this.viewEl);\n\n this._updateAllElements({\n updateCache: true\n });\n }\n /**\r\n * Removes all listeners and resets all styles on managed elements.\r\n */\n ;\n\n _proto.destroy = function destroy() {\n this._removeListeners(this.viewEl);\n\n if (this.elements) {\n this.elements.forEach(function (element) {\n return resetStyles(element);\n });\n } // @ts-expect-error\n\n\n this.elements = undefined;\n };\n\n return ParallaxController;\n}();\n\nexport { EasingPreset, Element, Limits, ParallaxController, Rect, RotationUnits, ScaleUnits, Scroll, ScrollAxis, Units, ValidCSSEffects, View, createId, getProgressAmount, isElementInView, parseElementTransitionEffects, parseValueAndUnit, resetStyles, scaleBetween, scaleEffectByProgress, setElementStyles, testForPassiveScroll };\n//# sourceMappingURL=parallax-controller.esm.js.map\n","import { ParallaxController, parseValueAndUnit, ScrollAxis } from 'parallax-controller';\nexport { EasingPreset } from 'parallax-controller';\nimport React, { useEffect, useContext, useRef, useState, Component } from 'react';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n\n _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction removeUndefinedObjectKeys(obj) {\n Object.keys(obj).forEach(function (key) {\n return obj[key] === undefined ? delete obj[key] : {};\n });\n return obj;\n}\n\nvar _excluded = [\"disabled\", \"easing\", \"endScroll\", \"onChange\", \"onEnter\", \"onExit\", \"onProgressChange\", \"opacity\", \"rootMargin\", \"rotate\", \"rotateX\", \"rotateY\", \"rotateZ\", \"scale\", \"scaleX\", \"scaleY\", \"scaleZ\", \"shouldAlwaysCompleteAnimation\", \"shouldDisableScalingTranslations\", \"speed\", \"startScroll\", \"targetElement\", \"translateX\", \"translateY\"];\nfunction getIsolatedParallaxProps(props) {\n var disabled = props.disabled,\n easing = props.easing,\n endScroll = props.endScroll,\n onChange = props.onChange,\n onEnter = props.onEnter,\n onExit = props.onExit,\n onProgressChange = props.onProgressChange,\n opacity = props.opacity,\n rootMargin = props.rootMargin,\n rotate = props.rotate,\n rotateX = props.rotateX,\n rotateY = props.rotateY,\n rotateZ = props.rotateZ,\n scale = props.scale,\n scaleX = props.scaleX,\n scaleY = props.scaleY,\n scaleZ = props.scaleZ,\n shouldAlwaysCompleteAnimation = props.shouldAlwaysCompleteAnimation,\n shouldDisableScalingTranslations = props.shouldDisableScalingTranslations,\n speed = props.speed,\n startScroll = props.startScroll,\n targetElement = props.targetElement,\n translateX = props.translateX,\n translateY = props.translateY,\n rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n var parallaxProps = removeUndefinedObjectKeys({\n disabled: disabled,\n easing: easing,\n endScroll: endScroll,\n onChange: onChange,\n onEnter: onEnter,\n onExit: onExit,\n onProgressChange: onProgressChange,\n opacity: opacity,\n rootMargin: rootMargin,\n rotate: rotate,\n rotateX: rotateX,\n rotateY: rotateY,\n rotateZ: rotateZ,\n scale: scale,\n scaleX: scaleX,\n scaleY: scaleY,\n scaleZ: scaleZ,\n shouldAlwaysCompleteAnimation: shouldAlwaysCompleteAnimation,\n shouldDisableScalingTranslations: shouldDisableScalingTranslations,\n speed: speed,\n startScroll: startScroll,\n targetElement: targetElement,\n translateX: translateX,\n translateY: translateY\n });\n return {\n parallaxProps: parallaxProps,\n rest: rest\n };\n}\n\nfunction useVerifyController(controller) {\n useEffect(function () {\n var isServer = typeof window === 'undefined'; // Make sure the provided controller is an instance of the Parallax Controller\n\n var isInstance = controller instanceof ParallaxController; // Throw if neither context or global is available\n\n if (!isServer && !controller && !isInstance) {\n throw new Error(\"Must wrap your application's components in a .\");\n }\n }, [controller]);\n}\n\nvar ParallaxContext = /*#__PURE__*/React.createContext(null);\n\nfunction useParallaxController() {\n var parallaxController = useContext(ParallaxContext);\n var isServer = typeof window === 'undefined';\n\n if (isServer) {\n return null;\n }\n\n if (!parallaxController) {\n throw new Error('Could not find `react-scroll-parallax` context value. Please ensure the component is wrapped in a ');\n }\n\n return parallaxController;\n}\n\nfunction useParallax(props) {\n var controller = useParallaxController();\n var ref = useRef(null);\n\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps;\n\n useVerifyController(controller);\n\n var _useState = useState(),\n element = _useState[0],\n setElement = _useState[1]; // create element\n\n\n useEffect(function () {\n var newElement;\n\n if (ref.current instanceof HTMLElement) {\n var options = {\n el: ref.current,\n props: parallaxProps\n };\n newElement = controller == null ? void 0 : controller.createElement(options);\n setElement(newElement);\n } else {\n throw new Error('You must assign the ref returned by the useParallax() hook to an HTML Element.');\n }\n\n return function () {\n if (newElement) {\n controller == null ? void 0 : controller.removeElementById(newElement.id);\n }\n };\n }, []); // update element\n\n useEffect(function () {\n if (element) {\n if (props.disabled) {\n controller == null ? void 0 : controller.resetElementStyles(element);\n controller == null ? void 0 : controller.updateElementPropsById(element.id, parallaxProps);\n } else {\n controller == null ? void 0 : controller.updateElementPropsById(element.id, parallaxProps);\n }\n }\n }, [props.disabled, props.easing, props.endScroll, props.onChange, props.onEnter, props.onExit, props.onProgressChange, props.opacity, props.rootMargin, props.rotate, props.rotateX, props.rotateY, props.rotateZ, props.scale, props.scaleX, props.scaleY, props.scaleZ, props.shouldAlwaysCompleteAnimation, props.shouldDisableScalingTranslations, props.speed, props.startScroll, props.targetElement, props.translateX, props.translateY]);\n return {\n ref: ref,\n controller: controller,\n element: element\n };\n}\n\nfunction Parallax(props) {\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps,\n rest = _getIsolatedParallaxP.rest;\n\n var _useParallax = useParallax(parallaxProps),\n ref = _useParallax.ref;\n\n return React.createElement(\"div\", Object.assign({\n ref: ref\n }, rest), props.children);\n}\n\nvar FALLBACK_RECT = {\n height: 0\n};\nfunction getExpandedStyle(layer) {\n if (Array.isArray(layer.translateY)) {\n var translateYStart = parseValueAndUnit(layer.translateY[0]);\n var translateYEnd = parseValueAndUnit(layer.translateY[1]);\n\n if (translateYStart.unit === 'px' && translateYEnd.unit === 'px') {\n return {\n top: Math.abs(translateYEnd.value) * -1 + \"px\",\n bottom: Math.abs(translateYStart.value) * -1 + \"px\"\n };\n }\n\n if (translateYStart.unit === '%' && translateYEnd.unit === '%') {\n var _layer$targetElement;\n\n var clientRect = ((_layer$targetElement = layer.targetElement) == null ? void 0 : _layer$targetElement.getBoundingClientRect()) || FALLBACK_RECT;\n var top = Math.abs(clientRect.height * 0.01 * translateYEnd.value) * -1;\n var bottom = Math.abs(clientRect.height * 0.01 * translateYStart.value) * -1;\n return {\n top: top + \"px\",\n bottom: bottom + \"px\"\n };\n }\n }\n\n if (layer.speed) {\n var speed = layer.speed || 0;\n return {\n top: Math.abs(speed) * 10 * -1 + 'px',\n bottom: Math.abs(speed) * 10 * -1 + 'px'\n };\n }\n\n return {};\n}\n\nfunction getImageStyle(layer) {\n return layer.image ? {\n backgroundImage: \"url(\" + layer.image + \")\",\n backgroundPosition: 'center',\n backgroundSize: 'cover'\n } : {};\n}\n\nvar _excluded$1 = [\"children\", \"disabled\", \"style\", \"expanded\", \"image\", \"testId\"];\nvar absoluteStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n};\nvar ParallaxBannerLayer = function ParallaxBannerLayer(props) {\n var _getIsolatedParallaxP = getIsolatedParallaxProps(props),\n parallaxProps = _getIsolatedParallaxP.parallaxProps,\n rest = _getIsolatedParallaxP.rest;\n\n var style = rest.style,\n _rest$expanded = rest.expanded,\n expanded = _rest$expanded === void 0 ? true : _rest$expanded,\n testId = rest.testId,\n divProps = _objectWithoutPropertiesLoose(rest, _excluded$1);\n\n var imageStyle = getImageStyle(props);\n var expandedStyle = expanded ? getExpandedStyle(props) : {};\n var parallax = useParallax(_extends({\n targetElement: props.targetElement,\n shouldDisableScalingTranslations: true\n }, parallaxProps));\n return React.createElement(\"div\", Object.assign({\n \"data-testid\": testId,\n ref: parallax.ref,\n style: _extends({}, imageStyle, absoluteStyle, expandedStyle, style)\n }, divProps), rest.children);\n};\n\nvar _excluded$2 = [\"disabled\", \"style\", \"layers\"];\nvar containerStyle = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%'\n};\nvar ParallaxBanner = function ParallaxBanner(props) {\n var _useState = useState(null),\n targetElement = _useState[0],\n setTargetElement = _useState[1];\n\n var containerRef = useRef(null);\n useEffect(function () {\n setTargetElement(containerRef.current);\n }, []);\n\n var rootStyle = props.style,\n _props$layers = props.layers,\n layers = _props$layers === void 0 ? [] : _props$layers,\n rootRest = _objectWithoutPropertiesLoose(props, _excluded$2);\n\n function renderLayers() {\n if (targetElement) {\n var shouldUseLayers = layers && layers.length > 0;\n\n if (shouldUseLayers) {\n return layers.map(function (layer, i) {\n return React.createElement(ParallaxBannerLayer, Object.assign({}, layer, {\n targetElement: targetElement,\n key: \"layer-\" + i,\n testId: \"layer-\" + i\n }));\n });\n }\n }\n\n return null;\n }\n\n function renderChildren() {\n if (targetElement) {\n return React.Children.map(props.children, function (child) {\n var item = child; // adds the targetElement prop to any ParallaxBannerLayer components\n\n if (item.type === ParallaxBannerLayer) {\n var clone = React.cloneElement(item, {\n targetElement: targetElement\n });\n return clone;\n }\n\n return child;\n });\n }\n\n return null;\n }\n\n return React.createElement(\"div\", Object.assign({\n ref: containerRef,\n style: _extends({}, containerStyle, rootStyle)\n }, rootRest), renderLayers(), renderChildren());\n};\n\nvar createController = function createController(options) {\n // Don't initialize on the server\n var isServer = typeof window === 'undefined';\n\n if (!isServer) {\n // Must not be the server so kick it off...\n return ParallaxController.init(options);\n }\n\n return null;\n};\n\nvar ParallaxProvider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(ParallaxProvider, _Component);\n\n function ParallaxProvider(props) {\n var _this;\n\n _this = _Component.call(this, props) || this;\n _this.controller = createController({\n scrollAxis: props.scrollAxis,\n scrollContainer: props.scrollContainer\n });\n return _this;\n }\n\n var _proto = ParallaxProvider.prototype;\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n if (prevProps.scrollContainer !== this.props.scrollContainer) {\n // @ts-ignore\n this.controller.updateScrollContainer(this.props.scrollContainer);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n // @ts-ignore\n this.controller = this.controller.destroy();\n };\n\n _proto.render = function render() {\n var children = this.props.children;\n return (// @ts-ignore\n React.createElement(ParallaxContext.Provider, {\n value: this.controller\n }, children)\n );\n };\n\n return ParallaxProvider;\n}(Component);\nParallaxProvider.defaultProps = {\n scrollAxis: ScrollAxis.vertical\n};\n\nexport { Parallax, ParallaxBanner, ParallaxContext, ParallaxProvider, useParallax, useParallaxController };\n//# sourceMappingURL=react-scroll-parallax.esm.js.map\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n","import defineProperty from './_define_property.mjs';\n\nexport default function _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}","function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\n\nexport default function _objectSpreadProps(target, source) {\n source = source != null ? source : {}\n if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(\n target,\n key,\n Object.getOwnPropertyDescriptor(source, key)\n );\n });\n }\n\n return target;\n}"],"names":["DEFAULT_IGNORE_ERRORS","InboundFilters","static","this","id","__init","name","constructor","_options","prototype","call","setupOnce","addGlobalEventProcessor","getCurrentHub","eventProcess","event","hub","self","getIntegration","client","getClient","clientOptions","getOptions","options","internalOptions","allowUrls","denyUrls","ignoreErrors","ignoreInternal","undefined","_mergeOptions","exception","values","type","e","_isSentryError","__SENTRY_DEBUG__","length","message","value","oO","_getPossibleEventMessages","some","pattern","_isIgnoredError","url","_getEventFilterUrl","_isDeniedUrl","_isAllowedUrl","_shouldDropEvent","frames","stacktrace","i","frame","filename","_getLastValidUrl","__initStatic","originalFunctionToString","FunctionToString","Function","toString","args","context","apply","installedIntegrations","filterDuplicates","integrations","reduce","acc","every","accIntegration","push","getIntegrationsToSetup","defaultIntegrations","userIntegrations","Array","isArray","filter","userIntegration","integrationsNames","map","alwaysLastToRun","indexOf","splice","SentryError","Error","super","Object","setPrototypeOf","DSN_REGEX","dsn","withPassword","host","path","pass","port","projectId","protocol","publicKey","dsnFromComponents","components","from","str","match","exec","lastPath","slice","split","join","pop","projectMatch","dsnFromString","forEach","component","isValidProtocol","isNaN","parseInt","validateDsn","createEnvelope","headers","items","addItemToEnvelope","envelope","newItem","forEachEnvelopeItem","callback","envelopeItem","envelopeItemType","encodeUTF8","input","textEncoder","TextEncoder","encode","serializeEnvelope","envHeaders","parts","JSON","stringify","append","next","item","itemHeaders","payload","Uint8Array","buffers","totalLength","buf","merged","offset","buffer","set","concatBuffers","createAttachmentEnvelopeItem","attachment","data","content_type","contentType","attachment_type","attachmentType","ITEM_TYPE_TO_DATA_CATEGORY_MAP","session","sessions","transaction","client_report","user_report","envelopeItemTypeToDataCategory","normalize","depth","Infinity","maxProperties","visit","err","ERROR","normalizeToSize","object","maxSize","normalized","encodeURI","utf8Length","key","memo","hasWeakSet","WeakSet","inner","obj","has","add","delete","memoBuilder","memoize","unmemoize","includes","is","stringified","_events","g","window","document","String","getPrototypeOf","stringifyValue","startsWith","replace","valueWithToJSON","toJSON","numAdded","visitable","visitKey","hasOwnProperty","visitValue","getBaseApiEndpoint","getEnvelopeEndpointWithUrlEncodedAuth","tunnelOrOptions","tunnel","sdkInfo","_metadata","sdk","_getIngestEndpoint","sentry_key","sentry_version","sentry_client","version","_encodedAuth","getSdkMetadataForEnvelopeHeader","metadata","createEventEnvelope","eventType","transactionSampling","sdkProcessingMetadata","method","samplingMethod","rate","sampleRate","packages","enhanceEventWithSdkInfo","envelopeHeaders","baggage","dynamicSamplingContext","event_id","sent_at","Date","toISOString","trace","createEventEnvelopeHeaders","sample_rates","ALREADY_SEEN_ERROR","BaseClient","_integrations","__init2","_integrationsInitialized","__init3","_numProcessing","__init4","_outcomes","_dsn","_transport","transport","recordDroppedEvent","bind","transportOptions","captureException","hint","scope","log","eventId","_process","eventFromException","then","_captureEvent","result","captureMessage","level","promisedEvent","eventFromMessage","captureEvent","originalException","captureSession","_isEnabled","release","sendSession","init","getDsn","getTransport","flush","timeout","_isClientDoneProcessing","clientFinished","transportFlushed","close","enabled","setupIntegrations","integrationIndex","integration","getIntegrationById","integrationId","_oO","sendEvent","env","attachments","_sendEnvelope","createSessionEnvelope","reason","category","sendClientReports","_updateSessionFromEvent","crashed","errored","exceptions","ex","mechanism","handled","sessionNonTerminal","status","errors","Number","resolve","ticked","interval","setInterval","clearInterval","_prepareEvent","normalizeDepth","normalizeMaxBreadth","prepared","timestamp","_applyClientOptions","_applyIntegrationsMetadata","finalScope","captureContext","update","getAttachments","applyToEvent","evt","_normalizeEvent","maxBreadth","breadcrumbs","b","user","contexts","extra","spans","span","environment","dist","maxValueLength","request","integrationsArray","keys","_processEvent","finalEvent","beforeSend","isTransaction","Math","random","__sentry__","rv","nullErr","_ensureBeforeSendRv","processedEvent","getSession","promise","send","_clearOutcomes","outcomes","quantity","exceptionFromError","stackParser","parseStackFrames","extractMessage","eventFromError","stack","popSize","framesToPop","reactMinifiedRegexp","test","getPopSize","error","eventFromUnknownInput","syntheticException","attachStacktrace","isUnhandledRejection","domException","eventFromString","tags","code","__serialized__","eventFromPlainObject","synthetic","validSeverityLevels","severityLevelFromString","BREADCRUMB_INTEGRATION_ID","Breadcrumbs","console","dom","fetch","history","sentry","xhr","_consoleBreadcrumb","_innerDomBreadcrumb","handlerData","target","keyAttrs","serializeAttribute","addBreadcrumb","global","_domBreadcrumb","_xhrBreadcrumb","_fetchBreadcrumb","_historyBreadcrumb","breadcrumb","arguments","logger","endTimestamp","__sentry_own_request__","status_code","body","__sentry_xhr__","fetchData","response","to","parsedLoc","location","href","parsedFrom","parsedTo","relative","cachedFetchImpl","getNativeFetchImplementation","fetchImpl","createElement","sandbox","hidden","head","appendChild","contentWindow","removeChild","globalObject","BrowserClient","addEventListener","visibilityState","_flushOutcomes","breadcrumbIntegration","platform","discarded_events","navigator","sendBeacon","supports","credentials","keepalive","sendReport","UNKNOWN_FUNCTION","createFrame","func","lineno","colno","function","in_app","chromeRegex","chromeEvalRegex","geckoREgex","geckoEvalRegex","winjsRegex","defaultStackLineParsers","line","subMatch","extractSafariExtensionDetails","defaultStackParser","isSafariExtension","isSafariWebExtension","ignoreOnError","shouldIgnoreOnError","ignoreNextOnError","setTimeout","wrap","fn","before","wrapper","__sentry_wrapped__","sentryWrapped","wrappedArguments","arg","addEventProcessor","property","getOwnPropertyDescriptor","configurable","defineProperty","get","DEFAULT_EVENT_TARGET","TryCatch","XMLHttpRequest","eventTarget","requestAnimationFrame","_wrapTimeFunction","_wrapRAF","_wrapXHR","eventTargetOption","_wrapEventTarget","original","originalCallback","handler","originalSend","prop","wrapOptions","originalFunction","proto","eventName","handleEvent","originalRemoveEventListener","wrappedEventHandler","originalEventHandler","GlobalHandlers","_installFunc","onerror","_installGlobalOnErrorHandler","onunhandledrejection","_installGlobalOnUnhandledRejectionHandler","stackTraceLimit","installFunc","getHubAndOptions","msg","column","ERROR_TYPES_RE","groups","_enhanceEventWithInitialFrame","_eventFromIncompleteOnError","addMechanismAndCapture","detail","ev","ev0","ev0s","ev0sf","LinkedErrors","_key","_limit","limit","parser","linkedErrors","_walkErrorTree","_handler","Dedupe","eventProcessor","currentEvent","previousEvent","currentMessage","previousMessage","_isSameFingerprint","_isSameStacktrace","_isSameMessageEvent","previousException","_getExceptionFromEvent","currentException","_isSameExceptionEvent","_previousEvent","currentFrames","_getFramesFromEvent","previousFrames","frameA","frameB","currentFingerprint","fingerprint","previousFingerprint","HttpContext","referrer","userAgent","Referer","makePromiseBuffer","remove","task","$","taskProducer","drain","reject","counter","capturedSetTimeout","clearTimeout","updateRateLimits","limits","statusCode","now","updatedRateLimits","rateLimitHeader","retryAfterHeader","trim","retryAfter","categories","headerDelay","delay","all","header","headerDate","parse","parseRetryAfterHeader","createTransport","makeRequest","bufferSize","rateLimits","filteredEnvelopeItems","envelopeItemDataCategory","disabledUntil","isRateLimited","filteredEnvelope","recordEnvelopeLoss","_","makeFetchTransport","nativeFetch","requestOptions","referrerPolicy","fetchOptions","makeXHRTransport","onreadystatechange","readyState","getResponseHeader","open","setRequestHeader","SENTRY_RELEASE","autoSessionTracking","clientClass","debug","warn","getScope","initialScope","bindClient","initAndBind","startSessionOnHub","startSessionTracking","startSession","ignoreDuration","SDK_VERSION","configureScope","withScope","DEFAULT_BREADCRUMBS","Hub","_stack","_version","getStackTop","isOlderThan","pushScope","getStack","popScope","_lastEventId","_withClient","lastEventId","beforeBreadcrumb","maxBreadcrumbs","mergedBreadcrumb","finalBreadcrumb","setUser","setTags","setExtras","extras","setTag","setExtra","setContext","run","oldHub","makeMain","startTransaction","customSamplingContext","_callExtensionMethod","traceHeaders","endSession","_sendSessionUpdate","layer","setSession","getUser","currentSession","shouldSendDefaultPii","Boolean","sendDefaultPii","getMainCarrier","__SENTRY__","extensions","carrier","registry","getHubFromCarrier","setHubOnCarrier","hasHubOnCarrier","activeDomain","domain","active","registryHubTopStack","_Oo","getHubFromActiveDomain","Scope","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","newScope","_level","_span","_session","_transactionName","_fingerprint","_requestSession","addScopeListener","_notifyScopeListeners","getRequestSession","setRequestSession","requestSession","setFingerprint","setLevel","setTransactionName","setSpan","getSpan","getTransaction","updatedScope","clear","maxCrumbs","min","clearBreadcrumbs","addAttachment","clearAttachments","getTraceContext","transactionName","_applyFingerprint","_notifyEventProcessors","getGlobalEventProcessors","setSDKProcessingMetadata","newData","processors","index","processor","final","concat","makeSession","startingTime","sid","started","duration","did","attrs","ip_address","ipAddress","user_agent","sessionToJSON","updateSession","email","username","closeSession","errorCallback","activeTransaction","setStatus","toTraceparent","sample","samplingContext","sampled","setMetadata","tracesSampler","parentSampled","tracesSampleRate","isValidSampleRate","op","_startTransaction","transactionContext","initSpanRecorder","_experiments","startIdleTransaction","idleTimeout","finalTimeout","onScope","addExtensionMethods","_addTracingExtensions","packageToIntegrationMapping","mongodb","module","Mongo","mongoose","mysql","Mysql","pg","Postgres","mappedPackages","moduleName","pkg","p","_autoloadDatabaseIntegrations","DEFAULT_IDLE_TIMEOUT","DEFAULT_FINAL_TIMEOUT","IdleTransactionSpanRecorder","_pushActivity","_popActivity","transactionSpanId","maxlen","spanId","finish","IdleTransaction","activities","_heartbeatCounter","_finished","_beforeFinishCallbacks","_idleHub","_idleTimeout","_finalTimeout","_onScope","clearActiveTransaction","_startIdleTimeout","spanRecorder","keepSpan","startTimestamp","registerBeforeFinishCallback","_pingHeartbeat","_cancelIdleTimeout","_idleTimeoutID","_beat","heartbeatString","_prevHeartbeatString","SpanRecorder","_maxlen","Span","traceId","substring","__init5","__init6","spanContext","parentSpanId","description","startChild","childSpan","setData","setHttpStatus","httpStatus","spanStatus","spanStatusfromHttpCode","isSuccess","sampledString","toContext","updateWithContext","parent_span_id","span_id","trace_id","start_timestamp","Transaction","_measurements","_hub","_name","_trimEnd","trimEnd","newName","source","setName","setMeasurement","unit","newMetadata","finishedSpans","s","prev","current","getBaggage","transaction_info","measurements","existingBaggage","finalBaggage","_populateBaggageWithSentryValues","public_key","sample_rate","toLocaleString","useGrouping","maximumFractionDigits","segment","user_segment","hasTracingEnabled","maybeOptions","getActiveTransaction","maybeHub","msToSec","time","BAGGAGE_HEADER_NAME","SENTRY_BAGGAGE_KEY_PREFIX_REGEX","createBaggage","initItems","baggageString","mutable","getSentryBaggageItems","isBaggageMutable","parseBaggageHeader","inputBaggageValue","includeThirdPartyEntries","entry","baggageObj","curr","val","baggageKey","decodeURIComponent","mergeAndSerializeBaggage","incomingBaggage","thirdPartyBaggageHeader","headerBaggage","thirdPartyHeaderBaggage","baggageEntry","encodeURIComponent","newVal","serializeBaggage","parseBaggageSetMutability","rawBaggageValue","sentryTraceHeader","isSentryBaggageEmpty","setBaggageImmutable","htmlTreeAsString","elem","currentElem","out","height","len","sepLength","nextStr","_htmlElementAsString","parentNode","reverse","el","className","classes","attr","tagName","toLowerCase","keyAttrPairs","keyAttr","getAttribute","keyAttrPair","allowedAttrs","getLocationHref","_nullishCoalesce","lhs","rhsFn","fallbackGlobalObject","getGlobalObject","getGlobalSingleton","creator","handlers","instrumented","instrument","originalConsoleMethod","triggerHandlers","instrumentConsole","triggerDOMHandler","globalDOMEventHandler","makeDOMEventHandler","originalAddEventListener","listener","__sentry_instrumentation_handlers__","handlerForType","refCount","instrumentDOM","xhrproto","originalOpen","xhrInfo","toUpperCase","onreadystatechangeHandler","readyStateArgs","instrumentXHR","originalFetch","getFetchMethod","getFetchUrl","instrumentFetch","oldOnPopState","onpopstate","historyReplacementFunction","originalHistoryFunction","lastHref","instrumentHistory","_oldOnErrorHandler","_oldOnUnhandledRejectionHandler","addInstrumentationHandler","fetchArgs","Request","debounceTimerID","lastCapturedEvent","globalListener","isContentEditable","shouldSkipDOMEvent","previous","shouldShortcircuitPreviousDebounce","objectToString","isError","wat","isInstanceOf","isBuiltin","ty","isErrorEvent","isDOMError","isDOMException","isString","isPrimitive","isPlainObject","isEvent","Event","isElement","Element","isRegExp","isThenable","isSyntheticEvent","base","_e","CONSOLE_LEVELS","consoleSandbox","originalConsole","wrappedLevels","originalWrappedFunc","__sentry_original__","makeLogger","enable","disable","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","parseUrl","query","fragment","getFirstException","getEventDescription","firstException","addExceptionTypeValue","addExceptionMechanism","newMechanism","currentMechanism","mergedData","stripUrlQueryAndFragment","urlPath","checkOrSetAlreadyCaught","__sentry_captured__","isNodeEnv","__SENTRY_BROWSER_BUNDLE__","process","dynamicRequire","mod","require","loadModule","cwd","fill","replacementFactory","wrapped","markFunctionWrapped","addNonEnumerableProperty","writable","getOriginalFunction","urlEncode","convertToPlainObject","getOwnProperties","newObj","serializeEventTarget","currentTarget","CustomEvent","extractedProps","extractExceptionKeysForMessage","maxLength","sort","includedKeys","serialized","dropUndefinedKeys","inputValue","_dropUndefinedKeys","Map","memoizationMap","memoVal","returnValue","createStackParser","parsers","sortedParsers","a","skipFirst","localStack","firstFrameFunction","lastFrameFunction","stripSentryFramesAndReverse","stackParserFromStackParserOptions","defaultFunctionName","getFunctionName","truncate","max","substr","safeJoin","delimiter","output","isMatchingPattern","supportsFetch","Headers","Response","isNativeFetch","supportsNativeFetch","doc","supportsHistory","chrome","isChromePackagedApp","app","runtime","hasHistoryApi","pushState","replaceState","States","resolvedSyncPromise","SyncPromise","rejectedSyncPromise","_state","PENDING","_handlers","executor","_resolve","_reject","onfulfilled","onrejected","_executeHandlers","catch","finally","onfinally","isRejected","_setResult","RESOLVED","REJECTED","state","_value","cachedHandlers","dateTimestampSource","nowSeconds","platformPerformance","performance","getNodePerformance","timeOrigin","getBrowserPerformance","timestampSource","dateTimestampInSeconds","timestampInSeconds","timestampWithMs","_browserPerformanceTimeOriginMode","browserPerformanceTimeOrigin","threshold","performanceNow","dateNow","timeOriginDelta","abs","timeOriginIsReliable","navigationStart","timing","navigationStartDelta","kSampleStepSize","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","LinearEasing","x","exports","mX1","mY1","mX2","mY2","sampleValues","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","__NEXT_P","initialState","dynamicGridParam","reducer","action","queryTagsKey","queryTagIds","paginationNo","paginationLimit","isFiltering","filterParams","StateContext","createContext","DispatchContext","ContextProvider","children","useReducer","dispatch","Provider","Component","pageProps","router","useRouter","useState","setKey","useEffect","asPath","k","scrollRestoration","Head","meta","content","ParallaxProvider","TRACEPARENT_REGEXP","RegExp","bindReporter","metric","reportAllChanges","prevValue","forceReport","delta","initMetric","entries","floor","observe","PerformanceObserver","supportedEntryTypes","po","l","getEntries","buffered","onHidden","cb","once","onHiddenOrPageHide","removeEventListener","firstHiddenTime","getVisibilityWatcher","timeStamp","reportedMetricIDs","isMeasurementValue","isFinite","_startChild","ctx","getBrowserPerformanceAPI","_lcpEntry","_clsEntry","_performanceCursor","startTrackingWebVitals","mark","onReport","report","sessionValue","sessionEntries","entryHandler","hadRecentInput","firstSessionEntry","lastSessionEntry","startTime","takeRecords","getCLS","visibilityWatcher","stopListening","disconnect","capture","getLCP","_trackLCP","processingStart","getFID","addPerformanceEntries","performanceEntries","responseStartTimestamp","requestStartTimestamp","entryType","_addPerformanceNavigationTiming","requestStart","responseEnd","responseStart","_addRequest","_addNavigationSpans","measureStartTimestamp","measureEndTimestamp","_addMeasureSpans","firstHidden","shouldRecord","resourceName","origin","initiatorType","transferSize","encodedBodySize","decodedBodySize","_addResourceSpans","connection","effectiveType","rtt","downlink","deviceMemory","hardwareConcurrency","_trackNavigator","oldValue","measurementTimestamp","normalizedValue","cls","measurementName","element","size","sources","node","_tagMetricInfo","eventEnd","end","start","defaultRequestInstrumentationOptions","traceFetch","traceXHR","tracingOrigins","instrumentOutgoingRequests","shouldCreateSpanForRequest","urlMap","defaultShouldCreateSpan","origins","shouldCreateSpan","__span","headerBaggageString","find","addTracingHeaders","fetchCallback","__sentry_xhr_span_id__","getRequestHeader","xhrCallback","DEFAULT_BROWSER_TRACING_OPTIONS","markBackgroundTransactions","routingInstrumentation","customStartTransaction","startTransactionOnPageLoad","startTransactionOnLocationChange","startingUrl","pathname","BrowserTracing","_emitOptionsWarning","_metricOptions","_reportAllChanges","_getCurrentHub","instrumentRouting","_createRouteTransaction","statusType","beforeNavigate","parentContextFromHeader","sentrytraceValue","getMetaContent","baggageValue","sentrytraceData","traceparent","matches","extractTraceparentData","extractTraceDataFromMetaTags","expandedContext","modifiedContext","finalContext","idleTransaction","metaName","querySelector","__SENTRY_TRACING__","DEFAULT_TAGS","prevTransactionName","nextRouterInstrumentation","startTransactionCb","pathIsRoute","routerPrototype","changeStateWrapper","originalChangeStateWrapper","as","newTransactionName","setNestedKey","keyPath","addIntegration","addIntegrationToArray","userIntegrationsFunc","userFinalIntegrations","addIntegrationToFunction","includesName","names","buildMetadata","defaultBrowserTracingIntegration","createClientIntegrations","filterTransactions","Sentry","SENTRY_DSN","NEXT_PUBLIC_SENTRY_DSN","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","array","noop","nextTick","title","browser","argv","versions","on","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","chdir","dir","umask","ValidCSSEffects","Units","RotationUnits","ScaleUnits","ScrollAxis","EasingPreset","Limits","properties","startX","startY","endX","endY","totalX","totalY","startMultiplierX","endMultiplierX","startMultiplierY","endMultiplierY","_extends","assign","Rect","rect","getBoundingClientRect","view","scrollContainer","scrollRect","top","right","left","bottom","offsetHeight","width","offsetWidth","rootMargin","_setRectWithRootMargin","totalRootY","totalRootX","VALID_UNITS","px","deg","turn","rad","defaultUnit","parseFloat","easingPresets","ease","easeIn","easeOut","easeInOut","easeInQuad","easeInCubic","easeInQuart","easeInQuint","easeInSine","easeInExpo","easeInCirc","easeOutQuad","easeOutCubic","easeOutQuart","easeOutQuint","easeOutSine","easeOutExpo","easeOutCirc","easeInOutQuad","easeInOutCubic","easeInOutQuart","easeInOutQuint","easeInOutSine","easeInOutExpo","easeInOutCirc","easeInBack","easeOutBack","easeInOutBack","createEasingFunction","easing","params","PARALLAX_EFFECTS","MAP_EFFECT_TO_DEFAULT_UNIT","speed","translateX","translateY","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","opacity","parseElementTransitionEffects","props","scrollAxis","parsedEffects","defaultValue","endSpeed","startParsed","endParsed","speedConfig","vertical","horizontal","_startParsed","_endParsed","getProgressAmount","totalDist","currentScroll","amount","scaleEffectByProgress","effect","progress","newMin","newMax","oldMin","oldMax","scaleBetween","TRANSFORM_EFFECTS","setElementStyles","effects","transform","scaledEffect","getTransformStyles","scaledOpacity","getOpacityStyles","style","resetStyles","getTranslateScalar","startTranslatePx","endTranslatePx","slow","totalDistTrue","getStartEndValueInPx","translate","elementSize","startScale","endScale","innerWidth","_startScale","_endScale","innerHeight","DEFAULT_VALUE","clamp","isInView","_setElementEasing","willChange","setWillChangeStyles","_proto","updateProps","nextProps","setCachedAttributes","scroll","targetElement","shouldScaleTranslateEffects","shouldDisableScalingTranslations","startScroll","endScroll","_setElementStyles","shouldAlwaysCompleteAnimation","_getStartEndValueInPx","startTranslateXPx","endTranslateXPx","_getStartEndValueInPx2","startTranslateYPx","endTranslateYPx","y","topBeginsInView","leftBeginsInView","bottomEndsInView","scrollHeight","rightEndsInView","scrollWidth","createLimitsWithTranslationsForRelativeElements","scaledEffects","effectsCopy","scaleTranslateEffectsForSlowerScroll","createLimitsForRelativeElements","_updateElementIsInView","nextIsInView","isFirstChange","onEnter","_setFinalProgress","onExit","finalProgress","round","_updateElementProgress","disabled","nextProgress","onProgressChange","onChange","updatePosition","isVertical","total","isElementInView","View","config","hasChanged","setSize","Scroll","dx","dy","setScroll","ParallaxController","_ref","_ref$scrollAxis","elements","_hasScrollContainer","viewEl","_this$_getScrollPosit","_getScrollPosition","_ticking","_supportsPassive","supportsPassiveOption","opts","testForPassiveScroll","_bindAllMethods","_addListeners","_addResizeObserver","_setViewSize","_this","_handleScroll","passive","_handleUpdateCache","_removeListeners","_this$_resizeObserver","_resizeObserver","_this2","observedEl","documentElement","ResizeObserver","scrollLeft","pageXOffset","scrollTop","pageYOffset","_this$_getScrollPosit2","nx","ny","_updateAllElements","updateCache","_temp","_this3","_updateElementPosition","_getViewParams","_width","_height","_scrollHeight","_scrollWidth","html","clientWidth","clientHeight","_checkIfViewHasChanged","getElements","newElement","removeElementById","updateElementPropsById","resetElementStyles","_this$_getScrollPosit3","updateScrollContainer","destroy","_setPrototypeOf","o","__proto__","_objectWithoutPropertiesLoose","excluded","sourceKeys","_excluded","getIsolatedParallaxProps","rest","parallaxProps","ParallaxContext","useParallax","controller","parallaxController","useContext","useParallaxController","ref","useRef","useVerifyController","_useState","setElement","HTMLElement","Parallax","_getIsolatedParallaxP","_Component","subClass","superClass","create","componentDidUpdate","prevProps","componentWillUnmount","render","defaultProps","_defineProperty","enumerable","_objectSpread","ownKeys","getOwnPropertySymbols","sym","_objectSpreadProps","getOwnPropertyDescriptors","defineProperties","enumerableOnly","symbols"],"source