mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-07 20:40:43 +00:00
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import type { Server } from "node:http";
|
|
import { createBrowserRuntimeState, stopBrowserRuntime } from "./browser/runtime-lifecycle.js";
|
|
import { type BrowserServerState, createBrowserRouteContext } from "./browser/server-context.js";
|
|
|
|
type BrowserControlOwner = "server" | "service";
|
|
|
|
let state: BrowserServerState | null = null;
|
|
let owner: BrowserControlOwner | null = null;
|
|
|
|
export function getBrowserControlState(): BrowserServerState | null {
|
|
return state;
|
|
}
|
|
|
|
export function createBrowserControlContext() {
|
|
return createBrowserRouteContext({
|
|
getState: () => state,
|
|
refreshConfigFromDisk: true,
|
|
});
|
|
}
|
|
|
|
export async function ensureBrowserControlRuntime(params: {
|
|
server?: Server | null;
|
|
port: number;
|
|
resolved: BrowserServerState["resolved"];
|
|
owner: BrowserControlOwner;
|
|
onWarn: (message: string) => void;
|
|
}): Promise<BrowserServerState> {
|
|
if (state) {
|
|
if (params.server) {
|
|
state.server = params.server;
|
|
state.port = params.port;
|
|
state.resolved = { ...params.resolved, controlPort: params.port };
|
|
owner = "server";
|
|
}
|
|
return state;
|
|
}
|
|
|
|
state = await createBrowserRuntimeState({
|
|
server: params.server ?? null,
|
|
port: params.port,
|
|
resolved: params.resolved,
|
|
onWarn: params.onWarn,
|
|
});
|
|
owner = params.owner;
|
|
return state;
|
|
}
|
|
|
|
export async function stopBrowserControlRuntime(params: {
|
|
requestedBy: BrowserControlOwner;
|
|
closeServer?: boolean;
|
|
onWarn: (message: string) => void;
|
|
}): Promise<void> {
|
|
const current = state;
|
|
if (!current) {
|
|
return;
|
|
}
|
|
if (params.requestedBy === "service" && current.server && owner === "server") {
|
|
return;
|
|
}
|
|
await stopBrowserRuntime({
|
|
current,
|
|
getState: () => state,
|
|
clearState: () => {
|
|
state = null;
|
|
owner = null;
|
|
},
|
|
closeServer: params.closeServer,
|
|
onWarn: params.onWarn,
|
|
});
|
|
}
|