@imessaging/core 0.4.0 → 0.5.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 +1 -1
- package/src/index.ts +9 -1
- package/src/types.ts +87 -0
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
export { MemoryPeerStore } from "./memory-peer-store";
|
|
2
2
|
export { createPeerKey } from "./peer-key";
|
|
3
|
-
export { canEdit, isTelegramRecipient } from "./types";
|
|
3
|
+
export { canEdit, canReceive, canShowTyping, hasCommandMenu, isTelegramRecipient } from "./types";
|
|
4
4
|
export type { ButtonPress, ButtonPressTransport } from "./types";
|
|
5
|
+
export type {
|
|
6
|
+
ChannelCommand,
|
|
7
|
+
CommandMenuTransport,
|
|
8
|
+
IncomingAttachment,
|
|
9
|
+
IncomingMessage,
|
|
10
|
+
IncomingMessageTransport,
|
|
11
|
+
TypingTransport,
|
|
12
|
+
} from "./types";
|
|
5
13
|
export type {
|
|
6
14
|
EditableMessage,
|
|
7
15
|
EditableMessageTransport,
|
package/src/types.ts
CHANGED
|
@@ -172,3 +172,90 @@ export interface ButtonPressTransport {
|
|
|
172
172
|
/** Подписаться на нажатия. Возврат — функция отписки. */
|
|
173
173
|
onButtonPress(handler: (press: ButtonPress) => void | Promise<void>): () => void;
|
|
174
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Вложение входящего сообщения.
|
|
178
|
+
*
|
|
179
|
+
* Только описание: байты достаёт транспорт (`download`), потому что адрес файла у каждого канала
|
|
180
|
+
* свой и живёт он вместе с учёткой, а не с сообщением.
|
|
181
|
+
*/
|
|
182
|
+
export type IncomingAttachment = {
|
|
183
|
+
/** Идентификатор файла В КАНАЛЕ. Смысла вне своего транспорта не имеет. */
|
|
184
|
+
id: string;
|
|
185
|
+
filename: string;
|
|
186
|
+
mimeType?: string;
|
|
187
|
+
sizeBytes?: number;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Входящее сообщение — общий вид для всех каналов.
|
|
192
|
+
*
|
|
193
|
+
* `transportId` и `accountId` входят В САМО сообщение, а не подставляются потребителем: один
|
|
194
|
+
* продукт слушает несколько учёток сразу, и `chatId` уникален только внутри пары «канал + учётка».
|
|
195
|
+
*/
|
|
196
|
+
export type IncomingMessage = {
|
|
197
|
+
transportId: string;
|
|
198
|
+
accountId: string;
|
|
199
|
+
chatId: string;
|
|
200
|
+
chatType: "user" | "group" | "channel";
|
|
201
|
+
/** Кто написал. `null` — канал отправителя не называет (рассылка, служебное событие). */
|
|
202
|
+
senderId: string | null;
|
|
203
|
+
senderUsername?: string;
|
|
204
|
+
messageId: string;
|
|
205
|
+
text: string;
|
|
206
|
+
attachments: IncomingAttachment[];
|
|
207
|
+
replyToMessageId?: string;
|
|
208
|
+
threadId?: number;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Канал, умеющий ПРИНИМАТЬ сообщения.
|
|
213
|
+
*
|
|
214
|
+
* Отдельно от `MessageTransport` по той же причине, что и `ButtonPressTransport`: принимать умеет
|
|
215
|
+
* не всякий канал — почте это несвойственно вовсе, — и обещать приём всем транспортам значит
|
|
216
|
+
* заставить половину из них объяснять пустоту.
|
|
217
|
+
*/
|
|
218
|
+
export interface IncomingMessageTransport extends MessageTransport {
|
|
219
|
+
/** Подписаться на входящие. Возврат — функция отписки. */
|
|
220
|
+
onMessage(handler: (message: IncomingMessage) => void | Promise<void>): () => void;
|
|
221
|
+
/** Байты вложения. Отдельным вызовом: скачивать всё подряд дороже, чем разобрать текст. */
|
|
222
|
+
download(attachment: IncomingAttachment): Promise<Uint8Array>;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function canReceive(transport: MessageTransport): transport is IncomingMessageTransport {
|
|
226
|
+
return typeof (transport as IncomingMessageTransport).onMessage === "function";
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** Пункт меню команд канала: `/menu` и подпись рядом с ним. */
|
|
230
|
+
export type ChannelCommand = {
|
|
231
|
+
/** Без ведущей косой черты. */
|
|
232
|
+
command: string;
|
|
233
|
+
description: string;
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Канал с меню команд.
|
|
238
|
+
*
|
|
239
|
+
* Нужен ровно затем, чтобы продукт не звал Bot API мимо транспорта: меню — свойство канала, а не
|
|
240
|
+
* сообщения, и без него единственным способом убрать постоянную клавиатуру был бы прямой вызов.
|
|
241
|
+
*/
|
|
242
|
+
export interface CommandMenuTransport extends MessageTransport {
|
|
243
|
+
setCommands(commands: ChannelCommand[]): Promise<void>;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export function hasCommandMenu(transport: MessageTransport): transport is CommandMenuTransport {
|
|
247
|
+
return typeof (transport as CommandMenuTransport).setCommands === "function";
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Канал, умеющий показать «печатает…».
|
|
252
|
+
*
|
|
253
|
+
* Не украшение: ход агента занимает секунды, и без признака работы человек пишет второй раз.
|
|
254
|
+
*/
|
|
255
|
+
export interface TypingTransport extends MessageTransport {
|
|
256
|
+
typing(recipient: MessageRecipient): Promise<void>;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export function canShowTyping(transport: MessageTransport): transport is TypingTransport {
|
|
260
|
+
return typeof (transport as TypingTransport).typing === "function";
|
|
261
|
+
}
|