Phase 6: Rate limiting on auth endpoints

This commit is contained in:
2026-02-23 15:45:31 +01:00
parent 538c24c58f
commit 0eab05f15b
3 changed files with 12 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
import Fastify from 'fastify';
import cors from '@fastify/cors';
import rateLimit from '@fastify/rate-limit';
import prismaPlugin from './plugins/prisma.js';
import errorHandlerPlugin from './plugins/error-handler.js';
import authPlugin from './plugins/auth.js';
@@ -22,6 +23,11 @@ export async function buildApp() {
// Plugins
await app.register(cors, { origin: config.corsOrigin });
await app.register(rateLimit, {
global: true,
max: 100,
timeWindow: '1 minute',
});
await app.register(errorHandlerPlugin);
await app.register(prismaPlugin);
await app.register(authPlugin);

View File

@@ -9,6 +9,9 @@ import type { MetaCallbackBody, AuthTokensResponse } from '../../types/api.js';
const metaAuthRoutes: FastifyPluginAsync = async (fastify) => {
fastify.post<{ Body: MetaCallbackBody }>('/auth/meta/callback', {
config: {
rateLimit: { max: 10, timeWindow: '1 minute' },
},
schema: {
body: {
type: 'object',

View File

@@ -10,6 +10,9 @@ import type { RefreshBody, AuthTokensResponse, UserProfileResponse } from '../..
const sessionRoutes: FastifyPluginAsync = async (fastify) => {
// POST /auth/refresh — rotate refresh token, issue new JWT
fastify.post<{ Body: RefreshBody }>('/auth/refresh', {
config: {
rateLimit: { max: 10, timeWindow: '1 minute' },
},
schema: {
body: {
type: 'object',