import type { aws_certificatemanager as acm, aws_s3 as s3, aws_wafv2 as wafv2 } from "aws-cdk-lib";
import type { ApplicationLoadBalancer } from "aws-cdk-lib/aws-elasticloadbalancingv2";
import type { Construct } from "constructs";
import type { NestedCloudProps } from "../types";
import { aws_cloudfront as cloudfront, aws_lambda as lambda, aws_route53 as route53 } from "aws-cdk-lib";
export interface CdnStackProps extends NestedCloudProps {
	certificate: acm.Certificate;
	logBucket: s3.Bucket;
	publicBucket: s3.Bucket;
	docsBucket?: s3.Bucket;
	firewall: wafv2.CfnWebACL;
	originRequestFunction: lambda.Function;
	zone: route53.IHostedZone;
	webServer?: lambda.Function;
	webServerUrl?: lambda.FunctionUrl;
	lb?: ApplicationLoadBalancer;
}
export declare class CdnStack {
	mainDistribution: cloudfront.Distribution;
	docsDistribution: cloudfront.Distribution | undefined;
	cdnCachePolicy: cloudfront.CachePolicy;
	mainVanityUrl: string;
	docsVanityUrl: string | undefined;
	realtimeLogConfig: cloudfront.RealtimeLogConfig;
	props: CdnStackProps;
	constructor(scope: Construct, props: CdnStackProps);
	createDistribution(scope: Construct, props: CdnStackProps, sourceBucket: s3.Bucket, originRequestFunction: lambda.Function, domainName: string, id: string, originAccessControl: cloudfront.S3OriginAccessControl): cloudfront.Distribution;
	createRoute53Records(scope: Construct, props: CdnStackProps): void;
	createOutputs(scope: Construct, props: CdnStackProps): void;
	createDocsOriginRequestFunction(scope: Construct): lambda.Function;
	getCookieBehavior(cookieBehavior: string | undefined): cloudfront.CacheCookieBehavior | undefined;
	allowedMethods(): cloudfront.AllowedMethods;
	cachedMethods(): cloudfront.CachedMethods;
}
