[package]
name = "dd0c-route"
version = "0.1.0"
edition = "2021"
description = "LLM Cost Router & Dashboard — route AI requests to the cheapest capable model"
license = "MIT"

[[bin]]
name = "dd0c-proxy"
path = "src/proxy/main.rs"

[[bin]]
name = "dd0c-api"
path = "src/api/main.rs"

[[bin]]
name = "dd0c-worker"
path = "src/worker/main.rs"

[dependencies]
# Web framework
axum = { version = "0.7", features = ["ws", "macros"] }
tokio = { version = "1", features = ["full"] }
tower = "0.4"
tower-http = { version = "0.5", features = ["cors", "trace", "compression-gzip"] }
hyper = { version = "1", features = ["full"] }
hyper-util = "0.1"

# Serialization
serde = { version = "1", features = ["derive"] }
serde_json = "1"

# Database
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres", "uuid", "chrono", "json"] }
deadpool-redis = "0.15"
redis = { version = "0.25", features = ["tokio-comp", "connection-manager"] }

# Auth
jsonwebtoken = "9"
bcrypt = "0.15"
uuid = { version = "1", features = ["v4", "serde"] }

# Observability
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
opentelemetry = "0.22"
opentelemetry-otlp = "0.15"

# Config
dotenvy = "0.15"
config = "0.14"

# HTTP client (upstream providers)
reqwest = { version = "0.12", features = ["json", "stream", "rustls-tls"] }
reqwest-eventsource = "0.6"
futures = "0.3"
tokio-stream = "0.1"
bytes = "1"

# Crypto (provider key encryption)
aes-gcm = "0.10"
base64 = "0.22"

# Feature flags
serde_yaml = "0.9"

# Misc
chrono = { version = "0.4", features = ["serde"] }
thiserror = "1"
anyhow = "1"
getrandom = "0.2"
regex = "1"
async-trait = "0.1"
rand = "0.8"

[dev-dependencies]
# Testing
tokio-test = "0.4"
wiremock = "0.6"
testcontainers = "0.15"
testcontainers-modules = { version = "0.3", features = ["postgres", "redis"] }
proptest = "1"
criterion = { version = "0.5", features = ["async_tokio"] }
tower-test = "0.4"

[[bench]]
name = "proxy_latency"
harness = false
