fix(gateway): advertise reachable canvas host

This commit is contained in:
Peter Steinberger
2025-12-27 00:07:19 +01:00
parent 4daf75a469
commit fae11e5a55
2 changed files with 17 additions and 1 deletions

View File

@@ -3204,6 +3204,10 @@ export async function startGatewayServer(
const machineDisplayName = await getMachineDisplayName();
const canvasHostPortForBridge = canvasHostServer?.port;
const canvasHostHostForBridge =
canvasHostServer && bridgeHost && bridgeHost !== "0.0.0.0" && bridgeHost !== "::"
? bridgeHost
: undefined;
if (bridgeEnabled && bridgePort > 0 && bridgeHost) {
try {
@@ -3212,6 +3216,7 @@ export async function startGatewayServer(
port: bridgePort,
serverName: machineDisplayName,
canvasHostPort: canvasHostPortForBridge,
canvasHostHost: canvasHostHostForBridge,
onRequest: (nodeId, req) => handleBridgeRequest(nodeId, req),
onAuthenticated: async (node) => {
const host = node.displayName?.trim() || node.nodeId;

View File

@@ -138,6 +138,7 @@ export type NodeBridgeServerOpts = {
port: number; // 0 = ephemeral
pairingBaseDir?: string;
canvasHostPort?: number;
canvasHostHost?: string;
onEvent?: (nodeId: string, evt: BridgeEventFrame) => Promise<void> | void;
onRequest?: (
nodeId: string,
@@ -187,10 +188,20 @@ export async function startNodeBridgeServer(
? opts.serverName.trim()
: os.hostname();
const isLoopbackHost = (host: string) => {
const normalized = host.trim().toLowerCase();
if (normalized === "localhost") return true;
if (normalized === "::1") return true;
if (normalized === "0.0.0.0" || normalized === "::") return true;
return normalized.startsWith("127.");
};
const buildCanvasHostUrl = (socket: net.Socket) => {
const port = opts.canvasHostPort;
if (!port) return undefined;
const host = socket.localAddress?.trim();
const localHost = socket.localAddress?.trim() ?? "";
const override = opts.canvasHostHost?.trim() ?? "";
const host = !localHost || isLoopbackHost(localHost) ? override : localHost;
if (!host) return undefined;
const formatted = host.includes(":") ? `[${host}]` : host;
return `http://${formatted}:${port}`;