import type { CommonCreationConfigType, QueueConsumerDependencies, QueueDependencies, QueueOptions } from '@message-queue-toolkit/core';
import { AbstractQueueService } from '@message-queue-toolkit/core';
import type { Channel, ChannelModel, Message } from 'amqplib';
import type { Options } from 'amqplib';
import type { AmqpConnectionManager, ConnectionReceiver } from './AmqpConnectionManager.ts';
export type AMQPDependencies = QueueDependencies & {
    amqpConnectionManager: AmqpConnectionManager;
};
export type AMQPConsumerDependencies = AMQPDependencies & QueueConsumerDependencies;
export type AMQPQueueConfig = Options.AssertQueue;
export type AMQPQueueCreationConfig = {
    queueOptions: AMQPQueueConfig;
    queueName: string;
    updateAttributesIfExists?: boolean;
};
export type AMQPTopicCreationConfig = AMQPQueueCreationConfig & {
    exchange: string;
    topicPattern?: string;
};
export type AMQPTopicPublisherConfig = {
    exchange: string;
} & CommonCreationConfigType;
export type AMQPQueueLocator = {
    queueName: string;
};
export type AMQPTopicLocator = AMQPQueueLocator & {
    exchange: string;
};
export declare abstract class AbstractAmqpService<MessagePayloadType extends object, DependenciesType extends AMQPDependencies = AMQPDependencies, ExecutionContext = unknown, PrehandlerOutput = unknown, CreationConfig extends CommonCreationConfigType = AMQPQueueCreationConfig, LocatorConfig extends object = AMQPQueueLocator> extends AbstractQueueService<MessagePayloadType, Message, DependenciesType, CreationConfig, LocatorConfig, QueueOptions<CreationConfig, LocatorConfig>, ExecutionContext, PrehandlerOutput> implements ConnectionReceiver {
    protected connection?: ChannelModel;
    private connectionManager;
    protected channel: Channel;
    private isShuttingDown;
    constructor(dependencies: DependenciesType, options: QueueOptions<CreationConfig, LocatorConfig>);
    receiveNewConnection(connection: ChannelModel): Promise<void>;
    protected abstract createMissingEntities(): Promise<void>;
    private destroyChannel;
    init(): Promise<void>;
    reconnect(): Promise<void>;
    close(): Promise<void>;
}
