@@ -228,46 +228,27 @@ const server = http.createServer(async (req, res) => {
228228 }
229229 }
230230
231- // POST /api/reset - proxy to demo-admin reset endpoint
231+ // POST /api/reset - trigger full demo reset via host-side reset server
232232 if ( pathName === '/api/reset' && method === 'POST' ) {
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 ( ) ;
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 } ` ) ) ;
254240 } ) ;
241+ resetReq . on ( 'error' , reject ) ;
242+ resetReq . setTimeout ( 180000 , ( ) => { resetReq . destroy ( ) ; reject ( new Error ( 'reset timed out' ) ) ; } ) ;
243+ resetReq . end ( ) ;
255244 } ) ;
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- } ) ;
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 , { } ) ;
271252 }
272253
273254 // Serve static files for everything else
@@ -283,8 +264,9 @@ const wss = new WebSocketServer({ server, path: '/ws' });
283264wss . on ( 'connection' , ( ws ) => {
284265 wsClients . add ( ws ) ;
285266
286- // Send event history on connect
287- ws . send ( JSON . stringify ( { type : 'history' , events } ) ) ;
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 } ) ) ;
288270
289271 ws . on ( 'close' , ( ) => {
290272 wsClients . delete ( ws ) ;
0 commit comments