Skip to content

Commit 5ddb001

Browse files
committed
fix: rate limit
1 parent 5d6ed12 commit 5ddb001

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

api/src/routes/characters.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Router, Request, Response } from "express";
2+
import rateLimit from "express-rate-limit";
23
import { characterDB } from "../database";
34
import { validateSeason } from "../middleware/validation";
45
import { config, logger as mainLogger } from "../config";
@@ -16,6 +17,14 @@ import fetch from "node-fetch";
1617
const logger = mainLogger.createNamedLogger("API");
1718
const router = Router();
1819

20+
const characterRefreshLimiter = rateLimit({
21+
windowMs: 60 * 60 * 1000,
22+
max: 10,
23+
message: "Too many character refresh requests. Please try again later.",
24+
standardHeaders: true,
25+
legacyHeaders: false,
26+
});
27+
1928
// GET /api/characters - Get filtered characters
2029
router.get(
2130
"/",
@@ -657,7 +666,7 @@ router.get(
657666
);
658667

659668
// POST /api/characters/:name/refresh - Manually refresh character data
660-
router.post("/:name/refresh", async (req: Request, res: Response) => {
669+
router.post("/:name/refresh", characterRefreshLimiter, async (req: Request, res: Response) => {
661670
try {
662671
const { name } = req.params;
663672
const now = Date.now();

api/src/server.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ export function createServer(): Application {
1717
app.use(cors({ origin: config.corsOrigin }));
1818

1919
// Body parsing middleware
20-
app.use(express.json());
21-
app.use(express.urlencoded({ extended: true }));
20+
app.use(express.json({ limit: "1mb" }));
21+
app.use(express.urlencoded({ extended: true, limit: "1mb" }));
2222

2323
// Compression middleware
2424
app.use(compression());

0 commit comments

Comments
 (0)