// @ts-check /// // Helpers /** * @param {object} record * @param {string[]} [record.alpn] * @param {string[]} [record.ipv4hint] * @param {string[]} [record.ipv6hint] */ function https(record) { return Object.keys(record) .map(function (key) { return [key, record[key].join(',')].join('=') }) .join(' ') } /** * @param {string} target * @param {string} prefix */ function prefix(target, prefix) { return target === '@' ? prefix : prefix + '.' + target } /** * @param {string} name * @param {string} acmeTarget */ function acmeDelegate(name, acmeTarget) { return CNAME( name === '@' ? '_acme-challenge' : '_acme-challenge.' + name, acmeTarget, TTL('15m'), ) } /** * @param {string[]} sources * @param {string} target * @param {RecordModifier[]} [recordModifiers] */ function bulkCNAME(sources, target, recordModifiers) { return sources.map(function (source) { return CNAME.bind(CNAME, source, target).apply(CNAME, recordModifiers) }) } /** * @param {string} domain * @returns {DomainModifier[]} */ function migaduDKIM(domain) { return [ CNAME('key1._domainkey', 'key1.' + domain + '._domainkey.migadu.com.'), CNAME('key2._domainkey', 'key2.' + domain + '._domainkey.migadu.com.'), CNAME('key3._domainkey', 'key3.' + domain + '._domainkey.migadu.com.'), ] } var migaduMX = [ MX('@', 10, 'aspmx1.migadu.com.'), MX('@', 20, 'aspmx2.migadu.com.'), CNAME('autoconfig', 'autoconfig.migadu.com.'), SRV('_autodiscover._tcp', 443, 0, 1, 'autodiscover.migadu.com.'), SRV('_submissions._tcp', 465, 0, 1, 'smtp.migadu.com.'), SRV('_imaps._tcp', 993, 0, 1, 'imap.migadu.com.'), SRV('_pop3s._tcp', 995, 0, 1, 'pop.migadu.com.') ] /** * @param {string} name * @param {HostConfig} host */ function mkHostRecords(name, host) { return [A(name, host.v4), AAAA(name, host.v6)].concat( host.sshfp ? host.sshfp.map(function (sshfp) { return SSHFP(name, sshfp.algo, sshfp.type, sshfp.fingerprint) }) : [] ) }