/**
* 速率限制 Middleware
*/
import rateLimit from 'express-rate-limit'
/**
* 標準 API 速率限制
* 每個用戶每分鐘 60 次請求
*/
export const standardRateLimit = rateLimit({
windowMs: 60 * 1000, // 1 分鐘
limit: 60,
standardHeaders: true,
legacyHeaders: false,
keyGenerator: (req) => {
// 優先使用用戶 FSUID,否則使用 IP
return req.user?.fsuid || req.ip || 'unknown'
},
handler: (_req, res) => {
res.status(429).json({
success: false,
error: {
code: 'RATE_LIMIT_EXCEEDED',
message: '請求過於頻繁,請稍後再試',
},
})
},
})
/**
* 寬鬆的速率限制(用於健康檢查等)
*/
export const looseRateLimit = rateLimit({
windowMs: 60 * 1000,
limit: 300,
standardHeaders: true,
legacyHeaders: false,
})