diff --git a/src/daemon/service.ts b/src/daemon/service.ts index 45fe2f638a2..f38c59fef66 100644 --- a/src/daemon/service.ts +++ b/src/daemon/service.ts @@ -17,6 +17,14 @@ import { 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, @@ -26,41 +34,34 @@ import { stopSystemdService, uninstallSystemdService, } from "./systemd.js"; +export type { + GatewayServiceCommandConfig, + GatewayServiceControlArgs, + GatewayServiceEnv, + GatewayServiceEnvArgs, + GatewayServiceInstallArgs, + GatewayServiceManageArgs, +} from "./service-types.js"; -export type GatewayServiceInstallArgs = { - env: Record; - stdout: NodeJS.WritableStream; - programArguments: string[]; - workingDirectory?: string; - environment?: Record; - description?: string; -}; +function ignoreInstallResult( + install: (args: GatewayServiceInstallArgs) => Promise, +): (args: GatewayServiceInstallArgs) => Promise { + return async (args) => { + await install(args); + }; +} export type GatewayService = { label: string; loadedText: string; notLoadedText: string; install: (args: GatewayServiceInstallArgs) => Promise; - uninstall: (args: { - env: Record; - stdout: NodeJS.WritableStream; - }) => Promise; - stop: (args: { - env?: Record; - stdout: NodeJS.WritableStream; - }) => Promise; - restart: (args: { - env?: Record; - stdout: NodeJS.WritableStream; - }) => Promise; - isLoaded: (args: { env?: Record }) => Promise; - readCommand: (env: Record) => Promise<{ - programArguments: string[]; - workingDirectory?: string; - environment?: Record; - sourcePath?: string; - } | null>; - readRuntime: (env: Record) => Promise; + uninstall: (args: GatewayServiceManageArgs) => Promise; + stop: (args: GatewayServiceControlArgs) => Promise; + restart: (args: GatewayServiceControlArgs) => Promise; + isLoaded: (args: GatewayServiceEnvArgs) => Promise; + readCommand: (env: GatewayServiceEnv) => Promise; + readRuntime: (env: GatewayServiceEnv) => Promise; }; export function resolveGatewayService(): GatewayService { @@ -69,25 +70,11 @@ export function resolveGatewayService(): GatewayService { label: "LaunchAgent", loadedText: "loaded", notLoadedText: "not loaded", - install: async (args) => { - await installLaunchAgent(args); - }, - uninstall: async (args) => { - await uninstallLaunchAgent(args); - }, - stop: async (args) => { - await stopLaunchAgent({ - stdout: args.stdout, - env: args.env, - }); - }, - restart: async (args) => { - await restartLaunchAgent({ - stdout: args.stdout, - env: args.env, - }); - }, - isLoaded: async (args) => isLaunchAgentLoaded(args), + install: ignoreInstallResult(installLaunchAgent), + uninstall: uninstallLaunchAgent, + stop: stopLaunchAgent, + restart: restartLaunchAgent, + isLoaded: isLaunchAgentLoaded, readCommand: readLaunchAgentProgramArguments, readRuntime: readLaunchAgentRuntime, }; @@ -98,27 +85,13 @@ export function resolveGatewayService(): GatewayService { label: "systemd", loadedText: "enabled", notLoadedText: "disabled", - install: async (args) => { - await installSystemdService(args); - }, - uninstall: async (args) => { - await uninstallSystemdService(args); - }, - stop: async (args) => { - await stopSystemdService({ - stdout: args.stdout, - env: args.env, - }); - }, - restart: async (args) => { - await restartSystemdService({ - stdout: args.stdout, - env: args.env, - }); - }, - isLoaded: async (args) => isSystemdServiceEnabled(args), + install: ignoreInstallResult(installSystemdService), + uninstall: uninstallSystemdService, + stop: stopSystemdService, + restart: restartSystemdService, + isLoaded: isSystemdServiceEnabled, readCommand: readSystemdServiceExecStart, - readRuntime: async (env) => await readSystemdServiceRuntime(env), + readRuntime: readSystemdServiceRuntime, }; } @@ -127,27 +100,13 @@ export function resolveGatewayService(): GatewayService { label: "Scheduled Task", loadedText: "registered", notLoadedText: "missing", - install: async (args) => { - await installScheduledTask(args); - }, - uninstall: async (args) => { - await uninstallScheduledTask(args); - }, - stop: async (args) => { - await stopScheduledTask({ - stdout: args.stdout, - env: args.env, - }); - }, - restart: async (args) => { - await restartScheduledTask({ - stdout: args.stdout, - env: args.env, - }); - }, - isLoaded: async (args) => isScheduledTaskInstalled(args), + install: ignoreInstallResult(installScheduledTask), + uninstall: uninstallScheduledTask, + stop: stopScheduledTask, + restart: restartScheduledTask, + isLoaded: isScheduledTaskInstalled, readCommand: readScheduledTaskCommand, - readRuntime: async (env) => await readScheduledTaskRuntime(env), + readRuntime: readScheduledTaskRuntime, }; }