diff --git a/src/api/routes/company.js b/src/api/routes/company.js index 483e04a..042be86 100644 --- a/src/api/routes/company.js +++ b/src/api/routes/company.js @@ -560,8 +560,28 @@ export function register(app, basePath = '') { res.flushHeaders(); } + req.on('close', () => { + console.warn(`[Company Import SSE] Client request closed (writableEnded: ${res.writableEnded}, destroyed: ${res.destroyed})`); + }); + + res.on('close', () => { + if (!res.writableEnded) { + console.warn(`[Company Import SSE] Response stream closed (destroyed: ${res.destroyed})`); + } + }); + const sseWrite = (event, data) => { - if (res.writableEnded || res.destroyed) return; + if (res.writableEnded || res.destroyed) { + console.warn(`[Company Import SSE DROP] event="${event}" dropped: connection closed (destroyed: ${res.destroyed}, ended: ${res.writableEnded})`); + return; + } + if (event === 'progress') { + console.log(`[Company Import SSE] progress cat=${data.categoriesdone}/${data.categoriestotal} art=${data.articlesdone}/${data.articlestotal} img=${data.imagesdone}/${data.imagestotal} rec=${data.receiptsdone}/${data.receiptstotal}`); + } else if (event === 'images') { + console.log(`[Company Import SSE] images batch count=${Array.isArray(data) ? data.length : 1}`); + } else { + console.log(`[Company Import SSE] event="${event}"`, data); + } res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`); if (typeof res.flush === 'function') res.flush(); };