@imessaging/core 0.7.1 → 0.7.3

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.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "Core messaging transport contracts and Telegram peer storage",
5
5
  "keywords": [
6
6
  "messaging",
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export type {
13
13
  ChannelCommand,
14
14
  CommandMenuTransport,
15
15
  IncomingAttachment,
16
+ IncomingLink,
16
17
  IncomingMessage,
17
18
  IncomingMessageTransport,
18
19
  ReadReceiptTransport,
package/src/types.ts CHANGED
@@ -217,6 +217,25 @@ export type IncomingAttachment = {
217
217
  sizeBytes?: number;
218
218
  };
219
219
 
220
+ /**
221
+ * Адрес, вложенный в сообщение.
222
+ *
223
+ * Отдельным полем, а не поиском по тексту: половина адресов в тексте НЕ ЛЕЖИТ. Слово со скрытой
224
+ * гиперссылкой («откликнуться»), надпись на кнопке и предпросмотр страницы приходят сущностями
225
+ * разметки, и потребитель, разбирающий `text` регулярным выражением, их не увидит вовсе — а
226
+ * промах здесь выглядит не ошибкой, а вакансией без ссылки.
227
+ *
228
+ * Выбор адреса за потребителем: одному нужна площадка, другому форма выгрузки резюме, и решать за
229
+ * них здесь значит отдавать одному чужое.
230
+ */
231
+ export type IncomingLink = {
232
+ url: string;
233
+ /** Что видит человек на месте адреса: слово гиперссылки или надпись на кнопке. */
234
+ label?: string;
235
+ /** Где адрес лежал. Разные места — разный смысл, и «кнопка» отличается от «упомянут в тексте». */
236
+ origin: "text" | "markup" | "button" | "preview";
237
+ };
238
+
220
239
  /**
221
240
  * Входящее сообщение — общий вид для всех каналов.
222
241
  *
@@ -231,9 +250,24 @@ export type IncomingMessage = {
231
250
  /** Кто написал. `null` — канал отправителя не называет (рассылка, служебное событие). */
232
251
  senderId: string | null;
233
252
  senderUsername?: string;
253
+ /** Как отправитель назван в канале: «Имя Фамилия» человека или название чата. */
254
+ senderName?: string;
234
255
  messageId: string;
256
+ /** Общий у частей одного альбома: Telegram присылает его отдельными сообщениями. */
257
+ albumId?: string;
235
258
  text: string;
259
+ /** Когда отправлено. Нет — канал время не сообщает. */
260
+ sentAt?: Date;
261
+ /** Когда правили последний раз. Нет — не правили. */
262
+ editedAt?: Date;
236
263
  attachments: IncomingAttachment[];
264
+ /**
265
+ * Адреса из сообщения, в порядке появления.
266
+ *
267
+ * `undefined` — канал разметку не разбирает вовсе; пустой список — разобрал и не нашёл. Это
268
+ * РАЗНЫЕ вещи: первое молчит о своём незнании, второе утверждает, что адресов нет.
269
+ */
270
+ links?: IncomingLink[];
237
271
  replyToMessageId?: string;
238
272
  threadId?: number;
239
273
  /**