Tier 1 — New features: - E2E encrypted friend list: server stores opaque blob (POST/GET /v1/friends), protocol-level encrypt/decrypt with HKDF-derived key, 4 tests - Telegram Bot API compatibility: /bot/register, /bot/:token/getUpdates, sendMessage, getMe — TG-style Update objects with proper message mapping - ETH address resolution: GET /v1/resolve/:address (0x.../alias/@.../fp), bidirectional ETH↔fp mapping stored on key registration - Seed recovery: /seed command in TUI + web client - URL deep links: /message/@alias, /message/0xABC, /group/#ops - Group members with online status in GET /groups/:name/members Tier 2 — UX polish: - TUI: /friend, /friend <addr>, /unfriend <addr> with presence checking - Web: friend commands, showGroupMembers() on group join - Web: ETH address in header, clickable addresses (click→peer or copy) - Bot: full WireMessage→TG Update mapping (encrypted base64, CallSignal, FileHeader, bot_message JSON) Documentation: - USAGE.md rewritten: complete user guide with all commands - SERVER.md rewritten: full admin guide with all 50+ endpoints - CLIENT.md rewritten: architecture, commands, keyboard, storage - LLM_HELP.md created: 1083-word token-optimized reference for helper LLM Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
42 lines
1.1 KiB
Rust
42 lines
1.1 KiB
Rust
use anyhow::Result;
|
|
|
|
pub struct Database {
|
|
pub keys: sled::Tree,
|
|
pub messages: sled::Tree,
|
|
pub groups: sled::Tree,
|
|
pub aliases: sled::Tree,
|
|
pub tokens: sled::Tree,
|
|
pub calls: sled::Tree,
|
|
pub missed_calls: sled::Tree,
|
|
pub friends: sled::Tree,
|
|
pub eth_addresses: sled::Tree,
|
|
_db: sled::Db,
|
|
}
|
|
|
|
impl Database {
|
|
pub fn open(data_dir: &str) -> Result<Self> {
|
|
let db = sled::open(data_dir)?;
|
|
let keys = db.open_tree("keys")?;
|
|
let messages = db.open_tree("messages")?;
|
|
let groups = db.open_tree("groups")?;
|
|
let aliases = db.open_tree("aliases")?;
|
|
let tokens = db.open_tree("tokens")?;
|
|
let calls = db.open_tree("calls")?;
|
|
let missed_calls = db.open_tree("missed_calls")?;
|
|
let friends = db.open_tree("friends")?;
|
|
let eth_addresses = db.open_tree("eth_addresses")?;
|
|
Ok(Database {
|
|
keys,
|
|
messages,
|
|
groups,
|
|
aliases,
|
|
tokens,
|
|
calls,
|
|
missed_calls,
|
|
friends,
|
|
eth_addresses,
|
|
_db: db,
|
|
})
|
|
}
|
|
}
|