const { Etcd3 } = require("etcd3"); const client = new Etcd3({ hosts: 'http://127.0.0.1:2379', }); // Converts a FQDN to a path usable by CoreDNS function DomainToCoreDNS(domain) { const prefix = "/skydns/"; const parts = domain.split("."); if (parts.length < 2) return false; const path = parts.reverse().join("/"); return prefix + path; } // Inverse of DomainToCoreDNS function CoreDNSToDomain(corednsDomain) { corednsDomain = corednsDomain.substring(8); const parts = corednsDomain.split("/"); if (parts.length < 2) return false; const path = parts.reverse().join("."); return path; } async function GetAllRecords(domain) { const prefix = DomainToCoreDNS(domain); if (!prefix) throw new Error("Invalid domain"); const kvs = await client.getAll().prefix(prefix).strings(); return kvs; } async function RegisterNewDomain(domain) { const prefix = DomainToCoreDNS(domain); if (!prefix) throw new Error("Invalid domain"); const key = `${prefix}`; const value = JSON.stringify({ host: '10.66.66.1', ttl: 300 }); await client.put(key).value(value); } module.exports = { CoreDNSToDomain, GetAllRecords, RegisterNewDomain }