# Rate Limiting
Built-in rate limiting protects against abuse.
Usage
typescript
1import { RateLimiter } from '@solongate/sdk';23const limiter = new RateLimiter({4 maxRequests: 100,5 windowMs: 60000, // 1 minute6});78const result = limiter.check(userId);910if (!result.allowed) {11 console.log('Rate limited!');12 console.log('Retry after:', result.retryAfterMs, 'ms');13} else {14 console.log('Remaining:', result.remaining);15}
Sliding Window Algorithm
typescript
1import { RateLimiter } from '@solongate/sdk';23// Sliding window provides smoother rate limiting4const limiter = new RateLimiter({5 maxRequests: 100,6 windowMs: 60000,7 algorithm: 'sliding-window', // Default: 'fixed-window'8});910// Per-user limiting11const userResult = limiter.check(userId);1213// Per-IP limiting14const ipResult = limiter.check(ipAddress);1516// Combined limiting (most restrictive wins)17const combined = limiter.checkMultiple([userId, ipAddress]);
API Rate Limits
| Endpoint | Live Key | Test Key |
|---|---|---|
| /validate | 1000/min | 100/min |
| /tokens/verify | 1000/min | 100/min |
| /policies/* | 100/min | 50/min |
Rate Limit Headers
bash
1HTTP/1.1 200 OK2X-RateLimit-Limit: 10003X-RateLimit-Remaining: 9994X-RateLimit-Reset: 170531226056# When rate limited7HTTP/1.1 429 Too Many Requests8Retry-After: 309X-RateLimit-Limit: 100010X-RateLimit-Remaining: 011X-RateLimit-Reset: 1705312260