Files
n8n-enterprise-unlocked/packages/editor-ui/src/plugins/sentry.ts
2024-11-15 14:00:21 +01:00

61 lines
1.3 KiB
TypeScript

import type { Plugin } from 'vue';
import { AxiosError } from 'axios';
import { ResponseError } from '@/utils/apiUtils';
import * as Sentry from '@sentry/vue';
const ignoredErrors = [
{ instanceof: AxiosError },
{ instanceof: ResponseError, message: /ECONNREFUSED/ },
{ instanceof: ResponseError, message: "Can't connect to n8n." },
{ instanceof: ResponseError, message: 'Unauthorized' },
{ instanceof: Error, message: /ResizeObserver/ },
] as const;
export function beforeSend(event: Sentry.ErrorEvent, { originalException }: Sentry.EventHint) {
if (
!originalException ||
ignoredErrors.some((entry) => {
const typeMatch = originalException instanceof entry.instanceof;
if (!typeMatch) {
return false;
}
if ('message' in entry) {
if (entry.message instanceof RegExp) {
return entry.message.test(originalException.message ?? '');
} else {
return originalException.message === entry.message;
}
}
return true;
})
) {
return null;
}
return event;
}
export const SentryPlugin: Plugin = {
install: (app) => {
if (!window.sentry?.dsn) {
return;
}
const { dsn, release, environment, serverName } = window.sentry;
Sentry.init({
app,
dsn,
release,
environment,
beforeSend,
});
if (serverName) {
Sentry.setTag('server_name', serverName);
}
},
};