import type { Either } from '@lokalise/node-core';
import type { BarrierResult, CommonCreationConfigType, MessageInvalidFormatError, MessageValidationError, QueuePublisherOptions, ResolvedMessage, SyncPublisher } from '@message-queue-toolkit/core';
import type { ZodSchema } from 'zod';
import type { AMQPDependencies } from './AbstractAmqpService.ts';
import { AbstractAmqpService } from './AbstractAmqpService.ts';
export type AMQPPublisherOptions<MessagePayloadType extends object, CreationConfig extends CommonCreationConfigType, LocatorConfig extends object> = QueuePublisherOptions<CreationConfig, LocatorConfig, MessagePayloadType> & {
    exchange?: string;
    isLazyInitEnabled?: boolean;
};
export declare abstract class AbstractAmqpPublisher<MessagePayloadType extends object, MessageOptionsType, CreationConfig extends CommonCreationConfigType, LocatorConfig extends object> extends AbstractAmqpService<MessagePayloadType, AMQPDependencies, unknown, unknown, CreationConfig, LocatorConfig> implements SyncPublisher<MessagePayloadType, MessageOptionsType> {
    protected readonly exchange?: string;
    private readonly messageSchemaContainer;
    private readonly isLazyInitEnabled;
    private initPromise?;
    constructor(dependencies: AMQPDependencies, options: AMQPPublisherOptions<MessagePayloadType, CreationConfig, LocatorConfig>);
    publish(message: MessagePayloadType, options: MessageOptionsType): void;
    protected abstract resolveTopicOrQueue(): string;
    protected abstract publishInternal(message: Buffer, options: MessageOptionsType): void;
    protected resolveSchema(message: MessagePayloadType): Either<Error, ZodSchema<MessagePayloadType>>;
    protected resolveMessage(): Either<MessageInvalidFormatError | MessageValidationError, ResolvedMessage>;
    protected processPrehandlers(): Promise<unknown>;
    protected preHandlerBarrier<BarrierOutput>(): Promise<BarrierResult<BarrierOutput>>;
    protected resolveNextFunction(): () => void;
    close(): Promise<void>;
    processMessage(): Promise<Either<'retryLater', 'success'>>;
}
