import type { Integer } from "../../../common/CustomTypes/Integer";
import type { RootedPath } from "../../../common/CustomTypes/RootedPath";
import type { Maybe } from "../../../common/Maybe";
import type { OriginAccessIdentity } from "../../OriginAccessIdentity";
import type { Path } from "../../Path";
import type { AwsResourceCommon, CloudFormationTags } from "../common";
import type { CloudFormationString } from "../IntrinsicFunctions";
export declare type DistributionType = 'AWS::CloudFront::Distribution';
export interface Distribution extends AwsResourceCommon {
    Type: DistributionType;
    Properties: DistributionProperties;
}
export interface DistributionProperties {
    DistributionConfig: DistributionConfig;
    Tags?: CloudFormationTags;
}
export interface DistributionConfig {
    Enabled: boolean;
    Aliases?: string[];
    CacheBehaviors?: CacheBehavior[];
    Comment?: string;
    CustomErrorResponses?: CustomErrorResponses[];
    DefaultCacheBehavior: DefaultCacheBehavior;
    DefaultRootObject?: Path | '';
    HttpVersion?: HttpVersion;
    IPV6Enabled?: boolean;
    Logging?: object;
    Origins?: DistributionOrigin[];
    PriceClass?: PriceClass;
    Restrictions?: object;
    ViewerCertificate?: ViewerCertificate;
    WebACLId?: CloudFormationString;
}
export interface DistributionOriginBase {
    DomainName: CloudFormationString;
    Id: CloudFormationString;
    OriginCustomHeaders?: OriginCustomHeader[];
    OriginPath?: CloudFormationString;
    OriginAccessControlId?: CloudFormationString;
}
export interface CustomDistributionOrigin extends DistributionOriginBase {
    CustomOriginConfig: CustomOriginConfig;
}
export interface S3DistributionOrigin extends DistributionOriginBase {
    S3OriginConfig: S3OriginConfig;
}
export declare type DistributionOrigin = CustomDistributionOrigin | S3DistributionOrigin;
export declare type HttpVersion = 'http1.1' | 'http2';
export declare type PriceClass = 'PriceClass_100' | 'PriceClass_200' | 'PriceClass_All';
export interface OriginCustomHeader {
    HeaderName: string;
    HeaderValue: CloudFormationString;
}
export interface CustomOriginConfig {
    HTTPPort?: Integer;
    HTTPSPort?: Integer;
    OriginKeepaliveTimeout?: Integer;
    OriginProtocolPolicy?: OriginProtocolPolicy;
    OriginReadTimeout?: Integer;
    OriginSSLProtocols?: string[];
}
export interface S3OriginConfig {
    OriginAccessIdentity?: OriginAccessIdentity;
}
export declare type OriginProtocolPolicy = 'http-only' | 'https-only' | 'match-viewer';
export interface DefaultCacheBehavior {
    AllowedMethods?: string[];
    CachedMethods?: string[];
    Compress?: boolean;
    DefaultTTL?: number;
    FieldLevelEncryptionId?: CloudFormationString;
    ForwardedValues: ForwardedValues;
    LambdaFunctionAssociations?: object[];
    MaxTTL?: number;
    MinTTL?: number;
    SmoothStreaming?: boolean;
    TargetOriginId: CloudFormationString;
    TrustedSigners?: string[];
    ViewerProtocolPolicy: ViewerProtocolPolicy;
}
export interface CacheBehavior extends DefaultCacheBehavior {
    PathPattern: string;
}
export interface ForwardedValues {
    QueryString: boolean;
    QueryStringCacheKeys?: string[];
    Cookies?: object;
    Headers?: string[];
}
export declare type ViewerProtocolPolicy = 'allow-all' | 'https-only' | 'redirect-to-https';
export declare type CustomErrorResponses = CustomErrorResponsesBase | CustomErrorResponsesWithRedirect;
export interface CustomErrorResponsesBase {
    ErrorCachingMinTTL?: number;
    ErrorCode: Integer;
}
export interface CustomErrorResponsesWithRedirect extends CustomErrorResponsesBase {
    ResponseCode: Integer;
    ResponsePagePath: RootedPath | '';
}
export interface ViewerCertificateBase {
    CloudFrontDefaultCertificate?: boolean;
    MinimumProtocolVersion?: TLSSupportedVersion;
    SslSupportMethod?: TLSSupportMethod;
}
export interface DefaultCloudFrontViewerCertificate extends ViewerCertificateBase {
    CloudFrontDefaultCertificate: true;
    MinimumProtocolVersion?: undefined;
    SslSupportMethod?: undefined;
}
export interface CetificateManagerViewerCertificate extends ViewerCertificateBase {
    CloudFrontDefaultCertificate?: false;
    AcmCertificateArn: string;
    SslSupportMethod: TLSSupportMethod;
}
export interface IamViewerCertificate extends ViewerCertificateBase {
    CloudFrontDefaultCertificate?: false;
    IamCertificateId: string;
    SslSupportMethod: TLSSupportMethod;
}
export declare type ViewerCertificate = CetificateManagerViewerCertificate | DefaultCloudFrontViewerCertificate | IamViewerCertificate;
export declare type TLSSupportedVersion = 'SSLv3' | 'TLSv1_2016' | 'TLSv1.1_2016' | 'TLSv1.2_2018' | 'TLSv1';
export declare type TLSSupportMethod = 'sni-only' | 'vip';
export declare function isDefaultCloudFrontViewerCertificate(cert: Maybe<ViewerCertificate>): cert is DefaultCloudFrontViewerCertificate;
export declare function isCetificateManagerViewerCertificate(cert: Maybe<ViewerCertificate>): cert is CetificateManagerViewerCertificate;
export declare function isIamViewerCertificate(cert: Maybe<ViewerCertificate>): cert is IamViewerCertificate;
