Skip to main content
Glama

Carbon Voice

by PhononX
rate-limit.middleware.test.ts3.78 kB
import { createRateLimitMiddleware, DEFAULT_RATE_LIMIT_CONFIG, RateLimitConfig, } from '../../../../../src/transports/http/middleware/rate-limit.middleware'; describe('Rate Limit Middleware', () => { describe('DEFAULT_RATE_LIMIT_CONFIG', () => { it('should have correct default configuration', () => { expect(DEFAULT_RATE_LIMIT_CONFIG).toEqual({ windowMs: 60 * 1000, // 1 minute max: 60, // 60 requests per minute standardHeaders: true, }); }); it('should validate windowMs is 60000 (1 minute)', () => { expect(DEFAULT_RATE_LIMIT_CONFIG.windowMs).toBe(60 * 1000); }); it('should validate max is 60 (60 requests per minute)', () => { expect(DEFAULT_RATE_LIMIT_CONFIG.max).toBe(60); }); it('should validate standardHeaders is true', () => { expect(DEFAULT_RATE_LIMIT_CONFIG.standardHeaders).toBe(true); }); }); describe('createRateLimitMiddleware', () => { it('should create middleware with default config when no config provided', () => { const middleware = createRateLimitMiddleware(); expect(middleware).toBeDefined(); expect(typeof middleware).toBe('function'); }); it('should create middleware with custom config', () => { const customConfig: RateLimitConfig = { windowMs: 30 * 1000, // 30 seconds max: 30, // 30 requests per 30 seconds standardHeaders: false, legacyHeaders: true, }; const middleware = createRateLimitMiddleware(customConfig); expect(middleware).toBeDefined(); expect(typeof middleware).toBe('function'); }); it('should validate required config properties', () => { const config: RateLimitConfig = { windowMs: 60 * 1000, max: 60, standardHeaders: true, }; expect(config.windowMs).toBeDefined(); expect(config.max).toBeDefined(); expect(config.standardHeaders).toBeDefined(); expect(typeof config.windowMs).toBe('number'); expect(typeof config.max).toBe('number'); expect(typeof config.standardHeaders).toBe('boolean'); }); it('should allow optional legacyHeaders property', () => { const configWithoutLegacy: RateLimitConfig = { windowMs: 60 * 1000, max: 60, standardHeaders: true, }; const configWithLegacy: RateLimitConfig = { windowMs: 60 * 1000, max: 60, standardHeaders: true, legacyHeaders: false, }; expect(configWithoutLegacy).toBeDefined(); expect(configWithLegacy).toBeDefined(); }); }); describe('Configuration Validation', () => { it('should ensure windowMs is positive', () => { expect(DEFAULT_RATE_LIMIT_CONFIG.windowMs).toBeGreaterThan(0); }); it('should ensure max is positive', () => { expect(DEFAULT_RATE_LIMIT_CONFIG.max).toBeGreaterThan(0); }); it('should ensure windowMs is reasonable (between 1 second and 1 hour)', () => { const windowMs = DEFAULT_RATE_LIMIT_CONFIG.windowMs; expect(windowMs).toBeGreaterThanOrEqual(1000); // At least 1 second expect(windowMs).toBeLessThanOrEqual(3600000); // At most 1 hour }); it('should ensure max is reasonable (between 1 and 10000 requests)', () => { const max = DEFAULT_RATE_LIMIT_CONFIG.max; expect(max).toBeGreaterThanOrEqual(1); // At least 1 request expect(max).toBeLessThanOrEqual(10000); // At most 10000 requests }); it('should calculate requests per second correctly', () => { const requestsPerSecond = DEFAULT_RATE_LIMIT_CONFIG.max / (DEFAULT_RATE_LIMIT_CONFIG.windowMs / 1000); expect(requestsPerSecond).toBe(1); // 60 requests / 60 seconds = 1 request per second }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PhononX/cv-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server