How silent-watcher/nestjs-quota works
nestjs-quota is a framework-independent quota and usage-metering engine with an optional NestJS adapter and memory/Redis stores. Its main request path is a NestJS route with quota metadata: the guard resolves policy applications and identities, asks the engine to check, consume, or reserve quota, and returns statuses or an HTTP rejection. The core also supports direct service operations, post-handler metering, usage inspection, idempotent retries, and reservation reconciliation. Relationships reflect the provided excerpts, source-index references, and README; some adapter and interceptor details were not excerpted.
Main entry points: engine.ts Quota engine · quota.guard.ts Quota guard · store.ts Store contract · quota.service.ts Quota service
Components 20
Quota core
- Quota engine
src/core/application/engine.ts - Store contract
src/core/contracts/store.ts - Quota decision and status
src/core/application/types.ts
NestJS adapter
- Quota guard
src/nestjs/guards/quota.guard.ts - Route metadata
src/nestjs/decorators/quota.decorator.ts - Identity resolvers
src/nestjs/context/quota-context.ts - Request state and headers
src/nestjs/context/request-marker.ts - Module configuration
src/nestjs/module/quota-module-options.ts - Quota service
src/nestjs/module/quota.service.ts - Post-handler metering
src/nestjs/interceptors/quota-meter.interceptor.ts
Storage adapters
- Memory store
src/stores/memory/memory-store.ts - Redis store
src/stores/redis/redis-store.ts - Redis atomic scripts
src/stores/redis/lua-scripts.ts
Core support
- Policy resolution
src/core/policies/policy.ts - Quota windows
src/core/windows/window.ts - Identity validation
src/core/domain/identity.ts - Storage keys
src/core/domain/key.ts - Clock
src/core/contracts/clock.ts
Other components
- API caller
- NestJS route
Connections 22
- API caller → NestJS route: calls API
README.md - NestJS route → Quota guard: enters guard
README.md - Route metadata → Quota guard: provides metadata
src/nestjs/guards/quota.guard.ts - Quota guard → Identity resolvers: resolves identity
src/nestjs/guards/quota.guard.ts - Quota guard → Module configuration: reads options
src/nestjs/guards/quota.guard.ts - Quota guard → Quota engine: checks or consumes
src/nestjs/guards/quota.guard.ts - Quota guard → Request state and headers: stores request state
src/nestjs/guards/quota.guard.ts - Quota guard → Quota decision and status: uses statuses
src/nestjs/guards/quota.guard.ts - Module configuration → Quota engine: configures engine
src/nestjs/module/quota.module.ts - Quota service → Quota engine: delegates operations
src/nestjs/module/quota.service.ts - Post-handler metering → Quota engine: records usage
src/nestjs/interceptors/quota-meter.interceptor.ts - Quota engine → Policy resolution: resolves policies
src/core/application/engine.ts - Quota engine → Quota windows: resolves windows
src/core/application/engine.ts - Quota engine → Identity validation: validates subjects
src/core/application/engine.ts - Quota engine → Clock: reads time
src/core/application/engine.ts - Quota engine → Store contract: dispatches bucket operations
src/core/application/engine.ts - Store contract → Memory store: implemented by
README.md - Store contract → Redis store: implemented by
README.md - Redis store → Redis atomic scripts: executes scripts
src/stores/redis/redis-store.ts - Quota engine → Quota decision and status: returns decisions
src/core/application/engine.ts - Quota engine → Storage keys: uses key helpers
src/core/application/engine.ts - Quota service → API caller: exposes usage and reservations
README.md