import { Events } from '../types';
import { Logger } from '../utils';
type EventCallback<E extends keyof Events> = (payload?: Events[E]) => void;
type Middleware<E extends keyof Events> = (event: E, payload: Events[E]) => Events[E];
interface EventBusOptions {
    cacheTTL?: number;
    cacheEnabled?: boolean;
    logger?: typeof Logger;
}
export declare class EventBus {
    private events;
    private globalMiddlewares;
    private eventSpecificMiddlewares;
    private cache;
    private cacheTTL;
    private cacheEnabled;
    private logger;
    constructor(options?: EventBusOptions);
    emit<E extends keyof Events>(event: E, payload?: Events[E]): void;
    subscribe<E extends keyof Events>(event: E, callback: EventCallback<E>, priority?: number): () => void;
    unsubscribe<E extends keyof Events>(event: E, callback: EventCallback<E>): void;
    use<E extends keyof Events>(middleware: Middleware<E>): void;
    useForEvent<E extends keyof Events>(event: E, middleware: Middleware<E>): void;
}
export {};
