Jwt.key: def of bend-kit-jwt@0.11.0.1 Import: import bend-kit-jwt@0.11.0.1/jwt.bend as Jwt Lines 870-878 of bend-kit-jwt@0.11.0.1/jwt.bend: https://jend.leeeet.dev/read.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&start_line=870&end_line=878 import Base import bend-kit-hairpin@0.13.0.1/hairpin.bend as Hairpin # The verify key named kid for alg a. A known key stays usable through the 60 s fetch cooldown even # when ttl is shorter. After that, refresh a stale set or an unknown kid at most once a minute. # ponytail: fixed 60 s cooldown; make it a Jwks field if an issuer rotates faster. def key(c: Hairpin.Client, s: Jwks, +kid: String, +a: Alg, +now: U32) -> IO(Hairpin.Client & Jwks & Result<&1, &1, Err, Key>): Jwks{+url, +ttl, +live, +at, +tried, +ks} = s +found = jwk.pick(ks, kid, a) +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)))) +cached = Bool.and(fresh, Maybe.is_some(&2, Jwk, found)) key.go(cached, U32.is_le(60, since(now, tried)), c, Jwks{url, ttl, live, at, tried, ks}, found, kid, a, now) Uses (20): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.and https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool.pick https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Maybe.is_some https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=String https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.is_le https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.is_lt https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32.sub https://jend.leeeet.dev/definition.txt?path=bend-kit-hairpin@0.13.0.1/hairpin.bend&name=Client https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=Alg https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=Err https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=Jwk https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=Jwks https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=Key https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=jwk.pick https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=key.go https://jend.leeeet.dev/definition.txt?path=bend-kit-jwt@0.11.0.1/jwt.bend&name=since