all repos — dns @ 75ea8f6b6d7595bfab2450f8c2633a2340ac90e0

DNS records for my domains, managed via dnscontrol

helpers.js (view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// @ts-check
/// <reference path="types-dnscontrol.d.ts" />

// 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
 * @param {string} verification
 * @param {string[]} [extras]
 */
function iCloudMail(domain, verification, extras) {
  if (extras == null) {
    extras = []
  }
  return [
    MX('@', 10, 'mx01.mail.icloud.com.'),
    MX('@', 10, 'mx02.mail.icloud.com.'),
    TXT('@', 'apple-domain=' + verification),
    SPF_BUILDER({
      parts: ['v=spf1'].concat(extras).concat('include:icloud.com', '-all'),
    }),
    CNAME('sig1._domainkey', 'sig1.dkim.' + domain + '.at.icloudmailadmin.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)
    })
    : []
  )
}