node_modules: update (#259)

Co-authored-by: dawidd6 <9713907+dawidd6@users.noreply.github.com>
This commit is contained in:
Dawid Dziurla
2026-02-05 08:49:11 +01:00
committed by GitHub
parent a4eb4faebc
commit 62a2d05b79
16 changed files with 335 additions and 131 deletions

View File

@@ -82,15 +82,22 @@ const formatDNSValue = (value, extra) => {
return Object.assign({}, extra || {});
}
let addresses = value.addresses || [];
// Select a random address from available addresses, or null if none
let host = null;
if (addresses.length === 1) {
host = addresses[0];
} else if (addresses.length > 1) {
host = addresses[Math.floor(Math.random() * addresses.length)];
}
return Object.assign(
{
servername: value.servername,
host:
!value.addresses || !value.addresses.length
? null
: value.addresses.length === 1
? value.addresses[0]
: value.addresses[Math.floor(Math.random() * value.addresses.length)]
host,
// Include all addresses for connection fallback support
_addresses: addresses
},
extra || {}
);
@@ -151,66 +158,32 @@ module.exports.resolveHostname = (options, callback) => {
}
}
// Resolve both IPv4 and IPv6 addresses for fallback support
let ipv4Addresses = [];
let ipv6Addresses = [];
let ipv4Error = null;
let ipv6Error = null;
resolver(4, options.host, options, (err, addresses) => {
if (err) {
if (cached) {
dnsCache.set(options.host, {
value: cached.value,
expires: Date.now() + (options.dnsTtl || DNS_TTL)
});
return callback(
null,
formatDNSValue(cached.value, {
cached: true,
error: err
})
);
}
return callback(err);
}
if (addresses && addresses.length) {
let value = {
addresses,
servername: options.servername || options.host
};
dnsCache.set(options.host, {
value,
expires: Date.now() + (options.dnsTtl || DNS_TTL)
});
return callback(
null,
formatDNSValue(value, {
cached: false
})
);
ipv4Error = err;
} else {
ipv4Addresses = addresses || [];
}
resolver(6, options.host, options, (err, addresses) => {
if (err) {
if (cached) {
dnsCache.set(options.host, {
value: cached.value,
expires: Date.now() + (options.dnsTtl || DNS_TTL)
});
return callback(
null,
formatDNSValue(cached.value, {
cached: true,
error: err
})
);
}
return callback(err);
ipv6Error = err;
} else {
ipv6Addresses = addresses || [];
}
if (addresses && addresses.length) {
// Combine addresses: IPv4 first, then IPv6
let allAddresses = ipv4Addresses.concat(ipv6Addresses);
if (allAddresses.length) {
let value = {
addresses,
addresses: allAddresses,
servername: options.servername || options.host
};
@@ -227,6 +200,25 @@ module.exports.resolveHostname = (options, callback) => {
);
}
// No addresses from resolve4/resolve6, try dns.lookup as fallback
if (ipv4Error && ipv6Error) {
// Both resolvers had errors
if (cached) {
dnsCache.set(options.host, {
value: cached.value,
expires: Date.now() + (options.dnsTtl || DNS_TTL)
});
return callback(
null,
formatDNSValue(cached.value, {
cached: true,
error: ipv4Error
})
);
}
}
try {
dns.lookup(options.host, { all: true }, (err, addresses) => {
if (err) {
@@ -247,19 +239,17 @@ module.exports.resolveHostname = (options, callback) => {
return callback(err);
}
let address = addresses
? addresses
.filter(addr => isFamilySupported(addr.family))
.map(addr => addr.address)
.shift()
: false;
// Get all supported addresses from dns.lookup
let supportedAddresses = addresses
? addresses.filter(addr => isFamilySupported(addr.family)).map(addr => addr.address)
: [];
if (addresses && addresses.length && !address) {
if (addresses && addresses.length && !supportedAddresses.length) {
// there are addresses but none can be used
console.warn(`Failed to resolve IPv${addresses[0].family} addresses with current network`);
}
if (!address && cached) {
if (!supportedAddresses.length && cached) {
// nothing was found, fallback to cached value
return callback(
null,
@@ -270,7 +260,7 @@ module.exports.resolveHostname = (options, callback) => {
}
let value = {
addresses: address ? [address] : [options.host],
addresses: supportedAddresses.length ? supportedAddresses : [options.host],
servername: options.servername || options.host
};
@@ -286,7 +276,7 @@ module.exports.resolveHostname = (options, callback) => {
})
);
});
} catch (_err) {
} catch (lookupErr) {
if (cached) {
dnsCache.set(options.host, {
value: cached.value,
@@ -297,11 +287,11 @@ module.exports.resolveHostname = (options, callback) => {
null,
formatDNSValue(cached.value, {
cached: true,
error: err
error: lookupErr
})
);
}
return callback(err);
return callback(ipv4Error || ipv6Error || lookupErr);
}
});
});