[package]
name = "sentinel-proxy"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
rust-version.workspace = true
description = "A security-first reverse proxy built on Pingora with sleepable ops at the edge"
keywords = ["proxy", "reverse-proxy", "http", "security", "pingora"]
categories = ["network-programming", "web-programming::http-server"]
readme = "../../README.md"
[lib]
name = "sentinel_proxy"
path = "src/lib.rs"
[[bin]]
name = "sentinel"
path = "src/main.rs"
[dependencies]
pingora = { workspace = true }
pingora-core = { workspace = true }
pingora-http = { workspace = true }
pingora-proxy = { workspace = true }
pingora-load-balancing = { workspace = true }
pingora-timeout = { workspace = true }
pingora-limits = { workspace = true }
pingora-cache = { workspace = true }
pingora-memory-cache = { workspace = true }
sentinel-config = { path = "../config", version = "0.2.4" }
sentinel-common = { path = "../common", version = "0.2.4" }
sentinel-agent-protocol = { path = "../agent-protocol", version = "0.2.4" }
tokio = { workspace = true }
async-trait = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
prometheus = { workspace = true }
thiserror = { workspace = true }
anyhow = { workspace = true }
http = { workspace = true }
bytes = { workspace = true }
rustls = { workspace = true }
rustls-pemfile = { workspace = true }
webpki-roots = "0.26"
uuid = { workspace = true }
chrono = { workspace = true }
dashmap = { workspace = true }
parking_lot = { workspace = true }
arc-swap = { workspace = true }
base64 = { workspace = true }
regex = "1.10"
urlencoding = "2.1"
once_cell = "1.20"
maxminddb = "0.24"
ip2location = "0.5"
jsonschema = "0.17"
serde_yaml = "0.9"
mime_guess = "2.0"
http-body-util = "0.1"
httpdate = "1.0"
html-escape = "0.2"
flate2 = "1.0"
brotli = "7.0"
clap = { version = "4.5", features = ["derive", "env"] }
nix = { version = "0.29", features = ["signal"] }
libc = "0.2"
signal-hook = "0.3"
num_cpus = "1.16"
tikv-jemallocator = { workspace = true }
rand = "0.8"
hex = "0.4"
redis = { version = "0.27", features = ["tokio-comp", "connection-manager"], optional = true }
async-memcached = { version = "0.5", optional = true }
opentelemetry = { version = "0.27", optional = true }
opentelemetry_sdk = { version = "0.27", features = ["rt-tokio"], optional = true }
opentelemetry-otlp = { version = "0.27", features = ["tonic"], optional = true }
opentelemetry-semantic-conventions = { version = "0.27", optional = true }
xxhash-rust = { version = "0.8", features = ["xxh3"] }
murmur3 = "0.5"
notify = "6.1"
tokio-util = { version = "0.7", features = ["codec"] }
futures = "0.3"
tonic = { workspace = true }
tonic-health = "0.12"
reqwest = { version = "0.12", features = ["rustls-tls", "json"], optional = true }
[features]
default = []
distributed-rate-limit = ["redis", "async-memcached"]
distributed-rate-limit-redis = ["redis"]
distributed-rate-limit-memcached = ["async-memcached"]
opentelemetry = ["dep:opentelemetry", "dep:opentelemetry_sdk", "dep:opentelemetry-otlp", "dep:opentelemetry-semantic-conventions"]
kubernetes = ["reqwest"]
[dev-dependencies]
criterion = { workspace = true }
proptest = { workspace = true }
insta = { workspace = true }
tempfile = "3.12"
reqwest = { version = "0.12", features = ["rustls-tls"] }
tokio-tungstenite = "0.24"
futures-util = "0.3"