mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-05-14 03:55:20 +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.
|
||||
|
||||
@@ -4,7 +4,7 @@ const path = require('path');
|
||||
const extract = require('extract-zip');
|
||||
|
||||
const GITHUB_REPO = 'simplex-chat/simplex-chat-libs';
|
||||
const RELEASE_TAG = 'v6.5.0';
|
||||
const RELEASE_TAG = 'v6.5.1';
|
||||
const BACKEND = (process.env.SIMPLEX_BACKEND || process.env.npm_config_simplex_backend || 'sqlite').toLowerCase();
|
||||
|
||||
if (BACKEND !== 'sqlite' && BACKEND !== 'postgres') {
|
||||
|
||||
Reference in New Issue
Block a user