Files
pubsub/docs/architecture/event-targets.md
glm-5.1 371dabc20d Add per-adapter architecture docs in event-targets/ directory
- Create docs/architecture/event-targets/ with individual specs:
  in-process, redis, websocket-client, websocket-server,
  worker, iroh-spoke, iroh-hub
- Update event-targets.md to serve as index with topology model
  (symmetric vs fan-out) and adapter status table
- Update architecture.md index to reference new directory
2026-05-07 14:49:50 +00:00

2.1 KiB

status, last_updated
status last_updated
draft 2026-05-07

Event Target Adapters

All adapters implement the TypedEventTarget<TEvent> interface and use the EventEnvelope format ({ type, id, payload }) as the serialization contract.

Interface Contract

Every adapter must implement:

Method Behavior
addEventListener(type, callback) Register listener for event type. Callback receives CustomEvent with typed detail (an EventEnvelope).
dispatchEvent(event) Send/dispatch event. Returns boolean (always true for non-cancelable events).
removeEventListener(type, callback) Unregister listener. Clean up underlying subscription when no listeners remain for a topic.

Topology Model

Adapters come in two shapes:

  • Symmetric (single connection) — wraps one connection. Same interface on both sides. Examples: Redis, Iroh spoke, WebSocket client, Worker main-thread.
  • Fan-out (multi-connection) — manages multiple connections. dispatchEvent sends to all; addEventListener aggregates from all. Examples: WebSocket server, Iroh hub, Worker pool manager.

The createPubSub layer is topology-agnostic. A hub composes multiple adapters and uses operators to combine streams — this is downstream application logic, not a package boundary.

Adapter Docs

Adapter Import Status
In-Process (default, no import) Implemented (built-in EventTarget)
Redis @alkdev/pubsub/event-target-redis Implemented. Needs tests.
WebSocket Client @alkdev/pubsub/event-target-websocket-client Not yet implemented
WebSocket Server @alkdev/pubsub/event-target-websocket-server Not yet implemented
Worker @alkdev/pubsub/event-target-worker Not yet implemented (R&D on Node vs Web Worker)
Iroh Spoke @alkdev/pubsub/event-target-iroh-spoke Not yet implemented (R&D on binding)
Iroh Hub @alkdev/pubsub/event-target-iroh-hub Not yet implemented (R&D on binding)