{"record":{"id":"ba297de5a146d576","repo":"ruvnet/ruflo","slug":"too-many-requests","errorCode":null,"errorMessage":"Too Many Requests","messagePattern":"Too Many Requests","errorType":"http","errorClass":null,"httpStatus":429,"severity":"error","filePath":"v3/@claude-flow/shared/src/resilience/rate-limiter.ts","lineNumber":410,"sourceCode":" */\nexport function createRateLimiterMiddleware(limiter: RateLimiter) {\n  return (req: { ip?: string; headers?: Record<string, string> }, res: {\n    status: (code: number) => { json: (body: unknown) => void };\n    setHeader: (name: string, value: string) => void;\n  }, next: () => void): void => {\n    // Get key from IP or header\n    const key = req.ip || req.headers?.['x-forwarded-for'] || 'anonymous';\n\n    const result = limiter.consume(key);\n\n    // Set rate limit headers\n    res.setHeader('X-RateLimit-Limit', String(result.total));\n    res.setHeader('X-RateLimit-Remaining', String(result.remaining));\n    res.setHeader('X-RateLimit-Reset', String(Math.ceil(result.resetAt.getTime() / 1000)));\n\n    if (!result.allowed) {\n      res.setHeader('Retry-After', String(Math.ceil(result.retryAfter / 1000)));\n      res.status(429).json({\n        error: 'Too Many Requests',\n        retryAfter: result.retryAfter,\n        resetAt: result.resetAt.toISOString(),\n      });\n      return;\n    }\n\n    next();\n  };\n}\n","sourceCodeStart":392,"sourceCodeEnd":421,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/shared/src/resilience/rate-limiter.ts#L392-L421","documentation":"HTTP 429 'Too Many Requests' response produced by createRateLimiterMiddleware when limiter.consume(key) reports the quota for the client key (IP or x-forwarded-for) is exhausted; rate-limit headers (limit, remaining) are attached before the response.","triggerScenarios":"Thrown at v3/@claude-flow/shared/src/resilience/rate-limiter.ts:410 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Back off and retry after the rate limit window resets (respect Retry-After if provided).","Reduce request frequency, batch operations, or request a higher rate limit quota."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}