Skip to main content
← Back to list
01Issue
BugOpenSwamp Club
AssigneesNone

#314 swamp issue get should rate-limit unauthenticated users instead of blocking

Opened by stack72 · 5/10/2026

When a user isn't logged in, swamp issue get should still work but be rate-limited on get commands, rather than returning a hard 'Not logged in' error. Public issue data should be readable without auth, with rate limiting applied to prevent abuse.

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED

Open

5/10/2026, 10:42:52 PM

No activity in this phase yet.

03Sludge Pulse
Editable. Press Enter to edit.

john commented 5/12/2026, 12:19:58 AM

Updated scope & policy decisions (supersedes original framing)

Scope

Rate-limiting (not blocking) applies to all unauthenticated read endpoints on the swamp.club Lab, not just swamp issue get. Per ExtensionApiClient and SwampClubClient in the swamp CLI, apiKey is already optional on:

  • GET /api/v1/lab/issues/:nfetchIssue
  • Extension metadata resolve — getMetadata
  • Extension download URL — getDownloadUrl
  • Extension tarball download — downloadExtension
  • Extension search — searchExtensions

swamp extension pull and swamp extension search predate #313's unauthenticated-issue get change but live on the same abuse surface, so policy should be uniform across all of them.

Policy decisions

  1. Per-IP rate limiting. Bucket size and refill rate TBD — pick generous values that comfortably cover normal interactive CLI usage (search, pull, browse) without tripping.
  2. Byte-weighted for the tarball download path. downloadExtension cost should scale with response size; metadata/search/issue-get can stay flat.
  3. Authenticated users are NOT exempt — they get a higher ceiling (same bucket type, larger size / faster refill).
  4. Application-level enforcement only — implement inside the Lab service, not via CDN/WAF. Return 429 with Retry-After and a JSON error body.

Out of scope

  • CLI 429 handling is a separate follow-up against systeminit/swamp (graceful error in SwampClubClient.fetch / ExtensionApiClient.fetch, honoring Retry-After).
  • Authentication policy itself (who needs to log in for what) is unchanged.

Classification

Feature, not bug. isRegression: false. Implementation site is the swamp-club Lab server, not the swamp CLI repo.

Sign in to post a ripple.