mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-13 11:00:50 +00:00
115 lines
3.3 KiB
TypeScript
115 lines
3.3 KiB
TypeScript
import {
|
|
installLaunchAgent,
|
|
isLaunchAgentLoaded,
|
|
readLaunchAgentProgramArguments,
|
|
readLaunchAgentRuntime,
|
|
restartLaunchAgent,
|
|
stopLaunchAgent,
|
|
uninstallLaunchAgent,
|
|
} from "./launchd.js";
|
|
import {
|
|
installScheduledTask,
|
|
isScheduledTaskInstalled,
|
|
readScheduledTaskCommand,
|
|
readScheduledTaskRuntime,
|
|
restartScheduledTask,
|
|
stopScheduledTask,
|
|
uninstallScheduledTask,
|
|
} from "./schtasks.js";
|
|
import type { GatewayServiceRuntime } from "./service-runtime.js";
|
|
import type {
|
|
GatewayServiceCommandConfig,
|
|
GatewayServiceControlArgs,
|
|
GatewayServiceEnv,
|
|
GatewayServiceEnvArgs,
|
|
GatewayServiceInstallArgs,
|
|
GatewayServiceManageArgs,
|
|
} from "./service-types.js";
|
|
import {
|
|
installSystemdService,
|
|
isSystemdServiceEnabled,
|
|
readSystemdServiceExecStart,
|
|
readSystemdServiceRuntime,
|
|
restartSystemdService,
|
|
stopSystemdService,
|
|
uninstallSystemdService,
|
|
} from "./systemd.js";
|
|
export type {
|
|
GatewayServiceCommandConfig,
|
|
GatewayServiceControlArgs,
|
|
GatewayServiceEnv,
|
|
GatewayServiceEnvArgs,
|
|
GatewayServiceInstallArgs,
|
|
GatewayServiceManageArgs,
|
|
} from "./service-types.js";
|
|
|
|
function ignoreInstallResult(
|
|
install: (args: GatewayServiceInstallArgs) => Promise<unknown>,
|
|
): (args: GatewayServiceInstallArgs) => Promise<void> {
|
|
return async (args) => {
|
|
await install(args);
|
|
};
|
|
}
|
|
|
|
export type GatewayService = {
|
|
label: string;
|
|
loadedText: string;
|
|
notLoadedText: string;
|
|
install: (args: GatewayServiceInstallArgs) => Promise<void>;
|
|
uninstall: (args: GatewayServiceManageArgs) => Promise<void>;
|
|
stop: (args: GatewayServiceControlArgs) => Promise<void>;
|
|
restart: (args: GatewayServiceControlArgs) => Promise<void>;
|
|
isLoaded: (args: GatewayServiceEnvArgs) => Promise<boolean>;
|
|
readCommand: (env: GatewayServiceEnv) => Promise<GatewayServiceCommandConfig | null>;
|
|
readRuntime: (env: GatewayServiceEnv) => Promise<GatewayServiceRuntime>;
|
|
};
|
|
|
|
export function resolveGatewayService(): GatewayService {
|
|
if (process.platform === "darwin") {
|
|
return {
|
|
label: "LaunchAgent",
|
|
loadedText: "loaded",
|
|
notLoadedText: "not loaded",
|
|
install: ignoreInstallResult(installLaunchAgent),
|
|
uninstall: uninstallLaunchAgent,
|
|
stop: stopLaunchAgent,
|
|
restart: restartLaunchAgent,
|
|
isLoaded: isLaunchAgentLoaded,
|
|
readCommand: readLaunchAgentProgramArguments,
|
|
readRuntime: readLaunchAgentRuntime,
|
|
};
|
|
}
|
|
|
|
if (process.platform === "linux") {
|
|
return {
|
|
label: "systemd",
|
|
loadedText: "enabled",
|
|
notLoadedText: "disabled",
|
|
install: ignoreInstallResult(installSystemdService),
|
|
uninstall: uninstallSystemdService,
|
|
stop: stopSystemdService,
|
|
restart: restartSystemdService,
|
|
isLoaded: isSystemdServiceEnabled,
|
|
readCommand: readSystemdServiceExecStart,
|
|
readRuntime: readSystemdServiceRuntime,
|
|
};
|
|
}
|
|
|
|
if (process.platform === "win32") {
|
|
return {
|
|
label: "Scheduled Task",
|
|
loadedText: "registered",
|
|
notLoadedText: "missing",
|
|
install: ignoreInstallResult(installScheduledTask),
|
|
uninstall: uninstallScheduledTask,
|
|
stop: stopScheduledTask,
|
|
restart: restartScheduledTask,
|
|
isLoaded: isScheduledTaskInstalled,
|
|
readCommand: readScheduledTaskCommand,
|
|
readRuntime: readScheduledTaskRuntime,
|
|
};
|
|
}
|
|
|
|
throw new Error(`Gateway service install not supported on ${process.platform}`);
|
|
}
|