postrust-proxy 0.6.0

Reverse proxy for Postrust with load balancing and automatic TLS certificates
Documentation
[package]
name = "postrust-proxy"
description = "Reverse proxy for Postrust with load balancing and automatic TLS certificates"
homepage.workspace = true
readme = "README.md"
keywords = ["proxy", "load-balancer", "tls", "acme", "http"]
# Deliberately NOT `version.workspace = true`. The rest of the workspace is
# heading for 1.0.0; this crate is not, and a shared version number would
# promise a stability this crate cannot keep. See docs/stability.md.
version = "0.6.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
authors.workspace = true

[features]
default = ["acme"]
# ACME issuance over HTTP-01. instant-acme is not optional-only because the
# issuer, the challenge endpoint and the worker are all behind this flag.
acme = ["dep:instant-acme"]
sticky-cookie = []
# Enables tests/acme_issuance.rs, which needs a live certificate authority.
# Not default: without the harness there is nothing for them to talk to, and a
# test that quietly skips itself is a test that stops being noticed. Turned on
# by scripts/acme/run.sh and by the conformance workflow.
pebble-tests = ["acme"]

[dependencies]
# Async runtime
tokio.workspace = true
tokio-util = "0.7"
async-trait.workspace = true
futures.workspace = true

# Web/HTTP
axum.workspace = true
tower.workspace = true
tower-http.workspace = true
hyper.workspace = true
hyper-util.workspace = true
http-body-util.workspace = true
http.workspace = true

# TLS
tokio-rustls.workspace = true
rustls.workspace = true
rustls-pemfile.workspace = true
instant-acme = { workspace = true, optional = true }
x509-parser.workspace = true
regex.workspace = true

# ACME (optional)

# Database
sqlx.workspace = true

# Auth
jsonwebtoken.workspace = true

# Serialization
serde.workspace = true
serde_json.workspace = true
toml.workspace = true

# Error handling
thiserror.workspace = true
anyhow.workspace = true

# Utilities
bytes.workspace = true
tracing.workspace = true
tracing-subscriber.workspace = true
uuid.workspace = true
url.workspace = true

# Hot-reload and concurrency
dashmap.workspace = true
parking_lot.workspace = true

# Builder pattern (from rpxy)
derive_builder = "0.20"

# Fast hashing (from rpxy)
ahash = "0.8"

# Pin projections (from rpxy)
pin-project-lite = "0.2"

# Random for load balancing
rand = "0.9"

# DNS resolution for domain verification
hickory-resolver = "0.26"

# Hashing for API keys
sha2 = "0.10"
hex = "0.4"

# Base64 for JWT decoding
base64 = "0.22"

# Certificate reloading
hot_reload = "0.3"

# HTTP client for health checks
reqwest = { workspace = true }

# Timestamps
chrono.workspace = true

# Internal crates
postrust-core.workspace = true

[dev-dependencies]
pretty_assertions.workspace = true
tokio = { workspace = true, features = ["test-util", "macros"] }
# The database-backed tests in tests/ connect and assert on raw rows, so they
# need these in their own right rather than through the library.
sqlx.workspace = true
uuid.workspace = true
axum.workspace = true