import { resolveBrowserConfig } from "./browser/config.js" ;
import { ensureBrowserControlAuth } from "./browser/control-auth.js" ;
import { createBrowserRuntimeState, stopBrowserRuntime } from "./browser/runtime-lifecycle.js" ;
import { type BrowserServerState, createBrowserRouteContext } from "./browser/server-context.js" ;
import { loadConfig } from "./config/config.js" ;
import { createSubsystemLogger } from "./logging/subsystem.js" ;
import { isDefaultBrowserPluginEnabled } from "./plugin-enabled.js" ;
let state: BrowserServerState | null = null ;
const log = createSubsystemLogger("browser" );
const logService = log.child("service" );
export function getBrowserControlState(): BrowserServerState | null {
return state;
}
export function createBrowserControlContext() {
return createBrowserRouteContext({
getState: () => state,
refreshConfigFromDisk: true ,
});
}
export async function startBrowserControlServiceFromConfig(): Promise<BrowserServerState | null > {
if (state) {
return state;
}
const cfg = loadConfig();
if (!isDefaultBrowserPluginEnabled(cfg)) {
return null ;
}
const resolved = resolveBrowserConfig(cfg.browser, cfg);
if (!resolved.enabled) {
return null ;
}
try {
const ensured = await ensureBrowserControlAuth({ cfg });
if (ensured.generatedToken) {
logService.info("No browser auth configured; generated gateway.auth.token automatically." );
}
} catch (err) {
logService.warn(`failed to auto-configure browser auth: ${String(err)}`);
}
state = await createBrowserRuntimeState({
server: null ,
port: resolved.controlPort,
resolved,
onWarn: (message) => logService.warn(message),
});
logService.info(
`Browser control service ready (profiles=${Object.keys(resolved.profiles).length})`,
);
return state;
}
export async function stopBrowserControlService(): Promise<void > {
const current = state;
await stopBrowserRuntime({
current,
getState: () => state,
clearState: () => {
state = null ;
},
onWarn: (message) => logService.warn(message),
});
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland