import { AxiosInstance } from 'axios';
import { PaginatedResponse, PaginationParams } from './instances';
export interface Domain {
    id: number;
    domain: string;
    type: 'master' | 'slave';
    status: 'active' | 'disabled' | 'edit_mode' | 'has_errors';
    description?: string;
    soa_email?: string;
    retry_sec?: number;
    master_ips?: string[];
    axfr_ips?: string[];
    expire_sec?: number;
    refresh_sec?: number;
    ttl_sec?: number;
    tags?: string[];
    created: string;
    updated: string;
}
export interface DomainRecord {
    id: number;
    type: string;
    name: string;
    target: string;
    priority?: number;
    weight?: number;
    port?: number;
    service?: string;
    protocol?: string;
    ttl_sec?: number;
    tag?: string;
    created: string;
    updated: string;
}
export interface CreateDomainRequest {
    domain: string;
    type: 'master' | 'slave';
    soa_email?: string;
    master_ips?: string[];
    description?: string;
    axfr_ips?: string[];
    ttl_sec?: number;
    refresh_sec?: number;
    retry_sec?: number;
    expire_sec?: number;
    tags?: string[];
}
export interface UpdateDomainRequest {
    domain?: string;
    type?: 'master' | 'slave';
    soa_email?: string;
    master_ips?: string[];
    description?: string;
    axfr_ips?: string[];
    ttl_sec?: number;
    refresh_sec?: number;
    retry_sec?: number;
    expire_sec?: number;
    tags?: string[];
    status?: 'active' | 'disabled' | 'edit_mode' | 'has_errors';
}
export interface CreateDomainRecordRequest {
    name: string;
    target: string;
    type: string;
    priority?: number;
    weight?: number;
    port?: number;
    service?: string;
    protocol?: string;
    ttl_sec?: number;
    tag?: string;
}
export interface UpdateDomainRecordRequest {
    name?: string;
    target?: string;
    priority?: number;
    weight?: number;
    port?: number;
    service?: string;
    protocol?: string;
    ttl_sec?: number;
    tag?: string;
}
export interface ImportZoneRequest {
    domain: string;
    remote_nameserver: string;
}
export interface CloneDomainRequest {
    domain: string;
}
export interface ZoneFileResponse {
    zone_file: string;
}
export interface DomainsClient {
    getDomains: (params?: PaginationParams) => Promise<PaginatedResponse<Domain>>;
    getDomain: (id: number) => Promise<Domain>;
    createDomain: (data: CreateDomainRequest) => Promise<Domain>;
    updateDomain: (id: number, data: UpdateDomainRequest) => Promise<Domain>;
    deleteDomain: (id: number) => Promise<void>;
    getDomainRecords: (id: number, params?: PaginationParams) => Promise<PaginatedResponse<DomainRecord>>;
    getDomainRecord: (domainId: number, recordId: number) => Promise<DomainRecord>;
    createDomainRecord: (domainId: number, data: CreateDomainRecordRequest) => Promise<DomainRecord>;
    updateDomainRecord: (domainId: number, recordId: number, data: UpdateDomainRecordRequest) => Promise<DomainRecord>;
    deleteDomainRecord: (domainId: number, recordId: number) => Promise<void>;
    importZone: (data: ImportZoneRequest) => Promise<Domain>;
    cloneDomain: (id: number, data: CloneDomainRequest) => Promise<Domain>;
    getZoneFile: (id: number) => Promise<ZoneFileResponse>;
}
/**
 * Creates a domains client for interfacing with the Linode Domains API
 */
export declare function createDomainsClient(axios: AxiosInstance): DomainsClient;
