From ee6d8fb1d62f65a09d1360db703d46ae2cea7f9d Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Fri, 12 Jan 2024 12:57:47 -0600 Subject: [PATCH] fix(sentry): add santization to transactions and add filtering for chrome extension --- .../layout/Notifications/Notifications.tsx | 9 ------- src/utils/sentry.ts | 25 ++++++++++++++++++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/components/layout/Notifications/Notifications.tsx b/src/components/layout/Notifications/Notifications.tsx index eabdc869d..0badd0eec 100644 --- a/src/components/layout/Notifications/Notifications.tsx +++ b/src/components/layout/Notifications/Notifications.tsx @@ -20,15 +20,6 @@ export default function Notifications() { function handleError(error: Error | { message: string; name: string }) { // TODO: check for duplicate errors if (error instanceof Error) { - if ( - JSON.stringify(error.stack).includes( - 'chrome-extension://aflkmfhebedbjioipglgcbcmnbpgliof/injected.js', - ) - ) { - // we want to ignore errors from this extension - // https://permanent-data-solutions-e7.sentry.io/issues/4774988645/?project=4504894571085824&query=is%3Aunresolved&referrer=issue-stream&statsPeriod=14d&stream_index=15 - return; - } const sentryID = Sentry.captureException(error); console.debug('Error sent to sentry:', error, sentryID); } diff --git a/src/utils/sentry.ts b/src/utils/sentry.ts index d680c75b4..383970bad 100644 --- a/src/utils/sentry.ts +++ b/src/utils/sentry.ts @@ -31,6 +31,15 @@ const sentry = tracesSampleRate: 1.0, environment: ENVIRONMENT, beforeSend(event) { + if (shouldFilterEvent(event)) { + return null; + } + return sanitizeEvent(event); + }, + beforeSendTransaction(event) { + if (shouldFilterEvent(event)) { + return null; + } return sanitizeEvent(event); }, }) @@ -38,7 +47,21 @@ const sentry = export default sentry; -const sanitizeEvent = (event: Sentry.Event): Sentry.Event => { +const filterMessages = new Set([ + 'chrome-extension://aflkmfhebedbjioipglgcbcmnbpgliof/injected.js', +]); + +const shouldFilterEvent = (event: Sentry.Event): boolean => { + const isFiltered = [...filterMessages].some((message) => + event.exception?.values?.some((value) => + value.value?.includes(message.toLowerCase()), + ), + ); + + return isFiltered; +}; + +const sanitizeEvent = (event: Sentry.Event): Sentry.Event | null => { // Remove user's IP address if (event.request) { if (event.request.headers) {