n8n-nodes-dns 0.1.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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -0
  3. package/dist/coverage/lcov-report/favicon.png +0 -0
  4. package/dist/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  5. package/dist/package.json +97 -0
  6. package/dist/src/credentials/DnsServerApi.credentials.d.ts +7 -0
  7. package/dist/src/credentials/DnsServerApi.credentials.js +30 -0
  8. package/dist/src/credentials/DnsServerApi.credentials.js.map +1 -0
  9. package/dist/src/credentials/dnsServerApi.svg +4 -0
  10. package/dist/src/nodes/DnsLookup/DnsLookup.node.d.ts +16 -0
  11. package/dist/src/nodes/DnsLookup/DnsLookup.node.js +222 -0
  12. package/dist/src/nodes/DnsLookup/DnsLookup.node.js.map +1 -0
  13. package/dist/src/nodes/DnsLookup/DnsLookup.node.json +33 -0
  14. package/dist/src/nodes/DnsLookup/dnsLookup.svg +4 -0
  15. package/dist/src/nodes/DnsWatch/DnsWatch.node.d.ts +15 -0
  16. package/dist/src/nodes/DnsWatch/DnsWatch.node.js +247 -0
  17. package/dist/src/nodes/DnsWatch/DnsWatch.node.js.map +1 -0
  18. package/dist/src/nodes/DnsWatch/DnsWatch.node.json +26 -0
  19. package/dist/src/nodes/DnsWatch/dnsWatch.svg +4 -0
  20. package/dist/src/nodes/shared/dns-node-helpers.d.ts +43 -0
  21. package/dist/src/nodes/shared/dns-node-helpers.js +133 -0
  22. package/dist/src/nodes/shared/dns-node-helpers.js.map +1 -0
  23. package/dist/src/nodes/shared/dns-node-properties.d.ts +6 -0
  24. package/dist/src/nodes/shared/dns-node-properties.js +139 -0
  25. package/dist/src/nodes/shared/dns-node-properties.js.map +1 -0
  26. package/dist/src/transport/dns-client.d.ts +22 -0
  27. package/dist/src/transport/dns-client.js +168 -0
  28. package/dist/src/transport/dns-client.js.map +1 -0
  29. package/dist/src/transport/dns-packet.d.ts +49 -0
  30. package/dist/src/transport/dns-packet.js +178 -0
  31. package/dist/src/transport/dns-packet.js.map +1 -0
  32. package/dist/src/transport/dns-resolvers.d.ts +18 -0
  33. package/dist/src/transport/dns-resolvers.js +132 -0
  34. package/dist/src/transport/dns-resolvers.js.map +1 -0
  35. package/dist/src/transport/index.d.ts +6 -0
  36. package/dist/src/transport/index.js +21 -0
  37. package/dist/src/transport/index.js.map +1 -0
  38. package/dist/src/utils/authoritative-discovery.d.ts +9 -0
  39. package/dist/src/utils/authoritative-discovery.js +77 -0
  40. package/dist/src/utils/authoritative-discovery.js.map +1 -0
  41. package/dist/src/utils/index.d.ts +8 -0
  42. package/dist/src/utils/index.js +13 -0
  43. package/dist/src/utils/index.js.map +1 -0
  44. package/dist/src/utils/name-compression.d.ts +5 -0
  45. package/dist/src/utils/name-compression.js +63 -0
  46. package/dist/src/utils/name-compression.js.map +1 -0
  47. package/dist/src/utils/record-parsers.d.ts +53 -0
  48. package/dist/src/utils/record-parsers.js +232 -0
  49. package/dist/src/utils/record-parsers.js.map +1 -0
  50. package/dist/src/utils/txt-parsers.d.ts +40 -0
  51. package/dist/src/utils/txt-parsers.js +204 -0
  52. package/dist/src/utils/txt-parsers.js.map +1 -0
  53. package/dist/tsconfig.tsbuildinfo +1 -0
  54. package/package.json +97 -0
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.enrichTxtRecord = enrichTxtRecord;
4
+ const SPF_QUALIFIERS = new Set(['+', '-', '~', '?']);
5
+ const SPF_MECHANISM_TYPES = new Set([
6
+ 'ip4',
7
+ 'ip6',
8
+ 'include',
9
+ 'a',
10
+ 'mx',
11
+ 'all',
12
+ 'redirect',
13
+ 'exists',
14
+ ]);
15
+ const DMARC_ALIGNMENT_MAP = {
16
+ r: 'relaxed',
17
+ s: 'strict',
18
+ };
19
+ function parseSpfToken(token) {
20
+ let qualifier = '+';
21
+ let remainder = token;
22
+ const firstChar = remainder.charAt(0);
23
+ if (SPF_QUALIFIERS.has(firstChar)) {
24
+ qualifier = firstChar;
25
+ remainder = remainder.slice(1);
26
+ }
27
+ if (remainder.startsWith('redirect=')) {
28
+ return { qualifier, type: 'redirect', value: remainder.slice('redirect='.length) };
29
+ }
30
+ const colonIndex = remainder.indexOf(':');
31
+ let mechanismType;
32
+ let value;
33
+ if (colonIndex !== -1) {
34
+ mechanismType = remainder.slice(0, colonIndex);
35
+ value = remainder.slice(colonIndex + 1);
36
+ }
37
+ else {
38
+ mechanismType = remainder;
39
+ value = null;
40
+ }
41
+ if (!SPF_MECHANISM_TYPES.has(mechanismType)) {
42
+ return null;
43
+ }
44
+ return { qualifier, type: mechanismType, value };
45
+ }
46
+ function detectSpf(raw) {
47
+ if (!raw.startsWith('v=spf1') || (raw.length > 6 && raw[6] !== ' ')) {
48
+ return null;
49
+ }
50
+ const body = raw.slice(6).trim();
51
+ if (body === '') {
52
+ return { parsed: { type: 'spf', version: 'spf1', mechanisms: [] } };
53
+ }
54
+ const tokens = body.split(/\s+/);
55
+ const mechanisms = [];
56
+ for (const token of tokens) {
57
+ const mechanism = parseSpfToken(token);
58
+ if (mechanism === null) {
59
+ return { parsed: null, parseError: `Unrecognized SPF mechanism: ${token}` };
60
+ }
61
+ mechanisms.push(mechanism);
62
+ }
63
+ return { parsed: { type: 'spf', version: 'spf1', mechanisms } };
64
+ }
65
+ function parseTagValue(pair) {
66
+ const equalsIndex = pair.indexOf('=');
67
+ if (equalsIndex === -1) {
68
+ return null;
69
+ }
70
+ return {
71
+ tag: pair.slice(0, equalsIndex).trim(),
72
+ value: pair.slice(equalsIndex + 1).trim(),
73
+ };
74
+ }
75
+ function splitUriList(value) {
76
+ return value.split(',').map((uri) => uri.trim());
77
+ }
78
+ function resolveAlignment(value) {
79
+ var _a;
80
+ if (value === undefined) {
81
+ return 'relaxed';
82
+ }
83
+ return (_a = DMARC_ALIGNMENT_MAP[value]) !== null && _a !== void 0 ? _a : 'relaxed';
84
+ }
85
+ function detectDmarc(raw) {
86
+ var _a;
87
+ if (!raw.startsWith('v=DMARC1') || (raw.length > 8 && raw[8] !== ';' && raw[8] !== ' ')) {
88
+ return null;
89
+ }
90
+ const pairs = raw.split(';').slice(1);
91
+ const tags = new Map();
92
+ for (const pair of pairs) {
93
+ const trimmed = pair.trim();
94
+ if (trimmed === '') {
95
+ continue;
96
+ }
97
+ const parsed = parseTagValue(trimmed);
98
+ if (parsed !== null) {
99
+ tags.set(parsed.tag, parsed.value);
100
+ }
101
+ }
102
+ const policy = tags.get('p');
103
+ if (policy === undefined) {
104
+ return { parsed: null, parseError: 'DMARC record missing required p (policy) tag' };
105
+ }
106
+ const rawPercentage = tags.get('pct');
107
+ let percentage = 100;
108
+ if (rawPercentage !== undefined) {
109
+ percentage = parseInt(rawPercentage, 10);
110
+ if (isNaN(percentage)) {
111
+ return {
112
+ parsed: null,
113
+ parseError: `DMARC pct tag is not a valid number: ${rawPercentage}`,
114
+ };
115
+ }
116
+ }
117
+ return {
118
+ parsed: {
119
+ type: 'dmarc',
120
+ version: 'DMARC1',
121
+ policy,
122
+ subdomainPolicy: (_a = tags.get('sp')) !== null && _a !== void 0 ? _a : null,
123
+ percentage,
124
+ reportAggregate: tags.has('rua') ? splitUriList(tags.get('rua')) : [],
125
+ reportForensic: tags.has('ruf') ? splitUriList(tags.get('ruf')) : [],
126
+ alignmentDkim: resolveAlignment(tags.get('adkim')),
127
+ alignmentSpf: resolveAlignment(tags.get('aspf')),
128
+ },
129
+ };
130
+ }
131
+ function splitColonList(value) {
132
+ return value.split(':').map((item) => item.trim());
133
+ }
134
+ function detectDkim(raw) {
135
+ var _a;
136
+ if (!raw.startsWith('v=DKIM1') || (raw.length > 7 && raw[7] !== ';' && raw[7] !== ' ')) {
137
+ return null;
138
+ }
139
+ const pairs = raw.split(';').slice(1);
140
+ const tags = new Map();
141
+ for (const pair of pairs) {
142
+ const trimmed = pair.trim();
143
+ if (trimmed === '') {
144
+ continue;
145
+ }
146
+ const parsed = parseTagValue(trimmed);
147
+ if (parsed !== null) {
148
+ tags.set(parsed.tag, parsed.value);
149
+ }
150
+ }
151
+ const publicKey = tags.get('p');
152
+ if (publicKey === undefined) {
153
+ return { parsed: null, parseError: 'DKIM record missing required p (public key) tag' };
154
+ }
155
+ return {
156
+ parsed: {
157
+ type: 'dkim',
158
+ version: 'DKIM1',
159
+ keyType: (_a = tags.get('k')) !== null && _a !== void 0 ? _a : 'rsa',
160
+ publicKey: publicKey.replace(/\s+/g, ''),
161
+ hashAlgorithms: tags.has('h') ? splitColonList(tags.get('h')) : ['sha256'],
162
+ serviceTypes: tags.has('s') ? splitColonList(tags.get('s')) : ['*'],
163
+ flags: tags.has('t') ? splitColonList(tags.get('t')) : [],
164
+ },
165
+ };
166
+ }
167
+ const VERIFICATION_PREFIXES = [
168
+ { prefix: 'google-site-verification=', provider: 'google' },
169
+ { prefix: 'facebook-domain-verification=', provider: 'facebook' },
170
+ { prefix: 'MS=', provider: 'microsoft' },
171
+ { prefix: 'atlassian-domain-verification=', provider: 'atlassian' },
172
+ { prefix: 'apple-domain-verification=', provider: 'apple' },
173
+ { prefix: '_github-pages-challenge-', provider: 'github' },
174
+ { prefix: 'stripe-verification=', provider: 'stripe' },
175
+ { prefix: 'postmark-verification=', provider: 'postmark' },
176
+ ];
177
+ function detectVerification(raw) {
178
+ for (const { prefix, provider } of VERIFICATION_PREFIXES) {
179
+ if (raw.startsWith(prefix)) {
180
+ return {
181
+ parsed: {
182
+ type: 'verification',
183
+ provider,
184
+ token: raw.slice(prefix.length),
185
+ },
186
+ };
187
+ }
188
+ }
189
+ return null;
190
+ }
191
+ const TXT_DETECTORS = [detectSpf, detectDmarc, detectDkim, detectVerification];
192
+ function enrichTxtRecord(raw) {
193
+ for (const detector of TXT_DETECTORS) {
194
+ const result = detector(raw);
195
+ if (result !== null) {
196
+ if (result.parsed !== null) {
197
+ return { parsed: result.parsed };
198
+ }
199
+ return { parsed: null, parseError: result.parseError };
200
+ }
201
+ }
202
+ return { parsed: null };
203
+ }
204
+ //# sourceMappingURL=txt-parsers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"txt-parsers.js","sourceRoot":"","sources":["../../../src/utils/txt-parsers.ts"],"names":[],"mappings":"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"}