646e93cf46
#5 rate-limit (byUser) на дорогих LLM-эндпоинтах: /assistant/ask (20/мин), /assistant/flashcards (10/мин), /imggen (20/мин) — поверх cooldown/дневного лимита. Защита от «сжигания» бюджета провайдера одним аккаунтом. #6 SSE больше не таскает JWT в URL: добавлен authed /notifications/stream-ticket (одноразовый тикет, TTL 30с), клиент берёт тикет заголовком и подключается с ?ticket=. ?token= оставлен как временный фоллбэк для старых клиентов. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
15 lines
675 B
JavaScript
15 lines
675 B
JavaScript
'use strict';
|
|
const router = require('express').Router();
|
|
const { authMiddleware } = require('../middleware/auth');
|
|
const rateLimit = require('../middleware/rateLimit');
|
|
const ctrl = require('../controllers/imggenController');
|
|
|
|
// Пер-юзер лимит поверх cooldown/дневного лимита в контроллере (защита от абуза).
|
|
const genLimiter = rateLimit({ windowMs: 60_000, max: 20, byUser: true, message: 'Слишком много генераций — подожди минутку' });
|
|
|
|
router.use(authMiddleware);
|
|
router.get('/status', ctrl.status);
|
|
router.post('/', genLimiter, ctrl.generate);
|
|
|
|
module.exports = router;
|