78 lines
9.9 KiB
JavaScript
78 lines
9.9 KiB
JavaScript
|
|
"use strict";
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
exports.sendInParallel = sendInParallel;
|
||
|
|
exports.sendMessage = sendMessage;
|
||
|
|
var _dgram = _interopRequireDefault(require("dgram"));
|
||
|
|
var _net = _interopRequireDefault(require("net"));
|
||
|
|
var _nodeUrl = _interopRequireDefault(require("node:url"));
|
||
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
async function sendInParallel(addresses, port, request, signal) {
|
||
|
|
signal.throwIfAborted();
|
||
|
|
return await new Promise((resolve, reject) => {
|
||
|
|
const sockets = [];
|
||
|
|
let errorCount = 0;
|
||
|
|
const onError = err => {
|
||
|
|
errorCount++;
|
||
|
|
if (errorCount === addresses.length) {
|
||
|
|
signal.removeEventListener('abort', onAbort);
|
||
|
|
clearSockets();
|
||
|
|
reject(err);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
const onMessage = message => {
|
||
|
|
signal.removeEventListener('abort', onAbort);
|
||
|
|
clearSockets();
|
||
|
|
resolve(message);
|
||
|
|
};
|
||
|
|
const onAbort = () => {
|
||
|
|
clearSockets();
|
||
|
|
reject(signal.reason);
|
||
|
|
};
|
||
|
|
const clearSockets = () => {
|
||
|
|
for (const socket of sockets) {
|
||
|
|
socket.removeListener('error', onError);
|
||
|
|
socket.removeListener('message', onMessage);
|
||
|
|
socket.close();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
signal.addEventListener('abort', onAbort, {
|
||
|
|
once: true
|
||
|
|
});
|
||
|
|
for (let j = 0; j < addresses.length; j++) {
|
||
|
|
const udpType = addresses[j].family === 6 ? 'udp6' : 'udp4';
|
||
|
|
const socket = _dgram.default.createSocket(udpType);
|
||
|
|
sockets.push(socket);
|
||
|
|
socket.on('error', onError);
|
||
|
|
socket.on('message', onMessage);
|
||
|
|
socket.send(request, 0, request.length, port, addresses[j].address);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
async function sendMessage(host, port, lookup, signal, request) {
|
||
|
|
signal.throwIfAborted();
|
||
|
|
let addresses;
|
||
|
|
if (_net.default.isIP(host)) {
|
||
|
|
addresses = [{
|
||
|
|
address: host,
|
||
|
|
family: _net.default.isIPv6(host) ? 6 : 4
|
||
|
|
}];
|
||
|
|
} else {
|
||
|
|
addresses = await new Promise((resolve, reject) => {
|
||
|
|
const onAbort = () => {
|
||
|
|
reject(signal.reason);
|
||
|
|
};
|
||
|
|
const domainInASCII = _nodeUrl.default.domainToASCII(host);
|
||
|
|
lookup(domainInASCII === '' ? host : domainInASCII, {
|
||
|
|
all: true
|
||
|
|
}, (err, addresses) => {
|
||
|
|
signal.removeEventListener('abort', onAbort);
|
||
|
|
err ? reject(err) : resolve(addresses);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return await sendInParallel(addresses, port, request, signal);
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGdyYW0iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9uZXQiLCJfbm9kZVVybCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwic2VuZEluUGFyYWxsZWwiLCJhZGRyZXNzZXMiLCJwb3J0IiwicmVxdWVzdCIsInNpZ25hbCIsInRocm93SWZBYm9ydGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzb2NrZXRzIiwiZXJyb3JDb3VudCIsIm9uRXJyb3IiLCJlcnIiLCJsZW5ndGgiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25BYm9ydCIsImNsZWFyU29ja2V0cyIsIm9uTWVzc2FnZSIsIm1lc3NhZ2UiLCJyZWFzb24iLCJzb2NrZXQiLCJyZW1vdmVMaXN0ZW5lciIsImNsb3NlIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uY2UiLCJqIiwidWRwVHlwZSIsImZhbWlseSIsImRncmFtIiwiY3JlYXRlU29ja2V0IiwicHVzaCIsIm9uIiwic2VuZCIsImFkZHJlc3MiLCJzZW5kTWVzc2FnZSIsImhvc3QiLCJsb29rdXAiLCJuZXQiLCJpc0lQIiwiaXNJUHY2IiwiZG9tYWluSW5BU0NJSSIsInVybCIsImRvbWFpblRvQVNDSUkiLCJhbGwiXSwic291cmNlcyI6WyIuLi9zcmMvc2VuZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZ3JhbSBmcm9tICdkZ3JhbSc7XG5pbXBvcnQgZG5zIGZyb20gJ2Rucyc7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgdXJsIGZyb20gJ25vZGU6dXJsJztcblxudHlwZSBMb29rdXBGdW5jdGlvbiA9IChob3N0bmFtZTogc3RyaW5nLCBvcHRpb25zOiBkbnMuTG9va3VwQWxsT3B0aW9ucywgY2FsbGJhY2s6IChlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiB8IG51bGwsIGFkZHJlc3NlczogZG5zLkxvb2t1cEFkZHJlc3NbXSkgPT4gdm9pZCkgPT4gdm9pZDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRJblBhcmFsbGVsKGFkZHJlc3NlczogZG5zLkxvb2t1cEFkZHJlc3NbXSwgcG9ydDogbnVtYmVyLCByZXF1ZXN0OiBCdWZmZXIsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNvY2tldHM6IGRncmFtLlNvY2tldFtdID0gW107XG5cbiAgICBsZXQgZXJyb3JDb3VudCA9IDA7XG5cbiAgICBjb25zdCBvbkVycm9yID0gKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgaWYgKGVycm9yQ291bnQgPT09IGFkZHJlc3Nlcy5sZW5ndGgpIHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG4gICAgICAgIGNsZWFyU29ja2V0cygpO1xuXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1lc3NhZ2UgPSAobWVzc2FnZTogQnVmZmVyKSA9PiB7XG4gICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KTtcbiAgICAgIGNsZWFyU29ja2V0cygpO1xuXG4gICAgICByZXNvbHZlKG1lc3NhZ2UpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4ge1xuICAgICAgY2xlYXJTb2NrZXRzKCk7XG5cbiAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2xlYXJTb2NrZXRzID0gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBzb2NrZXQgb2Ygc29ja2V0cykge1xuICAgICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSk7XG4gICAgICAgIHNvY2tldC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFkZHJlc3Nlcy5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgdWRwVHlwZSA9IGFkZHJlc3Nlc1tqXS5mYW1pbHkgPT09IDYgPyAndWRwNicgOiAndWRwNCc7XG5cbiAgICAgIGNvbnN0IHNvY2tldCA9IGRncmFtLmNyZWF0ZVNvY2tldCh1ZHBUeXBlKTtcbiAgICAgIHNvY2tldHMucHVzaChzb2NrZXQpO1xuICAgICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc29ja2V0Lm9uKCdtZXNzYWdlJywgb25NZXNzYWdlKTtcbiAgICAgIHNvY2tldC5zZW5kKHJlcXVlc3QsIDAsIHJlcXVlc3QubGVuZ3RoLCBwb3J0LCBhZGRyZXNzZXNbal0uYWRkcmVzcyk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRNZXNzYWdlKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBsb29rdXA6IExvb2t1cEZ1bmN0aW9uLCBzaWduYWw6IEFib3J0U2lnbmFsLCByZXF1ZXN0OiBCdWZmZXIpIHtcbiAgc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgbGV0IGFkZHJlc3NlczogZG5zLkxvb2t1cEFkZHJlc3NbXTtcblxuICBpZiAobmV0LmlzSVAoaG9zdCkpIHtcbiAgICBhZGRyZXNzZXMgPSBbXG4gICAgICB7IGFkZHJlc3M6IGhvc3QsIGZhbWlseTogbmV0LmlzSVB2Nihob3N0KSA/IDYgOiA0IH1cbiAgICBdO1xuICB9IGVsc2Uge1xuICAgIGFkZHJlc3NlcyA9IGF3YWl0IG5ldyBQcm9taXNlPGRucy5Mb29rdXBBZGRyZXNzW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IG9uQWJvcnQgPSAoKSA9PiB7XG4gICAgICAgIHJlamVjdChzaWduYWwucmVhc29uKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRvbWFpbkluQVNDSUkgPSB1cmwuZG9tYWluVG9BU0NJSShob3N0KTtcbiAgICAgIGxvb2t1cChkb21haW5JbkFTQ0lJID09PSAnJyA/IGhvc3QgOiBkb21haW5JbkFTQ0lJLCB7IGFsbDogdHJ1ZSB9LCAoZXJyLCBhZGRyZXNzZXMpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25BYm9ydCk7XG5cbiAgICAgICAgZXJyID8gcmV
|