Skip to main content
Glama
rateLimit.ts1.41 kB
/** * Rate Limiting Utilities * * Simple in-memory rate limiting for authentication and API requests. * For production, consider using Redis or similar distributed cache. */ import { WordPressAPIError } from "@/types/client.js"; /** * Rate limiting tracker (simple in-memory implementation) * For production, use Redis or similar */ class RateLimiter { private attempts: Map<string, { count: number; resetTime: number }> = new Map(); constructor( private maxAttempts: number = 5, private windowMs: number = 60000, // 1 minute ) {} check(identifier: string): void { const now = Date.now(); const record = this.attempts.get(identifier); if (!record || record.resetTime < now) { this.attempts.set(identifier, { count: 1, resetTime: now + this.windowMs, }); return; } if (record.count >= this.maxAttempts) { const waitTime = Math.ceil((record.resetTime - now) / 1000); throw new WordPressAPIError( `Rate limit exceeded. Please wait ${waitTime} seconds before trying again.`, 429, "RATE_LIMIT_EXCEEDED", ); } record.count++; } reset(identifier: string): void { this.attempts.delete(identifier); } } // Export a default rate limiter for authentication attempts export const authRateLimiter = new RateLimiter(5, 300000); // 5 attempts per 5 minutes export { RateLimiter };

Latest Blog Posts

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/docdyhr/mcp-wordpress'

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