Source samples/supabase-demo/app
✕ 4 failed
We read 9 text files of your app's source (framework: vite), of which 7 ship to the browser by the framework's conventions, and matched them against known secret formats. Nothing was run. 1 Supabase anon key appeared, which is public by design and not flagged. Matched values are shown redacted.
Limits: a pattern scan finds known key formats and secret-named settings; a key in an unknown format, built from pieces, or injected only at deploy time is not seen. Where the framework's conventions do not settle whether a file ships to the browser, a match is reported at medium severity for a human to confirm.
No Supabase admin key in the browser
✕ Failed
A Supabase service-role key is in code that ships to the browser.
What we checked
We scanned the files that ship to your users' browsers for a Supabase service-role key. That key skips every access rule in your database.
What happened
The code scan matched 1 place(s) in code that ships or may ship to the browser.
Why it matters
Anyone who opens your site can copy the key and read, change, or delete every row and file in your project, ignoring all access rules.
How to fix it
Rotate the key in the Supabase dashboard now, remove it from the client code, and move the work that needs it into an Edge Function or server route.
Evidence strength: Found by code scan. A pattern scan of your app's source found this at the file and line shown. A pattern match, not a demonstration of misuse: confirm the line, and rotate the key if it is real.
Where it is (file and line, values redacted)
-
High
A Supabase service-role key (a JWT whose payload says role service_role) in code that ships to the browser (vite app source, bundled for the browser): src/lib/admin.ts, line 7. Matched: eyJhbG... (240 characters).
samples/supabase-demo/app/src/lib/admin.ts, line 7
Technical record
- Claim
claim.secrets.client.supabase-service-key
No Supabase service-role key (a JWT with role service_role, or an sb_secret_ key) appears in code that ships to the browser.
- Evidence record
ev_claim_secrets_client_supabase_service_key
- Content hash
sha256:31500755f76baff5f9f1b1955a037ca44760d60f54bc3ec4c5f536a6974073c4
- Assurance
deterministic / heuristic / single-instance (repeatability / strength / scope)
- Gate
- Failed: 1 assurance-bearing violation(s) detected (static-analysis). Assurance measure 0.00 (bounded in 0 to 0.95, never certainty).
- Notes
- framework read from package.json: vite
9 text file(s) scanned, 7 classified as shipping to the browser
0 .env file(s) not opened (by design)
1 Supabase anon key seen; public by design, not flagged
No other service secret in the browser
✕ Failed
A service secret key is in code that ships to the browser.
What we checked
We scanned the files that ship to the browser for secret keys of common services: payments, cloud storage, AI, source control, messaging, and private keys.
What happened
The code scan matched 1 place(s) in code that ships or may ship to the browser.
Why it matters
Anyone can copy the key and use the service as you: charge cards, run up AI or cloud bills, or read your data there.
How to fix it
Rotate the key with the provider, remove it from the client code, and call the service from a server route or Edge Function instead.
Evidence strength: Found by code scan. A pattern scan of your app's source found this at the file and line shown. A pattern match, not a demonstration of misuse: confirm the line, and rotate the key if it is real.
Where it is (file and line, values redacted)
-
High
An AWS access key id in code that ships to the browser (vite app source, bundled for the browser): src/lib/uploads.ts, line 6. Matched: AKIAIO... (20 characters).
samples/supabase-demo/app/src/lib/uploads.ts, line 6
Technical record
- Claim
claim.secrets.client.service-key
No other service secret key (payment, cloud, AI, source control, messaging, or a private key) appears in code that ships to the browser.
- Evidence record
ev_claim_secrets_client_service_key
- Content hash
sha256:86e40e8464a2b5326812b20b1c44c11b84c63d1968d1299c802ef579d2595eb7
- Assurance
deterministic / heuristic / single-instance (repeatability / strength / scope)
- Gate
- Failed: 1 assurance-bearing violation(s) detected (static-analysis). Assurance measure 0.00 (bounded in 0 to 0.95, never certainty).
- Notes
- framework read from package.json: vite
9 text file(s) scanned, 7 classified as shipping to the browser
0 .env file(s) not opened (by design)
1 Supabase anon key seen; public by design, not flagged
No token-signing secret in the browser
✕ Failed
A JWT signing secret is in code that ships to the browser.
What we checked
We scanned the files that ship to the browser for a hard-coded JWT signing secret.
What happened
The code scan matched 1 place(s) in code that ships or may ship to the browser.
Why it matters
With the signing secret, anyone can mint login tokens for any user, including admin roles.
How to fix it
Rotate the JWT secret (in Supabase: Project Settings, then JWT keys), remove it from the client, and keep it only in server-side configuration.
Evidence strength: Found by code scan. A pattern scan of your app's source found this at the file and line shown. A pattern match, not a demonstration of misuse: confirm the line, and rotate the key if it is real.
Where it is (file and line, values redacted)
-
High
A hard-coded JWT signing secret in code that ships to the browser (vite app source, bundled for the browser): src/lib/auth.ts, line 3. Matched: supe... (55 characters).
samples/supabase-demo/app/src/lib/auth.ts, line 3
Technical record
- Claim
claim.secrets.client.jwt-secret
No JWT signing secret is hard-coded in code that ships to the browser.
- Evidence record
ev_claim_secrets_client_jwt_secret
- Content hash
sha256:d4c26c7795a470f4ef5b2ca44a3bfcf95360d6afc9b1c19840cbf1dd654f8337
- Assurance
deterministic / heuristic / single-instance (repeatability / strength / scope)
- Gate
- Failed: 1 assurance-bearing violation(s) detected (static-analysis). Assurance measure 0.00 (bounded in 0 to 0.95, never certainty).
- Notes
- framework read from package.json: vite
9 text file(s) scanned, 7 classified as shipping to the browser
0 .env file(s) not opened (by design)
1 Supabase anon key seen; public by design, not flagged
No secret behind a browser-exposed setting
✕ Failed
A secret is read through a browser-exposed environment variable.
What we checked
We looked for environment variables that the build tool copies into the browser bundle (names starting VITE_, NEXT_PUBLIC_, REACT_APP_, EXPO_PUBLIC_, NUXT_PUBLIC_, GATSBY_, or PUBLIC_) whose names say they hold a secret.
What happened
The code scan matched 1 place(s) in code that ships or may ship to the browser.
Why it matters
Whatever value that setting holds at build time is visible to every visitor, even though it never appears in your source code.
How to fix it
Rename the variable without the public prefix, read it only in server code (an Edge Function or API route), and rotate the key if a build with it was ever deployed.
Evidence strength: Found by code scan. A pattern scan of your app's source found this at the file and line shown. A pattern match, not a demonstration of misuse: confirm the line, and rotate the key if it is real.
Where it is (file and line, values redacted)
-
High
The browser-exposed setting VITE_STRIPE_SECRET_KEY, whose name says it holds a secret in code that ships to the browser (vite app source, bundled for the browser): src/lib/billing.ts, line 4. Matched: variable name VITE_STRIPE_SECRET_KEY (its value lives in the build environment and was not read).
samples/supabase-demo/app/src/lib/billing.ts, line 4
Technical record
- Claim
claim.secrets.client.public-env-secret
No secret is read through a browser-exposed environment variable (VITE_, NEXT_PUBLIC_, REACT_APP_, EXPO_PUBLIC_, NUXT_PUBLIC_, GATSBY_, PUBLIC_ prefixes), which the build copies into the bundle.
- Evidence record
ev_claim_secrets_client_public_env_secret
- Content hash
sha256:17c276fdaa91ee58398376716d649bd0cd0f51484de3a8331912a31b7ccf3be9
- Assurance
deterministic / heuristic / single-instance (repeatability / strength / scope)
- Gate
- Failed: 1 assurance-bearing violation(s) detected (static-analysis). Assurance measure 0.00 (bounded in 0 to 0.95, never certainty).
- Notes
- framework read from package.json: vite
9 text file(s) scanned, 7 classified as shipping to the browser
0 .env file(s) not opened (by design)
1 Supabase anon key seen; public by design, not flagged