UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

52 lines (51 loc) • 2.29 kB
import { w as parseStrictPositiveInteger } from "./number-coercion-CuVhdCBs.mjs"; import { s as isLoopbackHost } from "./net-C6WEu3pd.mjs"; //#region src/gateway/hosted-plugin-surface-url.ts const normalizeHost = (value, rejectLoopback) => { const trimmed = value?.trim(); if (!trimmed || rejectLoopback && isLoopbackHost(trimmed)) return ""; return trimmed; }; const parseHostHeader = (value) => { if (!value) return { host: "" }; try { const parsed = new URL(`http://${value.trim()}`); return { host: parsed.hostname, port: parseStrictPositiveInteger(parsed.port) }; } catch { return { host: "" }; } }; const parseForwardedProto = (value) => { return Array.isArray(value) ? value[0] : 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 };