osproxy-server 1.0.2

The osproxy binary: process lifecycle and wiring. No business logic.
Documentation
[package]
name = "osproxy-server"
description = "The osproxy binary: process lifecycle and wiring. No business logic."
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true

[[bin]]
name = "osproxy"
path = "src/main.rs"

[features]
# Crypto provider selection forwarded to osproxy-transport (ADR-009). A FIPS
# binary is built with
# `cargo build -p osproxy-server --bin osproxy --no-default-features --features fips`.
default = ["non-fips"]
# The crypto feature also selects the HMAC module the X-Debug-Directive verifier
# authenticates with, so a FIPS binary never links a non-validated primitive. The
# weak `osproxy-kafka-krafka?/...` edge forwards the same provider to the broker
# producer *only when* `capture`/`fanout` pulled it in, so a FIPS build keeps the
# ring-absent boundary and a default binary never links krafka at all.
non-fips = ["osproxy-transport/non-fips", "dep:ring", "osproxy-kafka-krafka?/non-fips"]
fips = ["osproxy-transport/fips", "dep:aws-lc-rs", "osproxy-kafka-krafka?/fips"]
# The two Kafka integrations are independent opt-ins, each linking only the broker
# crates it needs (off by default so the standard binary carries no broker client):
#   capture โ€” full-fidelity traffic capture (`Capture` seam + durable WAL tier).
#   fanout  โ€” async fan-out write queue (`docs/04` ยง9; no WAL).
# Build with e.g. `cargo build -p osproxy-server --features capture` (or `fanout`,
# or both). `kafka` is a convenience alias enabling both.
capture = ["dep:osproxy-kafka", "dep:osproxy-kafka-krafka", "dep:osproxy-kafka-wal"]
fanout = ["dep:osproxy-kafka", "dep:osproxy-kafka-krafka"]
kafka = ["capture", "fanout"]
# etcd โ€” back the fleet directive store with a distributed, watch-fed store
# instead of the in-memory store + admin publish. Off by default so the standard
# binary links no etcd/tonic client.
etcd = ["dep:osproxy-etcd"]

[dependencies]
osproxy-core.workspace = true
osproxy-capture.workspace = true
osproxy-config.workspace = true
osproxy-engine.workspace = true
osproxy-observe.workspace = true
osproxy-transport = { workspace = true, default-features = false }
osproxy-otlp.workspace = true
osproxy-etcd = { workspace = true, optional = true }
osproxy-spi.workspace = true
osproxy-tenancy.workspace = true
osproxy-sink.workspace = true
osproxy-kafka = { workspace = true, optional = true }
osproxy-kafka-krafka = { workspace = true, optional = true }
osproxy-kafka-wal = { workspace = true, optional = true }
serde_json.workspace = true
prost.workspace = true
ciborium.workspace = true
# The binary's global allocator (see the workspace dependency note). Binary-only.
mimalloc.workspace = true
ring = { workspace = true, optional = true }
aws-lc-rs = { workspace = true, optional = true }
tokio = { workspace = true, features = ["rt-multi-thread", "macros", "net", "signal", "time"] }

[build-dependencies]
# Compiles the async fan-out op-envelope `.proto` (messages only, no service).
tonic-prost-build.workspace = true

[dev-dependencies]
hyper = { workspace = true, features = ["server", "client", "http1"] }
hyper-util = { workspace = true, features = ["server", "service", "client", "client-legacy", "http1", "tokio"] }
http-body-util.workspace = true
bytes.workspace = true
serde_json.workspace = true
testcontainers.workspace = true
testcontainers-modules = { workspace = true, features = ["kafka"] }
krafka = { workspace = true, features = ["ring"] }
osproxy-bench.workspace = true

[lints]
workspace = true