def key
bend-kit-jwt@0.11.0.1 · jwt.bend:870
import bend-kit-jwt@0.11.0.1/jwt.bend as Jwt
import Base
import bend-kit-hairpin@0.13.0.1/hairpin.bend as Hairpin
870
871
872
873def key(c: Hairpin.Client, s: Jwks, +kid: String, +a: Alg, +now: U32) -> IO(Hairpin.Client & Jwks & Result<&1, &1, Err, Key>):
874 Jwks{+url, +ttl, +live, +at, +tried, +ks} = s
875 +found = jwk.pick(ks, kid, a)
876 +fresh = Bool.and(live, Bool.and(U32.is_le(at, now), U32.is_lt((now - at : U32), Bool.pick(U32, U32.is_lt(ttl, 60), 60, ttl))))
877 +cached = Bool.and(fresh, Maybe.is_some(&2, Jwk, found))
878 key.go(cached, U32.is_le(60, since(now, tried)), c, Jwks{url, ttl, live, at, tried, ks}, found, kid, a, now)