diff --git a/routes/liveCaptions.js b/routes/liveCaptions.js index caa01ad..3751b64 100644 --- a/routes/liveCaptions.js +++ b/routes/liveCaptions.js @@ -210,4 +210,38 @@ router.post("/reset", async (_, res) => { } }); +router.get("/public/stream", async (req, res) => { + try { + maybeResetForInactivity(); + const sinceSequence = Number.parseInt(req.query?.sinceSequence, 10); + const requestedLimit = Number.parseInt(req.query?.limit, 10); + const initialLimit = Number.isFinite(requestedLimit) + ? Math.max(1, Math.min(requestedLimit, MAX_INITIAL_LIMIT)) + : DEFAULT_INITIAL_LIMIT; + + let captions = []; + if (Number.isFinite(sinceSequence) && sinceSequence >= 0) { + captions = liveCaptionState.captions.filter((item) => item.sequence > sinceSequence); + } else { + captions = liveCaptionState.captions.slice(-initialLimit); + } + + return res.json({ + status: "ok", + latestSequence: liveCaptionState.latestSequence, + startedAt: new Date(liveCaptionState.startedAt).toISOString(), + availableLanguages: getAvailableLanguages(), + captions, + }); + } catch (error) { + console.error("Error getting public live captions stream", error); + return res.status(500).json({ + status: "Internal server error", + latestSequence: liveCaptionState.latestSequence, + captions: [], + availableLanguages: [], + }); + } +}); + module.exports = router;