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

supabase / supabase-swift / 41059963376
96%

Build:
DEFAULT BRANCH: main
Ran 30 Oct 2026 01:13PM UTC
Jobs 1
Files 193
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

30 Oct 2026 01:02PM UTC coverage: 94.034% (-0.02%) from 94.05%
41059963376

push

github

web-flow
refactor(auth): simplify Phase 2 session internals (#1644)

* refactor(auth)!: move the refresh single-flight into SessionStore with cooldown and refresh window

SessionStore now owns refresh deduplication, so every client that shares a store shares one refresh per token. A cancelled waiter throws CancellationError at once while the shared refresh still commits. A failed token throws its cached error for 60 seconds, and a sixth refresh in 30 seconds throws excessiveRefresh. A signedOut commit cancels running refreshes.

BREAKING CHANGE: refreshSession and an expired session() can throw a cached error or AuthError.Kind.excessiveRefresh without a request, and callers of a refresh that signOut cancels get CancellationError.

Fixes SDK-2059

* fix(auth): age out refresh throttles when the clock moves backward

The refresh failure cooldown and the refresh window treated a negative
interval as recent, so after the wall clock moved back one failure
blocked its token, and five refreshes blocked every refresh, until the
clock caught up. Both now treat a negative interval as elapsed.

A refresh cancelled by sign-out now throws CancellationError and caches
nothing, whatever error the request ends with. A transport can report
the cancel as URLError.cancelled from the response body, which became
AuthError(.transport) and was cached for the signed-out token.

Add "cooldown" to the spell-check dictionary.

* test(auth): import FoundationNetworking for URLError on Linux

* feat(auth)!: sign out only when a rejected refresh leaves an expired session

A failed refresh keeps the session unless the server rejected the refresh
token and the held session is expired at the store's injected time. A
proactive refresh that the server rejects keeps the session until it
expires. A cached rejection signs out once the held session has expired.

BREAKING CHANGE: refreshSession() can throw .sessionInvalidated while the
session stays signed in. React to the .signedOut event to show s... (continued)

18 of 19 new or added lines in 5 files covered. (94.74%)

2 existing lines in 1 file now uncovered.

13633 of 14498 relevant lines covered (94.03%)

561943.18 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
54.81
0.0% Sources/Auth/Internal/Platform/AuthPlatform+Apple.swift

Coverage Regressions

Lines Coverage ∆ File
2
93.6
-0.35% Sources/Realtime/RealtimeClient.swift
Jobs
ID Job ID Ran Files Coverage
1 41059963376.1 30 Oct 2026 01:13PM UTC 193
94.03
GitHub Action Run
Source Files on build 41059963376
  • Tree
  • List 193
  • Changed 7
  • Source Changed 6
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #41059963376
  • 0b5032e4 on github
  • Prev Build on main (#41058365166)
  • Next Build on main (#41069322523)
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