# pylint: disable=line-too-long,useless-suppression,too-many-lines
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# Code generated by Microsoft (R) Python Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

from typing import Any, Literal, Optional, TYPE_CHECKING, Union
from typing_extensions import Required, TypedDict

from .models._enums import (
    CertificateSource,
    CertificateSourceParametersType,
    DeliveryRuleActionEnum,
    DeliveryRuleActionParametersType,
    DeliveryRuleConditionParametersType,
    MatchVariable,
    SecretType,
    SecurityPolicyType,
)

if TYPE_CHECKING:
    from .models import (
        AFDEndpointProtocols,
        ActionType,
        AfdCertificateType,
        AfdCipherSuiteSetType,
        AfdCustomizedCipherSuiteForTls12,
        AfdCustomizedCipherSuiteForTls13,
        AfdMinimumTlsVersion,
        AfdProvisioningState,
        AfdQueryStringCachingBehavior,
        Algorithm,
        AutoGeneratedDomainNameLabelScope,
        CacheBehavior,
        CacheType,
        CertificateType,
        ClientPortOperator,
        CookiesOperator,
        CreatedByType,
        CustomRuleEnabledState,
        DeleteRule,
        DeploymentStatus,
        DestinationProtocol,
        DomainValidationState,
        EnabledState,
        EndpointProvisioningState,
        EndpointResourceState,
        ForwardingProtocol,
        GeoFilterActions,
        HeaderAction,
        HealthProbeRequestType,
        HostNameOperator,
        HttpVersionOperator,
        HttpsRedirect,
        IsDeviceMatchConditionParametersMatchValuesItem,
        IsDeviceOperator,
        KeyVaultSigningKeyParametersTypeName,
        LinkToDefaultDomain,
        ManagedRuleEnabledState,
        ManagedServiceIdentityType,
        MatchProcessingBehavior,
        MinimumTlsVersion,
        Operator,
        OptimizationType,
        OriginAuthenticationType,
        OriginGroupProvisioningState,
        OriginGroupResourceState,
        OriginProvisioningState,
        OriginResourceState,
        ParamIndicator,
        PolicyEnabledState,
        PolicyMode,
        PolicyResourceState,
        PolicySettingsDefaultCustomBlockResponseStatusCode,
        PostArgsOperator,
        PrivateEndpointStatus,
        ProbeProtocol,
        ProfileProvisioningState,
        ProfileResourceState,
        ProfileScrubbingState,
        ProtocolType,
        ProvisioningState,
        QueryStringBehavior,
        QueryStringCachingBehavior,
        QueryStringOperator,
        RedirectType,
        RemoteAddressOperator,
        RequestBodyOperator,
        RequestHeaderOperator,
        RequestMethodMatchConditionParametersMatchValuesItem,
        RequestMethodOperator,
        RequestSchemeMatchConditionParametersMatchValuesItem,
        RequestSchemeMatchConditionParametersOperator,
        RequestUriOperator,
        ResourceType,
        ResponseBasedDetectedErrorTypes,
        RuleCacheBehavior,
        RuleIsCompressionEnabled,
        RuleQueryStringCachingBehavior,
        ScrubbingRuleEntryMatchOperator,
        ScrubbingRuleEntryMatchVariable,
        ScrubbingRuleEntryState,
        SecretType,
        ServerPortOperator,
        SharedPrivateLinkResourceStatus,
        SkuName,
        SocketAddrOperator,
        SslProtocol,
        SslProtocolOperator,
        Transform,
        TransformType,
        UpdateRule,
        UrlFileExtensionOperator,
        UrlFileNameOperator,
        UrlPathOperator,
        WafMatchVariable,
    )


class ActivatedResourceReference(TypedDict, total=False):
    """Reference to another resource along with its state.

    :ivar id: Resource ID.
    :vartype id: str
    :ivar is_active: Whether the resource is active or inactive.
    :vartype is_active: bool
    """

    id: str
    """Resource ID."""
    isActive: bool
    """Whether the resource is active or inactive."""


class Resource(TypedDict, total=False):
    """Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """

    id: str
    """Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}."""
    name: str
    """The name of the resource."""
    type: str
    """The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\" or
     \"Microsoft.Storage/storageAccounts\"."""
    systemData: "SystemData"
    """Azure Resource Manager metadata containing createdBy and modifiedBy information."""


class ProxyResource(Resource):
    """Proxy Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    """


class AFDDomain(ProxyResource):
    """Friendly domain name mapping to the endpoint hostname that the customer provides for branding
    purposes, e.g. `www.contoso.com <http://www.contoso.com>`_.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the domain to create.
    :vartype properties: "AFDDomainProperties"
    """

    properties: "AFDDomainProperties"
    """The JSON object that contains the properties of the domain to create."""


class AFDDomainHttpsCustomizedCipherSuiteSet(TypedDict, total=False):
    """Customized cipher suite set object that will be used for Https when cipherSuiteSetType is
    Customized.

    :ivar cipher_suite_set_for_tls12: Cipher suites for TLS 1.2. Required at least one in
     minimumTlsVersion TLS 1.2.
    :vartype cipher_suite_set_for_tls12: list[Union[str, "AfdCustomizedCipherSuiteForTls12"]]
    :ivar cipher_suite_set_for_tls13: Cipher suites for TLS 1.3. Required at least one in
     minimumTlsVersion TLS 1.2, TLS 1.3.
    :vartype cipher_suite_set_for_tls13: list[Union[str, "AfdCustomizedCipherSuiteForTls13"]]
    """

    cipherSuiteSetForTls12: list[Union[str, "AfdCustomizedCipherSuiteForTls12"]]
    """Cipher suites for TLS 1.2. Required at least one in minimumTlsVersion TLS 1.2."""
    cipherSuiteSetForTls13: list[Union[str, "AfdCustomizedCipherSuiteForTls13"]]
    """Cipher suites for TLS 1.3. Required at least one in minimumTlsVersion TLS 1.2, TLS 1.3."""


class AFDDomainHttpsParameters(TypedDict, total=False):
    """The JSON object that contains the properties to secure a domain.

    :ivar certificate_type: Defines the source of the SSL certificate. Required. Known values are:
     "CustomerCertificate", "ManagedCertificate", and "AzureFirstPartyManagedCertificate".
    :vartype certificate_type: Union[str, "AfdCertificateType"]
    :ivar cipher_suite_set_type: cipher suite set type that will be used for Https. Known values
     are: "Customized", "TLS10_2019", "TLS12_2022", and "TLS12_2023".
    :vartype cipher_suite_set_type: Union[str, "AfdCipherSuiteSetType"]
    :ivar minimum_tls_version: TLS protocol version that will be used for Https when
     cipherSuiteSetType is Customized. Known values are: "TLS10", "TLS12", and "TLS13".
    :vartype minimum_tls_version: Union[str, "AfdMinimumTlsVersion"]
    :ivar customized_cipher_suite_set: Customized cipher suites object that will be used for Https
     when cipherSuiteSetType is Customized.
    :vartype customized_cipher_suite_set: "AFDDomainHttpsCustomizedCipherSuiteSet"
    :ivar secret: Resource reference to the secret. ie. subs/rg/profile/secret.
    :vartype secret: "ResourceReference"
    """

    certificateType: Required[Union[str, "AfdCertificateType"]]
    """Defines the source of the SSL certificate. Required. Known values are: \"CustomerCertificate\",
     \"ManagedCertificate\", and \"AzureFirstPartyManagedCertificate\"."""
    cipherSuiteSetType: Union[str, "AfdCipherSuiteSetType"]
    """cipher suite set type that will be used for Https. Known values are: \"Customized\",
     \"TLS10_2019\", \"TLS12_2022\", and \"TLS12_2023\"."""
    minimumTlsVersion: Union[str, "AfdMinimumTlsVersion"]
    """TLS protocol version that will be used for Https when cipherSuiteSetType is Customized. Known
     values are: \"TLS10\", \"TLS12\", and \"TLS13\"."""
    customizedCipherSuiteSet: "AFDDomainHttpsCustomizedCipherSuiteSet"
    """Customized cipher suites object that will be used for Https when cipherSuiteSetType is
     Customized."""
    secret: "ResourceReference"
    """Resource reference to the secret. ie. subs/rg/profile/secret."""


class AFDDomainProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the domain to create.

    :ivar profile_name: The name of the profile which holds the domain.
    :vartype profile_name: str
    :ivar tls_settings: The configuration specifying how to enable HTTPS for the domain - using
     AzureFrontDoor managed certificate or user's own certificate. If not specified, enabling ssl
     uses AzureFrontDoor managed certificate by default.
    :vartype tls_settings: "AFDDomainHttpsParameters"
    :ivar azure_dns_zone: Resource reference to the Azure DNS zone.
    :vartype azure_dns_zone: "ResourceReference"
    :ivar pre_validated_custom_domain_resource_id: Resource reference to the Azure resource where
     custom domain ownership was prevalidated.
    :vartype pre_validated_custom_domain_resource_id: "ResourceReference"
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    :ivar domain_validation_state: Provisioning substate shows the progress of custom HTTPS
     enabling/disabling process step by step. DCV stands for DomainControlValidation. Known values
     are: "Unknown", "Submitting", "Pending", "Rejected", "TimedOut", "PendingRevalidation",
     "Approved", "RefreshingValidationToken", and "InternalError".
    :vartype domain_validation_state: Union[str, "DomainValidationState"]
    :ivar host_name: The host name of the domain. Must be a domain name. Required.
    :vartype host_name: str
    :ivar extended_properties: Key-Value pair representing migration properties for domains.
    :vartype extended_properties: dict[str, str]
    :ivar validation_properties: Values the customer needs to validate domain ownership.
    :vartype validation_properties: "DomainValidationProperties"
    """

    profileName: str
    """The name of the profile which holds the domain."""
    tlsSettings: "AFDDomainHttpsParameters"
    """The configuration specifying how to enable HTTPS for the domain - using AzureFrontDoor managed
     certificate or user's own certificate. If not specified, enabling ssl uses AzureFrontDoor
     managed certificate by default."""
    azureDnsZone: "ResourceReference"
    """Resource reference to the Azure DNS zone."""
    preValidatedCustomDomainResourceId: "ResourceReference"
    """Resource reference to the Azure resource where custom domain ownership was prevalidated."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""
    domainValidationState: Union[str, "DomainValidationState"]
    """Provisioning substate shows the progress of custom HTTPS enabling/disabling process step by
     step. DCV stands for DomainControlValidation. Known values are: \"Unknown\", \"Submitting\",
     \"Pending\", \"Rejected\", \"TimedOut\", \"PendingRevalidation\", \"Approved\",
     \"RefreshingValidationToken\", and \"InternalError\"."""
    hostName: Required[str]
    """The host name of the domain. Must be a domain name. Required."""
    extendedProperties: dict[str, str]
    """Key-Value pair representing migration properties for domains."""
    validationProperties: "DomainValidationProperties"
    """Values the customer needs to validate domain ownership."""


class AFDDomainUpdateParameters(TypedDict, total=False):
    """The domain JSON object required for domain creation or update.

    :ivar properties: The JSON object that contains the properties of the domain to create.
    :vartype properties: "AFDDomainUpdatePropertiesParameters"
    """

    properties: "AFDDomainUpdatePropertiesParameters"
    """The JSON object that contains the properties of the domain to create."""


class AFDDomainUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the domain to create.

    :ivar profile_name: The name of the profile which holds the domain.
    :vartype profile_name: str
    :ivar tls_settings: The configuration specifying how to enable HTTPS for the domain - using
     AzureFrontDoor managed certificate or user's own certificate. If not specified, enabling ssl
     uses AzureFrontDoor managed certificate by default.
    :vartype tls_settings: "AFDDomainHttpsParameters"
    :ivar azure_dns_zone: Resource reference to the Azure DNS zone.
    :vartype azure_dns_zone: "ResourceReference"
    :ivar pre_validated_custom_domain_resource_id: Resource reference to the Azure resource where
     custom domain ownership was prevalidated.
    :vartype pre_validated_custom_domain_resource_id: "ResourceReference"
    """

    profileName: str
    """The name of the profile which holds the domain."""
    tlsSettings: "AFDDomainHttpsParameters"
    """The configuration specifying how to enable HTTPS for the domain - using AzureFrontDoor managed
     certificate or user's own certificate. If not specified, enabling ssl uses AzureFrontDoor
     managed certificate by default."""
    azureDnsZone: "ResourceReference"
    """Resource reference to the Azure DNS zone."""
    preValidatedCustomDomainResourceId: "ResourceReference"
    """Resource reference to the Azure resource where custom domain ownership was prevalidated."""


class TrackedResource(Resource):
    """Tracked Resource.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    """

    tags: dict[str, str]
    """Resource tags."""
    location: Required[str]
    """The geo-location where the resource lives. Required."""


class AFDEndpoint(TrackedResource):
    """Azure Front Door endpoint is the entity within a Azure Front Door profile containing
    configuration information such as origin, protocol, content caching and delivery behavior. The
    AzureFrontDoor endpoint uses the URL format <endpointname>.azureedge.net.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The JSON object that contains the properties required to create an endpoint.
    :vartype properties: "AFDEndpointProperties"
    """

    properties: "AFDEndpointProperties"
    """The JSON object that contains the properties required to create an endpoint."""


class AFDEndpointProperties(TypedDict, total=False):
    """The JSON object that contains the properties required to create an endpoint.

    :ivar profile_name: The name of the profile which holds the endpoint.
    :vartype profile_name: str
    :ivar enabled_state: Whether to enable use of this rule. Permitted values are 'Enabled' or
     'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    :ivar host_name: The host name of the endpoint structured as {endpointName}.{DNSZone}, e.g.
     contoso.azureedge.net.
    :vartype host_name: str
    :ivar auto_generated_domain_name_label_scope: Indicates the endpoint name reuse scope. The
     default value is TenantReuse. Known values are: "TenantReuse", "SubscriptionReuse",
     "ResourceGroupReuse", and "NoReuse".
    :vartype auto_generated_domain_name_label_scope: Union[str,
     "AutoGeneratedDomainNameLabelScope"]
    """

    profileName: str
    """The name of the profile which holds the endpoint."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable use of this rule. Permitted values are 'Enabled' or 'Disabled'. Known values
     are: \"Enabled\" and \"Disabled\"."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""
    hostName: str
    """The host name of the endpoint structured as {endpointName}.{DNSZone}, e.g.
     contoso.azureedge.net."""
    autoGeneratedDomainNameLabelScope: Union[str, "AutoGeneratedDomainNameLabelScope"]
    """Indicates the endpoint name reuse scope. The default value is TenantReuse. Known values are:
     \"TenantReuse\", \"SubscriptionReuse\", \"ResourceGroupReuse\", and \"NoReuse\"."""


class AFDEndpointPropertiesUpdateParameters(TypedDict, total=False):
    """The JSON object containing endpoint update parameters.

    :ivar profile_name: The name of the profile which holds the endpoint.
    :vartype profile_name: str
    :ivar enabled_state: Whether to enable use of this rule. Permitted values are 'Enabled' or
     'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    """

    profileName: str
    """The name of the profile which holds the endpoint."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable use of this rule. Permitted values are 'Enabled' or 'Disabled'. Known values
     are: \"Enabled\" and \"Disabled\"."""


class AFDEndpointUpdateParameters(TypedDict, total=False):
    """Properties required to create or update an endpoint.

    :ivar tags: Endpoint tags.
    :vartype tags: dict[str, str]
    :ivar properties: The JSON object containing endpoint update parameters.
    :vartype properties: "AFDEndpointPropertiesUpdateParameters"
    """

    tags: dict[str, str]
    """Endpoint tags."""
    properties: "AFDEndpointPropertiesUpdateParameters"
    """The JSON object containing endpoint update parameters."""


class AFDOrigin(ProxyResource):
    """Azure Front Door origin is the source of the content being delivered via Azure Front Door. When
    the edge nodes represented by an endpoint do not have the requested content cached, they
    attempt to fetch it from one or more of the configured origins.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the origin.
    :vartype properties: "AFDOriginProperties"
    """

    properties: "AFDOriginProperties"
    """The JSON object that contains the properties of the origin."""


class AFDOriginGroup(ProxyResource):
    """AFDOrigin group comprising of origins is used for load balancing to origins when the content
    cannot be served from Azure Front Door.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the origin group.
    :vartype properties: "AFDOriginGroupProperties"
    """

    properties: "AFDOriginGroupProperties"
    """The JSON object that contains the properties of the origin group."""


class AFDOriginGroupProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the origin group.

    :ivar profile_name: The name of the profile which holds the origin group.
    :vartype profile_name: str
    :ivar load_balancing_settings: Load balancing settings for a backend pool.
    :vartype load_balancing_settings: "LoadBalancingSettingsParameters"
    :ivar health_probe_settings: Health probe settings to the origin that is used to determine the
     health of the origin.
    :vartype health_probe_settings: "HealthProbeParameters"
    :ivar traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: Time in minutes to shift
     the traffic to the endpoint gradually when an unhealthy endpoint comes healthy or a new
     endpoint is added. Default is 10 mins. This property is currently not supported.
    :vartype traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: int
    :ivar session_affinity_state: Whether to allow session affinity on this host. Valid options are
     'Enabled' or 'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype session_affinity_state: Union[str, "EnabledState"]
    :ivar authentication: Authentication settings for origin in origin group.
    :vartype authentication: "OriginAuthenticationProperties"
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    """

    profileName: str
    """The name of the profile which holds the origin group."""
    loadBalancingSettings: "LoadBalancingSettingsParameters"
    """Load balancing settings for a backend pool."""
    healthProbeSettings: "HealthProbeParameters"
    """Health probe settings to the origin that is used to determine the health of the origin."""
    trafficRestorationTimeToHealedOrNewEndpointsInMinutes: int
    """Time in minutes to shift the traffic to the endpoint gradually when an unhealthy endpoint comes
     healthy or a new endpoint is added. Default is 10 mins. This property is currently not
     supported."""
    sessionAffinityState: Union[str, "EnabledState"]
    """Whether to allow session affinity on this host. Valid options are 'Enabled' or 'Disabled'.
     Known values are: \"Enabled\" and \"Disabled\"."""
    authentication: "OriginAuthenticationProperties"
    """Authentication settings for origin in origin group."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""


class AFDOriginGroupUpdateParameters(TypedDict, total=False):
    """AFDOrigin group properties needed for origin group creation or update.

    :ivar properties: The JSON object that contains the properties of the origin group.
    :vartype properties: "AFDOriginGroupUpdatePropertiesParameters"
    """

    properties: "AFDOriginGroupUpdatePropertiesParameters"
    """The JSON object that contains the properties of the origin group."""


class AFDOriginGroupUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the origin group.

    :ivar profile_name: The name of the profile which holds the origin group.
    :vartype profile_name: str
    :ivar load_balancing_settings: Load balancing settings for a backend pool.
    :vartype load_balancing_settings: "LoadBalancingSettingsParameters"
    :ivar health_probe_settings: Health probe settings to the origin that is used to determine the
     health of the origin.
    :vartype health_probe_settings: "HealthProbeParameters"
    :ivar traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: Time in minutes to shift
     the traffic to the endpoint gradually when an unhealthy endpoint comes healthy or a new
     endpoint is added. Default is 10 mins. This property is currently not supported.
    :vartype traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: int
    :ivar session_affinity_state: Whether to allow session affinity on this host. Valid options are
     'Enabled' or 'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype session_affinity_state: Union[str, "EnabledState"]
    :ivar authentication: Authentication settings for origin in origin group.
    :vartype authentication: "OriginAuthenticationProperties"
    """

    profileName: str
    """The name of the profile which holds the origin group."""
    loadBalancingSettings: "LoadBalancingSettingsParameters"
    """Load balancing settings for a backend pool."""
    healthProbeSettings: "HealthProbeParameters"
    """Health probe settings to the origin that is used to determine the health of the origin."""
    trafficRestorationTimeToHealedOrNewEndpointsInMinutes: int
    """Time in minutes to shift the traffic to the endpoint gradually when an unhealthy endpoint comes
     healthy or a new endpoint is added. Default is 10 mins. This property is currently not
     supported."""
    sessionAffinityState: Union[str, "EnabledState"]
    """Whether to allow session affinity on this host. Valid options are 'Enabled' or 'Disabled'.
     Known values are: \"Enabled\" and \"Disabled\"."""
    authentication: "OriginAuthenticationProperties"
    """Authentication settings for origin in origin group."""


class AFDOriginProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the origin.

    :ivar origin_group_name: The name of the origin group which contains this origin.
    :vartype origin_group_name: str
    :ivar azure_origin: Resource reference to the Azure origin resource.
    :vartype azure_origin: "ResourceReference"
    :ivar host_name: The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses
     are supported.This should be unique across all origins in an endpoint.
    :vartype host_name: str
    :ivar http_port: The value of the HTTP port. Must be between 1 and 65535.
    :vartype http_port: int
    :ivar https_port: The value of the HTTPS port. Must be between 1 and 65535.
    :vartype https_port: int
    :ivar origin_host_header: The host header value sent to the origin with each request. If you
     leave this blank, the request hostname determines this value. Azure Front Door origins, such as
     Web Apps, Blob Storage, and Cloud Services require this host header value to match the origin
     hostname by default. This overrides the host header defined at Endpoint.
    :vartype origin_host_header: str
    :ivar priority: Priority of origin in given origin group for load balancing. Higher priorities
     will not be used for load balancing if any lower priority origin is healthy.Must be between 1
     and 5.
    :vartype priority: int
    :ivar weight: Weight of the origin in given origin group for load balancing. Must be between 1
     and 1000.
    :vartype weight: int
    :ivar shared_private_link_resource: The properties of the private link resource for private
     origin.
    :vartype shared_private_link_resource: "SharedPrivateLinkResourceProperties"
    :ivar enabled_state: Whether to enable health probes to be made against backends defined under
     backendPools. Health probes can only be disabled if there is a single enabled backend in single
     enabled backend pool. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    :ivar enforce_certificate_name_check: Whether to enable certificate name check at origin level.
    :vartype enforce_certificate_name_check: bool
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    """

    originGroupName: str
    """The name of the origin group which contains this origin."""
    azureOrigin: "ResourceReference"
    """Resource reference to the Azure origin resource."""
    hostName: str
    """The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses are supported.This
     should be unique across all origins in an endpoint."""
    httpPort: int
    """The value of the HTTP port. Must be between 1 and 65535."""
    httpsPort: int
    """The value of the HTTPS port. Must be between 1 and 65535."""
    originHostHeader: str
    """The host header value sent to the origin with each request. If you leave this blank, the
     request hostname determines this value. Azure Front Door origins, such as Web Apps, Blob
     Storage, and Cloud Services require this host header value to match the origin hostname by
     default. This overrides the host header defined at Endpoint."""
    priority: int
    """Priority of origin in given origin group for load balancing. Higher priorities will not be used
     for load balancing if any lower priority origin is healthy.Must be between 1 and 5."""
    weight: int
    """Weight of the origin in given origin group for load balancing. Must be between 1 and 1000."""
    sharedPrivateLinkResource: "SharedPrivateLinkResourceProperties"
    """The properties of the private link resource for private origin."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable health probes to be made against backends defined under backendPools. Health
     probes can only be disabled if there is a single enabled backend in single enabled backend
     pool. Known values are: \"Enabled\" and \"Disabled\"."""
    enforceCertificateNameCheck: bool
    """Whether to enable certificate name check at origin level."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""


class AFDOriginUpdateParameters(TypedDict, total=False):
    """AFDOrigin properties needed for origin update.

    :ivar properties: The JSON object that contains the properties of the origin.
    :vartype properties: "AFDOriginUpdatePropertiesParameters"
    """

    properties: "AFDOriginUpdatePropertiesParameters"
    """The JSON object that contains the properties of the origin."""


class AFDOriginUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the origin.

    :ivar origin_group_name: The name of the origin group which contains this origin.
    :vartype origin_group_name: str
    :ivar azure_origin: Resource reference to the Azure origin resource.
    :vartype azure_origin: "ResourceReference"
    :ivar host_name: The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses
     are supported.This should be unique across all origins in an endpoint.
    :vartype host_name: str
    :ivar http_port: The value of the HTTP port. Must be between 1 and 65535.
    :vartype http_port: int
    :ivar https_port: The value of the HTTPS port. Must be between 1 and 65535.
    :vartype https_port: int
    :ivar origin_host_header: The host header value sent to the origin with each request. If you
     leave this blank, the request hostname determines this value. Azure Front Door origins, such as
     Web Apps, Blob Storage, and Cloud Services require this host header value to match the origin
     hostname by default. This overrides the host header defined at Endpoint.
    :vartype origin_host_header: str
    :ivar priority: Priority of origin in given origin group for load balancing. Higher priorities
     will not be used for load balancing if any lower priority origin is healthy.Must be between 1
     and 5.
    :vartype priority: int
    :ivar weight: Weight of the origin in given origin group for load balancing. Must be between 1
     and 1000.
    :vartype weight: int
    :ivar shared_private_link_resource: The properties of the private link resource for private
     origin.
    :vartype shared_private_link_resource: "SharedPrivateLinkResourceProperties"
    :ivar enabled_state: Whether to enable health probes to be made against backends defined under
     backendPools. Health probes can only be disabled if there is a single enabled backend in single
     enabled backend pool. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    :ivar enforce_certificate_name_check: Whether to enable certificate name check at origin level.
    :vartype enforce_certificate_name_check: bool
    """

    originGroupName: str
    """The name of the origin group which contains this origin."""
    azureOrigin: "ResourceReference"
    """Resource reference to the Azure origin resource."""
    hostName: str
    """The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses are supported.This
     should be unique across all origins in an endpoint."""
    httpPort: int
    """The value of the HTTP port. Must be between 1 and 65535."""
    httpsPort: int
    """The value of the HTTPS port. Must be between 1 and 65535."""
    originHostHeader: str
    """The host header value sent to the origin with each request. If you leave this blank, the
     request hostname determines this value. Azure Front Door origins, such as Web Apps, Blob
     Storage, and Cloud Services require this host header value to match the origin hostname by
     default. This overrides the host header defined at Endpoint."""
    priority: int
    """Priority of origin in given origin group for load balancing. Higher priorities will not be used
     for load balancing if any lower priority origin is healthy.Must be between 1 and 5."""
    weight: int
    """Weight of the origin in given origin group for load balancing. Must be between 1 and 1000."""
    sharedPrivateLinkResource: "SharedPrivateLinkResourceProperties"
    """The properties of the private link resource for private origin."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable health probes to be made against backends defined under backendPools. Health
     probes can only be disabled if there is a single enabled backend in single enabled backend
     pool. Known values are: \"Enabled\" and \"Disabled\"."""
    enforceCertificateNameCheck: bool
    """Whether to enable certificate name check at origin level."""


class AfdPurgeParameters(TypedDict, total=False):
    """Parameters required for content purge.

    :ivar content_paths: The path to the content to be purged. Can describe a file path or a wild
     card directory. Required.
    :vartype content_paths: list[str]
    :ivar domains: List of domains.
    :vartype domains: list[str]
    """

    contentPaths: Required[list[str]]
    """The path to the content to be purged. Can describe a file path or a wild card directory.
     Required."""
    domains: list[str]
    """List of domains."""


class AfdRouteCacheConfiguration(TypedDict, total=False):
    """Caching settings for a caching-type route. To disable caching, do not provide a
    cacheConfiguration object.

    :ivar query_string_caching_behavior: Defines how Frontdoor caches requests that include query
     strings. You can ignore any query strings when caching, ignore specific query strings, cache
     every request with a unique URL, or cache specific query strings. Known values are:
     "IgnoreQueryString", "UseQueryString", "IgnoreSpecifiedQueryStrings", and
     "IncludeSpecifiedQueryStrings".
    :vartype query_string_caching_behavior: Union[str, "AfdQueryStringCachingBehavior"]
    :ivar query_parameters: query parameters to include or exclude (comma separated).
    :vartype query_parameters: str
    :ivar compression_settings: compression settings.
    :vartype compression_settings: "CompressionSettings"
    """

    queryStringCachingBehavior: Union[str, "AfdQueryStringCachingBehavior"]
    """Defines how Frontdoor caches requests that include query strings. You can ignore any query
     strings when caching, ignore specific query strings, cache every request with a unique URL, or
     cache specific query strings. Known values are: \"IgnoreQueryString\", \"UseQueryString\",
     \"IgnoreSpecifiedQueryStrings\", and \"IncludeSpecifiedQueryStrings\"."""
    queryParameters: str
    """query parameters to include or exclude (comma separated)."""
    compressionSettings: "CompressionSettings"
    """compression settings."""


class AFDStateProperties(TypedDict, total=False):
    """The tracking states for afd resources.

    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    """

    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""


class AzureFirstPartyManagedCertificateParameters(TypedDict, total=False):  # pylint: disable=name-too-long
    """Azure FirstParty Managed Certificate provided by other first party resource providers to enable
    HTTPS.

    :ivar secret_source: Resource reference to the Azure Key Vault certificate. Expected to be in
     format of
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}/secrets/{certificateName}.
    :vartype secret_source: "ResourceReference"
    :ivar subject: Subject name in the certificate.
    :vartype subject: str
    :ivar expiration_date: Certificate expiration date.
    :vartype expiration_date: str
    :ivar certificate_authority: Certificate issuing authority.
    :vartype certificate_authority: str
    :ivar subject_alternative_names: The list of SANs.
    :vartype subject_alternative_names: list[str]
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar type: The type of the secret resource. Required. AZURE_FIRST_PARTY_MANAGED_CERTIFICATE.
    :vartype type: Literal[SecretType.AZURE_FIRST_PARTY_MANAGED_CERTIFICATE]
    """

    secretSource: "ResourceReference"
    """Resource reference to the Azure Key Vault certificate. Expected to be in format of
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}/secrets/{certificateName}."""
    subject: str
    """Subject name in the certificate."""
    expirationDate: str
    """Certificate expiration date."""
    certificateAuthority: str
    """Certificate issuing authority."""
    subjectAlternativeNames: list[str]
    """The list of SANs."""
    thumbprint: str
    """Certificate thumbprint."""
    type: Required[Literal[SecretType.AZURE_FIRST_PARTY_MANAGED_CERTIFICATE]]
    """The type of the secret resource. Required. AZURE_FIRST_PARTY_MANAGED_CERTIFICATE."""


class BatchRuleProperties(TypedDict, total=False):
    """The JSON object that contains a rule with its name for batch mode operations.

    :ivar rule_name: Name of the rule. Required.
    :vartype rule_name: str
    :ivar rule_set_name: The name of the rule set containing the rule.
    :vartype rule_set_name: str
    :ivar order: The order in which the rules are applied for the endpoint. Possible values
     {0,1,2,3,………}. A rule with a lesser order will be applied before a rule with a greater order.
     Rule with order 0 is a special rule. It does not require any condition and actions listed in it
     will always be applied.
    :vartype order: int
    :ivar conditions: A list of conditions that must be matched for the actions to be executed.
    :vartype conditions: list["DeliveryRuleCondition"]
    :ivar actions: A list of actions that are executed when all the conditions of a rule are
     satisfied.
    :vartype actions: list["DeliveryRuleAction"]
    :ivar match_processing_behavior: If this rule is a match should the rules engine continue
     running the remaining rules or stop. If not present, defaults to Continue. Known values are:
     "Continue" and "Stop".
    :vartype match_processing_behavior: Union[str, "MatchProcessingBehavior"]
    """

    ruleName: Required[str]
    """Name of the rule. Required."""
    ruleSetName: str
    """The name of the rule set containing the rule."""
    order: int
    """The order in which the rules are applied for the endpoint. Possible values {0,1,2,3,………}. A
     rule with a lesser order will be applied before a rule with a greater order. Rule with order 0
     is a special rule. It does not require any condition and actions listed in it will always be
     applied."""
    conditions: list["DeliveryRuleCondition"]
    """A list of conditions that must be matched for the actions to be executed."""
    actions: list["DeliveryRuleAction"]
    """A list of actions that are executed when all the conditions of a rule are satisfied."""
    matchProcessingBehavior: Union[str, "MatchProcessingBehavior"]
    """If this rule is a match should the rules engine continue running the remaining rules or stop.
     If not present, defaults to Continue. Known values are: \"Continue\" and \"Stop\"."""


class CacheConfiguration(TypedDict, total=False):
    """Caching settings for a caching-type route. To disable caching, do not provide a
    cacheConfiguration object.

    :ivar query_string_caching_behavior: Defines how Frontdoor caches requests that include query
     strings. You can ignore any query strings when caching, ignore specific query strings, cache
     every request with a unique URL, or cache specific query strings. Known values are:
     "IgnoreQueryString", "UseQueryString", "IgnoreSpecifiedQueryStrings", and
     "IncludeSpecifiedQueryStrings".
    :vartype query_string_caching_behavior: Union[str, "RuleQueryStringCachingBehavior"]
    :ivar query_parameters: query parameters to include or exclude (comma separated).
    :vartype query_parameters: str
    :ivar is_compression_enabled: Indicates whether content compression is enabled. If compression
     is enabled, content will be served as compressed if user requests for a compressed version.
     Content won't be compressed on AzureFrontDoor when requested content is smaller than 1 byte or
     larger than 1 MB. Known values are: "Enabled" and "Disabled".
    :vartype is_compression_enabled: Union[str, "RuleIsCompressionEnabled"]
    :ivar cache_behavior: Caching behavior for the requests. Known values are: "HonorOrigin",
     "OverrideAlways", and "OverrideIfOriginMissing".
    :vartype cache_behavior: Union[str, "RuleCacheBehavior"]
    :ivar cache_duration: The duration for which the content needs to be cached. Allowed format is
     [d.]hh:mm:ss.
    :vartype cache_duration: str
    """

    queryStringCachingBehavior: Union[str, "RuleQueryStringCachingBehavior"]
    """Defines how Frontdoor caches requests that include query strings. You can ignore any query
     strings when caching, ignore specific query strings, cache every request with a unique URL, or
     cache specific query strings. Known values are: \"IgnoreQueryString\", \"UseQueryString\",
     \"IgnoreSpecifiedQueryStrings\", and \"IncludeSpecifiedQueryStrings\"."""
    queryParameters: str
    """query parameters to include or exclude (comma separated)."""
    isCompressionEnabled: Union[str, "RuleIsCompressionEnabled"]
    """Indicates whether content compression is enabled. If compression is enabled, content will be
     served as compressed if user requests for a compressed version. Content won't be compressed on
     AzureFrontDoor when requested content is smaller than 1 byte or larger than 1 MB. Known values
     are: \"Enabled\" and \"Disabled\"."""
    cacheBehavior: Union[str, "RuleCacheBehavior"]
    """Caching behavior for the requests. Known values are: \"HonorOrigin\", \"OverrideAlways\", and
     \"OverrideIfOriginMissing\"."""
    cacheDuration: str
    """The duration for which the content needs to be cached. Allowed format is [d.]hh:mm:ss."""


class CacheExpirationActionParameters(TypedDict, total=False):
    """Defines the parameters for the cache expiration action.

    :ivar cache_behavior: Caching behavior for the requests. Required. Known values are:
     "BypassCache", "Override", and "SetIfMissing".
    :vartype cache_behavior: Union[str, "CacheBehavior"]
    :ivar cache_type: The level at which the content needs to be cached. Required. "All"
    :vartype cache_type: Union[str, "CacheType"]
    :ivar cache_duration: The duration for which the content needs to be cached. Allowed format is
     [d.]hh:mm:ss.
    :vartype cache_duration: str
    :ivar type_name: Required. DELIVERY_RULE_CACHE_EXPIRATION_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_CACHE_EXPIRATION_ACTION_PARAMETERS]
    """

    cacheBehavior: Required[Union[str, "CacheBehavior"]]
    """Caching behavior for the requests. Required. Known values are: \"BypassCache\", \"Override\",
     and \"SetIfMissing\"."""
    cacheType: Required[Union[str, "CacheType"]]
    """The level at which the content needs to be cached. Required. \"All\""""
    cacheDuration: Optional[str]
    """The duration for which the content needs to be cached. Allowed format is [d.]hh:mm:ss."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_CACHE_EXPIRATION_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_CACHE_EXPIRATION_ACTION_PARAMETERS."""


class CacheKeyQueryStringActionParameters(TypedDict, total=False):
    """Defines the parameters for the cache-key query string action.

    :ivar query_string_behavior: Caching behavior for the requests. Required. Known values are:
     "Include", "IncludeAll", "Exclude", and "ExcludeAll".
    :vartype query_string_behavior: Union[str, "QueryStringBehavior"]
    :ivar query_parameters: query parameters to include or exclude (comma separated).
    :vartype query_parameters: str
    :ivar type_name: Required. DELIVERY_RULE_CACHE_KEY_QUERY_STRING_BEHAVIOR_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_CACHE_KEY_QUERY_STRING_BEHAVIOR_ACTION_PARAMETERS]
    """

    queryStringBehavior: Required[Union[str, "QueryStringBehavior"]]
    """Caching behavior for the requests. Required. Known values are: \"Include\", \"IncludeAll\",
     \"Exclude\", and \"ExcludeAll\"."""
    queryParameters: Optional[str]
    """query parameters to include or exclude (comma separated)."""
    typeName: Required[
        Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_CACHE_KEY_QUERY_STRING_BEHAVIOR_ACTION_PARAMETERS]
    ]
    """Required. DELIVERY_RULE_CACHE_KEY_QUERY_STRING_BEHAVIOR_ACTION_PARAMETERS."""


class CanMigrateParameters(TypedDict, total=False):
    """Request body for CanMigrate operation.

    :ivar classic_resource_reference: Resource reference of the classic cdn profile or classic
     frontdoor that need to be migrated. Required.
    :vartype classic_resource_reference: "ResourceReference"
    """

    classicResourceReference: Required["ResourceReference"]
    """Resource reference of the classic cdn profile or classic frontdoor that need to be migrated.
     Required."""


class CdnCertificateSourceParameters(TypedDict, total=False):
    """Defines the parameters for using CDN managed certificate for securing custom domain.

    :ivar certificate_type: Type of certificate used. Required. Known values are: "Shared" and
     "Dedicated".
    :vartype certificate_type: Union[str, "CertificateType"]
    :ivar type_name: Required. CDN_CERTIFICATE_SOURCE_PARAMETERS.
    :vartype type_name: Literal[CertificateSourceParametersType.CDN_CERTIFICATE_SOURCE_PARAMETERS]
    """

    certificateType: Required[Union[str, "CertificateType"]]
    """Type of certificate used. Required. Known values are: \"Shared\" and \"Dedicated\"."""
    typeName: Required[Literal[CertificateSourceParametersType.CDN_CERTIFICATE_SOURCE_PARAMETERS]]
    """Required. CDN_CERTIFICATE_SOURCE_PARAMETERS."""


class CdnEndpoint(TypedDict, total=False):
    """Defines the ARM Resource ID for the linked endpoints.

    :ivar id: ARM Resource ID string.
    :vartype id: str
    """

    id: str
    """ARM Resource ID string."""


class CdnManagedHttpsParameters(TypedDict, total=False):
    """Defines the certificate source parameters using CDN managed certificate for enabling SSL.

    :ivar protocol_type: Defines the TLS extension protocol that is used for secure delivery.
     Required. Known values are: "ServerNameIndication" and "IPBased".
    :vartype protocol_type: Union[str, "ProtocolType"]
    :ivar minimum_tls_version: TLS protocol version that will be used for Https. Known values are:
     "None", "TLS10", and "TLS12".
    :vartype minimum_tls_version: Union[str, "MinimumTlsVersion"]
    :ivar certificate_source_parameters: Defines the certificate source parameters using CDN
     managed certificate for enabling SSL. Required.
    :vartype certificate_source_parameters: "CdnCertificateSourceParameters"
    :ivar certificate_source: Defines the source of the SSL certificate. Required. CDN.
    :vartype certificate_source: Literal[CertificateSource.CDN]
    """

    protocolType: Required[Union[str, "ProtocolType"]]
    """Defines the TLS extension protocol that is used for secure delivery. Required. Known values
     are: \"ServerNameIndication\" and \"IPBased\"."""
    minimumTlsVersion: Union[str, "MinimumTlsVersion"]
    """TLS protocol version that will be used for Https. Known values are: \"None\", \"TLS10\", and
     \"TLS12\"."""
    certificateSourceParameters: Required["CdnCertificateSourceParameters"]
    """Defines the certificate source parameters using CDN managed certificate for enabling SSL.
     Required."""
    certificateSource: Required[Literal[CertificateSource.CDN]]
    """Defines the source of the SSL certificate. Required. CDN."""


class CdnMigrationToAfdParameters(TypedDict, total=False):
    """Request body for Migrate operation.

    :ivar sku: Sku for the migration. Required.
    :vartype sku: "Sku"
    :ivar migration_endpoint_mappings: A name map between classic CDN endpoints and AFD
     Premium/Standard endpoints.
    :vartype migration_endpoint_mappings: list["MigrationEndpointMapping"]
    """

    sku: Required["Sku"]
    """Sku for the migration. Required."""
    migrationEndpointMappings: list["MigrationEndpointMapping"]
    """A name map between classic CDN endpoints and AFD Premium/Standard endpoints."""


class CdnWebApplicationFirewallPolicy(TrackedResource):
    """Defines web application firewall policy for Azure CDN.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: Properties of the web application firewall policy.
    :vartype properties: "CdnWebApplicationFirewallPolicyProperties"
    :ivar etag: Gets a unique read-only string that changes whenever the resource is updated.
    :vartype etag: str
    :ivar sku: The pricing tier (defines a CDN provider, feature list and rate) of the
     CdnWebApplicationFirewallPolicy. Required.
    :vartype sku: "Sku"
    """

    properties: "CdnWebApplicationFirewallPolicyProperties"
    """Properties of the web application firewall policy."""
    etag: str
    """Gets a unique read-only string that changes whenever the resource is updated."""
    sku: Required["Sku"]
    """The pricing tier (defines a CDN provider, feature list and rate) of the
     CdnWebApplicationFirewallPolicy. Required."""


class CdnWebApplicationFirewallPolicyPatchParameters(TypedDict, total=False):  # pylint: disable=name-too-long
    """Properties required to update a CdnWebApplicationFirewallPolicy.

    :ivar tags: CdnWebApplicationFirewallPolicy tags.
    :vartype tags: dict[str, str]
    """

    tags: dict[str, str]
    """CdnWebApplicationFirewallPolicy tags."""


class CdnWebApplicationFirewallPolicyProperties(TypedDict, total=False):  # pylint: disable=name-too-long
    """Defines CDN web application firewall policy properties.

    :ivar policy_settings: Describes  policySettings for policy.
    :vartype policy_settings: "PolicySettings"
    :ivar rate_limit_rules: Describes rate limit rules inside the policy.
    :vartype rate_limit_rules: "RateLimitRuleList"
    :ivar custom_rules: Describes custom rules inside the policy.
    :vartype custom_rules: "CustomRuleList"
    :ivar managed_rules: Describes managed rules inside the policy.
    :vartype managed_rules: "ManagedRuleSetList"
    :ivar endpoint_links: Describes Azure CDN endpoints associated with this Web Application
     Firewall policy.
    :vartype endpoint_links: list["CdnEndpoint"]
    :ivar extended_properties: Key-Value pair representing additional properties for Web
     Application Firewall policy.
    :vartype extended_properties: dict[str, str]
    :ivar provisioning_state: Provisioning state of the WebApplicationFirewallPolicy. Known values
     are: "Creating", "Succeeded", and "Failed".
    :vartype provisioning_state: Union[str, "ProvisioningState"]
    :ivar resource_state: Resource status of the policy. Known values are: "Creating", "Enabling",
     "Enabled", "Disabling", "Disabled", and "Deleting".
    :vartype resource_state: Union[str, "PolicyResourceState"]
    """

    policySettings: "PolicySettings"
    """Describes  policySettings for policy."""
    rateLimitRules: "RateLimitRuleList"
    """Describes rate limit rules inside the policy."""
    customRules: "CustomRuleList"
    """Describes custom rules inside the policy."""
    managedRules: "ManagedRuleSetList"
    """Describes managed rules inside the policy."""
    endpointLinks: list["CdnEndpoint"]
    """Describes Azure CDN endpoints associated with this Web Application Firewall policy."""
    extendedProperties: dict[str, str]
    """Key-Value pair representing additional properties for Web Application Firewall policy."""
    provisioningState: Union[str, "ProvisioningState"]
    """Provisioning state of the WebApplicationFirewallPolicy. Known values are: \"Creating\",
     \"Succeeded\", and \"Failed\"."""
    resourceState: Union[str, "PolicyResourceState"]
    """Resource status of the policy. Known values are: \"Creating\", \"Enabling\", \"Enabled\",
     \"Disabling\", \"Disabled\", and \"Deleting\"."""


class CheckEndpointNameAvailabilityInput(TypedDict, total=False):
    """Input of CheckNameAvailability API.

    :ivar name: The resource name to validate. Required.
    :vartype name: str
    :ivar type: The type of the resource whose name is to be validated. Required. Known values are:
     "Microsoft.Cdn/Profiles/Endpoints" and "Microsoft.Cdn/Profiles/AfdEndpoints".
    :vartype type: Union[str, "ResourceType"]
    :ivar auto_generated_domain_name_label_scope: Indicates the endpoint name reuse scope. The
     default value is TenantReuse. Known values are: "TenantReuse", "SubscriptionReuse",
     "ResourceGroupReuse", and "NoReuse".
    :vartype auto_generated_domain_name_label_scope: Union[str,
     "AutoGeneratedDomainNameLabelScope"]
    """

    name: Required[str]
    """The resource name to validate. Required."""
    type: Required[Union[str, "ResourceType"]]
    """The type of the resource whose name is to be validated. Required. Known values are:
     \"Microsoft.Cdn/Profiles/Endpoints\" and \"Microsoft.Cdn/Profiles/AfdEndpoints\"."""
    autoGeneratedDomainNameLabelScope: Union[str, "AutoGeneratedDomainNameLabelScope"]
    """Indicates the endpoint name reuse scope. The default value is TenantReuse. Known values are:
     \"TenantReuse\", \"SubscriptionReuse\", \"ResourceGroupReuse\", and \"NoReuse\"."""


class CheckHostNameAvailabilityInput(TypedDict, total=False):
    """Input of CheckHostNameAvailability API.

    :ivar host_name: The host name to validate. Required.
    :vartype host_name: str
    """

    hostName: Required[str]
    """The host name to validate. Required."""


class CheckNameAvailabilityInput(TypedDict, total=False):
    """Input of CheckNameAvailability API.

    :ivar name: The resource name to validate. Required.
    :vartype name: str
    :ivar type: The type of the resource whose name is to be validated. Required. Known values are:
     "Microsoft.Cdn/Profiles/Endpoints" and "Microsoft.Cdn/Profiles/AfdEndpoints".
    :vartype type: Union[str, "ResourceType"]
    """

    name: Required[str]
    """The resource name to validate. Required."""
    type: Required[Union[str, "ResourceType"]]
    """The type of the resource whose name is to be validated. Required. Known values are:
     \"Microsoft.Cdn/Profiles/Endpoints\" and \"Microsoft.Cdn/Profiles/AfdEndpoints\"."""


class ClientPortMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for ClientPort match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "ClientPortOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_CLIENT_PORT_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_CLIENT_PORT_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "ClientPortOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_CLIENT_PORT_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_CLIENT_PORT_CONDITION_PARAMETERS."""


class CompressionSettings(TypedDict, total=False):
    """settings for compression.

    :ivar content_types_to_compress: List of content types on which compression applies. The value
     should be a valid MIME type.
    :vartype content_types_to_compress: list[str]
    :ivar is_compression_enabled: Indicates whether content compression is enabled on
     AzureFrontDoor. Default value is false. If compression is enabled, content will be served as
     compressed if user requests for a compressed version. Content won't be compressed on
     AzureFrontDoor when requested content is smaller than 1 byte or larger than 1 MB.
    :vartype is_compression_enabled: bool
    """

    contentTypesToCompress: list[str]
    """List of content types on which compression applies. The value should be a valid MIME type."""
    isCompressionEnabled: bool
    """Indicates whether content compression is enabled on AzureFrontDoor. Default value is false. If
     compression is enabled, content will be served as compressed if user requests for a compressed
     version. Content won't be compressed on AzureFrontDoor when requested content is smaller than 1
     byte or larger than 1 MB."""


class CookiesMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for Cookies match conditions.

    :ivar selector: Name of Cookies to be matched.
    :vartype selector: str
    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "CookiesOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_COOKIES_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_COOKIES_CONDITION_PARAMETERS]
    """

    selector: str
    """Name of Cookies to be matched."""
    operator: Required[Union[str, "CookiesOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_COOKIES_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_COOKIES_CONDITION_PARAMETERS."""


class CustomDomainParameters(TypedDict, total=False):
    """The customDomain JSON object required for custom domain creation or update.

    :ivar properties: The JSON object that contains the properties of the custom domain to create.
    :vartype properties: "CustomDomainPropertiesParameters"
    """

    properties: "CustomDomainPropertiesParameters"
    """The JSON object that contains the properties of the custom domain to create."""


class CustomDomainPropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the custom domain to create.

    :ivar host_name: The host name of the custom domain. Must be a domain name. Required.
    :vartype host_name: str
    """

    hostName: Required[str]
    """The host name of the custom domain. Must be a domain name. Required."""


class CustomerCertificateParameters(TypedDict, total=False):
    """Customer Certificate used for https.

    :ivar secret_source: Resource reference to the Azure Key Vault certificate. Expected to be in
     format of
     /subscriptions/{​​​​​​​​​subscriptionId}​​​​​​​​​/resourceGroups/{​​​​​​​​​resourceGroupName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/providers/Microsoft.KeyVault/vaults/{vaultName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/secrets/{certificateName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​.
     Required.
    :vartype secret_source: "ResourceReference"
    :ivar secret_version: Version of the secret to be used.
    :vartype secret_version: str
    :ivar use_latest_version: Whether to use the latest version for the certificate.
    :vartype use_latest_version: bool
    :ivar subject: Subject name in the certificate.
    :vartype subject: str
    :ivar expiration_date: Certificate expiration date.
    :vartype expiration_date: str
    :ivar certificate_authority: Certificate issuing authority.
    :vartype certificate_authority: str
    :ivar subject_alternative_names: The list of SANs.
    :vartype subject_alternative_names: list[str]
    :ivar thumbprint: Certificate thumbprint.
    :vartype thumbprint: str
    :ivar type: The type of the secret resource. Required. CUSTOMER_CERTIFICATE.
    :vartype type: Literal[SecretType.CUSTOMER_CERTIFICATE]
    """

    secretSource: Required["ResourceReference"]
    """Resource reference to the Azure Key Vault certificate. Expected to be in format of
     /subscriptions/{​​​​​​​​​subscriptionId}​​​​​​​​​/resourceGroups/{​​​​​​​​​resourceGroupName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/providers/Microsoft.KeyVault/vaults/{vaultName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/secrets/{certificateName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​.
     Required."""
    secretVersion: str
    """Version of the secret to be used."""
    useLatestVersion: bool
    """Whether to use the latest version for the certificate."""
    subject: str
    """Subject name in the certificate."""
    expirationDate: str
    """Certificate expiration date."""
    certificateAuthority: str
    """Certificate issuing authority."""
    subjectAlternativeNames: list[str]
    """The list of SANs."""
    thumbprint: str
    """Certificate thumbprint."""
    type: Required[Literal[SecretType.CUSTOMER_CERTIFICATE]]
    """The type of the secret resource. Required. CUSTOMER_CERTIFICATE."""


class CustomRule(TypedDict, total=False):
    """Defines the common attributes for a custom rule that can be included in a waf policy.

    :ivar name: Defines the name of the custom rule. Required.
    :vartype name: str
    :ivar enabled_state: Describes if the custom rule is in enabled or disabled state. Defaults to
     Enabled if not specified. Known values are: "Disabled" and "Enabled".
    :vartype enabled_state: Union[str, "CustomRuleEnabledState"]
    :ivar priority: Defines in what order this rule be evaluated in the overall list of custom
     rules. Required.
    :vartype priority: int
    :ivar match_conditions: List of match conditions. Required.
    :vartype match_conditions: list["MatchCondition"]
    :ivar action: Describes what action to be applied when rule matches. Required. Known values
     are: "Allow", "Block", "Log", and "Redirect".
    :vartype action: Union[str, "ActionType"]
    """

    name: Required[str]
    """Defines the name of the custom rule. Required."""
    enabledState: Union[str, "CustomRuleEnabledState"]
    """Describes if the custom rule is in enabled or disabled state. Defaults to Enabled if not
     specified. Known values are: \"Disabled\" and \"Enabled\"."""
    priority: Required[int]
    """Defines in what order this rule be evaluated in the overall list of custom rules. Required."""
    matchConditions: Required[list["MatchCondition"]]
    """List of match conditions. Required."""
    action: Required[Union[str, "ActionType"]]
    """Describes what action to be applied when rule matches. Required. Known values are: \"Allow\",
     \"Block\", \"Log\", and \"Redirect\"."""


class CustomRuleList(TypedDict, total=False):
    """Defines contents of custom rules.

    :ivar rules: List of rules.
    :vartype rules: list["CustomRule"]
    """

    rules: list["CustomRule"]
    """List of rules."""


class DeepCreatedCustomDomain(TypedDict, total=False):
    """Custom domains created on the CDN endpoint.

    :ivar name: Custom domain name. Required.
    :vartype name: str
    :ivar properties: Properties of the custom domain created on the CDN endpoint.
    :vartype properties: "DeepCreatedCustomDomainProperties"
    """

    name: Required[str]
    """Custom domain name. Required."""
    properties: "DeepCreatedCustomDomainProperties"
    """Properties of the custom domain created on the CDN endpoint."""


class DeepCreatedCustomDomainProperties(TypedDict, total=False):
    """Properties of the custom domain created on the CDN endpoint.

    :ivar host_name: The host name of the custom domain. Must be a domain name. Required.
    :vartype host_name: str
    :ivar validation_data: Special validation or data may be required when delivering CDN to some
     regions due to local compliance reasons. E.g. ICP license number of a custom domain is required
     to deliver content in China.
    :vartype validation_data: str
    """

    hostName: Required[str]
    """The host name of the custom domain. Must be a domain name. Required."""
    validationData: str
    """Special validation or data may be required when delivering CDN to some regions due to local
     compliance reasons. E.g. ICP license number of a custom domain is required to deliver content
     in China."""


class DeepCreatedOrigin(TypedDict, total=False):
    """The main origin of CDN content which is added when creating a CDN endpoint.

    :ivar name: Origin name which must be unique within the endpoint. Required.
    :vartype name: str
    :ivar properties: Properties of the origin created on the CDN endpoint.
    :vartype properties: "DeepCreatedOriginProperties"
    """

    name: Required[str]
    """Origin name which must be unique within the endpoint. Required."""
    properties: "DeepCreatedOriginProperties"
    """Properties of the origin created on the CDN endpoint."""


class DeepCreatedOriginGroup(TypedDict, total=False):
    """The origin group for CDN content which is added when creating a CDN endpoint. Traffic is sent
    to the origins within the origin group based on origin health.

    :ivar name: Origin group name which must be unique within the endpoint. Required.
    :vartype name: str
    :ivar properties: Properties of the origin group created on the CDN endpoint.
    :vartype properties: "DeepCreatedOriginGroupProperties"
    """

    name: Required[str]
    """Origin group name which must be unique within the endpoint. Required."""
    properties: "DeepCreatedOriginGroupProperties"
    """Properties of the origin group created on the CDN endpoint."""


class DeepCreatedOriginGroupProperties(TypedDict, total=False):
    """Properties of the origin group created on the CDN endpoint.

    :ivar health_probe_settings: Health probe settings to the origin that is used to determine the
     health of the origin.
    :vartype health_probe_settings: "HealthProbeParameters"
    :ivar origins: The source of the content being delivered via CDN within given origin group.
     Required.
    :vartype origins: list["ResourceReference"]
    :ivar traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: Time in minutes to shift
     the traffic to the endpoint gradually when an unhealthy endpoint comes healthy or a new
     endpoint is added. Default is 10 mins. This property is currently not supported.
    :vartype traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: int
    :ivar response_based_origin_error_detection_settings: The JSON object that contains the
     properties to determine origin health using real requests/responses.This property is currently
     not supported.
    :vartype response_based_origin_error_detection_settings:
     "ResponseBasedOriginErrorDetectionParameters"
    """

    healthProbeSettings: "HealthProbeParameters"
    """Health probe settings to the origin that is used to determine the health of the origin."""
    origins: Required[list["ResourceReference"]]
    """The source of the content being delivered via CDN within given origin group. Required."""
    trafficRestorationTimeToHealedOrNewEndpointsInMinutes: int
    """Time in minutes to shift the traffic to the endpoint gradually when an unhealthy endpoint comes
     healthy or a new endpoint is added. Default is 10 mins. This property is currently not
     supported."""
    responseBasedOriginErrorDetectionSettings: "ResponseBasedOriginErrorDetectionParameters"
    """The JSON object that contains the properties to determine origin health using real
     requests/responses.This property is currently not supported."""


class DeepCreatedOriginProperties(TypedDict, total=False):
    """Properties of the origin created on the CDN endpoint.

    :ivar host_name: The address of the origin. It can be a domain name, IPv4 address, or IPv6
     address. This should be unique across all origins in an endpoint. Required.
    :vartype host_name: str
    :ivar http_port: The value of the HTTP port. Must be between 1 and 65535.
    :vartype http_port: int
    :ivar https_port: The value of the HTTPS port. Must be between 1 and 65535.
    :vartype https_port: int
    :ivar origin_host_header: The host header value sent to the origin with each request. If you
     leave this blank, the request hostname determines this value. Azure CDN origins, such as Web
     Apps, Blob Storage, and Cloud Services require this host header value to match the origin
     hostname by default.
    :vartype origin_host_header: str
    :ivar priority: Priority of origin in given origin group for load balancing. Higher priorities
     will not be used for load balancing if any lower priority origin is healthy.Must be between 1
     and 5.
    :vartype priority: int
    :ivar weight: Weight of the origin in given origin group for load balancing. Must be between 1
     and 1000.
    :vartype weight: int
    :ivar enabled: Origin is enabled for load balancing or not. By default, origin is always
     enabled.
    :vartype enabled: bool
    :ivar private_link_alias: The Alias of the Private Link resource. Populating this optional
     field indicates that this origin is 'Private'.
    :vartype private_link_alias: str
    :ivar private_link_resource_id: The Resource Id of the Private Link resource. Populating this
     optional field indicates that this backend is 'Private'.
    :vartype private_link_resource_id: str
    :ivar private_link_location: The location of the Private Link resource. Required only if
     'privateLinkResourceId' is populated.
    :vartype private_link_location: str
    :ivar private_link_approval_message: A custom message to be included in the approval request to
     connect to the Private Link.
    :vartype private_link_approval_message: str
    :ivar private_endpoint_status: The approval status for the connection to the Private Link.
     Known values are: "Pending", "Approved", "Rejected", "Disconnected", and "Timeout".
    :vartype private_endpoint_status: Union[str, "PrivateEndpointStatus"]
    """

    hostName: Required[str]
    """The address of the origin. It can be a domain name, IPv4 address, or IPv6 address. This should
     be unique across all origins in an endpoint. Required."""
    httpPort: int
    """The value of the HTTP port. Must be between 1 and 65535."""
    httpsPort: int
    """The value of the HTTPS port. Must be between 1 and 65535."""
    originHostHeader: str
    """The host header value sent to the origin with each request. If you leave this blank, the
     request hostname determines this value. Azure CDN origins, such as Web Apps, Blob Storage, and
     Cloud Services require this host header value to match the origin hostname by default."""
    priority: int
    """Priority of origin in given origin group for load balancing. Higher priorities will not be used
     for load balancing if any lower priority origin is healthy.Must be between 1 and 5."""
    weight: int
    """Weight of the origin in given origin group for load balancing. Must be between 1 and 1000."""
    enabled: bool
    """Origin is enabled for load balancing or not. By default, origin is always enabled."""
    privateLinkAlias: str
    """The Alias of the Private Link resource. Populating this optional field indicates that this
     origin is 'Private'."""
    privateLinkResourceId: str
    """The Resource Id of the Private Link resource. Populating this optional field indicates that
     this backend is 'Private'."""
    privateLinkLocation: str
    """The location of the Private Link resource. Required only if 'privateLinkResourceId' is
     populated."""
    privateLinkApprovalMessage: str
    """A custom message to be included in the approval request to connect to the Private Link."""
    privateEndpointStatus: Union[str, "PrivateEndpointStatus"]
    """The approval status for the connection to the Private Link. Known values are: \"Pending\",
     \"Approved\", \"Rejected\", \"Disconnected\", and \"Timeout\"."""


class DeliveryRule(TypedDict, total=False):
    """A rule that specifies a set of actions and conditions.

    :ivar name: Name of the rule.
    :vartype name: str
    :ivar order: The order in which the rules are applied for the endpoint. Possible values
     {0,1,2,3,………}. A rule with a lesser order will be applied before a rule with a greater order.
     Rule with order 0 is a special rule. It does not require any condition and actions listed in it
     will always be applied. Required.
    :vartype order: int
    :ivar conditions: A list of conditions that must be matched for the actions to be executed.
    :vartype conditions: list["DeliveryRuleCondition"]
    :ivar actions: A list of actions that are executed when all the conditions of a rule are
     satisfied. Required.
    :vartype actions: list["DeliveryRuleAction"]
    """

    name: str
    """Name of the rule."""
    order: Required[int]
    """The order in which the rules are applied for the endpoint. Possible values {0,1,2,3,………}. A
     rule with a lesser order will be applied before a rule with a greater order. Rule with order 0
     is a special rule. It does not require any condition and actions listed in it will always be
     applied. Required."""
    conditions: list["DeliveryRuleCondition"]
    """A list of conditions that must be matched for the actions to be executed."""
    actions: Required[list["DeliveryRuleAction"]]
    """A list of actions that are executed when all the conditions of a rule are satisfied. Required."""


class DeliveryRuleCacheExpirationAction(TypedDict, total=False):
    """Defines the cache expiration action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "CacheExpirationActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. CACHE_EXPIRATION.
    :vartype name: Literal[DeliveryRuleActionEnum.CACHE_EXPIRATION]
    """

    parameters: Required["CacheExpirationActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.CACHE_EXPIRATION]]
    """The name of the action for the delivery rule. Required. CACHE_EXPIRATION."""


class DeliveryRuleCacheKeyQueryStringAction(TypedDict, total=False):
    """Defines the cache-key query string action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "CacheKeyQueryStringActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. CACHE_KEY_QUERY_STRING.
    :vartype name: Literal[DeliveryRuleActionEnum.CACHE_KEY_QUERY_STRING]
    """

    parameters: Required["CacheKeyQueryStringActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.CACHE_KEY_QUERY_STRING]]
    """The name of the action for the delivery rule. Required. CACHE_KEY_QUERY_STRING."""


class DeliveryRuleClientPortCondition(TypedDict, total=False):
    """Defines the ClientPort condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "ClientPortMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. CLIENT_PORT.
    :vartype name: Literal[MatchVariable.CLIENT_PORT]
    """

    parameters: Required["ClientPortMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.CLIENT_PORT]]
    """The name of the condition for the delivery rule. Required. CLIENT_PORT."""


class DeliveryRuleCookiesCondition(TypedDict, total=False):
    """Defines the Cookies condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "CookiesMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. COOKIES.
    :vartype name: Literal[MatchVariable.COOKIES]
    """

    parameters: Required["CookiesMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.COOKIES]]
    """The name of the condition for the delivery rule. Required. COOKIES."""


class DeliveryRuleHostNameCondition(TypedDict, total=False):
    """Defines the HostName condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "HostNameMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. HOST_NAME.
    :vartype name: Literal[MatchVariable.HOST_NAME]
    """

    parameters: Required["HostNameMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.HOST_NAME]]
    """The name of the condition for the delivery rule. Required. HOST_NAME."""


class DeliveryRuleHttpVersionCondition(TypedDict, total=False):
    """Defines the HttpVersion condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "HttpVersionMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. HTTP_VERSION.
    :vartype name: Literal[MatchVariable.HTTP_VERSION]
    """

    parameters: Required["HttpVersionMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.HTTP_VERSION]]
    """The name of the condition for the delivery rule. Required. HTTP_VERSION."""


class DeliveryRuleIsDeviceCondition(TypedDict, total=False):
    """Defines the IsDevice condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "IsDeviceMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. IS_DEVICE.
    :vartype name: Literal[MatchVariable.IS_DEVICE]
    """

    parameters: Required["IsDeviceMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.IS_DEVICE]]
    """The name of the condition for the delivery rule. Required. IS_DEVICE."""


class DeliveryRulePostArgsCondition(TypedDict, total=False):
    """Defines the PostArgs condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "PostArgsMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. POST_ARGS.
    :vartype name: Literal[MatchVariable.POST_ARGS]
    """

    parameters: Required["PostArgsMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.POST_ARGS]]
    """The name of the condition for the delivery rule. Required. POST_ARGS."""


class DeliveryRuleQueryStringCondition(TypedDict, total=False):
    """Defines the QueryString condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "QueryStringMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. QUERY_STRING.
    :vartype name: Literal[MatchVariable.QUERY_STRING]
    """

    parameters: Required["QueryStringMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.QUERY_STRING]]
    """The name of the condition for the delivery rule. Required. QUERY_STRING."""


class DeliveryRuleRemoteAddressCondition(TypedDict, total=False):
    """Defines the RemoteAddress condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RemoteAddressMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REMOTE_ADDRESS.
    :vartype name: Literal[MatchVariable.REMOTE_ADDRESS]
    """

    parameters: Required["RemoteAddressMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REMOTE_ADDRESS]]
    """The name of the condition for the delivery rule. Required. REMOTE_ADDRESS."""


class DeliveryRuleRequestBodyCondition(TypedDict, total=False):
    """Defines the RequestBody condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RequestBodyMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REQUEST_BODY.
    :vartype name: Literal[MatchVariable.REQUEST_BODY]
    """

    parameters: Required["RequestBodyMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REQUEST_BODY]]
    """The name of the condition for the delivery rule. Required. REQUEST_BODY."""


class DeliveryRuleRequestHeaderAction(TypedDict, total=False):
    """Defines the request header action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "HeaderActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. MODIFY_REQUEST_HEADER.
    :vartype name: Literal[DeliveryRuleActionEnum.MODIFY_REQUEST_HEADER]
    """

    parameters: Required["HeaderActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.MODIFY_REQUEST_HEADER]]
    """The name of the action for the delivery rule. Required. MODIFY_REQUEST_HEADER."""


class DeliveryRuleRequestHeaderCondition(TypedDict, total=False):
    """Defines the RequestHeader condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RequestHeaderMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REQUEST_HEADER.
    :vartype name: Literal[MatchVariable.REQUEST_HEADER]
    """

    parameters: Required["RequestHeaderMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REQUEST_HEADER]]
    """The name of the condition for the delivery rule. Required. REQUEST_HEADER."""


class DeliveryRuleRequestMethodCondition(TypedDict, total=False):
    """Defines the RequestMethod condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RequestMethodMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REQUEST_METHOD.
    :vartype name: Literal[MatchVariable.REQUEST_METHOD]
    """

    parameters: Required["RequestMethodMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REQUEST_METHOD]]
    """The name of the condition for the delivery rule. Required. REQUEST_METHOD."""


class DeliveryRuleRequestSchemeCondition(TypedDict, total=False):
    """Defines the RequestScheme condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RequestSchemeMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REQUEST_SCHEME.
    :vartype name: Literal[MatchVariable.REQUEST_SCHEME]
    """

    parameters: Required["RequestSchemeMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REQUEST_SCHEME]]
    """The name of the condition for the delivery rule. Required. REQUEST_SCHEME."""


class DeliveryRuleRequestUriCondition(TypedDict, total=False):
    """Defines the RequestUri condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "RequestUriMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. REQUEST_URI.
    :vartype name: Literal[MatchVariable.REQUEST_URI]
    """

    parameters: Required["RequestUriMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.REQUEST_URI]]
    """The name of the condition for the delivery rule. Required. REQUEST_URI."""


class DeliveryRuleResponseHeaderAction(TypedDict, total=False):
    """Defines the response header action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "HeaderActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. MODIFY_RESPONSE_HEADER.
    :vartype name: Literal[DeliveryRuleActionEnum.MODIFY_RESPONSE_HEADER]
    """

    parameters: Required["HeaderActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.MODIFY_RESPONSE_HEADER]]
    """The name of the action for the delivery rule. Required. MODIFY_RESPONSE_HEADER."""


class DeliveryRuleRouteConfigurationOverrideAction(TypedDict, total=False):  # pylint: disable=name-too-long
    """Defines the route configuration override action for the delivery rule. Only applicable to
    Frontdoor Standard/Premium Profiles.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "RouteConfigurationOverrideActionParameters"
    :ivar name: The name of the action for the delivery rule. Required.
     ROUTE_CONFIGURATION_OVERRIDE.
    :vartype name: Literal[DeliveryRuleActionEnum.ROUTE_CONFIGURATION_OVERRIDE]
    """

    parameters: Required["RouteConfigurationOverrideActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.ROUTE_CONFIGURATION_OVERRIDE]]
    """The name of the action for the delivery rule. Required. ROUTE_CONFIGURATION_OVERRIDE."""


class DeliveryRuleServerPortCondition(TypedDict, total=False):
    """Defines the ServerPort condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "ServerPortMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. SERVER_PORT.
    :vartype name: Literal[MatchVariable.SERVER_PORT]
    """

    parameters: Required["ServerPortMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.SERVER_PORT]]
    """The name of the condition for the delivery rule. Required. SERVER_PORT."""


class DeliveryRuleSocketAddrCondition(TypedDict, total=False):
    """Defines the SocketAddress condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "SocketAddrMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. SOCKET_ADDR.
    :vartype name: Literal[MatchVariable.SOCKET_ADDR]
    """

    parameters: Required["SocketAddrMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.SOCKET_ADDR]]
    """The name of the condition for the delivery rule. Required. SOCKET_ADDR."""


class DeliveryRuleSslProtocolCondition(TypedDict, total=False):
    """Defines the SslProtocol condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "SslProtocolMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. SSL_PROTOCOL.
    :vartype name: Literal[MatchVariable.SSL_PROTOCOL]
    """

    parameters: Required["SslProtocolMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.SSL_PROTOCOL]]
    """The name of the condition for the delivery rule. Required. SSL_PROTOCOL."""


class DeliveryRuleUrlFileExtensionCondition(TypedDict, total=False):
    """Defines the UrlFileExtension condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "UrlFileExtensionMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. URL_FILE_EXTENSION.
    :vartype name: Literal[MatchVariable.URL_FILE_EXTENSION]
    """

    parameters: Required["UrlFileExtensionMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.URL_FILE_EXTENSION]]
    """The name of the condition for the delivery rule. Required. URL_FILE_EXTENSION."""


class DeliveryRuleUrlFileNameCondition(TypedDict, total=False):
    """Defines the UrlFileName condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "UrlFileNameMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. URL_FILE_NAME.
    :vartype name: Literal[MatchVariable.URL_FILE_NAME]
    """

    parameters: Required["UrlFileNameMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.URL_FILE_NAME]]
    """The name of the condition for the delivery rule. Required. URL_FILE_NAME."""


class DeliveryRuleUrlPathCondition(TypedDict, total=False):
    """Defines the UrlPath condition for the delivery rule.

    :ivar parameters: Defines the parameters for the condition. Required.
    :vartype parameters: "UrlPathMatchConditionParameters"
    :ivar name: The name of the condition for the delivery rule. Required. URL_PATH.
    :vartype name: Literal[MatchVariable.URL_PATH]
    """

    parameters: Required["UrlPathMatchConditionParameters"]
    """Defines the parameters for the condition. Required."""
    name: Required[Literal[MatchVariable.URL_PATH]]
    """The name of the condition for the delivery rule. Required. URL_PATH."""


class DomainValidationProperties(TypedDict, total=False):
    """The JSON object that contains the properties to validate a domain.

    :ivar validation_token: Challenge used for DNS TXT record or file based validation.
    :vartype validation_token: str
    :ivar expiration_date: The date time that the token expires.
    :vartype expiration_date: str
    """

    validationToken: str
    """Challenge used for DNS TXT record or file based validation."""
    expirationDate: str
    """The date time that the token expires."""


class Endpoint(TrackedResource):
    """CDN endpoint is the entity within a CDN profile containing configuration information such as
    origin, protocol, content caching and delivery behavior. The CDN endpoint uses the URL format
    <endpointname>.azureedge.net.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The JSON object that contains the properties required to create an endpoint.
    :vartype properties: "EndpointProperties"
    """

    properties: "EndpointProperties"
    """The JSON object that contains the properties required to create an endpoint."""


class EndpointPropertiesUpdateParameters(TypedDict, total=False):
    """The JSON object containing endpoint update parameters.

    :ivar origin_path: A directory path on the origin that CDN can use to retrieve content from,
     e.g. contoso.cloudapp.net/originpath.
    :vartype origin_path: str
    :ivar content_types_to_compress: List of content types on which compression applies. The value
     should be a valid MIME type.
    :vartype content_types_to_compress: list[str]
    :ivar origin_host_header: The host header value sent to the origin with each request. This
     property at Endpoint is only allowed when endpoint uses single origin and can be overridden by
     the same property specified at origin.If you leave this blank, the request hostname determines
     this value. Azure CDN origins, such as Web Apps, Blob Storage, and Cloud Services require this
     host header value to match the origin hostname by default.
    :vartype origin_host_header: str
    :ivar is_compression_enabled: Indicates whether content compression is enabled on CDN. Default
     value is false. If compression is enabled, content will be served as compressed if user
     requests for a compressed version. Content won't be compressed on CDN when requested content is
     smaller than 1 byte or larger than 1 MB.
    :vartype is_compression_enabled: bool
    :ivar is_http_allowed: Indicates whether HTTP traffic is allowed on the endpoint. Default value
     is true. At least one protocol (HTTP or HTTPS) must be allowed.
    :vartype is_http_allowed: bool
    :ivar is_https_allowed: Indicates whether HTTPS traffic is allowed on the endpoint. Default
     value is true. At least one protocol (HTTP or HTTPS) must be allowed.
    :vartype is_https_allowed: bool
    :ivar query_string_caching_behavior: Defines how CDN caches requests that include query
     strings. You can ignore any query strings when caching, bypass caching to prevent requests that
     contain query strings from being cached, or cache every request with a unique URL. Known values
     are: "IgnoreQueryString", "BypassCaching", "UseQueryString", and "NotSet".
    :vartype query_string_caching_behavior: Union[str, "QueryStringCachingBehavior"]
    :ivar optimization_type: Specifies what scenario the customer wants this CDN endpoint to
     optimize for, e.g. Download, Media services. With this information, CDN can apply scenario
     driven optimization. Known values are: "GeneralWebDelivery", "GeneralMediaStreaming",
     "VideoOnDemandMediaStreaming", "LargeFileDownload", and "DynamicSiteAcceleration".
    :vartype optimization_type: Union[str, "OptimizationType"]
    :ivar probe_path: Path to a file hosted on the origin which helps accelerate delivery of the
     dynamic content and calculate the most optimal routes for the CDN. This is relative to the
     origin path. This property is only relevant when using a single origin.
    :vartype probe_path: str
    :ivar geo_filters: List of rules defining the user's geo access within a CDN endpoint. Each geo
     filter defines an access rule to a specified path or content, e.g. block APAC for path
     /pictures/.
    :vartype geo_filters: list["GeoFilter"]
    :ivar default_origin_group: A reference to the origin group.
    :vartype default_origin_group: "ResourceReference"
    :ivar url_signing_keys: List of keys used to validate the signed URL hashes.
    :vartype url_signing_keys: list["UrlSigningKey"]
    :ivar delivery_policy: A policy that specifies the delivery rules to be used for an endpoint.
    :vartype delivery_policy: "EndpointPropertiesUpdateParametersDeliveryPolicy"
    :ivar web_application_firewall_policy_link: Defines the Web Application Firewall policy for the
     endpoint (if applicable).
    :vartype web_application_firewall_policy_link:
     "EndpointPropertiesUpdateParametersWebApplicationFirewallPolicyLink"
    """

    originPath: str
    """A directory path on the origin that CDN can use to retrieve content from, e.g.
     contoso.cloudapp.net/originpath."""
    contentTypesToCompress: list[str]
    """List of content types on which compression applies. The value should be a valid MIME type."""
    originHostHeader: str
    """The host header value sent to the origin with each request. This property at Endpoint is only
     allowed when endpoint uses single origin and can be overridden by the same property specified
     at origin.If you leave this blank, the request hostname determines this value. Azure CDN
     origins, such as Web Apps, Blob Storage, and Cloud Services require this host header value to
     match the origin hostname by default."""
    isCompressionEnabled: bool
    """Indicates whether content compression is enabled on CDN. Default value is false. If compression
     is enabled, content will be served as compressed if user requests for a compressed version.
     Content won't be compressed on CDN when requested content is smaller than 1 byte or larger than
     1 MB."""
    isHttpAllowed: bool
    """Indicates whether HTTP traffic is allowed on the endpoint. Default value is true. At least one
     protocol (HTTP or HTTPS) must be allowed."""
    isHttpsAllowed: bool
    """Indicates whether HTTPS traffic is allowed on the endpoint. Default value is true. At least one
     protocol (HTTP or HTTPS) must be allowed."""
    queryStringCachingBehavior: Union[str, "QueryStringCachingBehavior"]
    """Defines how CDN caches requests that include query strings. You can ignore any query strings
     when caching, bypass caching to prevent requests that contain query strings from being cached,
     or cache every request with a unique URL. Known values are: \"IgnoreQueryString\",
     \"BypassCaching\", \"UseQueryString\", and \"NotSet\"."""
    optimizationType: Union[str, "OptimizationType"]
    """Specifies what scenario the customer wants this CDN endpoint to optimize for, e.g. Download,
     Media services. With this information, CDN can apply scenario driven optimization. Known values
     are: \"GeneralWebDelivery\", \"GeneralMediaStreaming\", \"VideoOnDemandMediaStreaming\",
     \"LargeFileDownload\", and \"DynamicSiteAcceleration\"."""
    probePath: str
    """Path to a file hosted on the origin which helps accelerate delivery of the dynamic content and
     calculate the most optimal routes for the CDN. This is relative to the origin path. This
     property is only relevant when using a single origin."""
    geoFilters: list["GeoFilter"]
    """List of rules defining the user's geo access within a CDN endpoint. Each geo filter defines an
     access rule to a specified path or content, e.g. block APAC for path /pictures/."""
    defaultOriginGroup: "ResourceReference"
    """A reference to the origin group."""
    urlSigningKeys: list["UrlSigningKey"]
    """List of keys used to validate the signed URL hashes."""
    deliveryPolicy: "EndpointPropertiesUpdateParametersDeliveryPolicy"
    """A policy that specifies the delivery rules to be used for an endpoint."""
    webApplicationFirewallPolicyLink: "EndpointPropertiesUpdateParametersWebApplicationFirewallPolicyLink"
    """Defines the Web Application Firewall policy for the endpoint (if applicable)."""


class EndpointProperties(EndpointPropertiesUpdateParameters):
    """The JSON object that contains the properties required to create an endpoint.

    :ivar origin_path: A directory path on the origin that CDN can use to retrieve content from,
     e.g. contoso.cloudapp.net/originpath.
    :vartype origin_path: str
    :ivar content_types_to_compress: List of content types on which compression applies. The value
     should be a valid MIME type.
    :vartype content_types_to_compress: list[str]
    :ivar origin_host_header: The host header value sent to the origin with each request. This
     property at Endpoint is only allowed when endpoint uses single origin and can be overridden by
     the same property specified at origin.If you leave this blank, the request hostname determines
     this value. Azure CDN origins, such as Web Apps, Blob Storage, and Cloud Services require this
     host header value to match the origin hostname by default.
    :vartype origin_host_header: str
    :ivar is_compression_enabled: Indicates whether content compression is enabled on CDN. Default
     value is false. If compression is enabled, content will be served as compressed if user
     requests for a compressed version. Content won't be compressed on CDN when requested content is
     smaller than 1 byte or larger than 1 MB.
    :vartype is_compression_enabled: bool
    :ivar is_http_allowed: Indicates whether HTTP traffic is allowed on the endpoint. Default value
     is true. At least one protocol (HTTP or HTTPS) must be allowed.
    :vartype is_http_allowed: bool
    :ivar is_https_allowed: Indicates whether HTTPS traffic is allowed on the endpoint. Default
     value is true. At least one protocol (HTTP or HTTPS) must be allowed.
    :vartype is_https_allowed: bool
    :ivar query_string_caching_behavior: Defines how CDN caches requests that include query
     strings. You can ignore any query strings when caching, bypass caching to prevent requests that
     contain query strings from being cached, or cache every request with a unique URL. Known values
     are: "IgnoreQueryString", "BypassCaching", "UseQueryString", and "NotSet".
    :vartype query_string_caching_behavior: Union[str, "QueryStringCachingBehavior"]
    :ivar optimization_type: Specifies what scenario the customer wants this CDN endpoint to
     optimize for, e.g. Download, Media services. With this information, CDN can apply scenario
     driven optimization. Known values are: "GeneralWebDelivery", "GeneralMediaStreaming",
     "VideoOnDemandMediaStreaming", "LargeFileDownload", and "DynamicSiteAcceleration".
    :vartype optimization_type: Union[str, "OptimizationType"]
    :ivar probe_path: Path to a file hosted on the origin which helps accelerate delivery of the
     dynamic content and calculate the most optimal routes for the CDN. This is relative to the
     origin path. This property is only relevant when using a single origin.
    :vartype probe_path: str
    :ivar geo_filters: List of rules defining the user's geo access within a CDN endpoint. Each geo
     filter defines an access rule to a specified path or content, e.g. block APAC for path
     /pictures/.
    :vartype geo_filters: list["GeoFilter"]
    :ivar default_origin_group: A reference to the origin group.
    :vartype default_origin_group: "ResourceReference"
    :ivar url_signing_keys: List of keys used to validate the signed URL hashes.
    :vartype url_signing_keys: list["UrlSigningKey"]
    :ivar delivery_policy: A policy that specifies the delivery rules to be used for an endpoint.
    :vartype delivery_policy: "EndpointPropertiesUpdateParametersDeliveryPolicy"
    :ivar web_application_firewall_policy_link: Defines the Web Application Firewall policy for the
     endpoint (if applicable).
    :vartype web_application_firewall_policy_link:
     "EndpointPropertiesUpdateParametersWebApplicationFirewallPolicyLink"
    :ivar host_name: The host name of the endpoint structured as {endpointName}.{DNSZone}, e.g.
     contoso.azureedge.net.
    :vartype host_name: str
    :ivar origins: The source of the content being delivered via CDN. Required.
    :vartype origins: list["DeepCreatedOrigin"]
    :ivar origin_groups: The origin groups comprising of origins that are used for load balancing
     the traffic based on availability.
    :vartype origin_groups: list["DeepCreatedOriginGroup"]
    :ivar custom_domains: The custom domains under the endpoint.
    :vartype custom_domains: list["DeepCreatedCustomDomain"]
    :ivar resource_state: Resource status of the endpoint. Known values are: "Creating",
     "Deleting", "Running", "Starting", "Stopped", and "Stopping".
    :vartype resource_state: Union[str, "EndpointResourceState"]
    :ivar provisioning_state: Provisioning status of the endpoint. Known values are: "Succeeded",
     "Failed", "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "EndpointProvisioningState"]
    """

    hostName: str
    """The host name of the endpoint structured as {endpointName}.{DNSZone}, e.g.
     contoso.azureedge.net."""
    origins: Required[list["DeepCreatedOrigin"]]
    """The source of the content being delivered via CDN. Required."""
    originGroups: list["DeepCreatedOriginGroup"]
    """The origin groups comprising of origins that are used for load balancing the traffic based on
     availability."""
    customDomains: list["DeepCreatedCustomDomain"]
    """The custom domains under the endpoint."""
    resourceState: Union[str, "EndpointResourceState"]
    """Resource status of the endpoint. Known values are: \"Creating\", \"Deleting\", \"Running\",
     \"Starting\", \"Stopped\", and \"Stopping\"."""
    provisioningState: Union[str, "EndpointProvisioningState"]
    """Provisioning status of the endpoint. Known values are: \"Succeeded\", \"Failed\", \"Updating\",
     \"Deleting\", and \"Creating\"."""


class EndpointPropertiesUpdateParametersDeliveryPolicy(TypedDict, total=False):  # pylint: disable=name-too-long
    """A policy that specifies the delivery rules to be used for an endpoint.

    :ivar description: User-friendly description of the policy.
    :vartype description: str
    :ivar rules: A list of the delivery rules. Required.
    :vartype rules: list["DeliveryRule"]
    """

    description: str
    """User-friendly description of the policy."""
    rules: Required[list["DeliveryRule"]]
    """A list of the delivery rules. Required."""


class EndpointPropertiesUpdateParametersWebApplicationFirewallPolicyLink(
    TypedDict, total=False
):  # pylint: disable=name-too-long
    """Defines the Web Application Firewall policy for the endpoint (if applicable).

    :ivar id: Resource ID.
    :vartype id: str
    """

    id: str
    """Resource ID."""


class EndpointUpdateParameters(TypedDict, total=False):
    """Properties required to create or update an endpoint.

    :ivar tags: Endpoint tags.
    :vartype tags: dict[str, str]
    :ivar properties: The JSON object containing endpoint update parameters.
    :vartype properties: "EndpointPropertiesUpdateParameters"
    """

    tags: dict[str, str]
    """Endpoint tags."""
    properties: "EndpointPropertiesUpdateParameters"
    """The JSON object containing endpoint update parameters."""


class GeoFilter(TypedDict, total=False):
    """Rules defining user's geo access within a CDN endpoint.

    :ivar relative_path: Relative path applicable to geo filter. (e.g. '/mypictures',
     '/mypicture/kitty.jpg', and etc.). Required.
    :vartype relative_path: str
    :ivar action: Action of the geo filter, i.e. allow or block access. Required. Known values are:
     "Block" and "Allow".
    :vartype action: Union[str, "GeoFilterActions"]
    :ivar country_codes: Two letter country or region codes defining user country or region access
     in a geo filter, e.g. AU, MX, US. Required.
    :vartype country_codes: list[str]
    """

    relativePath: Required[str]
    """Relative path applicable to geo filter. (e.g. '/mypictures', '/mypicture/kitty.jpg', and etc.).
     Required."""
    action: Required[Union[str, "GeoFilterActions"]]
    """Action of the geo filter, i.e. allow or block access. Required. Known values are: \"Block\" and
     \"Allow\"."""
    countryCodes: Required[list[str]]
    """Two letter country or region codes defining user country or region access in a geo filter, e.g.
     AU, MX, US. Required."""


class HeaderActionParameters(TypedDict, total=False):
    """Defines the parameters for the request header action.

    :ivar header_action: Action to perform. Required. Known values are: "Append", "Overwrite", and
     "Delete".
    :vartype header_action: Union[str, "HeaderAction"]
    :ivar header_name: Name of the header to modify. Required.
    :vartype header_name: str
    :ivar value: Value for the specified action.
    :vartype value: str
    :ivar type_name: Required. DELIVERY_RULE_HEADER_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_HEADER_ACTION_PARAMETERS]
    """

    headerAction: Required[Union[str, "HeaderAction"]]
    """Action to perform. Required. Known values are: \"Append\", \"Overwrite\", and \"Delete\"."""
    headerName: Required[str]
    """Name of the header to modify. Required."""
    value: str
    """Value for the specified action."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_HEADER_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_HEADER_ACTION_PARAMETERS."""


class HealthProbeParameters(TypedDict, total=False):
    """The JSON object that contains the properties to send health probes to origin.

    :ivar probe_path: The path relative to the origin that is used to determine the health of the
     origin.
    :vartype probe_path: str
    :ivar probe_request_type: The type of health probe request that is made. Known values are:
     "NotSet", "GET", and "HEAD".
    :vartype probe_request_type: Union[str, "HealthProbeRequestType"]
    :ivar probe_protocol: Protocol to use for health probe. Known values are: "NotSet", "Http", and
     "Https".
    :vartype probe_protocol: Union[str, "ProbeProtocol"]
    :ivar probe_interval_in_seconds: The number of seconds between health probes.Default is 240sec.
    :vartype probe_interval_in_seconds: int
    """

    probePath: str
    """The path relative to the origin that is used to determine the health of the origin."""
    probeRequestType: Union[str, "HealthProbeRequestType"]
    """The type of health probe request that is made. Known values are: \"NotSet\", \"GET\", and
     \"HEAD\"."""
    probeProtocol: Union[str, "ProbeProtocol"]
    """Protocol to use for health probe. Known values are: \"NotSet\", \"Http\", and \"Https\"."""
    probeIntervalInSeconds: int
    """The number of seconds between health probes.Default is 240sec."""


class HostNameMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for HostName match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "HostNameOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_HOST_NAME_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_HOST_NAME_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "HostNameOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_HOST_NAME_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_HOST_NAME_CONDITION_PARAMETERS."""


class HttpErrorRangeParameters(TypedDict, total=False):
    """The JSON object that represents the range for http status codes.

    :ivar begin: The inclusive start of the http status code range.
    :vartype begin: int
    :ivar end: The inclusive end of the http status code range.
    :vartype end: int
    """

    begin: int
    """The inclusive start of the http status code range."""
    end: int
    """The inclusive end of the http status code range."""


class HttpVersionMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for HttpVersion match conditions.

    :ivar operator: Describes operator to be matched. Required. "Equal"
    :vartype operator: Union[str, "HttpVersionOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_HTTP_VERSION_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_HTTP_VERSION_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "HttpVersionOperator"]]
    """Describes operator to be matched. Required. \"Equal\""""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_HTTP_VERSION_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_HTTP_VERSION_CONDITION_PARAMETERS."""


class IsDeviceMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for IsDevice match conditions.

    :ivar operator: Describes operator to be matched. Required. "Equal"
    :vartype operator: Union[str, "IsDeviceOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[Union[str, "IsDeviceMatchConditionParametersMatchValuesItem"]]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_IS_DEVICE_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_IS_DEVICE_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "IsDeviceOperator"]]
    """Describes operator to be matched. Required. \"Equal\""""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[Union[str, "IsDeviceMatchConditionParametersMatchValuesItem"]]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_IS_DEVICE_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_IS_DEVICE_CONDITION_PARAMETERS."""


class KeyVaultCertificateSourceParameters(TypedDict, total=False):
    """Describes the parameters for using a user's KeyVault certificate for securing custom domain.

    :ivar subscription_id: Subscription Id of the user's Key Vault containing the SSL certificate.
     Required.
    :vartype subscription_id: str
    :ivar resource_group_name: Resource group of the user's Key Vault containing the SSL
     certificate. Required.
    :vartype resource_group_name: str
    :ivar vault_name: The name of the user's Key Vault containing the SSL certificate. Required.
    :vartype vault_name: str
    :ivar secret_name: The name of Key Vault Secret (representing the full certificate PFX) in Key
     Vault. Required.
    :vartype secret_name: str
    :ivar secret_version: The version(GUID) of Key Vault Secret in Key Vault.
    :vartype secret_version: str
    :ivar update_rule: Describes the action that shall be taken when the certificate is updated in
     Key Vault. Required. "NoAction"
    :vartype update_rule: Union[str, "UpdateRule"]
    :ivar delete_rule: Describes the action that shall be taken when the certificate is removed
     from Key Vault. Required. "NoAction"
    :vartype delete_rule: Union[str, "DeleteRule"]
    :ivar type_name: Required. KEY_VAULT_CERTIFICATE_SOURCE_PARAMETERS.
    :vartype type_name:
     Literal[CertificateSourceParametersType.KEY_VAULT_CERTIFICATE_SOURCE_PARAMETERS]
    """

    subscriptionId: Required[str]
    """Subscription Id of the user's Key Vault containing the SSL certificate. Required."""
    resourceGroupName: Required[str]
    """Resource group of the user's Key Vault containing the SSL certificate. Required."""
    vaultName: Required[str]
    """The name of the user's Key Vault containing the SSL certificate. Required."""
    secretName: Required[str]
    """The name of Key Vault Secret (representing the full certificate PFX) in Key Vault. Required."""
    secretVersion: str
    """The version(GUID) of Key Vault Secret in Key Vault."""
    updateRule: Required[Union[str, "UpdateRule"]]
    """Describes the action that shall be taken when the certificate is updated in Key Vault.
     Required. \"NoAction\""""
    deleteRule: Required[Union[str, "DeleteRule"]]
    """Describes the action that shall be taken when the certificate is removed from Key Vault.
     Required. \"NoAction\""""
    typeName: Required[Literal[CertificateSourceParametersType.KEY_VAULT_CERTIFICATE_SOURCE_PARAMETERS]]
    """Required. KEY_VAULT_CERTIFICATE_SOURCE_PARAMETERS."""


class KeyVaultSigningKeyParameters(TypedDict, total=False):
    """Describes the parameters for using a user's KeyVault for URL Signing Key.

    :ivar type_name: Required. "KeyVaultSigningKeyParameters"
    :vartype type_name: Union[str, "KeyVaultSigningKeyParametersTypeName"]
    :ivar subscription_id: Subscription Id of the user's Key Vault containing the secret. Required.
    :vartype subscription_id: str
    :ivar resource_group_name: Resource group of the user's Key Vault containing the secret.
     Required.
    :vartype resource_group_name: str
    :ivar vault_name: The name of the user's Key Vault containing the secret. Required.
    :vartype vault_name: str
    :ivar secret_name: The name of secret in Key Vault. Required.
    :vartype secret_name: str
    :ivar secret_version: The version(GUID) of secret in Key Vault. Required.
    :vartype secret_version: str
    """

    typeName: Required[Union[str, "KeyVaultSigningKeyParametersTypeName"]]
    """Required. \"KeyVaultSigningKeyParameters\""""
    subscriptionId: Required[str]
    """Subscription Id of the user's Key Vault containing the secret. Required."""
    resourceGroupName: Required[str]
    """Resource group of the user's Key Vault containing the secret. Required."""
    vaultName: Required[str]
    """The name of the user's Key Vault containing the secret. Required."""
    secretName: Required[str]
    """The name of secret in Key Vault. Required."""
    secretVersion: Required[str]
    """The version(GUID) of secret in Key Vault. Required."""


class LoadBalancingSettingsParameters(TypedDict, total=False):
    """Round-Robin load balancing settings for a backend pool.

    :ivar sample_size: The number of samples to consider for load balancing decisions.
    :vartype sample_size: int
    :ivar successful_samples_required: The number of samples within the sample period that must
     succeed.
    :vartype successful_samples_required: int
    :ivar additional_latency_in_milliseconds: The additional latency in milliseconds for probes to
     fall into the lowest latency bucket.
    :vartype additional_latency_in_milliseconds: int
    """

    sampleSize: int
    """The number of samples to consider for load balancing decisions."""
    successfulSamplesRequired: int
    """The number of samples within the sample period that must succeed."""
    additionalLatencyInMilliseconds: int
    """The additional latency in milliseconds for probes to fall into the lowest latency bucket."""


class LoadParameters(TypedDict, total=False):
    """Parameters required for content load.

    :ivar content_paths: The path to the content to be loaded. Path should be a relative file URL
     of the origin. Required.
    :vartype content_paths: list[str]
    """

    contentPaths: Required[list[str]]
    """The path to the content to be loaded. Path should be a relative file URL of the origin.
     Required."""


class ManagedCertificateParameters(TypedDict, total=False):
    """Managed Certificate used for https.

    :ivar subject: Subject name in the certificate.
    :vartype subject: str
    :ivar expiration_date: Certificate expiration date.
    :vartype expiration_date: str
    :ivar type: The type of the secret resource. Required. MANAGED_CERTIFICATE.
    :vartype type: Literal[SecretType.MANAGED_CERTIFICATE]
    """

    subject: str
    """Subject name in the certificate."""
    expirationDate: str
    """Certificate expiration date."""
    type: Required[Literal[SecretType.MANAGED_CERTIFICATE]]
    """The type of the secret resource. Required. MANAGED_CERTIFICATE."""


class ManagedRuleGroupOverride(TypedDict, total=False):
    """Defines a managed rule group override setting.

    :ivar rule_group_name: Describes the managed rule group within the rule set to override.
     Required.
    :vartype rule_group_name: str
    :ivar rules: List of rules that will be enabled. If none specified, all rules in the group will
     be disabled.
    :vartype rules: list["ManagedRuleOverride"]
    """

    ruleGroupName: Required[str]
    """Describes the managed rule group within the rule set to override. Required."""
    rules: list["ManagedRuleOverride"]
    """List of rules that will be enabled. If none specified, all rules in the group will be disabled."""


class ManagedRuleOverride(TypedDict, total=False):
    """Defines a managed rule group override setting.

    :ivar rule_id: Identifier for the managed rule. Required.
    :vartype rule_id: str
    :ivar enabled_state: Describes if the managed rule is in enabled or disabled state. Defaults to
     Disabled if not specified. Known values are: "Disabled" and "Enabled".
    :vartype enabled_state: Union[str, "ManagedRuleEnabledState"]
    :ivar action: Describes the override action to be applied when rule matches. Known values are:
     "Allow", "Block", "Log", and "Redirect".
    :vartype action: Union[str, "ActionType"]
    """

    ruleId: Required[str]
    """Identifier for the managed rule. Required."""
    enabledState: Union[str, "ManagedRuleEnabledState"]
    """Describes if the managed rule is in enabled or disabled state. Defaults to Disabled if not
     specified. Known values are: \"Disabled\" and \"Enabled\"."""
    action: Union[str, "ActionType"]
    """Describes the override action to be applied when rule matches. Known values are: \"Allow\",
     \"Block\", \"Log\", and \"Redirect\"."""


class ManagedRuleSet(TypedDict, total=False):
    """Defines a managed rule set.

    :ivar rule_set_type: Defines the rule set type to use. Required.
    :vartype rule_set_type: str
    :ivar rule_set_version: Defines the version of the rule set to use. Required.
    :vartype rule_set_version: str
    :ivar anomaly_score: Verizon only : If the rule set supports anomaly detection mode, this
     describes the threshold for blocking requests.
    :vartype anomaly_score: int
    :ivar rule_group_overrides: Defines the rule overrides to apply to the rule set.
    :vartype rule_group_overrides: list["ManagedRuleGroupOverride"]
    """

    ruleSetType: Required[str]
    """Defines the rule set type to use. Required."""
    ruleSetVersion: Required[str]
    """Defines the version of the rule set to use. Required."""
    anomalyScore: int
    """Verizon only : If the rule set supports anomaly detection mode, this describes the threshold
     for blocking requests."""
    ruleGroupOverrides: list["ManagedRuleGroupOverride"]
    """Defines the rule overrides to apply to the rule set."""


class ManagedRuleSetList(TypedDict, total=False):
    """Defines the list of managed rule sets for the policy.

    :ivar managed_rule_sets: List of rule sets.
    :vartype managed_rule_sets: list["ManagedRuleSet"]
    """

    managedRuleSets: list["ManagedRuleSet"]
    """List of rule sets."""


class ManagedServiceIdentity(TypedDict, total=False):
    """Managed service identity (system assigned and/or user assigned identities).

    :ivar principal_id: The service principal ID of the system assigned identity. This property
     will only be provided for a system assigned identity.
    :vartype principal_id: str
    :ivar tenant_id: The tenant ID of the system assigned identity. This property will only be
     provided for a system assigned identity.
    :vartype tenant_id: str
    :ivar type: The type of managed identity assigned to this resource. Required. Known values are:
     "None", "SystemAssigned", "UserAssigned", and "SystemAssigned,UserAssigned".
    :vartype type: Union[str, "ManagedServiceIdentityType"]
    :ivar user_assigned_identities: The identities assigned to this resource by the user.
    :vartype user_assigned_identities: dict[str, "UserAssignedIdentity"]
    """

    principalId: str
    """The service principal ID of the system assigned identity. This property will only be provided
     for a system assigned identity."""
    tenantId: str
    """The tenant ID of the system assigned identity. This property will only be provided for a system
     assigned identity."""
    type: Required[Union[str, "ManagedServiceIdentityType"]]
    """The type of managed identity assigned to this resource. Required. Known values are: \"None\",
     \"SystemAssigned\", \"UserAssigned\", and \"SystemAssigned,UserAssigned\"."""
    userAssignedIdentities: dict[str, "UserAssignedIdentity"]
    """The identities assigned to this resource by the user."""


class MatchCondition(TypedDict, total=False):
    """Define match conditions.

    :ivar match_variable: Match variable to compare against. Required. Known values are:
     "RemoteAddr", "SocketAddr", "RequestMethod", "RequestHeader", "RequestUri", "QueryString",
     "RequestBody", "Cookies", and "PostArgs".
    :vartype match_variable: Union[str, "WafMatchVariable"]
    :ivar selector: Selector can used to match a specific key for QueryString, Cookies,
     RequestHeader or PostArgs.
    :vartype selector: str
    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "IPMatch",
     "GeoMatch", "Equal", "Contains", "LessThan", "GreaterThan", "LessThanOrEqual",
     "GreaterThanOrEqual", "BeginsWith", "EndsWith", and "RegEx".
    :vartype operator: Union[str, "Operator"]
    :ivar negate_condition: Describes if the result of this condition should be negated.
    :vartype negate_condition: bool
    :ivar match_value: List of possible match values. Required.
    :vartype match_value: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "TransformType"]]
    """

    matchVariable: Required[Union[str, "WafMatchVariable"]]
    """Match variable to compare against. Required. Known values are: \"RemoteAddr\", \"SocketAddr\",
     \"RequestMethod\", \"RequestHeader\", \"RequestUri\", \"QueryString\", \"RequestBody\",
     \"Cookies\", and \"PostArgs\"."""
    selector: str
    """Selector can used to match a specific key for QueryString, Cookies, RequestHeader or PostArgs."""
    operator: Required[Union[str, "Operator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"IPMatch\",
     \"GeoMatch\", \"Equal\", \"Contains\", \"LessThan\", \"GreaterThan\", \"LessThanOrEqual\",
     \"GreaterThanOrEqual\", \"BeginsWith\", \"EndsWith\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if the result of this condition should be negated."""
    matchValue: Required[list[str]]
    """List of possible match values. Required."""
    transforms: list[Union[str, "TransformType"]]
    """List of transforms."""


class MigrationEndpointMapping(TypedDict, total=False):
    """CDN Endpoint Mapping.

    :ivar migrated_from: Name of the classic CDN profile endpoint.
    :vartype migrated_from: str
    :ivar migrated_to: Name of the newly created migrated Azure Frontdoor Standard/Premium profile
     endpoint. This name will replace the name of the classic CDN endpoint resource.
    :vartype migrated_to: str
    """

    migratedFrom: str
    """Name of the classic CDN profile endpoint."""
    migratedTo: str
    """Name of the newly created migrated Azure Frontdoor Standard/Premium profile endpoint. This name
     will replace the name of the classic CDN endpoint resource."""


class MigrationParameters(TypedDict, total=False):
    """Request body for Migrate operation.

    :ivar sku: Sku for the migration. Required.
    :vartype sku: "Sku"
    :ivar classic_resource_reference: Resource reference of the classic cdn profile or classic
     frontdoor that need to be migrated. Required.
    :vartype classic_resource_reference: "ResourceReference"
    :ivar profile_name: Name of the new profile that need to be created. Required.
    :vartype profile_name: str
    :ivar migration_web_application_firewall_mappings: Waf mapping for the migrated profile.
    :vartype migration_web_application_firewall_mappings:
     list["MigrationWebApplicationFirewallMapping"]
    """

    sku: Required["Sku"]
    """Sku for the migration. Required."""
    classicResourceReference: Required["ResourceReference"]
    """Resource reference of the classic cdn profile or classic frontdoor that need to be migrated.
     Required."""
    profileName: Required[str]
    """Name of the new profile that need to be created. Required."""
    migrationWebApplicationFirewallMappings: list["MigrationWebApplicationFirewallMapping"]
    """Waf mapping for the migrated profile."""


class MigrationWebApplicationFirewallMapping(TypedDict, total=False):
    """Web Application Firewall Mapping.

    :ivar migrated_from: Migration From Waf policy.
    :vartype migrated_from: "ResourceReference"
    :ivar migrated_to: Migration to Waf policy.
    :vartype migrated_to: "ResourceReference"
    """

    migratedFrom: "ResourceReference"
    """Migration From Waf policy."""
    migratedTo: "ResourceReference"
    """Migration to Waf policy."""


class Origin(ProxyResource):
    """CDN origin is the source of the content being delivered via CDN. When the edge nodes
    represented by an endpoint do not have the requested content cached, they attempt to fetch it
    from one or more of the configured origins.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the origin.
    :vartype properties: "OriginProperties"
    """

    properties: "OriginProperties"
    """The JSON object that contains the properties of the origin."""


class OriginAuthenticationProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the origin authentication settings.

    :ivar type: The type of the authentication for the origin. Known values are:
     "SystemAssignedIdentity" and "UserAssignedIdentity".
    :vartype type: Union[str, "OriginAuthenticationType"]
    :ivar user_assigned_identity: The user assigned managed identity to use for the origin
     authentication if type is UserAssignedIdentity.
    :vartype user_assigned_identity: "ResourceReference"
    :ivar scope: The scope used when requesting token from Microsoft Entra. For example, for Azure
     Blob Storage, scope could be "`https://storage.azure.com/.default
     <https://storage.azure.com/.default>`_".
    :vartype scope: str
    """

    type: Union[str, "OriginAuthenticationType"]
    """The type of the authentication for the origin. Known values are: \"SystemAssignedIdentity\" and
     \"UserAssignedIdentity\"."""
    userAssignedIdentity: "ResourceReference"
    """The user assigned managed identity to use for the origin authentication if type is
     UserAssignedIdentity."""
    scope: str
    """The scope used when requesting token from Microsoft Entra. For example, for Azure Blob Storage,
     scope could be \"`https://storage.azure.com/.default <https://storage.azure.com/.default>`_\"."""


class OriginGroup(ProxyResource):
    """Origin group comprising of origins is used for load balancing to origins when the content
    cannot be served from CDN.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the origin group.
    :vartype properties: "OriginGroupProperties"
    """

    properties: "OriginGroupProperties"
    """The JSON object that contains the properties of the origin group."""


class OriginGroupOverride(TypedDict, total=False):
    """Defines the parameters for the origin group override configuration.

    :ivar origin_group: defines the OriginGroup that would override the DefaultOriginGroup on
     route.
    :vartype origin_group: "ResourceReference"
    :ivar forwarding_protocol: Protocol this rule will use when forwarding traffic to backends.
     Known values are: "HttpOnly", "HttpsOnly", and "MatchRequest".
    :vartype forwarding_protocol: Union[str, "ForwardingProtocol"]
    """

    originGroup: "ResourceReference"
    """defines the OriginGroup that would override the DefaultOriginGroup on route."""
    forwardingProtocol: Union[str, "ForwardingProtocol"]
    """Protocol this rule will use when forwarding traffic to backends. Known values are:
     \"HttpOnly\", \"HttpsOnly\", and \"MatchRequest\"."""


class OriginGroupOverrideAction(TypedDict, total=False):
    """Defines the origin group override action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "OriginGroupOverrideActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. ORIGIN_GROUP_OVERRIDE.
    :vartype name: Literal[DeliveryRuleActionEnum.ORIGIN_GROUP_OVERRIDE]
    """

    parameters: Required["OriginGroupOverrideActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.ORIGIN_GROUP_OVERRIDE]]
    """The name of the action for the delivery rule. Required. ORIGIN_GROUP_OVERRIDE."""


class OriginGroupOverrideActionParameters(TypedDict, total=False):
    """Defines the parameters for the origin group override action.

    :ivar origin_group: defines the OriginGroup that would override the DefaultOriginGroup.
     Required.
    :vartype origin_group: "ResourceReference"
    :ivar type_name: Required. DELIVERY_RULE_ORIGIN_GROUP_OVERRIDE_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_ORIGIN_GROUP_OVERRIDE_ACTION_PARAMETERS]
    """

    originGroup: Required["ResourceReference"]
    """defines the OriginGroup that would override the DefaultOriginGroup. Required."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_ORIGIN_GROUP_OVERRIDE_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_ORIGIN_GROUP_OVERRIDE_ACTION_PARAMETERS."""


class OriginGroupUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the origin group.

    :ivar health_probe_settings: Health probe settings to the origin that is used to determine the
     health of the origin.
    :vartype health_probe_settings: "HealthProbeParameters"
    :ivar origins: The source of the content being delivered via CDN within given origin group.
    :vartype origins: list["ResourceReference"]
    :ivar traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: Time in minutes to shift
     the traffic to the endpoint gradually when an unhealthy endpoint comes healthy or a new
     endpoint is added. Default is 10 mins. This property is currently not supported.
    :vartype traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: int
    :ivar response_based_origin_error_detection_settings: The JSON object that contains the
     properties to determine origin health using real requests/responses. This property is currently
     not supported.
    :vartype response_based_origin_error_detection_settings:
     "ResponseBasedOriginErrorDetectionParameters"
    """

    healthProbeSettings: "HealthProbeParameters"
    """Health probe settings to the origin that is used to determine the health of the origin."""
    origins: list["ResourceReference"]
    """The source of the content being delivered via CDN within given origin group."""
    trafficRestorationTimeToHealedOrNewEndpointsInMinutes: int
    """Time in minutes to shift the traffic to the endpoint gradually when an unhealthy endpoint comes
     healthy or a new endpoint is added. Default is 10 mins. This property is currently not
     supported."""
    responseBasedOriginErrorDetectionSettings: "ResponseBasedOriginErrorDetectionParameters"
    """The JSON object that contains the properties to determine origin health using real
     requests/responses. This property is currently not supported."""


class OriginGroupProperties(OriginGroupUpdatePropertiesParameters):
    """The JSON object that contains the properties of the origin group.

    :ivar health_probe_settings: Health probe settings to the origin that is used to determine the
     health of the origin.
    :vartype health_probe_settings: "HealthProbeParameters"
    :ivar origins: The source of the content being delivered via CDN within given origin group.
    :vartype origins: list["ResourceReference"]
    :ivar traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: Time in minutes to shift
     the traffic to the endpoint gradually when an unhealthy endpoint comes healthy or a new
     endpoint is added. Default is 10 mins. This property is currently not supported.
    :vartype traffic_restoration_time_to_healed_or_new_endpoints_in_minutes: int
    :ivar response_based_origin_error_detection_settings: The JSON object that contains the
     properties to determine origin health using real requests/responses. This property is currently
     not supported.
    :vartype response_based_origin_error_detection_settings:
     "ResponseBasedOriginErrorDetectionParameters"
    :ivar resource_state: Resource status of the origin group. Known values are: "Creating",
     "Active", and "Deleting".
    :vartype resource_state: Union[str, "OriginGroupResourceState"]
    :ivar provisioning_state: Provisioning status of the origin group. Known values are:
     "Succeeded", "Failed", "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "OriginGroupProvisioningState"]
    """

    resourceState: Union[str, "OriginGroupResourceState"]
    """Resource status of the origin group. Known values are: \"Creating\", \"Active\", and
     \"Deleting\"."""
    provisioningState: Union[str, "OriginGroupProvisioningState"]
    """Provisioning status of the origin group. Known values are: \"Succeeded\", \"Failed\",
     \"Updating\", \"Deleting\", and \"Creating\"."""


class OriginGroupUpdateParameters(TypedDict, total=False):
    """Origin group properties needed for origin group creation or update.

    :ivar properties: The JSON object that contains the properties of the origin group.
    :vartype properties: "OriginGroupUpdatePropertiesParameters"
    """

    properties: "OriginGroupUpdatePropertiesParameters"
    """The JSON object that contains the properties of the origin group."""


class OriginUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the origin.

    :ivar host_name: The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses
     are supported.This should be unique across all origins in an endpoint.
    :vartype host_name: str
    :ivar http_port: The value of the HTTP port. Must be between 1 and 65535.
    :vartype http_port: int
    :ivar https_port: The value of the HTTPS port. Must be between 1 and 65535.
    :vartype https_port: int
    :ivar origin_host_header: The host header value sent to the origin with each request. If you
     leave this blank, the request hostname determines this value. Azure CDN origins, such as Web
     Apps, Blob Storage, and Cloud Services require this host header value to match the origin
     hostname by default. This overrides the host header defined at Endpoint.
    :vartype origin_host_header: str
    :ivar priority: Priority of origin in given origin group for load balancing. Higher priorities
     will not be used for load balancing if any lower priority origin is healthy.Must be between 1
     and 5.
    :vartype priority: int
    :ivar weight: Weight of the origin in given origin group for load balancing. Must be between 1
     and 1000.
    :vartype weight: int
    :ivar enabled: Origin is enabled for load balancing or not.
    :vartype enabled: bool
    :ivar private_link_alias: The Alias of the Private Link resource. Populating this optional
     field indicates that this origin is 'Private'.
    :vartype private_link_alias: str
    :ivar private_link_resource_id: The Resource Id of the Private Link resource. Populating this
     optional field indicates that this backend is 'Private'.
    :vartype private_link_resource_id: str
    :ivar private_link_location: The location of the Private Link resource. Required only if
     'privateLinkResourceId' is populated.
    :vartype private_link_location: str
    :ivar private_link_approval_message: A custom message to be included in the approval request to
     connect to the Private Link.
    :vartype private_link_approval_message: str
    """

    hostName: str
    """The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses are supported.This
     should be unique across all origins in an endpoint."""
    httpPort: int
    """The value of the HTTP port. Must be between 1 and 65535."""
    httpsPort: int
    """The value of the HTTPS port. Must be between 1 and 65535."""
    originHostHeader: str
    """The host header value sent to the origin with each request. If you leave this blank, the
     request hostname determines this value. Azure CDN origins, such as Web Apps, Blob Storage, and
     Cloud Services require this host header value to match the origin hostname by default. This
     overrides the host header defined at Endpoint."""
    priority: int
    """Priority of origin in given origin group for load balancing. Higher priorities will not be used
     for load balancing if any lower priority origin is healthy.Must be between 1 and 5."""
    weight: int
    """Weight of the origin in given origin group for load balancing. Must be between 1 and 1000."""
    enabled: bool
    """Origin is enabled for load balancing or not."""
    privateLinkAlias: str
    """The Alias of the Private Link resource. Populating this optional field indicates that this
     origin is 'Private'."""
    privateLinkResourceId: str
    """The Resource Id of the Private Link resource. Populating this optional field indicates that
     this backend is 'Private'."""
    privateLinkLocation: str
    """The location of the Private Link resource. Required only if 'privateLinkResourceId' is
     populated."""
    privateLinkApprovalMessage: str
    """A custom message to be included in the approval request to connect to the Private Link."""


class OriginProperties(OriginUpdatePropertiesParameters):
    """The JSON object that contains the properties of the origin.

    :ivar http_port: The value of the HTTP port. Must be between 1 and 65535.
    :vartype http_port: int
    :ivar https_port: The value of the HTTPS port. Must be between 1 and 65535.
    :vartype https_port: int
    :ivar origin_host_header: The host header value sent to the origin with each request. If you
     leave this blank, the request hostname determines this value. Azure CDN origins, such as Web
     Apps, Blob Storage, and Cloud Services require this host header value to match the origin
     hostname by default. This overrides the host header defined at Endpoint.
    :vartype origin_host_header: str
    :ivar priority: Priority of origin in given origin group for load balancing. Higher priorities
     will not be used for load balancing if any lower priority origin is healthy.Must be between 1
     and 5.
    :vartype priority: int
    :ivar weight: Weight of the origin in given origin group for load balancing. Must be between 1
     and 1000.
    :vartype weight: int
    :ivar enabled: Origin is enabled for load balancing or not.
    :vartype enabled: bool
    :ivar private_link_alias: The Alias of the Private Link resource. Populating this optional
     field indicates that this origin is 'Private'.
    :vartype private_link_alias: str
    :ivar private_link_resource_id: The Resource Id of the Private Link resource. Populating this
     optional field indicates that this backend is 'Private'.
    :vartype private_link_resource_id: str
    :ivar private_link_location: The location of the Private Link resource. Required only if
     'privateLinkResourceId' is populated.
    :vartype private_link_location: str
    :ivar private_link_approval_message: A custom message to be included in the approval request to
     connect to the Private Link.
    :vartype private_link_approval_message: str
    :ivar resource_state: Resource status of the origin. Known values are: "Creating", "Active",
     and "Deleting".
    :vartype resource_state: Union[str, "OriginResourceState"]
    :ivar provisioning_state: Provisioning status of the origin. Known values are: "Succeeded",
     "Failed", "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "OriginProvisioningState"]
    :ivar private_endpoint_status: The approval status for the connection to the Private Link.
     Known values are: "Pending", "Approved", "Rejected", "Disconnected", and "Timeout".
    :vartype private_endpoint_status: Union[str, "PrivateEndpointStatus"]
    :ivar host_name: The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses
     are supported.This should be unique across all origins in an endpoint. Required.
    :vartype host_name: str
    """

    resourceState: Union[str, "OriginResourceState"]
    """Resource status of the origin. Known values are: \"Creating\", \"Active\", and \"Deleting\"."""
    provisioningState: Union[str, "OriginProvisioningState"]
    """Provisioning status of the origin. Known values are: \"Succeeded\", \"Failed\", \"Updating\",
     \"Deleting\", and \"Creating\"."""
    privateEndpointStatus: Union[str, "PrivateEndpointStatus"]
    """The approval status for the connection to the Private Link. Known values are: \"Pending\",
     \"Approved\", \"Rejected\", \"Disconnected\", and \"Timeout\"."""
    hostName: Required[str]
    """The address of the origin. Domain names, IPv4 addresses, and IPv6 addresses are supported.This
     should be unique across all origins in an endpoint. Required."""


class OriginUpdateParameters(TypedDict, total=False):
    """Origin properties needed for origin update.

    :ivar properties: The JSON object that contains the properties of the origin.
    :vartype properties: "OriginUpdatePropertiesParameters"
    """

    properties: "OriginUpdatePropertiesParameters"
    """The JSON object that contains the properties of the origin."""


class PolicySettings(TypedDict, total=False):
    """Defines contents of a web application firewall global configuration.

    :ivar enabled_state: describes if the policy is in enabled state or disabled state. Known
     values are: "Disabled" and "Enabled".
    :vartype enabled_state: Union[str, "PolicyEnabledState"]
    :ivar mode: Describes if it is in detection mode or prevention mode at policy level. Known
     values are: "Prevention" and "Detection".
    :vartype mode: Union[str, "PolicyMode"]
    :ivar default_redirect_url: If action type is redirect, this field represents the default
     redirect URL for the client.
    :vartype default_redirect_url: str
    :ivar default_custom_block_response_status_code: If the action type is block, this field
     defines the default customer overridable http response status code. Known values are: 200, 403,
     405, 406, and 429.
    :vartype default_custom_block_response_status_code: Union[int,
     "PolicySettingsDefaultCustomBlockResponseStatusCode"]
    :ivar default_custom_block_response_body: If the action type is block, customer can override
     the response body. The body must be specified in base64 encoding.
    :vartype default_custom_block_response_body: str
    """

    enabledState: Union[str, "PolicyEnabledState"]
    """describes if the policy is in enabled state or disabled state. Known values are: \"Disabled\"
     and \"Enabled\"."""
    mode: Union[str, "PolicyMode"]
    """Describes if it is in detection mode or prevention mode at policy level. Known values are:
     \"Prevention\" and \"Detection\"."""
    defaultRedirectUrl: str
    """If action type is redirect, this field represents the default redirect URL for the client."""
    defaultCustomBlockResponseStatusCode: Union[int, "PolicySettingsDefaultCustomBlockResponseStatusCode"]
    """If the action type is block, this field defines the default customer overridable http response
     status code. Known values are: 200, 403, 405, 406, and 429."""
    defaultCustomBlockResponseBody: str
    """If the action type is block, customer can override the response body. The body must be
     specified in base64 encoding."""


class PostArgsMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for PostArgs match conditions.

    :ivar selector: Name of PostArg to be matched.
    :vartype selector: str
    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "PostArgsOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_POST_ARGS_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_POST_ARGS_CONDITION_PARAMETERS]
    """

    selector: str
    """Name of PostArg to be matched."""
    operator: Required[Union[str, "PostArgsOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_POST_ARGS_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_POST_ARGS_CONDITION_PARAMETERS."""


class Profile(TrackedResource):
    """A profile is a logical grouping of endpoints that share the same settings.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar tags: Resource tags.
    :vartype tags: dict[str, str]
    :ivar location: The geo-location where the resource lives. Required.
    :vartype location: str
    :ivar properties: The JSON object that contains the properties required to create a profile.
    :vartype properties: "ProfileProperties"
    :ivar sku: The pricing tier (defines Azure Front Door Standard or Premium or a CDN provider,
     feature list and rate) of the profile. Required.
    :vartype sku: "Sku"
    :ivar kind: Kind of the profile. Used by portal to differentiate traditional CDN profile and
     new AFD profile.
    :vartype kind: str
    :ivar identity: The managed service identities assigned to this resource.
    :vartype identity: "ManagedServiceIdentity"
    """

    properties: "ProfileProperties"
    """The JSON object that contains the properties required to create a profile."""
    sku: Required["Sku"]
    """The pricing tier (defines Azure Front Door Standard or Premium or a CDN provider, feature list
     and rate) of the profile. Required."""
    kind: str
    """Kind of the profile. Used by portal to differentiate traditional CDN profile and new AFD
     profile."""
    identity: "ManagedServiceIdentity"
    """The managed service identities assigned to this resource."""


class ProfileChangeSkuWafMapping(TypedDict, total=False):
    """Parameters required for profile upgrade.

    :ivar security_policy_name: The security policy name. Required.
    :vartype security_policy_name: str
    :ivar change_to_waf_policy: The new waf resource for the security policy to use. Required.
    :vartype change_to_waf_policy: "ResourceReference"
    """

    securityPolicyName: Required[str]
    """The security policy name. Required."""
    changeToWafPolicy: Required["ResourceReference"]
    """The new waf resource for the security policy to use. Required."""


class ProfileLogScrubbing(TypedDict, total=False):
    """Defines rules that scrub sensitive fields in the Azure Front Door profile logs.

    :ivar state: State of the log scrubbing config. Default value is Enabled. Known values are:
     "Enabled" and "Disabled".
    :vartype state: Union[str, "ProfileScrubbingState"]
    :ivar scrubbing_rules: List of log scrubbing rules applied to the Azure Front Door profile
     logs.
    :vartype scrubbing_rules: list["ProfileScrubbingRules"]
    """

    state: Union[str, "ProfileScrubbingState"]
    """State of the log scrubbing config. Default value is Enabled. Known values are: \"Enabled\" and
     \"Disabled\"."""
    scrubbingRules: list["ProfileScrubbingRules"]
    """List of log scrubbing rules applied to the Azure Front Door profile logs."""


class ProfileProperties(TypedDict, total=False):
    """The JSON object that contains the properties required to create a profile.

    :ivar resource_state: Resource status of the profile. Known values are: "Creating", "Active",
     "Deleting", "Disabled", "Migrating", "Migrated", "PendingMigrationCommit",
     "CommittingMigration", and "AbortingMigration".
    :vartype resource_state: Union[str, "ProfileResourceState"]
    :ivar provisioning_state: Provisioning status of the profile. Known values are: "Succeeded",
     "Failed", "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "ProfileProvisioningState"]
    :ivar extended_properties: Key-Value pair representing additional properties for profiles.
    :vartype extended_properties: dict[str, str]
    :ivar front_door_id: The Id of the frontdoor.
    :vartype front_door_id: str
    :ivar origin_response_timeout_seconds: Send and receive timeout on forwarding request to the
     origin. When timeout is reached, the request fails and returns.
    :vartype origin_response_timeout_seconds: int
    :ivar log_scrubbing: Defines rules that scrub sensitive fields in the Azure Front Door profile
     logs.
    :vartype log_scrubbing: "ProfileLogScrubbing"
    """

    resourceState: Union[str, "ProfileResourceState"]
    """Resource status of the profile. Known values are: \"Creating\", \"Active\", \"Deleting\",
     \"Disabled\", \"Migrating\", \"Migrated\", \"PendingMigrationCommit\", \"CommittingMigration\",
     and \"AbortingMigration\"."""
    provisioningState: Union[str, "ProfileProvisioningState"]
    """Provisioning status of the profile. Known values are: \"Succeeded\", \"Failed\", \"Updating\",
     \"Deleting\", and \"Creating\"."""
    extendedProperties: dict[str, str]
    """Key-Value pair representing additional properties for profiles."""
    frontDoorId: str
    """The Id of the frontdoor."""
    originResponseTimeoutSeconds: int
    """Send and receive timeout on forwarding request to the origin. When timeout is reached, the
     request fails and returns."""
    logScrubbing: "ProfileLogScrubbing"
    """Defines rules that scrub sensitive fields in the Azure Front Door profile logs."""


class ProfilePropertiesUpdateParameters(TypedDict, total=False):
    """The JSON object containing profile update parameters.

    :ivar origin_response_timeout_seconds: Send and receive timeout on forwarding request to the
     origin. When timeout is reached, the request fails and returns.
    :vartype origin_response_timeout_seconds: int
    :ivar log_scrubbing: Defines rules to scrub sensitive fields in logs.
    :vartype log_scrubbing: "ProfileLogScrubbing"
    """

    originResponseTimeoutSeconds: int
    """Send and receive timeout on forwarding request to the origin. When timeout is reached, the
     request fails and returns."""
    logScrubbing: "ProfileLogScrubbing"
    """Defines rules to scrub sensitive fields in logs."""


class ProfileScrubbingRules(TypedDict, total=False):
    """Defines the contents of the log scrubbing rules.

    :ivar match_variable: The variable to be scrubbed from the logs. Required. Known values are:
     "RequestIPAddress", "RequestUri", and "QueryStringArgNames".
    :vartype match_variable: Union[str, "ScrubbingRuleEntryMatchVariable"]
    :ivar selector_match_operator: When matchVariable is a collection, operate on the selector to
     specify which elements in the collection this rule applies to. Required. "EqualsAny"
    :vartype selector_match_operator: Union[str, "ScrubbingRuleEntryMatchOperator"]
    :ivar selector: When matchVariable is a collection, operator used to specify which elements in
     the collection this rule applies to.
    :vartype selector: str
    :ivar state: Defines the state of a log scrubbing rule. Default value is enabled. Known values
     are: "Enabled" and "Disabled".
    :vartype state: Union[str, "ScrubbingRuleEntryState"]
    """

    matchVariable: Required[Union[str, "ScrubbingRuleEntryMatchVariable"]]
    """The variable to be scrubbed from the logs. Required. Known values are: \"RequestIPAddress\",
     \"RequestUri\", and \"QueryStringArgNames\"."""
    selectorMatchOperator: Required[Union[str, "ScrubbingRuleEntryMatchOperator"]]
    """When matchVariable is a collection, operate on the selector to specify which elements in the
     collection this rule applies to. Required. \"EqualsAny\""""
    selector: str
    """When matchVariable is a collection, operator used to specify which elements in the collection
     this rule applies to."""
    state: Union[str, "ScrubbingRuleEntryState"]
    """Defines the state of a log scrubbing rule. Default value is enabled. Known values are:
     \"Enabled\" and \"Disabled\"."""


class ProfileUpdateParameters(TypedDict, total=False):
    """Properties required to update a profile.

    :ivar tags: Profile tags.
    :vartype tags: dict[str, str]
    :ivar identity: Managed service identity (system assigned and/or user assigned identities).
    :vartype identity: "ManagedServiceIdentity"
    :ivar properties: The JSON object containing profile update parameters.
    :vartype properties: "ProfilePropertiesUpdateParameters"
    """

    tags: dict[str, str]
    """Profile tags."""
    identity: "ManagedServiceIdentity"
    """Managed service identity (system assigned and/or user assigned identities)."""
    properties: "ProfilePropertiesUpdateParameters"
    """The JSON object containing profile update parameters."""


class ProfileUpgradeParameters(TypedDict, total=False):
    """Parameters required for profile upgrade.

    :ivar waf_mapping_list: Web Application Firewall (WAF) and security policy mapping for the
     profile upgrade. Required.
    :vartype waf_mapping_list: list["ProfileChangeSkuWafMapping"]
    """

    wafMappingList: Required[list["ProfileChangeSkuWafMapping"]]
    """Web Application Firewall (WAF) and security policy mapping for the profile upgrade. Required."""


class PurgeParameters(TypedDict, total=False):
    """Parameters required for content purge.

    :ivar content_paths: The path to the content to be purged. Can describe a file path or a wild
     card directory. Required.
    :vartype content_paths: list[str]
    """

    contentPaths: Required[list[str]]
    """The path to the content to be purged. Can describe a file path or a wild card directory.
     Required."""


class QueryStringMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for QueryString match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "QueryStringOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_QUERY_STRING_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_QUERY_STRING_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "QueryStringOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_QUERY_STRING_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_QUERY_STRING_CONDITION_PARAMETERS."""


class RateLimitRule(CustomRule):
    """Defines a rate limiting rule that can be included in a waf policy.

    :ivar name: Defines the name of the custom rule. Required.
    :vartype name: str
    :ivar enabled_state: Describes if the custom rule is in enabled or disabled state. Defaults to
     Enabled if not specified. Known values are: "Disabled" and "Enabled".
    :vartype enabled_state: Union[str, "CustomRuleEnabledState"]
    :ivar priority: Defines in what order this rule be evaluated in the overall list of custom
     rules. Required.
    :vartype priority: int
    :ivar match_conditions: List of match conditions. Required.
    :vartype match_conditions: list["MatchCondition"]
    :ivar action: Describes what action to be applied when rule matches. Required. Known values
     are: "Allow", "Block", "Log", and "Redirect".
    :vartype action: Union[str, "ActionType"]
    :ivar rate_limit_threshold: Defines rate limit threshold. Required.
    :vartype rate_limit_threshold: int
    :ivar rate_limit_duration_in_minutes: Defines rate limit duration. Default is 1 minute.
     Required.
    :vartype rate_limit_duration_in_minutes: int
    """

    rateLimitThreshold: Required[int]
    """Defines rate limit threshold. Required."""
    rateLimitDurationInMinutes: Required[int]
    """Defines rate limit duration. Default is 1 minute. Required."""


class RateLimitRuleList(TypedDict, total=False):
    """Defines contents of rate limit rules.

    :ivar rules: List of rules.
    :vartype rules: list["RateLimitRule"]
    """

    rules: list["RateLimitRule"]
    """List of rules."""


class RemoteAddressMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RemoteAddress match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "IPMatch",
     and "GeoMatch".
    :vartype operator: Union[str, "RemoteAddressOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: Match values to match against. The operator will apply to each value in
     here with OR semantics. If any of them match the variable with the given operator this match
     condition is considered a match.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_REMOTE_ADDRESS_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REMOTE_ADDRESS_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "RemoteAddressOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"IPMatch\", and
     \"GeoMatch\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """Match values to match against. The operator will apply to each value in here with OR semantics.
     If any of them match the variable with the given operator this match condition is considered a
     match."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REMOTE_ADDRESS_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REMOTE_ADDRESS_CONDITION_PARAMETERS."""


class RequestBodyMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RequestBody match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "RequestBodyOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_REQUEST_BODY_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_BODY_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "RequestBodyOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_BODY_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REQUEST_BODY_CONDITION_PARAMETERS."""


class RequestHeaderMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RequestHeader match conditions.

    :ivar selector: Name of Header to be matched.
    :vartype selector: str
    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "RequestHeaderOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_REQUEST_HEADER_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_HEADER_CONDITION_PARAMETERS]
    """

    selector: str
    """Name of Header to be matched."""
    operator: Required[Union[str, "RequestHeaderOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_HEADER_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REQUEST_HEADER_CONDITION_PARAMETERS."""


class RequestMethodMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RequestMethod match conditions.

    :ivar operator: Describes operator to be matched. Required. "Equal"
    :vartype operator: Union[str, "RequestMethodOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[Union[str, "RequestMethodMatchConditionParametersMatchValuesItem"]]
    :ivar type_name: Required. DELIVERY_RULE_REQUEST_METHOD_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_METHOD_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "RequestMethodOperator"]]
    """Describes operator to be matched. Required. \"Equal\""""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    matchValues: list[Union[str, "RequestMethodMatchConditionParametersMatchValuesItem"]]
    """The match value for the condition of the delivery rule."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_METHOD_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REQUEST_METHOD_CONDITION_PARAMETERS."""


class RequestSchemeMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RequestScheme match conditions.

    :ivar operator: Describes operator to be matched. Required. "Equal"
    :vartype operator: Union[str, "RequestSchemeMatchConditionParametersOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[Union[str, "RequestSchemeMatchConditionParametersMatchValuesItem"]]
    :ivar type_name: Required. DELIVERY_RULE_REQUEST_SCHEME_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_SCHEME_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "RequestSchemeMatchConditionParametersOperator"]]
    """Describes operator to be matched. Required. \"Equal\""""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    matchValues: list[Union[str, "RequestSchemeMatchConditionParametersMatchValuesItem"]]
    """The match value for the condition of the delivery rule."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_SCHEME_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REQUEST_SCHEME_CONDITION_PARAMETERS."""


class RequestUriMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for RequestUri match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "RequestUriOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_REQUEST_URI_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_URI_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "RequestUriOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_REQUEST_URI_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_REQUEST_URI_CONDITION_PARAMETERS."""


class ResourceReference(TypedDict, total=False):
    """Reference to another resource.

    :ivar id: Resource ID.
    :vartype id: str
    """

    id: str
    """Resource ID."""


class ResponseBasedOriginErrorDetectionParameters(TypedDict, total=False):  # pylint: disable=name-too-long
    """The JSON object that contains the properties to determine origin health using real
    requests/responses.

    :ivar response_based_detected_error_types: Type of response errors for real user requests for
     which origin will be deemed unhealthy. Known values are: "None", "TcpErrorsOnly", and
     "TcpAndHttpErrors".
    :vartype response_based_detected_error_types: Union[str, "ResponseBasedDetectedErrorTypes"]
    :ivar response_based_failover_threshold_percentage: The percentage of failed requests in the
     sample where failover should trigger.
    :vartype response_based_failover_threshold_percentage: int
    :ivar http_error_ranges: The list of Http status code ranges that are considered as server
     errors for origin and it is marked as unhealthy.
    :vartype http_error_ranges: list["HttpErrorRangeParameters"]
    """

    responseBasedDetectedErrorTypes: Union[str, "ResponseBasedDetectedErrorTypes"]
    """Type of response errors for real user requests for which origin will be deemed unhealthy. Known
     values are: \"None\", \"TcpErrorsOnly\", and \"TcpAndHttpErrors\"."""
    responseBasedFailoverThresholdPercentage: int
    """The percentage of failed requests in the sample where failover should trigger."""
    httpErrorRanges: list["HttpErrorRangeParameters"]
    """The list of Http status code ranges that are considered as server errors for origin and it is
     marked as unhealthy."""


class Route(ProxyResource):
    """Friendly Routes name mapping to the any Routes or secret related information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the Routes to create.
    :vartype properties: "RouteProperties"
    """

    properties: "RouteProperties"
    """The JSON object that contains the properties of the Routes to create."""


class RouteConfigurationOverrideActionParameters(TypedDict, total=False):  # pylint: disable=name-too-long
    """Defines the parameters for the route configuration override action.

    :ivar origin_group_override: A reference to the origin group override configuration. Leave
     empty to use the default origin group on route.
    :vartype origin_group_override: "OriginGroupOverride"
    :ivar cache_configuration: The caching configuration associated with this rule. To disable
     caching, do not provide a cacheConfiguration object.
    :vartype cache_configuration: "CacheConfiguration"
    :ivar type_name: Required. DELIVERY_RULE_ROUTE_CONFIGURATION_OVERRIDE_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_ROUTE_CONFIGURATION_OVERRIDE_ACTION_PARAMETERS]
    """

    originGroupOverride: "OriginGroupOverride"
    """A reference to the origin group override configuration. Leave empty to use the default origin
     group on route."""
    cacheConfiguration: "CacheConfiguration"
    """The caching configuration associated with this rule. To disable caching, do not provide a
     cacheConfiguration object."""
    typeName: Required[
        Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_ROUTE_CONFIGURATION_OVERRIDE_ACTION_PARAMETERS]
    ]
    """Required. DELIVERY_RULE_ROUTE_CONFIGURATION_OVERRIDE_ACTION_PARAMETERS."""


class RouteProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the Routes to create.

    :ivar endpoint_name: The name of the endpoint which holds the route.
    :vartype endpoint_name: str
    :ivar custom_domains: Domains referenced by this endpoint.
    :vartype custom_domains: list["ActivatedResourceReference"]
    :ivar origin_group: A reference to the origin group.
    :vartype origin_group: "ResourceReference"
    :ivar origin_path: A directory path on the origin that AzureFrontDoor can use to retrieve
     content from, e.g. contoso.cloudapp.net/originpath.
    :vartype origin_path: str
    :ivar rule_sets: rule sets referenced by this endpoint.
    :vartype rule_sets: list["ResourceReference"]
    :ivar supported_protocols: List of supported protocols for this route.
    :vartype supported_protocols: list[Union[str, "AFDEndpointProtocols"]]
    :ivar patterns_to_match: The route patterns of the rule.
    :vartype patterns_to_match: list[str]
    :ivar cache_configuration: The caching configuration for this route. To disable caching, do not
     provide a cacheConfiguration object.
    :vartype cache_configuration: "AfdRouteCacheConfiguration"
    :ivar forwarding_protocol: Protocol this rule will use when forwarding traffic to backends.
     Known values are: "HttpOnly", "HttpsOnly", and "MatchRequest".
    :vartype forwarding_protocol: Union[str, "ForwardingProtocol"]
    :ivar link_to_default_domain: whether this route will be linked to the default endpoint domain.
     Known values are: "Enabled" and "Disabled".
    :vartype link_to_default_domain: Union[str, "LinkToDefaultDomain"]
    :ivar https_redirect: Whether to automatically redirect HTTP traffic to HTTPS traffic. Note
     that this is a easy way to set up this rule and it will be the first rule that gets executed.
     Known values are: "Enabled" and "Disabled".
    :vartype https_redirect: Union[str, "HttpsRedirect"]
    :ivar enabled_state: Whether to enable use of this rule. Permitted values are 'Enabled' or
     'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    """

    endpointName: str
    """The name of the endpoint which holds the route."""
    customDomains: list["ActivatedResourceReference"]
    """Domains referenced by this endpoint."""
    originGroup: "ResourceReference"
    """A reference to the origin group."""
    originPath: str
    """A directory path on the origin that AzureFrontDoor can use to retrieve content from, e.g.
     contoso.cloudapp.net/originpath."""
    ruleSets: list["ResourceReference"]
    """rule sets referenced by this endpoint."""
    supportedProtocols: list[Union[str, "AFDEndpointProtocols"]]
    """List of supported protocols for this route."""
    patternsToMatch: list[str]
    """The route patterns of the rule."""
    cacheConfiguration: "AfdRouteCacheConfiguration"
    """The caching configuration for this route. To disable caching, do not provide a
     cacheConfiguration object."""
    forwardingProtocol: Union[str, "ForwardingProtocol"]
    """Protocol this rule will use when forwarding traffic to backends. Known values are:
     \"HttpOnly\", \"HttpsOnly\", and \"MatchRequest\"."""
    linkToDefaultDomain: Union[str, "LinkToDefaultDomain"]
    """whether this route will be linked to the default endpoint domain. Known values are: \"Enabled\"
     and \"Disabled\"."""
    httpsRedirect: Union[str, "HttpsRedirect"]
    """Whether to automatically redirect HTTP traffic to HTTPS traffic. Note that this is a easy way
     to set up this rule and it will be the first rule that gets executed. Known values are:
     \"Enabled\" and \"Disabled\"."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable use of this rule. Permitted values are 'Enabled' or 'Disabled'. Known values
     are: \"Enabled\" and \"Disabled\"."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""


class RouteUpdateParameters(TypedDict, total=False):
    """The domain JSON object required for domain creation or update.

    :ivar properties: The JSON object that contains the properties of the domain to create.
    :vartype properties: "RouteUpdatePropertiesParameters"
    """

    properties: "RouteUpdatePropertiesParameters"
    """The JSON object that contains the properties of the domain to create."""


class RouteUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the domain to create.

    :ivar endpoint_name: The name of the endpoint which holds the route.
    :vartype endpoint_name: str
    :ivar custom_domains: Domains referenced by this endpoint.
    :vartype custom_domains: list["ActivatedResourceReference"]
    :ivar origin_group: A reference to the origin group.
    :vartype origin_group: "ResourceReference"
    :ivar origin_path: A directory path on the origin that AzureFrontDoor can use to retrieve
     content from, e.g. contoso.cloudapp.net/originpath.
    :vartype origin_path: str
    :ivar rule_sets: rule sets referenced by this endpoint.
    :vartype rule_sets: list["ResourceReference"]
    :ivar supported_protocols: List of supported protocols for this route.
    :vartype supported_protocols: list[Union[str, "AFDEndpointProtocols"]]
    :ivar patterns_to_match: The route patterns of the rule.
    :vartype patterns_to_match: list[str]
    :ivar cache_configuration: The caching configuration for this route. To disable caching, do not
     provide a cacheConfiguration object.
    :vartype cache_configuration: "AfdRouteCacheConfiguration"
    :ivar forwarding_protocol: Protocol this rule will use when forwarding traffic to backends.
     Known values are: "HttpOnly", "HttpsOnly", and "MatchRequest".
    :vartype forwarding_protocol: Union[str, "ForwardingProtocol"]
    :ivar link_to_default_domain: whether this route will be linked to the default endpoint domain.
     Known values are: "Enabled" and "Disabled".
    :vartype link_to_default_domain: Union[str, "LinkToDefaultDomain"]
    :ivar https_redirect: Whether to automatically redirect HTTP traffic to HTTPS traffic. Note
     that this is a easy way to set up this rule and it will be the first rule that gets executed.
     Known values are: "Enabled" and "Disabled".
    :vartype https_redirect: Union[str, "HttpsRedirect"]
    :ivar enabled_state: Whether to enable use of this rule. Permitted values are 'Enabled' or
     'Disabled'. Known values are: "Enabled" and "Disabled".
    :vartype enabled_state: Union[str, "EnabledState"]
    """

    endpointName: str
    """The name of the endpoint which holds the route."""
    customDomains: list["ActivatedResourceReference"]
    """Domains referenced by this endpoint."""
    originGroup: "ResourceReference"
    """A reference to the origin group."""
    originPath: str
    """A directory path on the origin that AzureFrontDoor can use to retrieve content from, e.g.
     contoso.cloudapp.net/originpath."""
    ruleSets: list["ResourceReference"]
    """rule sets referenced by this endpoint."""
    supportedProtocols: list[Union[str, "AFDEndpointProtocols"]]
    """List of supported protocols for this route."""
    patternsToMatch: list[str]
    """The route patterns of the rule."""
    cacheConfiguration: "AfdRouteCacheConfiguration"
    """The caching configuration for this route. To disable caching, do not provide a
     cacheConfiguration object."""
    forwardingProtocol: Union[str, "ForwardingProtocol"]
    """Protocol this rule will use when forwarding traffic to backends. Known values are:
     \"HttpOnly\", \"HttpsOnly\", and \"MatchRequest\"."""
    linkToDefaultDomain: Union[str, "LinkToDefaultDomain"]
    """whether this route will be linked to the default endpoint domain. Known values are: \"Enabled\"
     and \"Disabled\"."""
    httpsRedirect: Union[str, "HttpsRedirect"]
    """Whether to automatically redirect HTTP traffic to HTTPS traffic. Note that this is a easy way
     to set up this rule and it will be the first rule that gets executed. Known values are:
     \"Enabled\" and \"Disabled\"."""
    enabledState: Union[str, "EnabledState"]
    """Whether to enable use of this rule. Permitted values are 'Enabled' or 'Disabled'. Known values
     are: \"Enabled\" and \"Disabled\"."""


class Rule(ProxyResource):
    """Friendly Rules name mapping to the any Rules or secret related information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the Rules to create.
    :vartype properties: "RuleProperties"
    """

    properties: "RuleProperties"
    """The JSON object that contains the properties of the Rules to create."""


class RuleProperties(TypedDict, total=False):
    """The JSON object that contains the properties of the Rules to create.

    :ivar rule_set_name: The name of the rule set containing the rule.
    :vartype rule_set_name: str
    :ivar order: The order in which the rules are applied for the endpoint. Possible values
     {0,1,2,3,………}. A rule with a lesser order will be applied before a rule with a greater order.
     Rule with order 0 is a special rule. It does not require any condition and actions listed in it
     will always be applied.
    :vartype order: int
    :ivar conditions: A list of conditions that must be matched for the actions to be executed.
    :vartype conditions: list["DeliveryRuleCondition"]
    :ivar actions: A list of actions that are executed when all the conditions of a rule are
     satisfied.
    :vartype actions: list["DeliveryRuleAction"]
    :ivar match_processing_behavior: If this rule is a match should the rules engine continue
     running the remaining rules or stop. If not present, defaults to Continue. Known values are:
     "Continue" and "Stop".
    :vartype match_processing_behavior: Union[str, "MatchProcessingBehavior"]
    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    """

    ruleSetName: str
    """The name of the rule set containing the rule."""
    order: int
    """The order in which the rules are applied for the endpoint. Possible values {0,1,2,3,………}. A
     rule with a lesser order will be applied before a rule with a greater order. Rule with order 0
     is a special rule. It does not require any condition and actions listed in it will always be
     applied."""
    conditions: list["DeliveryRuleCondition"]
    """A list of conditions that must be matched for the actions to be executed."""
    actions: list["DeliveryRuleAction"]
    """A list of actions that are executed when all the conditions of a rule are satisfied."""
    matchProcessingBehavior: Union[str, "MatchProcessingBehavior"]
    """If this rule is a match should the rules engine continue running the remaining rules or stop.
     If not present, defaults to Continue. Known values are: \"Continue\" and \"Stop\"."""
    provisioningState: Union[str, "AfdProvisioningState"]
    """Provisioning status. Known values are: \"Succeeded\", \"Failed\", \"Updating\", \"Deleting\",
     and \"Creating\"."""
    deploymentStatus: Union[str, "DeploymentStatus"]
    """Known values are: \"NotStarted\", \"InProgress\", \"Succeeded\", and \"Failed\"."""


class RuleSet(ProxyResource):
    """Friendly RuleSet name mapping to the any RuleSet or secret related information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the Rule Set to create.
    :vartype properties: "RuleSetProperties"
    """

    properties: "RuleSetProperties"
    """The JSON object that contains the properties of the Rule Set to create."""


class RuleSetProperties(AFDStateProperties):
    """The JSON object that contains the properties of the Rule Set to create.

    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    :ivar profile_name: The name of the profile which holds the rule set.
    :vartype profile_name: str
    :ivar batch_mode: Indicates whether rule set is in batch mode. When batch mode is enabled,
     rules will be processed in a batch along with the rule set. When batch mode is disabled, rules
     would need to be processed independently. This property can only be set during rule set
     creation and cannot be updated later. For switching modes, a new rule set needs to be created
     with the desired mode and rules need to be migrated to the new rule set.
    :vartype batch_mode: bool
    :ivar rules: A list of rules that are part of this rule set provided the rule set is in batch
     mode. This property will be ignored if the rule set is not in batch mode.
    :vartype rules: list["BatchRuleProperties"]
    """

    profileName: str
    """The name of the profile which holds the rule set."""
    batchMode: bool
    """Indicates whether rule set is in batch mode. When batch mode is enabled, rules will be
     processed in a batch along with the rule set. When batch mode is disabled, rules would need to
     be processed independently. This property can only be set during rule set creation and cannot
     be updated later. For switching modes, a new rule set needs to be created with the desired mode
     and rules need to be migrated to the new rule set."""
    rules: list["BatchRuleProperties"]
    """A list of rules that are part of this rule set provided the rule set is in batch mode. This
     property will be ignored if the rule set is not in batch mode."""


class RuleUpdateParameters(TypedDict, total=False):
    """The domain JSON object required for domain creation or update.

    :ivar properties: The JSON object that contains the properties of the rule to update.
    :vartype properties: "RuleUpdatePropertiesParameters"
    """

    properties: "RuleUpdatePropertiesParameters"
    """The JSON object that contains the properties of the rule to update."""


class RuleUpdatePropertiesParameters(TypedDict, total=False):
    """The JSON object that contains the properties of the rule to update.

    :ivar rule_set_name: The name of the rule set containing the rule.
    :vartype rule_set_name: str
    :ivar order: The order in which the rules are applied for the endpoint. Possible values
     {0,1,2,3,………}. A rule with a lesser order will be applied before a rule with a greater order.
     Rule with order 0 is a special rule. It does not require any condition and actions listed in it
     will always be applied.
    :vartype order: int
    :ivar conditions: A list of conditions that must be matched for the actions to be executed.
    :vartype conditions: list["DeliveryRuleCondition"]
    :ivar actions: A list of actions that are executed when all the conditions of a rule are
     satisfied.
    :vartype actions: list["DeliveryRuleAction"]
    :ivar match_processing_behavior: If this rule is a match should the rules engine continue
     running the remaining rules or stop. If not present, defaults to Continue. Known values are:
     "Continue" and "Stop".
    :vartype match_processing_behavior: Union[str, "MatchProcessingBehavior"]
    """

    ruleSetName: str
    """The name of the rule set containing the rule."""
    order: int
    """The order in which the rules are applied for the endpoint. Possible values {0,1,2,3,………}. A
     rule with a lesser order will be applied before a rule with a greater order. Rule with order 0
     is a special rule. It does not require any condition and actions listed in it will always be
     applied."""
    conditions: list["DeliveryRuleCondition"]
    """A list of conditions that must be matched for the actions to be executed."""
    actions: list["DeliveryRuleAction"]
    """A list of actions that are executed when all the conditions of a rule are satisfied."""
    matchProcessingBehavior: Union[str, "MatchProcessingBehavior"]
    """If this rule is a match should the rules engine continue running the remaining rules or stop.
     If not present, defaults to Continue. Known values are: \"Continue\" and \"Stop\"."""


class Secret(ProxyResource):
    """Friendly Secret name mapping to the any Secret or secret related information.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The JSON object that contains the properties of the Secret to create.
    :vartype properties: "SecretProperties"
    """

    properties: "SecretProperties"
    """The JSON object that contains the properties of the Secret to create."""


class SecretProperties(AFDStateProperties):
    """The JSON object that contains the properties of the Secret to create.

    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    :ivar profile_name: The name of the profile which holds the secret.
    :vartype profile_name: str
    :ivar parameters: object which contains secret parameters.
    :vartype parameters: "SecretParameters"
    """

    profileName: str
    """The name of the profile which holds the secret."""
    parameters: "SecretParameters"
    """object which contains secret parameters."""


class SecurityPolicy(ProxyResource):
    """SecurityPolicy association for AzureFrontDoor profile.

    :ivar id: Fully qualified resource ID for the resource. Ex -
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}.
    :vartype id: str
    :ivar name: The name of the resource.
    :vartype name: str
    :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or
     "Microsoft.Storage/storageAccounts".
    :vartype type: str
    :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy
     information.
    :vartype system_data: "SystemData"
    :ivar properties: The json object that contains properties required to create a security
     policy.
    :vartype properties: "SecurityPolicyProperties"
    """

    properties: "SecurityPolicyProperties"
    """The json object that contains properties required to create a security policy."""


class SecurityPolicyProperties(AFDStateProperties):
    """The json object that contains properties required to create a security policy.

    :ivar provisioning_state: Provisioning status. Known values are: "Succeeded", "Failed",
     "Updating", "Deleting", and "Creating".
    :vartype provisioning_state: Union[str, "AfdProvisioningState"]
    :ivar deployment_status: Known values are: "NotStarted", "InProgress", "Succeeded", and
     "Failed".
    :vartype deployment_status: Union[str, "DeploymentStatus"]
    :ivar profile_name: The name of the profile which holds the security policy.
    :vartype profile_name: str
    :ivar parameters: object which contains security policy parameters.
    :vartype parameters: "SecurityPolicyPropertiesParameters"
    """

    profileName: str
    """The name of the profile which holds the security policy."""
    parameters: "SecurityPolicyPropertiesParameters"
    """object which contains security policy parameters."""


class SecurityPolicyUpdateParameters(TypedDict, total=False):
    """The JSON object containing security policy update parameters.

    :ivar properties: The json object that contains properties required to update a security
     policy.
    :vartype properties: "SecurityPolicyUpdateProperties"
    """

    properties: "SecurityPolicyUpdateProperties"
    """The json object that contains properties required to update a security policy."""


class SecurityPolicyUpdateProperties(TypedDict, total=False):
    """The json object that contains properties required to update a security policy.

    :ivar parameters: object which contains security policy parameters.
    :vartype parameters: "SecurityPolicyPropertiesParameters"
    """

    parameters: "SecurityPolicyPropertiesParameters"
    """object which contains security policy parameters."""


class SecurityPolicyWebApplicationFirewallAssociation(TypedDict, total=False):  # pylint: disable=name-too-long
    """settings for security policy patterns to match.

    :ivar domains: List of domains.
    :vartype domains: list["ActivatedResourceReference"]
    :ivar patterns_to_match: List of paths.
    :vartype patterns_to_match: list[str]
    """

    domains: list["ActivatedResourceReference"]
    """List of domains."""
    patternsToMatch: list[str]
    """List of paths."""


class SecurityPolicyWebApplicationFirewallParameters(TypedDict, total=False):  # pylint: disable=name-too-long
    """The json object containing security policy waf parameters.

    :ivar waf_policy: Resource ID.
    :vartype waf_policy: "ResourceReference"
    :ivar associations: Waf associations.
    :vartype associations: list["SecurityPolicyWebApplicationFirewallAssociation"]
    :ivar type: The type of the Security policy to create. Required. WEB_APPLICATION_FIREWALL.
    :vartype type: Literal[SecurityPolicyType.WEB_APPLICATION_FIREWALL]
    """

    wafPolicy: "ResourceReference"
    """Resource ID."""
    associations: list["SecurityPolicyWebApplicationFirewallAssociation"]
    """Waf associations."""
    type: Required[Literal[SecurityPolicyType.WEB_APPLICATION_FIREWALL]]
    """The type of the Security policy to create. Required. WEB_APPLICATION_FIREWALL."""


class ServerPortMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for ServerPort match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "ServerPortOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_SERVER_PORT_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SERVER_PORT_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "ServerPortOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SERVER_PORT_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_SERVER_PORT_CONDITION_PARAMETERS."""


class SharedPrivateLinkResourceProperties(TypedDict, total=False):
    """Describes the properties of an existing Shared Private Link Resource to use when connecting to
    a private origin.

    :ivar private_link: The resource id of the resource the shared private link resource is for.
    :vartype private_link: "ResourceReference"
    :ivar private_link_location: The location of the shared private link resource.
    :vartype private_link_location: str
    :ivar group_id: The group id from the provider of resource the shared private link resource is
     for.
    :vartype group_id: str
    :ivar request_message: The request message for requesting approval of the shared private link
     resource.
    :vartype request_message: str
    :ivar status: Status of the shared private link resource. Can be Pending, Approved, Rejected,
     Disconnected, or Timeout. Known values are: "Pending", "Approved", "Rejected", "Disconnected",
     and "Timeout".
    :vartype status: Union[str, "SharedPrivateLinkResourceStatus"]
    """

    privateLink: "ResourceReference"
    """The resource id of the resource the shared private link resource is for."""
    privateLinkLocation: str
    """The location of the shared private link resource."""
    groupId: str
    """The group id from the provider of resource the shared private link resource is for."""
    requestMessage: str
    """The request message for requesting approval of the shared private link resource."""
    status: Union[str, "SharedPrivateLinkResourceStatus"]
    """Status of the shared private link resource. Can be Pending, Approved, Rejected, Disconnected,
     or Timeout. Known values are: \"Pending\", \"Approved\", \"Rejected\", \"Disconnected\", and
     \"Timeout\"."""


class Sku(TypedDict, total=False):
    """Standard_Verizon = The SKU name for a Standard Verizon CDN profile. Premium_Verizon = The SKU
    name for a Premium Verizon CDN profile. Custom_Verizon = The SKU name for a Custom Verizon CDN
    profile. Standard_Akamai = The SKU name for an Akamai CDN profile. Standard_ChinaCdn = The SKU
    name for a China CDN profile for VOD, Web and download scenarios using GB based billing model.
    Standard_Microsoft = The SKU name for a Standard Microsoft CDN profile. Standard_AzureFrontDoor
    =  The SKU name for an Azure Front Door Standard profile. Premium_AzureFrontDoor = The SKU name
    for an Azure Front Door Premium profile. Standard_955BandWidth_ChinaCdn = The SKU name for a
    China CDN profile for VOD, Web and download scenarios using 95-5 peak bandwidth billing model.
    Standard_AvgBandWidth_ChinaCdn = The SKU name for a China CDN profile for VOD, Web and download
    scenarios using monthly average peak bandwidth billing model. StandardPlus_ChinaCdn = The SKU
    name for a China CDN profile for live-streaming using GB based billing model.
    StandardPlus_955BandWidth_ChinaCdn = The SKU name for a China CDN live-streaming profile using
    95-5 peak bandwidth billing model. StandardPlus_AvgBandWidth_ChinaCdn = The SKU name for a
    China CDN live-streaming profile using monthly average peak bandwidth billing model.

    :ivar name: Name of the pricing tier. Known values are: "Standard_Verizon", "Premium_Verizon",
     "Custom_Verizon", "Standard_Akamai", "Standard_ChinaCdn", "Standard_Microsoft",
     "Standard_AzureFrontDoor", "Premium_AzureFrontDoor", "Standard_955BandWidth_ChinaCdn",
     "Standard_AvgBandWidth_ChinaCdn", "StandardPlus_ChinaCdn",
     "StandardPlus_955BandWidth_ChinaCdn", and "StandardPlus_AvgBandWidth_ChinaCdn".
    :vartype name: Union[str, "SkuName"]
    """

    name: Union[str, "SkuName"]
    """Name of the pricing tier. Known values are: \"Standard_Verizon\", \"Premium_Verizon\",
     \"Custom_Verizon\", \"Standard_Akamai\", \"Standard_ChinaCdn\", \"Standard_Microsoft\",
     \"Standard_AzureFrontDoor\", \"Premium_AzureFrontDoor\", \"Standard_955BandWidth_ChinaCdn\",
     \"Standard_AvgBandWidth_ChinaCdn\", \"StandardPlus_ChinaCdn\",
     \"StandardPlus_955BandWidth_ChinaCdn\", and \"StandardPlus_AvgBandWidth_ChinaCdn\"."""


class SocketAddrMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for SocketAddress match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any" and
     "IPMatch".
    :vartype operator: Union[str, "SocketAddrOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_SOCKET_ADDR_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SOCKET_ADDR_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "SocketAddrOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\" and \"IPMatch\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SOCKET_ADDR_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_SOCKET_ADDR_CONDITION_PARAMETERS."""


class SslProtocolMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for SslProtocol match conditions.

    :ivar operator: Describes operator to be matched. Required. "Equal"
    :vartype operator: Union[str, "SslProtocolOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[Union[str, "SslProtocol"]]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_SSL_PROTOCOL_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SSL_PROTOCOL_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "SslProtocolOperator"]]
    """Describes operator to be matched. Required. \"Equal\""""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[Union[str, "SslProtocol"]]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_SSL_PROTOCOL_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_SSL_PROTOCOL_CONDITION_PARAMETERS."""


class SystemData(TypedDict, total=False):
    """Metadata pertaining to creation and last modification of the resource.

    :ivar created_by: The identity that created the resource.
    :vartype created_by: str
    :ivar created_by_type: The type of identity that created the resource. Known values are:
     "User", "Application", "ManagedIdentity", and "Key".
    :vartype created_by_type: Union[str, "CreatedByType"]
    :ivar created_at: The timestamp of resource creation (UTC).
    :vartype created_at: str
    :ivar last_modified_by: The identity that last modified the resource.
    :vartype last_modified_by: str
    :ivar last_modified_by_type: The type of identity that last modified the resource. Known values
     are: "User", "Application", "ManagedIdentity", and "Key".
    :vartype last_modified_by_type: Union[str, "CreatedByType"]
    :ivar last_modified_at: The timestamp of resource last modification (UTC).
    :vartype last_modified_at: str
    """

    createdBy: str
    """The identity that created the resource."""
    createdByType: Union[str, "CreatedByType"]
    """The type of identity that created the resource. Known values are: \"User\", \"Application\",
     \"ManagedIdentity\", and \"Key\"."""
    createdAt: str
    """The timestamp of resource creation (UTC)."""
    lastModifiedBy: str
    """The identity that last modified the resource."""
    lastModifiedByType: Union[str, "CreatedByType"]
    """The type of identity that last modified the resource. Known values are: \"User\",
     \"Application\", \"ManagedIdentity\", and \"Key\"."""
    lastModifiedAt: str
    """The timestamp of resource last modification (UTC)."""


class UrlFileExtensionMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for UrlFileExtension match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "UrlFileExtensionOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_URL_FILE_EXTENSION_MATCH_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_FILE_EXTENSION_MATCH_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "UrlFileExtensionOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[
        Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_FILE_EXTENSION_MATCH_CONDITION_PARAMETERS]
    ]
    """Required. DELIVERY_RULE_URL_FILE_EXTENSION_MATCH_CONDITION_PARAMETERS."""


class UrlFileNameMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for UrlFilename match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", and "RegEx".
    :vartype operator: Union[str, "UrlFileNameOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_URL_FILENAME_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_FILENAME_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "UrlFileNameOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_FILENAME_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_URL_FILENAME_CONDITION_PARAMETERS."""


class UrlPathMatchConditionParameters(TypedDict, total=False):
    """Defines the parameters for UrlPath match conditions.

    :ivar operator: Describes operator to be matched. Required. Known values are: "Any", "Equal",
     "Contains", "BeginsWith", "EndsWith", "LessThan", "LessThanOrEqual", "GreaterThan",
     "GreaterThanOrEqual", "Wildcard", and "RegEx".
    :vartype operator: Union[str, "UrlPathOperator"]
    :ivar negate_condition: Describes if this is negate condition or not.
    :vartype negate_condition: bool
    :ivar match_values: The match value for the condition of the delivery rule.
    :vartype match_values: list[str]
    :ivar transforms: List of transforms.
    :vartype transforms: list[Union[str, "Transform"]]
    :ivar type_name: Required. DELIVERY_RULE_URL_PATH_MATCH_CONDITION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_PATH_MATCH_CONDITION_PARAMETERS]
    """

    operator: Required[Union[str, "UrlPathOperator"]]
    """Describes operator to be matched. Required. Known values are: \"Any\", \"Equal\", \"Contains\",
     \"BeginsWith\", \"EndsWith\", \"LessThan\", \"LessThanOrEqual\", \"GreaterThan\",
     \"GreaterThanOrEqual\", \"Wildcard\", and \"RegEx\"."""
    negateCondition: bool
    """Describes if this is negate condition or not."""
    matchValues: list[str]
    """The match value for the condition of the delivery rule."""
    transforms: list[Union[str, "Transform"]]
    """List of transforms."""
    typeName: Required[Literal[DeliveryRuleConditionParametersType.DELIVERY_RULE_URL_PATH_MATCH_CONDITION_PARAMETERS]]
    """Required. DELIVERY_RULE_URL_PATH_MATCH_CONDITION_PARAMETERS."""


class UrlRedirectAction(TypedDict, total=False):
    """Defines the url redirect action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "UrlRedirectActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. URL_REDIRECT.
    :vartype name: Literal[DeliveryRuleActionEnum.URL_REDIRECT]
    """

    parameters: Required["UrlRedirectActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.URL_REDIRECT]]
    """The name of the action for the delivery rule. Required. URL_REDIRECT."""


class UrlRedirectActionParameters(TypedDict, total=False):
    """Defines the parameters for the url redirect action.

    :ivar redirect_type: The redirect type the rule will use when redirecting traffic. Required.
     Known values are: "Moved", "Found", "TemporaryRedirect", and "PermanentRedirect".
    :vartype redirect_type: Union[str, "RedirectType"]
    :ivar destination_protocol: Protocol to use for the redirect. The default value is
     MatchRequest. Known values are: "MatchRequest", "Http", and "Https".
    :vartype destination_protocol: Union[str, "DestinationProtocol"]
    :ivar custom_path: The full path to redirect. Path cannot be empty and must start with /. Leave
     empty to use the incoming path as destination path.
    :vartype custom_path: str
    :ivar custom_hostname: Host to redirect. Leave empty to use the incoming host as the
     destination host.
    :vartype custom_hostname: str
    :ivar custom_query_string: The set of query strings to be placed in the redirect URL. Setting
     this value would replace any existing query string; leave empty to preserve the incoming query
     string. Query string must be in <key>=<value> format. ? and & will be added automatically so do
     not include them.
    :vartype custom_query_string: str
    :ivar custom_fragment: Fragment to add to the redirect URL. Fragment is the part of the URL
     that comes after #. Do not include the #.
    :vartype custom_fragment: str
    :ivar type_name: Required. DELIVERY_RULE_URL_REDIRECT_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_REDIRECT_ACTION_PARAMETERS]
    """

    redirectType: Required[Union[str, "RedirectType"]]
    """The redirect type the rule will use when redirecting traffic. Required. Known values are:
     \"Moved\", \"Found\", \"TemporaryRedirect\", and \"PermanentRedirect\"."""
    destinationProtocol: Union[str, "DestinationProtocol"]
    """Protocol to use for the redirect. The default value is MatchRequest. Known values are:
     \"MatchRequest\", \"Http\", and \"Https\"."""
    customPath: str
    """The full path to redirect. Path cannot be empty and must start with /. Leave empty to use the
     incoming path as destination path."""
    customHostname: str
    """Host to redirect. Leave empty to use the incoming host as the destination host."""
    customQueryString: str
    """The set of query strings to be placed in the redirect URL. Setting this value would replace any
     existing query string; leave empty to preserve the incoming query string. Query string must be
     in <key>=<value> format. ? and & will be added automatically so do not include them."""
    customFragment: str
    """Fragment to add to the redirect URL. Fragment is the part of the URL that comes after #. Do not
     include the #."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_REDIRECT_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_URL_REDIRECT_ACTION_PARAMETERS."""


class UrlRewriteAction(TypedDict, total=False):
    """Defines the url rewrite action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "UrlRewriteActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. URL_REWRITE.
    :vartype name: Literal[DeliveryRuleActionEnum.URL_REWRITE]
    """

    parameters: Required["UrlRewriteActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.URL_REWRITE]]
    """The name of the action for the delivery rule. Required. URL_REWRITE."""


class UrlRewriteActionParameters(TypedDict, total=False):
    """Defines the parameters for the url rewrite action.

    :ivar source_pattern: define a request URI pattern that identifies the type of requests that
     may be rewritten. If value is blank, all strings are matched. Required.
    :vartype source_pattern: str
    :ivar destination: Define the relative URL to which the above requests will be rewritten by.
     Required.
    :vartype destination: str
    :ivar preserve_unmatched_path: Whether to preserve unmatched path. Default value is true.
    :vartype preserve_unmatched_path: bool
    :ivar type_name: Required. DELIVERY_RULE_URL_REWRITE_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_REWRITE_ACTION_PARAMETERS]
    """

    sourcePattern: Required[str]
    """define a request URI pattern that identifies the type of requests that may be rewritten. If
     value is blank, all strings are matched. Required."""
    destination: Required[str]
    """Define the relative URL to which the above requests will be rewritten by. Required."""
    preserveUnmatchedPath: bool
    """Whether to preserve unmatched path. Default value is true."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_REWRITE_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_URL_REWRITE_ACTION_PARAMETERS."""


class UrlSigningAction(TypedDict, total=False):
    """Defines the url signing action for the delivery rule.

    :ivar parameters: Defines the parameters for the action. Required.
    :vartype parameters: "UrlSigningActionParameters"
    :ivar name: The name of the action for the delivery rule. Required. URL_SIGNING.
    :vartype name: Literal[DeliveryRuleActionEnum.URL_SIGNING]
    """

    parameters: Required["UrlSigningActionParameters"]
    """Defines the parameters for the action. Required."""
    name: Required[Literal[DeliveryRuleActionEnum.URL_SIGNING]]
    """The name of the action for the delivery rule. Required. URL_SIGNING."""


class UrlSigningActionParameters(TypedDict, total=False):
    """Defines the parameters for the Url Signing action.

    :ivar algorithm: Algorithm to use for URL signing. "SHA256"
    :vartype algorithm: Union[str, "Algorithm"]
    :ivar parameter_name_override: Defines which query string parameters in the url to be
     considered for expires, key id etc.
    :vartype parameter_name_override: list["UrlSigningParamIdentifier"]
    :ivar type_name: Required. DELIVERY_RULE_URL_SIGNING_ACTION_PARAMETERS.
    :vartype type_name:
     Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_SIGNING_ACTION_PARAMETERS]
    """

    algorithm: Union[str, "Algorithm"]
    """Algorithm to use for URL signing. \"SHA256\""""
    parameterNameOverride: list["UrlSigningParamIdentifier"]
    """Defines which query string parameters in the url to be considered for expires, key id etc."""
    typeName: Required[Literal[DeliveryRuleActionParametersType.DELIVERY_RULE_URL_SIGNING_ACTION_PARAMETERS]]
    """Required. DELIVERY_RULE_URL_SIGNING_ACTION_PARAMETERS."""


class UrlSigningKey(TypedDict, total=False):
    """Url signing key.

    :ivar key_id: Defines the customer defined key Id. This id will exist in the incoming request
     to indicate the key used to form the hash. Required.
    :vartype key_id: str
    :ivar key_source_parameters: Defines the parameters for using customer key vault for Url
     Signing Key. Required.
    :vartype key_source_parameters: "KeyVaultSigningKeyParameters"
    """

    keyId: Required[str]
    """Defines the customer defined key Id. This id will exist in the incoming request to indicate the
     key used to form the hash. Required."""
    keySourceParameters: Required["KeyVaultSigningKeyParameters"]
    """Defines the parameters for using customer key vault for Url Signing Key. Required."""


class UrlSigningKeyParameters(TypedDict, total=False):
    """Url signing key parameters.

    :ivar key_id: Defines the customer defined key Id. This id will exist in the incoming request
     to indicate the key used to form the hash. Required.
    :vartype key_id: str
    :ivar secret_source: Resource reference to the Azure Key Vault secret. Expected to be in format
     of
     /subscriptions/{​​​​​​​​​subscriptionId}​​​​​​​​​/resourceGroups/{​​​​​​​​​resourceGroupName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/providers/Microsoft.KeyVault/vaults/{vaultName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/secrets/{secretName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​.
     Required.
    :vartype secret_source: "ResourceReference"
    :ivar secret_version: Version of the secret to be used. Required.
    :vartype secret_version: str
    :ivar type: The type of the secret resource. Required. URL_SIGNING_KEY.
    :vartype type: Literal[SecretType.URL_SIGNING_KEY]
    """

    keyId: Required[str]
    """Defines the customer defined key Id. This id will exist in the incoming request to indicate the
     key used to form the hash. Required."""
    secretSource: Required["ResourceReference"]
    """Resource reference to the Azure Key Vault secret. Expected to be in format of
     /subscriptions/{​​​​​​​​​subscriptionId}​​​​​​​​​/resourceGroups/{​​​​​​​​​resourceGroupName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/providers/Microsoft.KeyVault/vaults/{vaultName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​/secrets/{secretName}​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​.
     Required."""
    secretVersion: Required[str]
    """Version of the secret to be used. Required."""
    type: Required[Literal[SecretType.URL_SIGNING_KEY]]
    """The type of the secret resource. Required. URL_SIGNING_KEY."""


class UrlSigningParamIdentifier(TypedDict, total=False):
    """Defines how to identify a parameter for a specific purpose e.g. expires.

    :ivar param_indicator: Indicates the purpose of the parameter. Required. Known values are:
     "Expires", "KeyId", and "Signature".
    :vartype param_indicator: Union[str, "ParamIndicator"]
    :ivar param_name: Parameter name. Required.
    :vartype param_name: str
    """

    paramIndicator: Required[Union[str, "ParamIndicator"]]
    """Indicates the purpose of the parameter. Required. Known values are: \"Expires\", \"KeyId\", and
     \"Signature\"."""
    paramName: Required[str]
    """Parameter name. Required."""


class UserAssignedIdentity(TypedDict, total=False):
    """User assigned identity properties.

    :ivar principal_id: The principal ID of the assigned identity.
    :vartype principal_id: str
    :ivar client_id: The client ID of the assigned identity.
    :vartype client_id: str
    """

    principalId: str
    """The principal ID of the assigned identity."""
    clientId: str
    """The client ID of the assigned identity."""


class UserManagedHttpsParameters(TypedDict, total=False):
    """Defines the certificate source parameters using user's keyvault certificate for enabling SSL.

    :ivar protocol_type: Defines the TLS extension protocol that is used for secure delivery.
     Required. Known values are: "ServerNameIndication" and "IPBased".
    :vartype protocol_type: Union[str, "ProtocolType"]
    :ivar minimum_tls_version: TLS protocol version that will be used for Https. Known values are:
     "None", "TLS10", and "TLS12".
    :vartype minimum_tls_version: Union[str, "MinimumTlsVersion"]
    :ivar certificate_source_parameters: Defines the certificate source parameters using user's
     keyvault certificate for enabling SSL. Required.
    :vartype certificate_source_parameters: "KeyVaultCertificateSourceParameters"
    :ivar certificate_source: Defines the source of the SSL certificate. Required. AZURE_KEY_VAULT.
    :vartype certificate_source: Literal[CertificateSource.AZURE_KEY_VAULT]
    """

    protocolType: Required[Union[str, "ProtocolType"]]
    """Defines the TLS extension protocol that is used for secure delivery. Required. Known values
     are: \"ServerNameIndication\" and \"IPBased\"."""
    minimumTlsVersion: Union[str, "MinimumTlsVersion"]
    """TLS protocol version that will be used for Https. Known values are: \"None\", \"TLS10\", and
     \"TLS12\"."""
    certificateSourceParameters: Required["KeyVaultCertificateSourceParameters"]
    """Defines the certificate source parameters using user's keyvault certificate for enabling SSL.
     Required."""
    certificateSource: Required[Literal[CertificateSource.AZURE_KEY_VAULT]]
    """Defines the source of the SSL certificate. Required. AZURE_KEY_VAULT."""


class ValidateCustomDomainInput(TypedDict, total=False):
    """Input of the custom domain to be validated for DNS mapping.

    :ivar host_name: The host name of the custom domain. Must be a domain name. Required.
    :vartype host_name: str
    """

    hostName: Required[str]
    """The host name of the custom domain. Must be a domain name. Required."""


class ValidateProbeInput(TypedDict, total=False):
    """Input of the validate probe API.

    :ivar probe_url: The probe URL to validate. Required.
    :vartype probe_url: str
    """

    probeURL: Required[str]
    """The probe URL to validate. Required."""


class ValidateSecretInput(TypedDict, total=False):
    """Input of the secret to be validated.

    :ivar secret_type: The secret type. Required. Known values are: "UrlSigningKey",
     "CustomerCertificate", "ManagedCertificate", and "AzureFirstPartyManagedCertificate".
    :vartype secret_type: Union[str, "SecretType"]
    :ivar secret_source: Resource reference to the Azure Key Vault secret. Expected to be in format
     of
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}/secrets/{secretName}.
     Required.
    :vartype secret_source: "ResourceReference"
    :ivar secret_version: Secret version, if customer is using a specific version.
    :vartype secret_version: str
    """

    secretType: Required[Union[str, "SecretType"]]
    """The secret type. Required. Known values are: \"UrlSigningKey\", \"CustomerCertificate\",
     \"ManagedCertificate\", and \"AzureFirstPartyManagedCertificate\"."""
    secretSource: Required["ResourceReference"]
    """Resource reference to the Azure Key Vault secret. Expected to be in format of
     /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}/secrets/{secretName}.
     Required."""
    secretVersion: str
    """Secret version, if customer is using a specific version."""


SecretParameters = Union[
    AzureFirstPartyManagedCertificateParameters,
    CustomerCertificateParameters,
    ManagedCertificateParameters,
    UrlSigningKeyParameters,
]
DeliveryRuleActionParameters = Union[
    CacheExpirationActionParameters,
    CacheKeyQueryStringActionParameters,
    HeaderActionParameters,
    OriginGroupOverrideActionParameters,
    RouteConfigurationOverrideActionParameters,
    UrlRedirectActionParameters,
    UrlRewriteActionParameters,
    UrlSigningActionParameters,
]
CertificateSourceParameters = Union[CdnCertificateSourceParameters, KeyVaultCertificateSourceParameters]
CustomDomainHttpsParameters = Union[UserManagedHttpsParameters, CdnManagedHttpsParameters]
DeliveryRuleConditionParameters = Union[
    ClientPortMatchConditionParameters,
    CookiesMatchConditionParameters,
    HostNameMatchConditionParameters,
    HttpVersionMatchConditionParameters,
    IsDeviceMatchConditionParameters,
    PostArgsMatchConditionParameters,
    QueryStringMatchConditionParameters,
    RemoteAddressMatchConditionParameters,
    RequestBodyMatchConditionParameters,
    RequestHeaderMatchConditionParameters,
    RequestMethodMatchConditionParameters,
    RequestSchemeMatchConditionParameters,
    RequestUriMatchConditionParameters,
    ServerPortMatchConditionParameters,
    SocketAddrMatchConditionParameters,
    SslProtocolMatchConditionParameters,
    UrlFileExtensionMatchConditionParameters,
    UrlFileNameMatchConditionParameters,
    UrlPathMatchConditionParameters,
]
DeliveryRuleAction = Union[
    DeliveryRuleCacheExpirationAction,
    DeliveryRuleCacheKeyQueryStringAction,
    DeliveryRuleRequestHeaderAction,
    DeliveryRuleResponseHeaderAction,
    OriginGroupOverrideAction,
    DeliveryRuleRouteConfigurationOverrideAction,
    UrlRedirectAction,
    UrlRewriteAction,
    UrlSigningAction,
]
DeliveryRuleCondition = Union[
    DeliveryRuleClientPortCondition,
    DeliveryRuleCookiesCondition,
    DeliveryRuleHostNameCondition,
    DeliveryRuleHttpVersionCondition,
    DeliveryRuleIsDeviceCondition,
    DeliveryRulePostArgsCondition,
    DeliveryRuleQueryStringCondition,
    DeliveryRuleRemoteAddressCondition,
    DeliveryRuleRequestBodyCondition,
    DeliveryRuleRequestHeaderCondition,
    DeliveryRuleRequestMethodCondition,
    DeliveryRuleRequestSchemeCondition,
    DeliveryRuleRequestUriCondition,
    DeliveryRuleServerPortCondition,
    DeliveryRuleSocketAddrCondition,
    DeliveryRuleSslProtocolCondition,
    DeliveryRuleUrlFileExtensionCondition,
    DeliveryRuleUrlFileNameCondition,
    DeliveryRuleUrlPathCondition,
]
SecurityPolicyPropertiesParameters = Union[SecurityPolicyWebApplicationFirewallParameters]
