namecheap/ts/domains-ns.ts

131 lines
3.2 KiB
TypeScript
Raw Normal View History

2025-04-02 15:19:18 +00:00
/**
* Namecheap API Client - Domains Nameservers Module
*/
import { HttpClient } from './http-client.js';
import type {
INsCreateResponse,
INsDeleteResponse,
INsGetInfoResponse,
INsUpdateResponse,
INsInfo
} from './types.js';
export class DomainsNs {
private client: HttpClient;
/**
* Create a new Domains Nameservers API handler
* @param client HTTP client instance
*/
constructor(client: HttpClient) {
this.client = client;
}
/**
* Create a new nameserver
* @param sld Second-level domain
* @param tld Top-level domain
* @param nameserver Nameserver hostname
* @param ip Nameserver IP address
* @returns Success status
*/
async create(sld: string, tld: string, nameserver: string, ip: string): Promise<boolean> {
// Make the API request
const response = await this.client.request<INsCreateResponse>(
'namecheap.domains.ns.create',
{
SLD: sld,
TLD: tld,
Nameserver: nameserver,
IP: ip
}
);
// Check if the operation was successful
return response.ApiResponse.$.Status === 'OK';
}
/**
* Delete a nameserver
* @param sld Second-level domain
* @param tld Top-level domain
* @param nameserver Nameserver hostname
* @returns Success status
*/
async delete(sld: string, tld: string, nameserver: string): Promise<boolean> {
// Make the API request
const response = await this.client.request<INsDeleteResponse>(
'namecheap.domains.ns.delete',
{
SLD: sld,
TLD: tld,
Nameserver: nameserver
}
);
// Check if the operation was successful
return response.ApiResponse.$.Status === 'OK';
}
/**
* Get information about a nameserver
* @param sld Second-level domain
* @param tld Top-level domain
* @param nameserver Nameserver hostname
* @returns Nameserver information
*/
async getInfo(sld: string, tld: string, nameserver: string): Promise<INsInfo> {
// Make the API request
const response = await this.client.request<INsGetInfoResponse>(
'namecheap.domains.ns.getInfo',
{
SLD: sld,
TLD: tld,
Nameserver: nameserver
}
);
// Extract nameserver information from the response
const commandResponse = response.ApiResponse.CommandResponse[0];
const nsInfo = commandResponse.DomainNSInfoResult[0].$;
return {
nameserver: nsInfo.Nameserver,
ip: nsInfo.IP,
statuses: nsInfo.Statuses?.split(',') || []
};
}
/**
* Update a nameserver's IP address
* @param sld Second-level domain
* @param tld Top-level domain
* @param nameserver Nameserver hostname
* @param oldIp Old IP address
* @param newIp New IP address
* @returns Success status
*/
async update(
sld: string,
tld: string,
nameserver: string,
oldIp: string,
newIp: string
): Promise<boolean> {
// Make the API request
const response = await this.client.request<INsUpdateResponse>(
'namecheap.domains.ns.update',
{
SLD: sld,
TLD: tld,
Nameserver: nameserver,
OldIP: oldIp,
IP: newIp
}
);
// Check if the operation was successful
return response.ApiResponse.$.Status === 'OK';
}
}