59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import React from 'react';
|
|
import { createRoutesFromChildren, matchRoutes, useLocation, useNavigationType } from 'react-router-dom';
|
|
import { invoke } from '@tauri-apps/api';
|
|
import * as Sentry from '@sentry/react';
|
|
import { CaptureConsole } from '@sentry/integrations';
|
|
import { getVersion } from '@tauri-apps/api/app';
|
|
|
|
const SENTRY_DSN = 'SENTRY_DSN_JS';
|
|
|
|
async function initSentry() {
|
|
console.log('⚠ performance monitoring and error reporting enabled');
|
|
console.log('initializing sentry');
|
|
|
|
const dsn = await invoke<string | undefined>('get_env', { variable: SENTRY_DSN });
|
|
|
|
if (!dsn) {
|
|
console.warn(`unable to initialize sentry, ${SENTRY_DSN} env var not set`);
|
|
return;
|
|
}
|
|
|
|
Sentry.init({
|
|
dsn,
|
|
integrations: [
|
|
new Sentry.BrowserTracing({
|
|
// Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled
|
|
tracePropagationTargets: ['localhost'],
|
|
routingInstrumentation: Sentry.reactRouterV6Instrumentation(
|
|
React.useEffect,
|
|
useLocation,
|
|
useNavigationType,
|
|
createRoutesFromChildren,
|
|
matchRoutes,
|
|
),
|
|
}),
|
|
new Sentry.Replay(),
|
|
// captures Console API calls
|
|
new CaptureConsole({ levels: ['error', 'warn'] }),
|
|
],
|
|
|
|
// TODO adjust this in the future, 100% is not recommended for production
|
|
tracesSampleRate: 1.0,
|
|
|
|
// Capture Replay for 10% of all sessions,
|
|
// plus for 100% of sessions with an error
|
|
replaysSessionSampleRate: 0.1,
|
|
replaysOnErrorSampleRate: 1.0,
|
|
|
|
environment: process.env.NODE_ENV,
|
|
});
|
|
|
|
getVersion().then((version) => {
|
|
Sentry.setTag('app_version', version);
|
|
});
|
|
|
|
Sentry.setUser({ id: 'nym', ip_address: undefined });
|
|
}
|
|
|
|
export default initSentry;
|