Compare commits

..

6 Commits

12 changed files with 1267 additions and 2282 deletions

View File

@ -1,5 +1,27 @@
# Changelog # 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) ## 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. 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", "name": "@push.rocks/smartdns",
"version": "6.2.2", "version": "7.0.2",
"private": false, "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.", "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": { "exports": {
".": "./dist_ts_server/index.js", ".": "./dist_ts/index.js",
"./server": "./dist_ts_server/index.js", "./server": "./dist_ts_server/index.js",
"./client": "./dist_ts_client/index.js" "./client": "./dist_ts_client/index.js"
}, },
@ -46,8 +46,8 @@
"@push.rocks/smartdelay": "^3.0.1", "@push.rocks/smartdelay": "^3.0.1",
"@push.rocks/smartenv": "^5.0.5", "@push.rocks/smartenv": "^5.0.5",
"@push.rocks/smartpromise": "^4.2.3", "@push.rocks/smartpromise": "^4.2.3",
"@push.rocks/smartrequest": "^2.0.23", "@push.rocks/smartrequest": "^2.1.0",
"@tsclass/tsclass": "^5.0.0", "@tsclass/tsclass": "^9.2.0",
"@types/dns-packet": "^5.6.5", "@types/dns-packet": "^5.6.5",
"@types/elliptic": "^6.4.18", "@types/elliptic": "^6.4.18",
"acme-client": "^5.4.0", "acme-client": "^5.4.0",
@ -56,11 +56,10 @@
"minimatch": "^10.0.1" "minimatch": "^10.0.1"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.2.7", "@git.zone/tsbuild": "^2.6.4",
"@git.zone/tsrun": "^1.3.3", "@git.zone/tsrun": "^1.3.3",
"@git.zone/tstest": "^1.0.96", "@git.zone/tstest": "^2.3.1",
"@push.rocks/tapbundle": "^5.6.0", "@types/node": "^22.15.21"
"@types/node": "^22.13.10"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",
@ -77,5 +76,6 @@
"browserslist": [ "browserslist": [
"last 1 chrome versions" "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'; 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 () => { tap.test('should create an instance of Dnsly', async () => {
testDnsly = new smartdns.Smartdns({}); testDnsClient = new smartdns.Smartdns({});
expect(testDnsly).toBeInstanceOf(smartdns.Smartdns); expect(testDnsClient).toBeInstanceOf(smartdns.Smartdns);
}); });
tap.test('should get an A DNS Record', async () => { tap.test('should get an A DNS Record', async () => {
return expect(await testDnsly.getRecordsA('dnsly_a.bleu.de')).toEqual([ const records = await testDnsClient.getRecordsA('google.com');
{ expect(records).toBeInstanceOf(Array);
name: 'dnsly_a.bleu.de', expect(records.length).toBeGreaterThan(0);
value: '127.0.0.1', expect(records[0]).toHaveProperty('name', 'google.com');
dnsSecEnabled: false, expect(records[0]).toHaveProperty('type', 'A');
type: 'A', expect(records[0]).toHaveProperty('value');
}, expect(records[0]).toHaveProperty('dnsSecEnabled');
]);
}); });
tap.test('should get an AAAA Record', async () => { tap.test('should get an AAAA Record', async () => {
return expect(await testDnsly.getRecordsAAAA('dnsly_aaaa.bleu.de')).toEqual([ const records = await testDnsClient.getRecordsAAAA('google.com');
{ expect(records).toBeInstanceOf(Array);
name: 'dnsly_aaaa.bleu.de', expect(records.length).toBeGreaterThan(0);
value: '::1', expect(records[0]).toHaveProperty('name', 'google.com');
dnsSecEnabled: false, expect(records[0]).toHaveProperty('type', 'AAAA');
type: 'AAAA', expect(records[0]).toHaveProperty('value');
}, expect(records[0]).toHaveProperty('dnsSecEnabled');
]);
}); });
tap.test('should get a txt record', async () => { tap.test('should get a txt record', async () => {
return expect(await testDnsly.getRecordsTxt('dnsly_txt.bleu.de')).toEqual([ const records = await testDnsClient.getRecordsTxt('google.com');
{ expect(records).toBeInstanceOf(Array);
name: 'dnsly_txt.bleu.de', expect(records.length).toBeGreaterThan(0);
value: 'sometext_txt', expect(records[0]).toHaveProperty('name', 'google.com');
type: 'TXT', expect(records[0]).toHaveProperty('type', 'TXT');
dnsSecEnabled: false, expect(records[0]).toHaveProperty('value');
}, expect(records[0]).toHaveProperty('dnsSecEnabled');
]);
}); });
tap.test('should, get a mx record for a domain', async () => { 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); console.log(res);
}); });
tap.test('should check until DNS is available', async () => { tap.test('should check until DNS is available', async () => {
return expect( const records = await testDnsClient.getRecordsTxt('google.com');
await testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt') if (records.length > 0) {
).toBeTrue(); 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 () => { tap.test('should check until DNS is available an return false if it fails', async () => {
return expect( 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(); ).toBeFalse();
}); });
tap.test('should check until DNS is available an return false if it fails', async () => { tap.test('should check until DNS is available an return false if it fails', async () => {
return expect( return expect(
await testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2') await testDnsClient.checkUntilAvailable('nonexistent.example.com', 'TXT', 'sometext_txt2')
).toBeFalse(); ).toBeFalse();
}); });
tap.test('should get name server for hostname', async () => { 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); console.log(result);
}); });
tap.test('should detect dns sec', async () => { 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]); console.log(result[0]);
expect(result[0].dnsSecEnabled).toBeTrue(); 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 * as plugins from '../ts_server/plugins.js';
import { expect, tap } from '@push.rocks/tapbundle'; import { expect, tap } from '@git.zone/tstest/tapbundle';
import { tapNodeTools } from '@push.rocks/tapbundle/node'; import { tapNodeTools } from '@git.zone/tstest/tapbundle_node';
import { execSync } from 'child_process'; import { execSync } from 'child_process';
import * as dnsPacket from 'dns-packet'; import * as dnsPacket from 'dns-packet';
@ -644,4 +644,4 @@ tap.test('should stop the server', async () => {
dnsServer = null; 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'; export type TDnsProvider = 'google' | 'cloudflare';
@ -145,7 +145,7 @@ export class Smartdns {
const responseBody: IDnsJsonResponse = response.body; const responseBody: IDnsJsonResponse = response.body;
if (responseBody?.Status !== 0 && counterArg < retriesCounterArg) { if (responseBody?.Status !== 0 && counterArg < retriesCounterArg) {
await plugins.smartdelay.delayFor(500); await plugins.smartdelay.delayFor(500);
return getResponseBody(counterArg++); return getResponseBody(counterArg + 1);
} else { } else {
return responseBody; 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
}