import * as aws from '@pulumi/aws';
import * as pulumi from '@pulumi/pulumi';
import { AcmCertificate } from '../acm-certificate';
export declare class CloudFront extends pulumi.ComponentResource {
    name: string;
    distribution: aws.cloudfront.Distribution;
    acmCertificate?: AcmCertificate;
    constructor(name: string, args: CloudFront.Args, opts?: pulumi.ComponentResourceOptions);
    private createDistributionOrigins;
    private getCacheBehavior;
    private createCertificate;
    private createDistribution;
    private createAliasRecord;
}
export declare namespace CloudFront {
    export enum BehaviorType {
        S3 = "s3",
        LB = "lb",
        CUSTOM = "custom"
    }
    export type S3Behavior = BehaviorBase & {
        type: BehaviorType.S3;
        bucket: pulumi.Input<aws.s3.Bucket>;
        websiteConfig: pulumi.Input<aws.s3.BucketWebsiteConfiguration>;
        /**
         * Override TTLs of the default cache policy. Suitable when more control is
         * needed to set up unified TTL on the default cache policy.
         */
        cacheTtl?: pulumi.Input<number>;
    };
    export type LbBehavior = BehaviorBase & {
        type: BehaviorType.LB;
        loadBalancer: pulumi.Input<aws.lb.LoadBalancer>;
        dnsName?: pulumi.Input<string>;
    };
    export type CustomBehavior = BehaviorBase & {
        type: BehaviorType.CUSTOM;
        originId: pulumi.Input<string>;
        domainName: pulumi.Input<string>;
        originProtocolPolicy?: pulumi.Input<string>;
        allowedMethods?: pulumi.Input<pulumi.Input<string>[]>;
        cachedMethods?: pulumi.Input<pulumi.Input<string>[]>;
        compress?: pulumi.Input<boolean>;
        defaultRootObject?: pulumi.Input<string>;
        cachePolicyId?: pulumi.Input<string>;
        originRequestPolicyId?: pulumi.Input<string>;
        responseHeadersPolicyId?: pulumi.Input<string>;
    };
    export type Behavior = S3Behavior | LbBehavior | CustomBehavior;
    export type Args = {
        /**
         * Behavior is a combination of distribution's origin and cache behavior.
         * Ordering is important since first encountered behavior is applied,
         * matched by path.
         * The default behavior, i.e. path pattern `*` or `/*`, must always be last.
         * Mapping between behavior and cache is one to one, while origin is mapped
         * by ID to filter out duplicates while keeping the last occurrence.
         */
        behaviors: Behavior[];
        /**
         * Domain name for CloudFront distribution. Implies creation of certificate
         * and alias record. Must belong to the provided hosted zone.
         * Providing the `certificate` argument has following effects:
         * - Certificate creation is skipped
         * - Provided certificate must cover the domain name
         * Responsibility to ensure mentioned requirements in on the consumer, and
         * falling to do so will result in unexpected behavior.
         */
        domain?: pulumi.Input<string>;
        /**
         * Certificate for CloudFront distribution. Domain and alternative domains
         * are automatically pulled from the certificate and translated into alias
         * records. Domains covered by the certificate, must belong to the provided
         * hosted zone. The certificate must be in `us-east-1` region. In a case
         * of wildcard certificate the `domain` argument is required.
         * Providing the `domain` argument has following effects:
         * - Alias records creation, from automatically pulled domains, is skipped
         * - Certificate must cover the provided domain name
         * Responsibility to ensure mentioned requirements in on the consumer, and
         * falling to do so will result in unexpected behavior.
         */
        certificate?: pulumi.Input<aws.acm.Certificate>;
        /**
         * ID of hosted zone is needed when the `domain` or the `certificate`
         * arguments are provided.
         */
        hostedZoneId?: pulumi.Input<string>;
        tags?: pulumi.Input<{
            [key: string]: pulumi.Input<string>;
        }>;
    };
    type BehaviorBase = {
        pathPattern: string;
    };
    export {};
}
//# sourceMappingURL=index.d.ts.map