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

decentraland / comms-gatekeeper / 31103830479
86%

Build:
DEFAULT BRANCH: main
Ran 06 Aug 2026 01:01PM 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

06 Aug 2026 12:59PM UTC coverage: 85.683% (+0.003%) from 85.68%
31103830479

push

github

web-flow
fix: stop publishing the ban device id on the public status route (#286)

* fix: stop publishing the ban device id on the public status route

GET /users/{address}/bans is unauthenticated and returned the full ban record,
including bannedDeviceId. that value is a stable cross-wallet machine identifier:
two banned addresses carrying the same one are publicly linkable as one machine,
and a banned wallet querying itself learns its device was captured.

strip it from that response only. the record is otherwise unchanged, matchedOn
still reports whether the match came from the address or the device, and
enforcement is untouched — a test pins that the device still rejects a connection
after the field stops being shown, so this is presentation, not coverage.

moderators keep the value on the moderator-gated GET /bans, which is now the only
route that exposes it; a test pins that too.

openapi splits PublicUserBan from UserBan rather than letting the public operation
advertise a field it never returns.

requires decentraland/moderation-center#15 to ship first: its user moderation page
read banStatus.ban.bannedDeviceId from this route to render the Device row.

* docs: define the public ban schema standalone instead of subtracting a field

PublicUserBan was allOf UserBan with bannedDeviceId: not: {}. the intent is valid
openapi, but 3.0 renderers and generators routinely flatten allOf and ignore not,
so a generated client could carry a bannedDeviceId field for a route that never
returns one — the failure mode being a client that reads the field and quietly
gets undefined, or a doc page that advertises it.

invert the composition instead of expressing the public schema by subtraction.
PublicUserBan is now a plain object holding the ten shared fields, with no allOf
and no not, so there is nothing for a generator to flatten wrongly. UserBan is
PublicUserBan plus bannedDeviceId, where flattening produces exactly the intended
superset.

no behaviour change: the han... (continued)

1145 of 1459 branches covered (78.48%)

Branch coverage included in aggregate %.

3128 of 3528 relevant lines covered (88.66%)

77.65 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
72.73
1.3% src/controllers/handlers/user-moderation/ban-status-handler.ts
Jobs
ID Job ID Ran Files Coverage
1 31103830479.1 06 Aug 2026 01:01PM UTC 302
86.87
GitHub Action Run
Source Files on build 31103830479
  • Tree
  • List 151
  • Changed 97
  • Source Changed 1
  • Coverage Changed 97
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #31103830479
  • 70054bf0 on github
  • Prev Build on main (#31062419960)
  • Next Build on main (#31196967398)
  • 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