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

decentraland / social-service-ea / 28467807823
90%

Build:
DEFAULT BRANCH: main
Ran 30 Jun 2026 06:47PM UTC
Jobs 1
Files 201
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 Jun 2026 06:42PM UTC coverage: 90.449% (+0.5%) from 89.983%
28467807823

push

github

web-flow
feat: support multiple concurrent connections per address (website + client) (#423)

* feat: support multiple concurrent connections per address (website + client)

Scope subscription state per connection (wsConnectionId) instead of per address, and
reference-count the address-level lifecycle, so the same wallet can be connected from the
website and the in-world client at the same time without the two sessions colliding.

Previously all subscription state was keyed by address, so two concurrent connections for
one address collided:
- the second connection's subscribes were all rejected as duplicates (it received no
  updates) -- the main source of the duplicate-subscription log floods;
- whichever connection disconnected first cleared the shared emitter and destroyed the
  other connection's generators;
- the Redis online set was added/removed per address with no refcount, so one disconnect
  marked the user offline globally while another connection was still live (missed updates).

Changes:
- subscribers-context: activeSubscriptions and subscriberGenerators are now keyed by
  wsConnectionId; add connectionsByAddress refcount; add addConnection/removeConnection
  (Redis sAdd on the first connection, sRem on the last); strip Redis side effects from
  getOrAddSubscriber (now a pure emitter ensure). One shared emitter per address is kept so
  a pub/sub fan-out reaches every connection.
- handleSubscriptionUpdates: dedup + generator tracking keyed by connection; the OOM guard
  from #407 now correctly blocks only the SAME connection from double-subscribing.
- rpc-server: attachUser -> addConnection; detachUser(address, wsConnectionId) ->
  removeConnection, ending the user's voice chat only when their last connection closes.
- ws-handler: thread wsConnectionId into both detachUser call sites.

addSubscriber/removeSubscriber are retained as address-level compatibility helpers used by
tests; production uses addConnection/removeConnection.

* refactor: harde... (continued)

2295 of 2683 branches covered (85.54%)

Branch coverage included in aggregate %.

71 of 72 new or added lines in 5 files covered. (98.61%)

4 existing lines in 1 file now uncovered.

5755 of 6217 relevant lines covered (92.57%)

79.48 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
0.0
0.0% src/components.ts

Coverage Regressions

Lines Coverage ∆ File
4
70.31
-6.25% src/adapters/redis.ts
Jobs
ID Job ID Ran Files Coverage
1 28467807823.1 30 Jun 2026 06:47PM UTC 402
91.37
GitHub Action Run
Source Files on build 28467807823
  • Tree
  • List 201
  • Changed 157
  • Source Changed 6
  • Coverage Changed 157
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28467807823
  • 60b7ce87 on github
  • Prev Build on main (#28393307615)
  • Next Build on main (#28541296911)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc