@imessaging/core 0.8.5 → 0.8.7

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.8.5",
3
+ "version": "0.8.7",
4
4
  "description": "Core messaging transport contracts and Telegram peer storage",
5
5
  "keywords": [
6
6
  "messaging",
package/src/index.ts CHANGED
@@ -16,6 +16,7 @@ export { createPeerKey } from "./peer-key";
16
16
  export {
17
17
  canEdit,
18
18
  canFindByPhone,
19
+ canSaveContact,
19
20
  canMarkRead,
20
21
  canReact,
21
22
  canReceive,
@@ -40,10 +41,13 @@ export type {
40
41
  export type {
41
42
  EditableMessage,
42
43
  EditableMessageTransport,
44
+ ContactCard,
45
+ ContactTransport,
43
46
  DraftTransport,
44
47
  EditedMessageTransport,
45
48
  MessageDraft,
46
49
  OutgoingObserverTransport,
50
+ PhoneLookupOptions,
47
51
  PhoneLookupTransport,
48
52
  PhoneMatch,
49
53
  EditResult,
package/src/types.ts CHANGED
@@ -412,19 +412,49 @@ export function canObserveOutgoing(
412
412
  /** Учётка, найденная по номеру телефона. */
413
413
  export type PhoneMatch = { userId: string; username?: string; firstName?: string };
414
414
 
415
+ export type PhoneLookupOptions = {
416
+ /**
417
+ * Контакт, заведённый ради поиска, остаётся в адресной книге (по умолчанию): с человеком будут работать, и
418
+ * оператор на телефоне видит его имя, а не номер. `false` — удалить сразу, для массового перебора номеров.
419
+ */
420
+ keepContact?: boolean;
421
+ /** Имя контакта; без него — сам номер. */
422
+ firstName?: string;
423
+ lastName?: string;
424
+ };
425
+
415
426
  /**
416
427
  * Поиск учётки по номеру телефона — когда о человеке известен только номер. Найденный пир транспорт
417
428
  * запоминает: следующий send по `{ type: "user", id: userId }` уходит без повторного поиска.
418
429
  */
419
430
  export interface PhoneLookupTransport extends MessageTransport {
420
431
  /** Номер — E.164 (`+79991234567`). Не найден — `null`; прочие отказы канала — исключением с его текстом. */
421
- findByPhone(phone: string): Promise<PhoneMatch | null>;
432
+ findByPhone(phone: string, options?: PhoneLookupOptions): Promise<PhoneMatch | null>;
422
433
  }
423
434
 
424
435
  export function canFindByPhone(transport: MessageTransport): transport is PhoneLookupTransport {
425
436
  return typeof (transport as PhoneLookupTransport).findByPhone === "function";
426
437
  }
427
438
 
439
+ /** Карточка контакта в адресной книге учётки: имя и заметка о человеке, текст заметки даёт продукт. */
440
+ export type ContactCard = {
441
+ userId: string;
442
+ /** E.164; нужен, только если номер ещё не известен учётке. */
443
+ phone?: string;
444
+ firstName: string;
445
+ lastName?: string;
446
+ note?: string;
447
+ };
448
+
449
+ /** Сохранить или обновить контакт — тем же вызовом: есть контакт — имя и заметка перезаписываются. */
450
+ export interface ContactTransport extends MessageTransport {
451
+ saveContact(contact: ContactCard): Promise<void>;
452
+ }
453
+
454
+ export function canSaveContact(transport: MessageTransport): transport is ContactTransport {
455
+ return typeof (transport as ContactTransport).saveContact === "function";
456
+ }
457
+
428
458
  /** Пункт меню команд канала: `/menu` и подпись рядом с ним. */
429
459
  export type ChannelCommand = {
430
460
  /** Без ведущей косой черты. */