export type AppShutdownState = "running" | "stopping" | "stopped"; export type ShutdownService = { getState: () => AppShutdownState; stop: () => Promise; }; export function createShutdownService(stopRuntime: () => Promise): ShutdownService { let state: AppShutdownState = "running"; let stopPromise: Promise | null = null; return { getState: () => state, stop: () => { if (state === "stopped") { return Promise.resolve(); } if (stopPromise) { return stopPromise; } state = "stopping"; stopPromise = stopRuntime().finally(() => { state = "stopped"; stopPromise = null; }); return stopPromise; }, }; }