@imessaging/core 0.1.0 → 0.2.0

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.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Core messaging transport contracts and Telegram peer storage",
5
5
  "keywords": [
6
6
  "messaging",
package/src/index.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export { MemoryPeerStore } from "./memory-peer-store";
2
2
  export { createPeerKey } from "./peer-key";
3
+ export { canEdit } from "./types";
3
4
  export type {
5
+ EditableMessage,
6
+ EditableMessageTransport,
7
+ EditResult,
4
8
  MessageRecipient,
5
9
  MessageTransport,
6
10
  OutboundButton,
package/src/types.ts CHANGED
@@ -41,6 +41,29 @@ export type SendResult = {
41
41
  recipientId: string;
42
42
  };
43
43
 
44
+ /**
45
+ * Правка уже отправленного сообщения.
46
+ *
47
+ * Адресуется парой «получатель + идентификатор сообщения»: сам по себе идентификатор в Telegram
48
+ * не уникален, он нумеруется В ПРЕДЕЛАХ чата, и без получателя правка ушла бы не туда.
49
+ *
50
+ * Вложения не правятся: у отправленного сообщения меняется текст и разметка, а документы уже
51
+ * доставлены отдельными сообщениями. Обещать здесь `documents` значило бы обещать невыполнимое.
52
+ */
53
+ export type EditableMessage = {
54
+ recipient: MessageRecipient;
55
+ messageId: string;
56
+ text: string;
57
+ buttons?: OutboundButton[][];
58
+ parseMode?: "HTML" | "Markdown" | "MarkdownV2";
59
+ };
60
+
61
+ export type EditResult = {
62
+ transportId: string;
63
+ messageId: string;
64
+ recipientId: string;
65
+ };
66
+
44
67
  export type TransportStatus = {
45
68
  connected: boolean;
46
69
  transportId: string;
@@ -57,6 +80,21 @@ export interface MessageTransport {
57
80
  getStatus(): Promise<TransportStatus>;
58
81
  }
59
82
 
83
+ /**
84
+ * Транспорт, умеющий править отправленное.
85
+ *
86
+ * Отдельный интерфейс, а не метод в `MessageTransport`: править умеет не всякий канал, и обещать
87
+ * это всем транспортам значит заставить каждый новый бросать «не поддерживается». Потребитель
88
+ * спрашивает возможность типом (`canEdit`), а не ловит исключение.
89
+ */
90
+ export interface EditableMessageTransport extends MessageTransport {
91
+ edit(message: EditableMessage): Promise<EditResult>;
92
+ }
93
+
94
+ export function canEdit(transport: MessageTransport): transport is EditableMessageTransport {
95
+ return typeof (transport as EditableMessageTransport).edit === "function";
96
+ }
97
+
60
98
  export type ResolvedPeer = {
61
99
  type: "user" | "group" | "channel";
62
100
  id: string;