@gjsify/dns 0.3.12 → 0.3.14
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/lib/esm/index.js +188 -217
- package/lib/esm/promises.js +56 -50
- package/package.json +7 -7
package/lib/esm/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Gio from "@girs/gio-2.0";
|
|
2
2
|
import { isIP } from "node:net";
|
|
3
|
+
|
|
4
|
+
//#region src/index.ts
|
|
3
5
|
const NODATA = "ENODATA";
|
|
4
6
|
const FORMERR = "EFORMERR";
|
|
5
7
|
const SERVFAIL = "ESERVFAIL";
|
|
@@ -25,239 +27,208 @@ const LOADIPHLPAPI = "ELOADIPHLPAPI";
|
|
|
25
27
|
const ADDRGETNETWORKPARAMS = "EADDRGETNETWORKPARAMS";
|
|
26
28
|
const CANCELLED = "ECANCELLED";
|
|
27
29
|
function createDnsError(hostname, syscall, _err) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
const code = NOTFOUND;
|
|
31
|
+
const message = `${syscall} ${code} ${hostname}`;
|
|
32
|
+
const error = new Error(message);
|
|
33
|
+
error.code = code;
|
|
34
|
+
error.syscall = syscall;
|
|
35
|
+
error.hostname = hostname;
|
|
36
|
+
error.errno = undefined;
|
|
37
|
+
return error;
|
|
36
38
|
}
|
|
37
39
|
function lookup(hostname, ...args) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
} catch (_err) {
|
|
96
|
-
callback(createDnsError(hostname, "getaddrinfo"), "", 0);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
);
|
|
40
|
+
let options = {};
|
|
41
|
+
let callback;
|
|
42
|
+
if (typeof args[0] === "function") {
|
|
43
|
+
callback = args[0];
|
|
44
|
+
} else {
|
|
45
|
+
if (typeof args[0] === "number") {
|
|
46
|
+
options = { family: args[0] };
|
|
47
|
+
} else if (args[0]) {
|
|
48
|
+
options = args[0];
|
|
49
|
+
}
|
|
50
|
+
callback = args[1];
|
|
51
|
+
}
|
|
52
|
+
if (!hostname) {
|
|
53
|
+
const family = options.family || 4;
|
|
54
|
+
callback(null, null, family);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const ipVersion = isIP(hostname);
|
|
58
|
+
if (ipVersion) {
|
|
59
|
+
callback(null, hostname, ipVersion);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const resolver = Gio.Resolver.get_default();
|
|
63
|
+
resolver.lookup_by_name_async(hostname, null, (_source, asyncResult) => {
|
|
64
|
+
try {
|
|
65
|
+
const addresses = resolver.lookup_by_name_finish(asyncResult);
|
|
66
|
+
if (!addresses || addresses.length === 0) {
|
|
67
|
+
callback(createDnsError(hostname, "getaddrinfo"), "", 0);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const family = options.family || 0;
|
|
71
|
+
let results = [];
|
|
72
|
+
for (const addr of addresses) {
|
|
73
|
+
const addrFamily = addr.get_family();
|
|
74
|
+
if (family === 0 || family === 4 && addrFamily === Gio.SocketFamily.IPV4 || family === 6 && addrFamily === Gio.SocketFamily.IPV6) {
|
|
75
|
+
results.push(addr);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (results.length === 0) {
|
|
79
|
+
results = Array.from(addresses);
|
|
80
|
+
}
|
|
81
|
+
if (options.all) {
|
|
82
|
+
const allAddresses = results.map((addr) => ({
|
|
83
|
+
address: addr.to_string(),
|
|
84
|
+
family: addr.get_family() === Gio.SocketFamily.IPV6 ? 6 : 4
|
|
85
|
+
}));
|
|
86
|
+
callback(null, allAddresses);
|
|
87
|
+
} else {
|
|
88
|
+
const first = results[0];
|
|
89
|
+
const addrStr = first.to_string();
|
|
90
|
+
const addrFamily = first.get_family() === Gio.SocketFamily.IPV6 ? 6 : 4;
|
|
91
|
+
callback(null, addrStr, addrFamily);
|
|
92
|
+
}
|
|
93
|
+
} catch (_err) {
|
|
94
|
+
callback(createDnsError(hostname, "getaddrinfo"), "", 0);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
100
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a hostname to an array of IPv4 addresses.
|
|
100
|
+
*/
|
|
101
101
|
function resolve4(hostname, callback) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
lookup(hostname, {
|
|
103
|
+
family: 4,
|
|
104
|
+
all: true
|
|
105
|
+
}, (err, addresses) => {
|
|
106
|
+
if (err) {
|
|
107
|
+
callback(err, []);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
callback(null, addresses.map((a) => a.address));
|
|
111
|
+
});
|
|
109
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolve a hostname to an array of IPv6 addresses.
|
|
115
|
+
*/
|
|
110
116
|
function resolve6(hostname, callback) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
lookup(hostname, {
|
|
118
|
+
family: 6,
|
|
119
|
+
all: true
|
|
120
|
+
}, (err, addresses) => {
|
|
121
|
+
if (err) {
|
|
122
|
+
callback(err, []);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
callback(null, addresses.map((a) => a.address));
|
|
126
|
+
});
|
|
118
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Reverse DNS lookup.
|
|
130
|
+
*/
|
|
119
131
|
function reverse(ip, callback) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
callback(createDnsError(ip, "getnameinfo"), []);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
);
|
|
132
|
+
const resolver = Gio.Resolver.get_default();
|
|
133
|
+
const addr = Gio.InetAddress.new_from_string(ip);
|
|
134
|
+
if (!addr) {
|
|
135
|
+
const err = new Error(`Invalid IP address: ${ip}`);
|
|
136
|
+
err.code = "ERR_INVALID_ARG_VALUE";
|
|
137
|
+
callback(err, []);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
resolver.lookup_by_address_async(addr, null, (_source, asyncResult) => {
|
|
141
|
+
try {
|
|
142
|
+
const hostname = resolver.lookup_by_address_finish(asyncResult);
|
|
143
|
+
callback(null, hostname ? [hostname] : []);
|
|
144
|
+
} catch (_err) {
|
|
145
|
+
callback(createDnsError(ip, "getnameinfo"), []);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
140
148
|
}
|
|
141
149
|
function resolve(hostname, ...args) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
150
|
+
let rrtype = "A";
|
|
151
|
+
let callback;
|
|
152
|
+
if (typeof args[0] === "function") {
|
|
153
|
+
callback = args[0];
|
|
154
|
+
} else {
|
|
155
|
+
rrtype = args[0];
|
|
156
|
+
callback = args[1];
|
|
157
|
+
}
|
|
158
|
+
switch (rrtype.toUpperCase()) {
|
|
159
|
+
case "A":
|
|
160
|
+
resolve4(hostname, callback);
|
|
161
|
+
break;
|
|
162
|
+
case "AAAA":
|
|
163
|
+
resolve6(hostname, callback);
|
|
164
|
+
break;
|
|
165
|
+
default: _resolveRecords(hostname, rrtype, callback);
|
|
166
|
+
}
|
|
160
167
|
}
|
|
161
168
|
function _resolveRecords(hostname, rrtype, callback) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
} catch (_err) {
|
|
187
|
-
callback(createDnsError(hostname, "queryDns"), []);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
);
|
|
169
|
+
const resolver = Gio.Resolver.get_default();
|
|
170
|
+
const recordTypeMap = {
|
|
171
|
+
SRV: Gio.ResolverRecordType.SRV,
|
|
172
|
+
MX: Gio.ResolverRecordType.MX,
|
|
173
|
+
TXT: Gio.ResolverRecordType.TXT,
|
|
174
|
+
SOA: Gio.ResolverRecordType.SOA,
|
|
175
|
+
NS: Gio.ResolverRecordType.NS
|
|
176
|
+
};
|
|
177
|
+
const gioType = recordTypeMap[rrtype.toUpperCase()];
|
|
178
|
+
if (!gioType) {
|
|
179
|
+
const err = new Error(`Unknown record type: ${rrtype}`);
|
|
180
|
+
err.code = "ERR_INVALID_ARG_VALUE";
|
|
181
|
+
callback(err, []);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
resolver.lookup_records_async(hostname, gioType, null, (_source, asyncResult) => {
|
|
185
|
+
try {
|
|
186
|
+
const records = resolver.lookup_records_finish(asyncResult);
|
|
187
|
+
const results = records.map((r) => r.deep_unpack());
|
|
188
|
+
callback(null, results);
|
|
189
|
+
} catch (_err) {
|
|
190
|
+
callback(createDnsError(hostname, "queryDns"), []);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
191
193
|
}
|
|
192
194
|
let _defaultResultOrder = "verbatim";
|
|
193
195
|
function setDefaultResultOrder(order) {
|
|
194
|
-
|
|
196
|
+
_defaultResultOrder = order;
|
|
195
197
|
}
|
|
196
198
|
function getDefaultResultOrder() {
|
|
197
|
-
|
|
199
|
+
return _defaultResultOrder;
|
|
198
200
|
}
|
|
199
|
-
var
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
};
|
|
230
|
-
export {
|
|
231
|
-
ADDRGETNETWORKPARAMS,
|
|
232
|
-
BADFAMILY,
|
|
233
|
-
BADFLAGS,
|
|
234
|
-
BADHINTS,
|
|
235
|
-
BADNAME,
|
|
236
|
-
BADQUERY,
|
|
237
|
-
BADRESP,
|
|
238
|
-
BADSTR,
|
|
239
|
-
CANCELLED,
|
|
240
|
-
CONNREFUSED,
|
|
241
|
-
DESTRUCTION,
|
|
242
|
-
EOF,
|
|
243
|
-
FILE,
|
|
244
|
-
FORMERR,
|
|
245
|
-
LOADIPHLPAPI,
|
|
246
|
-
NODATA,
|
|
247
|
-
NOMEM,
|
|
248
|
-
NONAME,
|
|
249
|
-
NOTFOUND,
|
|
250
|
-
NOTIMP,
|
|
251
|
-
NOTINITIALIZED,
|
|
252
|
-
REFUSED,
|
|
253
|
-
SERVFAIL,
|
|
254
|
-
TIMEOUT,
|
|
255
|
-
index_default as default,
|
|
256
|
-
getDefaultResultOrder,
|
|
257
|
-
lookup,
|
|
258
|
-
resolve,
|
|
259
|
-
resolve4,
|
|
260
|
-
resolve6,
|
|
261
|
-
reverse,
|
|
262
|
-
setDefaultResultOrder
|
|
201
|
+
var src_default = {
|
|
202
|
+
lookup,
|
|
203
|
+
resolve,
|
|
204
|
+
resolve4,
|
|
205
|
+
resolve6,
|
|
206
|
+
reverse,
|
|
207
|
+
setDefaultResultOrder,
|
|
208
|
+
getDefaultResultOrder,
|
|
209
|
+
NODATA,
|
|
210
|
+
FORMERR,
|
|
211
|
+
SERVFAIL,
|
|
212
|
+
NOTFOUND,
|
|
213
|
+
NOTIMP,
|
|
214
|
+
REFUSED,
|
|
215
|
+
BADQUERY,
|
|
216
|
+
BADNAME,
|
|
217
|
+
BADFAMILY,
|
|
218
|
+
BADRESP,
|
|
219
|
+
CONNREFUSED,
|
|
220
|
+
TIMEOUT,
|
|
221
|
+
EOF: "EOF",
|
|
222
|
+
FILE,
|
|
223
|
+
NOMEM,
|
|
224
|
+
DESTRUCTION,
|
|
225
|
+
BADSTR,
|
|
226
|
+
BADFLAGS,
|
|
227
|
+
NONAME,
|
|
228
|
+
BADHINTS,
|
|
229
|
+
NOTINITIALIZED,
|
|
230
|
+
CANCELLED
|
|
263
231
|
};
|
|
232
|
+
|
|
233
|
+
//#endregion
|
|
234
|
+
export { ADDRGETNETWORKPARAMS, BADFAMILY, BADFLAGS, BADHINTS, BADNAME, BADQUERY, BADRESP, BADSTR, CANCELLED, CONNREFUSED, DESTRUCTION, EOF, FILE, FORMERR, LOADIPHLPAPI, NODATA, NOMEM, NONAME, NOTFOUND, NOTIMP, NOTINITIALIZED, REFUSED, SERVFAIL, TIMEOUT, src_default as default, getDefaultResultOrder, lookup, resolve, resolve4, resolve6, reverse, setDefaultResultOrder };
|
package/lib/esm/promises.js
CHANGED
|
@@ -1,61 +1,67 @@
|
|
|
1
|
-
import { lookup as
|
|
1
|
+
import { lookup as lookup$1, resolve as resolve$1, resolve4 as resolve4$1, resolve6 as resolve6$1, reverse as reverse$1 } from "./index.js";
|
|
2
|
+
|
|
3
|
+
//#region src/promises.ts
|
|
2
4
|
function lookup(hostname, options) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
lookup$1(hostname, options, (err, address, family) => {
|
|
7
|
+
if (err) return reject(err);
|
|
8
|
+
if (Array.isArray(address)) {
|
|
9
|
+
resolve(address);
|
|
10
|
+
} else {
|
|
11
|
+
resolve({
|
|
12
|
+
address,
|
|
13
|
+
family
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
13
18
|
}
|
|
14
19
|
function resolve4(hostname) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
resolve4$1(hostname, (err, addresses) => {
|
|
22
|
+
if (err) return reject(err);
|
|
23
|
+
resolve(addresses);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
21
26
|
}
|
|
22
27
|
function resolve6(hostname) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
resolve6$1(hostname, (err, addresses) => {
|
|
30
|
+
if (err) return reject(err);
|
|
31
|
+
resolve(addresses);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
29
34
|
}
|
|
30
35
|
function reverse(ip) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
reverse$1(ip, (err, hostnames) => {
|
|
38
|
+
if (err) return reject(err);
|
|
39
|
+
resolve(hostnames);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
37
42
|
}
|
|
38
43
|
function resolve(hostname, rrtype) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
return new Promise((res, reject) => {
|
|
45
|
+
if (rrtype) {
|
|
46
|
+
resolve$1(hostname, rrtype, (err, records) => {
|
|
47
|
+
if (err) return reject(err);
|
|
48
|
+
res(records);
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
resolve$1(hostname, (err, records) => {
|
|
52
|
+
if (err) return reject(err);
|
|
53
|
+
res(records);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
});
|
|
52
57
|
}
|
|
53
|
-
var promises_default = {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
resolve6,
|
|
60
|
-
reverse
|
|
58
|
+
var promises_default = {
|
|
59
|
+
lookup,
|
|
60
|
+
resolve,
|
|
61
|
+
resolve4,
|
|
62
|
+
resolve6,
|
|
63
|
+
reverse
|
|
61
64
|
};
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { promises_default as default, lookup, resolve, resolve4, resolve6, reverse };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/dns",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.14",
|
|
4
4
|
"description": "Node.js dns module for Gjs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"dns"
|
|
35
35
|
],
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@gjsify/cli": "^0.3.
|
|
38
|
-
"@gjsify/unit": "^0.3.
|
|
37
|
+
"@gjsify/cli": "^0.3.14",
|
|
38
|
+
"@gjsify/unit": "^0.3.14",
|
|
39
39
|
"@types/node": "^25.6.0",
|
|
40
40
|
"typescript": "^6.0.3"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@girs/gio-2.0": "
|
|
44
|
-
"@girs/glib-2.0": "
|
|
45
|
-
"@gjsify/net": "^0.3.
|
|
46
|
-
"@gjsify/utils": "^0.3.
|
|
43
|
+
"@girs/gio-2.0": "2.88.0-4.0.0-rc.9",
|
|
44
|
+
"@girs/glib-2.0": "2.88.0-4.0.0-rc.9",
|
|
45
|
+
"@gjsify/net": "^0.3.14",
|
|
46
|
+
"@gjsify/utils": "^0.3.14"
|
|
47
47
|
}
|
|
48
48
|
}
|