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

decentraland / comms-gatekeeper / 31030859631
86%
main: 85%

Build:
Build:
LAST BUILD BRANCH: feat/device-aware-ban-status
DEFAULT BRANCH: main
Ran 05 Aug 2026 05:38PM UTC
Jobs 1
Files 151
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

05 Aug 2026 05:36PM UTC coverage: 85.602% (+0.2%) from 85.372%
31030859631

Pull #284

github

LautaroPetaccio
fix: gate local-preview stream links and harden best-effort error reporting

addresses two review findings.

local-preview stream-link minting bypassed the platform-ban gate. the handler
branches to generatePreviewStreamLink when livekit.isLocalPreview(realmName) is
true, and the assertion only lived in generateStreamLink. that branch also skips
the admin check, and the realm name deciding it comes from self-asserted auth
metadata, so wherever ALLOW_LOCAL_PREVIEW is on a banned wallet could mint a
working streaming key in one request — and validateStreamerToken honours a minted
key without re-checking the wallet, so the "blocking the mint covers streaming"
model had a hole straight through it.

gate the preview path too, at the top, before the synthetic place is built. left
the assertion at each of the two call sites rather than moving it into the shared
createStreamAccess helper: generateStreamLink must check before its admin lookup
so the rejection cannot double as an admin-status oracle, and a check inside the
helper would run after it. noted at createStreamAccess that every caller has to
gate first, since the key it mints is trusted downstream.

this matches comms-scene-handler, which applies the platform ban before it
branches on preview and only skips the scene-ban check for it.

the recorded-device catch read error.message directly, so a rejection that is not
an object took down the very gate the catch exists to keep non-fatal. only null
and undefined actually threw — a string or number yields undefined and logs
"undefined" — but the failure is real and the path is documented as fail-open.
route the message through the existing isErrorWithMessage helper.

widened to the other three catches in the file rather than fixing one of four
identical latent bugs: two are fire-and-forget, where a throw becomes an
unhandled rejection, and the third would fail banPlayer outright over a
best-effort connection-info read.

tests cover a banned local-preview c... (continued)
Pull Request #284: feat: enforce platform bans on voice and cast, and fall back to the recorded device

1134 of 1448 branches covered (78.31%)

Branch coverage included in aggregate %.

30 of 30 new or added lines in 5 files covered. (100.0%)

3 existing lines in 1 file now uncovered.

3111 of 3511 relevant lines covered (88.61%)

76.81 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
50.0
0.0% src/controllers/handlers/user-moderation/ban-status-handler.ts
Jobs
ID Job ID Ran Files Coverage
1 31030859631.1 05 Aug 2026 05:38PM UTC 302
86.8
GitHub Action Run
Source Files on build 31030859631
  • Tree
  • List 151
  • Changed 97
  • Source Changed 5
  • Coverage Changed 97
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31030859631
  • Pull Request #284
  • PR Base - main (#28616085146)
  • 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