import { EventBus, Events, EventWaiter, EventName } from '@eggjs/eventbus-decorator';
import type { Arguments } from '@eggjs/eventbus-decorator';
import type { EggRuntimeContext } from '@eggjs/tegg-types';
export interface Event {
    name: EventName;
    args: Array<any>;
    context?: EggRuntimeContext;
}
export interface CorkEvents {
    times: number;
    events: Array<Event>;
}
export declare class SingletonEventBus implements EventBus, EventWaiter {
    private readonly emitter;
    private readonly eventContextFactory;
    private readonly eventHandlerFactory;
    private readonly logger;
    private corkIdSequence;
    private readonly corkedEvents;
    /**
     * only use for ensure event will happen
     */
    once<E extends keyof Events>(event: E, listener: Events[E]): this;
    await<E extends keyof Events>(event: E): Promise<Arguments<Events[E]>>;
    awaitFirst<E extends keyof Events>(...e: Array<E>): Promise<{
        event: EventName;
        args: Arguments<Events[E]>;
    }>;
    emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): boolean;
    generateCorkId(): string;
    cork(corkId: string): void;
    uncork(corkId: string): boolean;
    queueEvent(corkId: string, event: Event): void;
    emitWithContext<E extends keyof Events>(parentContext: EggRuntimeContext, event: E, args: Arguments<Events[E]>): boolean;
    private doEmitWithContext;
    private doOnceEmit;
    private doEmit;
}
