[package]
name        = "quicproquo-server"
version     = "0.1.0"
edition     = "2021"
description = "Delivery Service and Authentication Service for quicproquo."
license     = "MIT"

[features]
traffic-resistance = []
webtransport = ["dep:h3", "dep:h3-quinn", "dep:h3-webtransport", "dep:http"]

[[bin]]
name = "qpq-server"
path = "src/main.rs"

[dependencies]
quicproquo-core       = { path = "../quicproquo-core" }
quicproquo-proto      = { path = "../quicproquo-proto" }
quicproquo-plugin-api = { path = "../quicproquo-plugin-api" }
quicproquo-kt         = { path = "../quicproquo-kt" }
quicproquo-rpc        = { path = "../quicproquo-rpc" }

# Dynamic plugin loading
libloading = "0.8"

# Serialisation + RPC
capnp         = { workspace = true }
capnp-rpc     = { workspace = true }
prost         = { workspace = true }
bytes         = { workspace = true }

# Async
tokio         = { workspace = true }
tokio-util    = { workspace = true }
futures       = { workspace = true }

# Server utilities
dashmap       = { workspace = true }
hex           = { workspace = true }
sha2          = { workspace = true }
tracing       = { workspace = true }
tracing-subscriber = { workspace = true }
quinn         = { workspace = true }
quinn-proto   = { workspace = true }
rustls        = { workspace = true }
rcgen         = { workspace = true }
x509-parser   = { workspace = true }

# Crypto — OPAQUE PAKE
opaque-ke     = { workspace = true }
rand          = { workspace = true }
subtle        = { workspace = true }
zeroize       = { workspace = true }

# Database
rusqlite      = { workspace = true }

# Error handling
anyhow        = { workspace = true }
thiserror     = { workspace = true }
bincode       = { workspace = true }
serde         = { workspace = true }
serde_json    = { workspace = true }

# CLI
clap          = { workspace = true }
toml          = { version = "0.8" }

# WebSocket JSON-RPC bridge for browser clients
tokio-tungstenite = "0.26"
base64            = "0.22"

# Metrics (Prometheus)
metrics                    = "0.22"
metrics-exporter-prometheus = "0.15"

# mDNS service announcement for local mesh / Freifunk node discovery.
mdns-sd = "0.12"

# WebTransport (HTTP/3) — feature-gated, for browser clients.
h3                = { version = "0.0.8", optional = true }
h3-quinn          = { version = "0.0.10", features = ["datagram"], optional = true }
h3-webtransport   = { version = "0.1", optional = true }
http              = { version = "1", optional = true }

[lints]
workspace = true

[dev-dependencies]
tempfile = "3"
