import type { DNSimple, QueryParams } from "./main";
import type * as types from "./types";
export declare class Registrar {
    private readonly _client;
    constructor(_client: DNSimple);
    /**
     * Checks a domain name for availability.
     *
     * GET /{account}/registrar/domains/{domain}/check
     *
     * @see https://developer.dnsimple.com/v2/registrar/#checkDomain
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    checkDomain: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.DomainCheckResult;
    }>;
    /**
     * Deprecated in favor of getDomainPrices.
     *
     * Retrieves the premium price for a premium domain.
     *
     * Please note that a premium price can be different for registration, renewal, transfer. By default this endpoint returns the premium price for registration. If you need to check a different price, you should specify it with the action param.
     *
     * GET /{account}/registrar/domains/{domain}/premium_price
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainPremiumPrice
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     * @param params.action Optional action between "registration", "renewal", and "transfer". If omitted, it defaults to "registration".
     */
    getDomainPremiumPrice: (account: number, domain: string, params?: QueryParams & {
        action?: string;
    }) => Promise<{
        data: types.DomainPremiumPrice;
    }>;
    /**
     * Retrieve domain prices.
     *
     * GET /{account}/registrar/domains/{domain}/prices
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainPrices
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    getDomainPrices: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.DomainPrices;
    }>;
    /**
     * Registers a domain name.
     *
     * Your account must be active for this command to complete successfully. You will be automatically charged the registration fee upon successful registration, so please be careful with this command.
     *
     * POST /{account}/registrar/domains/{domain}/registrations
     *
     * @see https://developer.dnsimple.com/v2/registrar/#registerDomain
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    registerDomain: (account: number, domain: string, data: Partial<{
        registrant_id: number;
        whois_privacy: boolean;
        auto_renew: boolean;
        extended_attributes: {};
        premium_price: string;
    }>, params?: QueryParams & {}) => Promise<{
        data: types.DomainRegistration;
    }>;
    /**
     * Retrieves the details of an existing domain registration.
     *
     * GET /{account}/registrar/domains/{domain}/registrations/{domainregistration}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainRegistration
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param domainregistration The domain registration id
     * @param params Query parameters
     */
    getDomainRegistration: (account: number, domain: string, domainregistration: number, params?: QueryParams & {}) => Promise<{
        data: types.DomainRegistration;
    }>;
    /**
     * Transfers a domain name from another registrar.
     *
     * Your account must be active for this command to complete successfully. You will be automatically charged the 1-year transfer fee upon successful transfer, so please be careful with this command. The transfer may take anywhere from a few minutes up to 7 days.
     *
     * POST /{account}/registrar/domains/{domain}/transfers
     *
     * @see https://developer.dnsimple.com/v2/registrar/#transferDomain
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    transferDomain: (account: number, domain: string, data: Partial<{
        registrant_id: number;
        auth_code: string;
        whois_privacy: boolean;
        auto_renew: boolean;
        extended_attributes: {};
        premium_price: string;
    }>, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransfer;
    }>;
    /**
     * Retrieves the details of an existing domain transfer.
     *
     * GET /{account}/registrar/domains/{domain}/transfers/{domaintransfer}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainTransfer
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param domaintransfer The domain transfer id
     * @param params Query parameters
     */
    getDomainTransfer: (account: number, domain: string, domaintransfer: number, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransfer;
    }>;
    /**
     * Cancels an in progress domain transfer.
     *
     * DELETE /{account}/registrar/domains/{domain}/transfers/{domaintransfer}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#cancelDomainTransfer
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param domaintransfer The domain transfer id
     * @param params Query parameters
     */
    cancelDomainTransfer: (account: number, domain: string, domaintransfer: number, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransfer;
    }>;
    /**
     * Explicitly renews a domain, if the registry supports this function.
     *
     * Your account must be active for this command to complete successfully. You will be automatically charged the renewal fee upon successful renewal, so please be careful with this command.
     *
     * POST /{account}/registrar/domains/{domain}/renewals
     *
     * @see https://developer.dnsimple.com/v2/registrar/#domainRenew
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    renewDomain: (account: number, domain: string, data: Partial<{
        period: number;
        premium_price: string;
    }>, params?: QueryParams & {}) => Promise<{
        data: types.DomainRenewal;
    }>;
    /**
     * Retrieves the details of an existing domain renewal.
     *
     * GET /{account}/registrar/domains/{domain}/renewals/{domainrenewal}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainRenewal
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param domainrenewal The domain renewal id
     * @param params Query parameters
     */
    getDomainRenewal: (account: number, domain: string, domainrenewal: number, params?: QueryParams & {}) => Promise<{
        data: types.DomainRenewal;
    }>;
    /**
     * Prepares a domain for transferring out.
     *
     * This will unlock a domain and send the authorization code to the domain's administrative contact.
     *
     * POST /{account}/registrar/domains/{domain}/authorize_transfer_out
     *
     * @see https://developer.dnsimple.com/v2/registrar/#authorizeDomainTransferOut
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    transferDomainOut: (account: number, domain: string, params?: QueryParams & {}) => Promise<{}>;
    /**
     * Lists the name servers for the domain.
     *
     * GET /{account}/registrar/domains/{domain}/delegation
     *
     * @see https://developer.dnsimple.com/v2/registrar/delegation/#getDomainDelegation
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    getDomainDelegation: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: Array<string>;
    }>;
    /**
     * Changes the domain name servers.
     *
     * PUT /{account}/registrar/domains/{domain}/delegation
     *
     * @see https://developer.dnsimple.com/v2/registrar/delegation/#changeDomainDelegation
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    changeDomainDelegation: (account: number, domain: string, data: Partial<Array<string>>, params?: QueryParams & {}) => Promise<{
        data: Array<string>;
    }>;
    /**
     * Delegate a domain to vanity name servers.
     *
     * PUT /{account}/registrar/domains/{domain}/delegation/vanity
     *
     * @see https://developer.dnsimple.com/v2/registrar/delegation/#changeDomainDelegationToVanity
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    changeDomainDelegationToVanity: (account: number, domain: string, data: Partial<Array<string>>, params?: QueryParams & {}) => Promise<{
        data: Array<types.NameServer>;
    }>;
    /**
     * De-delegate a domain from vanity name servers.
     *
     * DELETE /{account}/registrar/domains/{domain}/delegation/vanity
     *
     * @see https://developer.dnsimple.com/v2/registrar/delegation/#changeDomainDelegationFromVanity
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    changeDomainDelegationFromVanity: (account: number, domain: string, params?: QueryParams & {}) => Promise<{}>;
    /**
     * Enables auto renewal for the domain.
     *
     * PUT /{account}/registrar/domains/{domain}/auto_renewal
     *
     * @see https://developer.dnsimple.com/v2/registrar/#enableDomainAutoRenewal
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    enableDomainAutoRenewal: (account: number, domain: string, params?: QueryParams & {}) => Promise<{}>;
    /**
     * Disables auto renewal for the domain.
     *
     * DELETE /{account}/registrar/domains/{domain}/auto_renewal
     *
     * @see https://developer.dnsimple.com/v2/registrar/#disableDomainAutoRenewal
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    disableDomainAutoRenewal: (account: number, domain: string, params?: QueryParams & {}) => Promise<{}>;
    /**
     * Gets the whois privacy status for an existing domain.
     *
     * GET /{account}/registrar/domains/{domain}/whois_privacy
     *
     * @see https://developer.dnsimple.com/v2/registrar/whois-privacy/#getWhoisPrivacy
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    getWhoisPrivacy: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.WhoisPrivacy;
    }>;
    /**
     * Enables the WHOIS privacy for the domain.
     *
     * Note that if the WHOIS privacy is not purchased for the domain, enabling WHOIS privacy will cause the service to be purchased for a period of 1 year. If WHOIS privacy was previously purchased and disabled, then calling this will enable the WHOIS privacy.
     *
     * PUT /{account}/registrar/domains/{domain}/whois_privacy
     *
     * @see https://developer.dnsimple.com/v2/registrar/whois-privacy/#enableWhoisPrivacy
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    enableWhoisPrivacy: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.WhoisPrivacy;
    }>;
    /**
     * Disables the WHOIS privacy for the domain.
     *
     * DELETE /{account}/registrar/domains/{domain}/whois_privacy
     *
     * @see https://developer.dnsimple.com/v2/registrar/whois-privacy/#disableWhoisPrivacy
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    disableWhoisPrivacy: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.WhoisPrivacy;
    }>;
    /**
     * Renews the WHOIS privacy for the domain.
     *
     * Note that if the WHOIS privacy was never purchased for the domain or if there is another renewal order in progress, renewing WHOIS privacy will return an error.
     *
     * POST /{account}/registrar/domains/{domain}/whois_privacy/renewals
     *
     * @see https://developer.dnsimple.com/v2/registrar/whois-privacy/#renewWhoisPrivacy
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    renewWhoisPrivacy: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.WhoisPrivacyRenewal;
    }>;
    /**
     * List registrant changes in the account.
     *
     * This API is paginated. Call `listRegistrantChanges.iterateAll(account, params)` to get an asynchronous iterator over individual items across all pages. You can also use `await listRegistrantChanges.collectAll(account, params)` to quickly retrieve all items across all pages into an array. We suggest using `iterateAll` when possible, as `collectAll` will make all requests at once, which may increase latency and trigger rate limits.
     *
     * GET /{account}/registrar/registrant_changes
     *
     * @see https://developer.dnsimple.com/v2/registrar/#listRegistrantChanges
     *
     * @param account The account id
     * @param params Query parameters
     * @param params.sort Sort results. Default sorting is by id.
     * @param params.state Only include results with a state field exactly matching the given string
     * @param params.domain_id Only include results with a domain_id field exactly matching the given string
     * @param params.contact_id Only include results with a contact_id field exactly matching the given string
     */
    listRegistrantChanges: {
        (account: number, params?: QueryParams & {
            sort?: "id:asc" | "id:desc";
            state?: "new" | "pending" | "completed" | "cancelling" | "cancelled";
            domain_id?: string;
            contact_id?: string;
        }): Promise<{
            data: Array<types.RegistrantChange>;
            pagination: types.Pagination;
        }>;
        iterateAll(account: number, params?: QueryParams & {
            sort?: "id:asc" | "id:desc";
            state?: "new" | "pending" | "completed" | "cancelling" | "cancelled";
            domain_id?: string;
            contact_id?: string;
        }): AsyncGenerator<types.RegistrantChange, any, any>;
        collectAll(account: number, params?: QueryParams & {
            sort?: "id:asc" | "id:desc";
            state?: "new" | "pending" | "completed" | "cancelling" | "cancelled";
            domain_id?: string;
            contact_id?: string;
        }): Promise<types.RegistrantChange[]>;
    };
    /**
     * Start registrant change.
     *
     * POST /{account}/registrar/registrant_changes
     *
     * @see https://developer.dnsimple.com/v2/registrar/#createRegistrantChange
     *
     * @param account The account id
     * @param params Query parameters
     */
    createRegistrantChange: (account: number, data: Partial<{
        domain_id: string | number;
        contact_id: string | number;
        extended_attributes: Record<string, string>;
    }>, params?: QueryParams & {}) => Promise<{
        data: types.RegistrantChange;
    }>;
    /**
     * Retrieves the requirements of a registrant change.
     *
     * POST /{account}/registrar/registrant_changes/check
     *
     * @see https://developer.dnsimple.com/v2/registrar/#checkRegistrantChange
     *
     * @param account The account id
     * @param params Query parameters
     */
    checkRegistrantChange: (account: number, data: Partial<{
        domain_id: string | number;
        contact_id: string | number;
    }>, params?: QueryParams & {}) => Promise<{
        data: types.RegistrantChangeCheck;
    }>;
    /**
     * Retrieves the details of an existing registrant change.
     *
     * GET /{account}/registrar/registrant_changes/{registrantchange}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getRegistrantChange
     *
     * @param account The account id
     * @param registrantchange The registrant change id
     * @param params Query parameters
     */
    getRegistrantChange: (account: number, registrantchange: number, params?: QueryParams & {}) => Promise<{
        data: types.RegistrantChange;
    }>;
    /**
     * Cancel an ongoing registrant change from the account.
     *
     * DELETE /{account}/registrar/registrant_changes/{registrantchange}
     *
     * @see https://developer.dnsimple.com/v2/registrar/#deleteRegistrantChange
     *
     * @param account The account id
     * @param registrantchange The registrant change id
     * @param params Query parameters
     */
    deleteRegistrantChange: (account: number, registrantchange: number, params?: QueryParams & {}) => Promise<{}>;
    /**
     * Gets the transfer lock status for a domain.
     *
     * GET /{account}/registrar/domains/{domain}/transfer_lock
     *
     * @see https://developer.dnsimple.com/v2/registrar/#getDomainTransferLock
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    getDomainTransferLock: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransferLock;
    }>;
    /**
     * Locks the domain to prevent unauthorized transfers.
     *
     * POST /{account}/registrar/domains/{domain}/transfer_lock
     *
     * @see https://developer.dnsimple.com/v2/registrar/#enableDomainTransferLock
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    enableDomainTransferLock: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransferLock;
    }>;
    /**
     * Unlocks the domain to allow domain transfers.
     *
     * DELETE /{account}/registrar/domains/{domain}/transfer_lock
     *
     * @see https://developer.dnsimple.com/v2/registrar/#disableDomainTransferLock
     *
     * @param account The account id
     * @param domain The domain name or id
     * @param params Query parameters
     */
    disableDomainTransferLock: (account: number, domain: string, params?: QueryParams & {}) => Promise<{
        data: types.DomainTransferLock;
    }>;
}
