@@ -26,9 +26,11 @@ import {
2626import { ensureDirs } from "./utils" ;
2727import { unlinkSync , existsSync } from "fs" ;
2828import type { DaemonMessage , DaemonResponse } from "./types" ;
29+ import type { BunRequest , Server } from "bun" ;
2930
3031ensureDirs ( ) ;
3132
33+ let server : Server < any > | null = null
3234const pm = new ProcessManager ( ) ;
3335const dashboard = new Dashboard ( pm ) ;
3436const 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+
5285async 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
214233console . log ( `Listening on ${ server . url } ` ) ;
0 commit comments