'use strict'; exports = module.exports = { removePrivateFields, injectPrivateFields, upsert, get, del, wait, verifyDomainConfig }; const assert = require('assert'), BoxError = require('../boxerror.js'), debug = require('debug')('box:dns/manual'), dig = require('../dig.js'), dns = require('../dns.js'), safe = require('safetydance'), waitForDns = require('./waitfordns.js'); function removePrivateFields(domainObject) { return domainObject; } // eslint-disable-next-line no-unused-vars function injectPrivateFields(newConfig, currentConfig) { } async function upsert(domainObject, location, type, values) { assert.strictEqual(typeof domainObject, 'object'); assert.strictEqual(typeof location, 'string'); assert.strictEqual(typeof type, 'string'); assert(Array.isArray(values)); debug('upsert: %s for zone %s of type %s with values %j', location, domainObject.zoneName, type, values); return; } async function get(domainObject, location, type) { assert.strictEqual(typeof domainObject, 'object'); assert.strictEqual(typeof location, 'string'); assert.strictEqual(typeof type, 'string'); return []; // returning ip confuses apptask into thinking the entry already exists } async function del(domainObject, location, type, values) { assert.strictEqual(typeof domainObject, 'object'); assert.strictEqual(typeof location, 'string'); assert.strictEqual(typeof type, 'string'); assert(Array.isArray(values)); return; } async function wait(domainObject, subdomain, type, value, options) { assert.strictEqual(typeof domainObject, 'object'); assert.strictEqual(typeof subdomain, 'string'); assert.strictEqual(typeof type, 'string'); assert.strictEqual(typeof value, 'string'); assert(options && typeof options === 'object'); // { interval: 5000, times: 50000 } const fqdn = dns.fqdn(subdomain, domainObject.domain); await waitForDns(fqdn, domainObject.zoneName, type, value, options); } async function verifyDomainConfig(domainObject) { assert.strictEqual(typeof domainObject, 'object'); const zoneName = domainObject.zoneName; // Very basic check if the nameservers can be fetched const [error, nameservers] = await safe(dig.resolve(zoneName, 'NS', { timeout: 5000 })); if (error && error.code === 'ENOTFOUND') throw new BoxError(BoxError.BAD_FIELD, 'Unable to resolve nameservers for this domain'); if (error || !nameservers) throw new BoxError(BoxError.BAD_FIELD, error ? error.message : 'Unable to get nameservers'); return {}; }