roster-server 2.1.28 → 2.1.30
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/package.json
CHANGED
|
@@ -86,6 +86,18 @@ module.exports.create = function create(config = {}) {
|
|
|
86
86
|
: Number.isFinite(Number(process.env.ROSTER_DNS_DRYRUN_POLL_TIMEOUT_MS))
|
|
87
87
|
? Number(process.env.ROSTER_DNS_DRYRUN_POLL_TIMEOUT_MS)
|
|
88
88
|
: null;
|
|
89
|
+
const parseResolvers = (value) => String(value || '')
|
|
90
|
+
.split(',')
|
|
91
|
+
.map((s) => s.trim())
|
|
92
|
+
.filter(Boolean);
|
|
93
|
+
const configuredResolvers = Array.isArray(config.dnsResolvers)
|
|
94
|
+
? config.dnsResolvers.map((s) => String(s).trim()).filter(Boolean)
|
|
95
|
+
: parseResolvers(process.env.ROSTER_DNS_RESOLVERS);
|
|
96
|
+
const resolverClients = configuredResolvers.map((server) => {
|
|
97
|
+
const resolver = new dns.Resolver();
|
|
98
|
+
resolver.setServers([server]);
|
|
99
|
+
return { server, resolver };
|
|
100
|
+
});
|
|
89
101
|
|
|
90
102
|
function sleep(ms) {
|
|
91
103
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -100,10 +112,29 @@ module.exports.create = function create(config = {}) {
|
|
|
100
112
|
return candidate ? String(candidate).trim() : '';
|
|
101
113
|
}
|
|
102
114
|
|
|
115
|
+
async function resolveTxtRecords(dnsHost) {
|
|
116
|
+
const records = [];
|
|
117
|
+
if (resolverClients.length === 0) {
|
|
118
|
+
return await dns.resolveTxt(dnsHost);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
for (const { resolver } of resolverClients) {
|
|
122
|
+
try {
|
|
123
|
+
const result = await resolver.resolveTxt(dnsHost);
|
|
124
|
+
if (Array.isArray(result)) {
|
|
125
|
+
records.push(...result);
|
|
126
|
+
}
|
|
127
|
+
} catch (_) {
|
|
128
|
+
// Try next configured resolver
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return records;
|
|
132
|
+
}
|
|
133
|
+
|
|
103
134
|
async function hasDnsTxtToken(dnsHost, expectedToken) {
|
|
104
135
|
if (!dnsHost || !expectedToken) return false;
|
|
105
136
|
try {
|
|
106
|
-
const records = await
|
|
137
|
+
const records = await resolveTxtRecords(dnsHost);
|
|
107
138
|
for (const recordParts of records || []) {
|
|
108
139
|
const joined = (recordParts || []).map(normalizeTxtChunk).join('').trim();
|
|
109
140
|
if (joined === expectedToken) return true;
|