export interface Message {
    id: string;
    type: string;
    timestamp: Date;
    payload: any;
    metadata?: Record<string, any>;
}
export interface MessageBrokerOptions {
    url: string;
    connectionOptions?: Record<string, any>;
    defaultExchange?: string;
    defaultQueue?: string;
    deadLetterExchange?: string;
    deadLetterQueue?: string;
    retryOptions?: {
        maxRetries: number;
        retryDelay: number;
        exponentialBackoff?: boolean;
    };
    consumer?: {
        prefetch?: number;
        noAck?: boolean;
    };
    producer?: {
        persistent?: boolean;
        mandatory?: boolean;
    };
}
export interface MessageHandler<T = any> {
    handle(message: Message): Promise<void>;
    messageType: string;
    filter?(message: Message): boolean;
}
export interface MessagePublisher {
    publish(routingKey: string, message: Omit<Message, 'id' | 'timestamp'>): Promise<void>;
    publishToMany(routingKeys: string[], message: Omit<Message, 'id' | 'timestamp'>): Promise<void>;
    publishWithOptions(routingKey: string, message: Omit<Message, 'id' | 'timestamp'>, options: Record<string, any>): Promise<void>;
}
export interface MessageConsumer {
    subscribe(routingKey: string, handler: MessageHandler): Promise<void>;
    unsubscribe(routingKey: string, handler?: MessageHandler): Promise<void>;
    pause(): Promise<void>;
    resume(): Promise<void>;
}
export interface MessageBroker extends MessagePublisher, MessageConsumer {
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    isConnected(): boolean;
    createExchange(name: string, type: string, options?: Record<string, any>): Promise<void>;
    createQueue(name: string, options?: Record<string, any>): Promise<void>;
    bindQueue(queue: string, exchange: string, routingKey: string): Promise<void>;
}
