[package] name = "sunbeam-proxy" version = "0.1.0" edition = "2021" [lib] name = "sunbeam_proxy" path = "src/lib.rs" [dependencies] # Pingora with rustls backend (pure Rust TLS, no BoringSSL C build) pingora = { version = "0.8", features = ["rustls"] } pingora-proxy = { version = "0.8", features = ["rustls"] } pingora-core = { version = "0.8", features = ["rustls"] } pingora-http = "0.8" pingora-cache = { version = "0.8", features = ["rustls"] } # HTTP header constants http = "1" # Config serde = { version = "1", features = ["derive"] } toml = "0.8" # Async tokio = { version = "1", features = ["full"] } futures = "0.3" async-trait = "0.1" pin-project-lite = "0.2" # Structured logging + OTEL tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] } tracing-opentelemetry = "0.28" opentelemetry = { version = "0.27", features = ["trace"] } opentelemetry_sdk = { version = "0.27", features = ["rt-tokio"] } opentelemetry-otlp = { version = "0.27", features = ["http-proto", "reqwest-client"] } serde_json = "1" anyhow = "1" # CLI + serialization clap = { version = "4", features = ["derive"] } bincode = "1" rustc-hash = "2" # Lock-free Arc swapping for hot-reload (scanner model) arc-swap = "1" # Reverse DNS for bot IP verification dns-lookup = "2" # Prometheus metrics prometheus = "0.13" # Request IDs uuid = { version = "1", features = ["v4"] } # Static file serving and body rewriting bytes = "1" regex = "1" # Auth subrequests reqwest = { version = "0.12", features = ["rustls-tls", "blocking"], default-features = false } # Rustls crypto provider — must be installed before any TLS init rustls = { version = "0.23", features = ["aws-lc-rs"] } # K8s watcher for cert/config hot-reload kube = { version = "3", features = ["runtime", "client"] } k8s-openapi = { version = "0.27", features = ["v1_35"] } libc = "0.2" # Cluster gossip (iroh QUIC + HyParView/PlumTree) iroh = "0.96" iroh-gossip = { version = "0.96", features = ["net"] } blake3 = "1" hex = "0.4" rand = "0.9" tempfile = "3" # Dataset ingestion (CIC-IDS2017 CSV parsing) csv = "1" # burn-rs ML framework (training only, behind `training` feature) burn = { version = "0.20", features = ["wgpu", "autodiff", "train"], optional = true } [features] training = ["burn"] [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } proptest = "1" tempfile = "3" [[bench]] name = "scanner_bench" harness = false [[bench]] name = "ddos_bench" harness = false [profile.release] opt-level = 3 lto = true codegen-units = 1 strip = true