import type { CreateTopicCommandInput, SNSClient, Tag } from '@aws-sdk/client-sns';
import type { QueueDependencies, QueueOptions } from '@message-queue-toolkit/core';
import { AbstractQueueService } from '@message-queue-toolkit/core';
import type { STSClient } from '@aws-sdk/client-sts';
import type { SNS_MESSAGE_BODY_TYPE } from '../types/MessageTypes';
export declare const SNS_MESSAGE_MAX_SIZE: number;
export type SNSDependencies = QueueDependencies & {
    snsClient: SNSClient;
    stsClient: STSClient;
};
export type SNSTopicAWSConfig = CreateTopicCommandInput;
export type SNSTopicConfig = {
    tags?: Tag[];
    DataProtectionPolicy?: string;
    Attributes?: {
        DeliveryPolicy?: string;
        DisplayName?: string;
        Policy?: string;
        SignatureVersion?: number;
        TracingConfig?: string;
        FifoTopic?: boolean;
        ContentBasedDeduplication?: boolean;
    };
};
export type ExtraSNSCreationParams = {
    queueUrlsWithSubscribePermissionsPrefix?: string | readonly string[];
    allowedSourceOwner?: string;
    forceTagUpdate?: boolean;
};
export type SNSCreationConfig = {
    topic?: SNSTopicAWSConfig;
    updateAttributesIfExists?: boolean;
} & ExtraSNSCreationParams;
export type SNSTopicLocatorType = {
    topicArn?: string;
    topicName?: string;
};
export type SNSOptions = QueueOptions<SNSCreationConfig, SNSTopicLocatorType>;
export declare abstract class AbstractSnsService<MessagePayloadType extends object, MessageEnvelopeType extends object = SNS_MESSAGE_BODY_TYPE, SNSOptionsType extends SNSOptions = SNSOptions, DependenciesType extends SNSDependencies = SNSDependencies> extends AbstractQueueService<MessagePayloadType, MessageEnvelopeType, DependenciesType, SNSCreationConfig, SNSTopicLocatorType, SNSOptionsType> {
    protected readonly snsClient: SNSClient;
    protected readonly stsClient: STSClient;
    protected topicArn: string;
    constructor(dependencies: DependenciesType, options: SNSOptionsType);
    init(): Promise<void>;
    close(): Promise<void>;
}
