@xyo-network/xns-record-payload-plugins 3.0.4 → 3.0.6

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.
Files changed (140) hide show
  1. package/dist/browser/DNS/Witness/Config.d.ts +12 -0
  2. package/dist/browser/DNS/Witness/Config.d.ts.map +1 -0
  3. package/dist/browser/DNS/Witness/Params.d.ts +5 -0
  4. package/dist/browser/DNS/Witness/Params.d.ts.map +1 -0
  5. package/dist/browser/DNS/Witness/Payload/Payload.d.ts +4 -0
  6. package/dist/browser/DNS/Witness/Payload/Payload.d.ts.map +1 -0
  7. package/dist/browser/DNS/Witness/Payload/Request.d.ts +9 -0
  8. package/dist/browser/DNS/Witness/Payload/Request.d.ts.map +1 -0
  9. package/dist/browser/DNS/Witness/Payload/Response.d.ts +8 -0
  10. package/dist/browser/DNS/Witness/Payload/Response.d.ts.map +1 -0
  11. package/dist/browser/DNS/Witness/Payload/index.d.ts +4 -0
  12. package/dist/browser/DNS/Witness/Payload/index.d.ts.map +1 -0
  13. package/dist/browser/DNS/Witness/Schema.d.ts +3 -0
  14. package/dist/browser/DNS/Witness/Schema.d.ts.map +1 -0
  15. package/dist/browser/DNS/Witness/index.d.ts +5 -0
  16. package/dist/browser/DNS/Witness/index.d.ts.map +1 -0
  17. package/dist/browser/DNS/index.d.ts +3 -0
  18. package/dist/browser/DNS/index.d.ts.map +1 -0
  19. package/dist/browser/DNS/types/Answer.d.ts +5 -0
  20. package/dist/browser/DNS/types/Answer.d.ts.map +1 -0
  21. package/dist/browser/DNS/types/Header.d.ts +38 -0
  22. package/dist/browser/DNS/types/Header.d.ts.map +1 -0
  23. package/dist/browser/DNS/types/OperationCodes.d.ts +4 -0
  24. package/dist/browser/DNS/types/OperationCodes.d.ts.map +1 -0
  25. package/dist/browser/DNS/types/Record.d.ts +8 -0
  26. package/dist/browser/DNS/types/Record.d.ts.map +1 -0
  27. package/dist/browser/DNS/types/Request.d.ts +13 -0
  28. package/dist/browser/DNS/types/Request.d.ts.map +1 -0
  29. package/dist/browser/DNS/types/ResourceRecord.d.ts +5 -0
  30. package/dist/browser/DNS/types/ResourceRecord.d.ts.map +1 -0
  31. package/dist/browser/DNS/types/Response.d.ts +11 -0
  32. package/dist/browser/DNS/types/Response.d.ts.map +1 -0
  33. package/dist/browser/DNS/types/ResponseCodes.d.ts +4 -0
  34. package/dist/browser/DNS/types/ResponseCodes.d.ts.map +1 -0
  35. package/dist/browser/DNS/types/index.d.ts +9 -0
  36. package/dist/browser/DNS/types/index.d.ts.map +1 -0
  37. package/dist/browser/index.d.ts +1 -0
  38. package/dist/browser/index.d.ts.map +1 -1
  39. package/dist/browser/index.mjs +341 -19
  40. package/dist/browser/index.mjs.map +1 -1
  41. package/dist/neutral/DNS/Witness/Config.d.ts +12 -0
  42. package/dist/neutral/DNS/Witness/Config.d.ts.map +1 -0
  43. package/dist/neutral/DNS/Witness/Params.d.ts +5 -0
  44. package/dist/neutral/DNS/Witness/Params.d.ts.map +1 -0
  45. package/dist/neutral/DNS/Witness/Payload/Payload.d.ts +4 -0
  46. package/dist/neutral/DNS/Witness/Payload/Payload.d.ts.map +1 -0
  47. package/dist/neutral/DNS/Witness/Payload/Request.d.ts +9 -0
  48. package/dist/neutral/DNS/Witness/Payload/Request.d.ts.map +1 -0
  49. package/dist/neutral/DNS/Witness/Payload/Response.d.ts +8 -0
  50. package/dist/neutral/DNS/Witness/Payload/Response.d.ts.map +1 -0
  51. package/dist/neutral/DNS/Witness/Payload/index.d.ts +4 -0
  52. package/dist/neutral/DNS/Witness/Payload/index.d.ts.map +1 -0
  53. package/dist/neutral/DNS/Witness/Schema.d.ts +3 -0
  54. package/dist/neutral/DNS/Witness/Schema.d.ts.map +1 -0
  55. package/dist/neutral/DNS/Witness/index.d.ts +5 -0
  56. package/dist/neutral/DNS/Witness/index.d.ts.map +1 -0
  57. package/dist/neutral/DNS/index.d.ts +3 -0
  58. package/dist/neutral/DNS/index.d.ts.map +1 -0
  59. package/dist/neutral/DNS/types/Answer.d.ts +5 -0
  60. package/dist/neutral/DNS/types/Answer.d.ts.map +1 -0
  61. package/dist/neutral/DNS/types/Header.d.ts +38 -0
  62. package/dist/neutral/DNS/types/Header.d.ts.map +1 -0
  63. package/dist/neutral/DNS/types/OperationCodes.d.ts +4 -0
  64. package/dist/neutral/DNS/types/OperationCodes.d.ts.map +1 -0
  65. package/dist/neutral/DNS/types/Record.d.ts +8 -0
  66. package/dist/neutral/DNS/types/Record.d.ts.map +1 -0
  67. package/dist/neutral/DNS/types/Request.d.ts +13 -0
  68. package/dist/neutral/DNS/types/Request.d.ts.map +1 -0
  69. package/dist/neutral/DNS/types/ResourceRecord.d.ts +5 -0
  70. package/dist/neutral/DNS/types/ResourceRecord.d.ts.map +1 -0
  71. package/dist/neutral/DNS/types/Response.d.ts +11 -0
  72. package/dist/neutral/DNS/types/Response.d.ts.map +1 -0
  73. package/dist/neutral/DNS/types/ResponseCodes.d.ts +4 -0
  74. package/dist/neutral/DNS/types/ResponseCodes.d.ts.map +1 -0
  75. package/dist/neutral/DNS/types/index.d.ts +9 -0
  76. package/dist/neutral/DNS/types/index.d.ts.map +1 -0
  77. package/dist/neutral/index.d.ts +1 -0
  78. package/dist/neutral/index.d.ts.map +1 -1
  79. package/dist/neutral/index.mjs +341 -19
  80. package/dist/neutral/index.mjs.map +1 -1
  81. package/dist/node/DNS/Witness/Config.d.ts +12 -0
  82. package/dist/node/DNS/Witness/Config.d.ts.map +1 -0
  83. package/dist/node/DNS/Witness/Params.d.ts +5 -0
  84. package/dist/node/DNS/Witness/Params.d.ts.map +1 -0
  85. package/dist/node/DNS/Witness/Payload/Payload.d.ts +4 -0
  86. package/dist/node/DNS/Witness/Payload/Payload.d.ts.map +1 -0
  87. package/dist/node/DNS/Witness/Payload/Request.d.ts +9 -0
  88. package/dist/node/DNS/Witness/Payload/Request.d.ts.map +1 -0
  89. package/dist/node/DNS/Witness/Payload/Response.d.ts +8 -0
  90. package/dist/node/DNS/Witness/Payload/Response.d.ts.map +1 -0
  91. package/dist/node/DNS/Witness/Payload/index.d.ts +4 -0
  92. package/dist/node/DNS/Witness/Payload/index.d.ts.map +1 -0
  93. package/dist/node/DNS/Witness/Schema.d.ts +3 -0
  94. package/dist/node/DNS/Witness/Schema.d.ts.map +1 -0
  95. package/dist/node/DNS/Witness/index.d.ts +5 -0
  96. package/dist/node/DNS/Witness/index.d.ts.map +1 -0
  97. package/dist/node/DNS/index.d.ts +3 -0
  98. package/dist/node/DNS/index.d.ts.map +1 -0
  99. package/dist/node/DNS/types/Answer.d.ts +5 -0
  100. package/dist/node/DNS/types/Answer.d.ts.map +1 -0
  101. package/dist/node/DNS/types/Header.d.ts +38 -0
  102. package/dist/node/DNS/types/Header.d.ts.map +1 -0
  103. package/dist/node/DNS/types/OperationCodes.d.ts +4 -0
  104. package/dist/node/DNS/types/OperationCodes.d.ts.map +1 -0
  105. package/dist/node/DNS/types/Record.d.ts +8 -0
  106. package/dist/node/DNS/types/Record.d.ts.map +1 -0
  107. package/dist/node/DNS/types/Request.d.ts +13 -0
  108. package/dist/node/DNS/types/Request.d.ts.map +1 -0
  109. package/dist/node/DNS/types/ResourceRecord.d.ts +5 -0
  110. package/dist/node/DNS/types/ResourceRecord.d.ts.map +1 -0
  111. package/dist/node/DNS/types/Response.d.ts +11 -0
  112. package/dist/node/DNS/types/Response.d.ts.map +1 -0
  113. package/dist/node/DNS/types/ResponseCodes.d.ts +4 -0
  114. package/dist/node/DNS/types/ResponseCodes.d.ts.map +1 -0
  115. package/dist/node/DNS/types/index.d.ts +9 -0
  116. package/dist/node/DNS/types/index.d.ts.map +1 -0
  117. package/dist/node/index.d.ts +1 -0
  118. package/dist/node/index.d.ts.map +1 -1
  119. package/dist/node/index.mjs +341 -19
  120. package/dist/node/index.mjs.map +1 -1
  121. package/package.json +10 -8
  122. package/src/DNS/Witness/Config.ts +24 -0
  123. package/src/DNS/Witness/Params.ts +6 -0
  124. package/src/DNS/Witness/Payload/Payload.ts +4 -0
  125. package/src/DNS/Witness/Payload/Request.ts +40 -0
  126. package/src/DNS/Witness/Payload/Response.ts +29 -0
  127. package/src/DNS/Witness/Payload/index.ts +3 -0
  128. package/src/DNS/Witness/Schema.ts +2 -0
  129. package/src/DNS/Witness/index.ts +4 -0
  130. package/src/DNS/index.ts +2 -0
  131. package/src/DNS/types/Answer.ts +5 -0
  132. package/src/DNS/types/Header.ts +95 -0
  133. package/src/DNS/types/OperationCodes.ts +13 -0
  134. package/src/DNS/types/Record.ts +9 -0
  135. package/src/DNS/types/Request.ts +38 -0
  136. package/src/DNS/types/ResourceRecord.ts +229 -0
  137. package/src/DNS/types/Response.ts +12 -0
  138. package/src/DNS/types/ResponseCodes.ts +34 -0
  139. package/src/DNS/types/index.ts +8 -0
  140. package/src/index.ts +1 -0
@@ -0,0 +1,40 @@
1
+ import type { PayloadWithSources } from '@xyo-network/payload-model'
2
+ import {
3
+ isPayloadOfSchemaType,
4
+ isPayloadOfSchemaTypeWithMeta,
5
+ isPayloadOfSchemaTypeWithSources,
6
+ } from '@xyo-network/payload-model'
7
+
8
+ import type { DNSRequestFields, DNSResourceRecordTypeValue } from '../../types/index.ts'
9
+ import { DNSResourceRecordTypes, getRequestFor } from '../../types/index.ts'
10
+ import { DNSSchema } from '../Schema.ts'
11
+
12
+ /**
13
+ * The fields of a DNSRequest payload
14
+ */
15
+ export type DNSRequest = PayloadWithSources<DNSRequestFields, DNSSchema>
16
+
17
+ /**
18
+ * Identity function for determining if an object is a DNSRequest payload
19
+ */
20
+ export const isDNSRequest = isPayloadOfSchemaType<DNSRequest>(DNSSchema)
21
+
22
+ /**
23
+ * Identity function for determining if an object is a DNSRequest payload with sources
24
+ */
25
+ export const isDNSRequestWithSources = isPayloadOfSchemaTypeWithSources<DNSRequest>(DNSSchema)
26
+
27
+ /**
28
+ * Identity function for determining if an object is a DNSRequest payload with meta
29
+ */
30
+ export const isDNSRequestWithMeta = isPayloadOfSchemaTypeWithMeta<DNSRequest>(DNSSchema)
31
+
32
+ /**
33
+ * Helper for generating a DNSRequest payload for a given domain and record type
34
+ * @param domain The domain to query
35
+ * @param type The record type to query
36
+ * @returns A DNSRequest payload
37
+ */
38
+ export const getDnsRequestFor = (domain: string, type: DNSResourceRecordTypeValue = DNSResourceRecordTypes.A): DNSRequest => {
39
+ return { ...getRequestFor(domain, type), schema: DNSSchema }
40
+ }
@@ -0,0 +1,29 @@
1
+ import type { PayloadWithSources } from '@xyo-network/payload-model'
2
+ import {
3
+ isPayloadOfSchemaType,
4
+ isPayloadOfSchemaTypeWithMeta,
5
+ isPayloadOfSchemaTypeWithSources,
6
+ } from '@xyo-network/payload-model'
7
+
8
+ import type { DNSResponseFields } from '../../types/index.ts'
9
+ import { DNSSchema } from '../Schema.ts'
10
+
11
+ /**
12
+ * The fields of a DNSResponse payload
13
+ */
14
+ export type DNSResponse = PayloadWithSources<DNSResponseFields, DNSSchema>
15
+
16
+ /**
17
+ * Identity function for determining if an object is a DNSResponse payload
18
+ */
19
+ export const isDNSResponse = isPayloadOfSchemaType<DNSResponse>(DNSSchema)
20
+
21
+ /**
22
+ * Identity function for determining if an object is a DNSResponse payload with sources
23
+ */
24
+ export const isDNSResponseWithSources = isPayloadOfSchemaTypeWithSources<DNSResponse>(DNSSchema)
25
+
26
+ /**
27
+ * Identity function for determining if an object is a DNSResponse payload with meta
28
+ */
29
+ export const isDNSResponseWithMeta = isPayloadOfSchemaTypeWithMeta<DNSResponse>(DNSSchema)
@@ -0,0 +1,3 @@
1
+ export * from './Payload.ts'
2
+ export * from './Request.ts'
3
+ export * from './Response.ts'
@@ -0,0 +1,2 @@
1
+ export type DNSSchema = 'network.xyo.dns'
2
+ export const DNSSchema: DNSSchema = 'network.xyo.dns'
@@ -0,0 +1,4 @@
1
+ export * from './Config.ts'
2
+ export * from './Params.ts'
3
+ export * from './Payload/index.ts'
4
+ export * from './Schema.ts'
@@ -0,0 +1,2 @@
1
+ export * from './types/index.ts'
2
+ export * from './Witness/index.ts'
@@ -0,0 +1,5 @@
1
+ import type { DNSRecord } from './Record.ts'
2
+
3
+ export interface DNSAnswer extends DNSRecord {
4
+ class?: number // The class (typically 1 for IN - Internet)
5
+ }
@@ -0,0 +1,95 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+
3
+ // An attempt to match compatibility with the RFC 8427 (Representing DNS Messages in JSON)
4
+ // https://www.rfc-editor.org/rfc/rfc8427
5
+ // and Google/CloudFlare's DNS over HTTPS (DoH) standard
6
+ // https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
7
+
8
+ import { type DNSQueryOpcode, DNSQueryOpcodes } from './OperationCodes.ts'
9
+ import type { DNSRcode } from './ResponseCodes.ts'
10
+ import { DNSRcodes } from './ResponseCodes.ts'
11
+
12
+ // NOTE: The RFC says `Boolean` but uses 0/1 for the values. DNS over HTTPS (DoH) uses `true`/`false`.
13
+ export type NumericBoolean = 0 | 1 | true | false
14
+ export type NumericBooleanFalsy = 0 | false
15
+ export type NumericBooleanTruthy = 1 | true
16
+
17
+ export interface DNSHeader {
18
+ /**
19
+ * Transaction ID, typically a random number. Integer whose value is 0 to 65535
20
+ */
21
+ ID?: number
22
+ /**
23
+ * Query/Response Flag (0 = Query, 1 = Response)
24
+ */
25
+ QR?: NumericBoolean
26
+ /**
27
+ * Operation Code (0 for standard query)
28
+ */
29
+ Opcode?: DNSQueryOpcode
30
+ /**
31
+ * Authoritative Answer (set in response)
32
+ */
33
+ AA?: NumericBoolean
34
+ /**
35
+ * Truncated Flag
36
+ */
37
+ TC?: NumericBoolean // Truncation
38
+ /**
39
+ * Recursion Desired
40
+ */
41
+ RD?: NumericBoolean // Recursion Desired (set in query)
42
+ /**
43
+ * Response Code (0 for no error, non-0 for errors)
44
+ */
45
+ RCODE?: DNSRcode
46
+ /**
47
+ * Number of questions in the query (usually 1)
48
+ */
49
+ QDCOUNT?: number
50
+ /**
51
+ * Number of answer records in the response
52
+ */
53
+ ANCOUNT?: number
54
+ /**
55
+ * Number of authority records in the response
56
+ */
57
+ NSCOUNT?: number
58
+ /**
59
+ * Number of additional records in the response
60
+ */
61
+ ARCOUNT?: number
62
+ }
63
+
64
+ export interface DNSRequestHeader extends DNSHeader {
65
+ QR: NumericBooleanFalsy // Query/Response Flag (0 = Query)
66
+ Opcode: DNSQueryOpcode // Operation Code (0 for standard query)
67
+ AA: NumericBooleanFalsy // Authoritative Answer (0 in query)
68
+ TC: NumericBooleanFalsy // Truncation (0 for non-truncated)
69
+ RCODE: typeof DNSRcodes.NOERROR // Response Code (always 0 in query)
70
+ ANCOUNT: 0 // Number of answer records (always 0 in query)
71
+ NSCOUNT: 0 // Number of authority records (always 0 in query)
72
+ ARCOUNT: 0 // Number of additional records (always 0 in query)
73
+ }
74
+
75
+ export const StandardRequestHeader: Readonly<DNSRequestHeader> = {
76
+ ID: 0,
77
+ QR: 0, // Query/Response Flag (0 = Query)
78
+ Opcode: DNSQueryOpcodes.QUERY, // Operation Code (0 for standard query)
79
+ AA: 0, // Authoritative Answer (0 in query)
80
+ TC: 0, // Truncation (0 for non-truncated)
81
+ RD: 1, // Recursion Desired (1 if recursion is requested)
82
+ RCODE: DNSRcodes.NOERROR, // Response Code (always 0 in query)
83
+ QDCOUNT: 1,
84
+ ANCOUNT: 0,
85
+ NSCOUNT: 0,
86
+ ARCOUNT: 0,
87
+ }
88
+
89
+ export interface DNSResponseHeader extends DNSHeader {
90
+ QR: NumericBooleanTruthy // Query/Response Flag (1 = Response)
91
+ Opcode: DNSQueryOpcode // Operation Code (0 for standard query)
92
+ AA: NumericBoolean // Authoritative Answer (1 if the response is authoritative)
93
+ TC: NumericBoolean // Truncation (1 if the message is truncated)
94
+ RA: NumericBoolean // Recursion Available (1 if the server supports recursion)
95
+ }
@@ -0,0 +1,13 @@
1
+ export type DNSQueryOpcode = 0 | 1 | 2 | 4 | 5 | 6 // Supported opcodes as numeric values
2
+
3
+ // Optional: Add a more descriptive union type for the opcodes.
4
+ export type DNSQueryOpcodeName = 'QUERY' | 'IQUERY' | 'STATUS' | 'NOTIFY' | 'UPDATE' | 'DSO'
5
+
6
+ export const DNSQueryOpcodes: Record<DNSQueryOpcodeName, DNSQueryOpcode> = {
7
+ QUERY: 0,
8
+ IQUERY: 1,
9
+ STATUS: 2,
10
+ NOTIFY: 4,
11
+ UPDATE: 5,
12
+ DSO: 6,
13
+ }
@@ -0,0 +1,9 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+ import type { DNSResourceRecordTypeValue } from './ResourceRecord.ts'
3
+
4
+ export interface DNSRecord {
5
+ name: string // The domain name that was queried
6
+ type: DNSResourceRecordTypeValue // The record type (e.g., 1 for A record)
7
+ TTL: number // Time to Live (how long the record can be cached)
8
+ data: string // The actual data, such as an IP address or TXT record
9
+ }
@@ -0,0 +1,38 @@
1
+ /* eslint-disable @typescript-eslint/member-ordering */
2
+ import { type DNSRequestHeader, StandardRequestHeader } from './Header.ts'
3
+ import type { DNSResourceRecordTypeValue } from './ResourceRecord.ts'
4
+ import { DNSResourceRecordTypes } from './ResourceRecord.ts'
5
+
6
+ export interface DNSQuestion {
7
+ name: string // The domain name that was queried
8
+ type: DNSResourceRecordTypeValue // The record type (e.g., 1 for A record)
9
+ class?: number // Query Class (typically 1 for IN - Internet)
10
+ }
11
+
12
+ export interface DNSRequestFields extends DNSRequestHeader {
13
+ Question: DNSQuestion[]
14
+ }
15
+
16
+ /**
17
+ * Helper for generating a DNS request for a given domain and record type
18
+ * @param domain The domain to query
19
+ * @param type The record type to query
20
+ * @returns A DNS request
21
+ */
22
+ export const getRequestFor = (domain: string, type: DNSResourceRecordTypeValue = DNSResourceRecordTypes.A): DNSRequestFields => {
23
+ return {
24
+ ...StandardRequestHeader,
25
+ ID: getRandomId(),
26
+ Question: [{
27
+ name: domain, type, class: 1,
28
+ }],
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Used to generate a random ID for a DNS request
34
+ * @returns A random number between 0 and 65,535
35
+ */
36
+ export const getRandomId = (): number => {
37
+ return Math.floor(Math.random() * 65_536) // Math.random() generates a number between 0 and 1, multiply by 65536 to get the range 0-65535
38
+ }
@@ -0,0 +1,229 @@
1
+ // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4
2
+
3
+ export type DNSResourceRecordType =
4
+ | 'A'
5
+ | 'NS'
6
+ | 'MD'
7
+ | 'MF'
8
+ | 'CNAME'
9
+ | 'SOA'
10
+ | 'MB'
11
+ | 'MG'
12
+ | 'MR'
13
+ | 'NULL'
14
+ | 'WKS'
15
+ | 'PTR'
16
+ | 'HINFO'
17
+ | 'MINFO'
18
+ | 'MX'
19
+ | 'TXT'
20
+ | 'RP'
21
+ | 'AFSDB'
22
+ | 'X25'
23
+ | 'ISDN'
24
+ | 'RT'
25
+ | 'NSAP'
26
+ | 'NSAP-PTR'
27
+ | 'SIG'
28
+ | 'KEY'
29
+ | 'PX'
30
+ | 'GPOS'
31
+ | 'AAAA'
32
+ | 'LOC'
33
+ | 'NXT'
34
+ | 'EID'
35
+ | 'NIMLOC'
36
+ | 'SRV'
37
+ | 'ATMA'
38
+ | 'NAPTR'
39
+ | 'KX'
40
+ | 'CERT'
41
+ | 'A6'
42
+ | 'DNAME'
43
+ | 'SINK'
44
+ | 'OPT'
45
+ | 'APL'
46
+ | 'DS'
47
+ | 'SSHFP'
48
+ | 'IPSECKEY'
49
+ | 'RRSIG'
50
+ | 'NSEC'
51
+ | 'DNSKEY'
52
+ | 'DHCID'
53
+ | 'NSEC3'
54
+ | 'NSEC3PARAM'
55
+ | 'TLSA'
56
+ | 'SMIMEA'
57
+ | 'HIP'
58
+ | 'NINFO'
59
+ | 'RKEY'
60
+ | 'TALINK'
61
+ | 'CDS'
62
+ | 'CDNSKEY'
63
+ | 'OPENPGPKEY'
64
+ | 'CSYNC'
65
+ | 'ZONEMD'
66
+ | 'SVCB'
67
+ | 'HTTPS'
68
+ | 'SPF'
69
+ | 'UINFO'
70
+ | 'UID'
71
+ | 'GID'
72
+ | 'UNSPEC'
73
+ | 'NID'
74
+ | 'L32'
75
+ | 'L64'
76
+ | 'LP'
77
+ | 'EUI48'
78
+ | 'EUI64'
79
+ | 'NXNAME'
80
+ | 'TKEY'
81
+ | 'TSIG'
82
+ | 'IXFR'
83
+ | 'AXFR'
84
+ | 'MAILB'
85
+ | 'MAILA'
86
+ | '*'
87
+ | 'URI'
88
+ | 'CAA'
89
+ | 'AVC'
90
+ | 'DOA'
91
+ | 'AMTRELAY'
92
+ | 'RESINFO'
93
+ | 'WALLET'
94
+ | 'CLA'
95
+ | 'IPN'
96
+ | 'TA'
97
+ | 'DLV'
98
+ // NOTE: Custom types here
99
+ | 'XYOA'
100
+ | 'XYOH'
101
+
102
+ export const DNSResourceRecordTypes: Readonly<Record<DNSResourceRecordType, number>> = {
103
+ 'A': 1, // a host address
104
+ 'NS': 2, // an authoritative name server
105
+ 'MD': 3, // a mail destination (OBSOLETE - use MX)
106
+ 'MF': 4, // a mail forwarder (OBSOLETE - use MX)
107
+ 'CNAME': 5, // the canonical name for an alias
108
+ 'SOA': 6, // marks the start of a zone of authority
109
+ 'MB': 7, // a mailbox domain name (EXPERIMENTAL)
110
+ 'MG': 8, // a mail group member (EXPERIMENTAL)
111
+ 'MR': 9, // a mail rename domain name (EXPERIMENTAL)
112
+ 'NULL': 10, // a null RR (EXPERIMENTAL)
113
+ 'WKS': 11, // a well known service description
114
+ 'PTR': 12, // a domain name pointer
115
+ 'HINFO': 13, // host information
116
+ 'MINFO': 14, // mailbox or mail list information
117
+ 'MX': 15, // mail exchange
118
+ 'TXT': 16, // text strings
119
+ 'RP': 17, // for Responsible Person
120
+ 'AFSDB': 18, // for AFS Data Base location
121
+ 'X25': 19, // for X.25 PSDN address
122
+ 'ISDN': 20, // for ISDN address
123
+ 'RT': 21, // for Route Through
124
+ 'NSAP': 22, // for NSAP address, NSAP style A record (DEPRECATED)
125
+ 'NSAP-PTR': 23, // for domain name pointer, NSAP style (DEPRECATED)
126
+ 'SIG': 24, // for security signature
127
+ 'KEY': 25, // for security key
128
+ 'PX': 26, // X.400 mail mapping information
129
+ 'GPOS': 27, // Geographical Position
130
+ 'AAAA': 28, // IP6 Address
131
+ 'LOC': 29, // Location Information
132
+ 'NXT': 30, // Next Domain (OBSOLETE)
133
+ 'EID': 31, // Endpoint Identifier
134
+ 'NIMLOC': 32, // Nimrod Locator
135
+ 'SRV': 33, // Server Selection
136
+ 'ATMA': 34, // ATM Address
137
+ 'NAPTR': 35, // Naming Authority Pointer
138
+ 'KX': 36, // Key Exchanger
139
+ 'CERT': 37, // CERT
140
+ 'A6': 38, // A6 (OBSOLETE - use AAAA)
141
+ 'DNAME': 39, // DNAME
142
+ 'SINK': 40, // SINK
143
+ 'OPT': 41, // OPT
144
+ 'APL': 42, // APL
145
+ 'DS': 43, // Delegation Signer
146
+ 'SSHFP': 44, // SSH Key Fingerprint
147
+ 'IPSECKEY': 45, // IPSECKEY
148
+ 'RRSIG': 46, // RRSIG
149
+ 'NSEC': 47, // NSEC
150
+ 'DNSKEY': 48, // DNSKEY
151
+ 'DHCID': 49, // DHCID
152
+ 'NSEC3': 50, // NSEC3
153
+ 'NSEC3PARAM': 51, // NSEC3PARAM
154
+ 'TLSA': 52, // TLSA
155
+ 'SMIMEA': 53, // S/MIME cert association
156
+ 'HIP': 55, // Host Identity Protocol
157
+ 'NINFO': 56, // NINFO
158
+ 'RKEY': 57, // RKEY
159
+ 'TALINK': 58, // Trust Anchor LINK
160
+ 'CDS': 59, // Child DS
161
+ 'CDNSKEY': 60, // DNSKEY(s) the Child wants reflected in DS
162
+ 'OPENPGPKEY': 61, // OpenPGP Key
163
+ 'CSYNC': 62, // Child-To-Parent Synchronization
164
+ 'ZONEMD': 63, // Message Digest Over Zone Data
165
+ 'SVCB': 64, // General-purpose service binding
166
+ 'HTTPS': 65, // SVCB-compatible type for use with HTTP
167
+ 'SPF': 99,
168
+ 'UINFO': 100,
169
+ 'UID': 101,
170
+ 'GID': 102,
171
+ 'UNSPEC': 103,
172
+ 'NID': 104,
173
+ 'L32': 105,
174
+ 'L64': 106,
175
+ 'LP': 107,
176
+ 'EUI48': 108, // an EUI-48 address
177
+ 'EUI64': 109, // an EUI-64 address
178
+ 'NXNAME': 128, // NXDOMAIN indicator for Compact Denial of Existence
179
+ 'TKEY': 249, // Transaction Key
180
+ 'TSIG': 250, // Transaction Signature
181
+ 'IXFR': 251, // incremental transfer
182
+ 'AXFR': 252, // transfer of an entire zone
183
+ 'MAILB': 253, // mailbox-related RRs (MB, MG or MR)
184
+ 'MAILA': 254, // mail agent RRs (OBSOLETE - see MX)
185
+ '*': 255, // A request for some or all records the server has available
186
+ 'URI': 256, // URI
187
+ 'CAA': 257, // Certification Authority Restriction
188
+ 'AVC': 258, // Application Visibility and Control
189
+ 'DOA': 259, // Digital Object Architecture
190
+ 'AMTRELAY': 260, // Automatic Multicast Tunneling Relay
191
+ 'RESINFO': 261, // Resolver Information as Key/Value Pairs
192
+ 'WALLET': 262, // Public wallet address
193
+ 'CLA': 263, // BP Convergence Layer Adapter
194
+ 'IPN': 264, // BP Node Number
195
+ 'TA': 32_768, // DNSSEC Trust Authorities
196
+ 'DLV': 32_769, // DNSSEC Lookaside Validation (OBSOLETE)
197
+
198
+ // NOTE: Custom types here chosen within the Private Use Range
199
+ // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4
200
+ // https://www.rfc-editor.org/rfc/rfc5226
201
+ // as, per the RFC, the Private Use Range is reserved
202
+ // "For private or local use only, with the type and
203
+ // purpose defined by the local site. No attempt is made to
204
+ // prevent multiple sites from using the same value in
205
+ // different (and incompatible) ways. There is no need for
206
+ // IANA to review such assignments (since IANA does not record
207
+ // them) and assignments are not generally useful for broad
208
+ // interoperability. It is the responsibility of the sites
209
+ // making use of the Private Use range to ensure that no
210
+ // conflicts occur (within the intended scope of use)."
211
+ // If we want to apply for a custom reserved code later
212
+ // on, once the usage is proven enough we can absolutely
213
+ // do that.
214
+ 'XYOA': 65_432, // XYO Address
215
+ 'XYOH': 65_433, // XYO Hash
216
+ }
217
+
218
+ export type DNSResourceRecordTypeValue = (typeof DNSResourceRecordTypes)[keyof typeof DNSResourceRecordTypes]
219
+
220
+ export const findDNSResourceRecordTypesByValue = (value: DNSResourceRecordTypeValue): DNSResourceRecordType | undefined => {
221
+ // Iterate through the keys of the record
222
+ for (const key in DNSResourceRecordTypes) {
223
+ const resourceRecordType = key as DNSResourceRecordType
224
+ if (DNSResourceRecordTypes[resourceRecordType] === value) {
225
+ return resourceRecordType // Return the key if the value matches
226
+ }
227
+ }
228
+ return undefined // Return undefined if no matching value is found
229
+ }
@@ -0,0 +1,12 @@
1
+ import type { DNSAnswer } from './Answer.ts'
2
+ import type { DNSResponseHeader } from './Header.ts'
3
+ import type { DNSRecord } from './Record.ts'
4
+ import type { DNSQuestion } from './Request.ts'
5
+
6
+ /* eslint-disable @typescript-eslint/member-ordering */
7
+ export interface DNSResponseFields extends DNSResponseHeader {
8
+ Question: DNSQuestion[] // The questions that were asked
9
+ Answer: DNSAnswer[] // Reusing DNSAnswer for the Answer Section
10
+ Authority?: DNSRecord[]
11
+ Additional?: DNSRecord[]
12
+ }
@@ -0,0 +1,34 @@
1
+ export type DNSRcode = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18
2
+
3
+ export type DNSRcodeName =
4
+ | 'NOERROR'
5
+ | 'FORMERR'
6
+ | 'SERVFAIL'
7
+ | 'NXDOMAIN'
8
+ | 'NOTIMP'
9
+ | 'REFUSED'
10
+ | 'YXDOMAIN'
11
+ | 'YXRRSET'
12
+ | 'NXRRSET'
13
+ | 'NOTAUTH'
14
+ | 'NOTZONE'
15
+ | 'BADSIG'
16
+ | 'BADKEY'
17
+ | 'BADTIME'
18
+
19
+ export const DNSRcodes: Readonly<Record<DNSRcodeName, DNSRcode>> = {
20
+ NOERROR: 0,
21
+ FORMERR: 1,
22
+ SERVFAIL: 2,
23
+ NXDOMAIN: 3,
24
+ NOTIMP: 4,
25
+ REFUSED: 5,
26
+ YXDOMAIN: 6,
27
+ YXRRSET: 7,
28
+ NXRRSET: 8,
29
+ NOTAUTH: 9,
30
+ NOTZONE: 10,
31
+ BADSIG: 16,
32
+ BADKEY: 17,
33
+ BADTIME: 18,
34
+ }
@@ -0,0 +1,8 @@
1
+ export * from './Answer.ts'
2
+ export * from './Header.ts'
3
+ export * from './OperationCodes.ts'
4
+ export * from './Record.ts'
5
+ export * from './Request.ts'
6
+ export * from './ResourceRecord.ts'
7
+ export * from './Response.ts'
8
+ export * from './ResponseCodes.ts'
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './Address/index.ts'
2
2
  export * from './diviner/index.ts'
3
+ export * from './DNS/index.ts'
3
4
  export * from './Domain/index.ts'
4
5
  export * from './DomainRegistration/index.ts'
5
6
  export * from './Duration/index.ts'