import { Constructable, EventSubscriptionCallback, IEventBus, IMiddleware } from './interfaces';
import { Publisher } from './publisher';
import { Dispatcher } from './dispatcher';
export declare class EventBus<T = {}> implements IEventBus<T> {
    defaultPublisher: Publisher<T>;
    dispatcher: Set<Dispatcher<T>>;
    defaultReceiver: Dispatcher<T>;
    createPublisher(): Publisher<T>;
    createReceiver(): Dispatcher<T>;
    protected deliver(event: T): Promise<void>;
    publish(event: T): Promise<void>;
    on<T1 extends T>(eventType: Constructable<T1>, callback: EventSubscriptionCallback<T1>): void;
    pushMiddleware(middleware: IMiddleware<T>): void;
    unshiftMiddleware(middleware: IMiddleware<T>): void;
}
