- 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
2.1 KiB
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.
dispatchEventsends to all;addEventListeneraggregates 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) |