import type { IContainer } from 'node-cqrs'; import type { IEventBus, IMessage, IMessageHandler, IMessageMeta, IObservable, IObservableQueueProvider } from '../interfaces/index.ts'; import { type Subscription, type SubscribeResult } from './RabbitMqGateway.ts'; export type RabbitMqEventBusConfig = Partial>; /** * RabbitMQ-backed event bus: delivers each published message * to all subscribers. * * By default uses an exclusive (non-durable) queue per connection. * Set `queueName` in config for a durable queue that survives restarts. * * Dead letter queue is disabled by default (`deadLetterQueue: false`). * When a handler fails or times out, the message is discarded. * Set `deadLetterQueue: true` to route rejected messages to a `.failed` queue. * * Optionally ignores messages published by this instance (default: true). * * Supports named durable queues via {@link queue} for single-consumer delivery. */ export declare class RabbitMqEventBus implements IEventBus, IObservableQueueProvider { #private; static get allEventsWildcard(): string; static DEFAULT_EXCHANGE: string; constructor({ rabbitMqGateway, rabbitMqEventBusConfig }: Pick); /** * Publishes a message to the event exchange. * The message will be delivered to all subscribers. */ publish(message: IMessage, meta?: IMessageMeta): Promise; /** * Registers a message handler for a specific message type. * * When `queueName` is set in config, uses a durable queue * that survives broker restarts. Otherwise uses an exclusive * (non-durable) queue that is deleted on disconnect. */ on(eventType: string, handler: IMessageHandler): Promise; /** * Removes a previously registered message handler for a specific message type. */ off(eventType: string, handler: IMessageHandler): Promise; /** * Returns a {@link RabbitMqCommandBus} that uses a durable queue with the given name. * Messages published to the event exchange are also delivered to this queue, * but only one consumer will process each message. */ queue(queueName: string): IObservable; }