export declare type Unregister = () => void;
export interface SubscriberMap {
    [key: string]: HandleFunction<any, any>;
}
export declare type HandleFunction<SendArg, ReceiveArg> = (args?: SendArg) => Promise<ReceiveArg>;
declare type EventBusState = 'IDLE' | 'HANDLING' | 'DISPATCHING' | 'REGISTERING' | 'UNREGISTERING';
export interface RegisterConfig {
    beforeRegister?: (event: string) => void;
    afterRegister?: (event: string) => void;
    beforeUnregister?: (event: string) => void;
    afterUnregister?: (event: string) => void;
}
declare class QuantumEventBus {
    private subscribers;
    private state;
    send<Send, Receive>(event: string, arg?: Send): Promise<Receive>;
    on<Send, Receive>(event: string, handle: HandleFunction<Send, Receive>, config?: RegisterConfig): Unregister;
    get currentState(): [EventBusState, any];
    private unregister;
    private bindHandleToEvent;
    get listeners(): number;
}
export declare class NotFoundError extends Error {
    constructor(event: string);
}
export declare class AlreadyBoundError extends Error {
    constructor(event: string);
}
export default QuantumEventBus;
