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

supabase / supabase-swift / 39383433915
93%

Build:
DEFAULT BRANCH: main
Ran 20 Oct 2026 07:06AM UTC
Jobs 1
Files 173
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 Oct 2026 06:57AM UTC coverage: 92.781% (-0.06%) from 92.841%
39383433915

push

github

web-flow
feat(realtime)!: make broadcast, track and untrack async throws and drop PushHandle (#1596)

* feat(realtime)!: make broadcast, track and untrack async throws and drop PushHandle

The server's reply to a push is now the result of the call. Awaiting
`broadcast(event:message:)`, `broadcast(event:data:)`, `track(_:)` or
`untrack()` returns when the server acknowledged the push, throws
`RealtimeError` with kind `.timeout` when no reply arrived in time, and
throws `RealtimeError` with the server's reason (`.payloadTooLarge` or
`.server`, with `serverCode` parsed from a coded reason) when the server
rejected it. Without `acknowledgeBroadcasts` the call returns once the
frame is sent.

`PushHandle` is gone: a `Task` already covers fire-and-forget delivery,
cancellation and inspecting the outcome. The reply slot lives in the
channel actor as `PendingPush`, created before the frame goes out, with
the timeout driven by `withTimeout` and caller cancellation by
`withTaskCancellationHandler`, as `subscribe()` does.

`PushStatus` stays for `RealtimeMessageV2.status` and moves next to it,
minus `.timeout`, which was never a server value.

Protocol frames (`phx_join`, `phx_leave`, `access_token`) keep going out
without waiting for a reply.

BREAKING CHANGE: `broadcast`, `track` and `untrack` are `async throws`
and return `Void`; `PushHandle` and `PushStatus.timeout` are removed.

* chore(realtime): drop the PushHandle symbols from sdk-compliance.yaml

The capability-matrix check flags registered public API that no longer
exists. PushHandle was removed with the async throws push API; its five
entries under realtime.channel.broadcast go with it. PushStatus stays,
since RealtimeMessageV2.status still returns it.

* fix(realtime): guard untrack on subscription and document the server-close push error

untrack() now throws RealtimeError.notSubscribed before sending, as
broadcast and track do, instead of sending a frame on a left channel and
waiting for a reply that cannot... (continued)

85 of 100 new or added lines in 3 files covered. (85.0%)

1 existing line in 1 file now uncovered.

13057 of 14073 relevant lines covered (92.78%)

57938.18 hits per line

Uncovered Changes

Lines Coverage ∆ File
15
91.71
-0.76% Sources/Realtime/RealtimeChannel.swift

Coverage Regressions

Lines Coverage ∆ File
1
91.71
-0.76% Sources/Realtime/RealtimeChannel.swift
Jobs
ID Job ID Ran Files Coverage
1 39383433915.1 20 Oct 2026 07:06AM UTC 173
92.78
GitHub Action Run
Source Files on build 39383433915
  • Tree
  • List 173
  • Changed 4
  • Source Changed 4
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39383433915
  • af28ef76 on github
  • Prev Build on main (#39382003330)
  • Next Build on main (#39386000732)
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