export declare function defaultRpxDir(): string;
export declare function getDnsStatePath(rpxDir?: string): string;
export declare function loadDnsState(rpxDir?: string): Promise<DnsState | null>;
export declare function saveDnsState(rpxDir: string, state: DnsState): Promise<void>;
export declare function clearDnsState(rpxDir: string): Promise<void>;
/**
 * Normalize a dev hostname. Returns null for localhost / IPs — those use /etc/hosts only.
 */
export declare function normalizeDevDomain(raw: string): string | null;
/**
 * macOS resolver basename for a dev domain. Uses the registrable base (last two labels)
 * so `api.postline.test` and `postline.test` share one `/etc/resolver/postline.test` file.
 */
export declare function resolverBasenameForDomain(raw: string): string | null;
export declare function resolverBasenamesForDomains(domains: string[]): string[];
export declare function devDomainsFromHosts(hosts: string[]): string[];
export declare const DNS_STATE_VERSION: 1;
export declare const RPX_DNS_STATE_FILE: 'dns-state.json';
/** Single-label /etc/resolver files created by older rpx versions (whole-TLD hijack). */
export declare const LEGACY_TLD_RESOLVER_LABELS: readonly ['com', 'test', 'dev', 'app', 'page', 'local', 'localhost', 'example', 'invalid'];
export declare interface DnsState {
  version: typeof DNS_STATE_VERSION
  resolvers: string[]
  domains: string[]
  ownerPid: number | null
  updatedAt: string
}
