cabal-version: 3.0
name: keter-rate-limiting-plugin
version: 0.2.0.2
synopsis: Simple Keter rate limiting plugin.
description:
A modern, high-performance, and highly customisable rate limiting plugin for keter.
Provides four window algorithms (Fixed Window, Sliding Window, Token Bucket, Leaky Bucket),
as well as TinyLRU cache approach,
IP zone support, and convenient and customisable API.
See README.md and homepage for usage and details.
homepage: https://github.com/Oleksandr-Zhabenko/keter-rate-limiting-plugin
license: MIT
license-file: LICENSE
author: Oleksandr Zhabenko
maintainer: oleksandr.zhabenko@yahoo.com
copyright: 2025 Oleksandr Zhabenko
category: Network
build-type: Simple
extra-doc-files: CHANGELOG.md, README.md
extra-source-files: README.md
tested-with: GHC ==9.2.8, GHC ==9.4.8, GHC ==9.6.5, GHC ==9.8.4
common warnings
ghc-options: -Wall
library
import: warnings
exposed-modules:
Data.TinyLRU
Keter.RateLimiter.WAI
Keter.RateLimiter.Cache
Keter.RateLimiter.CacheWithZone
Keter.RateLimiter.IPZones
Keter.RateLimiter.SlidingWindow
Keter.RateLimiter.TokenBucketWorker
Keter.RateLimiter.TokenBucket
Keter.RateLimiter.LeakyBucket
Keter.RateLimiter.Types
Keter.RateLimiter.AutoPurge
Keter.RateLimiter.Notifications
Keter.RateLimiter.RequestUtils
-- other-modules: (add if you have internal modules)
default-extensions: DataKinds, DeriveGeneric, FlexibleContexts, FlexibleInstances, ForeignFunctionInterface, FunctionalDependencies, InstanceSigs, KindSignatures, MultiParamTypeClasses, OverloadedStrings, ScopedTypeVariables, TypeApplications, GADTs
build-depends:
base >= 4.7 && < 5,
text >= 1.2,
bytestring >= 0.10,
wai >=3.2.3 && <3.3,
iproute >=1.7.10,
network >=3.1.2 && <3.2 || ^>=3.2.0,
http-types >=0.12.3 && <0.13,
directory >= 1.3.4.0 && <1.4,
case-insensitive >=1.2.1.0,
aeson >= 1.4,
cache >= 0.1,
time >= 1.9,
focus >=1.0.3,
stm >=2.5.0 && <2.6,
stm-containers >=1.2 && <2,
deepseq,
cookie,
list-t >=1.0.5 && <2,
network >=3.1.2 && <3.2 || ^>=3.2.0,
unordered-containers >=0.2.17 && <0.3,
hashable >= 1.4.2.0 && < 2,
clock >= 0.8.3 && < 1
extra-libraries: z
hs-source-dirs: src
default-language: Haskell2010
test-suite keter-rate-limiting-plugin-test
import: warnings
default-language: Haskell2010
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Main.hs
other-modules:
Keter.RateLimiter.Cache.PurgeTests
Keter.RateLimiter.LeakyBucketTests
Keter.RateLimiter.IPZonesTests
Keter.RateLimiter.LeakyBucketStateTests
Keter.RateLimiter.NotificationTests
Keter.RateLimiter.SlidingWindowTests
Keter.RateLimiter.TokenBucketStateTests
Keter.RateLimiter.TokenBucketTests
Keter.RateLimiter.WAITests
TinyLRUTests
build-depends:
base >=4 && <5,
async >=2.2.4 && <2.3,
wai >=3.2.3 && <3.3,
wai-extra >= 3.0.3 && < 3.2,
network >=3.1.2 && <3.2 || ^>=3.2.0,
http-types >=0.12.3 && <0.13,
directory >= 1.3.4.0 && <1.4,
HUnit,
aeson >= 1.4,
bytestring >= 0.10,
case-insensitive >=1.2.1.0,
keter-rate-limiting-plugin,
tasty >= 1.4 && < 1.6,
filepath >=1.4.2 && <1.6,
tasty-hunit >= 0.10 && < 0.11,
QuickCheck,
tasty-quickcheck,
text >= 1.2.5 && < 3.0,
cookie,
random >=1.2.1 && <1.4,
stm >=2.5.0 && <2.6,
stm-containers >=1.2 && <2,
cache >= 0.1,
containers >= 0.6,
unordered-containers >=0.2.17 && <0.3,
time >= 1.9,
hashable >= 1.4.2.0 && < 2,
clock >= 0.8.3 && < 1,
temporary >= 1.3 && < 1.4
-- extra-libraries: