const isFreeBSD = /^freebsd/.test(process.platform); // Interop with browser const args = (typeof process !== "undefined") ? require("args-parser")(process.argv) : {}; // If host is omitted, the server will accept connections on the unspecified IPv6 address (::) when IPv6 is available and the unspecified IPv4 address (0.0.0.0) otherwise. // Dual-stack support for (::) // Also read HOST if not FreeBSD, as HOST is a system environment variable in FreeBSD let hostEnv = isFreeBSD ? null : process.env.HOST; const hostname = args.host || process.env.UPTIME_KUMA_HOST || hostEnv; const port = [ args.port, process.env.UPTIME_KUMA_PORT, process.env.PORT, 3001 ] .map(portValue => parseInt(portValue)) .find(portValue => !isNaN(portValue)); const sslKey = args["ssl-key"] || process.env.UPTIME_KUMA_SSL_KEY || process.env.SSL_KEY || undefined; const sslCert = args["ssl-cert"] || process.env.UPTIME_KUMA_SSL_CERT || process.env.SSL_CERT || undefined; const sslKeyPassphrase = args["ssl-key-passphrase"] || process.env.UPTIME_KUMA_SSL_KEY_PASSPHRASE || process.env.SSL_KEY_PASSPHRASE || undefined; const isSSL = sslKey && sslCert; /** * Get the local WebSocket URL * @returns {string} The local WebSocket URL */ function getLocalWebSocketURL() { const protocol = isSSL ? "wss" : "ws"; const host = hostname || "localhost"; return `${protocol}://${host}:${port}`; } const localWebSocketURL = getLocalWebSocketURL(); const demoMode = args["demo"] || false; module.exports = { args, hostname, port, sslKey, sslCert, sslKeyPassphrase, isSSL, localWebSocketURL, demoMode, };