Files
openclaw/src/gateway/server-control-ui-root.ts
Gustavo Madeira Santana 8de63ca268 refactor(gateway): split startup and runtime seams (#63975)
Merged via squash.

Prepared head SHA: c6e47efa12
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-09 21:28:29 -04:00

63 lines
1.8 KiB
TypeScript

import path from "node:path";
import {
ensureControlUiAssetsBuilt,
isPackageProvenControlUiRootSync,
resolveControlUiRootOverrideSync,
resolveControlUiRootSync,
} from "../infra/control-ui-assets.js";
import type { RuntimeEnv } from "../runtime.js";
import type { ControlUiRootState } from "./control-ui.js";
export async function resolveGatewayControlUiRootState(params: {
controlUiRootOverride?: string;
controlUiEnabled: boolean;
gatewayRuntime: RuntimeEnv;
log: { warn: (message: string) => void };
}): Promise<ControlUiRootState | undefined> {
if (params.controlUiRootOverride) {
const resolvedOverride = resolveControlUiRootOverrideSync(params.controlUiRootOverride);
const resolvedOverridePath = path.resolve(params.controlUiRootOverride);
if (!resolvedOverride) {
params.log.warn(`gateway: controlUi.root not found at ${resolvedOverridePath}`);
}
return resolvedOverride
? { kind: "resolved", path: resolvedOverride }
: { kind: "invalid", path: resolvedOverridePath };
}
if (!params.controlUiEnabled) {
return undefined;
}
const resolveRoot = () =>
resolveControlUiRootSync({
moduleUrl: import.meta.url,
argv1: process.argv[1],
cwd: process.cwd(),
});
let resolvedRoot = resolveRoot();
if (!resolvedRoot) {
const ensureResult = await ensureControlUiAssetsBuilt(params.gatewayRuntime);
if (!ensureResult.ok && ensureResult.message) {
params.log.warn(`gateway: ${ensureResult.message}`);
}
resolvedRoot = resolveRoot();
}
if (!resolvedRoot) {
return { kind: "missing" };
}
return {
kind: isPackageProvenControlUiRootSync(resolvedRoot, {
moduleUrl: import.meta.url,
argv1: process.argv[1],
cwd: process.cwd(),
})
? "bundled"
: "resolved",
path: resolvedRoot,
};
}