import * as Sentry from '@sentry/browser';
import { getConfig } from '@utils';

const {
  sentry: { key, enabled, user, environment, browser }
} = getConfig();

// We need to check for key presence here as we do not have a dsn for browser yet
if (enabled && key) {
  Sentry.init({
    dsn: key,
    environment,
    ignoreErrors: [
      // Ignore errors generated by a Microsoft crawler.
      // See https://forum.sentry.io/t/unhandledrejection-non-error-promise-rejection-captured-with-value/14062
      'Non-error promise rejection captured with keys',
      'Non-Error promise rejection captured with value'
    ]
  });

  Sentry.configureScope((scope) => {
    scope.setUser(user);
    scope.setExtra('browser', browser.modern ? 'modern' : 'legacy');
  });

  // Register a way to explicitely capture messages from a different bundle.
  addEventListener('sentry:capture-exception', (event) => {
    const error = (event as CustomEvent).detail;
    Sentry.captureException(error);
  });
}