UNPKG

mcp-namecheap

Version:

MCP server for interacting with Namecheap API

218 lines 7.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NamecheapClient = void 0; const axios_1 = __importDefault(require("axios")); class NamecheapClient { axios; apiUser; apiKey; clientIp; constructor(apiKey, apiUser, clientIp, useSandbox = false) { this.apiKey = apiKey; this.apiUser = apiUser; this.clientIp = clientIp; const baseURL = useSandbox ? 'https://api.sandbox.namecheap.com/xml.response' : 'https://api.namecheap.com/xml.response'; this.axios = axios_1.default.create({ baseURL, params: { ApiUser: this.apiUser, ApiKey: this.apiKey, UserName: this.apiUser, ClientIp: this.clientIp, }, }); } parseXmlToJson(xml) { // Simple XML to JSON conversion for Namecheap responses // In production, you might want to use a proper XML parser const jsonStr = xml .replace(/(<\/)([^>]+)(>)/g, '"}$3') .replace(/(<)([^>]+)(>)([^<]+)?/g, '{"$2":"$4"') .replace(/"\s+"/g, '","') .replace(/(<)([^>]+)(>)/g, '{"$2":{') .replace(/}/g, '},') .replace(/,}/g, '}') .replace(/,$/g, ''); try { return JSON.parse(jsonStr); } catch { // Fallback to returning the XML if parsing fails return { raw: xml }; } } async domainsList(options = {}) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.getList', ListType: options.listType || 'ALL', SearchTerm: options.searchTerm || '', Page: options.page || 1, PageSize: options.pageSize || 20, }, }); return this.parseXmlToJson(response.data); } async domainsCheck(params) { const domainList = params.domainList.join(','); const response = await this.axios.get('', { params: { Command: 'namecheap.domains.check', DomainList: domainList, }, }); return this.parseXmlToJson(response.data); } async domainsGetInfo(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.getInfo', DomainName: params.domainName, HostName: params.hostName, }, }); return this.parseXmlToJson(response.data); } async domainsGetContacts(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.getContacts', DomainName: params.domainName, }, }); return this.parseXmlToJson(response.data); } async domainsCreate(params) { const apiParams = { Command: 'namecheap.domains.create', DomainName: params.domainName, Years: params.years, }; // Add all registrant information Object.keys(params).forEach(key => { if (key !== 'domainName' && key !== 'years' && params[key] !== undefined) { // Convert camelCase to PascalCase for API const apiKey = key.charAt(0).toUpperCase() + key.slice(1); apiParams[apiKey] = params[key]; } }); const response = await this.axios.get('', { params: apiParams }); return this.parseXmlToJson(response.data); } async domainsGetTldList(_params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.getTldList', }, }); return this.parseXmlToJson(response.data); } async domainsSetContacts(params) { const apiParams = { Command: 'namecheap.domains.setContacts', DomainName: params.domainName, }; // Add all contact information Object.keys(params).forEach(key => { if (key !== 'domainName' && params[key] !== undefined) { // Convert camelCase to PascalCase for API const apiKey = key.charAt(0).toUpperCase() + key.slice(1); apiParams[apiKey] = params[key]; } }); const response = await this.axios.get('', { params: apiParams }); return this.parseXmlToJson(response.data); } async domainsReactivate(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.reactivate', DomainName: params.domainName, IsPremiumDomain: params.isPremiumDomain, }, }); return this.parseXmlToJson(response.data); } async domainsRenew(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.renew', DomainName: params.domainName, Years: params.years, IsPremiumDomain: params.isPremiumDomain, }, }); return this.parseXmlToJson(response.data); } async domainsGetRegistrarLock(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.getRegistrarLock', DomainName: params.domainName, }, }); return this.parseXmlToJson(response.data); } async domainsSetRegistrarLock(params) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.setRegistrarLock', DomainName: params.domainName, LockAction: params.lockAction, }, }); return this.parseXmlToJson(response.data); } async dnsGetList(sld, tld) { const response = await this.axios.get('', { params: { Command: 'namecheap.domains.dns.getList', SLD: sld, TLD: tld, }, }); return this.parseXmlToJson(response.data); } async dnsSetCustom(sld, tld, nameservers) { const params = { Command: 'namecheap.domains.dns.setCustom', SLD: sld, TLD: tld, }; // Add nameservers nameservers.forEach((ns, index) => { params[`NameServers${index + 1}`] = ns; }); const response = await this.axios.get('', { params }); return this.parseXmlToJson(response.data); } async dnsSetHosts(sld, tld, hosts) { const params = { Command: 'namecheap.domains.dns.setHosts', SLD: sld, TLD: tld, }; // Add host records hosts.forEach((host, index) => { const idx = index + 1; params[`HostName${idx}`] = host.hostname; params[`RecordType${idx}`] = host.recordType; params[`Address${idx}`] = host.address; if (host.mxPriority !== undefined) { params[`MXPref${idx}`] = host.mxPriority; } if (host.ttl !== undefined) { params[`TTL${idx}`] = host.ttl; } }); const response = await this.axios.get('', { params }); return this.parseXmlToJson(response.data); } } exports.NamecheapClient = NamecheapClient; //# sourceMappingURL=namecheap-client.js.map