@push.rocks/smartdns 5.0.4 → 6.2.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/{dist_ts → dist_ts_client}/00_commitinfo_data.d.ts +1 -1
- package/dist_ts_client/00_commitinfo_data.js +9 -0
- package/{dist_ts/index.d.ts → dist_ts_client/classes.dnsclient.d.ts} +2 -2
- package/dist_ts_client/classes.dnsclient.js +186 -0
- package/dist_ts_client/dnsly.plugins.d.ts +10 -0
- package/dist_ts_client/dnsly.plugins.js +12 -0
- package/dist_ts_client/index.d.ts +1 -0
- package/dist_ts_client/index.js +2 -0
- package/dist_ts_server/classes.dnssec.d.ts +31 -0
- package/dist_ts_server/classes.dnssec.js +139 -0
- package/dist_ts_server/classes.dnsserver.d.ts +40 -0
- package/dist_ts_server/classes.dnsserver.js +342 -0
- package/dist_ts_server/classes.dnstools.d.ts +31 -0
- package/dist_ts_server/classes.dnstools.js +139 -0
- package/dist_ts_server/index.d.ts +1 -0
- package/dist_ts_server/index.js +2 -0
- package/dist_ts_server/plugins.d.ts +12 -0
- package/dist_ts_server/plugins.js +16 -0
- package/npmextra.json +18 -5
- package/package.json +37 -25
- package/readme.hints.md +1 -0
- package/readme.md +111 -38
- package/dist_ts/00_commitinfo_data.js +0 -9
- package/dist_ts/dnsly.plugins.d.ts +0 -13
- package/dist_ts/dnsly.plugins.js +0 -15
- package/dist_ts/index.js +0 -186
- package/ts/00_commitinfo_data.ts +0 -8
- package/ts/dnsly.plugins.ts +0 -22
- package/ts/index.ts +0 -229
package/ts/index.ts
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import * as plugins from './dnsly.plugins.js';
|
|
2
|
-
|
|
3
|
-
export type TDnsProvider = 'google' | 'cloudflare';
|
|
4
|
-
|
|
5
|
-
export const makeNodeProcessUseDnsProvider = (providerArg: TDnsProvider) => {
|
|
6
|
-
switch (providerArg) {
|
|
7
|
-
case 'cloudflare':
|
|
8
|
-
plugins.dns.setServers([
|
|
9
|
-
'1.1.1.1',
|
|
10
|
-
'1.0.0.1',
|
|
11
|
-
'[2606:4700:4700::1111]',
|
|
12
|
-
'[2606:4700:4700::1001]',
|
|
13
|
-
]);
|
|
14
|
-
break;
|
|
15
|
-
case 'google':
|
|
16
|
-
plugins.dns.setServers([
|
|
17
|
-
'8.8.8.8',
|
|
18
|
-
'8.8.4.4',
|
|
19
|
-
'[2001:4860:4860::8888]',
|
|
20
|
-
'[2606:4700:4700::1001]',
|
|
21
|
-
]);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export interface ISmartDnsConstructorOptions {}
|
|
26
|
-
|
|
27
|
-
export interface IGoogleDNSHTTPSResponse {
|
|
28
|
-
Status: number;
|
|
29
|
-
TC: boolean;
|
|
30
|
-
RD: boolean;
|
|
31
|
-
RA: boolean;
|
|
32
|
-
AD: boolean;
|
|
33
|
-
CD: boolean;
|
|
34
|
-
Question: Array<{ name: string; type: number }>;
|
|
35
|
-
Answer: Array<{ name: string; type: number; TTL: number; data: string }>;
|
|
36
|
-
Additional: [];
|
|
37
|
-
Comment: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* class dnsly offers methods for working with dns from a dns provider like Google DNS
|
|
42
|
-
*/
|
|
43
|
-
export class Smartdns {
|
|
44
|
-
public dnsServerIp: string;
|
|
45
|
-
public dnsServerPort: number;
|
|
46
|
-
|
|
47
|
-
public dnsTypeMap: { [key: string]: number } = {
|
|
48
|
-
A: 1,
|
|
49
|
-
AAAA: 28,
|
|
50
|
-
CNAME: 5,
|
|
51
|
-
MX: 15,
|
|
52
|
-
TXT: 16,
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* constructor for class dnsly
|
|
57
|
-
*/
|
|
58
|
-
constructor(optionsArg: ISmartDnsConstructorOptions) {}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* check a dns record until it has propagated to Google DNS
|
|
62
|
-
* should be considerably fast
|
|
63
|
-
* @param recordNameArg
|
|
64
|
-
* @param recordTypeArg
|
|
65
|
-
* @param expectedValue
|
|
66
|
-
*/
|
|
67
|
-
public async checkUntilAvailable(
|
|
68
|
-
recordNameArg: string,
|
|
69
|
-
recordTypeArg: plugins.tsclass.network.TDnsRecordType,
|
|
70
|
-
expectedValue: string,
|
|
71
|
-
cyclesArg: number = 50,
|
|
72
|
-
intervalArg: number = 500
|
|
73
|
-
) {
|
|
74
|
-
let runCycles = 0;
|
|
75
|
-
const doCheck = async () => {
|
|
76
|
-
if (runCycles < cyclesArg) {
|
|
77
|
-
runCycles++;
|
|
78
|
-
try {
|
|
79
|
-
let myRecordArray: plugins.tsclass.network.IDnsRecord[];
|
|
80
|
-
if (runCycles % 2 === 0 || !plugins.dns) {
|
|
81
|
-
myRecordArray = await this.getRecords(recordNameArg, recordTypeArg, 0);
|
|
82
|
-
} else {
|
|
83
|
-
myRecordArray = await this.getRecordWithNodeDNS(recordNameArg, recordTypeArg);
|
|
84
|
-
}
|
|
85
|
-
const myRecord = myRecordArray[0].value;
|
|
86
|
-
if (myRecord === expectedValue) {
|
|
87
|
-
console.log(
|
|
88
|
-
`smartdns: .checkUntilAvailable() verified that wanted >>>${recordTypeArg}<<< record exists for >>>${recordNameArg}<<< with value >>>${expectedValue}<<<`
|
|
89
|
-
);
|
|
90
|
-
return true;
|
|
91
|
-
} else {
|
|
92
|
-
await plugins.smartdelay.delayFor(intervalArg);
|
|
93
|
-
return await doCheck();
|
|
94
|
-
}
|
|
95
|
-
} catch (err) {
|
|
96
|
-
// console.log(err);
|
|
97
|
-
await plugins.smartdelay.delayFor(intervalArg);
|
|
98
|
-
return await doCheck();
|
|
99
|
-
}
|
|
100
|
-
} else {
|
|
101
|
-
console.log(
|
|
102
|
-
`smartdns: .checkUntilAvailable() failed permanently for ${recordNameArg} with value ${recordTypeArg} - ${expectedValue}...`
|
|
103
|
-
);
|
|
104
|
-
return false;
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
return await doCheck();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* get A Dns Record
|
|
112
|
-
*/
|
|
113
|
-
public async getRecordsA(recordNameArg: string): Promise<plugins.tsclass.network.IDnsRecord[]> {
|
|
114
|
-
return await this.getRecords(recordNameArg, 'A');
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* get AAAA Record
|
|
119
|
-
*/
|
|
120
|
-
public async getRecordsAAAA(recordNameArg: string) {
|
|
121
|
-
return await this.getRecords(recordNameArg, 'AAAA');
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* gets a txt record
|
|
126
|
-
*/
|
|
127
|
-
public async getRecordsTxt(recordNameArg: string): Promise<plugins.tsclass.network.IDnsRecord[]> {
|
|
128
|
-
return await this.getRecords(recordNameArg, 'TXT');
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
public async getRecords(
|
|
132
|
-
recordNameArg: string,
|
|
133
|
-
recordTypeArg: plugins.tsclass.network.TDnsRecordType,
|
|
134
|
-
retriesCounterArg = 20
|
|
135
|
-
): Promise<plugins.tsclass.network.IDnsRecord[]> {
|
|
136
|
-
const requestUrl = `https://cloudflare-dns.com/dns-query?name=${recordNameArg}&type=${recordTypeArg}&do=1`;
|
|
137
|
-
const returnArray: plugins.tsclass.network.IDnsRecord[] = [];
|
|
138
|
-
const getResponseBody = async (counterArg = 0): Promise<IGoogleDNSHTTPSResponse> => {
|
|
139
|
-
const response = await plugins.smartrequest.request(requestUrl, {
|
|
140
|
-
method: 'GET',
|
|
141
|
-
headers: {
|
|
142
|
-
accept: 'application/dns-json',
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
const responseBody: IGoogleDNSHTTPSResponse = response.body;
|
|
146
|
-
if (responseBody?.Status !== 0 && counterArg < retriesCounterArg) {
|
|
147
|
-
await plugins.smartdelay.delayFor(500);
|
|
148
|
-
return getResponseBody(counterArg++);
|
|
149
|
-
} else {
|
|
150
|
-
return responseBody;
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
const responseBody = await getResponseBody();
|
|
154
|
-
if (!responseBody.Answer || !typeof responseBody.Answer[Symbol.iterator]) {
|
|
155
|
-
return returnArray;
|
|
156
|
-
}
|
|
157
|
-
for (const dnsEntry of responseBody.Answer) {
|
|
158
|
-
if (dnsEntry.data.startsWith('"') && dnsEntry.data.endsWith('"')) {
|
|
159
|
-
dnsEntry.data = dnsEntry.data.replace(/^"(.*)"$/, '$1');
|
|
160
|
-
}
|
|
161
|
-
if (dnsEntry.name.endsWith('.')) {
|
|
162
|
-
dnsEntry.name = dnsEntry.name.substring(0, dnsEntry.name.length - 1);
|
|
163
|
-
}
|
|
164
|
-
returnArray.push({
|
|
165
|
-
name: dnsEntry.name,
|
|
166
|
-
type: this.convertDnsTypeNumberToTypeName(dnsEntry.type),
|
|
167
|
-
dnsSecEnabled: responseBody.AD,
|
|
168
|
-
value: dnsEntry.data,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
// console.log(responseBody);
|
|
172
|
-
return returnArray;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* gets a record using nodejs dns resolver
|
|
177
|
-
*/
|
|
178
|
-
public async getRecordWithNodeDNS(
|
|
179
|
-
recordNameArg: string,
|
|
180
|
-
recordTypeArg: plugins.tsclass.network.TDnsRecordType
|
|
181
|
-
): Promise<plugins.tsclass.network.IDnsRecord[]> {
|
|
182
|
-
const done = plugins.smartpromise.defer<plugins.tsclass.network.IDnsRecord[]>();
|
|
183
|
-
plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => {
|
|
184
|
-
if (err) {
|
|
185
|
-
done.reject(err);
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const returnArray: plugins.tsclass.network.IDnsRecord[] = [];
|
|
189
|
-
for (const recordKey in recordsArg) {
|
|
190
|
-
returnArray.push({
|
|
191
|
-
name: recordNameArg,
|
|
192
|
-
value: recordsArg[recordKey][0],
|
|
193
|
-
type: recordTypeArg,
|
|
194
|
-
dnsSecEnabled: false,
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
done.resolve(returnArray);
|
|
198
|
-
});
|
|
199
|
-
return done.promise;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
public async getNameServers(domainNameArg: string): Promise<string[]> {
|
|
203
|
-
const done = plugins.smartpromise.defer<string[]>();
|
|
204
|
-
plugins.dns.resolveNs(domainNameArg, (err, result) => {
|
|
205
|
-
if (!err) {
|
|
206
|
-
done.resolve(result);
|
|
207
|
-
} else {
|
|
208
|
-
console.log(err);
|
|
209
|
-
done.reject(err);
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
return await done.promise;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
public convertDnsTypeNameToTypeNumber(dnsTypeNameArg: string): number {
|
|
216
|
-
return this.dnsTypeMap[dnsTypeNameArg];
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
public convertDnsTypeNumberToTypeName(
|
|
220
|
-
dnsTypeNumberArg: number
|
|
221
|
-
): plugins.tsclass.network.TDnsRecordType {
|
|
222
|
-
for (const key in this.dnsTypeMap) {
|
|
223
|
-
if (this.dnsTypeMap[key] === dnsTypeNumberArg) {
|
|
224
|
-
return key as plugins.tsclass.network.TDnsRecordType;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return null;
|
|
228
|
-
}
|
|
229
|
-
}
|