#pragma once // DragonX Wallet - HushChat decrypted message model. Held in memory by ChatStore and persisted at // rest (encrypted under a seed-derived key) by ChatDatabase. #include #include namespace dragonx::chat { enum class ChatDirection { Incoming, Outgoing }; enum class ChatMessageKind { Message, ContactRequest }; // Outgoing delivery: Sent = the broadcast was submitted; Failed = it wasn't (not connected, no // spendable address, a send already in progress). Always Sent for incoming. enum class ChatDelivery { Sent, Failed }; struct ChatMessage { ChatDirection direction = ChatDirection::Incoming; ChatMessageKind kind = ChatMessageKind::Message; std::string txid; std::string conversation_id; // cid — the conversation thread key std::string peer_zaddr; // header "z": peer's reply z-address std::string peer_public_key_hex; // header "p": peer's crypto_kx public key std::string body; // decrypted plaintext (Message) or request text (ContactRequest) std::int64_t timestamp = 0; // tx time in seconds; set by the ingesting caller std::size_t payload_position = 0; // together with txid, the dedup key ChatDelivery delivery = ChatDelivery::Sent; // outgoing only }; } // namespace dragonx::chat