Inkdown
Start writing

Study

70 filesยท12 subfolders

Shared Workspace

Study
AI eng

09-RateLimiting

Shared from "Study" on Inkdown

Rate Limiting Architecture

Overview

The rate limiting system prevents abuse and ensures fair resource allocation across users. It uses Redis-based sliding window counters with plan-based limits.


Architecture

Plain text

Guest Rate Limiting

File: src/server/middlewares/rateLimiter/rateLimiter.ts

basic-ques
core
Revision w/ Whiteboard
CN Basics - 1
CN Basics - 2
DNS
Event loop
programming-language-concepts.md
zero-language-explanation.md
DB
Quick
databases-deep-dive.md
01-introduction.md
02-relational-databases.md
03-database-design.md
04-indexing.md
05-transactions-acid.md
06-nosql-databases.md
07-query-optimization.md
08-replication-ha.md
09-sharding-partitioning.md
10-caching-strategies.md
11-cap-theorem.md
12-connection-pooling.md
13-backup-recovery.md
14-monitoring.md
15-database-selection.md
README.md
JS
core topics
Event loop
Merlin Backend
01-Orchestration.md
02-DeepResearch.md
03-Search.md
04-Scraping.md
05-Streaming.md
06-MultiProviderLLM.md
07-MemoryAndContext.md
08-ErrorHandling.md
09-RateLimiting.md
10-TaskQueue.md
11-SecurityAndAuth.md
Orchestration-2nd-draft
Mobile
Build Alternative
Bundling
metro-bundler-deep-dive.md
OpenAI Agents Python
00_OVERVIEW.md
01_AGENT_SYSTEM.md
02_RUNNER_SYSTEM.md
03_TOOL_SYSTEM.md
04_ITEMS_SYSTEM.md
05_GUARDRAILS.md
06_HANDOFFS.md
07_MEMORY_SESSIONS.md
08_MODEL_PROVIDERS.md
09_SANDBOX_SYSTEM.md
10_TRACING.md
11_RUN_STATE.md
12_CONTEXT.md
13_LIFECYCLE_HOOKS.md
14_CONFIGURATION.md
15_ERROR_HANDLING.md
16_STREAMING.md
17_EXTENSIONS.md
18_MCP_INTEGRATION.md
19_BEST_PRACTICES.md
20_ARCHITECTURE_PATTERNS.md
opencode-study
context-handling
core
Python
Alembic
Basics
sqlalchemy - fastapi
SQLAlchemy overview
tweets
system_design_for_agentic_apps.md
Agent Loop
TypeScript

How It Works:

  1. Identify guest users (userPlan === "GUEST")
  2. Extract IP address (dev vs production handling)
  3. Consume 1 point from Redis counter
  4. If points exhausted (0 remaining), throw 429 error
  5. Redis key: arcane_guest:{ip}
  6. Auto-expires after 15 minutes (sliding window)

Plan-Based Usage Limits

File: src/server/middlewares/usageLimits/usageLimits.ts

TypeScript

Plan Limits:

PlanDaily QueriesMonthly QueriesConcurrent Requests
GUEST1005001
FREE5005,0002
PRO2,00020,0005
ULTRA5,00050,00010

Usage Tracking

File: src/server/middlewares/usageLimits/functions/saveDailyUsage.ts

TypeScript

Usage Schema:

TypeScript

Token-Based Limits

Some operations count tokens instead of queries:

TypeScript

AI Tools Usage Limits

File: src/server/middlewares/aiToolsUsageLimits/aiToolsUsageLimits.ts

Special limits for expensive AI features:

TypeScript

Middleware Integration

File: src/server/middlewares/usageLimits/usageLimits.ts

TypeScript

Applied in routing:

TypeScript

Burst Handling

TypeScript

Redis Key Structure

Plain text

Error Responses

TypeScript

Summary

The rate limiting system:

  1. Guest Limiting: IP-based, 50 req/15min via Redis
  2. Plan Tiers: Daily/monthly query limits per plan
  3. Token Tracking: Separate token limits for large operations
  4. AI Tool Limits: Per-tool daily limits (images, research, etc.)
  5. Sliding Window: Redis TTL for automatic reset
  6. Burst Handling: Short-term higher limits for UX
  7. Middleware Integration: Applied to all endpoints
  8. Clear Errors: Retry-after hints, upgrade CTAs

Key Principle: Protect resources while providing clear upgrade paths. Never silently fail - always tell users their limits.