Commit Graph
22 Commits
Author SHA1 Message Date
Alaister YoungandAlaister Young 74bc0a8e27 fix(studio): initialize Sentry on the TanStack build (captures were silent no-ops) (#47666)
Stacked on #47657 (base is `alaister/tanstack-migration-fixes`; retarget
to `master` once that merges).

The TanStack runtime never ran `Sentry.init` —
`instrumentation-client.ts` is a Next-convention file nothing imports
under TanStack Start, so every `Sentry.captureException` on that build
(including the `routes/__root.tsx` error-boundary /
`routerErrorComponent` reports) was a silent no-op.

- **Shared config source**: the entire client config moves verbatim from
`instrumentation-client.ts` into `lib/sentry-client-options.ts`
(`buildSentryClientOptions`). Both runtimes build from it, so Next and
TanStack can't drift — the builds differ only in two explicit knobs.
- **TanStack init**: `sentry.tanstack.ts` initializes `@sentry/react`
from `getRouter()` (TanStack Start's real client bootstrap — the
earliest point with the router instance), wiring
`tanstackRouterBrowserTracingIntegration(router)`. Window-guarded +
idempotent; `router.tsx` is TanStack-only so the Next build is
untouched. (Named without `.client.` — Start's import-protection fails
the build for `*.client.*` in the server graph.)
- **Third-party error filter is intentionally Next-only**: without the
bundler-injected `applicationKey` metadata (only `withSentryConfig`
provides it), the SDK tags *every* event `third_party_code: true` and
`beforeSend` would drop them all — recreating the silent no-op with a
DSN set. Follow-up: add `@sentry/vite-plugin` moduleMetadata, then
enable.
- **DSN-less builds stay crash-free**: `vite.config.ts` inlines
`undefined` for unset
`NEXT_PUBLIC_SENTRY_DSN`/`NEXT_PUBLIC_SENTRY_ENVIRONMENT` (a literal
`process.env.*` in the bundle is the exact `process is not defined`
class #47657 fixed). No-DSN → disabled client, plus the existing
`IS_PLATFORM`/consent gates.
- Tests: `instrumentation-client.test.ts` moved to
`lib/sentry-client-options.test.ts` with all 36 assertions kept, plus
integration-gating and Next/TanStack parity tests. `tsc` clean; full
`vite build --mode test` passes.

Follow-up (separate): server-side Sentry for the Start handler
(`server.ts` entry + `@sentry/node`-style init).

## To test

- **Locally (no DSN set)**: load the TanStack build — no Sentry network
requests, no console errors, and crucially no `ReferenceError: process
is not defined` (the define fallback). Forcing an error must not POST to
any `/envelope` endpoint.
- **On a preview/deploy (DSN set, telemetry consent accepted)**: throw a
test error (e.g. crash a route component) → a POST to
`o…ingest.sentry.io/api/…/envelope/` fires, and the event lands in
Sentry with a `codeSampleRate` tag and **no** `third_party_code` tag.
Navigation spans named after TanStack routes appear when the 2% pageload
trace samples in.
- **Next build regression check**: the Next dev/preview still reports
errors exactly as before (`instrumentation-client.ts` now builds its
options from the same shared source).



---

### Review feedback: Sentry `/envelope` never fires on TanStack (Joshen)

Root-caused: `@sentry/core`'s `Client.sendSession` silently drops the
session when the client has no `release`. The Next build gets a release
injected by `withSentryConfig` (the Vercel commit SHA); the Vite build
runs no Sentry bundler plugin, so it had no release → session envelopes
were discarded before transport → zero `/envelope` traffic
(errors/transactions are separate). Fix: inject `release:
NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA` on the TanStack build (vite.config
re-exposes `VERCEL_GIT_COMMIT_SHA` under the `NEXT_PUBLIC_` name, same
SHA the Next release resolves to). Also switched `integrations` to the
function form so defaults are preserved by contract (not just by current
SDK behavior). 45 unit tests green.

**To test (deploys only — the SHA is unset locally, so this can't be
reproduced on a local dev build):** on this PR's Vercel preview with a
DSN + telemetry consent, load any page and watch the Network tab for a
POST to `…ingest.sentry.io/…/envelope/` — a session envelope should now
fire on load, matching the Next build.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Improved client-side error and performance monitoring for the Studio
app across both router setups.
* Added support for passing release/version information into monitoring
data.

* **Bug Fixes**
* Reduced noisy error reporting by better filtering common browser,
extension, cancellation, and load-related issues.
* Prevented browser bundles from referencing missing environment values
at runtime.
* Made monitoring initialization safer in server-rendered and
client-only environments.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-07-09 18:41:03 +08:00
Paweł Gulbinowicz 10f49d85f1 chore(sentry): decrease tracesSampleRate to prevent blowing through quota (#44901)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Chore

## What is the current behavior?

100% of traces are being sent to Sentry, which alone would blew through
all of our quota leaving no spans available for other projects. For
April we are already rate limited.

## What is the new behavior?

Change `tracesSampleRate` to more reasonable value (0.02).


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Optimized performance monitoring sampling configuration to reduce
application overhead while maintaining essential error tracking and
diagnostics.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-04-15 14:34:51 +00:00
Alaister YoungandAlaister Young f8183479e7 chore(studio): switch to type: module and convert configs to ESM/TS (#44839)
Switch studio's package.json to `"type": "module"` so the package runs
as native ESM. This aligns the runtime module system with what we
actually write (`import`/`export`), improves tree-shaking, and reduces
friction with ESM-only dependencies.

**Changed:**
- `next.config.js` → `next.config.ts` – ESM imports/exports, proper TS
types, fixed type narrowing on redirect `has` and `basePath` fields
- `csp.js` → `csp.ts` – `module.exports.getCSP` → named `export
function`
- `tailwind.config.js` → `tailwind.config.ts` – ESM imports
- `postcss.config.js` – `module.exports` → `export default` (stays `.js`
since PostCSS doesn't support TS configs)

**Removed:**
- Unused `path` import in next config
- Deprecated Sentry `hideSourceMaps` option (default behavior in Sentry
v10)

**Added:**
- Type declaration for `config/tailwind.config` CJS package

## To test

- A general smoke test of studio should suffice

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Refactor**
* Modernized the Studio package to ES module style and improved
TypeScript typings and config declarations to reduce build/runtime
issues.
* Updated styling and post-processing configuration format for more
consistent tooling behavior.

* **Chores**
* Updated code ownership entries to reflect migrated/renamed
configuration files.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-04-14 18:44:28 +09:00
Charis 205cbe7d26 chore(studio}: enforce import order, remove bare import specifiers (#44585) 2026-04-07 20:34:10 -04:00
Ali Waseem 636dcaa264 fix(studio): fix and filter Sentry issues (#44401)
## Summary

Fixes and filters several noisy Sentry issues affecting Studio.

### Code fixes
- **SUPABASE-APP-BG0** — `TypeError: Cannot read properties of undefined
(reading 'toString')` in JsonEditor. Guarded against `undefined`
`jsonStr` when `prettifyJSON` receives an undefined value.
- **SUPABASE-APP-BKM** — `TypeError: Cannot read properties of undefined
(reading 'join')` in UpgradeWarnings. Added fallback for
`error.dependents` being undefined from the API.
- **SUPABASE-APP-BVE** — `RangeError: Invalid time value` in filter date
picker. Validated date before passing to `Calendar` component.

### Sentry `ignoreErrors` filters
- **SUPABASE-APP-B1N / SUPABASE-APP-BMF / SUPABASE-APP-E4Q** — `cmdk`
`useSyncExternalStore` subscribe race condition (Chrome variant).
- **SUPABASE-APP-E5M** — Same `cmdk` subscribe error (Safari variant).
- **SUPABASE-APP-ASG** — Firefox `Node.removeChild` DOM manipulation
error (Chrome variant was already filtered).
- **SUPABASE-APP-AWE** — Non-Error object exceptions (`Object captured
as exception with keys:`).

### Ignored in Sentry (no code change)
- **SUPABASE-APP-ASG** — Resolved (now filtered in code).
- **SUPABASE-APP-FK9** — `SyntaxError: Invalid or unexpected token` from
`react-markdown` parser. Single user, one-off.
- **SUPABASE-APP-EV3** — React fiber error from DOM manipulation. Single
user, already archived.

## Test plan
- [ ] Verify JsonEditor opens correctly with valid and missing JSON
values
- [ ] Verify UpgradeWarnings renders when `dependents` is undefined
- [ ] Verify filter date picker handles invalid date strings gracefully
2026-03-31 12:21:09 -06:00
Ali WaseemandCopilot Autofix powered by AI be7079a19c fix: sentry should report full page crashes in third party libraries (#43927)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

When a full page crash occurs due to a third party library erroring out,
we should report that error rather than hiding it

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-19 09:49:07 -06:00
Jordi Enric 91bb0c9b8d chore(sentry): set tracesSampleRate to 1.0 in studio configs (#43243)
Increase traces sampling rate to 100%
2026-03-02 10:23:46 -05:00
Jordi EnricandClaude Sonnet 4.6 36137c784b chore: sentry noise reduction (#42933)
Sentry was flooded with un-actionable events: browser extension errors,
network blips, React hydration
noise from DOM-manipulating extensions, and CriticalError issues that
were impossible to route because
they grouped by message string rather than type. This made it hard to
spot real regressions.

##  Changes:
- Improved client-side Sentry signal quality in
apps/studio/instrumentation-client.ts by replacing
custom third-party stack filtering with
Sentry.thirdPartyErrorFilterIntegration, plus stricter
    allowUrls filtering for Supabase/app frames.
- Added build-time Sentry bundle annotation in
apps/studio/next.config.js via
unstable_sentryWebpackPluginOptions.applicationKey = 'supabase-studio'
to support reliable third-party
    frame filtering.
- Expanded and reorganized ignoreErrors rules across client/server/edge
Sentry configs to suppress known
non-actionable noise (Next.js navigation internals, network/transient
chunk failures, extension/DOM-
    manipulation noise, hydration-noise patterns).
- Refactored critical error reporting in
apps/studio/lib/error-reporting.ts from captureMessage to
captureException with scoped tags (critical=true, context=<action>) and
synthetic CriticalError
    exceptions for better alerting/grouping.
- Updated tests in apps/studio/lib/error-reporting.test.ts to match the
new Sentry API usage (withScope
    + captureException) and assert on exception objects/tags behavior.
- 100% sampling (codeSampleRate = 1) for normal/useful errors.
- 1% sampling (codeSampleRate = 0.01) only for explicitly noisy classes:
      - Failed to construct 'URL': Invalid URL
      - Session error detected
- chunk-load failures (ChunkLoadError, Loading chunk ... failed, Loading
CSS chunk ... failed)
- Sent events are tagged with codeSampleRate so you can filter/segment
in Sentry dashboards.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 17:26:23 +01:00
Yogeshwaran C 83187d5836 fix: correct grammar in comments and user-facing copy (#42918)
## What kind of change does this PR introduce?

Grammar corrections in comments and user-facing text.

## What is the current behavior?

Several files have minor grammar issues:

- Missing contraction: "it an error" (should be "it's an error")
- Subject-verb disagreement: "a users loads" (should be "a user loads")
- Missing possessive apostrophe: "a users organization" and "a users
language" (should be "a user's")

## What is the new behavior?

All grammar issues are corrected:

- `apps/studio/instrumentation-client.ts` — "it's an error" + "a user
loads"
- `apps/docs/instrumentation-client.ts` — "a user loads"
- `apps/www/data/partners/index.tsx` — "a user's organization"
-
`apps/docs/content/troubleshooting/customizing-emails-by-language-KZ_38Q.mdx`
— "a user's language"
2026-02-19 23:10:41 +08:00
Ali Waseem e3f5e5e882 chore: move sentry ignore from ui to code (#42998)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

We had these error ignores inside of sentry, doesn't make sense and
rather should live next to the code
2026-02-19 07:34:54 -07:00
Jordi Enric b1dfb7e474 sentry: 0.1 sampling (#43003) 2026-02-18 15:39:57 -07:00
Jordi Enric d56517fb7a sentry: lower sampling (#42981)
lowers to 3%
2026-02-18 13:27:47 +00:00
Ali Waseem 4d369515bc fix: remove noise from Sentry (#42878)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES
2026-02-16 14:07:39 -07:00
Jordi Enric 591d46e491 chore: sentry performance monitoring (#42861)
- Added tracesSampleRate: 0.1 to all three Sentry configuration files
(client, server, edge)
    - Captures 10% of transactions for performance monitoring
- Previously: No performance data was being collected (missing this
config)
- Now: Sentry will track route performance, error rates per route, and
transaction data

  Why this was needed:
  - Without tracesSampleRate, Sentry's Performance tab was empty
  - Error rates per route were not visible
  - No transaction/route-level metrics were being collected
- The SDK was only capturing errors without context about which routes
they occurred on

  Impact:
- Enables route-based error tracking (see which endpoints/pages have
errors)
- Provides performance metrics per route (page load times, API response
times)
  - Allows monitoring of Web Vitals and navigation performance
  - 10% sample rate balances visibility with Sentry quota usage

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Fixed date display formatting in logs to ensure accurate timestamp
representation.

* **Chores**
* Enabled performance monitoring to collect transaction data and track
application behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-02-16 13:17:31 +00:00
Alaister Young 0ebef190fc [FE-2328] feat(studio): add sentry environment environment variable (#41769)
feat(studio): add sentry environment environment variable
2026-01-08 16:31:01 +08:00
Ali WaseemandCharis 0ec1c3810f Fix: Update sentry to ignore events that are causing noise (#40190)
* updated sentry client to support deny urls

* Update apps/studio/instrumentation-client.ts

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>

* updated formatting

* removed unneed extensions

---------

Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
2025-11-05 13:50:04 -07:00
CharisandJoshen Lim d8f7cc0d57 feat(support form): attach dashboard logs (#39539)
* o11y: mirror and sanitize breadcrumbs

Mirror Sentry breadcrumbs as the basis for our own support logging. Also
adds more sanitization to breadcrumbs.

* feat(support form): toggle for attaching dashboard  logs

Add a toggle to the support form when the category is "Dashboard bug",
to attach recent dashboard logs. Users can preview the attached logs and
opt out.

* feat(support links): dedicated support link component

Add a new component for support links, which:
- Uses the serializer for support link params to ensure
serialization/deserialization pairs correctly
- Snapshots breadcrumbs so the attached log on the support form will be
cut off at the support link click (otherwise we will get support form
actions cluttering up the log)

* tests(support form): extend timeout on flaky test

* Minor clean up

* fix(support form): allow url to specifically indicate no specified project

* minor nits

* Fix tests

* Fix tests

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2025-10-22 08:57:49 -04:00
Joshen Lim 73e6bdf1b6 Address Sentry issue (#38364)
* Address https://supabase.sentry.io/issues/6826153016

* Address https://supabase.sentry.io/issues/6785459028
2025-09-02 10:41:14 +07:00
Jordi Enric aea43f6c14 add missing onRouterTransitionStart (#37968)
* add missing onRouterTransitionStart

* Update apps/studio/instrumentation-client.ts
2025-08-25 11:12:24 +02:00
Raúl Barroso 29ee6a2992 style: use GitHub's right product name (#38099)
* style: use GitHub's right product name

* fix: use correct kotlin provider
2025-08-22 13:43:47 +02:00
Joshen Lim abf62572a4 Reinstate captureException in SessionTimeoutModal with lowered quota usage (#37925) 2025-08-14 15:41:28 +07:00
Jordi Enric 6424ae4c31 move sentry client config to instrumentation-client.ts (#37871)
* add instrumentation-client

* add env to turbojson so it dont yell at me
2025-08-12 17:18:13 +02:00