@push.rocks/smartdns 7.11.3 → 7.12.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.
- package/.smartconfig.json +10 -1
- package/dist_rust/rustdns-client_linux_amd64 +0 -0
- package/dist_rust/rustdns-client_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_client/classes.dnsclient.d.ts +14 -0
- package/dist_ts_client/classes.dnsclient.js +223 -1
- package/dist_ts_client/classes.rustdnsclientbridge.d.ts +27 -0
- package/dist_ts_client/classes.rustdnsclientbridge.js +19 -1
- package/dist_ts_client/index.d.ts +1 -0
- package/dist_ts_client/index.js +2 -1
- package/dist_ts_client/interfaces.queryrecords.d.ts +42 -0
- package/dist_ts_client/interfaces.queryrecords.js +2 -0
- package/package.json +1 -1
- package/readme.md +46 -0
- package/ts/00_commitinfo_data.ts +1 -1
package/.smartconfig.json
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"static": true
|
|
8
8
|
},
|
|
9
9
|
"@git.zone/cli": {
|
|
10
|
+
"schemaVersion": 2,
|
|
10
11
|
"projectType": "npm",
|
|
11
12
|
"module": {
|
|
12
13
|
"githost": "code.foss.global",
|
|
@@ -38,12 +39,20 @@
|
|
|
38
39
|
},
|
|
39
40
|
"release": {
|
|
40
41
|
"targets": {
|
|
42
|
+
"git": {
|
|
43
|
+
"enabled": true,
|
|
44
|
+
"remote": "origin",
|
|
45
|
+
"pushBranch": true,
|
|
46
|
+
"pushTags": true
|
|
47
|
+
},
|
|
41
48
|
"npm": {
|
|
49
|
+
"enabled": true,
|
|
42
50
|
"registries": [
|
|
43
51
|
"https://verdaccio.lossless.digital",
|
|
44
52
|
"https://registry.npmjs.org"
|
|
45
53
|
],
|
|
46
|
-
"accessLevel": "public"
|
|
54
|
+
"accessLevel": "public",
|
|
55
|
+
"alreadyPublished": "success"
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
58
|
}
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartdns',
|
|
6
|
-
version: '7.
|
|
6
|
+
version: '7.12.0',
|
|
7
7
|
description: 'A robust TypeScript library providing advanced DNS management and resolution capabilities including support for DNSSEC, custom DNS servers, and integration with various DNS providers.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHlMQUF5TDtDQUN2TSxDQUFBIn0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
import type { TQueryAttempt, TQueryRecordType, TQueryRecordsResult } from './interfaces.queryrecords.js';
|
|
2
3
|
export type TDnsProvider = 'google' | 'cloudflare';
|
|
3
4
|
export declare const makeNodeProcessUseDnsProvider: (providerArg: TDnsProvider) => void;
|
|
4
5
|
export type TResolutionStrategy = 'doh' | 'udp' | 'system' | 'prefer-system' | 'prefer-udp';
|
|
@@ -38,6 +39,14 @@ export declare class Smartdns {
|
|
|
38
39
|
*/
|
|
39
40
|
getRecordsTxt(recordNameArg: string): Promise<plugins.tsclass.network.IDnsRecord[]>;
|
|
40
41
|
getRecords(recordNameArg: string, recordTypeArg: plugins.tsclass.network.TDnsRecordType, retriesCounterArg?: number): Promise<plugins.tsclass.network.IDnsRecord[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Query DNS without collapsing missing records and operational failures.
|
|
44
|
+
* Legacy getRecords* methods intentionally retain their historical behavior.
|
|
45
|
+
*/
|
|
46
|
+
queryRecords(recordNameArg: string, recordTypeArg: TQueryRecordType): Promise<TQueryRecordsResult>;
|
|
47
|
+
protected getNodeDnsPromises(): NonNullable<typeof plugins.dns>['promises'] | undefined;
|
|
48
|
+
protected querySystemStrict(recordNameArg: string, recordTypeArg: TQueryRecordType): Promise<TQueryAttempt>;
|
|
49
|
+
protected queryRustStrict(recordNameArg: string, recordTypeArg: TQueryRecordType, transportArg: 'udp' | 'doh'): Promise<TQueryAttempt>;
|
|
41
50
|
/**
|
|
42
51
|
* gets a record using nodejs dns resolver
|
|
43
52
|
*/
|
|
@@ -45,6 +54,11 @@ export declare class Smartdns {
|
|
|
45
54
|
getNameServers(domainNameArg: string): Promise<string[]>;
|
|
46
55
|
convertDnsTypeNameToTypeNumber(dnsTypeNameArg: string): number;
|
|
47
56
|
convertDnsTypeNumberToTypeName(dnsTypeNumberArg: number): plugins.tsclass.network.TDnsRecordType | null;
|
|
57
|
+
private finalizeStrictQuery;
|
|
58
|
+
private withStrictTimeout;
|
|
59
|
+
private makeStrictErrorAttempt;
|
|
60
|
+
private getStrictErrorCode;
|
|
61
|
+
private getStrictErrorMessage;
|
|
48
62
|
/**
|
|
49
63
|
* Convert a DNS type string from Rust (e.g. "A", "AAAA") to the canonical TDnsRecordType.
|
|
50
64
|
*/
|
|
@@ -206,6 +206,172 @@ export class Smartdns {
|
|
|
206
206
|
return [];
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Query DNS without collapsing missing records and operational failures.
|
|
211
|
+
* Legacy getRecords* methods intentionally retain their historical behavior.
|
|
212
|
+
*/
|
|
213
|
+
async queryRecords(recordNameArg, recordTypeArg) {
|
|
214
|
+
const attempts = [];
|
|
215
|
+
const runAttempt = async (transport) => {
|
|
216
|
+
const attempt = transport === 'system'
|
|
217
|
+
? await this.querySystemStrict(recordNameArg, recordTypeArg)
|
|
218
|
+
: await this.queryRustStrict(recordNameArg, recordTypeArg, transport);
|
|
219
|
+
attempts.push(attempt);
|
|
220
|
+
return attempt;
|
|
221
|
+
};
|
|
222
|
+
if (this.strategy === 'system' || this.strategy === 'udp' || this.strategy === 'doh') {
|
|
223
|
+
return this.finalizeStrictQuery(await runAttempt(this.strategy), attempts);
|
|
224
|
+
}
|
|
225
|
+
const preferredTransport = this.strategy === 'prefer-udp' ? 'udp' : 'system';
|
|
226
|
+
const firstAttempt = await runAttempt(preferredTransport);
|
|
227
|
+
if (firstAttempt.status === 'success' || !this.allowDohFallback) {
|
|
228
|
+
return this.finalizeStrictQuery(firstAttempt, attempts);
|
|
229
|
+
}
|
|
230
|
+
const fallbackAttempt = await runAttempt('doh');
|
|
231
|
+
return this.finalizeStrictQuery(fallbackAttempt, attempts);
|
|
232
|
+
}
|
|
233
|
+
getNodeDnsPromises() {
|
|
234
|
+
return plugins.dns?.promises;
|
|
235
|
+
}
|
|
236
|
+
async querySystemStrict(recordNameArg, recordTypeArg) {
|
|
237
|
+
const systemResolver = this.getNodeDnsPromises();
|
|
238
|
+
if (!systemResolver) {
|
|
239
|
+
return this.makeStrictErrorAttempt('system', 'internal', 'DNS_SYSTEM_UNAVAILABLE', 'Node DNS module is not available in this runtime', false);
|
|
240
|
+
}
|
|
241
|
+
try {
|
|
242
|
+
let records;
|
|
243
|
+
const makeRecord = (value) => ({
|
|
244
|
+
name: recordNameArg,
|
|
245
|
+
type: recordTypeArg,
|
|
246
|
+
dnsSecEnabled: false,
|
|
247
|
+
value,
|
|
248
|
+
});
|
|
249
|
+
switch (recordTypeArg) {
|
|
250
|
+
case 'A': {
|
|
251
|
+
const values = await this.withStrictTimeout(systemResolver.resolve4(recordNameArg));
|
|
252
|
+
records = values.map(makeRecord);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
case 'AAAA': {
|
|
256
|
+
const values = await this.withStrictTimeout(systemResolver.resolve6(recordNameArg));
|
|
257
|
+
records = values.map(makeRecord);
|
|
258
|
+
break;
|
|
259
|
+
}
|
|
260
|
+
case 'TXT': {
|
|
261
|
+
const values = await this.withStrictTimeout(systemResolver.resolveTxt(recordNameArg));
|
|
262
|
+
records = values.map((chunks) => makeRecord(chunks.join('')));
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
case 'MX': {
|
|
266
|
+
const values = await this.withStrictTimeout(systemResolver.resolveMx(recordNameArg));
|
|
267
|
+
records = values.map((value) => makeRecord(`${value.priority} ${value.exchange}`));
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
case 'NS': {
|
|
271
|
+
const values = await this.withStrictTimeout(systemResolver.resolveNs(recordNameArg));
|
|
272
|
+
records = values.map(makeRecord);
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case 'CNAME': {
|
|
276
|
+
const values = await this.withStrictTimeout(systemResolver.resolveCname(recordNameArg));
|
|
277
|
+
records = values.map(makeRecord);
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case 'PTR': {
|
|
281
|
+
const values = await this.withStrictTimeout(systemResolver.resolvePtr(recordNameArg));
|
|
282
|
+
records = values.map(makeRecord);
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
case 'SRV': {
|
|
286
|
+
const values = await this.withStrictTimeout(systemResolver.resolveSrv(recordNameArg));
|
|
287
|
+
records = values.map((value) => makeRecord(`${value.priority} ${value.weight} ${value.port} ${value.name}`));
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
case 'SOA': {
|
|
291
|
+
const value = await this.withStrictTimeout(systemResolver.resolveSoa(recordNameArg));
|
|
292
|
+
records = [
|
|
293
|
+
makeRecord(`${value.nsname} ${value.hostmaster} ${value.serial} ${value.refresh} ${value.retry} ${value.expire} ${value.minttl}`),
|
|
294
|
+
];
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (records.length === 0) {
|
|
299
|
+
return {
|
|
300
|
+
status: 'missing',
|
|
301
|
+
transport: 'system',
|
|
302
|
+
records: [],
|
|
303
|
+
missingReason: 'nodata',
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
return { status: 'success', transport: 'system', records };
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
const errorCode = this.getStrictErrorCode(error);
|
|
310
|
+
if (errorCode === 'ENOTFOUND' || errorCode === 'NOTFOUND') {
|
|
311
|
+
return {
|
|
312
|
+
status: 'missing',
|
|
313
|
+
transport: 'system',
|
|
314
|
+
records: [],
|
|
315
|
+
missingReason: 'nxdomain',
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
if (errorCode === 'ENODATA' || errorCode === 'NODATA') {
|
|
319
|
+
return {
|
|
320
|
+
status: 'missing',
|
|
321
|
+
transport: 'system',
|
|
322
|
+
records: [],
|
|
323
|
+
missingReason: 'nodata',
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
const isTimeout = errorCode === 'DNS_QUERY_TIMEOUT' || errorCode === 'ETIMEOUT';
|
|
327
|
+
return this.makeStrictErrorAttempt('system', isTimeout ? 'timeout' : 'transport', errorCode, this.getStrictErrorMessage(error), isTimeout);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async queryRustStrict(recordNameArg, recordTypeArg, transportArg) {
|
|
331
|
+
try {
|
|
332
|
+
const result = await this.getRustBridge().resolveDetailed(recordNameArg, recordTypeArg, transportArg, undefined, undefined, this.timeoutMs);
|
|
333
|
+
if (result.status === 'missing') {
|
|
334
|
+
return {
|
|
335
|
+
status: 'missing',
|
|
336
|
+
transport: transportArg,
|
|
337
|
+
records: [],
|
|
338
|
+
missingReason: result.missingReason,
|
|
339
|
+
rcode: result.rcode,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
if (result.status === 'error') {
|
|
343
|
+
return {
|
|
344
|
+
status: 'error',
|
|
345
|
+
transport: transportArg,
|
|
346
|
+
records: [],
|
|
347
|
+
error: result.error,
|
|
348
|
+
...(result.rcode === undefined ? {} : { rcode: result.rcode }),
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
const records = [];
|
|
352
|
+
for (const answer of result.answers) {
|
|
353
|
+
const canonicalType = this.convertDnsTypeNameToCanonical(answer.type);
|
|
354
|
+
if (!canonicalType || answer.type.toUpperCase() !== recordTypeArg) {
|
|
355
|
+
return this.makeStrictErrorAttempt(transportArg, 'protocol', 'DNS_ANSWER_TYPE_MISMATCH', `Resolver returned ${answer.type} for requested ${recordTypeArg}`, false, result.rcode);
|
|
356
|
+
}
|
|
357
|
+
records.push({
|
|
358
|
+
name: answer.name,
|
|
359
|
+
type: canonicalType,
|
|
360
|
+
dnsSecEnabled: result.adFlag,
|
|
361
|
+
value: answer.value,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
return {
|
|
365
|
+
status: 'success',
|
|
366
|
+
transport: transportArg,
|
|
367
|
+
records,
|
|
368
|
+
rcode: result.rcode,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
return this.makeStrictErrorAttempt(transportArg, 'transport', 'RUST_DNS_IPC_ERROR', this.getStrictErrorMessage(error), true);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
209
375
|
/**
|
|
210
376
|
* gets a record using nodejs dns resolver
|
|
211
377
|
*/
|
|
@@ -262,6 +428,62 @@ export class Smartdns {
|
|
|
262
428
|
}
|
|
263
429
|
return null;
|
|
264
430
|
}
|
|
431
|
+
finalizeStrictQuery(finalAttempt, attempts) {
|
|
432
|
+
return { ...finalAttempt, attempts: [...attempts] };
|
|
433
|
+
}
|
|
434
|
+
async withStrictTimeout(promiseArg) {
|
|
435
|
+
if (!this.timeoutMs) {
|
|
436
|
+
return promiseArg;
|
|
437
|
+
}
|
|
438
|
+
let timer;
|
|
439
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
|
440
|
+
timer = setTimeout(() => {
|
|
441
|
+
const timeoutError = new Error(`DNS query timed out after ${this.timeoutMs}ms`);
|
|
442
|
+
Object.assign(timeoutError, { code: 'DNS_QUERY_TIMEOUT' });
|
|
443
|
+
reject(timeoutError);
|
|
444
|
+
}, this.timeoutMs);
|
|
445
|
+
});
|
|
446
|
+
try {
|
|
447
|
+
return await Promise.race([promiseArg, timeoutPromise]);
|
|
448
|
+
}
|
|
449
|
+
finally {
|
|
450
|
+
if (timer)
|
|
451
|
+
clearTimeout(timer);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
makeStrictErrorAttempt(transportArg, kindArg, codeArg, messageArg, retryableArg, rcodeArg) {
|
|
455
|
+
const error = {
|
|
456
|
+
kind: kindArg,
|
|
457
|
+
code: codeArg,
|
|
458
|
+
message: messageArg,
|
|
459
|
+
retryable: retryableArg,
|
|
460
|
+
};
|
|
461
|
+
return {
|
|
462
|
+
status: 'error',
|
|
463
|
+
transport: transportArg,
|
|
464
|
+
records: [],
|
|
465
|
+
error,
|
|
466
|
+
...(rcodeArg === undefined ? {} : { rcode: rcodeArg }),
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
getStrictErrorCode(errorArg) {
|
|
470
|
+
if (errorArg &&
|
|
471
|
+
typeof errorArg === 'object' &&
|
|
472
|
+
'code' in errorArg &&
|
|
473
|
+
typeof errorArg.code === 'string') {
|
|
474
|
+
return errorArg.code;
|
|
475
|
+
}
|
|
476
|
+
return 'DNS_SYSTEM_ERROR';
|
|
477
|
+
}
|
|
478
|
+
getStrictErrorMessage(errorArg) {
|
|
479
|
+
if (errorArg instanceof Error) {
|
|
480
|
+
return errorArg.message;
|
|
481
|
+
}
|
|
482
|
+
if (typeof errorArg === 'string') {
|
|
483
|
+
return errorArg;
|
|
484
|
+
}
|
|
485
|
+
return 'Unknown DNS resolver error';
|
|
486
|
+
}
|
|
265
487
|
/**
|
|
266
488
|
* Convert a DNS type string from Rust (e.g. "A", "AAAA") to the canonical TDnsRecordType.
|
|
267
489
|
*/
|
|
@@ -282,4 +504,4 @@ export class Smartdns {
|
|
|
282
504
|
}
|
|
283
505
|
}
|
|
284
506
|
}
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kbnNjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19jbGllbnQvY2xhc3Nlcy5kbnNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFJdkUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxXQUF5QixFQUFFLEVBQUU7SUFDekUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELFFBQVEsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDakIsU0FBUztnQkFDVCxTQUFTO2dCQUNULHdCQUF3QjtnQkFDeEIsd0JBQXdCO2FBQ3pCLENBQUMsQ0FBQztZQUNILE1BQU07UUFDUixLQUFLLFFBQVE7WUFDWCxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUNqQixTQUFTO2dCQUNULFNBQVM7Z0JBQ1Qsd0JBQXdCO2dCQUN4Qix3QkFBd0I7YUFDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNILENBQUMsQ0FBQztBQVVGOzs7R0FHRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBa0JuQixZQUFZLFVBQXVDO1FBakIzQyxhQUFRLEdBQXdCLGVBQWUsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFeEIsZUFBVSxHQUErQixJQUFJLENBQUM7UUFFL0MsZUFBVSxHQUE4QjtZQUM3QyxDQUFDLEVBQUUsQ0FBQztZQUNKLEVBQUUsRUFBRSxDQUFDO1lBQ0wsS0FBSyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsQ0FBQztZQUNOLEdB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
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kbnNjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19jbGllbnQvY2xhc3Nlcy5kbnNjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFZdkUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxXQUF5QixFQUFFLEVBQUU7SUFDekUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELFFBQVEsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxDQUFDLFVBQVUsQ0FBQztnQkFDakIsU0FBUztnQkFDVCxTQUFTO2dCQUNULHdCQUF3QjtnQkFDeEIsd0JBQXdCO2FBQ3pCLENBQUMsQ0FBQztZQUNILE1BQU07UUFDUixLQUFLLFFBQVE7WUFDWCxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUNqQixTQUFTO2dCQUNULFNBQVM7Z0JBQ1Qsd0JBQXdCO2dCQUN4Qix3QkFBd0I7YUFDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNILENBQUMsQ0FBQztBQVVGOzs7R0FHRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBa0JuQixZQUFZLFVBQXVDO1FBakIzQyxhQUFRLEdBQXdCLGVBQWUsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFeEIsZUFBVSxHQUErQixJQUFJLENBQUM7UUFFL0MsZUFBVSxHQUE4QjtZQUM3QyxDQUFDLEVBQUUsQ0FBQztZQUNKLEVBQUUsRUFBRSxDQUFDO1lBQ0wsS0FBSyxFQUFFLENBQUM7WUFDUixHQUFHLEVBQUUsQ0FBQztZQUNOLEdB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
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import type { IQueryError, TQueryMissingReason } from './interfaces.queryrecords.js';
|
|
1
2
|
export type TClientDnsCommands = {
|
|
2
3
|
resolve: {
|
|
3
4
|
params: IResolveParams;
|
|
4
5
|
result: IResolveResult;
|
|
5
6
|
};
|
|
7
|
+
resolveDetailed: {
|
|
8
|
+
params: IResolveParams;
|
|
9
|
+
result: TResolveDetailedResult;
|
|
10
|
+
};
|
|
6
11
|
ping: {
|
|
7
12
|
params: Record<string, never>;
|
|
8
13
|
result: {
|
|
@@ -29,6 +34,24 @@ export interface IResolveResult {
|
|
|
29
34
|
adFlag: boolean;
|
|
30
35
|
rcode: number;
|
|
31
36
|
}
|
|
37
|
+
export interface IResolveDetailedSuccess extends IResolveResult {
|
|
38
|
+
status: 'success';
|
|
39
|
+
}
|
|
40
|
+
export interface IResolveDetailedMissing {
|
|
41
|
+
status: 'missing';
|
|
42
|
+
answers: [];
|
|
43
|
+
adFlag: boolean;
|
|
44
|
+
rcode: number;
|
|
45
|
+
missingReason: TQueryMissingReason;
|
|
46
|
+
}
|
|
47
|
+
export interface IResolveDetailedError {
|
|
48
|
+
status: 'error';
|
|
49
|
+
answers: [];
|
|
50
|
+
adFlag: boolean;
|
|
51
|
+
rcode?: number;
|
|
52
|
+
error: IQueryError;
|
|
53
|
+
}
|
|
54
|
+
export type TResolveDetailedResult = IResolveDetailedSuccess | IResolveDetailedMissing | IResolveDetailedError;
|
|
32
55
|
/**
|
|
33
56
|
* Bridge to the Rust DNS client binary via smartrust IPC.
|
|
34
57
|
*/
|
|
@@ -44,6 +67,10 @@ export declare class RustDnsClientBridge {
|
|
|
44
67
|
* Resolve a DNS query through the Rust binary.
|
|
45
68
|
*/
|
|
46
69
|
resolve(name: string, recordType: string, protocol: 'udp' | 'doh', serverAddr?: string, dohUrl?: string, timeoutMs?: number): Promise<IResolveResult>;
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a DNS query while preserving missing and failure semantics.
|
|
72
|
+
*/
|
|
73
|
+
resolveDetailed(name: string, recordType: string, protocol: 'udp' | 'doh', serverAddr?: string, dohUrl?: string, timeoutMs?: number): Promise<TResolveDetailedResult>;
|
|
47
74
|
/**
|
|
48
75
|
* Ping the Rust binary for health check.
|
|
49
76
|
*/
|
|
@@ -63,6 +63,24 @@ export class RustDnsClientBridge {
|
|
|
63
63
|
params.timeoutMs = timeoutMs;
|
|
64
64
|
return this.bridge.sendCommand('resolve', params);
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve a DNS query while preserving missing and failure semantics.
|
|
68
|
+
*/
|
|
69
|
+
async resolveDetailed(name, recordType, protocol, serverAddr, dohUrl, timeoutMs) {
|
|
70
|
+
await this.ensureSpawned();
|
|
71
|
+
const params = {
|
|
72
|
+
name,
|
|
73
|
+
recordType,
|
|
74
|
+
protocol,
|
|
75
|
+
};
|
|
76
|
+
if (serverAddr)
|
|
77
|
+
params.serverAddr = serverAddr;
|
|
78
|
+
if (dohUrl)
|
|
79
|
+
params.dohUrl = dohUrl;
|
|
80
|
+
if (timeoutMs)
|
|
81
|
+
params.timeoutMs = timeoutMs;
|
|
82
|
+
return this.bridge.sendCommand('resolveDetailed', params);
|
|
83
|
+
}
|
|
66
84
|
/**
|
|
67
85
|
* Ping the Rust binary for health check.
|
|
68
86
|
*/
|
|
@@ -107,4 +125,4 @@ function getPlatformSuffix() {
|
|
|
107
125
|
}
|
|
108
126
|
return null;
|
|
109
127
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zY2xpZW50YnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfY2xpZW50L2NsYXNzZXMucnVzdGRuc2NsaWVudGJyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCO1FBRlEsaUJBQVksR0FBNEIsSUFBSSxDQUFDO1FBR25ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUN2RCxJQUFJLENBQ0wsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUVoQywwRUFBMEU7UUFDMUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsMkNBQTJDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDOUUsd0JBQXdCO1FBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5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
|
package/dist_ts_client/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './classes.dnsclient.js';
|
|
2
2
|
export * from './classes.rustdnsclientbridge.js';
|
|
3
|
-
|
|
3
|
+
export * from './interfaces.queryrecords.js';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsOEJBQThCLENBQUMifQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type * as plugins from './plugins.js';
|
|
2
|
+
export type TQueryRecordType = 'A' | 'AAAA' | 'CNAME' | 'MX' | 'NS' | 'PTR' | 'SOA' | 'SRV' | 'TXT';
|
|
3
|
+
export type TQueryTransport = 'system' | 'udp' | 'doh';
|
|
4
|
+
export type TQueryMissingReason = 'nodata' | 'nxdomain';
|
|
5
|
+
export type TQueryErrorKind = 'timeout' | 'transport' | 'protocol' | 'server' | 'unsupported' | 'internal';
|
|
6
|
+
export interface IQueryError {
|
|
7
|
+
kind: TQueryErrorKind;
|
|
8
|
+
code: string;
|
|
9
|
+
message: string;
|
|
10
|
+
retryable: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface IQueryAttemptSuccess {
|
|
13
|
+
status: 'success';
|
|
14
|
+
transport: TQueryTransport;
|
|
15
|
+
records: plugins.tsclass.network.IDnsRecord[];
|
|
16
|
+
rcode?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface IQueryAttemptMissing {
|
|
19
|
+
status: 'missing';
|
|
20
|
+
transport: TQueryTransport;
|
|
21
|
+
records: [];
|
|
22
|
+
missingReason: TQueryMissingReason;
|
|
23
|
+
rcode?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface IQueryAttemptError {
|
|
26
|
+
status: 'error';
|
|
27
|
+
transport: TQueryTransport;
|
|
28
|
+
records: [];
|
|
29
|
+
error: IQueryError;
|
|
30
|
+
rcode?: number;
|
|
31
|
+
}
|
|
32
|
+
export type TQueryAttempt = IQueryAttemptSuccess | IQueryAttemptMissing | IQueryAttemptError;
|
|
33
|
+
export interface IQueryRecordsSuccess extends IQueryAttemptSuccess {
|
|
34
|
+
attempts: TQueryAttempt[];
|
|
35
|
+
}
|
|
36
|
+
export interface IQueryRecordsMissing extends IQueryAttemptMissing {
|
|
37
|
+
attempts: TQueryAttempt[];
|
|
38
|
+
}
|
|
39
|
+
export interface IQueryRecordsError extends IQueryAttemptError {
|
|
40
|
+
attempts: TQueryAttempt[];
|
|
41
|
+
}
|
|
42
|
+
export type TQueryRecordsResult = IQueryRecordsSuccess | IQueryRecordsMissing | IQueryRecordsError;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartdns",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.12.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A robust TypeScript library providing advanced DNS management and resolution capabilities including support for DNSSEC, custom DNS servers, and integration with various DNS providers.",
|
|
6
6
|
"exports": {
|
package/readme.md
CHANGED
|
@@ -139,6 +139,52 @@ const mxRecords = await dns.getRecords('example.com', 'MX');
|
|
|
139
139
|
const nameservers = await dns.getNameServers('example.com');
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
+
### Strict Query Outcomes (v7.12+)
|
|
143
|
+
|
|
144
|
+
Use `queryRecords()` when an operational failure must not look like a missing DNS record:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
const result = await dns.queryRecords('example.com', 'TXT');
|
|
148
|
+
|
|
149
|
+
switch (result.status) {
|
|
150
|
+
case 'success':
|
|
151
|
+
console.log(result.records, result.transport);
|
|
152
|
+
break;
|
|
153
|
+
case 'missing':
|
|
154
|
+
console.log(result.missingReason); // 'nodata' | 'nxdomain'
|
|
155
|
+
break;
|
|
156
|
+
case 'error':
|
|
157
|
+
console.error(result.error.code, result.error.message);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
console.log(result.attempts); // ordered system/udp/doh evidence
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Strict queries support A, AAAA, CNAME, MX, NS, PTR, SOA, SRV, and TXT. Their behavior is:
|
|
165
|
+
|
|
166
|
+
| Status | Meaning |
|
|
167
|
+
|---|---|
|
|
168
|
+
| `success` | The authoritative final attempt returned one or more requested records. |
|
|
169
|
+
| `missing` | The final attempt proved `nodata` or `nxdomain`. |
|
|
170
|
+
| `error` | The final attempt failed due to timeout, transport, protocol, server, unsupported-input, or internal errors. |
|
|
171
|
+
|
|
172
|
+
`system`, `udp`, and `doh` perform exactly one attempt. `prefer-system` and `prefer-udp`
|
|
173
|
+
perform their preferred attempt first and, when enabled, at most one DoH fallback after either
|
|
174
|
+
a missing result or an error. The fallback result is authoritative and `attempts` retains both outcomes.
|
|
175
|
+
Set `allowDohFallback: false` to prohibit that second attempt.
|
|
176
|
+
|
|
177
|
+
The strict `system` path uses Node's explicit DNS resolvers (`resolve4`, `resolve6`, `resolveTxt`,
|
|
178
|
+
`resolveMx`, `resolveNs`, `resolveCname`, `resolvePtr`, `resolveSrv`, and `resolveSoa`). This makes
|
|
179
|
+
DNS response semantics observable and intentionally differs from the legacy A/AAAA path.
|
|
180
|
+
|
|
181
|
+
### Legacy Query Compatibility
|
|
182
|
+
|
|
183
|
+
`getRecords()`, `getRecordsA()`, `getRecordsAAAA()`, and `getRecordsTxt()` retain their established
|
|
184
|
+
array-returning contract. They return `[]` for both missing records and resolver failures. Legacy
|
|
185
|
+
system A/AAAA resolution continues to use `dns.lookup`, preserving NSS and hosts-file behavior.
|
|
186
|
+
Use these methods for compatibility and `queryRecords()` when state must remain distinguishable.
|
|
187
|
+
|
|
142
188
|
Every query returns an array of `IDnsRecord`:
|
|
143
189
|
|
|
144
190
|
```typescript
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartdns',
|
|
6
|
-
version: '7.
|
|
6
|
+
version: '7.12.0',
|
|
7
7
|
description: 'A robust TypeScript library providing advanced DNS management and resolution capabilities including support for DNSSEC, custom DNS servers, and integration with various DNS providers.'
|
|
8
8
|
}
|