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

supabase / supabase-swift / 29766581958
84%

Build:
DEFAULT BRANCH: main
Ran 20 Jul 2026 06:21PM UTC
Jobs 1
Files 96
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

20 Jul 2026 06:09PM UTC coverage: 83.791% (-0.09%) from 83.878%
29766581958

push

github

web-flow
feat(realtime): support certificate pinning on the WebSocket connection (#1123)

* docs: add design spec for Realtime WebSocket cert pinning

* docs: add e2e cert pinning test task to implementation plan

* feat(realtime): add session option to RealtimeClientOptions

* feat(realtime): forward WebSocket auth challenges to a wrapped delegate

Adds an optional wrappedDelegate to _Delegate so a caller's own
URLSessionDelegate is consulted for TLS/auth-challenge callbacks on the
Realtime WebSocket connection (task-level method first, then
session-level, then default handling). Prepares for certificate
pinning support; WebSocket lifecycle callbacks are untouched.

* feat(realtime): accept an external URLSession in URLSessionWebSocket.connect

Replaces the configuration: parameter with session: URLSession = .shared
so callers can supply their own session (and its delegate) for the
Realtime WebSocket connection, enabling certificate pinning end-to-end.
On Apple platforms the task uses a per-task delegate wrapping the
caller's session delegate; Linux keeps building its own internal
session via the existing sessionWithConfiguration helper, since
swift-corelibs-foundation doesn't support per-task delegates.

* docs: correct WebSocket session default to avoid process-wide URLSession interference

* fix(realtime): don't share .shared URLSession for the default WebSocket connection

connect(session:) previously used the caller-supplied session directly for
every call, including the .shared default. This regressed the pre-existing
behavior of always building a dedicated internal session, making the common
no-session-specified case vulnerable to process-wide URLSession state (e.g.
a globally-registered URLProtocol from Mocker, used by
AuthTests/StorageTests/PostgRESTTests/FunctionsTests, or any host app's own
interceptor). Only route through the caller's session (enabling pinning)
when it's not === URLSession.shared; otherwise build a dedicated session as
before.

* ... (continued)

94 of 120 new or added lines in 4 files covered. (78.33%)

19 existing lines in 1 file now uncovered.

8152 of 9729 relevant lines covered (83.79%)

38.67 hits per line

Uncovered Changes

Lines Coverage ∆ File
24
64.08
0.69% Sources/RealtimeV2/WebSocket/URLSessionWebSocket.swift
2
87.01
-0.12% Sources/RealtimeV2/RealtimeClientV2.swift

Coverage Regressions

Lines Coverage ∆ File
19
64.08
0.69% Sources/RealtimeV2/WebSocket/URLSessionWebSocket.swift
Jobs
ID Job ID Ran Files Coverage
1 29766581958.1 20 Jul 2026 06:21PM UTC 96
83.79
GitHub Action Run
Source Files on build 29766581958
  • Tree
  • List 96
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29766581958
  • b74a8fac on github
  • Prev Build on main (#29764779923)
  • Next Build on main (#29776145118)
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