59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
import * as Sentry from "@sentry/vue";
|
|
|
|
function getSentryIntegrations() {
|
|
// don't load on server
|
|
if (!process.client) return [];
|
|
|
|
const router = useRouter();
|
|
const browserTracing = new Sentry.BrowserTracing({
|
|
routingInstrumentation: Sentry.vueRouterInstrumentation(router),
|
|
});
|
|
|
|
return [browserTracing];
|
|
}
|
|
|
|
|
|
export default defineNuxtPlugin({
|
|
name: 'sentry',
|
|
parallel: true,
|
|
async setup(nuxtApp) {
|
|
const vueApp = nuxtApp.vueApp;
|
|
|
|
const config = useRuntimeConfig();
|
|
|
|
Sentry.init({
|
|
app: vueApp,
|
|
dsn: config.public.SENTRY_DSN_PUBLIC ?? null,
|
|
integrations: getSentryIntegrations(),
|
|
|
|
// Set tracesSampleRate to 1.0 to capture 100%
|
|
// of transactions for performance monitoring.
|
|
// We recommend adjusting this value in production
|
|
tracesSampleRate: config.public.SENTRY_TRACES_SAMPLE_RATE,
|
|
|
|
// Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled
|
|
// tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
|
|
|
|
// This sets the sample rate. You may want this to be 100% while
|
|
// in development and sample at a lower rate in production
|
|
replaysSessionSampleRate: config.public.SENTRY_REPLAY_SAMPLE_RATE,
|
|
|
|
// If the entire session is not sampled, use the below sample rate to sample
|
|
// sessions when an error occurs.
|
|
replaysOnErrorSampleRate: config.public.SENTRY_ERROR_REPLAY_SAMPLE_RATE,
|
|
|
|
beforeSend(event) {
|
|
if (event.exception.values.length) {
|
|
// Don't send validation exceptions to Sentry
|
|
if (event.exception.values[0].type === 'FetchError' &&
|
|
event.exception.values[0].value.includes('422')
|
|
) {
|
|
return null
|
|
}
|
|
}
|
|
return event;
|
|
},
|
|
})
|
|
}
|
|
});
|