Reading messages
List your conversations and read decrypted message history. Reading needs a loaded identity (decryption uses your private key).
await client.xchat.loadIdentity(identity);
for (const convo of await client.xchat.conversations()) {
console.log(convo.conversationId, convo.latestMessage?.text);
}
const { messages } = await client.xchat.read("tiagozip_");
for (const m of messages) {
if (m.kind === "message") console.log(m.senderId, m.text);
}client.xchat.conversations(opts?)
List all your conversations (the inbox), newest first. Each conversation's latest message is decrypted for you.
Returns an array of:
| Field | Description |
|---|---|
conversationId | The conversation id (for 1:1, minId:maxId) |
type | "direct" or "group" |
participants | Member user ids |
groupName | Group name (groups only) |
isMuted | Whether you've muted it |
latestSequenceId | Sequence id of the most recent event |
latestMessage | The decoded latest message (see read below), if any |
const convos = await client.xchat.conversations();client.xchat.read(recipient, opts?)
Read and decrypt a conversation's messages. Returns { conversationId, hasMore, messages }. Pass opts.before (a sequence id) to page into older history.
Each entry in messages is decoded and decrypted:
| Field | Description |
|---|---|
sequenceId | The event's sequence id |
senderId | Who sent it |
createdAt | Timestamp (ms, string) |
kind | "message", "reaction_add", "reaction_remove", "edit", "delete", "conversation_key_change", … |
text | The decrypted message text (for message / edit) |
emoji | The reaction (for reaction_add / reaction_remove) |
targetSequenceId | The message a reaction/edit applies to |
const { messages, hasMore } = await client.xchat.read("tiagozip_");
for (const m of messages) {
if (m.kind === "message") console.log(`${m.senderId}: ${m.text}`);
if (m.kind === "reaction_add") console.log(`${m.senderId} reacted ${m.emoji}`);
}TIP
read decrypts received messages (and reactions, edits, deletes). Like the official client, the server's message pull does not re-deliver your own sent messages, so a fresh client sees the other party's messages plus key-change and delete events; your outgoing messages are the ones you got back from message().