diff --git a/app/backend/src/routes/admin-stream.ts b/app/backend/src/routes/admin-stream.ts new file mode 100644 index 0000000..4a05d0f --- /dev/null +++ b/app/backend/src/routes/admin-stream.ts @@ -0,0 +1,13 @@ +import type { FastifyInstance } from 'fastify'; +import { requireAuth } from '../plugins/session.js'; +import { publishVisitorCount, setupSse, subscribeRealtime, writeSse } from '../lib/realtime.js'; + +export default async function adminStreamRoutes(app: FastifyInstance) { + app.get('/api/v1/admin/stream', { preHandler: requireAuth(['admin', 'editor']) }, async (_req, reply) => { + setupSse(reply); + const data = await publishVisitorCount(); + writeSse(reply, 'visitor_update', data); + await subscribeRealtime(reply, (event) => ['visitor_update', 'activity', 'view_update'].includes(event.event)); + return reply; + }); +}