Source: sync/site/logging/sentry-error-reporting.js

'use strict';

import * as platform from 'platform';

/** Report errors to Sentry
 * @module sentryErrorReporting
 */

import {host} from '../../../utility/host';
import {domains}  from '../../../utility/domains';

/** Initialize Sentry
 */
export default function sentryErrorReporting() {
  const COMMIT_HASH = process.env.COMMIT_HASH; // eslint-disable-line no-process-env

  if (host.isProduction || host.isStaging || host.isTesting) {
    // Load the secondary script to do the actual work (integrate it later possibly)
    const scriptNode = document.createElement('script');
    scriptNode.src = 'https://js.sentry-cdn.com/1d69a1d7420d4e7cb41674e7627f156f.min.js';
    scriptNode.setAttribute('crossorigin', 'anonymous');
    host.siteJSLoadingElement.parentNode.insertBefore( scriptNode, host.siteJSLoadingElement );

    scriptNode.addEventListener('load', () => {
      const location = host.locationDomain;
      const isAuthorizedDomain = !host.isProduction || domains.isOurDomain(location);

      /* eslint-disable no-undef */
      if (!isAuthorizedDomain) {
        Sentry.captureMessage(`Site JS is running on unauthorized domain: ${location}`, 'info');
      }

      Sentry.onLoad(() => { // eslint-disable-line no-undef
        const supportedBrowsers = {
          'Chrome': 80,
          'Chrome Mobile': 80,
          'Microsoft Edge': 80,
          'Firefox': 70,
          'Firefox Mobile': 70,
          'IE': 11,
          'Opera': 66,
          // Note: the Opera iOS version is considerably lower, but considering the low market share, I think it's fine
          'Opera Mobile': 60,
          'Safari': 11,
          'Samsung Internet': 7,
          'UC Browser': 10
        };

        Sentry.setTag('outdatedBrowser', (supportedBrowsers[platform.name] &&
          parseInt(platform.version.split('.')[0], 10) < supportedBrowsers[platform.name]));
        Sentry.setTag('detectedBrowserName', platform.name);
        Sentry.setTag('detectedBrowserVersion', platform.version.split('.')[0]);

        const options = { // eslint-disable-line no-undef
          environment: host.environment,
          ignoreErrors: [
            /'?\$'? is not defined/,
            /'?j(q|Q)uery'? is not defined/,
            /Can't find variable: \$/,
            /Can't find variable: jQuery/
          ],
          release: 'phm-goldenfrog-web@' + COMMIT_HASH, // eslint-disable-line camelcase
        };

        if (!isAuthorizedDomain) {
          options.beforeSend = (event) => {
            // We only want the "unauthorized domain" message to go through
            return event.level === 'info' ? event : null;
          };
        }
        Sentry.init(options);

        /* eslint-enable */
      });
    });
  } else {
     DEBUG && console.log("Commit Hash: " + COMMIT_HASH); /* FE-2856 */// eslint-disable-line
  }
}