Files
alkhttp/tasks/server/adapter.md
T
glm-5.3-flash d070e548ad feat: server foundation (phase 1 core) — state, auth, healthz/decoy, gateway dispatch, HttpAdapter
Tasks completed: server-core-types, server-auth, server-healthz-decoy,
gateway-dispatch, server-adapter (5 of 17).

- src/server/state.rs: DecoyConfig + RouterState (alkcall type paths,
  6-endpoint reserved-path docs)
- src/server/auth.rs: bearer middleware + ResolvedIdentity extractor
  (10 tests: missing/malformed/basic/failed-resolution matrix)
- src/server/healthz.rs + decoy.rs: raw healthz; nginx-style 404,
  static site (path-traversal guarded), redirect decoys
- src/gateway/dispatch.rs: GatewayDispatch invoke/invoke_streaming
  (internal:false, forwarded_for:None, bounded deadline) +
  src/gateway/error.rs: CallError→HTTP status mapping (HTTP_<status>
  passthrough, retryable→Retry-After)
- src/server/adapter.rs: HttpAdapter ProtocolHandler — accept_bi →
  BiStream → TokioIo → hyper auto builder (h2 CONNECT enabled);
  integration tests over DuplexStream (request/response cycle, healthz,
  decoy 404)

Verified: cargo test (46 lib tests), clippy -D warnings, fmt,
test --all-features.
2026-08-28 07:35:02 +00:00

2.0 KiB

id, name, status, depends_on, scope, risk, impact, level, tags
id name status depends_on scope risk impact level tags
server-adapter HttpAdapter — ProtocolHandler with hyper over BiStream completed
server-core-types
server-auth
server-healthz-decoy
moderate medium component implementation
server
phase-1

Description

Port the HttpAdapter (ProtocolHandler for http/1.1 + h2) from /workspace/@alkdev/alknet/crates/alknet-http/src/server/adapter.rs, adapted to alkcall's shapes: handle() receives a Connection (alkcall::core::types), takes the BiStream from accept_bi(), wraps with TokioIo, drives hyper's http1/http2 connection builder against the axum Router (built once at construction, with_decoy / with_extra_routes builders per ADR-046). Branch on connection.remote_alpn(). Leave a route slot for the WS upgrade (wired in the websocket tasks).

Acceptance Criteria

  • HttpAdapter::new/h2/for_alpn + with_decoy + with_extra_routes ported
  • ProtocolHandler impl drives hyper over the BiStream; returns on connection close
  • Router merges extra routes; default surface wins collisions
  • Integration test: full HTTP request/response cycle over tokio::io::DuplexStreamConnection::from_bidi → adapter
  • cargo test passes; feature gates h2/http1 both compile

References

  • docs/architecture/http-server.md (§Running axum over a bidirectional stream)
  • docs/architecture/decisions/002-protocol-handler-trait.md
  • alkcall: core::types::Connection::accept_bi returns joined BiStream (alkcall ADR-005)

Notes

Agent fills during implementation.

Summary

Ported src/server/adapter.rs: HttpAdapter (ProtocolHandler for h2/http1.1), accept_bi→BiStream→TokioIo→hyper auto builder with h2 connect-protocol enabled, with_decoy/with_extra_routes builders, RESERVED_PATHS + WS_UPGRADE_PATH constants (WS handler wired in the websocket task). Integration tests: full request/response cycle, healthz, decoy 404 — all over tokio DuplexStream → Connection::from_bidi → ProtocolHandler::handle.