declare enum Commands {
    DOMAINS_GET_LIST = "namecheap.domains.getList",
    DOMAINS_GET_CONTACTS = "namecheap.domains.getContacts",
    DOMAINS_CREATE = "namecheap.domains.create",
    DOMAINS_GET_TLD_LIST = "namecheap.domains.getTldList",
    DOMAINS_SET_CONTACTS = "namecheap.domains.setContacts",
    DOMAINS_CHECK = "namecheap.domains.check",
    DOMAINS_REACTIVATE = "namecheap.domains.reactivate",
    DOMAINS_RENEW = "namecheap.domains.renew",
    DOMAINS_GET_REGISTRAR_LOCK = "namecheap.domains.getRegistrarLock",
    DOMAINS_SET_REGISTRAR_LOCK = "namecheap.domains.setRegistrarLock",
    DOMAINS_GET_INFO = "namecheap.domains.getInfo",
    DOMAINS_DNS_SET_DEFAULT = "namecheap.domains.dns.setDefault",
    DOMAINS_DNS_SET_CUSTOM = "namecheap.domains.dns.setCustom",
    DOMAINS_DNS_GET_LIST = "namecheap.domains.dns.getList",
    DOMAINS_DNS_GET_HOSTS = "namecheap.domains.dns.getHosts",
    DOMAINS_DNS_GET_EMAIL_FORWARDING = "namecheap.domains.dns.getEmailForwarding",
    DOMAINS_DNS_SET_EMAIL_FORWARDING = "namecheap.domains.dns.setEmailForwarding",
    DOMAINS_DNS_SET_HOSTS = "namecheap.domains.dns.setHosts",
    DOMAINS_NS_CREATE = "namecheap.domains.ns.create",
    DOMAINS_NS_DELETE = "namecheap.domains.ns.delete",
    DOMAINS_NS_GET_INFO = "namecheap.domains.ns.getInfo",
    DOMAINS_NS_UPDATE = "namecheap.domains.ns.update",
    DOMAINS_TRANSFER_CREATE = "namecheap.domains.transfer.create",
    DOMAINS_TRANSFER_GET_STATUS = "namecheap.domains.transfer.getStatus",
    DOMAINS_TRANSFER_UPDATE_STATUS = "namecheap.domains.transfer.updateStatus",
    DOMAINS_TRANSFER_GET_LIST = "namecheap.domains.transfer.getList",
    SSL_CREATE = "namecheap.ssl.create",
    SSL_GET_LIST = "namecheap.ssl.getList",
    SSL_PARSE_CSR = "namecheap.ssl.parseCSR",
    SSL_GET_APPROVER_EMAIL_LIST = "namecheap.ssl.getApproverEmailList",
    SSL_ACTIVATE = "namecheap.ssl.activate",
    SSL_RESEND_APPROVER_EMAIL = "namecheap.ssl.resendApproverEmail",
    SSL_GET_INFO = "namecheap.ssl.getInfo",
    SSL_RENEW = "namecheap.ssl.renew",
    SSL_REISSUE = "namecheap.ssl.reissue",
    SSL_RESEND_FULFILLMENT_EMAIL = "namecheap.ssl.resendfulfillmentemail",
    SSL_PURCHASE_MORE_SANS = "namecheap.ssl.purchasemoresans",
    SSL_REVOKE_CERTIFICATE = "namecheap.ssl.revokecertificate",
    SSL_EDIT_DCV_METHOD = "namecheap.ssl.editDCVMethod",
    USERS_GET_PRICING = "namecheap.users.getPricing",
    USERS_GET_BALANCES = "namecheap.users.getBalances",
    USERS_CHANGE_PASSWORD = "namecheap.users.changePassword",
    USERS_UPDATE = "namecheap.users.update",
    USERS_CREATE_ADD_FUNDS_REQUEST = "namecheap.users.createaddfundsrequest",
    USERS_GET_ADD_FUNDS_STATUS = "namecheap.users.getAddFundsStatus",
    USERS_CREATE = "namecheap.users.create",
    USERS_LOGIN = "namecheap.users.login",
    USERS_RESET_PASSWORD = "namecheap.users.resetPassword",
    USERS_ADDRESS_CREATE = "namecheap.users.address.create",
    USERS_ADDRESS_DELETE = "namecheap.users.address.delete",
    USERS_ADDRESS_GET_INFO = "namecheap.users.address.getInfo",
    USERS_ADDRESS_GET_LIST = "namecheap.users.address.getList",
    USERS_ADDRESS_SET_DEFAULT = "namecheap.users.address.setDefault",
    USERS_ADDRESS_UPDATE = "namecheap.users.address.update",
    WHO_IS_GUARD_CHANGE_EMAIL_ADDRESS = "Namecheap.Whoisguard.changeemailaddress",
    WHO_IS_GUARD_ENABLE = "Namecheap.Whoisguard.enable",
    WHO_IS_GUARD_DISABLE = "Namecheap.Whoisguard.disable",
    WHO_IS_GUARD_GET_LIST = "Namecheap.Whoisguard.getList",
    WHO_IS_GUARD_RENEW = "Namecheap.Whoisguard.renew"
}
type Command = `${Commands}`;

type Payload = Record<string, string | number>;
interface IResponse<T = any> {
    data: T;
    status: number;
}
type ICheckDomainResponse = IResponse<{
    available: boolean;
    premium: boolean;
}>;
type IRegisterDomainResponse = IResponse<{
    domain: string;
    registered: boolean;
    chargedAmount: number;
    domainID: string;
    orderID: string;
    transactionID: string;
    whoIsGuardEnable: boolean;
    freePositiveSSL: boolean;
    nonRealTimeDomain: boolean;
}>;
type IAddFundsRequestResponse = IResponse<{
    tokenId: string;
    returnURL: string;
    redirectURL: string;
}>;
type IGetFundsStatusResponse = IResponse<{
    status: string;
    amount: number;
}>;
declare enum DomainPriceActions {
    REGISTER = "REGISTER",
    RENEW = "RENEW",
    REACTIVATE = "REACTIVATE",
    TRANSFER = "TRANSFER"
}
type DomainPriceAction = `${DomainPriceActions}`;
type AddFundsRequestPayload = {
    username?: string;
    paymentType: "creditcard";
    amount: number;
    returnURL: string;
};

interface INamecheapConfig {
    apiUser: string;
    apiKey: string;
    username: string;
    clientIp: string;
}
declare class Namecheap {
    private readonly config;
    private readonly apiClient;
    constructor(config: INamecheapConfig, sandbox?: boolean);
    call(command: Command, payload: Payload): Promise<IResponse>;
    checkDomain(domainName: string): Promise<ICheckDomainResponse>;
    getDomainPrice(domainName: string, action: DomainPriceAction): Promise<IResponse<object[]>>;
    registerDomain(payload: Payload): Promise<IRegisterDomainResponse>;
    addFundsRequest(payload: AddFundsRequestPayload): Promise<IAddFundsRequestResponse>;
    getFundsStatus(tokenId: string): Promise<IGetFundsStatusResponse>;
}

export { type AddFundsRequestPayload, type Command, Commands, type DomainPriceAction, DomainPriceActions, type IAddFundsRequestResponse, type ICheckDomainResponse, type IGetFundsStatusResponse, type INamecheapConfig, type IRegisterDomainResponse, type IResponse, type Payload, Namecheap as default };
