#pragma once #include #include #include #include #include namespace svapi { class RateLimiter { public: RateLimiter(); bool allow(const std::string& keyId, uint32_t limitPerMin); // true if under limit; 0 = unlimited void setClockForTesting(std::function fn); private: struct Window { int64_t minute = -1; uint32_t count = 0; }; std::unordered_map windows_; std::function now_; // epoch seconds std::mutex mu_; }; RateLimiter& rateLimiter(); // process singleton }