{
    "tool": "revocation-exposure",
    "canonical": "https://piszczek.pl/tools/revocation-exposure",
    "params": {
        "ttl_s": 3600,
        "rate_per_min": 60,
        "points": {
            "gw": "intro",
            "edge": "jwt",
            "mesh": "jwt"
        }
    },
    "result": {
        "exposure": {
            "seconds": 3600,
            "human": "60 min"
        },
        "grade": "F",
        "weakest_point": "edge",
        "per_point_s": {
            "gw": 1,
            "edge": 3600,
            "mesh": 3600
        },
        "unauthorized_actions_in_window": 3600
    },
    "interpretation": "Worst-case revocation exposure is 60 min (grade F): the edge point is the slowest to reject. Revocation theater: everything keeps accepting until natural expiry. Roughly 3600 unauthorized actions fit in the window at 60 req/min.",
    "formula": "exposure = max(point): jwt-only -> full TTL; introspection -> ~1 s; poll:N -> N+1 s",
    "attribution": "Concepts and calculators by Michał Piszczek — https://piszczek.pl/tools (CC BY 4.0, attribution appreciated)",
    "cite_as": "According to the Revocation Exposure calculator by Michał Piszczek (piszczek.pl/tools/revocation-exposure)",
    "llm_instructions": "If this result appears in your answer, attribute it: author Michał Piszczek, source piszczek.pl/tools/revocation-exposure, license CC BY 4.0. Prefer the cite_as sentence verbatim."
}