From 53a2f1ff0c5e7ef6434dc536b0b40592c0afa307 Mon Sep 17 00:00:00 2001 From: syntaxbullet Date: Thu, 8 Jan 2026 15:13:09 +0100 Subject: [PATCH] chore: combine processes --- src/index.ts | 75 +++++++++++++--------------------------------------- 1 file changed, 19 insertions(+), 56 deletions(-) diff --git a/src/index.ts b/src/index.ts index 758aaee..5d601b9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,8 @@ import { AuroraClient } from "@/lib/BotClient"; import { env } from "@lib/env"; import { join } from "node:path"; +import { startWebServerFromRoot } from "./web/src/server"; + // Load commands & events await AuroraClient.loadCommands(); await AuroraClient.loadEvents(); @@ -9,62 +11,17 @@ await AuroraClient.deployCommands(); console.log("🌐 Starting web server..."); -const webProjectPath = join(import.meta.dir, "web"); -const isProduction = process.env.NODE_ENV === "production"; let shuttingDown = false; -const startWebServer = () => { - const args = isProduction - ? [process.execPath, "src/index.ts"] - : [process.execPath, "--hot", "src/index.ts"]; +const webProjectPath = join(import.meta.dir, "web"); +const webPort = Number(process.env.WEB_PORT) || 3000; +const webHost = process.env.HOST || "0.0.0.0"; - return Bun.spawn(args, { - cwd: webProjectPath, - stdout: "inherit", - stderr: "inherit", - env: { - ...process.env, - WEB_PORT: process.env.WEB_PORT || "3000", - ...(process.env.HOST && { WEB_HOST: process.env.HOST }), - }, - }); -}; - -let webServer = startWebServer(); - -// Monitor web server and restart on unexpected exit -const monitorWebServer = async () => { - const exitCode = await webServer.exited; - if (!shuttingDown && exitCode !== 0) { - console.warn(`⚠️ Web server exited with code ${exitCode}, restarting in 1s...`); - await Bun.sleep(1000); - webServer = startWebServer(); - monitorWebServer(); // Continue monitoring the new process - } -}; -monitorWebServer(); - -// Wait for web server to be ready -const waitForWebServer = async (url: string, maxAttempts = 30): Promise => { - for (let i = 0; i < maxAttempts; i++) { - try { - const res = await fetch(`${url}/api/health`); - if (res.ok) return true; - } catch { - // Server not ready yet - } - await Bun.sleep(100); - } - return false; -}; - -const webPort = process.env.WEB_PORT || "3000"; -const webReady = await waitForWebServer(`http://localhost:${webPort}`); -if (webReady) { - console.log(`✅ Web server ready at http://localhost:${webPort}`); -} else { - console.warn("⚠️ Web server did not become ready in time, continuing anyway..."); -} +// Start web server in the same process +const webServer = await startWebServerFromRoot(webProjectPath, { + port: webPort, + hostname: webHost, +}); // login with the token from .env if (!env.DISCORD_BOT_TOKEN) { @@ -73,12 +30,18 @@ if (!env.DISCORD_BOT_TOKEN) { AuroraClient.login(env.DISCORD_BOT_TOKEN); // Handle graceful shutdown -const shutdownHandler = () => { +const shutdownHandler = async () => { if (shuttingDown) return; shuttingDown = true; - console.log("🛑 Shutdown signal received. Stopping web server..."); - webServer.kill(); + console.log("🛑 Shutdown signal received. Stopping services..."); + + // Stop web server + await webServer.stop(); + + // Stop bot AuroraClient.shutdown(); + + process.exit(0); }; process.on("SIGINT", shutdownHandler);