/**
 * Static Site Deployment with External DNS Provider Support
 * Deploys static sites to AWS (S3 + CloudFront + ACM) with DNS managed by external providers (Porkbun, GoDaddy, etc.)
 */
import type { DnsProviderConfig } from '../dns/types';
export interface ExternalDnsStaticSiteConfig {
    /** Site name used for resource naming */
    siteName: string;
    /** AWS region for S3 bucket */
    region?: string;
    /** Custom domain (e.g., bunpress.org) */
    domain: string;
    /** S3 bucket name (auto-generated if not provided) */
    bucket?: string;
    /** ACM certificate ARN (auto-created if not provided) */
    certificateArn?: string;
    /** CloudFormation stack name */
    stackName?: string;
    /** Default root object */
    defaultRootObject?: string;
    /** Error document */
    errorDocument?: string;
    /** Cache control for assets */
    cacheControl?: string;
    /** Tags to apply to resources */
    tags?: Record<string, string>;
    /** DNS provider configuration */
    dnsProvider: DnsProviderConfig;
    /** Skip DNS verification and record creation (use when DNS is already configured) */
    skipDnsVerification?: boolean;
    /** When true, serves raw files without URL rewriting (for curl | bash install scripts) */
    passthroughUrls?: boolean;
    /**
     * When true, allow POST/PUT/PATCH/DELETE on the default cache behavior.
     * Use when CloudFront fronts a dynamic app (EC2) rather than static S3 only.
     */
    dynamicApp?: boolean;
    /** EC2 public DNS hostname for CloudFront (required when dynamicApp is true). */
    computeOriginDomain?: string;
    /** HTTP port on the compute origin. @default 3008 */
    computeOriginPort?: number;
    /** CloudFront origin Id for the compute origin. */
    computeOriginId?: string;
    /**
     * When true, missing files (S3 403/404) fall through to the index document
     * with a 200 status — required for client-side-routed SPAs.
     *
     * Defaults to false: missing files return a real 404 with the error document.
     * Multi-page static sites should leave this off so /favicon.ico, /robots.txt,
     * /sitemap.xml etc. don't masquerade as the homepage.
     */
    singlePageApp?: boolean;
}
export interface ExternalDnsDeployResult {
    success: boolean;
    stackId?: string;
    stackName: string;
    bucket: string;
    distributionId?: string;
    distributionDomain?: string;
    domain?: string;
    certificateArn?: string;
    message: string;
    filesUploaded?: number;
    filesSkipped?: number;
}
/**
 * Generate CloudFormation template for static site infrastructure (without Route53)
 */
export declare function generateExternalDnsStaticSiteTemplate(config: {
    bucketName: string;
    domain?: string;
    aliases?: string[];
    certificateArn?: string;
    defaultRootObject?: string;
    errorDocument?: string;
    passthroughUrls?: boolean;
    singlePageApp?: boolean;
    dynamicApp?: boolean;
    computeOriginDomain?: string;
    computeOriginPort?: number;
    computeOriginId?: string;
    /** When true, retain S3/CloudFront resources if the stack is deleted (stack migration). */
    retainOnStackDelete?: boolean;
}): object;
/**
 * Deploy a static site to AWS with external DNS provider
 */
export declare function deployStaticSiteWithExternalDns(config: ExternalDnsStaticSiteConfig): Promise<ExternalDnsDeployResult>;
/**
 * Full deployment with external DNS: infrastructure + files + cache invalidation
 */
export declare function deployStaticSiteWithExternalDnsFull(config: ExternalDnsStaticSiteConfig & {
    sourceDir: string;
    cleanBucket?: boolean;
    onProgress?: (stage: string, detail?: string) => void;
}): Promise<ExternalDnsDeployResult>;
