@@ -228,27 +228,46 @@ const server = http.createServer(async (req, res) => {
228228 }
229229 }
230230
231- // POST /api/reset - trigger full demo reset via host-side reset server
231+ // POST /api/reset - proxy to demo-admin reset endpoint
232232 if ( pathName === '/api/reset' && method === 'POST' ) {
233- const resetServerUrl = process . env . RESET_SERVER_URL || 'http://host.docker.internal:8765/reset' ;
234- try {
235- await new Promise ( ( resolve , reject ) => {
236- const resetReq = http . request ( resetServerUrl , { method : 'POST' } , ( resetRes ) => {
237- resetRes . resume ( ) ;
238- if ( resetRes . statusCode === 200 ) resolve ( ) ;
239- else reject ( new Error ( `reset server returned ${ resetRes . statusCode } ` ) ) ;
233+ const adminHost = process . env . ADMIN_HOST || 'demo-admin' ;
234+ const adminPort = process . env . ADMIN_PORT || '8080' ;
235+ return new Promise ( ( resolve ) => {
236+ let responded = false ;
237+ const proxyReq = http . request ( {
238+ hostname : adminHost ,
239+ port : parseInt ( adminPort ) ,
240+ path : '/api/reset' ,
241+ method : 'POST' ,
242+ headers : { 'Content-Type' : 'application/json' } ,
243+ timeout : 30000 ,
244+ } , ( proxyRes ) => {
245+ let body = '' ;
246+ proxyRes . on ( 'data' , chunk => { body += chunk ; } ) ;
247+ proxyRes . on ( 'end' , ( ) => {
248+ if ( responded ) return ;
249+ responded = true ;
250+ events = [ ] ;
251+ res . writeHead ( proxyRes . statusCode , { 'Content-Type' : 'application/json' } ) ;
252+ res . end ( body ) ;
253+ resolve ( ) ;
240254 } ) ;
241- resetReq . on ( 'error' , reject ) ;
242- resetReq . setTimeout ( 180000 , ( ) => { resetReq . destroy ( ) ; reject ( new Error ( 'reset timed out' ) ) ; } ) ;
243- resetReq . end ( ) ;
244255 } ) ;
245- } catch ( err ) {
246- return sendJson ( res , 502 , { error : `reset failed: ${ err . message } ` } ) ;
247- }
248- events = [ ] ;
249- const resetEvent = { source : 'dashboard' , event_type : 'demo.reset' , timestamp : new Date ( ) . toISOString ( ) , attributes : { } , received_at : new Date ( ) . toISOString ( ) } ;
250- broadcastEvent ( resetEvent ) ;
251- return sendJson ( res , 200 , { } ) ;
256+ proxyReq . on ( 'error' , ( err ) => {
257+ if ( responded ) return ;
258+ responded = true ;
259+ sendJson ( res , 502 , { error : 'Failed to reach demo-admin: ' + err . message } ) ;
260+ resolve ( ) ;
261+ } ) ;
262+ proxyReq . on ( 'timeout' , ( ) => {
263+ proxyReq . destroy ( ) ;
264+ if ( responded ) return ;
265+ responded = true ;
266+ sendJson ( res , 504 , { error : 'demo-admin request timed out' } ) ;
267+ resolve ( ) ;
268+ } ) ;
269+ proxyReq . end ( ) ;
270+ } ) ;
252271 }
253272
254273 // Serve static files for everything else
@@ -264,9 +283,8 @@ const wss = new WebSocketServer({ server, path: '/ws' });
264283wss . on ( 'connection' , ( ws ) => {
265284 wsClients . add ( ws ) ;
266285
267- // Send event history on connect, sorted chronologically
268- const sortedEvents = [ ...events ] . sort ( ( a , b ) => ( a . timestamp < b . timestamp ? - 1 : a . timestamp > b . timestamp ? 1 : 0 ) ) ;
269- ws . send ( JSON . stringify ( { type : 'history' , events : sortedEvents } ) ) ;
286+ // Send event history on connect
287+ ws . send ( JSON . stringify ( { type : 'history' , events } ) ) ;
270288
271289 ws . on ( 'close' , ( ) => {
272290 wsClients . delete ( ws ) ;
0 commit comments