UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

57 lines (56 loc) 2.42 kB
import { w as parseStrictPositiveInteger } from "./number-coercion-CLj0HTDM.js"; import { s as isLoopbackHost } from "./net-DbNPs6Xm.js"; //#region src/gateway/hosted-plugin-surface-url.ts const normalizeHost = (value, rejectLoopback) => { if (!value) return ""; const trimmed = value.trim(); if (!trimmed) return ""; if (rejectLoopback && isLoopbackHost(trimmed)) return ""; return trimmed; }; const parseHostHeader = (value) => { if (!value) return { host: "" }; try { const parsed = new URL(`http://${value.trim()}`); const portRaw = parsed.port.trim(); const port = parseStrictPositiveInteger(portRaw); return { host: parsed.hostname, port: Number.isFinite(port) ? port : void 0 }; } catch { return { host: "" }; } }; const parseForwardedProto = (value) => { if (Array.isArray(value)) return value[0]; return value; }; const parseForwardedHost = (value) => { return (Array.isArray(value) ? value[0] : value)?.split(",")[0]?.trim(); }; /** Resolve the URL that plugins should advertise for hosted node surfaces. */ function resolveHostedPluginSurfaceUrl(params) { const port = params.port; if (!port) return; const scheme = parseForwardedProto(params.forwardedProto)?.trim() === "https" ? "https" : params.scheme ?? "http"; const override = normalizeHost(params.hostOverride, true); const forwardedHostRaw = parseForwardedHost(params.forwardedHost); const parsedForwardedHost = parseHostHeader(forwardedHostRaw); const parsedRequestHost = parseHostHeader(params.requestHost); const requestHost = normalizeHost(parsedRequestHost.host, Boolean(override)); const forwardedHost = normalizeHost(parsedForwardedHost.host, Boolean(override)); const advertisedHost = forwardedHost ? parsedForwardedHost : parsedRequestHost; const localAddress = normalizeHost(params.localAddress, Boolean(override || forwardedHost || requestHost)); const host = override || forwardedHost || requestHost || localAddress; if (!host) return; let exposedPort = port; if (!override && (forwardedHost || requestHost)) { if (advertisedHost.port && advertisedHost.port > 0) exposedPort = advertisedHost.port; else if (scheme === "https") exposedPort = 443; else if (scheme === "http") exposedPort = 80; } return `${scheme}://${host.includes(":") && !(host.startsWith("[") && host.endsWith("]")) ? `[${host}]` : host}:${exposedPort}`; } //#endregion export { resolveHostedPluginSurfaceUrl as t };