Files
suaveplan/openspec/archive/2026-05-12-enterprise-browser-network-discovery-peerjs/tasks.md
2026-05-27 23:29:53 +01:00

2.9 KiB

Tasks: enterprise-browser-network-discovery-peerjs

Change ID: enterprise-browser-network-discovery-peerjs Package: @suaveplan/network-discovery-peerjs Target path: browser/network/network-discovery-peerjs Prerequisite packages on Verdaccio: @suaveplan/network, @suaveplan/error, @suaveplan/types, @suaveplan/crypto


1. Scaffold

  • Create directory tree per proposal.md.
  • package.json v0.0.0, "sideEffects": false.
    • dependencies: @suaveplan/network workspace:^, @suaveplan/error workspace:^, @suaveplan/types workspace:^, @suaveplan/crypto workspace:^, peerjs, zod catalog:forms, @opentelemetry/api catalog:observability, tslib catalog:build
    • devDependencies: vitest catalog:testing, @vitest/coverage-istanbul catalog:testing, @suaveplan/testing workspace:^, react catalog:browser, @types/react catalog:browser
  • tsconfig.json, vitest.config.ts (pool: forks).

2. Error codes

  • PEERJS_SIGNALING_UNREACHABLE, PEERJS_ROOM_FULL, PEERJS_CONNECTION_FAILED, PEERJS_MESSAGE_REJECTED.
  • registerPeerJSErrorCodes() — call eagerly.

3. Schema (src/schema/peerjs-schema/)

  • PeerJSMessageSchema variants for PEER_ANNOUNCE, PEER_LEAVE, PING, PONG.
  • Register in @suaveplan/schema-registry. Write peerjs-schema.md.

4. Supporting modules

For each: PeerJSEventEmitter, PeerJSIntervals, PeerJSMessageHandlers (validates with Zod), PeerJSConnection, PeerConnectionManager, RoomManager:

  • Implement module.
  • Write *.test.ts (real PeerJS API, no stubs), *.md.

5. PeerJSDiscovery (src/peerjs-discovery/)

  • Implement with strict-mode gate (reject 0.peerjs.com when strict: true).
  • static selfHosted(...) factory.
  • Reconnection policy with exponential backoff.
  • Optional signed metadata via @suaveplan/crypto.
  • ICE server passthrough to PeerJS RTCConfiguration.
  • Wire OTel metrics.
  • Write peerjs-discovery.test.ts, peerjs-discovery.md, peerjs-discovery.types.ts.

6. Story

  • src/peerjs-discovery/peerjs-discovery.stories.tsx with React devDep declared.

7. Integration test (tests/integration.test.ts)

  • Strict-mode rejects public cloud host.
  • Two PeerJSDiscovery instances against a local PeerJS server; assert peer discovery.
  • Reconnection: drop + restore WebSocket; verify connection:restored fires.
  • ICE server config passed through to RTC connection.

8. Docs + verify

  • Write .md per module; README.md with self-hosted relay guidance.
  • bunx turbo lint typecheck test --filter=@suaveplan/network-discovery-peerjs — green.
  • bunx turbo test:coverage — 100%.
  • Every supporting module has its own test suite.
  • bun scripts/publish.ts --package @suaveplan/network-discovery-peerjs.
  • Archive to openspec/archive/2026-04-24-enterprise-browser-network-discovery-peerjs/.