Skip to main content
Glama
rateLimit.ts1.71 kB
/** * Rate limiting utilities for GitHub API */ export interface RateLimitInfo { limit: number; remaining: number; resetAt: number; } /** * Extracts rate limit info from GitHub GraphQL response headers * @param headers - Response headers * @returns Rate limit information */ export function extractRateLimit(headers: any): RateLimitInfo | null { const limit = headers?.['x-ratelimit-limit']; const remaining = headers?.['x-ratelimit-remaining']; const reset = headers?.['x-ratelimit-reset']; if (limit && remaining !== undefined && reset) { return { limit: parseInt(limit, 10), remaining: parseInt(remaining, 10), resetAt: parseInt(reset, 10), }; } return null; } /** * Checks if we're approaching rate limit and should wait * @param rateLimit - Current rate limit info * @param threshold - Remaining requests threshold (default: 10) * @returns True if we should wait */ export function shouldWaitForRateLimit( rateLimit: RateLimitInfo | null, threshold: number = 10 ): boolean { if (!rateLimit) return false; return rateLimit.remaining <= threshold; } /** * Calculates wait time until rate limit resets * @param rateLimit - Rate limit info * @returns Milliseconds to wait, or 0 if no wait needed */ export function getWaitTime(rateLimit: RateLimitInfo | null): number { if (!rateLimit) return 0; const now = Math.floor(Date.now() / 1000); const waitSeconds = Math.max(0, rateLimit.resetAt - now); return waitSeconds * 1000; } /** * Sleeps for specified milliseconds * @param ms - Milliseconds to sleep */ export function sleep(ms: number): Promise<void> { return new Promise((resolve) => setTimeout(resolve, ms)); }

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/radireddy/github-mcp'

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