@imessaging/core 0.8.3 → 0.8.5
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 +8 -0
- package/src/types.ts +58 -0
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -15,10 +15,13 @@ export { MemoryPeerStore } from "./memory-peer-store";
|
|
|
15
15
|
export { createPeerKey } from "./peer-key";
|
|
16
16
|
export {
|
|
17
17
|
canEdit,
|
|
18
|
+
canFindByPhone,
|
|
18
19
|
canMarkRead,
|
|
19
20
|
canReact,
|
|
20
21
|
canReceive,
|
|
22
|
+
canObserveOutgoing,
|
|
21
23
|
canReceiveEdits,
|
|
24
|
+
canSaveDraft,
|
|
22
25
|
canShowTyping,
|
|
23
26
|
hasCommandMenu,
|
|
24
27
|
isTelegramRecipient,
|
|
@@ -37,7 +40,12 @@ export type {
|
|
|
37
40
|
export type {
|
|
38
41
|
EditableMessage,
|
|
39
42
|
EditableMessageTransport,
|
|
43
|
+
DraftTransport,
|
|
40
44
|
EditedMessageTransport,
|
|
45
|
+
MessageDraft,
|
|
46
|
+
OutgoingObserverTransport,
|
|
47
|
+
PhoneLookupTransport,
|
|
48
|
+
PhoneMatch,
|
|
41
49
|
EditResult,
|
|
42
50
|
EmailRecipient,
|
|
43
51
|
HeadhunterRecipient,
|
package/src/types.ts
CHANGED
|
@@ -300,6 +300,11 @@ export type IncomingMessage = {
|
|
|
300
300
|
editedAt?: Date;
|
|
301
301
|
/** В сообщении упомянут аккаунт или это ответ на его сообщение (так Telegram определяет упоминание); нет — канал не сообщает. */
|
|
302
302
|
mentionsMe?: boolean;
|
|
303
|
+
/**
|
|
304
|
+
* Только в onOutgoing/onOutgoingEdit: сообщение отправил или поправил сам транспорт (send/edit), а не человек
|
|
305
|
+
* с другого устройства. Помечается, а не отбрасывается: иначе своя отправка выглядела бы правкой оператора.
|
|
306
|
+
*/
|
|
307
|
+
sentByTransport?: boolean;
|
|
303
308
|
/**
|
|
304
309
|
* Форматирование текста в той же модели, что исходящая разметка, смещения в UTF-16;
|
|
305
310
|
* undefined = канал не сообщает форматирование, [] = сообщил, форматирования нет.
|
|
@@ -367,6 +372,59 @@ export function canReceiveEdits(transport: MessageTransport): transport is Edite
|
|
|
367
372
|
return typeof (transport as EditedMessageTransport).onEdit === "function";
|
|
368
373
|
}
|
|
369
374
|
|
|
375
|
+
/** Черновик в поле ввода чата: ответ готовит машина, отправляет человек. */
|
|
376
|
+
export type MessageDraft = {
|
|
377
|
+
recipient: MessageRecipient;
|
|
378
|
+
/** Текст черновика; пустой — очистить черновик. */
|
|
379
|
+
text: string;
|
|
380
|
+
/** Как написан `text`; не задан — простой текст, без разбора разметки. */
|
|
381
|
+
format?: TextFormat;
|
|
382
|
+
/** Черновик ответом на это сообщение. */
|
|
383
|
+
replyToMessageId?: string;
|
|
384
|
+
};
|
|
385
|
+
|
|
386
|
+
export interface DraftTransport extends MessageTransport {
|
|
387
|
+
saveDraft(draft: MessageDraft): Promise<void>;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
export function canSaveDraft(transport: MessageTransport): transport is DraftTransport {
|
|
391
|
+
return typeof (transport as DraftTransport).saveDraft === "function";
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Свои исходящие учётки — то, что человек отправил или поправил с другого устройства. Отдельной подпиской:
|
|
396
|
+
* onMessage и onEdit своё не отдают и отдавать не должны — иначе шлюз отвечал бы сам себе.
|
|
397
|
+
*/
|
|
398
|
+
export interface OutgoingObserverTransport extends MessageTransport {
|
|
399
|
+
onOutgoing(handler: (message: IncomingMessage) => void | Promise<void>): () => void;
|
|
400
|
+
onOutgoingEdit(handler: (message: IncomingMessage) => void | Promise<void>): () => void;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export function canObserveOutgoing(
|
|
404
|
+
transport: MessageTransport,
|
|
405
|
+
): transport is OutgoingObserverTransport {
|
|
406
|
+
const candidate = transport as OutgoingObserverTransport;
|
|
407
|
+
return (
|
|
408
|
+
typeof candidate.onOutgoing === "function" && typeof candidate.onOutgoingEdit === "function"
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/** Учётка, найденная по номеру телефона. */
|
|
413
|
+
export type PhoneMatch = { userId: string; username?: string; firstName?: string };
|
|
414
|
+
|
|
415
|
+
/**
|
|
416
|
+
* Поиск учётки по номеру телефона — когда о человеке известен только номер. Найденный пир транспорт
|
|
417
|
+
* запоминает: следующий send по `{ type: "user", id: userId }` уходит без повторного поиска.
|
|
418
|
+
*/
|
|
419
|
+
export interface PhoneLookupTransport extends MessageTransport {
|
|
420
|
+
/** Номер — E.164 (`+79991234567`). Не найден — `null`; прочие отказы канала — исключением с его текстом. */
|
|
421
|
+
findByPhone(phone: string): Promise<PhoneMatch | null>;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
export function canFindByPhone(transport: MessageTransport): transport is PhoneLookupTransport {
|
|
425
|
+
return typeof (transport as PhoneLookupTransport).findByPhone === "function";
|
|
426
|
+
}
|
|
427
|
+
|
|
370
428
|
/** Пункт меню команд канала: `/menu` и подпись рядом с ним. */
|
|
371
429
|
export type ChannelCommand = {
|
|
372
430
|
/** Без ведущей косой черты. */
|