mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-14 12:35:21 +00:00
support bot, bots: paginate chat scan (#6935)
* bots: document APIGetChats command and CRApiChats response * bots: regenerate API docs and TypeScript types * simplex-chat-nodejs: add apiGetChats * support bot: avoid OOM on large databases apiListGroups / apiListContacts return every record in one response and overflow V8's string allocation on large DBs. Replace list-then-find-by-id patterns with apiGetChat(type, id, 0) lookups, and the one genuine scan (refreshAllCards) with paginated apiGetChats, count=1000. * support bot: update test assertions to match current message text * bots: simplify PaginationByTime, expose only PTLast * simplex-chat-nodejs: bump types and nodejs versions
This commit is contained in:
@@ -764,6 +764,25 @@ export class ChatApi {
|
||||
throw new ChatCommandError("error listing groups", r)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get chat previews (paginated).
|
||||
* Network usage: no.
|
||||
*
|
||||
* Prefer this over apiListContacts / apiListGroups for any scan: those
|
||||
* methods load every record into memory in a single response and will fail
|
||||
* on large databases.
|
||||
*/
|
||||
async apiGetChats(
|
||||
userId: number,
|
||||
pagination: T.PaginationByTime,
|
||||
query: T.ChatListQuery = {type: "filters", favorite: false, unread: false},
|
||||
pendingConnections = false,
|
||||
): Promise<T.AChat[]> {
|
||||
const r = await this.sendChatCmd(CC.APIGetChats.cmdString({userId, pendingConnections, pagination, query}))
|
||||
if (r.type === "apiChats") return r.chats
|
||||
throw new ChatCommandError("error getting chats", r)
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete chat.
|
||||
* Network usage: background.
|
||||
|
||||
Reference in New Issue
Block a user