src/server/session-bus.ts
Rama main · réplica de lectura del repositorio original.
/**
* Tiny indirection so server modules (e.g. an add-on's background duplex engine) can push WS events to a session
* OUTSIDE a request turn — without importing index.ts (which would be a cycle). index.ts registers the
* real `broadcast` at boot via setBroadcaster(); callers use emitToSession().
*/
type Broadcaster = (data: object) => void;
let _broadcast: Broadcaster | null = null;
export function setBroadcaster(fn: Broadcaster): void {
_broadcast = fn;
}
/** Push an event to all clients (carrying sessionId); no-op if the bus isn't wired yet. */
export function emitToSession(sessionId: string, data: object): void {
if (!_broadcast) return;
_broadcast({ ...data, sessionId });
}