@nictool/dns-resource-record 1.3.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +20 -19
- package/lib/tinydns.js +45 -24
- package/package.json +9 -9
- package/rr/a.js +5 -5
- package/rr/aaaa.js +9 -9
- package/rr/apl.js +49 -2
- package/rr/caa.js +26 -23
- package/rr/cert.js +63 -4
- package/rr/cname.js +5 -5
- package/rr/dhcid.js +17 -2
- package/rr/dname.js +5 -5
- package/rr/dnskey.js +14 -8
- package/rr/ds.js +6 -6
- package/rr/hinfo.js +13 -10
- package/rr/hip.js +43 -2
- package/rr/https.js +37 -3
- package/rr/ipseckey.js +16 -16
- package/rr/key.js +34 -3
- package/rr/kx.js +18 -2
- package/rr/loc.js +14 -14
- package/rr/mx.js +5 -5
- package/rr/naptr.js +24 -20
- package/rr/ns.js +5 -5
- package/rr/nsec.js +19 -3
- package/rr/nsec3.js +74 -17
- package/rr/nsec3param.js +62 -12
- package/rr/nxt.js +31 -3
- package/rr/openpgpkey.js +28 -4
- package/rr/ptr.js +5 -5
- package/rr/rp.js +19 -2
- package/rr/rrsig.js +84 -10
- package/rr/sig.js +98 -12
- package/rr/smimea.js +20 -3
- package/rr/soa.js +6 -6
- package/rr/spf.js +3 -3
- package/rr/srv.js +11 -11
- package/rr/sshfp.js +8 -8
- package/rr/svcb.js +41 -3
- package/rr/tlsa.js +8 -8
- package/rr/tsig.js +139 -13
- package/rr/txt.js +10 -11
- package/rr/uri.js +8 -8
- package/rr/wks.js +26 -2
- package/rr.js +52 -7
package/rr.js
CHANGED
|
@@ -4,10 +4,10 @@ export default class RR extends Map {
|
|
|
4
4
|
|
|
5
5
|
if (opts === null) return
|
|
6
6
|
|
|
7
|
-
if (opts
|
|
7
|
+
if (opts?.default) this.default = opts.default
|
|
8
8
|
|
|
9
|
-
if (opts
|
|
10
|
-
if (opts
|
|
9
|
+
if (opts?.bindline) return this.fromBind(opts)
|
|
10
|
+
if (opts?.tinyline) return this.fromTinydns(opts)
|
|
11
11
|
|
|
12
12
|
// tinydns specific
|
|
13
13
|
this.setLocation(opts?.location)
|
|
@@ -21,10 +21,10 @@ export default class RR extends Map {
|
|
|
21
21
|
for (const f of this.getFields('rdata')) {
|
|
22
22
|
const fnName = `set${this.ucFirst(f)}`
|
|
23
23
|
if (this[fnName] === undefined) this.throwHelp(`Missing ${fnName} in class ${this.get('type')}`)
|
|
24
|
-
this[fnName](opts[f])
|
|
24
|
+
this[fnName](opts?.[f])
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
if (opts
|
|
27
|
+
if (opts?.comment) this.set('comment', opts.comment)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
ucFirst(str) {
|
|
@@ -91,7 +91,7 @@ export default class RR extends Map {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
setTtl(t) {
|
|
94
|
-
|
|
94
|
+
t = t ?? this.default?.ttl
|
|
95
95
|
if (t === undefined) {
|
|
96
96
|
if (['SOA', 'SSHPF'].includes(this.get('type'))) return
|
|
97
97
|
this.throwHelp('TTL is required, no default available')
|
|
@@ -157,7 +157,7 @@ export default class RR extends Map {
|
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
getEmpty(prop) {
|
|
160
|
-
return this.get(prop)
|
|
160
|
+
return this.get(prop) ?? ''
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
getComment(prop) {
|
|
@@ -307,6 +307,51 @@ export default class RR extends Map {
|
|
|
307
307
|
)
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
+
compressIPv6(val) {
|
|
311
|
+
// * RFC 5952
|
|
312
|
+
// * 4.1. Leading zeros MUST be suppressed...A single 16-bit 0000 field MUST be represented as 0.
|
|
313
|
+
// * 4.2.1 The use of the symbol "::" MUST be used to its maximum capability.
|
|
314
|
+
// * 4.2.2 The symbol "::" MUST NOT be used to shorten just one 16-bit 0 field.
|
|
315
|
+
// * 4.2.3 When choosing placement of a "::", the longest run...MUST be shortened
|
|
316
|
+
// * 4.3 The characters a-f in an IPv6 address MUST be represented in lowercase.
|
|
317
|
+
|
|
318
|
+
// 4.3 Lowercase and 4.1 remove leading zeros per segment
|
|
319
|
+
const segments = val
|
|
320
|
+
.toLowerCase()
|
|
321
|
+
.split(':')
|
|
322
|
+
.map((s) => s.replace(/^0+/, '') || '0')
|
|
323
|
+
|
|
324
|
+
let bestStart = -1
|
|
325
|
+
let bestLen = 0
|
|
326
|
+
let curStart = -1
|
|
327
|
+
let curLen = 0
|
|
328
|
+
|
|
329
|
+
// 4.2.1 & 4.2.3 Find the longest consecutive run of '0'
|
|
330
|
+
for (let i = 0; i < segments.length; i++) {
|
|
331
|
+
if (segments[i] === '0') {
|
|
332
|
+
if (curStart === -1) curStart = i
|
|
333
|
+
curLen++
|
|
334
|
+
if (curLen > bestLen) {
|
|
335
|
+
bestLen = curLen
|
|
336
|
+
bestStart = curStart
|
|
337
|
+
}
|
|
338
|
+
} else {
|
|
339
|
+
curStart = -1
|
|
340
|
+
curLen = 0
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// 4.2.2 Don't shorten a single 16-bit 0 field
|
|
345
|
+
if (bestLen < 2) {
|
|
346
|
+
return segments.join(':')
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const head = segments.slice(0, bestStart).join(':')
|
|
350
|
+
const tail = segments.slice(bestStart + bestLen).join(':')
|
|
351
|
+
|
|
352
|
+
return `${head}::${tail}`
|
|
353
|
+
}
|
|
354
|
+
|
|
310
355
|
toBind(zone_opts) {
|
|
311
356
|
return `${this.getPrefix(zone_opts)}\t${this.getRdataFields()
|
|
312
357
|
.map((f) => this.getQuoted(f))
|