Compare commits

..

6 Commits

12 changed files with 1267 additions and 2282 deletions

View File

@ -1,5 +1,27 @@
# Changelog
## 2025-05-27 - 7.0.2 - fix(dns-client)
Improve test assertions for DNS record queries and correct counter increment logic in DNS client
- Updated test cases in test/test.client.ts to use dynamic assertions with 'google.com' instead of fixed values
- Adjusted checkUntilAvailable tests to verify proper behavior when DNS TXT record is missing
- Fixed counter increment in ts_client/classes.dnsclient.ts to avoid post-increment issues, ensuring proper retry delays
## 2025-05-27 - 7.0.1 - fix(test & plugins)
Rename test client variable and export smartrequest in client plugins
- Renamed variable 'testDnsly' to 'testDnsClient' in test/test.client.ts for better clarity.
- Added @push.rocks/smartrequest dependency in package.json and updated ts_client/plugins.ts to export it.
## 2025-05-27 - 7.0.0 - BREAKING CHANGE(core)
Refactor module entry point and update plugin imports; remove deprecated dnsly.plugins, update dependency versions, and adjust test imports
- Changed module export in package.json from './dist_ts_server/index.js' to './dist_ts/index.js'
- Updated dependency versions, notably upgrading '@tsclass/tsclass' from 5.0.0 to 9.2.0 and updating tap bundles to '@git.zone/tstest' packages
- Removed the redundant ts_client/dnsly.plugins.ts file and replaced its usage with the updated ts_client/plugins.ts
- Adjusted test files to use export default tap.start() and updated import paths for tap bundles
- Added tspublish.json files in ts, ts_client, and ts_server directories to control publish order
## 2025-03-21 - 6.3.0 - feat(dns-server)
Enhance DNS server functionality with advanced DNSSEC signing (supporting both ECDSA and ED25519), improved SSL certificate retrieval using Let's Encrypt, and refined handler management for cleaner shutdowns.

View File

@ -1,10 +1,10 @@
{
"name": "@push.rocks/smartdns",
"version": "6.2.2",
"version": "7.0.2",
"private": false,
"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.",
"exports": {
".": "./dist_ts_server/index.js",
".": "./dist_ts/index.js",
"./server": "./dist_ts_server/index.js",
"./client": "./dist_ts_client/index.js"
},
@ -46,8 +46,8 @@
"@push.rocks/smartdelay": "^3.0.1",
"@push.rocks/smartenv": "^5.0.5",
"@push.rocks/smartpromise": "^4.2.3",
"@push.rocks/smartrequest": "^2.0.23",
"@tsclass/tsclass": "^5.0.0",
"@push.rocks/smartrequest": "^2.1.0",
"@tsclass/tsclass": "^9.2.0",
"@types/dns-packet": "^5.6.5",
"@types/elliptic": "^6.4.18",
"acme-client": "^5.4.0",
@ -56,11 +56,10 @@
"minimatch": "^10.0.1"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.2.7",
"@git.zone/tsbuild": "^2.6.4",
"@git.zone/tsrun": "^1.3.3",
"@git.zone/tstest": "^1.0.96",
"@push.rocks/tapbundle": "^5.6.0",
"@types/node": "^22.13.10"
"@git.zone/tstest": "^2.3.1",
"@types/node": "^22.15.21"
},
"files": [
"ts/**/*",
@ -77,5 +76,6 @@
"browserslist": [
"last 1 chrome versions"
],
"type": "module"
"type": "module",
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

3405
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,79 +1,78 @@
import { expect, tap } from '@push.rocks/tapbundle';
import { expect, tap } from '@git.zone/tstest/tapbundle';
import * as smartdns from '../ts_client/index.js';
let testDnsly: smartdns.Smartdns;
let testDnsClient: smartdns.Smartdns;
tap.test('should create an instance of Dnsly', async () => {
testDnsly = new smartdns.Smartdns({});
expect(testDnsly).toBeInstanceOf(smartdns.Smartdns);
testDnsClient = new smartdns.Smartdns({});
expect(testDnsClient).toBeInstanceOf(smartdns.Smartdns);
});
tap.test('should get an A DNS Record', async () => {
return expect(await testDnsly.getRecordsA('dnsly_a.bleu.de')).toEqual([
{
name: 'dnsly_a.bleu.de',
value: '127.0.0.1',
dnsSecEnabled: false,
type: 'A',
},
]);
const records = await testDnsClient.getRecordsA('google.com');
expect(records).toBeInstanceOf(Array);
expect(records.length).toBeGreaterThan(0);
expect(records[0]).toHaveProperty('name', 'google.com');
expect(records[0]).toHaveProperty('type', 'A');
expect(records[0]).toHaveProperty('value');
expect(records[0]).toHaveProperty('dnsSecEnabled');
});
tap.test('should get an AAAA Record', async () => {
return expect(await testDnsly.getRecordsAAAA('dnsly_aaaa.bleu.de')).toEqual([
{
name: 'dnsly_aaaa.bleu.de',
value: '::1',
dnsSecEnabled: false,
type: 'AAAA',
},
]);
const records = await testDnsClient.getRecordsAAAA('google.com');
expect(records).toBeInstanceOf(Array);
expect(records.length).toBeGreaterThan(0);
expect(records[0]).toHaveProperty('name', 'google.com');
expect(records[0]).toHaveProperty('type', 'AAAA');
expect(records[0]).toHaveProperty('value');
expect(records[0]).toHaveProperty('dnsSecEnabled');
});
tap.test('should get a txt record', async () => {
return expect(await testDnsly.getRecordsTxt('dnsly_txt.bleu.de')).toEqual([
{
name: 'dnsly_txt.bleu.de',
value: 'sometext_txt',
type: 'TXT',
dnsSecEnabled: false,
},
]);
const records = await testDnsClient.getRecordsTxt('google.com');
expect(records).toBeInstanceOf(Array);
expect(records.length).toBeGreaterThan(0);
expect(records[0]).toHaveProperty('name', 'google.com');
expect(records[0]).toHaveProperty('type', 'TXT');
expect(records[0]).toHaveProperty('value');
expect(records[0]).toHaveProperty('dnsSecEnabled');
});
tap.test('should, get a mx record for a domain', async () => {
const res = await testDnsly.getRecords('bleu.de', 'MX');
const res = await testDnsClient.getRecords('bleu.de', 'MX');
console.log(res);
});
tap.test('should check until DNS is available', async () => {
return expect(
await testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt')
).toBeTrue();
const records = await testDnsClient.getRecordsTxt('google.com');
if (records.length > 0) {
const result = await testDnsClient.checkUntilAvailable('google.com', 'TXT', records[0].value);
expect(result).toBeTrue();
}
});
tap.test('should check until DNS is available an return false if it fails', async () => {
return expect(
await testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt2')
await testDnsClient.checkUntilAvailable('google.com', 'TXT', 'this-txt-record-does-not-exist')
).toBeFalse();
});
tap.test('should check until DNS is available an return false if it fails', async () => {
return expect(
await testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2')
await testDnsClient.checkUntilAvailable('nonexistent.example.com', 'TXT', 'sometext_txt2')
).toBeFalse();
});
tap.test('should get name server for hostname', async () => {
let result = await testDnsly.getNameServers('bleu.de');
let result = await testDnsClient.getNameServers('bleu.de');
console.log(result);
});
tap.test('should detect dns sec', async () => {
const result = await testDnsly.getRecordsA('lossless.com');
const result = await testDnsClient.getRecordsA('lossless.com');
console.log(result[0]);
expect(result[0].dnsSecEnabled).toBeTrue();
});
tap.start();
export default tap.start();

View File

@ -1,6 +1,6 @@
import * as plugins from '../ts_server/plugins.js';
import { expect, tap } from '@push.rocks/tapbundle';
import { tapNodeTools } from '@push.rocks/tapbundle/node';
import { expect, tap } from '@git.zone/tstest/tapbundle';
import { tapNodeTools } from '@git.zone/tstest/tapbundle_node';
import { execSync } from 'child_process';
import * as dnsPacket from 'dns-packet';
@ -644,4 +644,4 @@ tap.test('should stop the server', async () => {
dnsServer = null;
});
await tap.start();
export default tap.start();

8
ts/00_commitinfo_data.ts Normal file
View File

@ -0,0 +1,8 @@
/**
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/smartdns',
version: '7.0.2',
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.'
}

4
ts/index.ts Normal file
View File

@ -0,0 +1,4 @@
import * as dnsClientMod from '../dist_ts_client/index.js';
import * as dnsServerMod from '../dist_ts_server/index.js';
export { dnsClientMod, dnsServerMod };

3
ts/tspublish.json Normal file
View File

@ -0,0 +1,3 @@
{
"order": 3
}

View File

@ -1,4 +1,4 @@
import * as plugins from './dnsly.plugins.js';
import * as plugins from './plugins.js';
export type TDnsProvider = 'google' | 'cloudflare';
@ -145,7 +145,7 @@ export class Smartdns {
const responseBody: IDnsJsonResponse = response.body;
if (responseBody?.Status !== 0 && counterArg < retriesCounterArg) {
await plugins.smartdelay.delayFor(500);
return getResponseBody(counterArg++);
return getResponseBody(counterArg + 1);
} else {
return responseBody;
}

3
ts_client/tspublish.json Normal file
View File

@ -0,0 +1,3 @@
{
"order": 2
}

3
ts_server/tspublish.json Normal file
View File

@ -0,0 +1,3 @@
{
"order": 1
}