[{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#forwardedFor-fffffed4","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware.forwardedFor","type":"forwardedFor(request: Request): Option[IP]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$$Slot.html#","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.Slot","type":"Slot[K](key: K, lastAccess: Instant)","kind":"class","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$$Status.html#Allowed-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.Status.Allowed","type":"Allowed extends Status","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#defaultHold-0","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.defaultHold","type":"defaultHold: Duration","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#matchedCrawler-1c2","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.matchedCrawler","type":"matchedCrawler(request: Request, knownCrawlers: Set[String] = ...): Option[String]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#live-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.live","type":"live: ZLayer[Any, Nothing, BadActor]","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter.html#","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter","type":"CrawlerLimiter[K](active: ConcurrentMap[String, Slot[K]])","kind":"class","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor","type":"BadActor","kind":"object","extra":""},{"link":"com/jamesward/zio_http_guard.html#","external":false,"fqn":".com.jamesward.zio_http_guard","type":"com.jamesward.zio_http_guard","kind":"package","extra":""},{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#gibberishResponse-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware.gibberishResponse","type":"gibberishResponse: Response","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$$Status.html#","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.Status","type":"Status","kind":"enum","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#defaultBanOnRequestCount-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.defaultBanOnRequestCount","type":"defaultBanOnRequestCount: Int","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#defaultBanWindow-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.defaultBanWindow","type":"defaultBanWindow: Duration","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#gibberishStream-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware.gibberishStream","type":"gibberishStream: ZStream[Any, Nothing, Byte]","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#IP-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.IP","type":"IP = String","kind":"type","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$$Status.html#Banned-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.Status.Banned","type":"Banned extends Status","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter","type":"CrawlerLimiter","kind":"object","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#layer-fffff683","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.layer","type":"layer(banWindow: Duration = ..., banOnRequestCount: Int = ...): ZLayer[Any, Nothing, BadActor]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#defaultKnownCrawlers-0","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.defaultKnownCrawlers","type":"defaultKnownCrawlers: Set[String]","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#defaultSuspect-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware.defaultSuspect","type":"defaultSuspect: Request => Boolean","kind":"val","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#layer-4ce","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.layer","type":"layer[K : Tag]: ZLayer[Any, Nothing, CrawlerLimiter[K]]","kind":"def","extra":""},{"link":"index.html#","external":false,"fqn":".zio-http-guard","type":"zio-http-guard","kind":"static","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter.html#tryClaim-fffff665","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.tryClaim","type":"tryClaim(crawler: String, key: K, hold: Duration)(using CanEqual[K, K]): UIO[Boolean]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor.html#","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor","type":"BadActor(banWindow: Duration, banOnRequestCount: Int, store: ConcurrentMap[IP, Ref[Chunk[Instant]]])","kind":"class","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor.html#checkReq-a79","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.checkReq","type":"checkReq(ip: IP, instant: Instant, suspect: Boolean): UIO[Status]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware","type":"BadActorMiddleware","kind":"object","extra":""},{"link":"com/jamesward/zio_http_guard/BadActor$.html#given_CanEqual_Status_Status-0","external":false,"fqn":"com.jamesward.zio_http_guard.BadActor.given_CanEqual_Status_Status","type":"given_CanEqual_Status_Status: CanEqual[Status, Status]","kind":"given","extra":""},{"link":"com/jamesward/zio_http_guard/CrawlerLimiter$.html#middleware-d25","external":false,"fqn":"com.jamesward.zio_http_guard.CrawlerLimiter.middleware","type":"middleware[K](resourceKey: Request => Option[K], hold: Duration = ..., knownCrawlers: Set[String] = ...)(using Tag[K], CanEqual[K, K]): HandlerAspect[CrawlerLimiter[K], Unit]","kind":"def","extra":""},{"link":"com/jamesward/zio_http_guard/BadActorMiddleware$.html#apply-81c","external":false,"fqn":"com.jamesward.zio_http_guard.BadActorMiddleware.apply","type":"apply(suspect: Request => Boolean = ..., bannedResponse: => Response = ..., extractIp: Request => Option[IP] = ...): HandlerAspect[BadActor, Unit]","kind":"def","extra":""}]