export interface Subscriber { (event: TEvent): void | Promise; } export type Event = Record; export interface Topic { getTopicName(): string; subscribe(cb: Subscriber): void; subscribeOnce(cb: Subscriber): void; getSubscribers(): Subscriber[]; publish(event: TEvent): Promise; }