33 lines
835 B
TypeScript
33 lines
835 B
TypeScript
|
|
import express, { Request, Response } from 'express'
|
||
|
|
import type { ApiResponse } from '../../../shared/types.js'
|
||
|
|
import { eventBus } from '../../events/eventBus.js'
|
||
|
|
|
||
|
|
const router = express.Router()
|
||
|
|
|
||
|
|
router.get('/', (req: Request, res: Response) => {
|
||
|
|
if (process.env.VERCEL) {
|
||
|
|
const response: ApiResponse<null> = {
|
||
|
|
success: false,
|
||
|
|
error: { code: 'SSE_UNSUPPORTED', message: 'SSE在无服务器运行时中不受支持' },
|
||
|
|
}
|
||
|
|
return res.status(501).json(response)
|
||
|
|
}
|
||
|
|
|
||
|
|
const headers = {
|
||
|
|
'Content-Type': 'text/event-stream',
|
||
|
|
'Connection': 'keep-alive',
|
||
|
|
'Cache-Control': 'no-cache'
|
||
|
|
}
|
||
|
|
res.writeHead(200, headers)
|
||
|
|
|
||
|
|
res.write(`data: ${JSON.stringify({ event: 'connected' })}\n\n`)
|
||
|
|
|
||
|
|
eventBus.addClient(res)
|
||
|
|
|
||
|
|
req.on('close', () => {
|
||
|
|
eventBus.removeClient(res)
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
export default router
|