import type { EventRegistry, MessagePublishType, MessageSchemaType, MetadataFiller, PublisherBaseEventType } from '@message-queue-toolkit/core';
import { AbstractPublisherManager } from '@message-queue-toolkit/core';
import type { PublisherMessageMetadataType } from '@message-queue-toolkit/core/lib/messages/baseMessageSchemas';
import type { SnsAwareEventDefinition } from '@message-queue-toolkit/schemas';
import type z from 'zod';
import type { AbstractSnsPublisher, SNSMessageOptions, SNSPublisherOptions } from './AbstractSnsPublisher';
import type { SNSCreationConfig, SNSDependencies, SNSTopicLocatorType } from './AbstractSnsService';
import type { SnsPublisherFactory } from './CommonSnsPublisherFactory';
export type { SnsAwareEventDefinition };
export type SnsPublisherManagerDependencies<SupportedEvents extends SnsAwareEventDefinition[]> = {
    eventRegistry: EventRegistry<SupportedEvents>;
} & SNSDependencies;
export type SnsPublisherManagerOptions<T extends AbstractSnsPublisher<EventType>, EventType extends PublisherBaseEventType, MetadataType> = {
    metadataField?: string;
    publisherFactory: SnsPublisherFactory<T, EventType>;
    metadataFiller: MetadataFiller<EventType, MetadataType>;
    newPublisherOptions: Omit<SNSPublisherOptions<EventType>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'> & {
        creationConfig?: Omit<SNSCreationConfig, 'topic'>;
    };
};
export type SnsMessageSchemaType<T extends SnsAwareEventDefinition> = z.infer<T['publisherSchema']>;
export declare class SnsPublisherManager<T extends AbstractSnsPublisher<z.infer<SupportedEventDefinitions[number]['publisherSchema']>>, SupportedEventDefinitions extends SnsAwareEventDefinition[], MetadataType = PublisherMessageMetadataType> extends AbstractPublisherManager<SnsAwareEventDefinition, NonNullable<SupportedEventDefinitions[number]['snsTopic']>, AbstractSnsPublisher<z.infer<SupportedEventDefinitions[number]['publisherSchema']>>, SNSDependencies, SNSCreationConfig, SNSTopicLocatorType, SnsMessageSchemaType<SnsAwareEventDefinition>, Omit<SNSPublisherOptions<z.infer<SupportedEventDefinitions[number]['publisherSchema']>>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'>, SupportedEventDefinitions, MetadataType, SNSMessageOptions> {
    constructor(dependencies: SnsPublisherManagerDependencies<SupportedEventDefinitions>, options: SnsPublisherManagerOptions<T, z.infer<SupportedEventDefinitions[number]['publisherSchema']>, MetadataType>);
    publish(topic: NonNullable<SupportedEventDefinitions[number]['snsTopic']>, message: MessagePublishType<SupportedEventDefinitions[number]>, precedingEventMetadata?: Partial<MetadataType>, messageOptions?: SNSMessageOptions): Promise<MessageSchemaType<SupportedEventDefinitions[number]>>;
    protected resolveCreationConfig(eventTarget: NonNullable<SupportedEventDefinitions[number]['snsTopic']>): SNSCreationConfig;
    protected resolveEventTarget(event: SnsAwareEventDefinition): NonNullable<SupportedEventDefinitions[number]['snsTopic']> | undefined;
}
