index.tsx
Raw
1import path from "node:path";
2import { staticPlugin } from "@elysiajs/static";
3import { Elysia } from "elysia";
4import { MAX_UPLOAD_BYTES, PORT, SSH_DISABLED } from "./config.ts";
5import { authRoutes } from "./routes/auth.tsx";
6import { avatarRoutes } from "./routes/avatars.ts";
7import { gitRoutes } from "./routes/git.ts";
8import { issueRoutes } from "./routes/issues.tsx";
9import { patchRoutes } from "./routes/patches.tsx";
10import { releasesRoutes } from "./routes/releases.tsx";
11import { repoRoutes } from "./routes/repos.tsx";
12import { settingsRoutes } from "./routes/settings.tsx";
13import { syncStartup } from "./services/repoSync.ts";
14import { startSshServer } from "./services/sshServer.ts";
15
16for (const cmd of ["git", "ssh-keygen"]) {
17 const result = Bun.spawnSync(["which", cmd]);
18 if (result.exitCode !== 0) {
19 console.error(`Missing required command: ${cmd}`);
20 process.exit(1);
21 }
22}
23
24await syncStartup();
25if (!SSH_DISABLED) await startSshServer();
26new Elysia({ serve: { maxRequestBodySize: MAX_UPLOAD_BYTES } })
27 .use(
28 staticPlugin({
29 assets: path.resolve("./public"),
30 prefix: "/",
31 }),
32 )
33 .use(gitRoutes)
34 .use(settingsRoutes)
35 .use(authRoutes)
36 .use(repoRoutes)
37 .use(issueRoutes)
38 .use(patchRoutes)
39 .use(releasesRoutes)
40 .use(avatarRoutes)
41 .listen(PORT);
42console.log(`Hearthforge running at http://localhost:${PORT}`);
43