import type { Either } from '@lokalise/node-core';
import type { BarrierResult, MessageSchemaContainer, PreHandlingOutputs, Prehandler, QueueConsumer, QueueConsumerOptions } from '@message-queue-toolkit/core';
import type { ChannelModel, Message } from 'amqplib';
import type { AMQPConsumerDependencies, AMQPQueueCreationConfig, AMQPQueueLocator } from './AbstractAmqpService.ts';
import { AbstractAmqpService } from './AbstractAmqpService.ts';
export type AMQPConsumerOptions<MessagePayloadType extends object, ExecutionContext = undefined, PrehandlerOutput = undefined, CreationConfig extends AMQPQueueCreationConfig = AMQPQueueCreationConfig, LocatorConfig extends AMQPQueueLocator = AMQPQueueLocator> = QueueConsumerOptions<CreationConfig, LocatorConfig, NonNullable<unknown>, // DeadLetterQueueIntegrationOptions -> empty object for now
MessagePayloadType, ExecutionContext, PrehandlerOutput>;
export declare abstract class AbstractAmqpConsumer<MessagePayloadType extends object, ExecutionContext, PrehandlerOutput = undefined, CreationConfig extends AMQPQueueCreationConfig = AMQPQueueCreationConfig, LocatorConfig extends AMQPQueueLocator = AMQPQueueLocator> extends AbstractAmqpService<MessagePayloadType, AMQPConsumerDependencies, ExecutionContext, PrehandlerOutput, CreationConfig, LocatorConfig> implements QueueConsumer {
    private readonly transactionObservabilityManager?;
    private readonly errorResolver;
    private readonly executionContext;
    private readonly deadLetterQueueOptions?;
    private readonly maxRetryDuration;
    readonly _messageSchemaContainer: MessageSchemaContainer<MessagePayloadType>;
    private readonly handlerContainer;
    protected readonly queueName: string;
    constructor(dependencies: AMQPConsumerDependencies, options: AMQPConsumerOptions<MessagePayloadType, ExecutionContext, PrehandlerOutput, CreationConfig, LocatorConfig>, executionContext: ExecutionContext);
    start(): Promise<void>;
    init(): Promise<void>;
    receiveNewConnection(connection: ChannelModel): Promise<void>;
    private consume;
    private internalProcessMessage;
    protected processMessage(message: MessagePayloadType, messageType: string, preHandlingOutputs: PreHandlingOutputs<PrehandlerOutput, any>): Promise<Either<'retryLater', 'success'>>;
    protected processPrehandlers(message: MessagePayloadType, messageType: string): Promise<PrehandlerOutput>;
    protected preHandlerBarrier<BarrierOutput>(message: MessagePayloadType, messageType: string, preHandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
    protected resolveSchema(message: MessagePayloadType): Either<Error, import("zod").ZodType<MessagePayloadType, import("zod").ZodTypeDef, MessagePayloadType>>;
    protected resolveMessageLog(message: MessagePayloadType, messageType: string): unknown;
    protected resolveNextFunction(preHandlers: Prehandler<MessagePayloadType, ExecutionContext, unknown>[], message: MessagePayloadType, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: import("@message-queue-toolkit/core").PrehandlerResult) => void;
    private deserializeMessage;
    private tryToExtractId;
    protected resolveMessage(message: Message): Either<import("@message-queue-toolkit/core").MessageInvalidFormatError | import("@message-queue-toolkit/core").MessageValidationError, import("@message-queue-toolkit/core").ResolvedMessage>;
}
