roster-server 2.2.7 → 2.2.8

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.2.7",
3
+ "version": "2.2.8",
4
4
  "description": "👾 RosterServer - A domain host router to host multiple HTTPS.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -3,6 +3,7 @@
3
3
  const legacyCli = require('acme-dns-01-cli');
4
4
  const log = require('lemonlog')('acme-dns-01');
5
5
  const dns = require('node:dns').promises;
6
+ const { execFileSync } = require('node:child_process');
6
7
  let envFileLoadAttempted = false;
7
8
 
8
9
  function loadEnvFileSafely() {
@@ -222,13 +223,46 @@ module.exports.create = function create(config = {}) {
222
223
  for (const { server, resolver } of resolverClients) {
223
224
  if (seenServers.has(server)) continue;
224
225
  seenServers.add(server);
225
- try {
226
- const result = await resolver.resolveTxt(dnsHost);
227
- if (Array.isArray(result)) {
228
- records.push(...result);
226
+
227
+ // Primary path: query with dig directly (more reliable under Bun).
228
+ const serverTarget = String(server || '').includes('/') ? String(server).split('/').pop() : String(server || '');
229
+ let digAttempted = false;
230
+ if (typeof execFileSync === 'function' && serverTarget) {
231
+ digAttempted = true;
232
+ try {
233
+ const output = execFileSync('dig', ['+short', 'TXT', dnsHost, `@${serverTarget}`], {
234
+ encoding: 'utf8',
235
+ stdio: ['ignore', 'pipe', 'ignore'],
236
+ timeout: 4000
237
+ });
238
+ const lines = String(output || '')
239
+ .split('\n')
240
+ .map((line) => line.trim())
241
+ .filter(Boolean);
242
+ if (lines.length > 0) {
243
+ for (const line of lines) {
244
+ const normalized = normalizeTxtChunk(line);
245
+ if (normalized) records.push([normalized]);
246
+ }
247
+ } else {
248
+ errors.push(`${server}:ENOTFOUND`);
249
+ }
250
+ continue;
251
+ } catch (error) {
252
+ errors.push(`${server}:DIG_${error?.code || error?.signal || 'ERROR'}`);
253
+ }
254
+ }
255
+
256
+ // Fallback path only if dig is unavailable/failed unexpectedly.
257
+ if (!digAttempted || records.length === 0) {
258
+ try {
259
+ const result = await resolver.resolveTxt(dnsHost);
260
+ if (Array.isArray(result)) {
261
+ records.push(...result);
262
+ }
263
+ } catch (error) {
264
+ errors.push(`${server}:${error?.code || error?.message || error}`);
229
265
  }
230
- } catch (error) {
231
- errors.push(`${server}:${error?.code || error?.message || error}`);
232
266
  }
233
267
  }
234
268
  return { records, errors };