Per-IP sliding window rate limiter
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Upgrade to ocamlformat 0.29.0; fix csvt/sexpt streaming; reformat

- Update .ocamlformat to 0.29.0 across all 591 files
- csvt: reuse single Buffer.t for field reads (no alloc per field)
- sexpt: Obj members decoded from stream into Dict, typed Variant GADT
- Reformat all source files for 0.29.0

+11 -11
+1 -1
.ocamlformat
··· 1 - version = 0.28.1 1 + version = 0.29.0
+10 -10
lib/rate_limit.mli
··· 12 12 {2 Example} 13 13 14 14 {[ 15 - let limiter = Rate_limit.v ~max_requests:100 ~window_seconds:60.0 () 15 + let limiter = Rate_limit.v ~max_requests:100 ~window_seconds:60.0 () 16 16 17 - let handle_request ~ip ~now = 18 - match Rate_limit.check_and_record limiter ~ip ~now with 19 - | true, remaining -> 20 - (* Request allowed, remaining requests in window *) 21 - process_request () 22 - | false, _ -> 23 - (* Rate limited *) 24 - let retry = Rate_limit.retry_after limiter ~ip ~now in 25 - respond_429 ~retry_after:retry 17 + let handle_request ~ip ~now = 18 + match Rate_limit.check_and_record limiter ~ip ~now with 19 + | true, remaining -> 20 + (* Request allowed, remaining requests in window *) 21 + process_request () 22 + | false, _ -> 23 + (* Rate limited *) 24 + let retry = Rate_limit.retry_after limiter ~ip ~now in 25 + respond_429 ~retry_after:retry 26 26 ]} *) 27 27 28 28 type t