You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.8 KiB
81 lines
2.8 KiB
import * as Sentry from "@sentry/browser"; |
|
import callsites from "callsites"; |
|
|
|
const SentryEnvHostnameMap: { [key: string]: string } = { |
|
"excalidraw.com": "production", |
|
"staging.excalidraw.com": "staging", |
|
"vercel.app": "staging", |
|
}; |
|
|
|
const SENTRY_DISABLED = import.meta.env.VITE_APP_DISABLE_SENTRY === "true"; |
|
|
|
// Disable Sentry locally or inside the Docker to avoid noise/respect privacy |
|
const onlineEnv = |
|
!SENTRY_DISABLED && |
|
Object.keys(SentryEnvHostnameMap).find( |
|
(item) => window.location.hostname.indexOf(item) >= 0, |
|
); |
|
|
|
Sentry.init({ |
|
dsn: onlineEnv |
|
? "https://7bfc596a5bf945eda6b660d3015a5460@sentry.io/5179260" |
|
: undefined, |
|
environment: onlineEnv ? SentryEnvHostnameMap[onlineEnv] : undefined, |
|
release: import.meta.env.VITE_APP_GIT_SHA, |
|
ignoreErrors: [ |
|
"undefined is not an object (evaluating 'window.__pad.performLoop')", // Only happens on Safari, but spams our servers. Doesn't break anything |
|
"InvalidStateError: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.", // Not much we can do about the IndexedDB closing error |
|
/(Failed to fetch|(fetch|loading) dynamically imported module)/i, // This is happening when a service worker tries to load an old asset |
|
/QuotaExceededError: (The quota has been exceeded|.*setItem.*Storage)/i, // localStorage quota exceeded |
|
"Internal error opening backing store for indexedDB.open", // Private mode and disabled indexedDB |
|
], |
|
integrations: [ |
|
Sentry.captureConsoleIntegration({ |
|
levels: ["error"], |
|
}), |
|
], |
|
beforeSend(event) { |
|
if (event.request?.url) { |
|
event.request.url = event.request.url.replace(/#.*$/, ""); |
|
} |
|
|
|
if (!event.exception) { |
|
event.exception = { |
|
values: [ |
|
{ |
|
type: "ConsoleError", |
|
value: event.message ?? "Unknown error", |
|
stacktrace: { |
|
frames: callsites() |
|
.slice(1) |
|
.filter( |
|
(frame) => |
|
frame.getFileName() && |
|
!frame.getFileName()?.includes("@sentry_browser.js"), |
|
) |
|
.map((frame) => ({ |
|
filename: frame.getFileName() ?? undefined, |
|
function: frame.getFunctionName() ?? undefined, |
|
in_app: !( |
|
frame.getFileName()?.includes("node_modules") ?? false |
|
), |
|
lineno: frame.getLineNumber() ?? undefined, |
|
colno: frame.getColumnNumber() ?? undefined, |
|
})), |
|
}, |
|
mechanism: { |
|
type: "instrument", |
|
handled: true, |
|
data: { |
|
function: "console.error", |
|
handler: "Sentry.beforeSend", |
|
}, |
|
}, |
|
}, |
|
], |
|
}; |
|
} |
|
|
|
return event; |
|
}, |
|
});
|
|
|