@imessaging/core 0.8.9 → 0.8.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imessaging/core",
3
- "version": "0.8.9",
3
+ "version": "0.8.11",
4
4
  "description": "Core messaging transport contracts and Telegram peer storage",
5
5
  "keywords": [
6
6
  "messaging",
package/src/index.ts CHANGED
@@ -16,6 +16,7 @@ export { createPeerKey } from "./peer-key";
16
16
  export {
17
17
  canEdit,
18
18
  canFindByPhone,
19
+ canGetPeerInfo,
19
20
  canSaveContact,
20
21
  canMarkRead,
21
22
  canObserveOutgoingRead,
@@ -53,6 +54,8 @@ export type {
53
54
  PhoneLookupOptions,
54
55
  PhoneLookupTransport,
55
56
  PhoneMatch,
57
+ PeerInfo,
58
+ PeerInfoTransport,
56
59
  EditResult,
57
60
  EmailRecipient,
58
61
  HeadhunterRecipient,
package/src/types.ts CHANGED
@@ -84,6 +84,11 @@ export type OutboundMessage = {
84
84
  threadId?: number;
85
85
  documents?: OutboundDocument[];
86
86
  buttons?: OutboundButton[][];
87
+ /**
88
+ * Снять постоянную клавиатуру (ReplyKeyboardMarkup) у собеседника. Действует без `buttons`;
89
+ * канал без такой клавиатуры поле не замечает.
90
+ */
91
+ removeKeyboard?: boolean;
87
92
  /**
88
93
  * Как написан `text`: транспорт сам переводит разметку в формат своего канала — Telegram и MAX
89
94
  * получают выделения, почта HTML и простой текст, hh простой текст. Не задан — прежнее поведение
@@ -99,6 +104,8 @@ export type SendResult = {
99
104
  transportId: string;
100
105
  messageId: string;
101
106
  recipientId: string;
107
+ /** Получатель — взаимный контакт учётки. Нет — канал не прислал пользователя в ответе на отправку. */
108
+ mutualContact?: boolean;
102
109
  };
103
110
 
104
111
  /**
@@ -283,6 +290,8 @@ export type IncomingMessage = {
283
290
  senderUsername?: string;
284
291
  /** Как отправитель назван в канале: «Имя Фамилия» человека или название чата. */
285
292
  senderName?: string;
293
+ /** Отправитель — взаимный контакт учётки. Нет — канал не сообщает или отправитель не человек. */
294
+ senderMutualContact?: boolean;
286
295
  /**
287
296
  * Как назван САМ ЧАТ: название группы или канала, в личке — имя собеседника. По нему человек
288
297
  * выбирает чат из списка; номер `-100…` ему ничего не говорит. Нет — канал имени не прислал.
@@ -441,6 +450,26 @@ export function canFindByPhone(transport: MessageTransport): transport is PhoneL
441
450
  return typeof (transport as PhoneLookupTransport).findByPhone === "function";
442
451
  }
443
452
 
453
+ /** Что учётка знает о собеседнике: есть ли он в её контактах и взаимно ли. */
454
+ export type PeerInfo = {
455
+ id: string;
456
+ username?: string;
457
+ /** Собеседник в адресной книге учётки. */
458
+ contact: boolean;
459
+ /** И учётка в его книге: на взаимных не действует спам-лимит PEER_FLOOD. */
460
+ mutualContact: boolean;
461
+ };
462
+
463
+ /** Сведения о собеседнике до отправки. Без поиска по телефону: только кэш пиров и @username. */
464
+ export interface PeerInfoTransport extends MessageTransport {
465
+ /** `null` — пир не известен и разрешить его не по чему, либо это не пользователь. */
466
+ peerInfo(recipient: MessageRecipient): Promise<PeerInfo | null>;
467
+ }
468
+
469
+ export function canGetPeerInfo(transport: MessageTransport): transport is PeerInfoTransport {
470
+ return typeof (transport as PeerInfoTransport).peerInfo === "function";
471
+ }
472
+
444
473
  /** Карточка контакта в адресной книге учётки: имя и заметка о человеке, текст заметки даёт продукт. */
445
474
  export type ContactCard = {
446
475
  userId: string;