import cdk = require('@aws-cdk/cdk');
export declare namespace cloudformation {
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
     */
    interface SubscriptionResourceProps {
        /**
         * ``AWS::SNS::Subscription.Endpoint``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-endpoint
         */
        endpoint?: string | cdk.Token;
        /**
         * ``AWS::SNS::Subscription.Protocol``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-protocol
         */
        protocol?: string | cdk.Token;
        /**
         * ``AWS::SNS::Subscription.TopicArn``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#topicarn
         */
        topicArn?: string | cdk.Token;
    }
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
     */
    class SubscriptionResource extends cdk.Resource {
        /**
         * The CloudFormation resource type name for this resource class.
         */
        static readonly resourceTypeName: string;
        /**
         * Creates a new ``AWS::SNS::Subscription``.
         *
         * @param parent     the ``cdk.Construct`` this ``SubscriptionResource`` is a part of
         * @param name       the name of the resource in the ``cdk.Construct`` tree
         * @param properties the properties of this ``SubscriptionResource``
         */
        constructor(parent: cdk.Construct, name: string, properties?: SubscriptionResourceProps);
        protected renderProperties(): {
            [key: string]: any;
        };
    }
}
export declare namespace cloudformation {
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
     */
    interface TopicResourceProps {
        /**
         * ``AWS::SNS::Topic.DisplayName``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-displayname
         */
        displayName?: string | cdk.Token;
        /**
         * ``AWS::SNS::Topic.Subscription``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-subscription
         */
        subscription?: Array<TopicResource.SubscriptionProperty | cdk.Token> | cdk.Token;
        /**
         * ``AWS::SNS::Topic.TopicName``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#cfn-sns-topic-topicname
         */
        topicName?: string | cdk.Token;
    }
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html
     */
    class TopicResource extends cdk.Resource {
        /**
         * The CloudFormation resource type name for this resource class.
         */
        static readonly resourceTypeName: string;
        /**
         * @cloudformation_attribute TopicName
         */
        readonly topicName: TopicName;
        /**
         * Creates a new ``AWS::SNS::Topic``.
         *
         * @param parent     the ``cdk.Construct`` this ``TopicResource`` is a part of
         * @param name       the name of the resource in the ``cdk.Construct`` tree
         * @param properties the properties of this ``TopicResource``
         */
        constructor(parent: cdk.Construct, name: string, properties?: TopicResourceProps);
        protected renderProperties(): {
            [key: string]: any;
        };
    }
    namespace TopicResource {
        /**
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html
         */
        interface SubscriptionProperty {
            /**
             * ``TopicResource.SubscriptionProperty.Endpoint``
             * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html#cfn-sns-topic-subscription-endpoint
             */
            endpoint: string | cdk.Token;
            /**
             * ``TopicResource.SubscriptionProperty.Protocol``
             * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-subscription.html#cfn-sns-topic-subscription-protocol
             */
            protocol: string | cdk.Token;
        }
    }
}
export declare class TopicName extends cdk.Token {
}
export declare namespace cloudformation {
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html
     */
    interface TopicPolicyResourceProps {
        /**
         * ``AWS::SNS::TopicPolicy.PolicyDocument``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html#cfn-sns-topicpolicy-policydocument
         */
        policyDocument: object | cdk.Token;
        /**
         * ``AWS::SNS::TopicPolicy.Topics``
         * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html#cfn-sns-topicpolicy-topics
         */
        topics: Array<string | cdk.Token> | cdk.Token;
    }
    /**
     * @link http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html
     */
    class TopicPolicyResource extends cdk.Resource {
        /**
         * The CloudFormation resource type name for this resource class.
         */
        static readonly resourceTypeName: string;
        /**
         * Creates a new ``AWS::SNS::TopicPolicy``.
         *
         * @param parent     the ``cdk.Construct`` this ``TopicPolicyResource`` is a part of
         * @param name       the name of the resource in the ``cdk.Construct`` tree
         * @param properties the properties of this ``TopicPolicyResource``
         */
        constructor(parent: cdk.Construct, name: string, properties: TopicPolicyResourceProps);
        protected renderProperties(): {
            [key: string]: any;
        };
    }
}
