import { Options, AmqpConnectionManager } from 'amqp-connection-manager'; import { BrokerDeadLetterPayloadEntity, BrokerRetryEntity } from "../../types"; import { PublishOptions } from "amqp-connection-manager/dist/types/ChannelWrapper"; export type RabbitMQQueueConfig = { queueName: string; queueType?: string; queueOptions?: Options.AssertQueue; }; export type RabbitMQExchangeConfig = { exchangeName: string; exchangeType?: string; exchangeOptions?: Options.AssertExchange; }; export type RabbitMQExchangeBindingConfig = { queueName: string; exchangeName: string; pattern?: string; args?: any; }; export type RabbitMQConnectConfig = { url?: string; heartbeat?: number; retryCountBeforeExit?: number; queues: RabbitMQQueueConfig[]; exchanges: RabbitMQExchangeConfig[]; exchangeBindings: RabbitMQExchangeBindingConfig[]; }; export declare class RabbitMQClient { private static instance; private channel; private connection; private retryCountBeforeExit; private connectConfig; /** * Get the singleton instance of RabbitMQ * @returns {RabbitMQClient} The singleton instance * @throws {Error} If getInstance is called before initialization */ static getInstance(): RabbitMQClient; /** * Reset the singleton instance (mainly for testing purposes) */ static resetInstance(): void; connect(config: RabbitMQConnectConfig): AmqpConnectionManager; /** * Static version of sendToQueue */ sendToQueue(queueName: string, payload: any, options?: PublishOptions): Promise; static sendToQueue(queueName: string, payload: any, options?: PublishOptions): Promise; publishToExchange(exchangeName: string, routeKey: string | undefined, payload: any, options?: PublishOptions): Promise; static publishToExchange(exchangeName: string, routeKey: string | undefined, payload: any, options?: PublishOptions): Promise; static sendToDeadLetter(deadLetterEntity: BrokerDeadLetterPayloadEntity): Promise; listen(queueName: string, options: any, callback: (payload: string, options: Record) => void): Promise; static listen(queueName: string, options: any, callback: (payload: string, options: Record) => void): Promise; static requeueDeadLetter(deadLetterQueueName: string, queueOptions?: any): Promise; static sendToRetry(brokerPayload: BrokerRetryEntity): Promise; close(): void; }