/** * Event Bus * * Internal event routing between state broadcaster middleware and SSE streams. */ import { EventEmitter } from "events"; import type { StateChangedEvent, ExecutionLifecycleEvent } from "../types.ts"; /** * Create an event bus for internal routing * * Events flow: * State Broadcaster Middleware -> EventBus -> SSE Route Handler */ export function createEventBus(): EventEmitter { const emitter = new EventEmitter(); // Allow many listeners (one per SSE connection) emitter.setMaxListeners(1000); return emitter; } /** * Subscribe to state change events */ export function onStateChanged( bus: EventEmitter, handler: (event: StateChangedEvent) => void ): () => void { bus.on("state.changed", handler); return () => bus.off("state.changed", handler); } /** * Subscribe to execution lifecycle events */ export function onExecutionLifecycle( bus: EventEmitter, handler: (event: ExecutionLifecycleEvent) => void ): () => void { bus.on("execution.lifecycle", handler); return () => bus.off("execution.lifecycle", handler); } /** * Emit a state change event */ export function emitStateChanged( bus: EventEmitter, event: StateChangedEvent ): void { bus.emit("state.changed", event); } /** * Emit an execution lifecycle event */ export function emitExecutionLifecycle( bus: EventEmitter, event: ExecutionLifecycleEvent ): void { bus.emit("execution.lifecycle", event); }