import { makeSubject, subscribe, TypeOfSource } from "wonka"; export class ListenerManager { public subjects = { close: makeSubject(), error: makeSubject(), message: makeSubject>(), open: makeSubject(), }; public subscribe( kind: TKind, callback: (event: TypeOfSource<(typeof this.subjects)[TKind]["source"]>) => void, ): () => void { const source = this.subjects[kind]?.source; if (!source) return () => undefined; return subscribe(callback)(source as any).unsubscribe; } }