{"version":3,"file":"bundle.min.js","sources":["../../types/src/loglevel.ts","../../types/src/severity.ts","../../types/src/status.ts","../../utils/src/polyfill.ts","../../utils/src/error.ts","../../utils/src/is.ts","../../utils/src/misc.ts","../../utils/src/logger.ts","../../utils/src/memo.ts","../../utils/src/object.ts","../../utils/src/promisebuffer.ts","../../utils/src/syncpromise.ts","../../utils/src/string.ts","../../utils/src/supports.ts","../../hub/src/span.ts","../../hub/src/scope.ts","../../hub/src/hub.ts","../../minimal/src/index.ts","../../core/src/dsn.ts","../../core/src/api.ts","../../core/src/integration.ts","../../core/src/baseclient.ts","../../core/src/integrations/functiontostring.ts","../../core/src/transports/noop.ts","../../core/src/basebackend.ts","../../core/src/integrations/inboundfilters.ts","../src/tracekit.ts","../src/parsers.ts","../src/transports/base.ts","../src/helpers.ts","../src/transports/fetch.ts","../src/transports/xhr.ts","../src/backend.ts","../src/version.ts","../src/client.ts","../src/integrations/globalhandlers.ts","../src/integrations/trycatch.ts","../src/integrations/breadcrumbs.ts","../src/integrations/linkederrors.ts","../src/integrations/useragent.ts","../src/sdk.ts","../src/index.ts","../../core/src/sdk.ts"],"sourcesContent":["/** Console logging verbosity for the SDK. */\nexport enum LogLevel {\n  /** No logs will be generated. */\n  None = 0,\n  /** Only SDK internal errors will be logged. */\n  Error = 1,\n  /** Information useful for debugging the SDK will be logged. */\n  Debug = 2,\n  /** All SDK actions will be logged. */\n  Verbose = 3,\n}\n","/** JSDoc */\nexport enum Severity {\n  /** JSDoc */\n  Fatal = 'fatal',\n  /** JSDoc */\n  Error = 'error',\n  /** JSDoc */\n  Warning = 'warning',\n  /** JSDoc */\n  Log = 'log',\n  /** JSDoc */\n  Info = 'info',\n  /** JSDoc */\n  Debug = 'debug',\n  /** JSDoc */\n  Critical = 'critical',\n}\n// tslint:disable:completed-docs\n// tslint:disable:no-unnecessary-qualifier no-namespace\nexport namespace Severity {\n  /**\n   * Converts a string-based level into a {@link Severity}.\n   *\n   * @param level string representation of Severity\n   * @returns Severity\n   */\n  export function fromString(level: string): Severity {\n    switch (level) {\n      case 'debug':\n        return Severity.Debug;\n      case 'info':\n        return Severity.Info;\n      case 'warn':\n      case 'warning':\n        return Severity.Warning;\n      case 'error':\n        return Severity.Error;\n      case 'fatal':\n        return Severity.Fatal;\n      case 'critical':\n        return Severity.Critical;\n      case 'log':\n      default:\n        return Severity.Log;\n    }\n  }\n}\n","/** The status of an event. */\nexport enum Status {\n  /** The status could not be determined. */\n  Unknown = 'unknown',\n  /** The event was skipped due to configuration or callbacks. */\n  Skipped = 'skipped',\n  /** The event was sent to Sentry successfully. */\n  Success = 'success',\n  /** The client is currently rate limited and will try again later. */\n  RateLimit = 'rate_limit',\n  /** The event could not be processed. */\n  Invalid = 'invalid',\n  /** A server-side error ocurred during submission. */\n  Failed = 'failed',\n}\n// tslint:disable:completed-docs\n// tslint:disable:no-unnecessary-qualifier no-namespace\nexport namespace Status {\n  /**\n   * Converts a HTTP status code into a {@link Status}.\n   *\n   * @param code The HTTP response status code.\n   * @returns The send status or {@link Status.Unknown}.\n   */\n  export function fromHttpCode(code: number): Status {\n    if (code >= 200 && code < 300) {\n      return Status.Success;\n    }\n\n    if (code === 429) {\n      return Status.RateLimit;\n    }\n\n    if (code >= 400 && code < 500) {\n      return Status.Invalid;\n    }\n\n    if (code >= 500) {\n      return Status.Failed;\n    }\n\n    return Status.Unknown;\n  }\n}\n","export const setPrototypeOf =\n  Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties); // tslint:disable-line:no-unbound-method\n\n/**\n * setPrototypeOf polyfill using __proto__\n */\nfunction setProtoOf<TTarget extends object, TProto>(obj: TTarget, proto: TProto): TTarget & TProto {\n  // @ts-ignore\n  obj.__proto__ = proto;\n  return obj as TTarget & TProto;\n}\n\n/**\n * setPrototypeOf polyfill using mixin\n */\nfunction mixinProperties<TTarget extends object, TProto>(obj: TTarget, proto: TProto): TTarget & TProto {\n  for (const prop in proto) {\n    if (!obj.hasOwnProperty(prop)) {\n      // @ts-ignore\n      obj[prop] = proto[prop];\n    }\n  }\n\n  return obj as TTarget & TProto;\n}\n","import { setPrototypeOf } from './polyfill';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n  /** Display name of this error instance. */\n  public name: string;\n\n  public constructor(public message: string) {\n    super(message);\n\n    // tslint:disable:no-unsafe-any\n    this.name = new.target.prototype.constructor.name;\n    setPrototypeOf(this, new.target.prototype);\n  }\n}\n","/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: any): boolean {\n  switch (Object.prototype.toString.call(wat)) {\n    case '[object Error]':\n      return true;\n    case '[object Exception]':\n      return true;\n    case '[object DOMException]':\n      return true;\n    default:\n      return wat instanceof Error;\n  }\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object ErrorEvent]';\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object DOMError]';\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object DOMException]';\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object String]';\n}\n\n/**\n * Checks whether given value's is a primitive (undefined, null, number, boolean, string)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: any): boolean {\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 */\nexport function isPlainObject(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object Object]';\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: any): boolean {\n  return Object.prototype.toString.call(wat) === '[object RegExp]';\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): boolean {\n  // tslint:disable:no-unsafe-any\n  return Boolean(wat && wat.then && typeof wat.then === 'function');\n  // tslint:enable:no-unsafe-any\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: any): boolean {\n  // tslint:disable-next-line:no-unsafe-any\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n","import { Event, Integration, Mechanism, WrappedFunction } from '@sentry/types';\n\n/** Internal */\ninterface SentryGlobal {\n  Sentry?: {\n    Integrations?: Integration[];\n  };\n  SENTRY_ENVIRONMENT?: string;\n  SENTRY_DSN?: string;\n  SENTRY_RELEASE?: {\n    id?: string;\n  };\n  __SENTRY__: {\n    globalEventProcessors: any;\n    hub: any;\n    logger: any;\n  };\n}\n\n/**\n * Requires a module which is protected _against bundler minification.\n *\n * @param request The module path to resolve\n */\nexport function dynamicRequire(mod: any, request: string): any {\n  // tslint:disable-next-line: no-unsafe-any\n  return mod.require(request);\n}\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nexport function isNodeEnv(): boolean {\n  // tslint:disable:strict-type-predicates\n  return Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n}\n\nconst fallbackGlobalObject = {};\n\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nexport function getGlobalObject<T>(): T & SentryGlobal {\n  return (isNodeEnv()\n    ? global\n    : typeof window !== 'undefined'\n    ? window\n    : typeof self !== 'undefined'\n    ? self\n    : fallbackGlobalObject) as T & SentryGlobal;\n}\n// tslint:enable:strict-type-predicates\n\n/**\n * Extended Window interface that allows for Crypto API usage in IE browsers\n */\ninterface MsCryptoWindow extends Window {\n  msCrypto?: Crypto;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n  const global = getGlobalObject() as MsCryptoWindow;\n  const crypto = global.crypto || global.msCrypto;\n\n  if (!(crypto === void 0) && crypto.getRandomValues) {\n    // Use window.crypto API if available\n    const arr = new Uint16Array(8);\n    crypto.getRandomValues(arr);\n\n    // set 4 in byte 7\n    // tslint:disable-next-line:no-bitwise\n    arr[3] = (arr[3] & 0xfff) | 0x4000;\n    // set 2 most significant bits of byte 9 to '10'\n    // tslint:disable-next-line:no-bitwise\n    arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n    const pad = (num: number): string => {\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    // tslint:disable-next-line:no-bitwise\n    const r = (Math.random() * 16) | 0;\n    // tslint:disable-next-line:no-bitwise\n    const 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 <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nexport function parseUrl(\n  url: string,\n): {\n  host?: string;\n  path?: string;\n  protocol?: string;\n  relative?: string;\n} {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n  if (event.message) {\n    return event.message;\n  }\n  if (event.exception && event.exception.values && event.exception.values[0]) {\n    const exception = event.exception.values[0];\n\n    if (exception.type && exception.value) {\n      return `${exception.type}: ${exception.value}`;\n    }\n    return exception.type || exception.value || event.event_id || '<unknown>';\n  }\n  return event.event_id || '<unknown>';\n}\n\n/** JSDoc */\ninterface ExtensibleConsole extends Console {\n  [key: string]: any;\n}\n\n/** JSDoc */\nexport function consoleSandbox(callback: () => any): any {\n  const global = getGlobalObject<Window>();\n  const levels = ['debug', 'info', 'warn', 'error', 'log', 'assert'];\n\n  if (!('console' in global)) {\n    return callback();\n  }\n\n  const originalConsole = global.console as ExtensibleConsole;\n  const wrappedLevels: { [key: string]: any } = {};\n\n  // Restore all wrapped console methods\n  levels.forEach(level => {\n    if (level in global.console && (originalConsole[level] as WrappedFunction).__sentry__) {\n      wrappedLevels[level] = (originalConsole[level] as WrappedFunction).__sentry_wrapped__;\n      originalConsole[level] = (originalConsole[level] as WrappedFunction).__sentry_original__;\n    }\n  });\n\n  // Perform callback manipulations\n  const result = callback();\n\n  // Revert restoration to wrapped state\n  Object.keys(wrappedLevels).forEach(level => {\n    originalConsole[level] = wrappedLevels[level];\n  });\n\n  return result;\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 * @param mechanism Mechanism of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(\n  event: Event,\n  value?: string,\n  type?: string,\n  mechanism: Mechanism = {\n    handled: true,\n    type: 'generic',\n  },\n): void {\n  event.exception = event.exception || {};\n  event.exception.values = event.exception.values || [];\n  event.exception.values[0] = event.exception.values[0] || {};\n  event.exception.values[0].value = event.exception.values[0].value || value || '';\n  event.exception.values[0].type = event.exception.values[0].type || type || 'Error';\n  event.exception.values[0].mechanism = event.exception.values[0].mechanism || mechanism;\n}\n","import { consoleSandbox, getGlobalObject } from './misc';\n\n// TODO: Implement different loggers for different environments\nconst global = getGlobalObject<Window | NodeJS.Global>();\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\n/** JSDoc */\nclass Logger {\n  /** JSDoc */\n  private _enabled: boolean;\n\n  /** JSDoc */\n  public constructor() {\n    this._enabled = false;\n  }\n\n  /** JSDoc */\n  public disable(): void {\n    this._enabled = false;\n  }\n\n  /** JSDoc */\n  public enable(): void {\n    this._enabled = true;\n  }\n\n  /** JSDoc */\n  public log(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.log(`${PREFIX}[Log]: ${args.join(' ')}`); // tslint:disable-line:no-console\n    });\n  }\n\n  /** JSDoc */\n  public warn(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.warn(`${PREFIX}[Warn]: ${args.join(' ')}`); // tslint:disable-line:no-console\n    });\n  }\n\n  /** JSDoc */\n  public error(...args: any[]): void {\n    if (!this._enabled) {\n      return;\n    }\n    consoleSandbox(() => {\n      global.console.error(`${PREFIX}[Error]: ${args.join(' ')}`); // tslint:disable-line:no-console\n    });\n  }\n}\n\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nglobal.__SENTRY__ = global.__SENTRY__ || {};\nconst logger = (global.__SENTRY__.logger as Logger) || (global.__SENTRY__.logger = new Logger());\n\nexport { logger };\n","// tslint:disable:no-unsafe-any\n/**\n * Memo class used for decycle json objects. Uses WeakSet if available otherwise array.\n */\nexport class Memo {\n  /** Determines if WeakSet is available */\n  private readonly _hasWeakSet: boolean;\n  /** Either WeakSet or Array */\n  private readonly _inner: any;\n\n  public constructor() {\n    // tslint:disable-next-line\n    this._hasWeakSet = typeof WeakSet === 'function';\n    this._inner = this._hasWeakSet ? new WeakSet() : [];\n  }\n\n  /**\n   * Sets obj to remember.\n   * @param obj Object to remember\n   */\n  public memoize(obj: any): boolean {\n    if (this._hasWeakSet) {\n      if (this._inner.has(obj)) {\n        return true;\n      }\n      this._inner.add(obj);\n      return false;\n    }\n    // tslint:disable-next-line:prefer-for-of\n    for (let i = 0; i < this._inner.length; i++) {\n      const value = this._inner[i];\n      if (value === obj) {\n        return true;\n      }\n    }\n    this._inner.push(obj);\n    return false;\n  }\n\n  /**\n   * Removes object from internal storage.\n   * @param obj Object to forget\n   */\n  public unmemoize(obj: any): void {\n    if (this._hasWeakSet) {\n      this._inner.delete(obj);\n    } else {\n      for (let i = 0; i < this._inner.length; i++) {\n        if (this._inner[i] === obj) {\n          this._inner.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }\n}\n","import { ExtendedError, WrappedFunction } from '@sentry/types';\n\nimport { isError, isPrimitive, isSyntheticEvent } from './is';\nimport { Memo } from './memo';\n\n/**\n * Wrap a given object method with a higher-order function\n *\n * @param source An object that contains a method to be wrapped.\n * @param name A name of method to be wrapped.\n * @param replacement A function that should be used to wrap a given method.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacement: (...args: any[]) => any): void {\n  if (!(name in source)) {\n    return;\n  }\n\n  const original = source[name] as () => any;\n  const wrapped = replacement(original) as WrappedFunction;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  // tslint:disable-next-line:strict-type-predicates\n  if (typeof wrapped === 'function') {\n    try {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __sentry__: {\n          enumerable: false,\n          value: true,\n        },\n        __sentry_original__: {\n          enumerable: false,\n          value: original,\n        },\n        __sentry_wrapped__: {\n          enumerable: false,\n          value: wrapped,\n        },\n      });\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 * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n  return Object.keys(object)\n    .map(\n      // tslint:disable-next-line:no-unsafe-any\n      key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`,\n    )\n    .join('&');\n}\n\n/**\n * Transforms Error object into an object literal with all it's attributes\n * attached to it.\n *\n * Based on: https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\n *\n * @param error An Error containing all relevant information\n * @returns An object with all error properties\n */\nfunction objectifyError(error: ExtendedError): object {\n  // These properties are implemented as magical getters and don't show up in `for-in` loop\n  const err: {\n    stack: string | undefined;\n    message: string;\n    name: string;\n    [key: string]: any;\n  } = {\n    message: error.message,\n    name: error.name,\n    stack: error.stack,\n  };\n\n  for (const i in error) {\n    if (Object.prototype.hasOwnProperty.call(error, i)) {\n      err[i] = error[i];\n    }\n  }\n\n  return err;\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n  // tslint:disable-next-line:no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\nfunction jsonSize(value: any): number {\n  return utf8Length(JSON.stringify(value));\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n  object: { [key: string]: any },\n  // Default Node.js REPL depth\n  depth: number = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize: number = 100 * 1024,\n): T {\n  const serialized = normalize(object, depth);\n\n  if (jsonSize(serialized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return serialized as T;\n}\n\n/** Transforms any input value into a string form, either primitive value or a type of the input */\nfunction serializeValue(value: any): any {\n  const type = Object.prototype.toString.call(value);\n\n  // Node.js REPL notation\n  if (typeof value === 'string') {\n    return value;\n  }\n  if (type === '[object Object]') {\n    return '[Object]';\n  }\n  if (type === '[object Array]') {\n    return '[Array]';\n  }\n\n  const normalized = normalizeValue(value);\n  return isPrimitive(normalized) ? normalized : type;\n}\n\n/**\n * normalizeValue()\n *\n * Takes unserializable input and make it serializable friendly\n *\n * - translates undefined/NaN values to \"[undefined]\"/\"[NaN]\" respectively,\n * - serializes Error objects\n * - filter global objects\n */\nfunction normalizeValue<T>(value: T, key?: any): T | string {\n  if (key === 'domain' && typeof value === 'object' && ((value as unknown) as { _events: any })._events) {\n    return '[Domain]';\n  }\n\n  if (key === 'domainEmitter') {\n    return '[DomainEmitter]';\n  }\n\n  if (typeof (global as any) !== 'undefined' && (value as unknown) === global) {\n    return '[Global]';\n  }\n\n  if (typeof (window as any) !== 'undefined' && (value as unknown) === window) {\n    return '[Window]';\n  }\n\n  if (typeof (document as any) !== 'undefined' && (value as unknown) === document) {\n    return '[Document]';\n  }\n\n  // tslint:disable-next-line:strict-type-predicates\n  if (typeof Event !== 'undefined' && value instanceof Event) {\n    return Object.getPrototypeOf(value) ? value.constructor.name : 'Event';\n  }\n\n  // React's SyntheticEvent thingy\n  if (isSyntheticEvent(value)) {\n    return '[SyntheticEvent]';\n  }\n\n  if (Number.isNaN((value as unknown) as number)) {\n    return '[NaN]';\n  }\n\n  if (value === void 0) {\n    return '[undefined]';\n  }\n\n  if (typeof value === 'function') {\n    return `[Function: ${value.name || '<unknown-function-name>'}]`;\n  }\n\n  return value;\n}\n\n/**\n * Walks an object to perform a normalization on it\n *\n * @param key of object that's walked in current iteration\n * @param value object to be walked\n * @param depth Optional number indicating how deep should walking be performed\n * @param memo Optional Memo class handling decycling\n */\nexport function walk(key: string, value: any, depth: number = +Infinity, memo: Memo = new Memo()): any {\n  // If we reach the maximum depth, serialize whatever has left\n  if (depth === 0) {\n    return serializeValue(value);\n  }\n\n  // If value implements `toJSON` method, call it and return early\n  // tslint:disable:no-unsafe-any\n  if (value !== null && value !== undefined && typeof value.toJSON === 'function') {\n    return value.toJSON();\n  }\n  // tslint:enable:no-unsafe-any\n\n  // If normalized value is a primitive, there are no branches left to walk, so we can just bail out, as theres no point in going down that branch any further\n  const normalized = normalizeValue(value, key);\n  if (isPrimitive(normalized)) {\n    return normalized;\n  }\n\n  // Create source that we will use for next itterations, either objectified error object (Error type with extracted keys:value pairs) or the input itself\n  const source = (isError(value) ? objectifyError(value as Error) : value) as {\n    [key: string]: any;\n  };\n\n  // Create an accumulator that will act as a parent for all future itterations of that branch\n  const acc = Array.isArray(value) ? [] : {};\n\n  // If we already walked that branch, bail out, as it's circular reference\n  if (memo.memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // Walk all keys of the source\n  for (const innerKey in source) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(source, innerKey)) {\n      continue;\n    }\n    // Recursively walk through all the child nodes\n    (acc as { [key: string]: any })[innerKey] = walk(innerKey, source[innerKey], depth - 1, memo);\n  }\n\n  // Once walked through all the branches, remove the parent from memo storage\n  memo.unmemoize(value);\n\n  // Return accumulated values\n  return acc;\n}\n\n/**\n * normalize()\n *\n * - Creates a copy to prevent original input mutation\n * - Skip non-enumerablers\n * - Calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format\n * - Translates known global objects/Classes to a string representations\n * - Takes care of Error objects serialization\n * - Optionally limit depth of final output\n */\nexport function normalize(input: any, depth?: number): any {\n  try {\n    // tslint:disable-next-line:no-unsafe-any\n    return JSON.parse(JSON.stringify(input, (key: string, value: any) => walk(key, value, depth)));\n  } catch (_oO) {\n    return '**non-serializable**';\n  }\n}\n","import { SentryError } from './error';\n\n/** A simple queue that holds promises. */\nexport class PromiseBuffer<T> {\n  public constructor(protected _limit?: number) {}\n\n  /** Internal set of queued Promises */\n  private readonly _buffer: Array<Promise<T>> = [];\n\n  /**\n   * Says if the buffer is ready to take more requests\n   */\n  public isReady(): boolean {\n    return this._limit === undefined || this.length() < this._limit;\n  }\n\n  /**\n   * Add a promise to the queue.\n   *\n   * @param task Can be any Promise<T>\n   * @returns The original promise.\n   */\n  public add(task: Promise<T>): Promise<T> {\n    if (!this.isReady()) {\n      return Promise.reject(new SentryError('Not adding Promise due to buffer limit reached.'));\n    }\n    if (this._buffer.indexOf(task) === -1) {\n      this._buffer.push(task);\n    }\n    task\n      .then(() => this.remove(task))\n      .catch(() =>\n        this.remove(task).catch(() => {\n          // We have to add this catch here otherwise we have an unhandledPromiseRejection\n          // because it's a new Promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Remove a promise to the queue.\n   *\n   * @param task Can be any Promise<T>\n   * @returns Removed promise.\n   */\n  public remove(task: Promise<T>): Promise<T> {\n    const removedTask = this._buffer.splice(this._buffer.indexOf(task), 1)[0];\n    return removedTask;\n  }\n\n  /**\n   * This function returns the number of unresolved promises in the queue.\n   */\n  public length(): number {\n    return this._buffer.length;\n  }\n\n  /**\n   * This will drain the whole queue, returns true if queue is empty or drained.\n   * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false.\n   *\n   * @param timeout Number in ms to wait until it resolves with false.\n   */\n  public drain(timeout?: number): Promise<boolean> {\n    return new Promise<boolean>(resolve => {\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n      Promise.all(this._buffer)\n        .then(() => {\n          clearTimeout(capturedSetTimeout);\n          resolve(true);\n        })\n        .catch(() => {\n          resolve(true);\n        });\n    });\n  }\n}\n","import { isThenable } from './is';\n\n/** SyncPromise internal states */\nenum States {\n  /** Pending */\n  PENDING = 'PENDING',\n  /** Resolved / OK */\n  RESOLVED = 'RESOLVED',\n  /** Rejected / Error */\n  REJECTED = 'REJECTED',\n}\n\n/** JSDoc */\ninterface Handler<T, U> {\n  onFail: HandlerOnFail<U>;\n  onSuccess: HandlerOnSuccess<T, U>;\n}\n\ntype HandlerOnSuccess<T, U = any> = (value: T) => U | Thenable<U>;\ntype HandlerOnFail<U = any> = (reason: any) => U | Thenable<U>;\n\n/** JSDoc */\ninterface Thenable<T> {\n  /** JSDoc */\n  then<U>(onSuccess?: HandlerOnSuccess<T, U>, onFail?: HandlerOnFail<U> | ((reason: any) => void)): Thenable<U>;\n}\n\ntype Resolve<R> = (value?: R | Thenable<R> | any) => void;\ntype Reject = (value?: any) => void;\n\n/** JSDoc */\nexport class SyncPromise<T> implements PromiseLike<T> {\n  /** JSDoc */\n  private _state: States = States.PENDING;\n  /** JSDoc */\n  private _handlers: Array<Handler<T, any>> = [];\n  /** JSDoc */\n  private _value: T | any;\n\n  public constructor(callback: (resolve: Resolve<T>, reject: Reject) => void) {\n    try {\n      callback(this._resolve, this._reject);\n    } catch (e) {\n      this._reject(e);\n    }\n  }\n\n  /** JSDoc */\n  private readonly _resolve = (value: T) => {\n    this._setResult(value, States.RESOLVED);\n  };\n\n  /** JSDoc */\n  private readonly _reject = (reason: any) => {\n    this._setResult(reason, States.REJECTED);\n  };\n\n  /** JSDoc */\n  private readonly _setResult = (value: T | any, state: States) => {\n    if (this._state !== States.PENDING) {\n      return;\n    }\n\n    if (isThenable(value)) {\n      (value as Thenable<T>).then(this._resolve, this._reject);\n      return;\n    }\n\n    this._value = value;\n    this._state = state;\n\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  private readonly _executeHandlers = () => {\n    if (this._state === States.PENDING) {\n      return;\n    }\n\n    if (this._state === States.REJECTED) {\n      // tslint:disable-next-line:no-unsafe-any\n      this._handlers.forEach(h => h.onFail && h.onFail(this._value));\n    } else {\n      // tslint:disable-next-line:no-unsafe-any\n      this._handlers.forEach(h => h.onSuccess && h.onSuccess(this._value));\n    }\n\n    this._handlers = [];\n    return;\n  };\n\n  /** JSDoc */\n  private readonly _attachHandler = (handler: Handler<T, any>) => {\n    this._handlers = this._handlers.concat(handler);\n    this._executeHandlers();\n  };\n\n  /** JSDoc */\n  public then<TResult1 = T, TResult2 = never>(\n    onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined,\n    onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined,\n  ): SyncPromise<TResult1 | TResult2> {\n    // public then<U>(onSuccess?: HandlerOnSuccess<T, U>, onFail?: HandlerOnFail<U>): SyncPromise<T | U> {\n    return new SyncPromise<TResult1 | TResult2>((resolve, reject) => {\n      this._attachHandler({\n        onFail: reason => {\n          if (!onrejected) {\n            reject(reason);\n            return;\n          }\n\n          try {\n            resolve(onrejected(reason));\n            return;\n          } catch (e) {\n            reject(e);\n            return;\n          }\n        },\n        onSuccess: result => {\n          if (!onfulfilled) {\n            resolve(result);\n            return;\n          }\n          try {\n            resolve(onfulfilled(result));\n            return;\n          } catch (e) {\n            reject(e);\n            return;\n          }\n        },\n      });\n    });\n  }\n\n  /** JSDoc */\n  public catch<U>(onFail: HandlerOnFail<U>): SyncPromise<U> {\n    // tslint:disable-next-line:no-unsafe-any\n    return this.then<U>((val: any) => val, onFail as any);\n  }\n\n  /** JSDoc */\n  public toString(): string {\n    return `[object SyncPromise]`;\n  }\n\n  /** JSDoc */\n  public static resolve<U>(value?: U | Thenable<U>): SyncPromise<U> {\n    return new SyncPromise<U>(resolve => {\n      resolve(value);\n    });\n  }\n\n  /** JSDoc */\n  public static reject<U>(reason?: any): SyncPromise<U> {\n    return new SyncPromise<U>((_, reject) => {\n      reject(reason);\n    });\n  }\n}\n","import { isRegExp } from './is';\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\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n  // tslint:disable-next-line:strict-type-predicates\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 */\n\nexport function snipLine(line: string, colno: number): string {\n  let newLine = line;\n  const ll = newLine.length;\n  if (ll <= 150) {\n    return newLine;\n  }\n  if (colno > ll) {\n    colno = ll; // tslint:disable-line:no-parameter-reassignment\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, ll);\n  if (end > ll - 5) {\n    end = ll;\n  }\n  if (end === ll) {\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 < ll) {\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 */\nexport function safeJoin(input: any[], delimiter?: string): string {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // tslint:disable-next-line:prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const 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/** Merges provided array of keys into */\nexport function keysToEventMessage(keys: string[], maxLength: number = 40): string {\n  if (!keys.length) {\n    return '[object has no keys]';\n  }\n\n  if (keys[0].length >= maxLength) {\n    return truncate(keys[0], maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return truncate(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * 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 */\nexport function isMatchingPattern(value: string, pattern: RegExp | string): boolean {\n  if (isRegExp(pattern)) {\n    return (pattern as RegExp).test(value);\n  }\n  if (typeof pattern === 'string') {\n    return value.includes(pattern);\n  }\n  return false;\n}\n","import { logger } from './logger';\nimport { getGlobalObject } from './misc';\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsErrorEvent(): boolean {\n  try {\n    // tslint:disable:no-unused-expression\n    new ErrorEvent('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMError(): boolean {\n  try {\n    // It really needs 1 argument, not 0.\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-ignore\n    // tslint:disable:no-unused-expression\n    new DOMError('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsDOMException(): boolean {\n  try {\n    // tslint:disable:no-unused-expression\n    new DOMException('');\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsFetch(): boolean {\n  if (!('fetch' in getGlobalObject<Window>())) {\n    return false;\n  }\n\n  try {\n    // tslint:disable-next-line:no-unused-expression\n    new Headers();\n    // tslint:disable-next-line:no-unused-expression\n    new Request('');\n    // tslint:disable-next-line:no-unused-expression\n    new Response();\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nexport function supportsNativeFetch(): boolean {\n  if (!supportsFetch()) {\n    return false;\n  }\n\n  const isNativeFunc = (func: Function) => func.toString().indexOf('native') !== -1;\n  const global = getGlobalObject<Window>();\n  let result = null;\n  const doc = global.document;\n  if (doc) {\n    const sandbox = doc.createElement('iframe');\n    sandbox.hidden = true;\n    try {\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow && sandbox.contentWindow.fetch) {\n        // tslint:disable-next-line no-unbound-method\n        result = isNativeFunc(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      logger.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  if (result === null) {\n    // tslint:disable-next-line no-unbound-method\n    result = isNativeFunc(global.fetch);\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nexport function supportsReportingObserver(): boolean {\n  // tslint:disable-next-line: no-unsafe-any\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 */\nexport function supportsReferrerPolicy(): boolean {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n  // https://caniuse.com/#feat=referrer-policy\n  // It doesn't. And it throw 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    // tslint:disable:no-unused-expression\n    new Request('_', {\n      referrerPolicy: 'origin' as ReferrerPolicy,\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 */\nexport function supportsHistory(): boolean {\n  // NOTE: in Chrome App environment, touching history.pushState, *even inside\n  //       a try/catch block*, will cause Chrome to output an error to console.error\n  // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n  const global = getGlobalObject<Window>();\n  const chrome = (global as any).chrome;\n  // tslint:disable-next-line:no-unsafe-any\n  const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n  const hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState;\n\n  return !isChromePackagedApp && hasHistoryApi;\n}\n","import { Span as SpanInterface } from '@sentry/types';\nimport { uuid4 } from '@sentry/utils';\n\nexport const TRACEPARENT_REGEXP = /^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$/;\n\n/**\n * Span containg all data about a span\n */\nexport class Span implements SpanInterface {\n  public constructor(\n    private readonly _traceId: string = uuid4(),\n    private readonly _spanId: string = uuid4().substring(16),\n    private _sampled?: boolean,\n    private _parent?: Span,\n  ) {}\n\n  /**\n   * Setter for parent\n   */\n  public setParent(parent: Span | undefined): this {\n    this._parent = parent;\n    return this;\n  }\n\n  /**\n   * Setter for sampled\n   */\n  public setSampled(sampled: boolean | undefined): this {\n    this._sampled = sampled;\n    return this;\n  }\n\n  /**\n   * Continues a trace\n   * @param traceparent Traceparent string\n   */\n  public static fromTraceparent(traceparent: string): Span | undefined {\n    const matches = traceparent.match(TRACEPARENT_REGEXP);\n    if (matches) {\n      let sampled;\n      if (matches[3] === '1') {\n        sampled = true;\n      } else if (matches[3] === '0') {\n        sampled = false;\n      }\n      const parent = new Span(matches[1], matches[2], sampled);\n      return new Span(matches[1], undefined, sampled, parent);\n    }\n    return undefined;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toTraceparent(): string {\n    let sampled = '';\n    if (this._sampled === true) {\n      sampled = '-1';\n    } else if (this._sampled === false) {\n      sampled = '-0';\n    }\n\n    return `${this._traceId}-${this._spanId}${sampled}`;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public toJSON(): object {\n    return {\n      parent: (this._parent && this._parent.toJSON()) || undefined,\n      sampled: this._sampled,\n      span_id: this._spanId,\n      trace_id: this._traceId,\n    };\n  }\n}\n","import { Breadcrumb, Event, EventHint, EventProcessor, Scope as ScopeInterface, Severity, User } from '@sentry/types';\nimport { getGlobalObject, isThenable, normalize, SyncPromise } from '@sentry/utils';\n\nimport { Span } from './span';\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n  /** Flag if notifiying is happening. */\n  protected _notifyingListeners: boolean = false;\n\n  /** Callback for client to receive scope changes. */\n  protected _scopeListeners: Array<(scope: Scope) => void> = [];\n\n  /** Callback list that will be called after {@link applyToEvent}. */\n  protected _eventProcessors: EventProcessor[] = [];\n\n  /** Array of breadcrumbs. */\n  protected _breadcrumbs: Breadcrumb[] = [];\n\n  /** User */\n  protected _user: User = {};\n\n  /** Tags */\n  protected _tags: { [key: string]: string } = {};\n\n  /** Extra */\n  protected _extra: { [key: string]: any } = {};\n\n  /** Contexts */\n  protected _context: { [key: string]: any } = {};\n\n  /** Fingerprint */\n  protected _fingerprint?: string[];\n\n  /** Severity */\n  protected _level?: Severity;\n\n  /** Transaction */\n  protected _transaction?: string;\n\n  /** Span */\n  protected _span?: Span;\n\n  /**\n   * Add internal on change listener. Used for sub SDKs that need to store the scope.\n   * @hidden\n   */\n  public addScopeListener(callback: (scope: Scope) => void): void {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addEventProcessor(callback: EventProcessor): this {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n  protected _notifyScopeListeners(): void {\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      setTimeout(() => {\n        this._scopeListeners.forEach(callback => {\n          callback(this);\n        });\n        this._notifyingListeners = false;\n      });\n    }\n  }\n\n  /**\n   * This will be called after {@link applyToEvent} is finished.\n   */\n  protected _notifyEventProcessors(\n    processors: EventProcessor[],\n    event: Event | null,\n    hint?: EventHint,\n    index: number = 0,\n  ): SyncPromise<Event | null> {\n    return new SyncPromise<Event | null>((resolve, reject) => {\n      const processor = processors[index];\n      // tslint:disable-next-line:strict-type-predicates\n      if (event === null || typeof processor !== 'function') {\n        resolve(event);\n      } else {\n        const result = processor({ ...event }, hint) as Event | null;\n        if (isThenable(result)) {\n          (result as Promise<Event | null>)\n            .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n            .catch(reject);\n        } else {\n          this._notifyEventProcessors(processors, result, hint, index + 1)\n            .then(resolve)\n            .catch(reject);\n        }\n      }\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): this {\n    this._user = normalize(user);\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: string }): this {\n    this._tags = {\n      ...this._tags,\n      ...normalize(tags),\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: string): this {\n    this._tags = { ...this._tags, [key]: normalize(value) };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extra: { [key: string]: any }): this {\n    this._extra = {\n      ...this._extra,\n      ...normalize(extra),\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: any): this {\n    this._extra = { ...this._extra, [key]: normalize(extra) };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setFingerprint(fingerprint: string[]): this {\n    this._fingerprint = normalize(fingerprint);\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setLevel(level: Severity): this {\n    this._level = normalize(level);\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTransaction(transaction?: string): this {\n    this._transaction = transaction;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(name: string, context: { [key: string]: any } | null): this {\n    this._context[name] = context ? normalize(context) : undefined;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setSpan(span?: Span): this {\n    this._span = span;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public startSpan(parentSpan?: Span): Span {\n    const span = new Span();\n    span.setParent(parentSpan);\n    this.setSpan(span);\n    return span;\n  }\n\n  /**\n   * Internal getter for Span, used in Hub.\n   * @hidden\n   */\n  public getSpan(): Span | undefined {\n    return this._span;\n  }\n\n  /**\n   * Inherit values from the parent scope.\n   * @param scope to clone.\n   */\n  public static clone(scope?: Scope): Scope {\n    const newScope = new Scope();\n    Object.assign(newScope, scope, {\n      _scopeListeners: [],\n    });\n    if (scope) {\n      newScope._breadcrumbs = [...scope._breadcrumbs];\n      newScope._tags = { ...scope._tags };\n      newScope._extra = { ...scope._extra };\n      newScope._context = { ...scope._context };\n      newScope._user = scope._user;\n      newScope._level = scope._level;\n      newScope._span = scope._span;\n      newScope._transaction = scope._transaction;\n      newScope._fingerprint = scope._fingerprint;\n      newScope._eventProcessors = [...scope._eventProcessors];\n    }\n    return newScope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clear(): this {\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._context = {};\n    this._level = undefined;\n    this._transaction = undefined;\n    this._fingerprint = undefined;\n    this._span = undefined;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n    const timestamp = new Date().getTime() / 1000;\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n\n    this._breadcrumbs =\n      maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0\n        ? [...this._breadcrumbs, normalize(mergedBreadcrumb)].slice(-maxBreadcrumbs)\n        : [...this._breadcrumbs, normalize(mergedBreadcrumb)];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public clearBreadcrumbs(): this {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\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  private _applyFingerprint(event: Event): void {\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   * 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 informartion about the original exception.\n   * @hidden\n   */\n  public applyToEvent(event: Event, hint?: EventHint): SyncPromise<Event | null> {\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._context && Object.keys(this._context).length) {\n      event.contexts = { ...this._context, ...event.contexts };\n    }\n    if (this._level) {\n      event.level = this._level;\n    }\n    if (this._transaction) {\n      event.transaction = this._transaction;\n    }\n    if (this._span) {\n      event.contexts = event.contexts || {};\n      event.contexts.trace = this._span;\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    return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n  }\n}\n\n/**\n * Retruns the global event processors.\n */\nfunction getGlobalEventProcessors(): EventProcessor[] {\n  const global = getGlobalObject<Window | NodeJS.Global>();\n  global.__SENTRY__ = global.__SENTRY__ || {};\n  global.__SENTRY__.globalEventProcessors = global.__SENTRY__.globalEventProcessors || [];\n  return global.__SENTRY__.globalEventProcessors;\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nexport function addGlobalEventProcessor(callback: EventProcessor): void {\n  getGlobalEventProcessors().push(callback);\n}\n","import {\n  Breadcrumb,\n  BreadcrumbHint,\n  Client,\n  Event,\n  EventHint,\n  Hub as HubInterface,\n  Integration,\n  IntegrationClass,\n  Severity,\n  User,\n} from '@sentry/types';\nimport { consoleSandbox, dynamicRequire, getGlobalObject, logger, uuid4 } from '@sentry/utils';\n\nimport { Carrier, Layer } from './interfaces';\nimport { Scope } from './scope';\n\ndeclare module 'domain' {\n  export let active: Domain;\n  /**\n   * Extension for domain interface\n   */\n  export interface Domain {\n    __SENTRY__?: Carrier;\n  }\n}\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be incresed when the global interface\n * changes a and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = 3;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 30;\n\n/**\n * Absolute maximum number of breadcrumbs added to an event. The\n * `maxBreadcrumbs` option cannot be higher than this value.\n */\nconst MAX_BREADCRUMBS = 100;\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n  /** Is a {@link Layer}[] containing the client and scope */\n  private readonly _stack: Layer[] = [];\n\n  /** Contains the last event id of a captured event.  */\n  private _lastEventId?: string;\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  public constructor(client?: Client, scope: Scope = new Scope(), private readonly _version: number = API_VERSION) {\n    this._stack.push({ client, scope });\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  private _invokeClient<M extends keyof Client>(method: M, ...args: any[]): void {\n    const top = this.getStackTop();\n    if (top && top.client && top.client[method]) {\n      (top.client as any)[method](...args, top.scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public isOlderThan(version: number): boolean {\n    return this._version < version;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public bindClient(client?: Client): void {\n    const top = this.getStackTop();\n    top.client = client;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public pushScope(): Scope {\n    // We want to clone the content of prev scope\n    const stack = this.getStack();\n    const parentScope = stack.length > 0 ? stack[stack.length - 1].scope : undefined;\n    const scope = Scope.clone(parentScope);\n    this.getStack().push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public popScope(): boolean {\n    return this.getStack().pop() !== undefined;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public withScope(callback: (scope: Scope) => void): void {\n    const scope = this.pushScope();\n    try {\n      callback(scope);\n    } finally {\n      this.popScope();\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getClient<C extends Client>(): C | undefined {\n    return this.getStackTop().client as C;\n  }\n\n  /** Returns the scope of the top stack. */\n  public getScope(): Scope | undefined {\n    return this.getStackTop().scope;\n  }\n\n  /** Returns the scope stack for domains or the process. */\n  public getStack(): Layer[] {\n    return this._stack;\n  }\n\n  /** Returns the topmost scope layer in the order domain > local > process. */\n  public getStackTop(): Layer {\n    return this._stack[this._stack.length - 1];\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureException(exception: any, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    let finalHint = hint;\n\n    // If there's no explicit hint provided, mimick the same thing that would happen\n    // in the minimal itself to create a consistent behavior.\n    // We don't do this in the client, as it's the lowest level API, and doing this,\n    // would prevent user from having full control over direct calls.\n    if (!hint) {\n      let syntheticException: Error;\n      try {\n        throw new Error('Sentry syntheticException');\n      } catch (exception) {\n        syntheticException = exception as Error;\n      }\n      finalHint = {\n        originalException: exception,\n        syntheticException,\n      };\n    }\n\n    this._invokeClient('captureException', exception, {\n      ...finalHint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(message: string, level?: Severity, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    let finalHint = hint;\n\n    // If there's no explicit hint provided, mimick the same thing that would happen\n    // in the minimal itself to create a consistent behavior.\n    // We don't do this in the client, as it's the lowest level API, and doing this,\n    // would prevent user from having full control over direct calls.\n    if (!hint) {\n      let syntheticException: Error;\n      try {\n        throw new Error(message);\n      } catch (exception) {\n        syntheticException = exception as Error;\n      }\n      finalHint = {\n        originalException: message,\n        syntheticException,\n      };\n    }\n\n    this._invokeClient('captureMessage', message, level, {\n      ...finalHint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint): string {\n    const eventId = (this._lastEventId = uuid4());\n    this._invokeClient('captureEvent', event, {\n      ...hint,\n      event_id: eventId,\n    });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public lastEventId(): string | undefined {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    const top = this.getStackTop();\n\n    if (!top.scope || !top.client) {\n      return;\n    }\n\n    const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n      (top.client.getOptions && top.client.getOptions()) || {};\n\n    if (maxBreadcrumbs <= 0) {\n      return;\n    }\n\n    const timestamp = new Date().getTime() / 1000;\n    const mergedBreadcrumb = { timestamp, ...breadcrumb };\n    const finalBreadcrumb = beforeBreadcrumb\n      ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n      : mergedBreadcrumb;\n\n    if (finalBreadcrumb === null) {\n      return;\n    }\n\n    top.scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS));\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setUser(user: User | null): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setUser(user);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTags(tags: { [key: string]: string }): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setTags(tags);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtras(extras: { [key: string]: any }): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setExtras(extras);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setTag(key: string, value: string): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setTag(key, value);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setExtra(key: string, extra: any): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setExtra(key, extra);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setContext(name: string, context: { [key: string]: any } | null): void {\n    const top = this.getStackTop();\n    if (!top.scope) {\n      return;\n    }\n    top.scope.setContext(name, context);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public configureScope(callback: (scope: Scope) => void): void {\n    const top = this.getStackTop();\n    if (top.scope && top.client) {\n      callback(top.scope);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public run(callback: (hub: Hub) => void): void {\n    const oldHub = makeMain(this);\n    try {\n      callback(this);\n    } finally {\n      makeMain(oldHub);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    const client = this.getClient();\n    if (!client) {\n      return null;\n    }\n    try {\n      return client.getIntegration(integration);\n    } catch (_oO) {\n      logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n      return null;\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public traceHeaders(): { [key: string]: string } {\n    const top = this.getStackTop();\n    if (top.scope && top.client) {\n      const span = top.scope.getSpan();\n      if (span) {\n        return {\n          'sentry-trace': span.toTraceparent(),\n        };\n      }\n    }\n    return {};\n  }\n}\n\n/** Returns the global shim registry. */\nexport function getMainCarrier(): Carrier {\n  const carrier = getGlobalObject();\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {\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 */\nexport function makeMain(hub: Hub): Hub {\n  const registry = getMainCarrier();\n  const 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 */\nexport function getCurrentHub(): Hub {\n  // Get main carrier (global for every environment)\n  const 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\n  try {\n    // We need to use `dynamicRequire` because `require` on it's own will be optimized by webpack.\n    // We do not want this to happen, we need to try to `require` the domain node module and fail if we are in browser\n    // for example so we do not have to shim it and use `getCurrentHub` universally.\n    const domain = dynamicRequire(module, 'domain');\n    const activeDomain = domain.active;\n\n    // If there 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 its an old API, assign a new one\n    if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n      const 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: Carrier): boolean {\n  if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n    return true;\n  }\n  return false;\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 */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n  if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n    return carrier.__SENTRY__.hub;\n  }\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n  carrier.__SENTRY__.hub = new Hub();\n  return carrier.__SENTRY__.hub;\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 */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n  if (!carrier) {\n    return false;\n  }\n  carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n  carrier.__SENTRY__.hub = hub;\n  return true;\n}\n","import { getCurrentHub, Hub, Scope } from '@sentry/hub';\nimport { Breadcrumb, Event, Severity, User } from '@sentry/types';\n\n/**\n * This calls a function on the current hub.\n * @param method function to call on hub.\n * @param args to pass to function.\n */\nfunction callOnHub<T>(method: string, ...args: any[]): T {\n  const hub = getCurrentHub();\n  if (hub && hub[method as keyof Hub]) {\n    // tslint:disable-next-line:no-unsafe-any\n    return (hub[method as keyof Hub] as any)(...args);\n  }\n  throw new Error(`No hub defined or ${method} was not found on the hub, please open a bug report.`);\n}\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @returns The generated eventId.\n */\nexport function captureException(exception: any): string {\n  let syntheticException: Error;\n  try {\n    throw new Error('Sentry syntheticException');\n  } catch (exception) {\n    syntheticException = exception as Error;\n  }\n  return callOnHub('captureException', exception, {\n    originalException: exception,\n    syntheticException,\n  });\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 level Define the level of the message.\n * @returns The generated eventId.\n */\nexport function captureMessage(message: string, level?: Severity): string {\n  let syntheticException: Error;\n  try {\n    throw new Error(message);\n  } catch (exception) {\n    syntheticException = exception as Error;\n  }\n  return callOnHub('captureMessage', message, level, {\n    originalException: message,\n    syntheticException,\n  });\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 */\nexport function captureEvent(event: Event): string {\n  return callOnHub('captureEvent', event);\n}\n\n/**\n * Callback to set context information onto the scope.\n * @param callback Callback function that receives Scope.\n */\nexport function configureScope(callback: (scope: Scope) => void): void {\n  callOnHub<void>('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 */\nexport function addBreadcrumb(breadcrumb: Breadcrumb): void {\n  callOnHub<void>('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 normailzed.\n */\nexport function setContext(name: string, context: { [key: string]: any } | null): void {\n  callOnHub<void>('setContext', name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: { [key: string]: any }): void {\n  callOnHub<void>('setExtras', extras);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: string }): void {\n  callOnHub<void>('setTags', tags);\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 normailzed.\n */\n\nexport function setExtra(key: string, extra: any): void {\n  callOnHub<void>('setExtra', key, extra);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n * @param key String key of tag\n * @param value String value of tag\n */\nexport function setTag(key: string, value: string): void {\n  callOnHub<void>('setTag', key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n  callOnHub<void>('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 */\nexport function withScope(callback: (scope: Scope) => void): void {\n  callOnHub<void>('withScope', callback);\n}\n\n/**\n * Calls a function on the latest client. Use this with caution, it's meant as\n * in \"internal\" helper so we don't need to expose every possible function in\n * the shim. It is not guaranteed that the client actually implements the\n * function.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/fontend.\n */\nexport function _callOnClient(method: string, ...args: any[]): void {\n  callOnHub<void>('_invokeClient', method, ...args);\n}\n","import { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\nimport { SentryError } from '@sentry/utils';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+))?@)([\\w\\.-]+)(?::(\\d+))?\\/(.+)/;\n\n/** Error message */\nconst ERROR_MESSAGE = 'Invalid Dsn';\n\n/** The Sentry Dsn, identifying a Sentry instance and project. */\nexport class Dsn implements DsnComponents {\n  /** Protocol used to connect to Sentry. */\n  public protocol!: DsnProtocol;\n  /** Public authorization key. */\n  public user!: string;\n  /** private _authorization key (deprecated, optional). */\n  public pass!: string;\n  /** Hostname of the Sentry instance. */\n  public host!: string;\n  /** Port of the Sentry instance. */\n  public port!: string;\n  /** Path */\n  public path!: string;\n  /** Project ID */\n  public projectId!: string;\n\n  /** Creates a new Dsn component */\n  public constructor(from: DsnLike) {\n    if (typeof from === 'string') {\n      this._fromString(from);\n    } else {\n      this._fromComponents(from);\n    }\n\n    this._validate();\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   */\n  public toString(withPassword: boolean = false): string {\n    // tslint:disable-next-line:no-this-assignment\n    const { host, path, pass, port, projectId, protocol, user } = this;\n    return (\n      `${protocol}://${user}${withPassword && pass ? `:${pass}` : ''}` +\n      `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n    );\n  }\n\n  /** Parses a string into this Dsn. */\n  private _fromString(str: string): void {\n    const match = DSN_REGEX.exec(str);\n    if (!match) {\n      throw new SentryError(ERROR_MESSAGE);\n    }\n\n    const [protocol, user, pass = '', host, port = '', lastPath] = match.slice(1);\n    let path = '';\n    let projectId = lastPath;\n    const split = projectId.split('/');\n    if (split.length > 1) {\n      path = split.slice(0, -1).join('/');\n      projectId = split.pop() as string;\n    }\n    Object.assign(this, { host, pass, path, projectId, port, protocol, user });\n  }\n\n  /** Maps Dsn components into this instance. */\n  private _fromComponents(components: DsnComponents): void {\n    this.protocol = components.protocol;\n    this.user = components.user;\n    this.pass = components.pass || '';\n    this.host = components.host;\n    this.port = components.port || '';\n    this.path = components.path || '';\n    this.projectId = components.projectId;\n  }\n\n  /** Validates this Dsn and throws on error. */\n  private _validate(): void {\n    ['protocol', 'user', 'host', 'projectId'].forEach(component => {\n      if (!this[component as keyof DsnComponents]) {\n        throw new SentryError(ERROR_MESSAGE);\n      }\n    });\n\n    if (this.protocol !== 'http' && this.protocol !== 'https') {\n      throw new SentryError(ERROR_MESSAGE);\n    }\n\n    if (this.port && Number.isNaN(parseInt(this.port, 10))) {\n      throw new SentryError(ERROR_MESSAGE);\n    }\n  }\n}\n","import { DsnLike } from '@sentry/types';\nimport { urlEncode } from '@sentry/utils';\n\nimport { Dsn } from './dsn';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Helper class to provide urls to different Sentry endpoints. */\nexport class API {\n  /** The internally used Dsn object. */\n  private readonly _dsnObject: Dsn;\n  /** Create a new instance of API */\n  public constructor(public dsn: DsnLike) {\n    this._dsnObject = new Dsn(dsn);\n  }\n\n  /** Returns the Dsn object. */\n  public getDsn(): Dsn {\n    return this._dsnObject;\n  }\n\n  /** Returns a string with auth headers in the url to the store endpoint. */\n  public getStoreEndpoint(): string {\n    return `${this._getBaseUrl()}${this.getStoreEndpointPath()}`;\n  }\n\n  /** Returns the store endpoint with auth added in url encoded. */\n  public getStoreEndpointWithUrlEncodedAuth(): string {\n    const dsn = this._dsnObject;\n    const auth = {\n      sentry_key: dsn.user,\n      sentry_version: SENTRY_API_VERSION,\n    };\n    // Auth is intentionally sent as part of query string (NOT as custom HTTP header)\n    // to avoid preflight CORS requests\n    return `${this.getStoreEndpoint()}?${urlEncode(auth)}`;\n  }\n\n  /** Returns the base path of the url including the port. */\n  private _getBaseUrl(): string {\n    const dsn = this._dsnObject;\n    const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n    const port = dsn.port ? `:${dsn.port}` : '';\n    return `${protocol}//${dsn.host}${port}`;\n  }\n\n  /** Returns only the path component for the store endpoint. */\n  public getStoreEndpointPath(): string {\n    const dsn = this._dsnObject;\n    return `${dsn.path ? `/${dsn.path}` : ''}/api/${dsn.projectId}/store/`;\n  }\n\n  /** Returns an object that can be used in request headers. */\n  public getRequestHeaders(clientName: string, clientVersion: string): { [key: string]: string } {\n    const dsn = this._dsnObject;\n    const header = [`Sentry sentry_version=${SENTRY_API_VERSION}`];\n    header.push(`sentry_timestamp=${new Date().getTime()}`);\n    header.push(`sentry_client=${clientName}/${clientVersion}`);\n    header.push(`sentry_key=${dsn.user}`);\n    if (dsn.pass) {\n      header.push(`sentry_secret=${dsn.pass}`);\n    }\n    return {\n      'Content-Type': 'application/json',\n      'X-Sentry-Auth': header.join(', '),\n    };\n  }\n\n  /** Returns the url to the report dialog endpoint. */\n  public getReportDialogEndpoint(\n    dialogOptions: {\n      [key: string]: any;\n      user?: { name?: string; email?: string };\n    } = {},\n  ): string {\n    const dsn = this._dsnObject;\n    const endpoint = `${this._getBaseUrl()}${dsn.path ? `/${dsn.path}` : ''}/api/embed/error-page/`;\n\n    const encodedOptions = [];\n    encodedOptions.push(`dsn=${dsn.toString()}`);\n    for (const key in dialogOptions) {\n      if (key === 'user') {\n        if (!dialogOptions.user) {\n          continue;\n        }\n        if (dialogOptions.user.name) {\n          encodedOptions.push(`name=${encodeURIComponent(dialogOptions.user.name)}`);\n        }\n        if (dialogOptions.user.email) {\n          encodedOptions.push(`email=${encodeURIComponent(dialogOptions.user.email)}`);\n        }\n      } else {\n        encodedOptions.push(`${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`);\n      }\n    }\n    if (encodedOptions.length) {\n      return `${endpoint}?${encodedOptions.join('&')}`;\n    }\n\n    return endpoint;\n  }\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { Integration, Options } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport interface IntegrationIndex {\n  [key: string]: Integration;\n}\n\n/** Gets integration to install */\nexport function getIntegrationsToSetup(options: Options): Integration[] {\n  const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || [];\n  const userIntegrations = options.integrations;\n  let integrations: Integration[] = [];\n  if (Array.isArray(userIntegrations)) {\n    const userIntegrationsNames = userIntegrations.map(i => i.name);\n    const pickedIntegrationsNames: string[] = [];\n\n    // Leave only unique default integrations, that were not overridden with provided user integrations\n    defaultIntegrations.forEach(defaultIntegration => {\n      if (\n        userIntegrationsNames.indexOf(defaultIntegration.name) === -1 &&\n        pickedIntegrationsNames.indexOf(defaultIntegration.name) === -1\n      ) {\n        integrations.push(defaultIntegration);\n        pickedIntegrationsNames.push(defaultIntegration.name);\n      }\n    });\n\n    // Don't add same user integration twice\n    userIntegrations.forEach(userIntegration => {\n      if (pickedIntegrationsNames.indexOf(userIntegration.name) === -1) {\n        integrations.push(userIntegration);\n        pickedIntegrationsNames.push(userIntegration.name);\n      }\n    });\n  } else if (typeof userIntegrations === 'function') {\n    integrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(integrations) ? integrations : [integrations];\n  } else {\n    return [...defaultIntegrations];\n  }\n\n  return integrations;\n}\n\n/** Setup given integration */\nexport function setupIntegration(integration: Integration): void {\n  if (installedIntegrations.indexOf(integration.name) !== -1) {\n    return;\n  }\n  integration.setupOnce(addGlobalEventProcessor, getCurrentHub);\n  installedIntegrations.push(integration.name);\n  logger.log(`Integration installed: ${integration.name}`);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations<O extends Options>(options: O): IntegrationIndex {\n  const integrations: IntegrationIndex = {};\n  getIntegrationsToSetup(options).forEach(integration => {\n    integrations[integration.name] = integration;\n    setupIntegration(integration);\n  });\n  return integrations;\n}\n","import { Scope } from '@sentry/hub';\nimport { Client, Event, EventHint, Integration, IntegrationClass, Options, SdkInfo, Severity } from '@sentry/types';\nimport { isPrimitive, isThenable, logger, SyncPromise, truncate, uuid4 } from '@sentry/utils';\n\nimport { Backend, BackendClass } from './basebackend';\nimport { Dsn } from './dsn';\nimport { IntegrationIndex, setupIntegrations } from './integration';\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding backend constructor and options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}. Also, the Backend instance is available via\n * {@link Client.getBackend}.\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 via the backend, 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<NodeBackend, NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(NodeBackend, options);\n *   }\n *\n *   // ...\n * }\n */\nexport abstract class BaseClient<B extends Backend, O extends Options> implements Client<O> {\n  /**\n   * The backend used to physically interact in the enviornment. Usually, this\n   * will correspond to the client. When composing SDKs, however, the Backend\n   * from the root SDK will be used.\n   */\n  protected readonly _backend: B;\n\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n  protected readonly _dsn?: Dsn;\n\n  /** Array of used integrations. */\n  protected readonly _integrations: IntegrationIndex;\n\n  /** Is the client still processing a call? */\n  protected _processing: boolean = false;\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param backendClass A constructor function to create the backend.\n   * @param options Options for the client.\n   */\n  protected constructor(backendClass: BackendClass<B, O>, options: O) {\n    this._backend = new backendClass(options);\n    this._options = options;\n\n    if (options.dsn) {\n      this._dsn = new Dsn(options.dsn);\n    }\n\n    this._integrations = setupIntegrations(this._options);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n    this._processing = true;\n\n    this._getBackend()\n      .eventFromException(exception, hint)\n      .then(event => this._processEvent(event, hint, scope))\n      .then(finalEvent => {\n        // We need to check for finalEvent in case beforeSend returned null\n        eventId = finalEvent && finalEvent.event_id;\n        this._processing = false;\n      })\n      .catch(reason => {\n        logger.error(reason);\n        this._processing = false;\n      });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureMessage(message: string, level?: Severity, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n\n    this._processing = true;\n\n    const promisedEvent = isPrimitive(message)\n      ? this._getBackend().eventFromMessage(`${message}`, level, hint)\n      : this._getBackend().eventFromException(message, hint);\n\n    promisedEvent\n      .then(event => this._processEvent(event, hint, scope))\n      .then(finalEvent => {\n        // We need to check for finalEvent in case beforeSend returned null\n        eventId = finalEvent && finalEvent.event_id;\n        this._processing = false;\n      })\n      .catch(reason => {\n        logger.error(reason);\n        this._processing = false;\n      });\n\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined {\n    let eventId: string | undefined = hint && hint.event_id;\n    this._processing = true;\n\n    this._processEvent(event, hint, scope)\n      .then(finalEvent => {\n        // We need to check for finalEvent in case beforeSend returned null\n        eventId = finalEvent && finalEvent.event_id;\n        this._processing = false;\n      })\n      .catch(reason => {\n        logger.error(reason);\n        this._processing = false;\n      });\n    return eventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getDsn(): Dsn | undefined {\n    return this._dsn;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getOptions(): O {\n    return this._options;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public flush(timeout?: number): Promise<boolean> {\n    return this._isClientProcessing(timeout).then(status => {\n      clearInterval(status.interval);\n      return this._getBackend()\n        .getTransport()\n        .close(timeout)\n        .then(transportFlushed => status.ready && transportFlushed);\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): Promise<boolean> {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      return result;\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegrations(): IntegrationIndex {\n    return this._integrations || {};\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n    try {\n      return (this._integrations[integration.id] as T) || null;\n    } catch (_oO) {\n      logger.warn(`Cannot retrieve integration ${integration.id} from the current Client`);\n      return null;\n    }\n  }\n\n  /** Waits for the client to be done with processing. */\n  protected _isClientProcessing(timeout?: number): Promise<{ ready: boolean; interval: number }> {\n    return new Promise<{ ready: boolean; interval: number }>(resolve => {\n      let ticked: number = 0;\n      const tick: number = 1;\n\n      let interval = 0;\n      clearInterval(interval);\n\n      interval = (setInterval(() => {\n        if (!this._processing) {\n          resolve({\n            interval,\n            ready: true,\n          });\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            resolve({\n              interval,\n              ready: false,\n            });\n          }\n        }\n      }, tick) as unknown) as number;\n    });\n  }\n\n  /** Returns the current backend. */\n  protected _getBackend(): B {\n    return this._backend;\n  }\n\n  /** Determines whether this SDK is enabled and a valid Dsn is present. */\n  protected _isEnabled(): boolean {\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 informartion about the original exception.\n   * @param scope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n  protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise<Event | null> {\n    const { environment, release, dist, maxValueLength = 250 } = this.getOptions();\n\n    const prepared: Event = { ...event };\n    if (prepared.environment === undefined && environment !== undefined) {\n      prepared.environment = environment;\n    }\n    if (prepared.release === undefined && release !== undefined) {\n      prepared.release = release;\n    }\n\n    if (prepared.dist === undefined && dist !== undefined) {\n      prepared.dist = dist;\n    }\n\n    if (prepared.message) {\n      prepared.message = truncate(prepared.message, maxValueLength);\n    }\n\n    const exception = prepared.exception && prepared.exception.values && prepared.exception.values[0];\n    if (exception && exception.value) {\n      exception.value = truncate(exception.value, maxValueLength);\n    }\n\n    const request = prepared.request;\n    if (request && request.url) {\n      request.url = truncate(request.url, maxValueLength);\n    }\n\n    if (prepared.event_id === undefined) {\n      prepared.event_id = uuid4();\n    }\n\n    this._addIntegrations(prepared.sdk);\n\n    // We prepare the result here with a resolved Event.\n    let result = SyncPromise.resolve<Event | null>(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 (scope) {\n      // In case we have a hub we reassign it.\n      result = scope.applyToEvent(prepared, hint);\n    }\n\n    return result;\n  }\n\n  /**\n   * This function adds all used integrations to the SDK info in the event.\n   * @param sdkInfo The sdkInfo of the event that will be filled with all integrations.\n   */\n  protected _addIntegrations(sdkInfo?: SdkInfo): void {\n    const integrationsArray = Object.keys(this._integrations);\n    if (sdkInfo && integrationsArray.length > 0) {\n      sdkInfo.integrations = integrationsArray;\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 informartion 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  protected _processEvent(event: Event, hint?: EventHint, scope?: Scope): SyncPromise<Event> {\n    const { beforeSend, sampleRate } = this.getOptions();\n\n    if (!this._isEnabled()) {\n      return SyncPromise.reject('SDK not enabled, will not send event.');\n    }\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    if (typeof sampleRate === 'number' && Math.random() > sampleRate) {\n      return SyncPromise.reject('This event has been sampled, will not send event.');\n    }\n\n    return new SyncPromise((resolve, reject) => {\n      this._prepareEvent(event, scope, hint).then(prepared => {\n        if (prepared === null) {\n          reject('An event processor returned null, will not send event.');\n          return;\n        }\n\n        let finalEvent: Event | null = prepared;\n\n        try {\n          const isInternalException = hint && hint.data && (hint.data as { [key: string]: any }).__sentry__ === true;\n          if (isInternalException || !beforeSend) {\n            this._getBackend().sendEvent(finalEvent);\n            resolve(finalEvent);\n            return;\n          }\n\n          const beforeSendResult = beforeSend(prepared, hint);\n          if ((typeof beforeSendResult as any) === 'undefined') {\n            logger.error('`beforeSend` method has to return `null` or a valid event.');\n          } else if (isThenable(beforeSendResult)) {\n            this._handleAsyncBeforeSend(beforeSendResult as Promise<Event | null>, resolve, reject);\n          } else {\n            finalEvent = beforeSendResult as Event | null;\n\n            if (finalEvent === null) {\n              logger.log('`beforeSend` returned `null`, will not send event.');\n              resolve(null);\n              return;\n            }\n\n            // From here on we are really async\n            this._getBackend().sendEvent(finalEvent);\n            resolve(finalEvent);\n          }\n        } catch (exception) {\n          this.captureException(exception, {\n            data: {\n              __sentry__: true,\n            },\n            originalException: exception as Error,\n          });\n          reject('`beforeSend` throw an error, will not send event.');\n        }\n      });\n    });\n  }\n\n  /**\n   * Resolves before send Promise and calls resolve/reject on parent SyncPromise.\n   */\n  private _handleAsyncBeforeSend(\n    beforeSend: Promise<Event | null>,\n    resolve: (event: Event) => void,\n    reject: (reason: string) => void,\n  ): void {\n    beforeSend\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          reject('`beforeSend` returned `null`, will not send event.');\n          return;\n        }\n        // From here on we are really async\n        this._getBackend().sendEvent(processedEvent);\n        resolve(processedEvent);\n      })\n      .catch(e => {\n        reject(`beforeSend rejected with ${e}`);\n      });\n  }\n}\n","import { Integration, WrappedFunction } from '@sentry/types';\n\nlet originalFunctionToString: () => void;\n\n/** Patch toString calls to return proper name for wrapped functions */\nexport class FunctionToString implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public name: string = FunctionToString.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'FunctionToString';\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    originalFunctionToString = Function.prototype.toString;\n\n    Function.prototype.toString = function(this: WrappedFunction, ...args: any[]): string {\n      const context = this.__sentry__ ? this.__sentry_original__ : this;\n      // tslint:disable-next-line:no-unsafe-any\n      return originalFunctionToString.apply(context, args);\n    };\n  }\n}\n","import { Event, Response, Status, Transport } from '@sentry/types';\n\n/** Noop transport */\nexport class NoopTransport implements Transport {\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(_: Event): Promise<Response> {\n    return Promise.resolve({\n      reason: `NoopTransport: Event has been skipped because no Dsn is configured.`,\n      status: Status.Skipped,\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(_?: number): Promise<boolean> {\n    return Promise.resolve(true);\n  }\n}\n","import { Event, EventHint, Options, Severity, Transport } from '@sentry/types';\nimport { logger, SentryError, SyncPromise } from '@sentry/utils';\n\nimport { NoopTransport } from './transports/noop';\n\n/**\n * Internal platform-dependent Sentry SDK Backend.\n *\n * While {@link Client} contains business logic specific to an SDK, the\n * Backend offers platform specific implementations for low-level operations.\n * These are persisting and loading information, sending events, and hooking\n * into the environment.\n *\n * Backends receive a handle to the Client in their constructor. When a\n * Backend automatically generates events, it must pass them to\n * the Client for validation and processing first.\n *\n * Usually, the Client will be of corresponding type, e.g. NodeBackend\n * receives NodeClient. However, higher-level SDKs can choose to instanciate\n * multiple Backends and delegate tasks between them. In this case, an event\n * generated by one backend might very well be sent by another one.\n *\n * The client also provides access to options via {@link Client.getOptions}.\n * @hidden\n */\nexport interface Backend {\n  /** Creates a {@link Event} from an exception. */\n  eventFromException(exception: any, hint?: EventHint): SyncPromise<Event>;\n\n  /** Creates a {@link Event} from a plain message. */\n  eventFromMessage(message: string, level?: Severity, hint?: EventHint): SyncPromise<Event>;\n\n  /** Submits the event to Sentry */\n  sendEvent(event: Event): void;\n\n  /**\n   * Returns the transport that is used by the backend.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   *\n   * @returns The transport.\n   */\n  getTransport(): Transport;\n}\n\n/**\n * A class object that can instanciate Backend objects.\n * @hidden\n */\nexport type BackendClass<B extends Backend, O extends Options> = new (options: O) => B;\n\n/**\n * This is the base implemention of a Backend.\n * @hidden\n */\nexport abstract class BaseBackend<O extends Options> implements Backend {\n  /** Options passed to the SDK. */\n  protected readonly _options: O;\n\n  /** Cached transport used internally. */\n  protected _transport: Transport;\n\n  /** Creates a new backend instance. */\n  public constructor(options: O) {\n    this._options = options;\n    if (!this._options.dsn) {\n      logger.warn('No DSN provided, backend will not do anything.');\n    }\n    this._transport = this._setupTransport();\n  }\n\n  /**\n   * Sets up the transport so it can be used later to send requests.\n   */\n  protected _setupTransport(): Transport {\n    return new NoopTransport();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(_exception: any, _hint?: EventHint): SyncPromise<Event> {\n    throw new SentryError('Backend has to implement `eventFromException` method');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): SyncPromise<Event> {\n    throw new SentryError('Backend has to implement `eventFromMessage` method');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): void {\n    this._transport.sendEvent(event).catch(reason => {\n      logger.error(`Error while sending event: ${reason}`);\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public getTransport(): Transport {\n    return this._transport;\n  }\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub';\nimport { Event, Integration } from '@sentry/types';\nimport { getEventDescription, isMatchingPattern, logger } 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.\nconst DEFAULT_IGNORE_ERRORS = [/^Script error\\.?$/, /^Javascript error: Script error\\.? on line 0$/];\n\n/** JSDoc */\ninterface InboundFiltersOptions {\n  blacklistUrls?: Array<string | RegExp>;\n  ignoreErrors?: Array<string | RegExp>;\n  ignoreInternal?: boolean;\n  whitelistUrls?: Array<string | RegExp>;\n}\n\n/** Inbound filters configurable by the user */\nexport class InboundFilters implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public name: string = InboundFilters.id;\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'InboundFilters';\n\n  public constructor(private readonly _options: InboundFiltersOptions = {}) {}\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    addGlobalEventProcessor((event: Event) => {\n      const hub = getCurrentHub();\n      if (!hub) {\n        return event;\n      }\n      const self = hub.getIntegration(InboundFilters);\n      if (self) {\n        const client = hub.getClient();\n        const clientOptions = client ? client.getOptions() : {};\n        const options = self._mergeOptions(clientOptions);\n        if (self._shouldDropEvent(event, options)) {\n          return null;\n        }\n      }\n      return event;\n    });\n  }\n\n  /** JSDoc */\n  private _shouldDropEvent(event: Event, options: InboundFiltersOptions): boolean {\n    if (this._isSentryError(event, options)) {\n      logger.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${getEventDescription(event)}`);\n      return true;\n    }\n    if (this._isIgnoredError(event, options)) {\n      logger.warn(\n        `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${getEventDescription(event)}`,\n      );\n      return true;\n    }\n    if (this._isBlacklistedUrl(event, options)) {\n      logger.warn(\n        `Event dropped due to being matched by \\`blacklistUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${this._getEventFilterUrl(event)}`,\n      );\n      return true;\n    }\n    if (!this._isWhitelistedUrl(event, options)) {\n      logger.warn(\n        `Event dropped due to not being matched by \\`whitelistUrls\\` option.\\nEvent: ${getEventDescription(\n          event,\n        )}.\\nUrl: ${this._getEventFilterUrl(event)}`,\n      );\n      return true;\n    }\n    return false;\n  }\n\n  /** JSDoc */\n  private _isSentryError(event: Event, options: InboundFiltersOptions = {}): boolean {\n    if (!options.ignoreInternal) {\n      return false;\n    }\n\n    try {\n      // tslint:disable-next-line:no-unsafe-any\n      return (event as any).exception.values[0].type === 'SentryError';\n    } catch (_oO) {\n      return false;\n    }\n  }\n\n  /** JSDoc */\n  private _isIgnoredError(event: Event, options: InboundFiltersOptions = {}): boolean {\n    if (!options.ignoreErrors || !options.ignoreErrors.length) {\n      return false;\n    }\n\n    return this._getPossibleEventMessages(event).some(message =>\n      // Not sure why TypeScript complains here...\n      (options.ignoreErrors as Array<RegExp | string>).some(pattern => isMatchingPattern(message, pattern)),\n    );\n  }\n\n  /** JSDoc */\n  private _isBlacklistedUrl(event: Event, options: InboundFiltersOptions = {}): boolean {\n    // TODO: Use Glob instead?\n    if (!options.blacklistUrls || !options.blacklistUrls.length) {\n      return false;\n    }\n    const url = this._getEventFilterUrl(event);\n    return !url ? false : options.blacklistUrls.some(pattern => isMatchingPattern(url, pattern));\n  }\n\n  /** JSDoc */\n  private _isWhitelistedUrl(event: Event, options: InboundFiltersOptions = {}): boolean {\n    // TODO: Use Glob instead?\n    if (!options.whitelistUrls || !options.whitelistUrls.length) {\n      return true;\n    }\n    const url = this._getEventFilterUrl(event);\n    return !url ? true : options.whitelistUrls.some(pattern => isMatchingPattern(url, pattern));\n  }\n\n  /** JSDoc */\n  private _mergeOptions(clientOptions: InboundFiltersOptions = {}): InboundFiltersOptions {\n    return {\n      blacklistUrls: [...(this._options.blacklistUrls || []), ...(clientOptions.blacklistUrls || [])],\n      ignoreErrors: [\n        ...(this._options.ignoreErrors || []),\n        ...(clientOptions.ignoreErrors || []),\n        ...DEFAULT_IGNORE_ERRORS,\n      ],\n      ignoreInternal: typeof this._options.ignoreInternal !== 'undefined' ? this._options.ignoreInternal : true,\n      whitelistUrls: [...(this._options.whitelistUrls || []), ...(clientOptions.whitelistUrls || [])],\n    };\n  }\n\n  /** JSDoc */\n  private _getPossibleEventMessages(event: Event): string[] {\n    if (event.message) {\n      return [event.message];\n    }\n    if (event.exception) {\n      try {\n        // tslint:disable-next-line:no-unsafe-any\n        const { type, value } = (event as any).exception.values[0];\n        return [`${value}`, `${type}: ${value}`];\n      } catch (oO) {\n        logger.error(`Cannot extract message for event ${getEventDescription(event)}`);\n        return [];\n      }\n    }\n    return [];\n  }\n\n  /** JSDoc */\n  private _getEventFilterUrl(event: Event): string | null {\n    try {\n      if (event.stacktrace) {\n        // tslint:disable:no-unsafe-any\n        const frames = (event as any).stacktrace.frames;\n        return frames[frames.length - 1].filename;\n      }\n      if (event.exception) {\n        // tslint:disable:no-unsafe-any\n        const frames = (event as any).exception.values[0].stacktrace.frames;\n        return frames[frames.length - 1].filename;\n      }\n      return null;\n    } catch (oO) {\n      logger.error(`Cannot extract url for event ${getEventDescription(event)}`);\n      return null;\n    }\n  }\n}\n","// tslint:disable\n\nimport { getGlobalObject, isError, isErrorEvent, normalize } from '@sentry/utils';\n\n/**\n * @hidden\n */\nexport interface StackFrame {\n  url: string;\n  func: string;\n  args: string[];\n  line: number;\n  column: number;\n  context: string[];\n}\n\n/**\n * @hidden\n */\nexport interface StackTrace {\n  /**\n   * Known modes: callers, failed, multiline, onerror, stack, stacktrace\n   */\n  mode: string;\n  mechanism: string;\n  name: string;\n  message: string;\n  url: string;\n  stack: StackFrame[];\n  useragent: string;\n  original?: string;\n}\n\ninterface ComputeStackTrace {\n  /**\n   * Computes a stack trace for an exception.\n   * @param {Error} ex\n   * @param {(string|number)=} depth\n   */\n  (ex: Error, depth?: string | number): StackTrace;\n}\n\n/**\n * TraceKit - Cross brower stack traces\n *\n * This was originally forked from github.com/occ/TraceKit, but has since been\n * largely modified and is now maintained as part of Sentry JS SDK.\n *\n * NOTE: Last merge with upstream repository\n * Jul 11,2018 - #f03357c\n *\n * https://github.com/csnover/TraceKit\n * @license MIT\n * @namespace TraceKit\n */\n\nvar window = getGlobalObject<Window>();\n\ninterface TraceKit {\n  _report: any;\n  _collectWindowErrors: any;\n  _computeStackTrace: any;\n  _linesOfContext: any;\n}\n\nvar TraceKit: TraceKit = {\n  _report: false,\n  _collectWindowErrors: false,\n  _computeStackTrace: false,\n  _linesOfContext: false,\n};\n\n// var TraceKit: TraceKitInterface = {};\n// var TraceKit = {};\n\n// global reference to slice\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\n/**\n * A better form of hasOwnProperty<br/>\n * Example: `_has(MainHostObject, property) === true/false`\n *\n * @param {Object} object to check property\n * @param {string} key to check\n * @return {Boolean} true if the object has the key and it is not inherited\n */\nfunction _has(object: any, key: any) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/**\n * A safe form of location.href<br/>\n *\n * @return {string} location.href\n */\nfunction getLocationHref() {\n  if (typeof document === 'undefined' || document.location == null) return '';\n  return document.location.href;\n}\n\n/**\n * Cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * ```js\n *   TraceKit.report.subscribe(function(stackInfo) { ... })\n *   TraceKit.report(exception)\n *   try { ...code... } catch(ex) { TraceKit.report(ex); }\n * ```\n *\n * Supports:\n *   - Firefox: full stack trace with line numbers, plus column number\n *     on top frame; column number is not guaranteed\n *   - Opera: full stack trace with line and column numbers\n *   - Chrome: full stack trace with line and column numbers\n *   - Safari: line and column number for the top frame only; some frames\n *     may be missing, and column number is not guaranteed\n *   - IE: line and column number for the top frame only; some frames\n *     may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n *   - IE5.5+ (only 8.0 tested)\n *   - Firefox 0.9+ (only 3.5+ tested)\n *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n *     Exceptions Have Stacktrace to be enabled in opera:config)\n *   - Safari 3+ (only 4+ tested)\n *   - Chrome 1+ (only 5+ tested)\n *   - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit._computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a TraceKit.StackTrace object as described in the\n * TraceKit._computeStackTrace docs.\n *\n * @memberof TraceKit\n * @namespace\n */\nTraceKit._report = (function reportModuleWrapper() {\n  var handlers: any = [],\n    lastException: any = null,\n    lastExceptionStack: any = null;\n\n  /**\n   * Add a crash handler.\n   * @param {Function} handler\n   * @memberof TraceKit.report\n   */\n  function _subscribe(handler: any) {\n    // NOTE: We call both handlers manually in browser/integrations/globalhandler.ts\n    // So user can choose which one he wants to attach\n\n    // installGlobalHandler();\n    // installGlobalUnhandledRejectionHandler();\n    handlers.push(handler);\n  }\n\n  /**\n   * Dispatch stack information to all handlers.\n   * @param {TraceKit.StackTrace} stack\n   * @param {boolean} isWindowError Is this a top-level window error?\n   * @param {Error=} error The error that's being handled (if available, null otherwise)\n   * @memberof TraceKit.report\n   * @throws An exception if an error occurs while calling an handler.\n   */\n  function _notifyHandlers(stack: any, isWindowError: any, error: any) {\n    var exception = null;\n    if (isWindowError && !TraceKit._collectWindowErrors) {\n      return;\n    }\n    for (var i in handlers) {\n      if (_has(handlers, i)) {\n        try {\n          handlers[i](stack, isWindowError, error);\n        } catch (inner) {\n          exception = inner;\n        }\n      }\n    }\n\n    if (exception) {\n      throw exception;\n    }\n  }\n\n  var _oldOnerrorHandler: any, _onErrorHandlerInstalled: any;\n\n  /**\n   * Ensures all global unhandled exceptions are recorded.\n   * Supported by Gecko and IE.\n   * @param {string} message Error message.\n   * @param {string} url URL of script that generated the exception.\n   * @param {(number|string)} lineNo The line number at which the error occurred.\n   * @param {(number|string)=} columnNo The column number at which the error occurred.\n   * @param {Error=} errorObj The actual Error object.\n   * @memberof TraceKit.report\n   */\n  function _traceKitWindowOnError(message: any, url: any, lineNo: any, columnNo: any, errorObj: any) {\n    var stack = null;\n    // If 'errorObj' is ErrorEvent, get real Error from inside\n    errorObj = isErrorEvent(errorObj) ? errorObj.error : errorObj;\n    // If 'message' is ErrorEvent, get real message from inside\n    message = isErrorEvent(message) ? message.message : message;\n\n    if (lastExceptionStack) {\n      TraceKit._computeStackTrace._augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);\n      processLastException();\n    } else if (errorObj && isError(errorObj)) {\n      stack = TraceKit._computeStackTrace(errorObj);\n      stack.mechanism = 'onerror';\n      _notifyHandlers(stack, true, errorObj);\n    } else {\n      var location: any = {\n        url: url,\n        line: lineNo,\n        column: columnNo,\n      };\n\n      var name;\n      var msg = message; // must be new var or will modify original `arguments`\n      if ({}.toString.call(message) === '[object String]') {\n        var groups = message.match(ERROR_TYPES_RE);\n        if (groups) {\n          name = groups[1];\n          msg = groups[2];\n        }\n      }\n\n      location.func = UNKNOWN_FUNCTION;\n      location.context = null;\n      stack = {\n        name: name,\n        message: msg,\n        mode: 'onerror',\n        mechanism: 'onerror',\n        stack: [\n          {\n            ...location,\n            // Firefox sometimes doesn't return url correctly and this is an old behavior\n            // that I prefer to port here as well.\n            // It can be altered only here, as previously it's using `location.url` for other things — Kamil\n            url: location.url || getLocationHref(),\n          },\n        ],\n      };\n\n      _notifyHandlers(stack, true, null);\n    }\n\n    if (_oldOnerrorHandler) {\n      // @ts-ignore\n      return _oldOnerrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  }\n\n  /**\n   * Ensures all unhandled rejections are recorded.\n   * @param {PromiseRejectionEvent} e event.\n   * @memberof TraceKit.report\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onunhandledrejection\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n   */\n  function _traceKitWindowOnUnhandledRejection(e: any) {\n    var err = (e && (e.detail ? e.detail.reason : e.reason)) || e;\n    var stack = TraceKit._computeStackTrace(err);\n    stack.mechanism = 'onunhandledrejection';\n    if (!stack.message) {\n      stack.message = JSON.stringify(normalize(err));\n    }\n    _notifyHandlers(stack, true, err);\n  }\n\n  /**\n   * Install a global onerror handler\n   * @memberof TraceKit.report\n   */\n  function _installGlobalHandler() {\n    if (_onErrorHandlerInstalled === true) {\n      return;\n    }\n\n    _oldOnerrorHandler = window.onerror;\n    window.onerror = _traceKitWindowOnError;\n    _onErrorHandlerInstalled = true;\n  }\n\n  /**\n   * Install a global onunhandledrejection handler\n   * @memberof TraceKit.report\n   */\n  function _installGlobalUnhandledRejectionHandler() {\n    (window as any).onunhandledrejection = _traceKitWindowOnUnhandledRejection;\n  }\n\n  /**\n   * Process the most recent exception\n   * @memberof TraceKit.report\n   */\n  function processLastException() {\n    var _lastExceptionStack = lastExceptionStack,\n      _lastException = lastException;\n    lastExceptionStack = null;\n    lastException = null;\n    _notifyHandlers(_lastExceptionStack, false, _lastException);\n  }\n\n  /**\n   * Reports an unhandled Error to TraceKit.\n   * @param {Error} ex\n   * @memberof TraceKit.report\n   * @throws An exception if an incomplete stack trace is detected (old IE browsers).\n   */\n  function _report(ex: any) {\n    if (lastExceptionStack) {\n      if (lastException === ex) {\n        return; // already caught by an inner catch block, ignore\n      } else {\n        processLastException();\n      }\n    }\n\n    var stack = TraceKit._computeStackTrace(ex);\n    lastExceptionStack = stack;\n    lastException = ex;\n\n    // If the stack trace is incomplete, wait for 2 seconds for\n    // slow slow IE to see if onerror occurs or not before reporting\n    // this exception; otherwise, we will end up with an incomplete\n    // stack trace\n    setTimeout(\n      function() {\n        if (lastException === ex) {\n          processLastException();\n        }\n      },\n      stack.incomplete ? 2000 : 0,\n    );\n\n    throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n  }\n\n  (_report as any)._subscribe = _subscribe;\n  (_report as any)._installGlobalHandler = _installGlobalHandler;\n  (_report as any)._installGlobalUnhandledRejectionHandler = _installGlobalUnhandledRejectionHandler;\n\n  return _report;\n})();\n\n/**\n * An object representing a single stack frame.\n * @typedef {Object} StackFrame\n * @property {string} url The JavaScript or HTML file URL.\n * @property {string} func The function name, or empty for anonymous functions (if guessing did not work).\n * @property {string[]?} args The arguments passed to the function, if known.\n * @property {number=} line The line number, if known.\n * @property {number=} column The column number, if known.\n * @property {string[]} context An array of source code lines; the middle element corresponds to the correct line#.\n * @memberof TraceKit\n */\n\n/**\n * An object representing a JavaScript stack trace.\n * @typedef {Object} StackTrace\n * @property {string} name The name of the thrown exception.\n * @property {string} message The exception error message.\n * @property {TraceKit.StackFrame[]} stack An array of stack frames.\n * @property {string} mode 'stack', 'stacktrace', 'multiline', 'callers', 'onerror', or 'failed' -- method used to collect the stack trace.\n * @memberof TraceKit\n */\n\n/**\n * TraceKit._computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n *   ```js\n *   s = TraceKit._computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n *   ```\n *\n * Supports:\n *   - Firefox:  full stack trace with line numbers and unreliable column\n *               number on top frame\n *   - Opera 10: full stack trace with line and column numbers\n *   - Opera 9-: full stack trace with line numbers\n *   - Chrome:   full stack trace with line and column numbers\n *   - Safari:   line and column number for the topmost stacktrace element\n *               only\n *   - IE:       no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit._computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit._computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n *  * in Safari, some methods may be missing from the stack trace;\n *  * in IE, the topmost function in the stack trace will always be the\n *    caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n * @memberof TraceKit\n * @namespace\n */\n\nTraceKit._computeStackTrace = (function _computeStackTraceWrapper() {\n  // Contents of Exception in various browsers.\n  //\n  // SAFARI:\n  // ex.message = Can't find variable: qq\n  // ex.line = 59\n  // ex.sourceId = 580238192\n  // ex.sourceURL = http://...\n  // ex.expressionBeginOffset = 96\n  // ex.expressionCaretOffset = 98\n  // ex.expressionEndOffset = 98\n  // ex.name = ReferenceError\n  //\n  // FIREFOX:\n  // ex.message = qq is not defined\n  // ex.fileName = http://...\n  // ex.lineNumber = 59\n  // ex.columnNumber = 69\n  // ex.stack = ...stack trace... (see the example below)\n  // ex.name = ReferenceError\n  //\n  // CHROME:\n  // ex.message = qq is not defined\n  // ex.name = ReferenceError\n  // ex.type = not_defined\n  // ex.arguments = ['aa']\n  // ex.stack = ...stack trace...\n  //\n  // INTERNET EXPLORER:\n  // ex.message = ...\n  // ex.name = ReferenceError\n  //\n  // OPERA:\n  // ex.message = ...message... (see the example below)\n  // ex.name = ReferenceError\n  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)\n  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n  /**\n   * Computes stack trace information from the stack property.\n   * Chrome and Gecko use this property.\n   * @param {Error} ex\n   * @return {?TraceKit.StackTrace} Stack trace information.\n   * @memberof TraceKit._computeStackTrace\n   */\n  function _computeStackTraceFromStackProp(ex: any) {\n    if (!ex || !ex.stack) {\n      return null;\n    }\n\n    // Chromium based browsers: Chrome, Brave, new Opera, new Edge\n    var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,\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.\n      gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js))(?::(\\d+))?(?::(\\d+))?\\s*$/i,\n      winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\n      // Used to additionally parse URL/line/column from eval frames\n      isEval,\n      geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,\n      chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,\n      lines = ex.stack.split('\\n'),\n      stack = [],\n      submatch,\n      parts,\n      element,\n      reference = /^(.*) is undefined$/.exec(ex.message);\n\n    for (var i = 0, j = lines.length; i < j; ++i) {\n      if ((parts = chrome.exec(lines[i]))) {\n        var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n        isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n        if (isEval && (submatch = chromeEval.exec(parts[2]))) {\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        element = {\n          url: parts[2],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: isNative ? [parts[2]] : [],\n          line: parts[3] ? +parts[3] : null,\n          column: parts[4] ? +parts[4] : null,\n        };\n      } else if ((parts = winjs.exec(lines[i]))) {\n        element = {\n          url: parts[2],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: [],\n          line: +parts[3],\n          column: parts[4] ? +parts[4] : null,\n        };\n      } else if ((parts = gecko.exec(lines[i]))) {\n        isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n        if (isEval && (submatch = geckoEval.exec(parts[3]))) {\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        } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) {\n          // FireFox uses this awesome columnNumber property for its top frame\n          // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n          // so adding 1\n          // NOTE: this hack doesn't work if top-most frame is eval\n          stack[0].column = ex.columnNumber + 1;\n        }\n        element = {\n          url: parts[3],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: parts[2] ? parts[2].split(',') : [],\n          line: parts[4] ? +parts[4] : null,\n          column: parts[5] ? +parts[5] : null,\n        };\n      } else {\n        continue;\n      }\n\n      if (!element.func && element.line) {\n        element.func = UNKNOWN_FUNCTION;\n      }\n\n      (element as any).context = null;\n\n      stack.push(element);\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    if (stack[0] && stack[0].line && !stack[0].column && reference) {\n      stack[0].column = null;\n    }\n\n    return {\n      mode: 'stack',\n      name: ex.name,\n      message: ex.message,\n      stack: stack,\n    };\n  }\n\n  /**\n   * Computes stack trace information from the stacktrace property.\n   * Opera 10+ uses this property.\n   * @param {Error} ex\n   * @return {?TraceKit.StackTrace} Stack trace information.\n   * @memberof TraceKit._computeStackTrace\n   */\n  function _computeStackTraceFromStacktraceProp(ex: any) {\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;\n    if (!stacktrace) {\n      return;\n    }\n\n    var opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i,\n      opera11Regex = / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^\\)]+))\\((.*)\\))? in (.*):\\s*$/i,\n      lines = stacktrace.split('\\n'),\n      stack = [],\n      parts;\n\n    for (var line = 0; line < lines.length; line += 2) {\n      var element = null;\n      if ((parts = opera10Regex.exec(lines[line]))) {\n        element = {\n          url: parts[2],\n          line: +parts[1],\n          column: null,\n          func: parts[3],\n          args: [],\n        };\n      } else if ((parts = opera11Regex.exec(lines[line]))) {\n        element = {\n          url: parts[6],\n          line: +parts[1],\n          column: +parts[2],\n          func: parts[3] || parts[4],\n          args: parts[5] ? parts[5].split(',') : [],\n        };\n      }\n\n      if (element) {\n        if (!element.func && element.line) {\n          element.func = UNKNOWN_FUNCTION;\n        }\n        if (element.line) {\n          (element as any).context = null;\n        }\n\n        if (!(element as any).context) {\n          (element as any).context = [lines[line + 1]];\n        }\n\n        stack.push(element);\n      }\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    return {\n      mode: 'stacktrace',\n      name: ex.name,\n      message: ex.message,\n      stack: stack,\n    };\n  }\n\n  /**\n   * NOT TESTED.\n   * Computes stack trace information from an error message that includes\n   * the stack trace.\n   * Opera 9 and earlier use this method if the option to show stack\n   * traces is turned on in opera:config.\n   * @param {Error} ex\n   * @return {?TraceKit.StackTrace} Stack information.\n   * @memberof TraceKit._computeStackTrace\n   */\n  function _computeStackTraceFromOperaMultiLineMessage(ex: any) {\n    // TODO: Clean this function up\n    // Opera includes a stack trace into the exception message. An example is:\n    //\n    // Statement on line 3: Undefined variable: undefinedFunc\n    // Backtrace:\n    //   Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz\n    //         undefinedFunc(a);\n    //   Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy\n    //           zzz(x, y, z);\n    //   Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx\n    //           yyy(a, a, a);\n    //   Line 1 of function script\n    //     try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }\n    //   ...\n\n    var lines = ex.message.split('\\n');\n    if (lines.length < 4) {\n      return null;\n    }\n\n    var lineRE1 = /^\\s*Line (\\d+) of linked script ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n      lineRE2 = /^\\s*Line (\\d+) of inline#(\\d+) script in ((?:file|https?|blob)\\S+)(?:: in function (\\S+))?\\s*$/i,\n      lineRE3 = /^\\s*Line (\\d+) of function script\\s*$/i,\n      stack = [],\n      scripts = window && window.document && window.document.getElementsByTagName('script'),\n      inlineScriptBlocks = [],\n      parts;\n\n    for (var s in scripts) {\n      if (_has(scripts, s) && !scripts[s].src) {\n        inlineScriptBlocks.push(scripts[s]);\n      }\n    }\n\n    for (var line = 2; line < lines.length; line += 2) {\n      var item = null;\n      if ((parts = lineRE1.exec(lines[line]))) {\n        item = {\n          url: parts[2],\n          func: parts[3],\n          args: [],\n          line: +parts[1],\n          column: null,\n        };\n      } else if ((parts = lineRE2.exec(lines[line]))) {\n        item = {\n          url: parts[3],\n          func: parts[4],\n          args: [],\n          line: +parts[1],\n          column: null, // TODO: Check to see if inline#1 (+parts[2]) points to the script number or column number.\n        };\n      } else if ((parts = lineRE3.exec(lines[line]))) {\n        var url = getLocationHref().replace(/#.*$/, '');\n        item = {\n          url: url,\n          func: '',\n          args: [],\n          line: parts[1],\n          column: null,\n        };\n      }\n\n      if (item) {\n        if (!item.func) {\n          item.func = UNKNOWN_FUNCTION;\n        }\n        // if (context) alert(\"Context mismatch. Correct midline:\\n\" + lines[i+1] + \"\\n\\nMidline:\\n\" + midline + \"\\n\\nContext:\\n\" + context.join(\"\\n\") + \"\\n\\nURL:\\n\" + item.url);\n        (item as any).context = [lines[line + 1]];\n        stack.push(item);\n      }\n    }\n    if (!stack.length) {\n      return null; // could not parse multiline exception message as Opera stack trace\n    }\n\n    return {\n      mode: 'multiline',\n      name: ex.name,\n      message: lines[0],\n      stack: stack,\n    };\n  }\n\n  /**\n   * Adds information about the first frame to incomplete stack traces.\n   * Safari and IE require this to get complete data on the first frame.\n   * @param {TraceKit.StackTrace} stackInfo Stack trace information from\n   * one of the compute* methods.\n   * @param {string} url The URL of the script that caused an error.\n   * @param {(number|string)} lineNo The line number of the script that\n   * caused an error.\n   * @param {string=} message The error generated by the browser, which\n   * hopefully contains the name of the object that caused the error.\n   * @return {boolean} Whether or not the stack information was\n   * augmented.\n   * @memberof TraceKit._computeStackTrace\n   */\n  function _augmentStackTraceWithInitialElement(stackInfo: any, url: any, lineNo: any, message: any) {\n    var initial = {\n      url: url,\n      line: lineNo,\n    };\n\n    if (initial.url && initial.line) {\n      stackInfo.incomplete = false;\n\n      if (!(initial as any).func) {\n        (initial as any).func = UNKNOWN_FUNCTION;\n      }\n\n      if (!(initial as any).context) {\n        (initial as any).context = null;\n      }\n\n      var reference = / '([^']+)' /.exec(message);\n      if (reference) {\n        (initial as any).column = null;\n      }\n\n      if (stackInfo.stack.length > 0) {\n        if (stackInfo.stack[0].url === initial.url) {\n          if (stackInfo.stack[0].line === initial.line) {\n            return false; // already in stack trace\n          } else if (!stackInfo.stack[0].line && stackInfo.stack[0].func === (initial as any).func) {\n            stackInfo.stack[0].line = initial.line;\n            stackInfo.stack[0].context = (initial as any).context;\n            return false;\n          }\n        }\n      }\n\n      stackInfo.stack.unshift(initial);\n      stackInfo.partial = true;\n      return true;\n    } else {\n      stackInfo.incomplete = true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Computes stack trace information by walking the arguments.caller\n   * chain at the time the exception occurred. This will cause earlier\n   * frames to be missed but is the only way to get any stack trace in\n   * Safari and IE. The top frame is restored by\n   * {@link augmentStackTraceWithInitialElement}.\n   * @param {Error} ex\n   * @return {TraceKit.StackTrace=} Stack trace information.\n   * @memberof TraceKit._computeStackTrace\n   */\n  function _computeStackTraceByWalkingCallerChain(ex: any, depth: any) {\n    var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n      stack = [],\n      funcs = {},\n      recursion = false,\n      parts,\n      item;\n\n    for (var curr = _computeStackTraceByWalkingCallerChain.caller; curr && !recursion; curr = curr.caller) {\n      if (curr === _computeStackTrace || curr === TraceKit._report) {\n        continue;\n      }\n\n      item = {\n        url: null,\n        func: UNKNOWN_FUNCTION,\n        args: [],\n        line: null,\n        column: null,\n      };\n\n      if (curr.name) {\n        item.func = curr.name;\n      } else if ((parts = functionName.exec(curr.toString()))) {\n        item.func = parts[1];\n      }\n\n      if (typeof item.func === 'undefined') {\n        try {\n          item.func = (parts as any).input.substring(0, (parts as any).input.indexOf('{'));\n        } catch (e) {}\n      }\n\n      if ((funcs as any)['' + curr]) {\n        recursion = true;\n      } else {\n        (funcs as any)['' + curr] = true;\n      }\n\n      stack.push(item);\n    }\n\n    if (depth) {\n      stack.splice(0, depth);\n    }\n\n    var result = {\n      mode: 'callers',\n      name: ex.name,\n      message: ex.message,\n      stack: stack,\n    };\n    _augmentStackTraceWithInitialElement(\n      result,\n      ex.sourceURL || ex.fileName,\n      ex.line || ex.lineNumber,\n      ex.message || ex.description,\n    );\n    return result;\n  }\n\n  /**\n   * Computes a stack trace for an exception.\n   * @param {Error} ex\n   * @param {(string|number)=} depth\n   * @memberof TraceKit._computeStackTrace\n   */\n  function computeStackTrace(ex: any, depth: any) {\n    var stack = null;\n    depth = depth == null ? 0 : +depth;\n\n    try {\n      // This must be tried first because Opera 10 *destroys*\n      // its stacktrace property if you try to access the stack\n      // property first!!\n      stack = _computeStackTraceFromStacktraceProp(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {}\n\n    try {\n      stack = _computeStackTraceFromStackProp(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {}\n\n    try {\n      stack = _computeStackTraceFromOperaMultiLineMessage(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {}\n\n    try {\n      stack = _computeStackTraceByWalkingCallerChain(ex, depth + 1);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {}\n\n    return {\n      original: ex,\n      name: ex.name,\n      message: ex.message,\n      mode: 'failed',\n    };\n  }\n\n  (computeStackTrace as any)._augmentStackTraceWithInitialElement = _augmentStackTraceWithInitialElement;\n  (computeStackTrace as any)._computeStackTraceFromStackProp = _computeStackTraceFromStackProp;\n\n  return computeStackTrace;\n})();\n\nTraceKit._collectWindowErrors = true;\nTraceKit._linesOfContext = 11;\n\nconst _subscribe = TraceKit._report._subscribe;\nconst _installGlobalHandler = TraceKit._report._installGlobalHandler;\nconst _installGlobalUnhandledRejectionHandler = TraceKit._report._installGlobalUnhandledRejectionHandler;\nconst _computeStackTrace: ComputeStackTrace = TraceKit._computeStackTrace;\n\nexport { _subscribe, _installGlobalHandler, _installGlobalUnhandledRejectionHandler, _computeStackTrace };\n","import { Event, Exception, StackFrame } from '@sentry/types';\nimport { keysToEventMessage, normalizeToSize } from '@sentry/utils';\n\nimport { _computeStackTrace, StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit';\n\nconst STACKTRACE_LIMIT = 50;\n\n/**\n * This function creates an exception from an TraceKitStackTrace\n * @param stacktrace TraceKitStackTrace that will be converted to an exception\n * @hidden\n */\nexport function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception {\n  const frames = prepareFramesForEvent(stacktrace.stack);\n\n  const exception: Exception = {\n    type: stacktrace.name,\n    value: stacktrace.message,\n  };\n\n  if (frames && frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  // tslint:disable-next-line:strict-type-predicates\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(exception: {}, syntheticException: Error | null): Event {\n  const exceptionKeys = Object.keys(exception).sort();\n  const event: Event = {\n    extra: {\n      __serialized__: normalizeToSize(exception),\n    },\n    message: `Non-Error exception captured with keys: ${keysToEventMessage(exceptionKeys)}`,\n  };\n\n  if (syntheticException) {\n    const stacktrace = _computeStackTrace(syntheticException);\n    const frames = prepareFramesForEvent(stacktrace.stack);\n    event.stacktrace = {\n      frames,\n    };\n  }\n\n  return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event {\n  const exception = exceptionFromStacktrace(stacktrace);\n\n  return {\n    exception: {\n      values: [exception],\n    },\n  };\n}\n\n/**\n * @hidden\n */\nexport function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] {\n  if (!stack || !stack.length) {\n    return [];\n  }\n\n  let localStack = stack;\n\n  const firstFrameFunction = localStack[0].func || '';\n  const lastFrameFunction = localStack[localStack.length - 1].func || '';\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.includes('captureMessage') || firstFrameFunction.includes('captureException')) {\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.includes('sentryWrapped')) {\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    .map(\n      (frame: TraceKitStackFrame): StackFrame => ({\n        colno: frame.column,\n        filename: frame.url || localStack[0].url,\n        function: frame.func || '?',\n        in_app: true,\n        lineno: frame.line,\n      }),\n    )\n    .slice(0, STACKTRACE_LIMIT)\n    .reverse();\n}\n","import { API } from '@sentry/core';\nimport { Event, Response, Transport, TransportOptions } from '@sentry/types';\nimport { PromiseBuffer, SentryError } from '@sentry/utils';\n\n/** Base Transport class implementation */\nexport abstract class BaseTransport implements Transport {\n  /**\n   * @inheritDoc\n   */\n  public url: string;\n\n  /** A simple buffer holding all requests. */\n  protected readonly _buffer: PromiseBuffer<Response> = new PromiseBuffer(30);\n\n  public constructor(public options: TransportOptions) {\n    this.url = new API(this.options.dsn).getStoreEndpointWithUrlEncodedAuth();\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(_: Event): Promise<Response> {\n    throw new SentryError('Transport Class has to implement `sendEvent` method');\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public close(timeout?: number): Promise<boolean> {\n    return this._buffer.drain(timeout);\n  }\n}\n","import { captureException, getCurrentHub, withScope } from '@sentry/core';\nimport { Event as SentryEvent, Mechanism, WrappedFunction } from '@sentry/types';\nimport { addExceptionTypeValue, isString, normalize } from '@sentry/utils';\n\nconst debounceDuration: number = 1000;\nlet keypressTimeout: number | undefined;\nlet lastCapturedEvent: Event | undefined;\nlet ignoreOnError: number = 0;\n\n/**\n * @hidden\n */\nexport function shouldIgnoreOnError(): boolean {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nexport function ignoreNextOnError(): void {\n  // onerror should trigger before setTimeout\n  ignoreOnError += 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.\n * @returns The wrapped function.\n * @hidden\n */\nexport function wrap(\n  fn: WrappedFunction,\n  options: {\n    mechanism?: Mechanism;\n    capture?: boolean;\n  } = {},\n  before?: WrappedFunction,\n): any {\n  // tslint:disable-next-line:strict-type-predicates\n  if (typeof fn !== 'function') {\n    return fn;\n  }\n\n  try {\n    // We don't wanna wrap it twice\n    if (fn.__sentry__) {\n      return fn;\n    }\n\n    // If this has already been wrapped in the past, return that wrapped function\n    if (fn.__sentry_wrapped__) {\n      return fn.__sentry_wrapped__;\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  const sentryWrapped: WrappedFunction = function(this: any): void {\n    // tslint:disable-next-line:strict-type-predicates\n    if (before && typeof before === 'function') {\n      before.apply(this, arguments);\n    }\n\n    const args = Array.prototype.slice.call(arguments);\n\n    // tslint:disable:no-unsafe-any\n    try {\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      const wrappedArguments = args.map((arg: any) => wrap(arg, options));\n\n      if (fn.handleEvent) {\n        return fn.handleEvent.apply(this, wrappedArguments);\n      }\n      return fn.apply(this, wrappedArguments);\n      // tslint:enable:no-unsafe-any\n    } catch (ex) {\n      ignoreNextOnError();\n\n      withScope(scope => {\n        scope.addEventProcessor((event: SentryEvent) => {\n          const processedEvent = { ...event };\n\n          if (options.mechanism) {\n            addExceptionTypeValue(processedEvent, undefined, undefined, options.mechanism);\n          }\n\n          processedEvent.extra = {\n            ...processedEvent.extra,\n            arguments: normalize(args, 3),\n          };\n\n          return processedEvent;\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 (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property] = fn[property];\n      }\n    }\n  } catch (_oO) {} // tslint:disable-line:no-empty\n\n  fn.prototype = fn.prototype || {};\n  sentryWrapped.prototype = fn.prototype;\n\n  Object.defineProperty(fn, '__sentry_wrapped__', {\n    enumerable: false,\n    value: sentryWrapped,\n  });\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  Object.defineProperties(sentryWrapped, {\n    __sentry__: {\n      enumerable: false,\n      value: true,\n    },\n    __sentry_original__: {\n      enumerable: false,\n      value: fn,\n    },\n  });\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name') as PropertyDescriptor;\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get(): string {\n          return fn.name;\n        },\n      });\n    }\n  } catch (_oO) {\n    /*no-empty*/\n  }\n\n  return sentryWrapped;\n}\n\nlet debounceTimer: number = 0;\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param eventName the event name (e.g. \"click\")\n * @returns wrapped breadcrumb events handler\n * @hidden\n */\nexport function breadcrumbEventHandler(eventName: string, debounce: boolean = false): (event: Event) => void {\n  return (event: Event) => {\n    // reset keypress timeout; e.g. triggering a 'click' after\n    // a 'keypress' will reset the keypress debounce so that a new\n    // set of keypresses can be recorded\n    keypressTimeout = undefined;\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors). Ignore if we've\n    // already captured the event.\n    if (!event || lastCapturedEvent === event) {\n      return;\n    }\n\n    lastCapturedEvent = event;\n\n    const captureBreadcrumb = () => {\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      let target;\n      try {\n        target = event.target ? _htmlTreeAsString(event.target as Node) : _htmlTreeAsString((event as unknown) as Node);\n      } catch (e) {\n        target = '<unknown>';\n      }\n\n      if (target.length === 0) {\n        return;\n      }\n\n      getCurrentHub().addBreadcrumb(\n        {\n          category: `ui.${eventName}`, // e.g. ui.click, ui.input\n          message: target,\n        },\n        {\n          event,\n          name: eventName,\n        },\n      );\n    };\n\n    if (debounceTimer) {\n      clearTimeout(debounceTimer);\n    }\n\n    if (debounce) {\n      debounceTimer = setTimeout(captureBreadcrumb);\n    } else {\n      captureBreadcrumb();\n    }\n  };\n}\n\n/**\n * Wraps addEventListener to capture keypress UI events\n * @returns wrapped keypress events handler\n * @hidden\n */\nexport function keypressEventHandler(): (event: Event) => void {\n  // TODO: if somehow user switches keypress target before\n  //       debounce timeout is triggered, we will only capture\n  //       a single breadcrumb from the FIRST target (acceptable?)\n  return (event: Event) => {\n    let target;\n\n    try {\n      target = event.target;\n    } catch (e) {\n      // just accessing event properties can throw an exception in some rare circumstances\n      // see: https://github.com/getsentry/raven-js/issues/838\n      return;\n    }\n\n    const tagName = target && (target as HTMLElement).tagName;\n\n    // only consider keypress events on actual input elements\n    // this will disregard keypresses targeting body (e.g. tabbing\n    // through elements, hotkeys, etc)\n    if (!tagName || (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !(target as HTMLElement).isContentEditable)) {\n      return;\n    }\n\n    // record first keypress in a series, but ignore subsequent\n    // keypresses until debounce clears\n    if (!keypressTimeout) {\n      breadcrumbEventHandler('input')(event);\n    }\n    clearTimeout(keypressTimeout);\n\n    keypressTimeout = (setTimeout(() => {\n      keypressTimeout = undefined;\n    }, debounceDuration) as any) as number;\n  };\n}\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: Node): string {\n  let currentElem: Node | null = elem;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  const MAX_OUTPUT_LEN = 80;\n  const out = [];\n  let height = 0;\n  let len = 0;\n  const separator = ' > ';\n  const sepLength = separator.length;\n  let nextStr;\n\n  while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n    nextStr = _htmlElementAsString(currentElem as HTMLElement);\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}\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(elem: HTMLElement): string {\n  const out = [];\n  let className;\n  let classes;\n  let key;\n  let attr;\n  let i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\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  const attrWhitelist = ['type', 'name', 'title', 'alt'];\n  for (i = 0; i < attrWhitelist.length; i++) {\n    key = attrWhitelist[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push(`[${key}=\"${attr}\"]`);\n    }\n  }\n  return out.join('');\n}\n","import { Event, Response, Status } from '@sentry/types';\nimport { getGlobalObject, supportsReferrerPolicy } from '@sentry/utils';\n\nimport { BaseTransport } from './base';\n\nconst global = getGlobalObject<Window>();\n\n/** `fetch` based transport */\nexport class FetchTransport extends BaseTransport {\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): Promise<Response> {\n    const defaultOptions: RequestInit = {\n      body: JSON.stringify(event),\n      method: 'POST',\n      // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n      // https://caniuse.com/#feat=referrer-policy\n      // It doesn't. And it throw exception instead of ignoring this parameter...\n      // REF: https://github.com/getsentry/raven-js/issues/1233\n      referrerPolicy: (supportsReferrerPolicy() ? 'origin' : '') as ReferrerPolicy,\n    };\n\n    return this._buffer.add(\n      global.fetch(this.url, defaultOptions).then(response => ({\n        status: Status.fromHttpCode(response.status),\n      })),\n    );\n  }\n}\n","import { Event, Response, Status } from '@sentry/types';\n\nimport { BaseTransport } from './base';\n\n/** `XHR` based transport */\nexport class XHRTransport extends BaseTransport {\n  /**\n   * @inheritDoc\n   */\n  public sendEvent(event: Event): Promise<Response> {\n    return this._buffer.add(\n      new Promise<Response>((resolve, reject) => {\n        const request = new XMLHttpRequest();\n\n        request.onreadystatechange = () => {\n          if (request.readyState !== 4) {\n            return;\n          }\n\n          if (request.status === 200) {\n            resolve({\n              status: Status.fromHttpCode(request.status),\n            });\n          }\n\n          reject(request);\n        };\n\n        request.open('POST', this.url);\n        request.send(JSON.stringify(event));\n      }),\n    );\n  }\n}\n","import { BaseBackend } from '@sentry/core';\nimport { Event, EventHint, Options, Severity, Transport } from '@sentry/types';\nimport {\n  addExceptionTypeValue,\n  isDOMError,\n  isDOMException,\n  isError,\n  isErrorEvent,\n  isPlainObject,\n  supportsFetch,\n  SyncPromise,\n} from '@sentry/utils';\n\nimport { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';\nimport { _computeStackTrace } from './tracekit';\nimport { FetchTransport, XHRTransport } from './transports';\n\n/**\n * Configuration options for the Sentry Browser SDK.\n * @see BrowserClient for more information.\n */\nexport interface BrowserOptions extends Options {\n  /**\n   * A pattern for error URLs which should not be sent to Sentry.\n   * To whitelist certain errors instead, use {@link Options.whitelistUrls}.\n   * By default, all errors will be sent.\n   */\n  blacklistUrls?: Array<string | RegExp>;\n\n  /**\n   * A pattern for error URLs which should exclusively be sent to Sentry.\n   * This is the opposite of {@link Options.blacklistUrls}.\n   * By default, all errors will be sent.\n   */\n  whitelistUrls?: Array<string | RegExp>;\n}\n\n/**\n * The Sentry Browser SDK Backend.\n * @hidden\n */\nexport class BrowserBackend extends BaseBackend<BrowserOptions> {\n  /**\n   * @inheritDoc\n   */\n  protected _setupTransport(): Transport {\n    if (!this._options.dsn) {\n      // We return the noop transport here in case there is no Dsn.\n      return super._setupTransport();\n    }\n\n    const transportOptions = {\n      ...this._options.transportOptions,\n      dsn: this._options.dsn,\n    };\n\n    if (this._options.transport) {\n      return new this._options.transport(transportOptions);\n    }\n    if (supportsFetch()) {\n      return new FetchTransport(transportOptions);\n    }\n    return new XHRTransport(transportOptions);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromException(exception: any, hint?: EventHint): SyncPromise<Event> {\n    let event: Event;\n\n    if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n      // If it is an ErrorEvent with `error` property, extract it to get actual Error\n      const errorEvent = exception as ErrorEvent;\n      exception = errorEvent.error; // tslint:disable-line:no-parameter-reassignment\n      event = eventFromStacktrace(_computeStackTrace(exception as Error));\n      return SyncPromise.resolve(this._buildEvent(event, hint));\n    }\n    if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) {\n      // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n      // then we just extract the name and message, as they don't provide anything else\n      // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n      // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n      const domException = exception as DOMException;\n      const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n\n      return this.eventFromMessage(message, Severity.Error, hint).then(messageEvent => {\n        addExceptionTypeValue(messageEvent, message);\n        return SyncPromise.resolve(this._buildEvent(messageEvent, hint));\n      });\n    }\n    if (isError(exception as Error)) {\n      // we have a real Error object, do nothing\n      event = eventFromStacktrace(_computeStackTrace(exception as Error));\n      return SyncPromise.resolve(this._buildEvent(event, hint));\n    }\n    if (isPlainObject(exception as {}) && hint && hint.syntheticException) {\n      // If it is plain Object, serialize it manually and extract options\n      // This will allow us to group events based on top-level keys\n      // which is much better than creating new group when any key/value change\n      const objectException = exception as {};\n      event = eventFromPlainObject(objectException, hint.syntheticException);\n      addExceptionTypeValue(event, 'Custom Object', undefined, {\n        handled: true,\n        synthetic: true,\n        type: 'generic',\n      });\n      event.level = Severity.Error;\n      return SyncPromise.resolve(this._buildEvent(event, hint));\n    }\n\n    // If none of previous checks were valid, then it means that\n    // it's not a DOMError/DOMException\n    // it's not a plain Object\n    // it's not a valid ErrorEvent (one with an error property)\n    // it's not an Error\n    // So bail out and capture it as a simple message:\n    const stringException = exception as string;\n    return this.eventFromMessage(stringException, undefined, hint).then(messageEvent => {\n      addExceptionTypeValue(messageEvent, `${stringException}`, undefined, {\n        handled: true,\n        synthetic: true,\n        type: 'generic',\n      });\n      messageEvent.level = Severity.Error;\n      return SyncPromise.resolve(this._buildEvent(messageEvent, hint));\n    });\n  }\n\n  /**\n   * This is an internal helper function that creates an event.\n   */\n  private _buildEvent(event: Event, hint?: EventHint): Event {\n    return {\n      ...event,\n      event_id: hint && hint.event_id,\n    };\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise<Event> {\n    const event: Event = {\n      event_id: hint && hint.event_id,\n      level,\n      message,\n    };\n\n    if (this._options.attachStacktrace && hint && hint.syntheticException) {\n      const stacktrace = _computeStackTrace(hint.syntheticException);\n      const frames = prepareFramesForEvent(stacktrace.stack);\n      event.stacktrace = {\n        frames,\n      };\n    }\n\n    return SyncPromise.resolve(event);\n  }\n}\n","export const SDK_NAME = 'sentry.javascript.browser';\nexport const SDK_VERSION = '5.5.0';\n","import { API, BaseClient, Scope } from '@sentry/core';\nimport { DsnLike, Event, EventHint } from '@sentry/types';\nimport { getGlobalObject, logger, SyncPromise } from '@sentry/utils';\n\nimport { BrowserBackend, BrowserOptions } from './backend';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\n/**\n * All properties the report dialog supports\n */\nexport interface ReportDialogOptions {\n  [key: string]: any;\n  eventId?: string;\n  dsn?: DsnLike;\n  user?: {\n    email?: string;\n    name?: string;\n  };\n  lang?: string;\n  title?: string;\n  subtitle?: string;\n  subtitle2?: string;\n  labelName?: string;\n  labelEmail?: string;\n  labelComments?: string;\n  labelClose?: string;\n  labelSubmit?: string;\n  errorGeneric?: string;\n  errorFormEntry?: string;\n  successMessage?: string;\n  /** Callback after reportDialog showed up */\n  onLoad?(): void;\n}\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nexport class BrowserClient extends BaseClient<BrowserBackend, BrowserOptions> {\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n  public constructor(options: BrowserOptions = {}) {\n    super(BrowserBackend, options);\n  }\n\n  /**\n   * @inheritDoc\n   */\n  protected _prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise<Event | null> {\n    event.platform = event.platform || 'javascript';\n    event.sdk = {\n      ...event.sdk,\n      name: SDK_NAME,\n      packages: [\n        ...((event.sdk && event.sdk.packages) || []),\n        {\n          name: 'npm:@sentry/browser',\n          version: SDK_VERSION,\n        },\n      ],\n      version: SDK_VERSION,\n    };\n\n    return super._prepareEvent(event, scope, hint);\n  }\n\n  /**\n   * Show a report dialog to the user to send feedback to a specific event.\n   *\n   * @param options Set individual options for the dialog\n   */\n  public showReportDialog(options: ReportDialogOptions = {}): void {\n    // doesn't work without a document (React Native)\n    const document = getGlobalObject<Window>().document;\n    if (!document) {\n      return;\n    }\n\n    if (!this._isEnabled()) {\n      logger.error('Trying to call showReportDialog with Sentry Client is disabled');\n      return;\n    }\n\n    const dsn = options.dsn || this.getDsn();\n\n    if (!options.eventId) {\n      logger.error('Missing `eventId` option in showReportDialog call');\n      return;\n    }\n\n    if (!dsn) {\n      logger.error('Missing `Dsn` option in showReportDialog call');\n      return;\n    }\n\n    const script = document.createElement('script');\n    script.async = true;\n    script.src = new API(dsn).getReportDialogEndpoint(options);\n\n    if (options.onLoad) {\n      script.onload = options.onLoad;\n    }\n\n    (document.head || document.body).appendChild(script);\n  }\n}\n","import { getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { addExceptionTypeValue, isString, logger, normalize, truncate } from '@sentry/utils';\n\nimport { shouldIgnoreOnError } from '../helpers';\nimport { eventFromStacktrace } from '../parsers';\nimport {\n  _installGlobalHandler,\n  _installGlobalUnhandledRejectionHandler,\n  _subscribe,\n  StackTrace as TraceKitStackTrace,\n} from '../tracekit';\n\n/** JSDoc */\ninterface GlobalHandlersIntegrations {\n  onerror: boolean;\n  onunhandledrejection: boolean;\n}\n\n/** Global handlers */\nexport class GlobalHandlers implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public name: string = GlobalHandlers.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'GlobalHandlers';\n\n  /** JSDoc */\n  private readonly _options: GlobalHandlersIntegrations;\n\n  /** JSDoc */\n  public constructor(options?: GlobalHandlersIntegrations) {\n    this._options = {\n      onerror: true,\n      onunhandledrejection: true,\n      ...options,\n    };\n  }\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    Error.stackTraceLimit = 50;\n\n    _subscribe((stack: TraceKitStackTrace, _: boolean, error: Error) => {\n      // TODO: use stack.context to get a valuable information from TraceKit, eg.\n      // [\n      //   0: \"  })\"\n      //   1: \"\"\n      //   2: \"  function foo () {\"\n      //   3: \"    Sentry.captureException('some error')\"\n      //   4: \"    Sentry.captureMessage('some message')\"\n      //   5: \"    throw 'foo'\"\n      //   6: \"  }\"\n      //   7: \"\"\n      //   8: \"  function bar () {\"\n      //   9: \"    foo();\"\n      //   10: \"  }\"\n      // ]\n      if (shouldIgnoreOnError()) {\n        return;\n      }\n      const self = getCurrentHub().getIntegration(GlobalHandlers);\n      if (self) {\n        getCurrentHub().captureEvent(self._eventFromGlobalHandler(stack), {\n          data: { stack },\n          originalException: error,\n        });\n      }\n    });\n\n    if (this._options.onerror) {\n      logger.log('Global Handler attached: onerror');\n      _installGlobalHandler();\n    }\n\n    if (this._options.onunhandledrejection) {\n      logger.log('Global Handler attached: onunhandledrejection');\n      _installGlobalUnhandledRejectionHandler();\n    }\n  }\n\n  /**\n   * This function creates an Event from an TraceKitStackTrace.\n   *\n   * @param stacktrace TraceKitStackTrace to be converted to an Event.\n   */\n  private _eventFromGlobalHandler(stacktrace: TraceKitStackTrace): Event {\n    if (!isString(stacktrace.message) && stacktrace.mechanism !== 'onunhandledrejection') {\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      const message = (stacktrace.message as unknown) as any;\n      stacktrace.message =\n        message.error && isString(message.error.message) ? message.error.message : 'No error message';\n    }\n    const event = eventFromStacktrace(stacktrace);\n\n    const data: { [key: string]: string } = {\n      mode: stacktrace.mode,\n    };\n\n    if (stacktrace.message) {\n      data.message = stacktrace.message;\n    }\n\n    if (stacktrace.name) {\n      data.name = stacktrace.name;\n    }\n\n    const client = getCurrentHub().getClient();\n    const maxValueLength = (client && client.getOptions().maxValueLength) || 250;\n\n    const fallbackValue = stacktrace.original\n      ? truncate(JSON.stringify(normalize(stacktrace.original)), maxValueLength)\n      : '';\n    const fallbackType = stacktrace.mechanism === 'onunhandledrejection' ? 'UnhandledRejection' : 'Error';\n\n    // This makes sure we have type/value in every exception\n    addExceptionTypeValue(event, fallbackValue, fallbackType, {\n      data,\n      handled: false,\n      type: stacktrace.mechanism,\n    });\n\n    return event;\n  }\n}\n","import { Integration, WrappedFunction } from '@sentry/types';\nimport { fill, getGlobalObject } from '@sentry/utils';\n\nimport { wrap } from '../helpers';\n\n/** Wrap timer functions and event targets to catch errors and provide better meta data */\nexport class TryCatch implements Integration {\n  /** JSDoc */\n  private _ignoreOnError: number = 0;\n\n  /**\n   * @inheritDoc\n   */\n  public name: string = TryCatch.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'TryCatch';\n\n  /** JSDoc */\n  private _wrapTimeFunction(original: () => void): () => number {\n    return function(this: any, ...args: any[]): number {\n      const originalCallback = args[0];\n      args[0] = wrap(originalCallback, {\n        mechanism: {\n          data: { function: getFunctionName(original) },\n          handled: true,\n          type: 'instrument',\n        },\n      });\n      return original.apply(this, args);\n    };\n  }\n\n  /** JSDoc */\n  private _wrapRAF(original: any): (callback: () => void) => any {\n    return function(this: any, callback: () => void): () => void {\n      return original(\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 */\n  private _wrapEventTarget(target: string): void {\n    const global = getGlobalObject() as { [key: string]: any };\n    const proto = global[target] && global[target].prototype;\n\n    if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n      return;\n    }\n\n    fill(proto, 'addEventListener', function(\n      original: () => void,\n    ): (eventName: string, fn: EventListenerObject, options?: boolean | AddEventListenerOptions) => void {\n      return function(\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ): (eventName: string, fn: EventListenerObject, capture?: boolean, secure?: boolean) => void {\n        try {\n          // tslint:disable-next-line:no-unbound-method strict-type-predicates\n          if (typeof fn.handleEvent === 'function') {\n            fn.handleEvent = wrap(fn.handleEvent.bind(fn), {\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.call(\n          this,\n          eventName,\n          wrap((fn as any) as WrappedFunction, {\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(proto, 'removeEventListener', function(\n      original: () => void,\n    ): (this: any, eventName: string, fn: EventListenerObject, options?: boolean | EventListenerOptions) => () => void {\n      return function(\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | EventListenerOptions,\n      ): () => void {\n        let callback = (fn as any) as WrappedFunction;\n        try {\n          callback = callback && (callback.__sentry_wrapped__ || callback);\n        } catch (e) {\n          // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n        }\n        return original.call(this, eventName, callback, options);\n      };\n    });\n  }\n\n  /**\n   * Wrap timer functions and event targets to catch errors\n   * and provide better metadata.\n   */\n  public setupOnce(): void {\n    this._ignoreOnError = this._ignoreOnError;\n\n    const global = getGlobalObject();\n\n    fill(global, 'setTimeout', this._wrapTimeFunction.bind(this));\n    fill(global, 'setInterval', this._wrapTimeFunction.bind(this));\n    fill(global, 'requestAnimationFrame', this._wrapRAF.bind(this));\n\n    [\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    ].forEach(this._wrapEventTarget.bind(this));\n  }\n}\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn: any): string {\n  try {\n    return (fn && fn.name) || '<anonymous>';\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 '<anonymous>';\n  }\n}\n","import { API, getCurrentHub } from '@sentry/core';\nimport { Breadcrumb, BreadcrumbHint, Integration, Severity, WrappedFunction } from '@sentry/types';\nimport {\n  fill,\n  getEventDescription,\n  getGlobalObject,\n  isString,\n  logger,\n  normalize,\n  parseUrl,\n  safeJoin,\n  supportsHistory,\n  supportsNativeFetch,\n} from '@sentry/utils';\n\nimport { BrowserClient } from '../client';\nimport { breadcrumbEventHandler, keypressEventHandler, wrap } from '../helpers';\n\nconst global = getGlobalObject<Window>();\nlet lastHref: string | undefined;\n/**\n * @hidden\n */\nexport interface SentryWrappedXMLHttpRequest extends XMLHttpRequest {\n  [key: string]: any;\n  __sentry_xhr__?: {\n    method?: string;\n    url?: string;\n    status_code?: number;\n  };\n}\n\n/** JSDoc */\ninterface BreadcrumbIntegrations {\n  console?: boolean;\n  dom?: boolean;\n  fetch?: boolean;\n  history?: boolean;\n  sentry?: boolean;\n  xhr?: boolean;\n}\n\n/** Default Breadcrumbs instrumentations */\nexport class Breadcrumbs implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public name: string = Breadcrumbs.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'Breadcrumbs';\n\n  /** JSDoc */\n  private readonly _options: BreadcrumbIntegrations;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options?: BreadcrumbIntegrations) {\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  /** JSDoc */\n  private _instrumentConsole(): void {\n    if (!('console' in global)) {\n      return;\n    }\n    ['debug', 'info', 'warn', 'error', 'log', 'assert'].forEach(function(level: string): void {\n      if (!(level in global.console)) {\n        return;\n      }\n\n      fill(global.console, level, function(originalConsoleLevel: () => any): any {\n        return function(...args: any[]): any {\n          const breadcrumbData = {\n            category: 'console',\n            data: {\n              extra: {\n                arguments: normalize(args, 3),\n              },\n              logger: 'console',\n            },\n            level: Severity.fromString(level),\n            message: safeJoin(args, ' '),\n          };\n\n          if (level === 'assert') {\n            if (args[0] === false) {\n              breadcrumbData.message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`;\n              breadcrumbData.data.extra.arguments = normalize(args.slice(1), 3);\n            }\n          }\n\n          Breadcrumbs.addBreadcrumb(breadcrumbData, {\n            input: args,\n            level,\n          });\n\n          // this fails for some browsers. :(\n          if (originalConsoleLevel) {\n            Function.prototype.apply.call(originalConsoleLevel, global.console, args);\n          }\n        };\n      });\n    });\n  }\n\n  /** JSDoc */\n  private _instrumentDOM(): void {\n    if (!('document' in global)) {\n      return;\n    }\n\n    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n    // to the document. Do this before we instrument addEventListener.\n    global.document.addEventListener('click', breadcrumbEventHandler('click'), false);\n    global.document.addEventListener('keypress', keypressEventHandler(), false);\n\n    // After hooking into document bubbled up click and keypresses events, we also hook into user handled click & keypresses.\n    ['EventTarget', 'Node'].forEach((target: string) => {\n      const proto = (global as any)[target] && (global as any)[target].prototype;\n\n      if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) {\n        return;\n      }\n\n      fill(proto, 'addEventListener', function(\n        original: () => void,\n      ): (\n        eventName: string,\n        fn: EventListenerOrEventListenerObject,\n        options?: boolean | AddEventListenerOptions,\n      ) => void {\n        return function(\n          this: any,\n          eventName: string,\n          fn: EventListenerOrEventListenerObject,\n          options?: boolean | AddEventListenerOptions,\n        ): (eventName: string, fn: EventListenerOrEventListenerObject, capture?: boolean, secure?: boolean) => void {\n          if (fn && (fn as any).handleEvent) {\n            if (eventName === 'click') {\n              fill(fn, 'handleEvent', function(innerOriginal: () => void): (caughtEvent: Event) => void {\n                return function(this: any, event: Event): (event: Event) => void {\n                  breadcrumbEventHandler('click')(event);\n                  return innerOriginal.call(this, event);\n                };\n              });\n            }\n            if (eventName === 'keypress') {\n              fill(fn, 'handleEvent', function(innerOriginal: () => void): (caughtEvent: Event) => void {\n                return function(this: any, event: Event): (event: Event) => void {\n                  keypressEventHandler()(event);\n                  return innerOriginal.call(this, event);\n                };\n              });\n            }\n          } else {\n            if (eventName === 'click') {\n              breadcrumbEventHandler('click', true)(this);\n            }\n            if (eventName === 'keypress') {\n              keypressEventHandler()(this);\n            }\n          }\n\n          return original.call(this, eventName, fn, options);\n        };\n      });\n\n      fill(proto, 'removeEventListener', function(\n        original: () => void,\n      ): (\n        this: any,\n        eventName: string,\n        fn: EventListenerObject,\n        options?: boolean | EventListenerOptions,\n      ) => () => void {\n        return function(\n          this: any,\n          eventName: string,\n          fn: EventListenerObject,\n          options?: boolean | EventListenerOptions,\n        ): () => void {\n          let callback = (fn as any) as WrappedFunction;\n          try {\n            callback = callback && (callback.__sentry_wrapped__ || callback);\n          } catch (e) {\n            // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n          }\n          return original.call(this, eventName, callback, options);\n        };\n      });\n    });\n  }\n\n  /** JSDoc */\n  private _instrumentFetch(): void {\n    if (!supportsNativeFetch()) {\n      return;\n    }\n\n    fill(global, 'fetch', function(originalFetch: () => void): () => void {\n      return function(...args: any[]): void {\n        const fetchInput = args[0];\n        let method = 'GET';\n        let url;\n\n        if (typeof fetchInput === 'string') {\n          url = fetchInput;\n        } else if ('Request' in global && fetchInput instanceof Request) {\n          url = fetchInput.url;\n          if (fetchInput.method) {\n            method = fetchInput.method;\n          }\n        } else {\n          url = String(fetchInput);\n        }\n\n        if (args[1] && args[1].method) {\n          method = args[1].method;\n        }\n\n        const client = getCurrentHub().getClient<BrowserClient>();\n        const dsn = client && client.getDsn();\n        if (dsn) {\n          const filterUrl = new API(dsn).getStoreEndpoint();\n          // if Sentry key appears in URL, don't capture it as a request\n          // but rather as our own 'sentry' type breadcrumb\n          if (filterUrl && url.includes(filterUrl)) {\n            if (method === 'POST' && args[1] && args[1].body) {\n              addSentryBreadcrumb(args[1].body);\n            }\n            return originalFetch.apply(global, args);\n          }\n        }\n\n        const fetchData: {\n          method: string;\n          url: string;\n          status_code?: number;\n        } = {\n          method,\n          url,\n        };\n\n        return originalFetch\n          .apply(global, args)\n          .then((response: Response) => {\n            fetchData.status_code = response.status;\n            Breadcrumbs.addBreadcrumb(\n              {\n                category: 'fetch',\n                data: fetchData,\n                type: 'http',\n              },\n              {\n                input: args,\n                response,\n              },\n            );\n            return response;\n          })\n          .catch((error: Error) => {\n            Breadcrumbs.addBreadcrumb(\n              {\n                category: 'fetch',\n                data: fetchData,\n                level: Severity.Error,\n                type: 'http',\n              },\n              {\n                error,\n                input: args,\n              },\n            );\n\n            throw error;\n          });\n      };\n    });\n  }\n\n  /** JSDoc */\n  private _instrumentHistory(): void {\n    if (!supportsHistory()) {\n      return;\n    }\n\n    const captureUrlChange = (from: string | undefined, to: string | undefined): void => {\n      const parsedLoc = parseUrl(global.location.href);\n      const parsedTo = parseUrl(to as string);\n      let parsedFrom = parseUrl(from as string);\n\n      // Initial pushState doesn't provide `from` information\n      if (!parsedFrom.path) {\n        parsedFrom = parsedLoc;\n      }\n\n      // because onpopstate only tells you the \"new\" (to) value of location.href, and\n      // not the previous (from) value, we need to track the value of the current URL\n      // state ourselves\n      lastHref = to;\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        // tslint:disable-next-line:no-parameter-reassignment\n        to = parsedTo.relative;\n      }\n      if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n        // tslint:disable-next-line:no-parameter-reassignment\n        from = parsedFrom.relative;\n      }\n\n      Breadcrumbs.addBreadcrumb({\n        category: 'navigation',\n        data: {\n          from,\n          to,\n        },\n      });\n    };\n\n    // record navigation (URL) changes\n    const oldOnPopState = global.onpopstate;\n    global.onpopstate = (...args: any[]) => {\n      const currentHref = global.location.href;\n      captureUrlChange(lastHref, currentHref);\n      if (oldOnPopState) {\n        return oldOnPopState.apply(this, args);\n      }\n    };\n\n    /**\n     * @hidden\n     */\n    function historyReplacementFunction(originalHistoryFunction: () => void): () => void {\n      // note history.pushState.length is 0; intentionally not declaring\n      // params to preserve 0 arity\n      return function(this: History, ...args: any[]): void {\n        const url = args.length > 2 ? args[2] : undefined;\n        // url argument is optional\n        if (url) {\n          // coerce to string (this is what pushState does)\n          captureUrlChange(lastHref, String(url));\n        }\n        return originalHistoryFunction.apply(this, args);\n      };\n    }\n\n    fill(global.history, 'pushState', historyReplacementFunction);\n    fill(global.history, 'replaceState', historyReplacementFunction);\n  }\n\n  /** JSDoc */\n  private _instrumentXHR(): void {\n    if (!('XMLHttpRequest' in global)) {\n      return;\n    }\n\n    /**\n     * @hidden\n     */\n    function wrapProp(prop: string, xhr: XMLHttpRequest): void {\n      // TODO: Fix XHR types\n      if (prop in xhr && typeof (xhr as { [key: string]: any })[prop] === 'function') {\n        fill(xhr, prop, original =>\n          wrap(original, {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: (original && original.name) || '<anonymous>',\n              },\n              handled: true,\n              type: 'instrument',\n            },\n          }),\n        );\n      }\n    }\n\n    const xhrproto = XMLHttpRequest.prototype;\n    fill(\n      xhrproto,\n      'open',\n      originalOpen =>\n        function(this: SentryWrappedXMLHttpRequest, ...args: any[]): void {\n          const url = args[1];\n          this.__sentry_xhr__ = {\n            method: args[0],\n            url: args[1],\n          };\n\n          const client = getCurrentHub().getClient<BrowserClient>();\n          const dsn = client && client.getDsn();\n          if (dsn) {\n            const filterUrl = new API(dsn).getStoreEndpoint();\n            // if Sentry key appears in URL, don't capture it as a request\n            // but rather as our own 'sentry' type breadcrumb\n            if (isString(url) && (filterUrl && url.includes(filterUrl))) {\n              this.__sentry_own_request__ = true;\n            }\n          }\n\n          return originalOpen.apply(this, args);\n        },\n    );\n\n    fill(\n      xhrproto,\n      'send',\n      originalSend =>\n        function(this: SentryWrappedXMLHttpRequest, ...args: any[]): void {\n          const xhr = this; // tslint:disable-line:no-this-assignment\n\n          if (xhr.__sentry_own_request__) {\n            addSentryBreadcrumb(args[0]);\n          }\n\n          /**\n           * @hidden\n           */\n          function onreadystatechangeHandler(): void {\n            if (xhr.readyState === 4) {\n              if (xhr.__sentry_own_request__) {\n                return;\n              }\n              try {\n                // touching statusCode in some platforms throws\n                // an exception\n                if (xhr.__sentry_xhr__) {\n                  xhr.__sentry_xhr__.status_code = xhr.status;\n                }\n              } catch (e) {\n                /* do nothing */\n              }\n              Breadcrumbs.addBreadcrumb(\n                {\n                  category: 'xhr',\n                  data: xhr.__sentry_xhr__,\n                  type: 'http',\n                },\n                {\n                  xhr,\n                },\n              );\n            }\n          }\n\n          ['onload', 'onerror', 'onprogress'].forEach(prop => {\n            wrapProp(prop, xhr);\n          });\n\n          if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') {\n            fill(xhr, 'onreadystatechange', function(original: () => void): void {\n              return wrap(\n                original,\n                {\n                  mechanism: {\n                    data: {\n                      function: 'onreadystatechange',\n                      handler: (original && original.name) || '<anonymous>',\n                    },\n                    handled: true,\n                    type: 'instrument',\n                  },\n                },\n                onreadystatechangeHandler,\n              );\n            });\n          } else {\n            // if onreadystatechange wasn't actually set by the page on this xhr, we\n            // are free to set our own and capture the breadcrumb\n            xhr.onreadystatechange = onreadystatechangeHandler;\n          }\n          return originalSend.apply(this, args);\n        },\n    );\n  }\n\n  /**\n   * Helper that checks if integration is enabled on the client.\n   * @param breadcrumb Breadcrumb\n   * @param hint BreadcrumbHint\n   */\n  public static addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n    if (getCurrentHub().getIntegration(Breadcrumbs)) {\n      getCurrentHub().addBreadcrumb(breadcrumb, hint);\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  public setupOnce(): void {\n    if (this._options.console) {\n      this._instrumentConsole();\n    }\n    if (this._options.dom) {\n      this._instrumentDOM();\n    }\n    if (this._options.xhr) {\n      this._instrumentXHR();\n    }\n    if (this._options.fetch) {\n      this._instrumentFetch();\n    }\n    if (this._options.history) {\n      this._instrumentHistory();\n    }\n  }\n}\n\n/** JSDoc */\nfunction addSentryBreadcrumb(serializedData: string): void {\n  // There's always something that can go wrong with deserialization...\n  try {\n    const event: { [key: string]: any } = JSON.parse(serializedData);\n    Breadcrumbs.addBreadcrumb(\n      {\n        category: 'sentry',\n        event_id: event.event_id,\n        level: event.level || Severity.fromString('error'),\n        message: getEventDescription(event),\n      },\n      {\n        event,\n      },\n    );\n  } catch (_oO) {\n    logger.error('Error while adding sentry type breadcrumb');\n  }\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';\n\nimport { exceptionFromStacktrace } from '../parsers';\nimport { _computeStackTrace } from '../tracekit';\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\n/** Adds SDK info to an event. */\nexport class LinkedErrors implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public readonly name: string = LinkedErrors.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'LinkedErrors';\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _key: string;\n\n  /**\n   * @inheritDoc\n   */\n  private readonly _limit: number;\n\n  /**\n   * @inheritDoc\n   */\n  public constructor(options: { key?: string; limit?: number } = {}) {\n    this._key = options.key || DEFAULT_KEY;\n    this._limit = options.limit || DEFAULT_LIMIT;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    addGlobalEventProcessor((event: Event, hint?: EventHint) => {\n      const self = getCurrentHub().getIntegration(LinkedErrors);\n      if (self) {\n        return self._handler(event, hint);\n      }\n      return event;\n    });\n  }\n\n  /**\n   * @inheritDoc\n   */\n  private _handler(event: Event, hint?: EventHint): Event | null {\n    if (!event.exception || !event.exception.values || !hint || !(hint.originalException instanceof Error)) {\n      return event;\n    }\n    const linkedErrors = this._walkErrorTree(hint.originalException, this._key);\n    event.exception.values = [...linkedErrors, ...event.exception.values];\n    return event;\n  }\n\n  /**\n   * @inheritDoc\n   */\n  private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): Exception[] {\n    if (!(error[key] instanceof Error) || stack.length + 1 >= this._limit) {\n      return stack;\n    }\n    const stacktrace = _computeStackTrace(error[key]);\n    const exception = exceptionFromStacktrace(stacktrace);\n    return this._walkErrorTree(error[key], key, [exception, ...stack]);\n  }\n}\n","import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';\nimport { Event, Integration } from '@sentry/types';\nimport { getGlobalObject } from '@sentry/utils';\n\nconst global = getGlobalObject<Window>();\n\n/** UserAgent */\nexport class UserAgent implements Integration {\n  /**\n   * @inheritDoc\n   */\n  public name: string = UserAgent.id;\n\n  /**\n   * @inheritDoc\n   */\n  public static id: string = 'UserAgent';\n\n  /**\n   * @inheritDoc\n   */\n  public setupOnce(): void {\n    addGlobalEventProcessor((event: Event) => {\n      if (getCurrentHub().getIntegration(UserAgent)) {\n        if (!global.navigator || !global.location) {\n          return event;\n        }\n\n        // HTTP Interface: https://docs.sentry.io/clientdev/interfaces/http/?platform=javascript\n        const request = event.request || {};\n        request.url = request.url || global.location.href;\n        request.headers = request.headers || {};\n        request.headers['User-Agent'] = global.navigator.userAgent;\n\n        return {\n          ...event,\n          request,\n        };\n      }\n      return event;\n    });\n  }\n}\n","import { getCurrentHub, initAndBind, Integrations as CoreIntegrations } from '@sentry/core';\nimport { getGlobalObject } from '@sentry/utils';\n\nimport { BrowserOptions } from './backend';\nimport { BrowserClient, ReportDialogOptions } from './client';\nimport { wrap as internalWrap } from './helpers';\nimport { Breadcrumbs, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations';\n\nexport const defaultIntegrations = [\n  new CoreIntegrations.InboundFilters(),\n  new CoreIntegrations.FunctionToString(),\n  new TryCatch(),\n  new Breadcrumbs(),\n  new GlobalHandlers(),\n  new LinkedErrors(),\n  new UserAgent(),\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 */\nexport function init(options: BrowserOptions = {}): void {\n  if (options.defaultIntegrations === undefined) {\n    options.defaultIntegrations = defaultIntegrations;\n  }\n  if (options.release === undefined) {\n    const window = getGlobalObject<Window>();\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  initAndBind(BrowserClient, options);\n}\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the global scope.\n */\nexport function showReportDialog(options: ReportDialogOptions = {}): void {\n  if (!options.eventId) {\n    options.eventId = getCurrentHub().lastEventId();\n  }\n  const client = getCurrentHub().getClient<BrowserClient>();\n  if (client) {\n    client.showReportDialog(options);\n  }\n}\n\n/**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\nexport function lastEventId(): string | undefined {\n  return getCurrentHub().lastEventId();\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function forceLoad(): void {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nexport function onLoad(callback: () => void): void {\n  callback();\n}\n\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport function flush(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient<BrowserClient>();\n  if (client) {\n    return client.flush(timeout);\n  }\n  return Promise.reject(false);\n}\n\n/**\n * A promise that resolves when all current events have been sent.\n * If you provide a timeout and the queue takes longer to drain the promise returns false.\n *\n * @param timeout Maximum time in ms the client should wait.\n */\nexport function close(timeout?: number): Promise<boolean> {\n  const client = getCurrentHub().getClient<BrowserClient>();\n  if (client) {\n    return client.close(timeout);\n  }\n  return Promise.reject(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 */\nexport function wrap(fn: Function): void {\n  // tslint:disable-next-line: no-unsafe-any\n  internalWrap(fn)();\n}\n","export {\n  Breadcrumb,\n  Request,\n  SdkInfo,\n  Event,\n  Exception,\n  Response,\n  Severity,\n  StackFrame,\n  Stacktrace,\n  Status,\n  Thread,\n  User,\n} from '@sentry/types';\n\nexport {\n  addGlobalEventProcessor,\n  addBreadcrumb,\n  captureException,\n  captureEvent,\n  captureMessage,\n  configureScope,\n  getHubFromCarrier,\n  getCurrentHub,\n  Hub,\n  Scope,\n  setContext,\n  setExtra,\n  setExtras,\n  setTag,\n  setTags,\n  setUser,\n  Span,\n  withScope,\n} from '@sentry/core';\n\nexport { BrowserOptions } from './backend';\nexport { BrowserClient, ReportDialogOptions } from './client';\nexport { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk';\nexport { SDK_NAME, SDK_VERSION } from './version';\n\nimport { Integrations as CoreIntegrations } from '@sentry/core';\nimport { getGlobalObject } from '@sentry/utils';\n\nimport * as BrowserIntegrations from './integrations';\nimport * as Transports from './transports';\n\nlet windowIntegrations = {};\n\n// This block is needed to add compatibility with the integrations packages when used with a CDN\n// tslint:disable: no-unsafe-any\nconst _window = getGlobalObject<Window>();\nif (_window.Sentry && _window.Sentry.Integrations) {\n  windowIntegrations = _window.Sentry.Integrations;\n}\n// tslint:enable: no-unsafe-any\n\nconst INTEGRATIONS = {\n  ...windowIntegrations,\n  ...CoreIntegrations,\n  ...BrowserIntegrations,\n};\n\nexport { INTEGRATIONS as Integrations, Transports };\n","import { getCurrentHub } from '@sentry/hub';\nimport { Client, Options } from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\n/** A class object that can instanciate Client objects. */\nexport type ClientClass<F extends Client, O extends Options> = new (options: O) => F;\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instanciate.\n * @param options Options to pass to the client.\n */\nexport function initAndBind<F extends Client, O extends Options>(clientClass: ClientClass<F, O>, options: O): void {\n  if (options.debug === true) {\n    logger.enable();\n  }\n  getCurrentHub().bindClient(new clientClass(options));\n}\n"],"names":["LogLevel","Severity","Status","level","Debug","Info","Warning","Error","Fatal","Critical","Log","code","Success","RateLimit","Invalid","Failed","Unknown","setPrototypeOf","Object","__proto__","Array","obj","proto","prop","hasOwnProperty","message","_super","_this","name","_newTarget","prototype","constructor","tslib_1.__extends","isError","wat","toString","call","isErrorEvent","isDOMError","isString","isPrimitive","isPlainObject","isThenable","Boolean","then","fallbackGlobalObject","getGlobalObject","process","global","window","self","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","length","replace","c","r","Math","random","parseUrl","url","match","query","fragment","host","path","protocol","relative","getEventDescription","event","exception","values","type","value","event_id","consoleSandbox","callback","originalConsole","console","wrappedLevels","forEach","__sentry__","__sentry_wrapped__","__sentry_original__","result","keys","addExceptionTypeValue","mechanism","handled","PREFIX","this","_enabled","Logger","_i","args","log","join","warn","error","__SENTRY__","logger","_hasWeakSet","WeakSet","_inner","Memo","has","add","i","push","delete","splice","fill","source","replacement","original","wrapped","defineProperties","enumerable","_Oo","jsonSize","encodeURI","split","utf8Length","JSON","stringify","normalizeToSize","object","depth","maxSize","serialized","normalize","normalizeValue","key","_events","document","Event","getPrototypeOf","Number","isNaN","walk","memo","Infinity","normalized","serializeValue","toJSON","err","stack","objectifyError","acc","isArray","memoize","innerKey","unmemoize","input","parse","_oO","States","_limit","PromiseBuffer","undefined","task","isReady","_buffer","indexOf","remove","catch","Promise","reject","SentryError","timeout","resolve","capturedSetTimeout","setTimeout","all","clearTimeout","truncate","str","max","substr","safeJoin","delimiter","output","String","e","keysToEventMessage","maxLength","includedKeys","slice","isMatchingPattern","pattern","test","includes","supportsFetch","Headers","Request","Response","supportsReferrerPolicy","referrerPolicy","PENDING","_setResult","RESOLVED","reason","REJECTED","state","_state","_resolve","_reject","_value","_executeHandlers","_handlers","h","onFail","onSuccess","handler","concat","SyncPromise","onfulfilled","onrejected","_attachHandler","val","_","TRACEPARENT_REGEXP","_traceId","_spanId","_sampled","_parent","substring","Span","parent","sampled","traceparent","matches","parent_1","span_id","trace_id","Scope","_scopeListeners","_eventProcessors","_notifyingListeners","processors","hint","index","processor","final","_notifyEventProcessors","user","_user","_notifyScopeListeners","tags","_tags","extra","_extra","fingerprint","_fingerprint","_level","transaction","_transaction","context","_context","span","_span","parentSpan","setParent","setSpan","scope","newScope","assign","I","_breadcrumbs","breadcrumb","maxBreadcrumbs","timestamp","Date","getTime","mergedBreadcrumb","tslib_1.__spread","contexts","trace","_applyFingerprint","breadcrumbs","getGlobalEventProcessors","globalEventProcessors","addGlobalEventProcessor","API_VERSION","client","_version","_stack","Hub","method","top","getStackTop","_a","version","getStack","parentScope","clone","getClient","pop","pushScope","popScope","eventId","_lastEventId","finalHint","syntheticException","originalException","_invokeClient","_b","beforeBreadcrumb","_c","finalBreadcrumb","addBreadcrumb","min","setUser","setTags","extras","setExtras","setTag","setExtra","setContext","oldHub","makeMain","integration","getIntegration","id","getSpan","sentry-trace","toTraceparent","getMainCarrier","carrier","hub","registry","getHubFromCarrier","setHubOnCarrier","getCurrentHub","mod","request","hasHubOnCarrier","isOlderThan","activeDomain","module","require","active","registryHubTopStack","callOnHub","captureException","withScope","DSN_REGEX","from","_fromString","_fromComponents","_validate","Dsn","withPassword","pass","port","projectId","exec","components","component","parseInt","dsn","_dsnObject","API","_getBaseUrl","getStoreEndpointPath","auth","sentry_key","sentry_version","getStoreEndpoint","map","encodeURIComponent","clientName","clientVersion","header","Content-Type","X-Sentry-Auth","dialogOptions","endpoint","encodedOptions","email","installedIntegrations","setupIntegrations","options","integrations","defaultIntegrations","userIntegrations","userIntegrationsNames_1","pickedIntegrationsNames_1","defaultIntegration","userIntegration","getIntegrationsToSetup","setupOnce","setupIntegration","originalFunctionToString","backendClass","_backend","_options","_dsn","_integrations","BaseClient","_processing","_getBackend","eventFromException","_processEvent","finalEvent","eventFromMessage","_isClientProcessing","status","clearInterval","interval","getTransport","close","transportFlushed","ready","flush","getOptions","enabled","ticked","setInterval","environment","release","dist","maxValueLength","prepared","_addIntegrations","sdk","applyToEvent","sdkInfo","integrationsArray","beforeSend","sampleRate","_isEnabled","_prepareEvent","data","sendEvent","beforeSendResult","_handleAsyncBeforeSend","processedEvent","NoopTransport","Skipped","_transport","_setupTransport","BaseBackend","_exception","_hint","_message","FunctionToString","Function","apply","DEFAULT_IGNORE_ERRORS","InboundFilters","clientOptions","_mergeOptions","_shouldDropEvent","_isSentryError","_isIgnoredError","_isBlacklistedUrl","_getEventFilterUrl","_isWhitelistedUrl","ignoreInternal","ignoreErrors","_getPossibleEventMessages","some","blacklistUrls","whitelistUrls","oO","stacktrace","frames_1","frames","filename","frames_2","TraceKit","_n","Sn","On","kn","UNKNOWN_FUNCTION","ERROR_TYPES_RE","_has","getLocationHref","location","href","_report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastException","lastExceptionStack","_notifyHandlers","isWindowError","_collectWindowErrors","inner","_traceKitWindowOnError","lineNo","columnNo","errorObj","_computeStackTrace","_augmentStackTraceWithInitialElement","processLastException","line","column","msg","groups","func","mode","arguments","_traceKitWindowOnUnhandledRejection","detail","_lastExceptionStack","_lastException","ex","incomplete","_subscribe","_installGlobalHandler","onerror","_installGlobalUnhandledRejectionHandler","onunhandledrejection","_computeStackTraceFromStackProp","submatch","parts","element","chrome","gecko","winjs","geckoEval","chromeEval","lines","reference","j","isNative","columnNumber","stackInfo","initial","unshift","partial","_computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","sourceURL","fileName","lineNumber","description","computeStackTrace","opera10Regex","opera11Regex","_computeStackTraceFromStacktraceProp","lineRE1","lineRE2","lineRE3","scripts","getElementsByTagName","inlineScriptBlocks","s","src","_computeStackTraceFromOperaMultiLineMessage","_linesOfContext","STACKTRACE_LIMIT","exceptionFromStacktrace","prepareFramesForEvent","eventFromStacktrace","localStack","firstFrameFunction","lastFrameFunction","frame","colno","function","in_app","lineno","reverse","keypressTimeout","lastCapturedEvent","getStoreEndpointWithUrlEncodedAuth","BaseTransport","drain","FetchTransport","defaultOptions","body","fetch","response","fromHttpCode","XHRTransport","XMLHttpRequest","onreadystatechange","readyState","open","send","BrowserBackend","transportOptions","transport","_buildEvent","domException","name_1","message_1","messageEvent","exceptionKeys","sort","__serialized__","eventFromPlainObject","synthetic","stringException","attachStacktrace","SDK_NAME","BrowserClient","platform","packages","getDsn","script","createElement","async","getReportDialogEndpoint","onLoad","onload","head","appendChild","debounceDuration","ignoreOnError","wrap","fn","before","sentryWrapped","wrappedArguments","arg","handleEvent","addEventProcessor","property","defineProperty","getOwnPropertyDescriptor","configurable","get","debounceTimer","breadcrumbEventHandler","eventName","debounce","captureBreadcrumb","target","_htmlTreeAsString","category","keypressEventHandler","tagName","isContentEditable","elem","nextStr","currentElem","out","height","len","sepLength","_htmlElementAsString","parentNode","className","classes","attr","toLowerCase","attrWhitelist","getAttribute","GlobalHandlers","stackTraceLimit","captureEvent","_eventFromGlobalHandler","TryCatch","originalCallback","getFunctionName","bind","_ignoreOnError","_wrapTimeFunction","_wrapRAF","_wrapEventTarget","lastHref","Breadcrumbs","dom","history","sentry","xhr","originalConsoleLevel","breadcrumbData","fromString","addEventListener","innerOriginal","isNativeFunc","doc","sandbox","hidden","contentWindow","removeChild","supportsNativeFetch","originalFetch","fetchInput","filterUrl","addSentryBreadcrumb","fetchData","status_code","isChromePackagedApp","app","runtime","hasHistoryApi","pushState","replaceState","captureUrlChange","to","parsedLoc","parsedTo","parsedFrom","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","originalHistoryFunction","xhrproto","originalOpen","__sentry_xhr__","__sentry_own_request__","originalSend","onreadystatechangeHandler","wrapProp","_instrumentConsole","_instrumentDOM","_instrumentXHR","_instrumentFetch","_instrumentHistory","serializedData","event_1","DEFAULT_KEY","DEFAULT_LIMIT","LinkedErrors","_key","limit","_handler","linkedErrors","_walkErrorTree","UserAgent","navigator","headers","userAgent","CoreIntegrations.InboundFilters","CoreIntegrations.FunctionToString","windowIntegrations","_window","Sentry","Integrations","INTEGRATIONS","CoreIntegrations","BrowserIntegrations","window_1","SENTRY_RELEASE","clientClass","debug","enable","bindClient","initAndBind","lastEventId","showReportDialog","internalWrap"],"mappings":"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"}