@suaveplan/network-discovery-peerjs - Browser-tier PeerJS DiscoveryStrategy: wraps PeerJS signalling client + WebRTC DataConnections, produces deduped PeerInfo[] for @suaveplan/network-bootstrap chains with @suaveplan/events, @suaveplan/timing, AbortSignal, OTel and Zod boundaries.
Summary
Browser-tier DiscoveryStrategy for @suaveplan/network-bootstrap that wraps
a PeerJS signalling-server client + WebRTC
DataConnections into a deduped peer set.
Documentation tree
- [peer-connection-manager](./src/core/peer-connection-manager/peer-connection-manager.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [peer-connection-manager](./src/core/peer-connection-manager/peer-connection-manager.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [peer-connection-manager](./src/core/peer-connection-manager/peer-connection-manager.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_- [peer-connection-manager](./src/core/peer-connection-manager/peer-connection-manager.md) — _(no submodules)_- [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_ - [peerjs-connection](./src/core/peerjs-connection/peerjs-connection.md) — _(no submodules)_- [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_ - [peerjs-discovery](./src/core/peerjs-discovery/peerjs-discovery.md) — _(no submodules)_- [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_ - [peerjs-intervals](./src/core/peerjs-intervals/peerjs-intervals.md) — _(no submodules)_- [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_ - [peerjs-message-handlers](./src/core/peerjs-message-handlers/peerjs-message-handlers.md) — _(no submodules)_- [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_ - [room-manager](./src/core/room-manager/room-manager.md) — _(no submodules)_- [errors](./src/errors/errors.md) — _(no submodules)_ - [errors](./src/errors/errors.md) — _(no submodules)_- [otel](./src/otel/otel.md) — _(no submodules)_ - [otel](./src/otel/otel.md) — _(no submodules)_- [plugin](./src/plugin/plugin.md) — _(no submodules)_ - [plugin](./src/plugin/plugin.md) — _(no submodules)_- [transport](./src/transport/transport.md) — _(no submodules)_ - [transport](./src/transport/transport.md) — _(no submodules)_- [types](./src/types/types.md) — _(no submodules)_ - [types](./src/types/types.md) — _(no submodules)_
Install
Quick start
Composing into a DiscoveryChain
Wiring an EventBus and a ServiceRegistry
Why host and peerFactory are required
The constructor refuses to start without an explicit host (no fallback to
the public 0.peerjs.com cloud) and without an injected peerFactory (the
underlying peerjs package is a peer dep so that consumers can choose their
own version and so that tests can inject a deterministic stub without
spinning up a real broker). See src/core/peerjs-discovery/peerjs-discovery.md
for the full lifecycle contract.
Modules
peerjs-discovery — orchestrator implementing DiscoveryStrategy.
peer-connection-manager — owns the PeerLike + connection registry.
room-manager — deduped peer set, TTL pruning, optional bus/registry fan-out.
peerjs-connection — low-level peer/connection helpers (pure functions).
peerjs-message-handlers — Zod-validated wire-format dispatch table.
peerjs-intervals — announce / heartbeat / cleanup loops over the
@suaveplan/timing scheduler.
errors — NET_DISC_PEERJS_CODES registry + NetDiscPeerJSError.
otel — disc_peerjs.* span, counter, histogram.
Status
Wave 2.1 (migration). 100/100/100/100 coverage gate, Zod boundaries,
OTel surface, AbortSignal end-to-end, no public-broker default.