[package] name = "gctrl-api" version = "0.1.0" edition = "2021" [[bin]] name = "gctrl-api" path = "src/main.rs" [dependencies] axum = { version = "0.7", features = ["multipart"] } axum-extra = { version = "0.9", features = ["typed-header"] } tokio = { version = "1", features = ["full"] } tower = "0.4" tower-http = { version = "0.5", features = ["cors", "limit"] } serde = { version = "1", features = ["derive"] } serde_json = "1" sqlx = { version = "0.8", features = ["postgres", "uuid", "chrono", "runtime-tokio-rustls", "migrate"] } uuid = { version = "1", features = ["serde", "v4"] } chrono = { version = "0.4", features = ["serde"] } jsonwebtoken = "9" bcrypt = "0.15" redis = { version = "0.25", features = ["tokio-comp", "aio", "connection-manager"] } neo4rs = "0.7" reqwest = { version = "0.12", features = ["json", "rustls-tls", "stream"], default-features = false } dotenvy = "0.15" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Optional LLM-observability export to a self-hosted Arize Phoenix (OTLP/HTTP). # Off unless PHOENIX_OTLP_URL is set — see services::telemetry. Version trio is # mutually pinned (tracing-opentelemetry 0.28 → opentelemetry 0.27). opentelemetry = "0.27" opentelemetry_sdk = { version = "0.27", features = ["rt-tokio"] } opentelemetry-otlp = { version = "0.27", features = ["http-proto", "reqwest-client", "reqwest-rustls"], default-features = false } tracing-opentelemetry = "0.28" thiserror = "1" bytes = "1" base64 = "0.22" futures = "0.3" async-stream = "0.3" sha2 = "0.10" hmac = "0.12" hex = "0.4" url = "2" aes-gcm = "0.10" rand = "0.8" regex = "1" once_cell = "1" [dev-dependencies] # `ServiceExt::oneshot` — lets the router-shape test in main.rs actually route a # request through the router instead of only constructing it. Test-only: the # release binary keeps the featureless `tower` above. tower = { version = "0.4", features = ["util"] } [profile.release] opt-level = 3 lto = true strip = true