[package] name = "api" version.workspace = true edition.workspace = true rust-version.workspace = true authors.workspace = true license.workspace = true description = "Foxhunt API Service — unified gRPC gateway with tonic-web for browser access" [[bin]] name = "api" path = "src/main.rs" [dependencies] # Core async and utilities tokio = { workspace = true, features = ["sync", "time"] } anyhow.workspace = true tracing.workspace = true tracing-subscriber.workspace = true serde.workspace = true serde_json.workspace = true once_cell.workspace = true clap.workspace = true # gRPC and networking (Tonic 0.14) tonic = { workspace = true, features = ["transport", "server", "tls-ring", "tls-webpki-roots"] } tonic-prost.workspace = true tonic-reflection.workspace = true tonic-health.workspace = true prost.workspace = true tower = { workspace = true, features = ["util"] } tower-layer.workspace = true tower-service.workspace = true hyper.workspace = true http-body.workspace = true http-body-util.workspace = true hyper-util.workspace = true bytes.workspace = true # Async streams and futures tokio-stream.workspace = true async-stream.workspace = true futures.workspace = true async-trait.workspace = true # Performance monitoring hdrhistogram.workspace = true prometheus = { workspace = true, features = ["process"] } # Cryptography and security sha2.workspace = true x509-parser = { version = "0.16", features = ["verify"] } reqwest = { version = "0.12", features = ["rustls-tls"], default-features = false } base64.workspace = true jsonwebtoken.workspace = true chrono.workspace = true ocsp = "0.4" lru = "0.12" hex = "0.4" const-oid = "0.9" # MFA/TOTP dependencies (optional, enabled by default via "mfa" feature) totp-rs = { version = "5.6", optional = true } qrcode = { version = "0.14", optional = true } image = { version = "0.25", optional = true } base32 = { version = "0.5", optional = true } hmac = { version = "0.12", optional = true } sha1 = "0.10" urlencoding = { version = "2.1", optional = true } secrecy = { version = "0.8", features = ["serde"] } zeroize.workspace = true thiserror.workspace = true uuid.workspace = true sqlx = { workspace = true, features = ["postgres", "chrono", "uuid", "json", "macros"] } num-traits.workspace = true rust_decimal.workspace = true rand.workspace = true # Internal workspace crates trading_engine.workspace = true common = { workspace = true, features = ["database"] } config = { workspace = true, features = ["postgres"] } # Redis for JWT revocation and rate limiting redis = { workspace = true, features = ["tokio-comp", "connection-manager"] } # Kubernetes API client for pod listing kube = { version = "3.0", features = ["client", "runtime", "derive"] } k8s-openapi = { version = "0.27", features = ["latest"] } # Rate limiting governor = "0.6" dashmap = "6.0" # HTTP and networking http = "1.1" # Regex for validation regex = "1.11" # Circuit breaker for fault tolerance (using tower's timeout + buffer for now) # Note: Full circuit breaker can be implemented using tower-layer # TLS crypto provider for kube-rs in-cluster client rustls = { version = "0.23", default-features = false, features = ["ring"] } # HTTP server for Prometheus metrics endpoint axum = "0.7" # gRPC-Web support for browser access tonic-web = "0.13" tower-http = { workspace = true, features = ["cors"] } [build-dependencies] tonic-prost-build.workspace = true prost-build.workspace = true [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } tokio-test = "0.4" fxt.workspace = true # Required for proto definitions in tests [features] default = ["minimal", "mfa"] minimal = [] database = [] mfa = ["dep:totp-rs", "dep:qrcode", "dep:image", "dep:base32", "dep:hmac", "dep:urlencoding"] [[bench]] name = "rate_limiter_bench" harness = false [[bench]] name = "auth_overhead" harness = false [[bench]] name = "routing_latency" harness = false [[bench]] name = "rate_limiting_perf" harness = false [[bench]] name = "cache_performance" harness = false [[bench]] name = "throughput" harness = false [[bench]] name = "revocation_cache_perf" harness = false [[bench]] name = "authz_dashmap_benchmark" harness = false [[bench]] name = "dashmap_rate_limiter_bench" harness = false [[bench]] name = "proxy_latency" harness = false