@imessaging/core 0.3.0 → 0.4.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.3.0",
3
+ "version": "0.4.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,7 @@
1
1
  export { MemoryPeerStore } from "./memory-peer-store";
2
2
  export { createPeerKey } from "./peer-key";
3
3
  export { canEdit, isTelegramRecipient } from "./types";
4
+ export type { ButtonPress, ButtonPressTransport } from "./types";
4
5
  export type {
5
6
  EditableMessage,
6
7
  EditableMessageTransport,
package/src/types.ts CHANGED
@@ -142,3 +142,33 @@ export interface TelegramPeerStore {
142
142
  ): Promise<void>;
143
143
  delete(accountId: string, recipient: MessageRecipient): Promise<void>;
144
144
  }
145
+
146
+ /**
147
+ * Нажатие на кнопку под сообщением.
148
+ *
149
+ * `data` — то, что положили в `OutboundButton.callbackData`. Транспорт не пытается его понимать:
150
+ * смысл строки принадлежит продукту, а не каналу связи.
151
+ */
152
+ export type ButtonPress = {
153
+ /** Кто нажал. `null` — отправитель неизвестен каналу. */
154
+ senderId: number | null;
155
+ data: string;
156
+ /**
157
+ * Подтвердить нажатие, показав человеку текст.
158
+ *
159
+ * Вызывать ОБЯЗАТЕЛЬНО: Telegram крутит на кнопке часы, пока не получит ответ, и человек видит
160
+ * зависшую кнопку даже при успешно выполненном действии.
161
+ */
162
+ answer(text: string): Promise<void>;
163
+ };
164
+
165
+ /**
166
+ * Канал, умеющий не только слать, но и ПРИНИМАТЬ нажатия.
167
+ *
168
+ * Отдельно от `MessageTransport`, потому что умеют не все: почта кнопок не имеет вовсе, а
169
+ * реализация, которая только шлёт, не должна объяснять, почему у неё пустой приём.
170
+ */
171
+ export interface ButtonPressTransport {
172
+ /** Подписаться на нажатия. Возврат — функция отписки. */
173
+ onButtonPress(handler: (press: ButtonPress) => void | Promise<void>): () => void;
174
+ }