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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roster-server",
3
- "version": "2.1.28",
3
+ "version": "2.1.30",
4
4
  "description": "👾 RosterServer - A domain host router to host multiple HTTPS.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -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 dns.resolveTxt(dnsHost);
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;