• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase-flutter / 32250379512
89%

Build:
DEFAULT BRANCH: main
Ran 19 Aug 2026 12:01PM UTC
Jobs 10
Files 108
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

19 Aug 2026 11:59AM UTC coverage: 88.767% (+0.3%) from 88.436%
32250379512

push

github

web-flow
feat(auth): store PKCE verifiers per flow to survive overlapping flows (#1662)

## Summary

Each PKCE flow now keeps its code verifier in a slot of its own instead
of a single fixed key that a later flow silently overwrote. Starting an
OAuth sign-in while a password recovery was still pending used to break
whichever of the two completed second.

**Outcome:** implemented

Closes #1648, SDK-1429.

## What changed

- **Per-flow verifier slots**
(`packages/supabase_auth/lib/src/pkce_verifier_store.dart`, new).
Verifiers are stored under
`supabase.auth.token-flow-<flowId>-code-verifier`. At most five are
kept, oldest evicted first, tracked in an index entry because
`AuthAsyncStorage` cannot enumerate keys. Flow ids are validated against
a fixed shape both when they are read and when they are stored, since
they can arrive from a callback URL and a slot written under an id the
index cannot validate could never be evicted again. Marked `@internal`.
- **`OAuthResponse.flowId`** returns the id of the flow that
`getOAuthSignInUrl` or `getLinkIdentityUrl` started, `null` on the
implicit flow.
- **`exchangeCodeForSession(authCode, {String? flowId})`** picks that
flow's verifier. A given flow id is looked up in its slot only,
deliberately without falling back to the most recent verifier:
submitting a mismatched verifier would spend the single-use auth code. A
malformed flow id fails immediately with a message naming it, rather
than surfacing later as a missing verifier, which would point at storage
instead of the callback URL. Without a flow id the most recently started
flow's verifier is used, so existing callers behave exactly as before.
- **`getSessionFromUrl`** reads the reserved `sb_flow_id` query
parameter off the callback URL, which is how `supabase_flutter` handles
auth deep links, so the right verifier is picked without the app
threading anything itself.
- **`appendPkceFlowIdToRedirects`** on `AuthClient`, `AuthClientOptions`
and `FlutterAuthClientOptions`... (continued)

139 of 141 new or added lines in 5 files covered. (98.58%)

1 existing line in 1 file now uncovered.

5911 of 6659 relevant lines covered (88.77%)

4.27 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
85.14
2.08% packages/supabase_auth/lib/src/auth_client.dart
1
98.55
packages/supabase_auth/lib/src/pkce_verifier_store.dart

Coverage Regressions

Lines Coverage ∆ File
1
85.14
2.08% packages/supabase_auth/lib/src/auth_client.dart
Jobs
ID Job ID Ran Files Coverage
8 supabase - 32250379512.8 19 Aug 2026 12:04PM UTC 13
91.26
GitHub Action Run
9 supabase_flutter - 32250379512.9 19 Aug 2026 12:01PM UTC 10
81.92
GitHub Action Run
10 supabase_auth - 32250379512.10 19 Aug 2026 12:04PM UTC 29
90.77
GitHub Action Run
4 supabase_common - 32034091672.4 17 Aug 2026 01:16PM UTC 16
99.48
GitHub Action Run
3 supabase_functions - 32034091672.3 17 Aug 2026 01:16PM UTC 3
97.75
GitHub Action Run
9 supabase_realtime - 32036696049.9 17 Aug 2026 01:51PM UTC 12
90.19
GitHub Action Run
7 postgrest - 32183188729.7 18 Aug 2026 08:40PM UTC 11
84.92
GitHub Action Run
5 iceberg - 32034091672.5 17 Aug 2026 01:16PM UTC 5
68.62
GitHub Action Run
6 supabase_storage - 32034091672.6 17 Aug 2026 01:18PM UTC 8
97.18
GitHub Action Run
2 yet_another_json_isolate - 32034091672.2 17 Aug 2026 01:16PM UTC 1
94.44
GitHub Action Run
Source Files on build 32250379512
  • Tree
  • List 108
  • Changed 18
  • Source Changed 18
  • Coverage Changed 16
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32250379512
  • 61bbbc5e on github
  • Prev Build on main (#32246004187)
  • Next Build on main (#32253470757)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc