diff --git a/Cargo.lock b/Cargo.lock index c9b60a9..c862ae7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -188,6 +188,25 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chat-store" +version = "0.1.0" +dependencies = [ + "anyhow", + "axum", + "base64", + "clap", + "ed25519-dalek", + "hex", + "rusqlite", + "serde", + "serde_json", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", +] + [[package]] name = "clap" version = "4.6.1" @@ -555,25 +574,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" -[[package]] -name = "keypackage-registry" -version = "0.1.0" -dependencies = [ - "anyhow", - "axum", - "base64", - "clap", - "ed25519-dalek", - "hex", - "rusqlite", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "lazy_static" version = "1.5.0" diff --git a/Cargo.toml b/Cargo.toml index 5a8bcb4..4d2ef92 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,12 +3,12 @@ [workspace] [package] -name = "keypackage-registry" +name = "chat-store" version = "0.1.0" edition = "2024" [[bin]] -name = "keypackage-registry" +name = "chat-store" path = "src/main.rs" [dependencies] diff --git a/Dockerfile b/Dockerfile index 16551e0..c7164d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,11 +20,11 @@ COPY Cargo.toml Cargo.lock ./ RUN mkdir src \ && echo "fn main() {}" > src/main.rs \ && cargo build --release --locked \ - && rm -rf src target/release/deps/keypackage_registry* target/release/keypackage-registry + && rm -rf src target/release/deps/chat_store* target/release/chat-store # Now build the real binary; dependency artifacts above are reused. COPY src ./src -RUN cargo build --release --locked --bin keypackage-registry +RUN cargo build --release --locked --bin chat-store ######################################## # Runtime stage @@ -35,7 +35,7 @@ RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates \ && rm -rf /var/lib/apt/lists/* -COPY --from=builder /app/target/release/keypackage-registry /usr/local/bin/keypackage-registry +COPY --from=builder /app/target/release/chat-store /usr/local/bin/chat-store # Matches the default --bind 0.0.0.0:8080. EXPOSE 8080 @@ -44,5 +44,5 @@ EXPOSE 8080 VOLUME ["/data"] ENV RUST_LOG=info -ENTRYPOINT ["keypackage-registry"] -CMD ["--bind", "0.0.0.0:8080", "--db", "/data/keypackage-registry.db"] +ENTRYPOINT ["chat-store"] +CMD ["--bind", "0.0.0.0:8080", "--db", "/data/chat-store.db"] diff --git a/README.md b/README.md index 96f67fc..05bbd68 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # Chat Store -Persistence for group-chat users' key packages — the **keypackage-registry** -HTTP service, extracted from [libchat](https://github.com/logos-messaging/libchat) -so it can be deployed on its own. +Persistence for group-chat users' key packages — the **chat-store** HTTP service +(formerly `keypackage-registry`), extracted from +[libchat](https://github.com/logos-messaging/libchat) so it can be deployed on +its own. Standalone HTTP service that caches MLS KeyPackages keyed by **`device_id`**, so a client can fetch a contact's keypackage without an out-of-band exchange. @@ -46,13 +47,13 @@ exactly one way — no delimiter, even though `key_package` is arbitrary bytes. ```bash cargo build --release -./target/release/keypackage-registry # binds 0.0.0.0:8080, db ./keypackage-registry.db +./target/release/chat-store # binds 0.0.0.0:8080, db ./chat-store.db ``` | Flag | Default | Description | |------|---------|-------------| | `--bind ` | `0.0.0.0:8080` | HTTP bind address | -| `--db ` | `keypackage-registry.db` | SQLite database path | +| `--db ` | `chat-store.db` | SQLite database path | | `--max-per-identity ` | `100` | Bundles retained per `device_id` | | `--retention-days ` | `30` | Drop bundles older than this | | `--prune-interval-secs ` | `3600` | How often the prune task runs | @@ -69,7 +70,7 @@ docker build -t chat-store . docker run --rm -p 8080:8080 -v chat-store-data:/data chat-store ``` -The image runs the binary with `--bind 0.0.0.0:8080 --db /data/keypackage-registry.db` +The image runs the binary with `--bind 0.0.0.0:8080 --db /data/chat-store.db` by default; override the `CMD` to change flags, e.g.: ```bash diff --git a/src/main.rs b/src/main.rs index 095ab5b..60b2805 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,14 +24,14 @@ use tracing_subscriber::EnvFilter; use store::Store; #[derive(Parser, Debug)] -#[command(name = "keypackage-registry", about = "Testnet KeyPackage Registry")] +#[command(name = "chat-store", about = "Testnet Chat Store (KeyPackage + account directory)")] struct Cli { /// Address to bind the HTTP server. #[arg(long, default_value = "0.0.0.0:8080")] bind: SocketAddr, /// SQLite database path. - #[arg(long, default_value = "keypackage-registry.db")] + #[arg(long, default_value = "chat-store.db")] db: PathBuf, /// Maximum number of bundles retained per account_id. @@ -80,7 +80,7 @@ async fn main() -> Result<()> { let listener = tokio::net::TcpListener::bind(cli.bind) .await .with_context(|| format!("failed to bind {}", cli.bind))?; - tracing::info!("keypackage-registry listening on {}", cli.bind); + tracing::info!("chat-store listening on {}", cli.bind); axum::serve(listener, app) .with_graceful_shutdown(shutdown_signal()) .await