• config.js
  • 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,
    };