// Error reporter (client). Was flowkey:raven; replaced by @sentry/browser // behind the same `.log()` facade (see the server counterpart). Enabled only // when Meteor.settings.public.sentryPublicDSN is set; otherwise a plain console // logger. ErrorBoundary calls `.log(error, info)` where info is React's // { componentStack } — passed to Sentry as extra context. import * as Sentry from '@sentry/browser'; import { Meteor } from 'meteor/meteor'; const dsn = Meteor.settings.public.sentryPublicDSN; const enabled = !!dsn; if (enabled) { Sentry.init({ dsn, environment: Meteor.isDevelopment ? 'development' : 'production', tracesSampleRate: 0, // Send events same-origin to our own server, which forwards them to // GlitchTip. GlitchTip is fronted by Cloudflare, whose bot protection // returns 503 to the browser's cross-site ingest beacons (server-side // requests pass fine). The tunnel sidesteps that entirely (and ad-blockers). // See imports/startup/server/sentryTunnel.js. tunnel: '/sentry-tunnel' }); } const ravenLogger = { log(error, info) { console.log(error); if (enabled) { Sentry.captureException(error, info ? { extra: { info } } : undefined); } } }; console.log(`sentryLogger (client) ${enabled ? 'enabled' : 'disabled'}`); export default ravenLogger;