Files
alkhttp/Cargo.toml
T
glm-5.3-flash c89aa65fb2 chore(deps): consume alkcall 0.9.0
- bump alkcall 0.8.1 -> 0.9 (gateway feature unchanged). No code change
  forced: none of the 0.9.0 breaking surfaces are constructed or
  pattern-matched in this crate — no ManagerError match arms (the new
  InvalidAdopt variant changes nothing here), no RelayError matching
  (the removed PubTypedOpen variant is unreachable from this crate),
  no Establishment construction or Debug dependence (the WS ferry
  passes Option<OpenEstablisher> through unchanged, per the 0.8.0
  audit), and the op/register forward-through refactor does not touch
  the from_wss import filter or the adapter-registered leaf bundles
- ride-through fixes: tests/ws_overlay_ops.rs now expects
  register_imported's new Result<(), String> return (8 sites assert
  registration success instead of discarding the value — the bool
  return they consumed was ignored anyway); fuzz/shared follows the
  main crate to alkcall 0.9 so the harness replay resolves one
  alkcall version (the stale 0.8.1 spec pinned two copies against
  alkhttp's requirement and broke the shared-crate build)
- minor bump 0.6.0 -> 0.7.0 per the dep-wave convention (0.3.0 rode
  alkcall 0.6.0, 0.4.0 rode 0.7.0, 0.5.0 rode 0.8.0): this crate's
  public API carries alkcall types through re-exports and the
  ProtocolHandler impl, so a semver-breaking upstream is
  semver-relevant here

Verification: cargo test 441+70 pass (default), 520+70 pass
(all-features), clippy --all-features --all-targets -D warnings clean,
fmt --check clean, doc --no-deps clean, fuzz corpus replay 21/21
2026-10-14 05:19:29 +00:00

122 lines
4.6 KiB
TOML

[package]
name = "alkhttp"
version = "0.6.0"
edition = "2021"
rust-version = "1.88"
license = "MIT OR Apache-2.0"
description = "HTTP interface for the alk stack: serves HTTP/1.1 + HTTP/2 on standard ALPNs (with WebSocket upgrade carrying the channels protocol) and hosts the HTTP-backed call-protocol adapters"
readme = "README.md"
repository = "https://git.alk.dev/alkdev/alkhttp"
keywords = ["http", "websocket", "rpc", "openapi", "mcp"]
categories = ["network-programming", "web-programming", "asynchronous"]
exclude = [".opencode/", "AGENTS.md", "docs/", "tasks/", "scripts/", "fuzz/"]
[lib]
name = "alkhttp"
[workspace]
members = ["."]
exclude = ["fuzz"]
[features]
default = ["server", "client", "h2", "http1"]
# Producer side: the axum `Router` host (gateway routes, /healthz,
# /openapi.json, /mcp, the WS upgrade path) and the hyper connection
# driver. `openapi` rides along because /openapi.json is part of the
# default surface (ADR-042/045); `http1` rides along so the hyper
# auto-builder always has at least one protocol compiled.
server = ["dep:axum", "dep:hyper", "dep:hyper-util", "dep:uuid", "openapi", "http1"]
# Consumer side: the shared outbound client host and the HTTP-backed
# import adapters (`from_jsonschema`, `from_openapi` with `openapi`,
# `from_mcp` with `mcp`).
client = ["dep:arc-swap", "dep:httpdate", "dep:percent-encoding", "dep:reqwest", "dep:reqwest-middleware", "dep:reqwest-retry", "dep:url", "openapi"]
# Shared OpenAPI document model: `from_openapi` parsing (client side)
# and the `to_openapi` gateway projection (server side).
openapi = ["dep:yaml_serde"]
# MCP adapters: `from_mcp` needs `client`, `to_mcp` needs `server`.
mcp = ["dep:rmcp"]
# WebSocket transport (from_wss consumer; tungstenite flavor of the
# WS ↔ byte-stream adapter).
wss = ["dep:tokio-tungstenite"]
# Test-only WS client helpers (downstream deployment tests); implies
# `server` — the helpers live with the upgrade path.
test-support = ["server", "dep:tokio-tungstenite"]
# HTTP protocol features of the server connection driver (ADR-001).
h2 = ["server", "dep:hyper", "hyper-util/http2", "hyper/http2"]
http1 = ["server", "dep:hyper", "hyper-util/http1", "hyper/http1"]
[dependencies]
alkcall = { version = "0.9", features = ["gateway"] }
arc-swap = { version = "1", optional = true }
axum = { version = "0.8", optional = true, features = ["ws"] }
bytes = "1"
futures = "0.3"
http = "1"
httpdate = { version = "1", optional = true }
hyper = { version = "1", optional = true, features = ["server"] }
hyper-util = { version = "0.1", optional = true, features = ["server", "service", "tokio"] }
jsonschema = { version = "0.46", default-features = false }
parking_lot = "0.12"
percent-encoding = { version = "2", optional = true }
reqwest = { version = "0.13", optional = true, default-features = false, features = ["json", "stream", "rustls"] }
reqwest-middleware = { version = "0.5", optional = true }
reqwest-retry = { version = "0.9", optional = true }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "io-util", "net", "fs", "time", "sync"] }
tokio-tungstenite = { version = "0.29", optional = true, default-features = false, features = ["connect", "rustls-tls-webpki-roots", "handshake"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
async-trait = "0.1"
tracing = "0.1"
thiserror = "2"
uuid = { version = "1", optional = true, features = ["v4"] }
url = { version = "2", optional = true }
yaml_serde = { version = "0.10", optional = true }
rmcp = { version = "1.8", optional = true, default-features = false, features = [
"client",
"server",
"transport-streamable-http-client-reqwest",
"transport-streamable-http-server",
] }
[dev-dependencies]
http-body-util = "0.1"
tower = { version = "0.5", features = ["util"] }
tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect"] }
openapiv3 = "2"
rcgen = "0.14"
tokio-rustls = "0.26"
rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "std", "tls12"] }
rustls-pki-types = "1"
uuid = { version = "1", features = ["v4"] }
[[test]]
name = "ws_upgrade_session"
required-features = ["test-support"]
[[test]]
name = "ws_overlay_ops"
required-features = ["test-support"]
[[test]]
name = "from_mcp_integration"
required-features = ["server", "client", "mcp"]
[[test]]
name = "full_surface"
required-features = ["server", "client", "openapi", "mcp", "test-support"]
[[test]]
name = "client_config_reload"
required-features = ["client"]
[[test]]
name = "client_tls"
required-features = ["client"]
[[test]]
name = "retry_after_budget"
required-features = ["client"]
[[test]]
name = "retry_policy_wire"
required-features = ["client"]