export interface SNSTopicAttributes {
    TopicArn?: string;
    DisplayName?: string;
    Policy?: string;
    Owner?: string;
    SubscriptionsPending?: string;
    SubscriptionsConfirmed?: string;
    SubscriptionsDeleted?: string;
    DeliveryPolicy?: string;
    EffectiveDeliveryPolicy?: string;
    KmsMasterKeyId?: string;
}
export interface SNSSubscriptionAttributes {
    SubscriptionArn?: string;
    TopicArn?: string;
    Protocol?: string;
    Endpoint?: string;
    Owner?: string;
    ConfirmationWasAuthenticated?: string;
    RawMessageDelivery?: string;
    FilterPolicy?: string;
}
export type SNSProtocol = 'http' | 'https' | 'email' | 'email-json' | 'sms' | 'sqs' | 'application' | 'lambda';
/**
 * SNS service management using direct API calls
 */
export declare class SNSClient {
    private client;
    private region;
    constructor(region?: string);
    /**
     * Build form-encoded body for SNS API
     */
    private buildFormBody;
    /**
     * Create a new SNS topic
     */
    createTopic(params: {
        Name: string;
        DisplayName?: string;
        Tags?: Array<{
            Key: string;
            Value: string;
        }>;
        Attributes?: Record<string, string>;
    }): Promise<{
        TopicArn?: string;
    }>;
    /**
     * Delete an SNS topic
     */
    deleteTopic(topicArn: string): Promise<void>;
    /**
     * List all SNS topics
     */
    listTopics(nextToken?: string): Promise<{
        Topics?: Array<{
            TopicArn?: string;
        }>;
        NextToken?: string;
    }>;
    /**
     * Get topic attributes
     */
    getTopicAttributes(topicArn: string): Promise<SNSTopicAttributes>;
    /**
     * Set topic attributes
     */
    setTopicAttributes(params: {
        TopicArn: string;
        AttributeName: string;
        AttributeValue: string;
    }): Promise<void>;
    /**
     * Subscribe to a topic
     */
    subscribe(params: {
        TopicArn: string;
        Protocol: SNSProtocol;
        Endpoint: string;
        Attributes?: Record<string, string>;
        ReturnSubscriptionArn?: boolean;
    }): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Unsubscribe from a topic
     */
    unsubscribe(subscriptionArn: string): Promise<void>;
    /**
     * List subscriptions for a topic
     */
    listSubscriptionsByTopic(topicArn: string, nextToken?: string): Promise<{
        Subscriptions?: SNSSubscriptionAttributes[];
        NextToken?: string;
    }>;
    /**
     * Publish a message to a topic
     */
    publish(params: {
        TopicArn?: string;
        TargetArn?: string;
        PhoneNumber?: string;
        Message: string;
        Subject?: string;
        MessageStructure?: 'json';
        MessageAttributes?: Record<string, {
            DataType: 'String' | 'Number' | 'Binary';
            StringValue?: string;
            BinaryValue?: string;
        }>;
    }): Promise<{
        MessageId?: string;
    }>;
    /**
     * Publish SMS message directly (without topic)
     */
    publishSMS(phoneNumber: string, message: string, senderId?: string): Promise<{
        MessageId?: string;
    }>;
    /**
     * Subscribe an email address to a topic
     */
    subscribeEmail(topicArn: string, email: string): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Subscribe a Lambda function to a topic
     */
    subscribeLambda(topicArn: string, lambdaArn: string): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Subscribe an SQS queue to a topic
     */
    subscribeSqs(topicArn: string, queueArn: string, rawMessageDelivery?: boolean): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Subscribe an HTTP/HTTPS endpoint to a topic
     */
    subscribeHttp(topicArn: string, url: string, rawMessageDelivery?: boolean): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Subscribe an SMS number to a topic
     */
    subscribeSms(topicArn: string, phoneNumber: string): Promise<{
        SubscriptionArn?: string;
    }>;
    /**
     * Check if topic exists
     */
    topicExists(topicArn: string): Promise<boolean>;
    /**
     * Get SMS attributes (sandbox status, spending limits, etc.)
     */
    getSMSAttributes(): Promise<{
        MonthlySpendLimit?: string;
        DeliveryStatusIAMRole?: string;
        DeliveryStatusSuccessSamplingRate?: string;
        DefaultSenderID?: string;
        DefaultSMSType?: 'Promotional' | 'Transactional';
        UsageReportS3Bucket?: string;
    }>;
    /**
     * Set SMS attributes (sender ID, message type, etc.)
     */
    setSMSAttributes(attributes: {
        MonthlySpendLimit?: string;
        DeliveryStatusIAMRole?: string;
        DeliveryStatusSuccessSamplingRate?: string;
        DefaultSenderID?: string;
        DefaultSMSType?: 'Promotional' | 'Transactional';
        UsageReportS3Bucket?: string;
    }): Promise<void>;
    /**
     * Check if phone number is opted out
     */
    checkIfPhoneNumberIsOptedOut(phoneNumber: string): Promise<boolean>;
    /**
     * List phone numbers that have opted out of receiving SMS
     */
    listPhoneNumbersOptedOut(nextToken?: string): Promise<{
        phoneNumbers?: string[];
        nextToken?: string;
    }>;
    /**
     * Opt a phone number back in to receive SMS (requires user consent)
     */
    optInPhoneNumber(phoneNumber: string): Promise<void>;
    /**
     * List sandbox phone numbers (for SMS sandbox mode)
     */
    listSMSSandboxPhoneNumbers(nextToken?: string): Promise<{
        PhoneNumbers?: Array<{
            PhoneNumber?: string;
            Status?: 'Pending' | 'Verified';
        }>;
        NextToken?: string;
    }>;
    /**
     * Create a sandbox phone number for testing
     */
    createSMSSandboxPhoneNumber(phoneNumber: string, languageCode?: string): Promise<void>;
    /**
     * Verify a sandbox phone number with OTP
     */
    verifySMSSandboxPhoneNumber(phoneNumber: string, oneTimePassword: string): Promise<void>;
    /**
     * Delete a sandbox phone number
     */
    deleteSMSSandboxPhoneNumber(phoneNumber: string): Promise<void>;
    /**
     * Get SMS sandbox account status
     */
    getSMSSandboxAccountStatus(): Promise<{
        IsInSandbox: boolean;
    }>;
}
