trust-tasks-https 0.17.7

HTTPS transport binding for the Trust Tasks framework — typed client + axum-based server with bearer-auth identity, suitable for demos, mockups, and end-to-end testing.
[package]
name = "trust-tasks-https"
version = "0.17.7"
edition.workspace = true
rust-version = "1.95"
license.workspace = true
repository.workspace = true
description = "HTTPS transport binding for the Trust Tasks framework — typed client + axum-based server with bearer-auth identity, suitable for demos, mockups, and end-to-end testing."
keywords = ["trust-tasks", "https", "axum", "reqwest", "transport"]
categories = ["network-programming", "web-programming::http-server"]
publish = true

[features]
default = ["client", "server"]
client = ["dep:reqwest"]
server = ["dep:axum", "dep:tokio", "dep:tower"]
# Opt-in: JwtBearerAuth wraps an asymmetric-key JWT verifier into the
# Auth trait. Off by default because most callers ship an opaque-token
# directory (see BearerAuth) and don't want to pay for the jsonwebtoken
# crate's transitive deps.
jwt = ["dep:jsonwebtoken"]

[dependencies]
trust-tasks-rs = { path = "../trust-tasks-rs", version = "0.17" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
uuid = { version = "1", features = ["v4"] }
chrono = { version = "0.4", default-features = false, features = ["clock"] }

# Server (feature-gated)
axum = { version = "0.8", optional = true, default-features = false, features = [
  "http1",
  "json",
  "tokio",
] }
# `limit` + `timeout` back the ConcurrencyLimitLayer / TimeoutLayer that
# `HttpsServer::into_router` applies as slowloris and flood controls.
tower = { version = "0.5", optional = true, default-features = false, features = [
  "limit",
  "timeout",
] }
tokio = { version = "1", optional = true, features = [
  "net",
  "rt",
  "macros",
  "sync",
] }

# Client (feature-gated)
reqwest = { version = "0.13", optional = true, default-features = false, features = [
  "json",
  "rustls",
] }

# JWT bearer-auth adapter (feature-gated under `jwt`).
# jsonwebtoken 10 split crypto into provider features — at least one of
# `rust_crypto` / `aws_lc_rs` MUST be enabled. We pick `aws_lc_rs`:
# the `rust_crypto` provider transitively pulls in `rsa` 0.9, which
# carries the open Marvin-Attack advisory RUSTSEC-2023-0071 with no
# patch available. `aws-lc-rs` is already in the workspace dep graph
# via rustls, so reusing it here costs nothing extra.
jsonwebtoken = { version = "10", optional = true, default-features = false, features = [
  "aws_lc_rs",
] }

[dev-dependencies]
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.13", default-features = false, features = [
  "json",
  "rustls",
] }
async-trait = "0.1"
# The demo sends `acl/grant/0.1`, which declares `proof` REQUIRED, so the
# example has to actually sign.
#
# NO `version` FIELD, deliberately. `cargo publish` resolves any dev-dependency
# that carries one, from the registry — so a versioned dev-dependency on a
# workspace sibling constrains publication order exactly as a normal dependency
# does, while release-plz does NOT count dev-dependency edges when it orders the
# publish. That mismatch broke the 0.17.0 release: cargo tried to package this
# crate before `trust-tasks-proof` had uploaded and died on
#   failed to select a version for the requirement `trust-tasks-proof = "^0.17"`
# It had survived until then only because the requirement pointed at an older
# already-published version; lockstep versioning moved it to one that did not
# exist yet, and the latent bug became a half-published release.
#
# Path-only means cargo strips it from the published manifest entirely, so it
# imposes no ordering constraint at all. The example still builds in-tree.
trust-tasks-proof = { path = "../trust-tasks-proof", features = [
  "affinidi",
] }
affinidi-secrets-resolver = "0.5"