/// <reference types="node" />
import type { ConfirmChannel, ConsumeMessage, Message } from 'amqplib';
import type { IChannelWrapper, IEventWrapper, IHandlerWrapper, PublishOptions } from '../interface';
import { BindingQueueOptions, DefaultedRetryOptions, IConsumerOptions } from '../interface';
import { PrepareHandlerStrategies, RetryStrategies } from '../provider';
import { EventBus } from './EventBus';
import { PubsubManager } from './PubsubManager';
export declare class Consumer extends PubsubManager implements IChannelWrapper {
    private readonly eventBus;
    private readonly retryStrategies;
    protected readonly options: IConsumerOptions;
    private readonly rootRetryOptions;
    private readonly bindingQueueOptions;
    private readonly prepareHandlerStrategies;
    /**
     * Set of exchanges that handlers listen to
     */
    private readonly exchanges;
    constructor(eventBus: EventBus, retryStrategies: RetryStrategies, options: IConsumerOptions, rootRetryOptions: DefaultedRetryOptions, bindingQueueOptions: BindingQueueOptions, prepareHandlerStrategies: PrepareHandlerStrategies);
    setupChannel(channel: ConfirmChannel): Promise<void>;
    /**
     * Listen for an event and consume its message payload
     *
     * @param handlerWrapper - event handler wrapper
     * @param onMessage - a callback that receives an event message
     */
    consume(handlerWrapper: IHandlerWrapper, onMessage: (message: ConsumeMessage | null) => void): Promise<void>;
    extractBindingPattern(mappedEvent: IEventWrapper): string;
    configureAutoAck(wrapper: IHandlerWrapper): void;
    addHandleCatch(handlerWrapper: IHandlerWrapper): void;
    ack(message: Message): void;
    nack(message: Message): void;
    publish(exchange: string, routingKey: string, content: Buffer | string | unknown, options?: PublishOptions): Promise<void>;
    configureRetryInfrastructure(wrappers: IHandlerWrapper[]): Promise<void>;
    /**
     * Queue that should be listened for events.
     */
    protected queue(handlerWrapper: IHandlerWrapper): string;
    protected bindingOptions(extra?: BindingQueueOptions): BindingQueueOptions;
    protected consumerConfiguration(): BindingQueueOptions;
    private bindEvents;
}
