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

3.5 KiB

Tasks: enterprise-server-network-trystero-server

Change ID: enterprise-server-network-trystero-server Package: @suaveplan/network-trystero-server Target path: server/network/network-trystero-server Prerequisites on Verdaccio: @suaveplan/error, @suaveplan/types, @suaveplan/events, @suaveplan/logger


1. Scaffold

  • Create directory tree per proposal.md.
  • package.json at 0.1.0, "sideEffects": false, exports "." + adapter.
  • Deps: workspace + catalog deps as listed in proposal.
  • DevDeps: vitest catalog:testing, @vitest/coverage-istanbul catalog:testing, @suaveplan/testing workspace:^.
  • tsconfig.json extending library-node.json; vitest.config.ts with pool: 'forks'.
  • Scripts: lint, typecheck, test, test:coverage, build, docs:check.

2. Types and errors

  • Define TrysteroServerOptions, TrysteroServerOptionsSchema in src/types/trystero-server.types.ts.
  • Write trystero-server.types.md (≥200 words).
  • src/error-codes.ts: four codes; registerTrysteroErrorCodes(); eager call.

3. Adapter implementation

  • Implement TrysteroServerAdapter in src/adapter/trystero-server-adapter/trystero-server-adapter.ts:
    • Maintain a Map<roomId, { room: TrysteroRoom; channels: Map<channelName, DataChannel>; peers: Set<string> }>.
    • join(roomId): call Trystero joinRoom(config, roomId); register onPeerJoin / onPeerLeave handlers; update peer set. Throw NETWORK_TRYSTERO_JOIN_FAILED on error.
    • leave(roomId): call room.leave(); remove from map. Throw NETWORK_TRYSTERO_LEAVE_FAILED on error.
    • send(roomId, channelName, data, peerId?): get or create data channel via room.makeAction(channelName); call send(data, peerId). Throw NETWORK_TRYSTERO_SEND_FAILED on missing room.
    • onData(roomId, channelName, handler): register action handler; return unsubscribe fn.
    • onPeerJoin / onPeerLeave: register peer lifecycle handlers; return unsubscribe.
    • peers(roomId): return [...peerSet] or [].
    • leaveAll(): iterate all rooms, call leave on each.
    • OTel gauge network_trystero.peer_count; counter network_trystero.messages_total.
  • Write trystero-server-adapter.types.ts.
  • Write trystero-server-adapter.test.ts (≤500 lines): unit tests using a mocked Trystero joinRoom that returns a fake room object — verify all adapter state management, handler registration, unsubscribe. Use DI for Trystero factory to inject mock. Guard network integration tests with SKIP_NETWORK_TESTS=1.
  • Write trystero-server-adapter.md (≥200 words, simple + advanced, API reference).

4. Integration tests

  • tests/integration.test.ts: skip unless RUN_TRYSTERO_INTEGRATION=1. Two adapters join same room (torrent strategy); one sends, other receives via onData. { timeout: 30000 }.

5. OTel + docs

  • All OTel instrumentation per proposal.
  • Root README.md: strategy comparison table, quick-start torrent example, API table.

6. Verify and publish

  • bunx turbo lint --filter=@suaveplan/network-trystero-server — zero errors.
  • bunx turbo typecheck --filter=@suaveplan/network-trystero-server — zero errors.
  • bunx turbo test --filter=@suaveplan/network-trystero-server — all pass.
  • bunx turbo test:coverage --filter=@suaveplan/network-trystero-server — 100%.
  • bun scripts/publish.ts --package @suaveplan/network-trystero-server.
  • Update CLAUDE.md; archive to openspec/archive/2026-04-24-enterprise-server-network-trystero-server/.