paperclipai/paperclip · error · HttpError

rate_limited

rate_limited

Error message

Too many file preview requests

What it means

Rate-limit rejection from the file-preview limiter's acquire: the per-key sliding window (default 60s) already recorded more than maxRequests preview requests for this key. Thrown as HttpError 429 with code 'rate_limited' to protect file-resource endpoints from excessive preview traffic; the message is overridable via requestLimitMessage.

Source

Thrown at server/src/routes/file-resources.ts:93

  const windowMs = opts.windowMs ?? 60_000;
  const requestLimitMessage = opts.requestLimitMessage ?? "Too many file preview requests";
  const concurrencyLimitMessage = opts.concurrencyLimitMessage ?? "Too many concurrent file preview requests";
  const activeByKey = new Map<string, number>();
  const windowsByKey = new Map<string, { startedAt: number; count: number }>();

  return {
    acquire(key: string) {
      const now = Date.now();
      for (const [windowKey, existing] of windowsByKey) {
        if (now - existing.startedAt >= windowMs) windowsByKey.delete(windowKey);
      }
      const window = windowsByKey.get(key);
      if (!window || now - window.startedAt >= windowMs) {
        windowsByKey.set(key, { startedAt: now, count: 1 });
      } else {
        window.count += 1;
        if (window.count > maxRequests) {
          throw new HttpError(429, requestLimitMessage, { code: "rate_limited" });
        }
      }

      const active = activeByKey.get(key) ?? 0;
      if (active >= maxConcurrent) {
        throw new HttpError(429, concurrencyLimitMessage, { code: "concurrency_limited" });
      }
      activeByKey.set(key, active + 1);
      return () => {
        const current = activeByKey.get(key) ?? 0;
        if (current <= 1) activeByKey.delete(key);
        else activeByKey.set(key, current - 1);
      };
    },
  };
}

export function createFileResourceListLimiter(opts: {

View on GitHub (pinned to a7e689b3c3)

Solutions

  1. Reduce the rate of file preview requests and retry after the rate limit window passes.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/routes/file-resources.ts:93 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@a7e689b3c3 (2026-08-18). Data as JSON: /api/errors/a44c76141e988fbc. Report an issue: GitHub.