npm install
npx prisma migrate deployAdd to .env:
REDIS_URL=redis://localhost:6379
TRUST_PROXY=false
ADMIN_IP=127.0.0.1
ADMIN_API_KEY=your_secure_key_herenpm run build
npm start# Check config
curl http://localhost:3000/api/admin/rate-limit \
-H "x-admin-key: your_secure_key_here" \
-H "x-api-key: your_api_key"
# Expected response:
# {
# "success": true,
# "rateLimit": {
# "windowMs": 900000,
# "maxRequests": 100,
# "enabled": true
# }
# }curl -X PUT http://localhost:3000/api/admin/rate-limit \
-H "x-admin-key: $ADMIN_KEY" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"maxRequests": 200}'curl -X PUT http://localhost:3000/api/admin/rate-limit \
-H "x-admin-key: $ADMIN_KEY" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'UPDATE "Relayer"
SET "whitelistedIps" = ARRAY['203.0.113.10']
WHERE name = 'my-relayer';Then refresh:
curl -X POST http://localhost:3000/api/admin/rate-limit/whitelist/refresh \
-H "x-admin-key: $ADMIN_KEY" \
-H "x-api-key: $API_KEY"- Check Redis:
redis-cli ping - Check logs for:
[RateLimit] Redis unavailable - Verify
rateLimit.enabled: trueinconfig.json
- Check IP is in
Relayer.whitelistedIpsor matchesADMIN_IP - Force refresh:
POST /api/admin/rate-limit/whitelist/refresh - Check logs for:
[RateLimit] Failed to refresh IP whitelist cache
- Verify
config.jsonis valid JSON - Use admin API instead of editing file directly
- Check file permissions
- Implementation Guide:
RATE_LIMIT_IMPLEMENTATION.md - Summary:
SECURITY_HARDENING_SUMMARY.md - Complete Reference:
IMPLEMENTATION_COMPLETE.md
That's it! You're protected from DDoS attacks. 🛡️