36 [[nodiscard]]
bool acquire_for(
double cost, std::chrono::nanoseconds max_wait);
40 [[nodiscard]] std::chrono::nanoseconds
wait_time(
double cost) const noexcept;
45 [[nodiscard]] const
Config&
config() const noexcept {
return config_; }
48 using Clock = std::chrono::steady_clock;
50 void refill(Clock::time_point now)
const noexcept;
51 [[nodiscard]] std::chrono::nanoseconds wait_time_locked(
double cost)
const noexcept;
54 mutable std::mutex mutex_;
55 mutable double tokens_{0.0};
56 mutable Clock::time_point last_refill_;
74 std::vector<EndpointCostRule>
costs;
78 std::chrono::milliseconds
max_wait{std::chrono::seconds{5}};
96 std::string_view body = {})
const override;
103 std::string_view body)
const;
106 std::shared_ptr<const HttpTransport> inner_;
Request boundary used by KalshiClient.
Definition http_client.hpp:62
Transport decorator that paces requests to Kalshi's Read and Write budgets so they are not rejected w...
Definition rate_limit.hpp:91
double cost(HttpMethod method, std::string_view path, std::string_view body) const
Token cost this transport charges for a request.
static bool is_write(HttpMethod method, std::string_view path) noexcept
Whether a request draws from the Write budget.
Result< HttpResponse > request(HttpMethod method, std::string_view path, std::string_view body={}) const override
path is relative to the base URL and may carry a query string.
RateLimitedTransport(std::shared_ptr< const HttpTransport > inner, RateLimitConfig config)
Token bucket that refills continuously, the model Kalshi's rate limits use.
Definition rate_limit.hpp:20
const Config & config() const noexcept
Definition rate_limit.hpp:45
bool acquire_for(double cost, std::chrono::nanoseconds max_wait)
Waits up to max_wait for cost tokens.
std::chrono::nanoseconds wait_time(double cost) const noexcept
How long until cost tokens are available: zero if they are available now, nanoseconds::max() if they ...
double available() const noexcept
Tokens available now. Zero while earlier waiters hold reservations.
TokenBucket(Config config)
bool try_acquire(double cost=1.0) noexcept
Takes cost tokens if the bucket holds them.
std::expected< T, Error > Result
Result type for SDK operations.
Definition error.hpp:50
HttpMethod
HTTP methods.
Definition http_client.hpp:20
Token cost of requests matching method and path.
Definition rate_limit.hpp:61
double cost
Definition rate_limit.hpp:64
std::string path
Definition rate_limit.hpp:63
HttpMethod method
Definition rate_limit.hpp:62
Defaults match Kalshi's Basic tier.
Definition rate_limit.hpp:69
TokenBucket::Config read
Definition rate_limit.hpp:70
std::vector< EndpointCostRule > costs
Definition rate_limit.hpp:74
double default_cost
Cost of requests without a matching rule. Kalshi's default is 10.
Definition rate_limit.hpp:73
TokenBucket::Config write
Definition rate_limit.hpp:71
std::chrono::milliseconds max_wait
Longest wait for tokens before failing with ErrorCode::RateLimited.
Definition rate_limit.hpp:78
Definition rate_limit.hpp:22
double refill_per_second
Definition rate_limit.hpp:24
std::optional< double > initial_tokens
Starting balance. Defaults to a full bucket.
Definition rate_limit.hpp:26
double capacity
Definition rate_limit.hpp:23