{"version":3,"file":"micro-sentry-browser.mjs","sources":["../../../../libs/browser/src/lib/utils/is-matching-pattern.ts","../../../../libs/browser/src/lib/consts/max-breadcrumbs.ts","../../../../libs/browser/src/lib/services/browser-micro-sentry-client.ts","../../../../libs/browser/src/micro-sentry-browser.ts"],"sourcesContent":["export function isMatchingPattern(\n  value: string,\n  pattern: RegExp | string\n): boolean {\n  if (Object.prototype.toString.call(pattern) === '[object RegExp]') {\n    return (pattern as RegExp).test(value);\n  }\n\n  if (typeof pattern === 'string') {\n    return value.indexOf(pattern) !== -1;\n  }\n\n  return false;\n}\n","export const MAX_BREADCRUMBS = 100;\n","import {\n  Breadcrumb,\n  Extras,\n  User,\n  MicroSentryClient,\n  SentryRequestBody,\n  Severity,\n  Tags,\n  QueryString,\n} from '@micro-sentry/core';\nimport { State } from '../models/state';\nimport { MicroSentryPlugin } from '../models/plugin';\nimport { BrowserSentryClientOptions } from '../models/browser-sentry-client-options';\nimport { isMatchingPattern } from '../utils/is-matching-pattern';\nimport { MAX_BREADCRUMBS } from '../consts/max-breadcrumbs';\n\nfunction getWindow(): Window {\n  return window;\n}\n\nexport class BrowserMicroSentryClient extends MicroSentryClient {\n  private readonly breadcrumbsKeyName = 'breadcrumbs';\n  private destroyed = false;\n  private readonly plugins: MicroSentryPlugin[];\n  private readonly beforeSend: NonNullable<\n    BrowserSentryClientOptions['beforeSend']\n  >;\n  private readonly beforeBreadcrumb: NonNullable<\n    BrowserSentryClientOptions['beforeBreadcrumb']\n  >;\n  private readonly blacklistUrls: NonNullable<\n    BrowserSentryClientOptions['blacklistUrls']\n  >;\n  private readonly ignoreErrors: NonNullable<\n    BrowserSentryClientOptions['ignoreErrors']\n  >;\n  private readonly release?: string;\n  private readonly maxBreadcrumbs: number;\n\n  constructor(\n    private options: BrowserSentryClientOptions,\n    readonly window: Window = getWindow()\n  ) {\n    super(options);\n\n    const {\n      plugins = [],\n      beforeSend = (req: SentryRequestBody) => req,\n      beforeBreadcrumb = (breadcrumb: Breadcrumb) => breadcrumb,\n      blacklistUrls = [],\n      ignoreErrors = [],\n      release = undefined,\n      maxBreadcrumbs = MAX_BREADCRUMBS,\n    } = this.options || {} || [];\n\n    this.plugins = plugins.map((Plugin) => new Plugin(this));\n    this.beforeSend = beforeSend;\n    this.beforeBreadcrumb = beforeBreadcrumb;\n    this.blacklistUrls = blacklistUrls;\n    this.ignoreErrors = ignoreErrors;\n    this.release = release;\n    this.maxBreadcrumbs =\n      maxBreadcrumbs >= 0 ? maxBreadcrumbs : MAX_BREADCRUMBS;\n  }\n\n  protected _state: State = {};\n\n  get state(): State {\n    return this._state;\n  }\n\n  clearState() {\n    this._state = {};\n  }\n\n  setTags(tags: Tags): this {\n    this.setKeyState('tags', { ...tags });\n\n    return this;\n  }\n\n  setTag(key: string, value: string): this {\n    this.extendState({ tags: { [key]: value } });\n\n    return this;\n  }\n\n  setExtra(key: string, value: string): this {\n    this.extendState({ extra: { [key]: value } });\n\n    return this;\n  }\n\n  setExtras(extras: Extras): this {\n    this.setKeyState('extra', { ...extras });\n\n    return this;\n  }\n\n  setUser(user: User | null): this {\n    this.setKeyState('user', user ? { ...user } : undefined);\n\n    return this;\n  }\n\n  clone(): BrowserMicroSentryClient {\n    const client = new BrowserMicroSentryClient({\n      ...this.options,\n      plugins: [],\n    });\n\n    client.extendState(this.state);\n\n    return client;\n  }\n\n  withScope(fn: (client: BrowserMicroSentryClient) => void) {\n    const clone = this.clone();\n\n    fn(clone);\n\n    clone.destroy();\n\n    this.setBreadcrumbs(undefined);\n  }\n\n  addBreadcrumb(breadcrumb: Breadcrumb): void {\n    const result = this.beforeBreadcrumb(breadcrumb);\n\n    if (!result) {\n      return;\n    }\n\n    this.extendState({\n      [this.breadcrumbsKeyName]: [\n        {\n          timestamp: Date.now() / 1_000,\n          ...result,\n        },\n      ],\n    });\n\n    this.trimBreadcrumbs();\n  }\n\n  setBreadcrumbs(breadcrumbs: Breadcrumb[] | undefined) {\n    this.setKeyState(this.breadcrumbsKeyName, breadcrumbs);\n    this.trimBreadcrumbs();\n  }\n\n  captureMessage(message: string, level?: Severity) {\n    this.send({\n      ...this.getRequestBlank(),\n      message,\n      level,\n    });\n  }\n\n  destroy() {\n    this.destroyed = true;\n\n    this.plugins.forEach((plugin) => {\n      if (plugin.destroy) {\n        plugin.destroy();\n      }\n    });\n  }\n\n  isIgnoredError(event: SentryRequestBody): boolean {\n    if (!this.ignoreErrors.length) {\n      return false;\n    }\n\n    return this.getPossibleEventMessages(event).some((message) =>\n      this.ignoreErrors.some((pattern) => isMatchingPattern(message, pattern))\n    );\n  }\n\n  extractQueryString(originalUrl: string): QueryString | undefined {\n    let url = originalUrl;\n\n    if (!url) {\n      return undefined;\n    }\n\n    if (url.startsWith('/')) {\n      url = `http://prefix${url}`;\n    }\n\n    try {\n      const queryString = new URL(url).search.slice(1);\n\n      return queryString.length ? queryString : undefined;\n    } catch (e) {\n      return undefined;\n    }\n  }\n\n  protected override getRequestBlank(): SentryRequestBody {\n    const url = this.window.location.toString();\n\n    return {\n      request: {\n        url,\n        query_string: this.extractQueryString(url),\n        headers: {\n          'User-Agent': this.window.navigator.userAgent,\n        },\n      },\n      ...super.getRequestBlank(),\n      sdk: {\n        name: 'micro-sentry.javascript.browser',\n        version: '0.0.0',\n      },\n      ...this.state,\n    };\n  }\n\n  protected override send(request: SentryRequestBody) {\n    if (\n      this.destroyed ||\n      this.isDeniedUrl(request) ||\n      this.isIgnoredError(request)\n    ) {\n      return;\n    }\n\n    const beforeSendResult = this.beforeSend({\n      release: this.release,\n      ...request,\n    });\n\n    if (!beforeSendResult) {\n      return;\n    }\n\n    super.send(beforeSendResult);\n\n    this.setBreadcrumbs(undefined);\n  }\n\n  private getPossibleEventMessages(event: SentryRequestBody): string[] {\n    if (event.message) {\n      return [event.message];\n    }\n\n    if (event.exception) {\n      try {\n        const { type = '', value = '' } =\n          (event.exception.values && event.exception.values[0]) || {};\n\n        return [`${value}`, `${type}: ${value}`];\n      } catch (e) {\n        return [];\n      }\n    }\n\n    return [];\n  }\n\n  private isDeniedUrl(event: SentryRequestBody): boolean {\n    if (!this.blacklistUrls.length) {\n      return false;\n    }\n\n    const url = this.getEventFilterUrl(event);\n\n    return !url\n      ? false\n      : this.blacklistUrls.some((pattern) => isMatchingPattern(url, pattern));\n  }\n\n  private getEventFilterUrl(event: SentryRequestBody): string | null {\n    try {\n      if (event.exception) {\n        const frames =\n          event.exception.values &&\n          event.exception.values[0].stacktrace &&\n          event.exception.values[0].stacktrace.frames;\n\n        return (frames && frames[frames.length - 1].filename) || null;\n      }\n\n      return null;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  private extendState(newState: Partial<State>) {\n    this._state = (Object.keys(newState) as (keyof State)[]).reduce(\n      (acc, key) => {\n        const stateValue = this._state[key];\n        const stateArray = Array.isArray(stateValue) ? stateValue : null;\n\n        const newStateValue = newState[key];\n        const newStateArray = Array.isArray(newStateValue)\n          ? newStateValue\n          : null;\n\n        return {\n          ...acc,\n          [key]:\n            stateArray || newStateArray\n              ? [...(stateArray || []), ...(newStateArray || [])]\n              : {\n                  ...(typeof stateValue !== 'string' ? stateValue : {}),\n                  ...(typeof newStateValue !== 'string' ? newStateValue : {}),\n                },\n        };\n      },\n      this._state\n    );\n  }\n\n  private setKeyState<T extends keyof State>(key: T, value: State[T]) {\n    this._state[key] = value;\n  }\n\n  private getKeyState<T extends keyof State>(key: T): State[T] {\n    return this._state[key];\n  }\n\n  private trimBreadcrumbs(): void {\n    const breadcrumbs = this.getKeyState(this.breadcrumbsKeyName);\n    if (breadcrumbs && (breadcrumbs.length ?? 0) > this.maxBreadcrumbs) {\n      this.setKeyState(\n        this.breadcrumbsKeyName,\n        this.maxBreadcrumbs > 0 ? breadcrumbs.slice(-this.maxBreadcrumbs) : []\n      );\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}