mira-app-server
Version:
Mira Server - standalone server application using mira-app-core
44 lines • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeServerIPv4 = initializeServerIPv4;
const dgram_1 = require("dgram");
const net_1 = require("net");
const os_1 = require("os");
const ENV_NAME = 'MIRA_SERVER_IPV4';
function getFallbackIPv4() {
return Object.values((0, os_1.networkInterfaces)())
.flat()
.find(address => address?.family === 'IPv4' && !address.internal)?.address || '127.0.0.1';
}
function getDefaultRouteIPv4() {
return new Promise((resolve, reject) => {
const socket = (0, dgram_1.createSocket)('udp4');
const timer = setTimeout(() => {
socket.close();
reject(new Error('IPv4 detection timed out'));
}, 1000);
socket.once('error', error => {
clearTimeout(timer);
socket.close();
reject(error);
});
socket.connect(53, '8.8.8.8', () => {
const address = socket.address().address;
clearTimeout(timer);
socket.close();
resolve(address);
});
});
}
async function initializeServerIPv4() {
const configured = process.env[ENV_NAME];
if (configured) {
if (!(0, net_1.isIPv4)(configured))
throw new Error(`${ENV_NAME} must be a valid IPv4 address`);
return configured;
}
const detected = await getDefaultRouteIPv4().catch(getFallbackIPv4);
process.env[ENV_NAME] = detected;
return detected;
}
//# sourceMappingURL=serverIPv4.js.map