import { Event } from '../core/event';
import { EventBus as IEventBus, EventHandler } from '../types';
/**
 * Event publish error
 */
export declare class EventPublishError extends Error {
    readonly eventId: string;
    readonly eventType: string;
    readonly originalError?: Error | undefined;
    constructor(message: string, eventId: string, eventType: string, originalError?: Error | undefined);
}
/**
 * Local Event Bus for publishing and handling events
 */
export declare class EventBus implements IEventBus {
    private readonly logger;
    private readonly handlers;
    private readonly globalHandlers;
    /**
     * Publishes single event
     */
    publish(event: Event): Promise<void>;
    /**
     * Publishes multiple events
     */
    publishAll(events: Event[]): Promise<void>;
    /**
     * Subscribes to events of specific type
     */
    subscribe(eventType: string, handler: EventHandler): void;
    /**
     * Unsubscribes from events of specific type
     */
    unsubscribe(eventType: string, handler: EventHandler): void;
    /**
     * Subscribes to all events (global handler)
     */
    subscribeToAll(handler: EventHandler): void;
    /**
     * Unsubscribes from all events
     */
    unsubscribeFromAll(handler: EventHandler): void;
    /**
     * Gets handler count for event type
     */
    getHandlersCount(eventType: string): number;
    /**
     * Gets global handlers count
     */
    getGlobalHandlersCount(): number;
    /**
     * Clears all handlers
     */
    clear(): void;
    /**
     * Executes event handler with error handling
     */
    private executeHandler;
    /**
     * Creates metadata for event
     */
    private createEventMetadata;
}
/**
 * Simple event handler that stores events in memory
 * Useful for testing and development
 */
export declare class InMemoryEventStore {
    private readonly events;
    save(event: Event): Promise<void>;
    saveAll(events: Event[]): Promise<void>;
    getAll(): Event[];
    getByType(eventType: string): Event[];
    getByAggregateId(aggregateId: string): Event[];
    clear(): void;
    count(): number;
}
//# sourceMappingURL=event.publisher.d.ts.map