import axios from "axios"; import https from "https"; import dns from "node:dns"; dns.setDefaultResultOrder("ipv4first"); const API = "vvQjauyYQ2YDY2Au-_DC4QO5MUPFiHNn"; // const SERVER = "https://host.metatronhost.com:8083/api/"; const SERVER = "https://127.0.0.1:8083/api/"; // Ignore self-signed SSL const httpsAgent = new https.Agent({ rejectUnauthorized: false, }); // Generic Hestia API function async function hestia(cmd, args = {}) { const form = new URLSearchParams({ hash: API, cmd, ...args, }); // const res = await axios.post(SERVER, form, { httpsAgent }); const res = await axios.post(SERVER, form, { httpsAgent, family: 4, }); return res.data; } // 1) Fetch raw DNS table (your way) async function getRawDomainList(user) { const form = new URLSearchParams({ hash: API, cmd: "v-list-dns-domains", arg1: user, }); const res = await axios.post(SERVER, form, { httpsAgent, family: 4, }); // const res = await axios.post(SERVER, form, { httpsAgent }); return res.data; // plain text } // 2) Parse domains from the table function parseDomainsFromTable(text) { const lines = text.split("\n"); const domains = []; for (let line of lines) { line = line.trim(); if (!line.includes(".")) continue; if (line.startsWith("DOMAIN")) continue; if (line.startsWith("------")) continue; const parts = line.split(/\s+/); const domain = parts[0]; if (domain && domain.includes(".")) { domains.push(domain); } } return domains; } // 3) Remove SSL async function removeSsl(user, domain) { return hestia("v-delete-web-domain-ssl", { arg1: user, arg2: domain, }); } // 4) Add Let's Encrypt SSL (no email param) async function addLetsEncrypt(user, domain) { // v-add-letsencrypt-domain USER DOMAIN [ALIASES] [MAIL] // Here: generate SSL for domain + www.domain, no mail cert return hestia("v-add-letsencrypt-domain", { arg1: user, arg2: domain, //arg3: `${domain}`, // aliases // no arg4 (MAIL) -> defaults to "no" }); } (async () => { const user = "user"; try { console.log("šŸ” Fetching DNS domain table..."); const table = await getRawDomainList(user); console.log(table); console.log("\nšŸ” Parsing domain names..."); const domains = parseDomainsFromTable(table); console.log("Parsed domains:", domains); if (domains.length === 0) { console.log("āŒ No domains found."); return; } const domain = "test.metatronhost.com"; // or domains[0] if you want auto-pick console.log("\n🟦 Selected domain:", domain); console.log("\nšŸ”§ Removing old SSL..."); console.log(await removeSsl(user, domain)); console.log("\nšŸ” Adding Let's Encrypt SSL..."); console.log(await addLetsEncrypt(user, domain)); console.log("\nāœ… SSL refreshed successfully for:", domain); } catch (err) { console.error("āŒ ERROR:", err.response?.data || err.message || err); } })();