import express, { Request, Response, Application } from 'express';
import dotenv from 'dotenv';
import { Ratelimit } from '@unkey/ratelimit';
//For env File
dotenv.config();
const app: Application = express();
const port = process.env.PORT || 8000;
/**
This can be a seperate util for easy configurable ratelimiting across
multiple routes.
namespace = The route identifier you would like to ratelimit
limit = The amount of requests
duration = amount of time to limit against for example "30s"
**/
const limiter = new Ratelimit({
namespace: "express-example",
limit: 2,
duration: "30s",
rootKey: process.env.UNKEY_ROOT_KEY
});
app.get('/', (req: Request, res: Response) => {
res.send('Welcome to Express & TypeScript Server');
});
// This endpoint is protected by Unkey
app.get('/secret', async (req: Request, res: Response) => {
const identifier = req.getUserId() // or ip or anything else you want
const ratelimit = await limiter.limit(identifier)
if (!ratelimit.success){
res.status(429).send("Please try again later")
}
return res.status(200).send("ok");
})
app.listen(port, () => {
console.log(`Server is listening at http://localhost:${port}`);
});