diff --git a/golos-lib-js/docs/files/msgs.md b/golos-lib-js/docs/files/msgs.md index 3cb4acb..0ad9ace 100644 --- a/golos-lib-js/docs/files/msgs.md +++ b/golos-lib-js/docs/files/msgs.md @@ -147,23 +147,46 @@ golos.messages.newImageMsg('https://site.com/https-is-recommended.jpg', (err, ms :electron: `golos.messages.decodeMsgs` использует WebAssembly. -```js -await golos.importNativeLib(); +Пример для приватного чата: -golos.api.getThread('alice', 'bob', {}, (err, results) => { - results = golos.messages.decode('alice private key', 'bob public memo key', results); +```js +golos.api.getThread({ from: 'alice', to: 'bob', }, (err, results) => { + results = await golos.messages.decodeMsgs({ private_memo: 'alice private key', msgs: results }) alert(results[0].message.body); }); ``` -**Примечание:** это также проверяет сообщения на соответствие следующим правилам: +В случае с группой, getThread позволяет **сразу** расшифровать сообщения. +От Алисы для этого нужен не memo-, а posting-ключ. + +```js +const results = await golos.auth.withNodeLogin({ account: 'alice', keys: { + posting: 'alice POSTING key', +}, call: async (loginData) => { + const th = await golos.api.getThreadAsync({ + ...loginData, + group: 'test-group', + }) + return th +}}) +alert(results) +``` + +Однако, перед рендерингом сообщений в uI вам все равно нужно вызвать `decodeMsgs`, чтобы: +- проверить сообщения на соответствие правилам (об этом ниже) и по результатам проверки либо исключить, либо пометить ошибочные сообщения; +- можно было вызывать `getThread` только при открытии пользователем группы, как более тяжелый, а при получении новых сообщений через Golos Notify Service вызывать лишь `decodeMsgs`. + +При этом, `decodeMsgs` расшифрует лишь те сообщения в массиве, которые не были расшифрованы до этого (встроенной расшифровкой в `getThread`, или прошлым вызовом `decodeMsgs`). +Для еще большей оптимизации вы можете кешировать сообщения, используя `before_decode` и `for_each`, как это делаем мы в коде Golos Messenger. + +**Примечание:** `decodeMsgs` также проверяет сообщения на соответствие следующим правилам: - сообщение должно быть правильным объектом JSON с полями, соответствующими следующим правилам; - поле `app` должно быть строкой длиной от 1 до 16; - поле `версия` должно быть целым числом, начиная с 1; - body должно быть строкой; - для сообщений-изображений: previewWidth и previewHeight должны быть целыми числами, которые являются результатом подгонки изображения к области 600x300 пикселей. -**Примечание:** если сообщение не может быть расшифровано, распарсено как JSON и/или проверено, оно все равно добавляется к результату, но имеет `message: null` (если не может быть распарсено как JSON или проверено) и `raw_message: null` (если вообще не может быть расшифровано). Такое поведение позволяет клиенту пометить это сообщение как прочитанное в блокчейне, но не отображать его пользователю. Если вы хотите изменить это поведение, вы можете переопределить параметр `on_error` в `golos.messages.decode` (подробнее см. в коде). +**Примечание:** если сообщение не может быть расшифровано, распарсено как JSON и/или проверено, оно все равно добавляется к результату, но имеет `message: null` (если не может быть распарсено как JSON или проверено) и `raw_message: null` (если вообще не может быть расшифровано). Такое поведение позволяет клиенту пометить это сообщение как прочитанное в блокчейне, но не отображать его пользователю. Если вы хотите изменить это поведение, вы можете переопределить параметр `on_error` в `golos.messages.decodeMsgs` (подробнее см. в коде). ### Мгновенное получение сообщений @@ -181,7 +204,7 @@ golos.api.getThread('alice', 'bob', {}, (err, results) => { Для создания диапазонов вы можете использовать `golos.messages.makeDatedGroups`, который строит такие диапазоны по условию и может превращать их в реальные операции "на лету". -Он принимает декодированные сообщения от `golos.messages.decode`. +Он принимает декодированные сообщения от `golos.messages.decodeMsgs`. **Примечание: функция должна перебирать сообщения от start к end.** @@ -257,7 +280,7 @@ msg = {...msg, ...quote}; // добавляем цитату #### Отображение сообщений с цитатами -`golos.messages.decode` поддерживает сообщения с цитатами. Каждое такое сообщение имеет поле `quote` в своем поле `сообщение`. Но, если `quote` сообщения неверна (сообщение составлено с некорректным пользовательским интерфейсом, который не использует `makeQuoteMsg` и неправильно составляет цитаты), **весь объект сообщения будет считаться некорректным**, то есть поле `message` будет `null`. +`golos.messages.decodeMsgs` поддерживает сообщения с цитатами. Каждое такое сообщение имеет поле `quote` в своем поле `сообщение`. Но, если `quote` сообщения неверна (сообщение составлено с некорректным пользовательским интерфейсом, который не использует `makeQuoteMsg` и неправильно составляет цитаты), **весь объект сообщения будет считаться некорректным**, то есть поле `message` будет `null`. #### Редактирование сообщений с цитатами