76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import type {App} from 'vue'
|
|
import type {Router} from 'vue-router'
|
|
import {AxiosError} from 'axios'
|
|
import {VERSION} from './version.json'
|
|
|
|
export default async function setupSentry(app: App, router: Router) {
|
|
const Sentry = await import('@sentry/vue')
|
|
|
|
Sentry.init({
|
|
app,
|
|
dsn: window.SENTRY_DSN ?? '',
|
|
release: `vikunja-frontend@${VERSION}`,
|
|
|
|
// cache offline errors
|
|
transport: Sentry.makeBrowserOfflineTransport(Sentry.makeFetchTransport),
|
|
integrations: [
|
|
Sentry.browserTracingIntegration({ router }),
|
|
Sentry.replayIntegration(),
|
|
],
|
|
|
|
// vue
|
|
trackComponents: true,
|
|
|
|
// Set tracesSampleRate to 1.0 to capture 100%
|
|
// of transactions for tracing.
|
|
// We recommend adjusting this value in production
|
|
tracesSampleRate: 1.0,
|
|
|
|
// Set `tracePropagationTargets` to control for which URLs trace propagation should be enabled
|
|
tracePropagationTargets: [
|
|
'localhost',
|
|
/^\//,
|
|
// /^https:\/\/yourserver\.io\/api/,
|
|
],
|
|
|
|
// Capture Replay for 10% of all sessions,
|
|
// plus for 100% of sessions with an error
|
|
replaysSessionSampleRate: 0.1,
|
|
replaysOnErrorSampleRate: 1.0,
|
|
|
|
|
|
beforeSend(event, hint) {
|
|
|
|
if ((typeof hint.originalException?.code !== 'undefined' &&
|
|
typeof hint.originalException?.message !== 'undefined')
|
|
|| hint.originalException instanceof AxiosError) {
|
|
return null
|
|
}
|
|
|
|
return event
|
|
},
|
|
})
|
|
|
|
// from https://docs.sentry.io/platforms/javascript/guides/vue/troubleshooting/
|
|
// under "Capturing resource 404s"
|
|
document.body.addEventListener(
|
|
'error',
|
|
(event) => {
|
|
if (!event.target) return
|
|
|
|
if (event.target.tagName === 'IMG') {
|
|
Sentry.captureMessage(
|
|
`Failed to load image: ${event.target.src}`,
|
|
'warning',
|
|
)
|
|
} else if (event.target.tagName === 'LINK') {
|
|
Sentry.captureMessage(
|
|
`Failed to load css: ${event.target.href}`,
|
|
'warning',
|
|
)
|
|
}
|
|
},
|
|
true, // useCapture - necessary for resource loading errors
|
|
)
|
|
}
|