Skip to content

Commit b768e01

Browse files
committed
Update daemon.ts
1 parent 2cbc745 commit b768e01

1 file changed

Lines changed: 46 additions & 27 deletions

File tree

src/daemon.ts

Lines changed: 46 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ import {
2626
import { ensureDirs } from "./utils";
2727
import { unlinkSync, existsSync } from "fs";
2828
import type { DaemonMessage, DaemonResponse } from "./types";
29+
import type { BunRequest, Server } from "bun";
2930

3031
ensureDirs();
3132

33+
let server: Server<any> | null = null
3234
const pm = new ProcessManager();
3335
const dashboard = new Dashboard(pm);
3436
const moduleManager = new ModuleManager(pm);
@@ -49,6 +51,37 @@ const metricsInterval = setInterval(() => {
4951
pm.getMetrics();
5052
}, 2000);
5153

54+
55+
const handleServerRequests = async (req: Request) => {
56+
57+
if (req.method !== "POST") {
58+
return Response.json(
59+
{ type: "error", error: "Method Not Allowed", success: false },
60+
{ status: 405 }
61+
)
62+
}
63+
64+
try {
65+
66+
const msg: DaemonMessage = await req.json() as DaemonMessage;
67+
68+
const response = await handleMessage(msg);
69+
70+
return Response.json(response);
71+
72+
} catch (err: any) {
73+
return Response.json(
74+
{ type: "error", error: err.message, success: false },
75+
{ status: 500 }
76+
);
77+
}
78+
};
79+
80+
const serverOptions = {
81+
unix: DAEMON_SOCKET,
82+
fetch: handleServerRequests
83+
}
84+
5285
async function handleMessage(msg: DaemonMessage): Promise<DaemonResponse> {
5386
try {
5487
switch (msg.type) {
@@ -156,9 +189,20 @@ async function handleMessage(msg: DaemonMessage): Promise<DaemonResponse> {
156189
await moduleManager.uninstall(msg.data.module);
157190
return { type: "moduleUninstall", success: true, id: msg.id };
158191
}
192+
159193
case "moduleList": {
160194
return { type: "moduleList", data: moduleManager.list(), success: true, id: msg.id };
161195
}
196+
197+
case "daemonStop": {
198+
server?.stop();
199+
return { type: "daemonStop", success: true, id: msg.id };
200+
}
201+
202+
case "daemonReload": {
203+
return { type: "daemonReload", success: true, id: msg.id };
204+
}
205+
162206
case "ping": {
163207
return {
164208
type: "pong",
@@ -167,6 +211,7 @@ async function handleMessage(msg: DaemonMessage): Promise<DaemonResponse> {
167211
id: msg.id,
168212
};
169213
}
214+
170215
case "kill": {
171216
await pm.stopAll();
172217
dashboard.stop();
@@ -183,32 +228,6 @@ async function handleMessage(msg: DaemonMessage): Promise<DaemonResponse> {
183228
}
184229

185230

186-
const server = Bun.serve({
187-
unix: DAEMON_SOCKET,
188-
async fetch(req) {
189-
190-
if (req.method !== "POST") {
191-
return Response.json(
192-
{ type: "error", error: "Method Not Allowed", success: false },
193-
{ status: 405 }
194-
)
195-
}
196-
197-
try {
198-
199-
const msg: DaemonMessage = await req.json() as DaemonMessage;
200-
201-
const response = await handleMessage(msg);
202-
203-
return Response.json(response);
204-
205-
} catch (err: any) {
206-
return Response.json(
207-
{ type: "error", error: err.message, success: false },
208-
{ status: 500 }
209-
);
210-
}
211-
},
212-
});
231+
server = Bun.serve(serverOptions);
213232

214233
console.log(`Listening on ${server.url}`);

0 commit comments

Comments
 (0)