@@ -9,6 +9,43 @@ InfraLens's history as a standalone product (2026-01-06 to 2026-08-10) is
99frozen in [ ` docs/infralens/CHANGELOG.md ` ] ( docs/infralens/CHANGELOG.md ) .
1010InfraLens changes since its native migration are recorded here.
1111
12+ ## [ 1.5.0] — 2026-08-17
13+
14+ ### Added
15+
16+ - ** API Studio** (` /tools/api-studio ` ) — a new developer tool for building,
17+ sending, and inspecting HTTP requests directly from the browser: method,
18+ URL, query params, headers, Bearer/Basic auth, and a JSON/text/URL-encoded
19+ body, sent through a secured backend proxy (` POST /api/api-studio/request ` )
20+ that reuses InfraLens's SSRF/DNS/redirect validation stack untouched
21+ rather than duplicating it. Responses show status, timing, size, headers,
22+ and a formatted/raw body; requests are saved to a local IndexedDB history
23+ (reopen/resend/delete/clear, capped at 100 entries) and can be exported as
24+ ready-to-use ` fetch ` or ` curl ` code. Gated by its own rate-limit policy
25+ and a per-client concurrency cap, both enforced before any outbound
26+ attempt. ` /tools ` is now grouped into Web & API / Developer Utilities
27+ categories to make room for it; the footer's tool list follows the same
28+ order.
29+
30+ ### Changed
31+
32+ - ** Rate limiting moved off the in-memory limiter** — InfraLens and MetaLens
33+ now share a distributed, Upstash-backed rate-limit module
34+ (` src/lib/rate-limit ` ) instead of a process-local ` Map ` , which gave every
35+ serverless instance its own independent counter and reset on cold start.
36+ Each tool keeps its own quota bucket; InfraLens's policy relaxes from 1
37+ request/30s to 5/min + 30/h. The shared client-identifier helper also
38+ drops ` cf-connecting-ip ` from the trusted header chain — this deployment
39+ has no Cloudflare in front of it, so that header was accepted without
40+ ever being sanitized.
41+
42+ ### Security
43+
44+ - ** Contact form** had no abuse protection at all — now rate-limited
45+ (3 submissions/15min + 10/24h before the email is sent), plus a
46+ honeypot field, a minimum form-fill-time check, and server-side max
47+ field lengths.
48+
1249## [ 1.4.4] — 2026-08-16
1350
1451### Fixed
0 commit comments