[package] name = "kez-chat-server" version = "0.1.0" edition = "2024" license = "MIT OR Apache-2.0" description = "Home server for kez-chat: handle registry + NATS auth callout + WebFinger + static SPA host. Designed in kez-chat/document.md." [dependencies] anyhow = "1" axum = "0.7" chrono = { version = "0.4", features = ["serde"] } clap = { version = "4.5", features = ["derive", "env"] } hex = "0.4" kez-core = { path = "../rust/crates/kez-core" } rusqlite = { version = "0.32", features = ["bundled"] } serde = { version = "1", features = ["derive"] } serde_json = "1" thiserror = "2" tokio = { version = "1.48", features = ["macros", "rt-multi-thread", "sync", "signal"] } tokio-stream = { version = "0.1", features = ["sync"] } futures = "0.3" web-push = "0.10" base64 = "0.22" p256 = { version = "0.13", features = ["pem"] } rand = "0.8" # Server-side nostr listener — subscribes to relays for every handle # registered on this chat-server and fires Web Push when a kez-DM # event for one of them lands. The web client publishes the same # events; this is the missing link that lets push notifications work # when chat goes over nostr instead of /v1/messages. nostr-sdk = { version = "0.36", default-features = false, features = ["all-nips"] } hkdf = "0.12" sha2 = "0.10" tower-http = { version = "0.6", features = ["trace", "cors", "fs"] } tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } [dev-dependencies] reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] } tempfile = "3"