/**
 * Porkbun DNS Provider
 * API documentation: https://porkbun.com/api/json/v3/documentation
 */
import type { CreateRecordResult, DeleteRecordResult, DnsProvider, DnsRecord, DnsRecordType, ListRecordsResult } from './types';
export declare class PorkbunProvider implements DnsProvider {
    readonly name = "porkbun";
    private apiKey;
    private secretKey;
    private requestTimeoutMs;
    constructor(apiKey: string, secretKey: string, requestTimeoutMs?: number);
    /**
     * Make an authenticated API request to Porkbun
     */
    private request;
    /**
     * Extract the subdomain from a full record name
     * e.g., "_acme-challenge.example.com" -> "_acme-challenge"
     */
    private getSubdomain;
    /**
     * Get the root domain from a full domain name
     * e.g., "api.example.com" -> "example.com"
     */
    private getRootDomain;
    /**
     * Address record types that cannot coexist with an `ALIAS`/`CNAME` on the
     * same name. Porkbun ships every new domain with a parking `ALIAS` on the
     * apex and a wildcard `CNAME`, both pointing at `pixie.porkbun.com`.
     */
    private static readonly ADDRESS_TYPES;
    /**
     * Remove any `ALIAS`/`CNAME` occupying `record.name` before writing an
     * address record there.
     *
     * Porkbun accepts `POST /dns/create` for an apex `A` while its parking
     * `ALIAS` still owns that name, answers `SUCCESS`, and then silently
     * discards the record — nothing is created and nothing is reported. A deploy
     * therefore logged a successful DNS reconciliation while the domain stayed
     * parked, which is indistinguishable from slow propagation until someone
     * digs the zone by hand.
     *
     * Only conflicting ALIAS/CNAME entries on the SAME name are touched; MX, TXT,
     * NS and records on other names are left alone.
     */
    private clearConflictingAliases;
    /**
     * Confirm an address record actually exists after a create that reported
     * success — see {@link clearConflictingAliases} for why a `SUCCESS` from
     * Porkbun is not sufficient evidence that anything was written.
     */
    private addressRecordExists;
    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 managed by this Porkbun account
     * Uses the domain list API endpoint
     */
    listDomains(): Promise<string[]>;
    /**
     * Get nameservers for a domain (Porkbun-specific)
     */
    getNameServers(domain: string): Promise<string[]>;
    /**
     * Update nameservers for a domain (Porkbun-specific)
     */
    updateNameServers(domain: string, nameservers: string[]): Promise<boolean>;
}
