feat: implement network IP retrieval for remote access in web command (#3945)

This commit is contained in:
Charles David Mupende
2025-11-07 02:37:23 +01:00
committed by GitHub
parent 9f603e39a6
commit d0f5c825bd

View File

@@ -2,6 +2,29 @@ import { Server } from "../../server/server"
import { UI } from "../ui" import { UI } from "../ui"
import { cmd } from "./cmd" import { cmd } from "./cmd"
import open from "open" import open from "open"
import { networkInterfaces } from "os"
function getNetworkIPs() {
const nets = networkInterfaces()
const results: string[] = []
for (const name of Object.keys(nets)) {
const net = nets[name]
if (!net) continue
for (const netInfo of net) {
// Skip internal and non-IPv4 addresses
if (netInfo.internal || netInfo.family !== "IPv4") continue
// Skip Docker bridge networks (typically 172.x.x.x)
if (netInfo.address.startsWith("172.")) continue
results.push(netInfo.address)
}
}
return results
}
export const WebCommand = cmd({ export const WebCommand = cmd({
command: "web", command: "web",
@@ -29,12 +52,36 @@ export const WebCommand = cmd({
UI.empty() UI.empty()
UI.println(UI.logo(" ")) UI.println(UI.logo(" "))
UI.empty() UI.empty()
UI.println(
UI.Style.TEXT_INFO_BOLD + " Web interface: ", if (hostname === "0.0.0.0") {
UI.Style.TEXT_NORMAL, // Show localhost for local access
server.url.toString(), const localhostUrl = `http://localhost:${server.port}`
) UI.println(
open(server.url.toString()).catch(() => {}) UI.Style.TEXT_INFO_BOLD + " Local access: ",
UI.Style.TEXT_NORMAL,
localhostUrl,
)
// Show network IPs for remote access
const networkIPs = getNetworkIPs()
if (networkIPs.length > 0) {
for (const ip of networkIPs) {
UI.println(
UI.Style.TEXT_INFO_BOLD + " Network access: ",
UI.Style.TEXT_NORMAL,
`http://${ip}:${server.port}`,
)
}
}
// Open localhost in browser
open(localhostUrl.toString()).catch(() => {})
} else {
const displayUrl = server.url.toString()
UI.println(UI.Style.TEXT_INFO_BOLD + " Web interface: ", UI.Style.TEXT_NORMAL, displayUrl)
open(displayUrl).catch(() => {})
}
await new Promise(() => {}) await new Promise(() => {})
await server.stop() await server.stop()
}, },