mirror of
https://github.com/logos-messaging/libchat.git
synced 2026-06-29 20:50:02 +00:00
feat: chat cli use logos chat client config
This commit is contained in:
parent
7a51ed6a21
commit
e2c635bd1a
46
.github/scripts/mock-registry.py
vendored
Normal file
46
.github/scripts/mock-registry.py
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Mock keypackage/account registry for the chat-cli CI smoketest.
|
||||
|
||||
On startup the client registers its keypackage and account bundle. Publishing the
|
||||
bundle first fetches any existing record, so the stub answers:
|
||||
|
||||
* POST /v0/keypackage, POST /v0/account -> 200 (accept the write)
|
||||
* GET (any) -> 404 (nothing published yet)
|
||||
|
||||
A 404 is what a fresh account looks like, which the client reads as "no existing
|
||||
record". This validates nothing — it only unblocks the smoketest; protocol-level
|
||||
behavior is covered by the workspace tests.
|
||||
"""
|
||||
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
# Match the client's HTTP/1.1 requests so reqwest frames the response body.
|
||||
protocol_version = "HTTP/1.1"
|
||||
|
||||
def _drain(self):
|
||||
# Consume the request body so the client's request completes cleanly.
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
if length:
|
||||
self.rfile.read(length)
|
||||
|
||||
def _reply(self, status):
|
||||
self.send_response(status)
|
||||
self.send_header("Content-Length", "0")
|
||||
self.end_headers()
|
||||
|
||||
def do_POST(self):
|
||||
self._drain()
|
||||
self._reply(200)
|
||||
|
||||
def do_GET(self):
|
||||
self._drain()
|
||||
self._reply(404)
|
||||
|
||||
def log_message(self, *args):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
HTTPServer(("127.0.0.1", 18080), Handler).serve_forever()
|
||||
13
.github/workflows/ci.yml
vendored
13
.github/workflows/ci.yml
vendored
@ -74,4 +74,15 @@ jobs:
|
||||
- name: Build chat-cli (logos-delivery)
|
||||
run: nix develop -c bash -c 'LOGOS_DELIVERY_LIB_DIR=./result/lib cargo build --release -p chat-cli'
|
||||
- name: Run chat-cli smoketest
|
||||
run: nix develop -c ./target/release/chat-cli --name ci-test --smoketest
|
||||
# The client registers against the keypackage/account registry on
|
||||
# startup, so stand up a mock that accepts those calls. It runs on the
|
||||
# system Python (no Nix needed); only chat-cli needs the dev shell.
|
||||
run: |
|
||||
python3 .github/scripts/mock-registry.py &
|
||||
mock_pid=$!
|
||||
trap 'kill "$mock_pid" 2>/dev/null || true' EXIT
|
||||
for _ in $(seq 1 50); do
|
||||
curl -s -o /dev/null http://127.0.0.1:18080/ && break
|
||||
sleep 0.2
|
||||
done
|
||||
nix develop -c ./target/release/chat-cli --name ci-test --smoketest --registry-url http://127.0.0.1:18080
|
||||
|
||||
@ -9,8 +9,7 @@ use anyhow::{Context, Result};
|
||||
use clap::{Parser, ValueEnum};
|
||||
use crossbeam_channel::Receiver;
|
||||
use logos_chat::{
|
||||
ChatClient, ChatClientBuilder, ChatStore, Event, HttpRegistry, IdentityProvider,
|
||||
RegistrationService, StorageConfig, Transport,
|
||||
ChatClient, ChatStore, Event, IdentityProvider, LogosChatClient, RegistrationService, Transport,
|
||||
};
|
||||
|
||||
use components::{EmbeddedP2pDeliveryService, P2pConfig};
|
||||
@ -79,9 +78,9 @@ struct Cli {
|
||||
#[arg(long)]
|
||||
smoketest: bool,
|
||||
|
||||
/// Optional KeyPackage registry base URL. When set, uses the HTTP-backed
|
||||
/// registry instead of the in-memory `EphemeralRegistry`.
|
||||
/// Example: `--registry-url http://localhost:8080`.
|
||||
/// Override the Logos registry endpoint (account + keypackage store). When
|
||||
/// omitted, the preconfigured endpoint is used.
|
||||
/// Example: `--registry-url http://127.0.0.1:18080`.
|
||||
#[arg(long)]
|
||||
registry_url: Option<String>,
|
||||
}
|
||||
@ -127,33 +126,12 @@ fn run<T: Transport>(transport: T, cli: &Cli) -> Result<()> {
|
||||
.to_str()
|
||||
.context("db path contains non-UTF-8 characters")?
|
||||
.to_string();
|
||||
let storage = StorageConfig::Encrypted {
|
||||
path: db_str,
|
||||
key: "chat-cli".to_string(),
|
||||
};
|
||||
|
||||
match cli.registry_url.as_deref() {
|
||||
Some(url) => {
|
||||
let registry = HttpRegistry::new(url);
|
||||
let (client, events) = ChatClientBuilder::new()
|
||||
.transport(transport)
|
||||
.storage_config(storage)
|
||||
.registration(registry)
|
||||
.build()
|
||||
.map_err(|e| anyhow::anyhow!("{e:?}"))
|
||||
.context("failed to open chat client with HTTP registry")?;
|
||||
launch_tui(client, events, cli)
|
||||
}
|
||||
None => {
|
||||
let (client, events) = ChatClientBuilder::new()
|
||||
.transport(transport)
|
||||
.storage_config(storage)
|
||||
.build()
|
||||
.map_err(|e| anyhow::anyhow!("{e:?}"))
|
||||
.context("failed to open chat client")?;
|
||||
launch_tui(client, events, cli)
|
||||
}
|
||||
}
|
||||
let (client, events) =
|
||||
LogosChatClient::open(transport, db_str, "chat-cli", cli.registry_url.as_deref())
|
||||
.map_err(|e| anyhow::anyhow!("{e:?}"))
|
||||
.context("failed to open chat client")?;
|
||||
launch_tui(client, events, cli)
|
||||
}
|
||||
|
||||
fn launch_tui<I, T, R, S>(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user