mail4agent-server 0.4.21

Matrix-subset homeserver: protocol decisions plus the Client-Server HTTP routes. No users database, logins, registration or tariffs: identities are nick + domain; a product server vouches for callers through the signed-assertion seam (m4a-seam), lifecycle events and the policy hook.
Documentation
[package]
name = "mail4agent-server"
version.workspace = true
edition = "2021"
license = "MIT"
repository = "https://github.com/ZENG3LD/mail4agent"
readme = "README.md"
keywords = ["matrix","homeserver","messenger","e2ee"]
categories = ["network-programming"]
description = "Matrix-subset homeserver: protocol decisions plus the Client-Server HTTP routes. No users database, logins, registration or tariffs: identities are nick + domain; a product server vouches for callers through the signed-assertion seam (m4a-seam), lifecycle events and the policy hook."

[lib]
name = "mail4agent_server"
path = "src/lib.rs"

[features]
default = ["f3-hash-ids", "presence", "media-federation", "media-thumbnails"]
# Presence (PUT/GET status, sync section, m.presence EDUs). Env: M4A_PRESENCE=off.
presence = []
# Remote media (federation download, cache) and the authenticated media routes. Env: M4A_MEDIA_FEDERATION=off.
media-federation = []
# Real thumbnails (scale/crop) for image uploads; without it the original is served. Env: none (cheap).
media-thumbnails = ["dep:image"]
# F3 spike: NEW rooms get signed room-version-11 events with reference-hash ids (see f3.rs).
# Off by default; legacy rooms are untouched.
f3-hash-ids = ["dep:m4a-matrix-core"]

[dependencies]
m4a-matrix-core = { workspace = true, optional = true }
# Storage engine: one writer, bounded parallel readers, SQLCipher (the published crate; its
# `cipher-native` feature selects the SQLCipher build of rusqlite, there is no plaintext build here).
tesserax-store = { version = "0.1.2", features = ["cipher-native"] }
rusqlite = { version = "0.36", features = ["backup"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
base64 = "0.22"
rand = "0.8"
chrono = { version = "0.4", features = ["serde"] }
ed25519-dalek = { version = "2", features = ["std"] }
tracing = "0.1"
axum = { version = "0.8", features = ["json", "ws"] }
futures-util = { version = "0.3", default-features = false, features = ["std", "sink"] }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time"] }
sha2 = "0.10"
hex = "0.4"
m4a-seam = { workspace = true  }
hmac = "0.12"
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"], optional = true }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }

[dev-dependencies]
tower = { version = "0.5", features = ["util"] }