/**
 * Route53 DNS Provider Adapter
 * Wraps the existing Route53Client to implement the DnsProvider interface
 */
import type { CreateRecordResult, DeleteRecordResult, DnsProvider, DnsRecord, DnsRecordType, ListRecordsResult } from './types';
import { Route53Client } from '../aws/route53';
export declare class Route53Provider implements DnsProvider {
    readonly name = "route53";
    private client;
    private hostedZoneCache;
    private providedHostedZoneId?;
    constructor(region?: string, hostedZoneId?: string);
    /**
     * Get the root domain from a full domain name
     */
    private getRootDomain;
    /**
     * Get the hosted zone ID for a domain
     */
    private getHostedZoneId;
    /**
     * Ensure domain name ends with a dot (Route53 requirement)
     */
    private normalizeName;
    createRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult>;
    upsertRecord(domain: string, record: DnsRecord): Promise<CreateRecordResult>;
    deleteRecord(domain: string, record: DnsRecord): Promise<DeleteRecordResult>;
    listRecords(domain: string, type?: DnsRecordType): Promise<ListRecordsResult>;
    canManageDomain(domain: string): Promise<boolean>;
    /**
     * List all domains (hosted zones) managed in Route53
     */
    listDomains(): Promise<string[]>;
    /**
     * Get the underlying Route53Client for advanced operations
     */
    getRoute53Client(): Route53Client;
    /**
     * Create an alias record (Route53-specific feature)
     * Useful for CloudFront, ALB, etc.
     */
    createAliasRecord(params: {
        domain: string;
        name: string;
        targetHostedZoneId: string;
        targetDnsName: string;
        evaluateTargetHealth?: boolean;
        type?: 'A' | 'AAAA';
    }): Promise<CreateRecordResult>;
    /**
     * Create CloudFront alias record (convenience method)
     */
    createCloudFrontAlias(params: {
        domain: string;
        name: string;
        cloudFrontDomainName: string;
    }): Promise<CreateRecordResult>;
    /**
     * Create ALB alias record (convenience method)
     */
    createAlbAlias(params: {
        domain: string;
        name: string;
        albDnsName: string;
        region: string;
    }): Promise<CreateRecordResult>;
}
