Next.js

Next.js Tutorial

Rate limiting for Next.js App Router and API Routes.

1. Installation

npm install halt-rate

2. App Router (Middleware)

Use Next.js Middleware to rate limit entire paths.

// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
import { RateLimiter, InMemoryStore, presets } from 'halt-rate';
import { nextMiddleware } from 'halt-rate/next';

const limiter = new RateLimiter({
  store: new InMemoryStore(),
  policy: presets.PUBLIC_API
});

export async function middleware(request: NextRequest) {
  const result = await nextMiddleware(limiter)(request);
  
  if (result instanceof NextResponse) {
    return result; // Blocked response
  }
  
  return NextResponse.next();
}

export const config = {
  matcher: '/api/:path*',
};

3. Route Handlers

Wrap individual route handlers.

// app/api/hello/route.ts
import { withHalt } from 'halt-rate/next';
import { presets } from 'halt-rate';

export const GET = withHalt(
  async (req) => {
    return Response.json({ message: "Hello" });
  },
  { policy: presets.PUBLIC_API }
);