import express from 'express';
import { Limitly } from '@limitly/limitly-js';
const app = express();
const limitly = new Limitly({
apiKey: process.env.LIMITLY_API_KEY!
});
// Rate limiting middleware
app.use(async (req, res, next) => {
const userApiKey = req.headers['x-api-key'] as string;
if (!userApiKey) {
return res.status(401).json({ error: 'API key required' });
}
try {
const result = await limitly.validation.validate(
userApiKey,
req.path,
req.method
);
if (!result.success) {
return res.status(429).json({
error: result.error,
details: result.details
});
}
// Add usage info to response headers
res.set('X-RateLimit-Limit', result.details?.limit?.toString());
res.set('X-RateLimit-Remaining', result.details?.remaining?.toString());
res.set('X-RateLimit-Reset', result.details?.reset_time);
next();
} catch (error) {
console.error('Validation error:', error);
return res.status(500).json({ error: 'Internal server error' });
}
});
// Your API routes
app.get('/api/users', (req, res) => {
res.json({ users: [] });
});
app.post('/api/users', (req, res) => {
res.json({ message: 'User created' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});