# Copyright (c) 2012-2025, Mark Peek <mark@peek.org>
# All rights reserved.
#
# See LICENSE file for full license.
#
# *** Do not modify - this file is autogenerated ***


from . import AWSObject, AWSProperty, PropsDictType, Tags
from .validators import boolean, double, integer


class ResponderErrorMaskingForHttpCode(AWSProperty):
    """
    `ResponderErrorMaskingForHttpCode <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-outboundexternallink-respondererrormaskingforhttpcode.html>`__
    """

    props: PropsDictType = {
        "Action": (str, True),
        "HttpCode": (str, True),
        "LoggingTypes": ([str], True),
        "ResponseLoggingPercentage": (double, False),
    }


class LinkAttributes(AWSProperty):
    """
    `LinkAttributes <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-outboundexternallink-linkattributes.html>`__
    """

    props: PropsDictType = {
        "CustomerProvidedId": (str, False),
        "ResponderErrorMasking": ([ResponderErrorMaskingForHttpCode], False),
    }


class LinkApplicationLogSampling(AWSProperty):
    """
    `LinkApplicationLogSampling <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-outboundexternallink-linkapplicationlogsampling.html>`__
    """

    props: PropsDictType = {
        "ErrorLog": (double, True),
        "FilterLog": (double, True),
    }


class ApplicationLogs(AWSProperty):
    """
    `ApplicationLogs <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-outboundexternallink-applicationlogs.html>`__
    """

    props: PropsDictType = {
        "LinkApplicationLogSampling": (LinkApplicationLogSampling, True),
    }


class LinkLogSettings(AWSProperty):
    """
    `LinkLogSettings <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-outboundexternallink-linklogsettings.html>`__
    """

    props: PropsDictType = {
        "ApplicationLogs": (ApplicationLogs, True),
    }


class InboundExternalLink(AWSObject):
    """
    `InboundExternalLink <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rtbfabric-inboundexternallink.html>`__
    """

    resource_type = "AWS::RTBFabric::InboundExternalLink"

    props: PropsDictType = {
        "GatewayId": (str, True),
        "LinkAttributes": (LinkAttributes, False),
        "LinkLogSettings": (LinkLogSettings, True),
        "Tags": (Tags, False),
    }


class NoBidModuleParameters(AWSProperty):
    """
    `NoBidModuleParameters <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-nobidmoduleparameters.html>`__
    """

    props: PropsDictType = {
        "PassThroughPercentage": (double, False),
        "Reason": (str, False),
        "ReasonCode": (integer, False),
    }


class HeaderTagAction(AWSProperty):
    """
    `HeaderTagAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-headertagaction.html>`__
    """

    props: PropsDictType = {
        "Name": (str, True),
        "Value": (str, True),
    }


class NoBidAction(AWSProperty):
    """
    `NoBidAction <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-nobidaction.html>`__
    """

    props: PropsDictType = {
        "NoBidReasonCode": (integer, False),
    }


class Action(AWSProperty):
    """
    `Action <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-action.html>`__
    """

    props: PropsDictType = {
        "HeaderTag": (HeaderTagAction, False),
        "NoBid": (NoBidAction, False),
    }


class FilterCriterion(AWSProperty):
    """
    `FilterCriterion <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-filtercriterion.html>`__
    """

    props: PropsDictType = {
        "Path": (str, True),
        "Values": ([str], True),
    }


class Filter(AWSProperty):
    """
    `Filter <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-filter.html>`__
    """

    props: PropsDictType = {
        "Criteria": ([FilterCriterion], True),
    }


class OpenRtbAttributeModuleParameters(AWSProperty):
    """
    `OpenRtbAttributeModuleParameters <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-openrtbattributemoduleparameters.html>`__
    """

    props: PropsDictType = {
        "Action": (Action, True),
        "FilterConfiguration": ([Filter], True),
        "FilterType": (str, True),
        "HoldbackPercentage": (double, True),
    }


class ModuleParameters(AWSProperty):
    """
    `ModuleParameters <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-moduleparameters.html>`__
    """

    props: PropsDictType = {
        "NoBid": (NoBidModuleParameters, False),
        "OpenRtbAttribute": (OpenRtbAttributeModuleParameters, False),
    }


class ModuleConfiguration(AWSProperty):
    """
    `ModuleConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-link-moduleconfiguration.html>`__
    """

    props: PropsDictType = {
        "DependsOn": ([str], False),
        "ModuleParameters": (ModuleParameters, False),
        "Name": (str, True),
        "Version": (str, False),
    }


class Link(AWSObject):
    """
    `Link <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rtbfabric-link.html>`__
    """

    resource_type = "AWS::RTBFabric::Link"

    props: PropsDictType = {
        "GatewayId": (str, True),
        "HttpResponderAllowed": (boolean, False),
        "LinkAttributes": (LinkAttributes, False),
        "LinkLogSettings": (LinkLogSettings, True),
        "ModuleConfigurationList": ([ModuleConfiguration], False),
        "PeerGatewayId": (str, True),
        "Tags": (Tags, False),
    }


class OutboundExternalLink(AWSObject):
    """
    `OutboundExternalLink <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rtbfabric-outboundexternallink.html>`__
    """

    resource_type = "AWS::RTBFabric::OutboundExternalLink"

    props: PropsDictType = {
        "GatewayId": (str, True),
        "LinkAttributes": (LinkAttributes, False),
        "LinkLogSettings": (LinkLogSettings, True),
        "PublicEndpoint": (str, True),
        "Tags": (Tags, False),
    }


class RequesterGateway(AWSObject):
    """
    `RequesterGateway <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rtbfabric-requestergateway.html>`__
    """

    resource_type = "AWS::RTBFabric::RequesterGateway"

    props: PropsDictType = {
        "Description": (str, False),
        "SecurityGroupIds": ([str], True),
        "SubnetIds": ([str], True),
        "Tags": (Tags, False),
        "VpcId": (str, True),
    }


class AutoScalingGroupsConfiguration(AWSProperty):
    """
    `AutoScalingGroupsConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-respondergateway-autoscalinggroupsconfiguration.html>`__
    """

    props: PropsDictType = {
        "AutoScalingGroupNameList": ([str], True),
        "RoleArn": (str, True),
    }


class EksEndpointsConfiguration(AWSProperty):
    """
    `EksEndpointsConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-respondergateway-eksendpointsconfiguration.html>`__
    """

    props: PropsDictType = {
        "ClusterApiServerCaCertificateChain": (str, True),
        "ClusterApiServerEndpointUri": (str, True),
        "ClusterName": (str, True),
        "EndpointsResourceName": (str, True),
        "EndpointsResourceNamespace": (str, True),
        "RoleArn": (str, True),
    }


class ManagedEndpointConfiguration(AWSProperty):
    """
    `ManagedEndpointConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-respondergateway-managedendpointconfiguration.html>`__
    """

    props: PropsDictType = {
        "AutoScalingGroupsConfiguration": (AutoScalingGroupsConfiguration, False),
        "EksEndpointsConfiguration": (EksEndpointsConfiguration, False),
    }


class TrustStoreConfiguration(AWSProperty):
    """
    `TrustStoreConfiguration <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rtbfabric-respondergateway-truststoreconfiguration.html>`__
    """

    props: PropsDictType = {
        "CertificateAuthorityCertificates": ([str], True),
    }


class ResponderGateway(AWSObject):
    """
    `ResponderGateway <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-rtbfabric-respondergateway.html>`__
    """

    resource_type = "AWS::RTBFabric::ResponderGateway"

    props: PropsDictType = {
        "Description": (str, False),
        "DomainName": (str, False),
        "ManagedEndpointConfiguration": (ManagedEndpointConfiguration, False),
        "Port": (integer, True),
        "Protocol": (str, True),
        "SecurityGroupIds": ([str], True),
        "SubnetIds": ([str], True),
        "Tags": (Tags, False),
        "TrustStoreConfiguration": (TrustStoreConfiguration, False),
        "VpcId": (str, True),
    }
