mirror of
https://github.com/supabase/supabase.git
synced 2026-09-22 13:37:53 +08:00
15f80e5f9d
## Problem Docs discarded every browser exception because its third-party stack-frame filter never returned a value from its predicate. Errors captured by the page error boundaries were discarded too. ## Fix Use Studio's Sentry SDK tagging approach with a matching webpack application key, retaining page-crashing exceptions even when their frames are classified as third-party. Preserve consent and platform checks, and pass the source-map upload token through Turbo. ## How to test - Run `pnpm --filter docs run test:local:unwatch lib/sentry-client.test.ts` with the documented local Supabase prerequisites satisfied. Eleven filter regression checks passed locally using an isolated Vitest configuration. - On a production-mode preview with the docs DSN configured, accept telemetry consent and trigger a temporary client render error. Verify that the docs Sentry project receives it with `globalErrorBoundary: true` and readable stack traces. - Verify that third-party-only errors are filtered and declining consent suppresses browser reports. Prettier, focused filter/test TypeScript checks, and an in-memory transport check using the real Sentry SDK passed. Full app typecheck and lint are blocked locally by existing dependency/generated-file drift; the standard docs suite requires unavailable Docker access. Live Sentry ingestion and source-map uploads still need deployment verification. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved error monitoring to distinguish documentation app boundary crashes from other exceptions. - Reduced noise in error reports by filtering third-party-only errors and respecting platform and consent settings. - Preserved reporting for first-party failures and critical application crashes. - **Chores** - Improved Sentry build and deployment configuration for more consistent error tracking. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
31 lines
941 B
TypeScript
31 lines
941 B
TypeScript
'use client'
|
|
|
|
import * as Sentry from '@sentry/nextjs'
|
|
import Link from 'next/link'
|
|
import { useEffect } from 'react'
|
|
import { Button } from 'ui'
|
|
|
|
const ErrorPage = ({ error }) => {
|
|
useEffect(() => {
|
|
Sentry.captureException(error, { tags: { globalErrorBoundary: true } })
|
|
}, [error])
|
|
|
|
return (
|
|
<div className="h-[calc(100vh-var(--header-height))] w-full flex flex-col gap-8 p-8 items-center justify-center">
|
|
<span className="text-center text-5xl text-foreground-lighter">
|
|
Sorry, something went wrong
|
|
</span>
|
|
<div className="flex flex-row items-center gap-4">
|
|
<Button asChild variant="secondary" className="w-fit p-4 text-lg">
|
|
<Link href="/">Return to homepage</Link>
|
|
</Button>
|
|
<Button variant="secondary" className="w-fit p-4 text-lg" onClick={() => location.reload()}>
|
|
Refresh page
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default ErrorPage
|