supermemory/apps/web/instrumentation-client.ts

53 lines
1.8 KiB
TypeScript

// This file configures the initialization of Sentry on the client.
// The added config here will be used whenever a users loads a page in their browser.
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
import * as Sentry from "@sentry/nextjs"
function sentryShouldDropExpectedNonActionableError(event: {
message?: string
exception?: { values?: Array<{ type?: string; value?: string }> }
}): boolean {
const patterns = [
/user location is not supported/i,
/this email domain is not allowed/i,
]
const matches = (s: string | undefined) =>
s != null && patterns.some((re) => re.test(s))
if (matches(event.message)) return true
for (const ex of event.exception?.values ?? []) {
if (matches(ex.value)) return true
}
return false
}
Sentry.init({
dsn: "https://2451ebfd1a7490f05fa7776482df81b6@o4508385422802944.ingest.us.sentry.io/4509872269819904",
// Add optional integrations for additional features
integrations: [Sentry.replayIntegration()],
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
tracesSampleRate: 1,
// Enable logs to be sent to Sentry
enableLogs: true,
// Define how likely Replay events are sampled.
// This sets the sample rate to be 10%. You may want this to be 100% while
// in development and sample at a lower rate in production
replaysSessionSampleRate: 0.1,
// Define how likely Replay events are sampled when an error occurs.
replaysOnErrorSampleRate: 1.0,
// Setting this option to true will print useful information to the console while you're setting up Sentry.
debug: false,
beforeSend(event) {
if (sentryShouldDropExpectedNonActionableError(event)) return null
return event
},
})
export const onRouterTransitionStart = Sentry.captureRouterTransitionStart