{"version":3,"file":"igo2-core-monitoring.mjs","sources":["../../../packages/core/monitoring/src/shared/monitoring.ts","../../../packages/core/monitoring/src/sentry/sentry.ts","../../../packages/core/monitoring/src/sentry/sentry.provider.ts","../../../packages/core/monitoring/src/sentry/sentry.utils.ts","../../../packages/core/monitoring/src/__mocks__/monitoring-mock.ts","../../../packages/core/monitoring/src/igo2-core-monitoring.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { MonitoringOptions } from './monitoring.interface';\n\nexport const MONITORING_OPTIONS = new InjectionToken<MonitoringOptions | null>(\n  'monitoring.options'\n);\n","import {\n  BrowserOptions,\n  SentryErrorHandler,\n  createErrorHandler,\n  getClient,\n  init\n} from '@sentry/angular';\n\nimport { SentryMonitoringOptions } from './sentry.interface';\n\nexport const createSentryErrorHandler = (\n  options: SentryMonitoringOptions\n): SentryErrorHandler => {\n  return createErrorHandler({\n    logErrors: options.logErrors,\n    ...(options.errorHandlerOptions ?? {})\n  });\n};\n\nexport const initSentry = (\n  options: SentryMonitoringOptions,\n  force?: boolean\n): void => {\n  const client = getClient();\n  if (!force && client) {\n    return;\n  }\n\n  init(options as unknown as BrowserOptions);\n};\n","import {\n  EnvironmentProviders,\n  ErrorHandler,\n  Provider,\n  inject,\n  provideAppInitializer\n} from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { TraceService, browserTracingIntegration } from '@sentry/angular';\n\nimport { MONITORING_OPTIONS } from '../shared';\nimport { createSentryErrorHandler, initSentry } from './sentry';\nimport { SentryMonitoringOptions } from './sentry.interface';\n\nexport const provideSentryMonitoring = (\n  options: SentryMonitoringOptions,\n  integrations?: SentryIntegrationFactory<SentryIntegrationKind>[]\n): (Provider | EnvironmentProviders)[] => {\n  const isEnabled = options.enabled !== undefined ? options.enabled : true;\n  if (!isEnabled) {\n    return [];\n  }\n\n  const providers: (Provider | EnvironmentProviders)[] = [\n    { provide: MONITORING_OPTIONS, useValue: options },\n    {\n      provide: ErrorHandler,\n      useFactory: () => createSentryErrorHandler(options)\n    }\n  ];\n\n  if (integrations) {\n    for (const integration of integrations) {\n      const value = integration(options);\n      providers.push(...value.providers);\n    }\n  }\n\n  initSentry(options);\n\n  return providers;\n};\n\nexport interface SentryIntegration<KindT extends SentryIntegrationKind> {\n  kind: KindT;\n  providers: (Provider | EnvironmentProviders)[];\n}\n\ntype SentryIntegrationFactory<KindT extends SentryIntegrationKind> = (\n  sentryOptions: SentryMonitoringOptions\n) => SentryIntegration<KindT>;\n\nexport enum SentryIntegrationKind {\n  Tracing = 0,\n  Replay = 1\n}\n\nexport function withTracingIntegration(\n  options: Parameters<typeof browserTracingIntegration>[0]\n): SentryIntegrationFactory<SentryIntegrationKind.Tracing> {\n  return (sentryOptions: SentryMonitoringOptions) => {\n    sentryOptions.integrations = [\n      ...(sentryOptions.integrations ?? []),\n      browserTracingIntegration(options)\n    ];\n\n    return {\n      kind: SentryIntegrationKind.Tracing,\n      providers: [\n        {\n          provide: TraceService,\n          deps: [Router]\n        },\n        // Force instantiate TraceService to avoid require it in any constructor.\n        provideAppInitializer(() => {\n          inject(TraceService);\n          return;\n        })\n      ]\n    };\n  };\n}\n","import { BaseUser } from '@igo2/core/user';\n\nimport { setUser } from '@sentry/angular';\n\nexport const identifySentryUser = (user: BaseUser | null): void => {\n  setUser(\n    user\n      ? {\n          id: user.id,\n          username: `${user.firstName} ${user.lastName}`,\n          email: user.email\n        }\n      : null\n  );\n};\n","import { SentryMonitoringOptions } from '../sentry';\nimport { AnyMonitoringOptions } from '../shared';\n\nexport const MOCK_SENTRY_OPTIONS: SentryMonitoringOptions = {\n  provider: 'sentry',\n  dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',\n  identifyUser: true\n};\n\nexport const MOCK_MONITORING_OPTIONS: AnyMonitoringOptions =\n  MOCK_SENTRY_OPTIONS;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAIa,kBAAkB,GAAG,IAAI,cAAc,CAClD,oBAAoB;;ACKf,MAAM,wBAAwB,GAAG,CACtC,OAAgC,KACV;AACtB,IAAA,OAAO,kBAAkB,CAAC;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,QAAA,IAAI,OAAO,CAAC,mBAAmB,IAAI,EAAE;AACtC,KAAA,CAAC;AACJ,CAAC;AAEM,MAAM,UAAU,GAAG,CACxB,OAAgC,EAChC,KAAe,KACP;AACR,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE;AAC1B,IAAA,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;QACpB;IACF;IAEA,IAAI,CAAC,OAAoC,CAAC;AAC5C,CAAC;;MCdY,uBAAuB,GAAG,CACrC,OAAgC,EAChC,YAAgE,KACzB;AACvC,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;IACxE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,SAAS,GAAwC;AACrD,QAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE;AAClD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,UAAU,EAAE,MAAM,wBAAwB,CAAC,OAAO;AACnD;KACF;IAED,IAAI,YAAY,EAAE;AAChB,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;QACpC;IACF;IAEA,UAAU,CAAC,OAAO,CAAC;AAEnB,IAAA,OAAO,SAAS;AAClB;IAWY;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,qBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU;AACZ,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAAA,EAAA,CAAA,CAAA;AAK3B,SAAU,sBAAsB,CACpC,OAAwD,EAAA;IAExD,OAAO,CAAC,aAAsC,KAAI;QAChD,aAAa,CAAC,YAAY,GAAG;AAC3B,YAAA,IAAI,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC;YACrC,yBAAyB,CAAC,OAAO;SAClC;QAED,OAAO;YACL,IAAI,EAAE,qBAAqB,CAAC,OAAO;AACnC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,YAAY;oBACrB,IAAI,EAAE,CAAC,MAAM;AACd,iBAAA;;gBAED,qBAAqB,CAAC,MAAK;oBACzB,MAAM,CAAC,YAAY,CAAC;oBACpB;AACF,gBAAA,CAAC;AACF;SACF;AACH,IAAA,CAAC;AACH;;AC9EO,MAAM,kBAAkB,GAAG,CAAC,IAAqB,KAAU;AAChE,IAAA,OAAO,CACL;AACE,UAAE;YACE,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,QAAQ,CAAA,CAAE;YAC9C,KAAK,EAAE,IAAI,CAAC;AACb;UACD,IAAI,CACT;AACH;;ACXO,MAAM,mBAAmB,GAA4B;AAC1D,IAAA,QAAQ,EAAE,QAAQ;AAClB,IAAA,GAAG,EAAE,gDAAgD;AACrD,IAAA,YAAY,EAAE;;AAGT,MAAM,uBAAuB,GAClC;;ACVF;;AAEG;;;;"}