tangerine 1.5.4 → 1.5.5
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/index.js +30 -4
- package/package.json +24 -23
package/index.js
CHANGED
|
@@ -11,6 +11,7 @@ const autoBind = require('auto-bind');
|
|
|
11
11
|
const getStream = require('get-stream');
|
|
12
12
|
const hostile = require('hostile');
|
|
13
13
|
const ipaddr = require('ipaddr.js');
|
|
14
|
+
const isStream = require('is-stream');
|
|
14
15
|
const mergeOptions = require('merge-options');
|
|
15
16
|
const pMap = require('p-map');
|
|
16
17
|
const pTimeout = require('p-timeout');
|
|
@@ -702,8 +703,8 @@ class Tangerine extends dns.promises.Resolver {
|
|
|
702
703
|
|
|
703
704
|
// safeguard (matches c-ares)
|
|
704
705
|
if (lower === 'localhost' || lower === 'localhost.') {
|
|
705
|
-
|
|
706
|
-
|
|
706
|
+
resolve4 ||= ['127.0.0.1'];
|
|
707
|
+
resolve6 ||= ['::1'];
|
|
707
708
|
}
|
|
708
709
|
|
|
709
710
|
if (isIPv4(name)) {
|
|
@@ -1128,22 +1129,41 @@ class Tangerine extends dns.promises.Resolver {
|
|
|
1128
1129
|
const statusCode = response.status || response.statusCode;
|
|
1129
1130
|
debug('response', { statusCode, headers });
|
|
1130
1131
|
|
|
1132
|
+
// <https://github.com/nodejs/undici/issues/3353#issuecomment-2184635954>
|
|
1133
|
+
// eslint-disable-next-line max-depth
|
|
1134
|
+
if (body && isStream(body) && typeof body.on === 'function')
|
|
1135
|
+
body.on('error', (err) => {
|
|
1136
|
+
this.options.logger.error(err, { response });
|
|
1137
|
+
});
|
|
1138
|
+
|
|
1131
1139
|
// eslint-disable-next-line max-depth
|
|
1132
1140
|
if (body && statusCode >= 200 && statusCode < 300) {
|
|
1141
|
+
// <https://sindresorhus.com/blog/goodbye-nodejs-buffer>
|
|
1133
1142
|
buffer = Buffer.isBuffer(body)
|
|
1134
1143
|
? body
|
|
1135
1144
|
: // eslint-disable-next-line no-await-in-loop
|
|
1136
1145
|
await getStream.buffer(body);
|
|
1146
|
+
// <https://github.com/nodejs/undici/issues/3353>
|
|
1147
|
+
// eslint-disable-next-line no-await-in-loop, max-depth
|
|
1148
|
+
if (body && typeof body.dump === 'function') await body.dump();
|
|
1137
1149
|
// eslint-disable-next-line max-depth
|
|
1138
1150
|
if (!abortController.signal.aborted) abortController.abort();
|
|
1139
1151
|
break;
|
|
1140
1152
|
}
|
|
1141
1153
|
|
|
1154
|
+
// <https://github.com/nodejs/undici/issues/3353>
|
|
1155
|
+
// eslint-disable-next-line no-await-in-loop, max-depth
|
|
1156
|
+
if (body && typeof body.dump === 'function') await body.dump();
|
|
1157
|
+
|
|
1158
|
+
// <https://github.com/nodejs/undici/blob/00dfd0bd41e73782452aecb728395f354585ca94/lib/core/errors.js#L47-L58>
|
|
1142
1159
|
const message =
|
|
1143
1160
|
http.STATUS_CODES[statusCode] ||
|
|
1144
1161
|
this.options.defaultHTTPErrorMessage;
|
|
1145
1162
|
const err = new Error(message);
|
|
1163
|
+
err.body = body;
|
|
1164
|
+
err.status = statusCode;
|
|
1146
1165
|
err.statusCode = statusCode;
|
|
1166
|
+
err.headers = headers;
|
|
1147
1167
|
throw err;
|
|
1148
1168
|
}
|
|
1149
1169
|
} catch (err) {
|
|
@@ -1202,6 +1222,12 @@ class Tangerine extends dns.promises.Resolver {
|
|
|
1202
1222
|
// that one or more dns servers have persistent issues
|
|
1203
1223
|
if (errors.length > 0)
|
|
1204
1224
|
this.options.logger.error(this.constructor.combineErrors(errors));
|
|
1225
|
+
|
|
1226
|
+
//
|
|
1227
|
+
// NOTE: dns-packet does not yet support Uint8Array
|
|
1228
|
+
// (however undici does have body.arrayBuffer() method)
|
|
1229
|
+
//
|
|
1230
|
+
// https://github.com/mafintosh/dns-packet/issues/72
|
|
1205
1231
|
return packet.decode(buffer);
|
|
1206
1232
|
} catch (_err) {
|
|
1207
1233
|
if (!abortController.signal.aborted) abortController.abort();
|
|
@@ -1886,8 +1912,8 @@ class Tangerine extends dns.promises.Resolver {
|
|
|
1886
1912
|
Buffer.isBuffer(a.data)
|
|
1887
1913
|
? a.data.toString()
|
|
1888
1914
|
: Array.isArray(a.data)
|
|
1889
|
-
|
|
1890
|
-
|
|
1915
|
+
? a.data.map((d) => (Buffer.isBuffer(d) ? d.toString() : d))
|
|
1916
|
+
: a.data
|
|
1891
1917
|
];
|
|
1892
1918
|
});
|
|
1893
1919
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tangerine",
|
|
3
3
|
"description": "Tangerine is the best Node.js drop-in replacement for dns.promises.Resolver using DNS over HTTPS (\"DoH\") via undici with built-in retries, timeouts, smart server rotation, AbortControllers, and caching support for multiple backends (with TTL and purge support).",
|
|
4
|
-
"version": "1.5.
|
|
4
|
+
"version": "1.5.5",
|
|
5
5
|
"author": "Forward Email (https://forwardemail.net)",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/forwardemail/nodejs-dns-over-https-tangerine/issues"
|
|
@@ -12,49 +12,50 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@ungap/structured-clone": "^1.2.0",
|
|
14
14
|
"auto-bind": "4",
|
|
15
|
-
"dns-packet": "^5.6.
|
|
15
|
+
"dns-packet": "^5.6.1",
|
|
16
16
|
"dohdec": "^5.0.3",
|
|
17
17
|
"get-stream": "6",
|
|
18
|
-
"hostile": "^1.
|
|
19
|
-
"ipaddr.js": "^2.0
|
|
18
|
+
"hostile": "^1.4.0",
|
|
19
|
+
"ipaddr.js": "^2.2.0",
|
|
20
|
+
"is-stream": "2.0.1",
|
|
20
21
|
"merge-options": "3.0.4",
|
|
21
22
|
"p-map": "4",
|
|
22
23
|
"p-timeout": "4",
|
|
23
24
|
"p-wait-for": "3",
|
|
24
25
|
"port-numbers": "6.0.1",
|
|
25
|
-
"private-ip": "^3.0.
|
|
26
|
-
"punycode": "^2.3.
|
|
27
|
-
"semver": "^7.
|
|
26
|
+
"private-ip": "^3.0.2",
|
|
27
|
+
"punycode": "^2.3.1",
|
|
28
|
+
"semver": "^7.6.3"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
|
-
"@commitlint/cli": "^
|
|
31
|
-
"@commitlint/config-conventional": "^
|
|
31
|
+
"@commitlint/cli": "^19.3.0",
|
|
32
|
+
"@commitlint/config-conventional": "^19.2.2",
|
|
32
33
|
"ava": "^5.2.0",
|
|
33
|
-
"axios": "^1.
|
|
34
|
+
"axios": "^1.7.3",
|
|
34
35
|
"benchmark": "^2.1.4",
|
|
35
36
|
"cross-env": "^7.0.3",
|
|
36
|
-
"eslint": "^8.
|
|
37
|
+
"eslint": "^9.8.0",
|
|
37
38
|
"eslint-config-xo-lass": "^2.0.1",
|
|
38
|
-
"fetch-mock": "^
|
|
39
|
+
"fetch-mock": "^10.1.1",
|
|
39
40
|
"fixpack": "^4.0.0",
|
|
40
41
|
"got": "11",
|
|
41
|
-
"husky": "^
|
|
42
|
-
"ioredis": "^5.
|
|
43
|
-
"ioredis-mock": "^8.
|
|
42
|
+
"husky": "^9.1.4",
|
|
43
|
+
"ioredis": "^5.4.1",
|
|
44
|
+
"ioredis-mock": "^8.9.0",
|
|
44
45
|
"is-ci": "^3.0.1",
|
|
45
|
-
"lint-staged": "^
|
|
46
|
+
"lint-staged": "^15.2.8",
|
|
46
47
|
"lodash": "^4.17.21",
|
|
47
|
-
"nock": "^13.
|
|
48
|
+
"nock": "^13.5.4",
|
|
48
49
|
"node-fetch": "2",
|
|
49
|
-
"nyc": "^
|
|
50
|
-
"phin": "^3.7.
|
|
51
|
-
"remark-cli": "
|
|
50
|
+
"nyc": "^17.0.0",
|
|
51
|
+
"phin": "^3.7.1",
|
|
52
|
+
"remark-cli": "11.0.0",
|
|
52
53
|
"remark-preset-github": "^4.0.4",
|
|
53
54
|
"request": "^2.88.2",
|
|
54
55
|
"sort-keys": "4.2.0",
|
|
55
|
-
"superagent": "^
|
|
56
|
-
"undici": "^
|
|
57
|
-
"xo": "^0.
|
|
56
|
+
"superagent": "^9.0.2",
|
|
57
|
+
"undici": "^6.19.5",
|
|
58
|
+
"xo": "^0.58.0"
|
|
58
59
|
},
|
|
59
60
|
"engines": {
|
|
60
61
|
"node": ">=16"
|