@vibexnpm/talkx 3.0.8 → 3.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/dist/index.d.ts +62 -0
- package/dist/talkflow-sdk.esm.js +1 -1
- package/dist/talkflow-sdk.esm.js.map +1 -1
- package/dist/talkflow-sdk.standalone.js +1 -1
- package/dist/talkflow-sdk.standalone.js.map +1 -1
- package/dist/talkflow-sdk.umd.js +1 -1
- package/dist/talkflow-sdk.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/chat/ChatClient.js +21 -5
- package/src/chat/RoomUnreadReconciler.js +125 -0
- package/src/constants.js +8 -1
- package/src/index.js +2 -0
- package/src/talkflow/eventForwarding.js +1 -0
- package/types/index.d.ts +62 -0
package/dist/index.d.ts
CHANGED
|
@@ -484,6 +484,7 @@ export const RoomListEventType: {
|
|
|
484
484
|
readonly ROOM_KICKED: 'ROOM_KICKED';
|
|
485
485
|
readonly ROOM_BANNED: 'ROOM_BANNED';
|
|
486
486
|
readonly MESSAGE_RETENTION_CLEANUP: 'MESSAGE_RETENTION_CLEANUP';
|
|
487
|
+
readonly ROOM_UNREAD_UPDATED: 'ROOM_UNREAD_UPDATED';
|
|
487
488
|
};
|
|
488
489
|
export type RoomListEventTypeValue = typeof RoomListEventType[keyof typeof RoomListEventType];
|
|
489
490
|
|
|
@@ -766,6 +767,11 @@ export interface ChatRoomResponse {
|
|
|
766
767
|
description?: string;
|
|
767
768
|
creatorId: string;
|
|
768
769
|
unreadCount?: number | null;
|
|
770
|
+
/**
|
|
771
|
+
* unreadCount 가 확정된 방 version — {@link RoomUnreadReconciler} 의 baseline.
|
|
772
|
+
* 미참여 방 등 unread 미계산 응답 또는 구버전 서버에서는 없을 수 있음.
|
|
773
|
+
*/
|
|
774
|
+
unreadVersion?: number | null;
|
|
769
775
|
isParticipating?: boolean | null;
|
|
770
776
|
activeParticipantCount: number;
|
|
771
777
|
messageRetentionHours?: number | null;
|
|
@@ -851,9 +857,32 @@ export interface RoomListUpdateEvent {
|
|
|
851
857
|
* SDK 내부에서 같은 메시지의 중복 수신 (서버측 멱등 race 복구 등) dedup 용도. 다른 eventType 에서는 undefined.
|
|
852
858
|
*/
|
|
853
859
|
messageId?: string;
|
|
860
|
+
/**
|
|
861
|
+
* {@code ROOM_UNREAD_UPDATED} 전용 — 방별 내 미독 메시지 수 <b>절대값</b>(delta 아님).
|
|
862
|
+
* 다른 eventType 에서는 undefined. 전용 이벤트 {@link RoomUnreadUpdatedEvent} 로도 받을 수 있다.
|
|
863
|
+
*/
|
|
864
|
+
roomUnreadCount?: number;
|
|
865
|
+
/**
|
|
866
|
+
* unread 를 바꾼 원자 연산이 확정한 방 단위 version. {@code MESSAGE_RECEIVED} 와
|
|
867
|
+
* {@code ROOM_UNREAD_UPDATED} 에 실려, 순서 역전을 {@link RoomUnreadReconciler} 가 판별한다.
|
|
868
|
+
*/
|
|
869
|
+
unreadVersion?: number;
|
|
854
870
|
[extra: string]: unknown;
|
|
855
871
|
}
|
|
856
872
|
|
|
873
|
+
/**
|
|
874
|
+
* `roomListUnreadUpdated` 이벤트 payload — 내가 어느 기기에서 읽든 같은 사용자의 다른 세션에 전달된다.
|
|
875
|
+
*
|
|
876
|
+
* <p>{@link RoomUnreadReconciler.applySnapshot} 에 그대로 넣으면 순서 역전에 안전하게 badge 를 계산할 수 있다.</p>
|
|
877
|
+
*/
|
|
878
|
+
export interface RoomUnreadUpdatedEvent {
|
|
879
|
+
roomId: string;
|
|
880
|
+
/** 방별 내 미독 메시지 수 절대값. */
|
|
881
|
+
roomUnreadCount: number;
|
|
882
|
+
/** 그 카운트가 확정된 방 version. */
|
|
883
|
+
unreadVersion: number;
|
|
884
|
+
}
|
|
885
|
+
|
|
857
886
|
/** 포그라운드 푸시 알림 payload. */
|
|
858
887
|
export interface PushNotificationPayload {
|
|
859
888
|
title: string;
|
|
@@ -1333,6 +1362,8 @@ export interface TalkFlowClientEvents {
|
|
|
1333
1362
|
/** 본인이 영구 차단당함. */
|
|
1334
1363
|
roomListSelfBanned: RoomListUpdateEvent;
|
|
1335
1364
|
roomListRoomUpdated: RoomListUpdateEvent;
|
|
1365
|
+
/** 내가 어느 기기에서 읽든 방별 미독 절대값(+version)을 통지 — 크로스-디바이스 badge 동기화. */
|
|
1366
|
+
roomListUnreadUpdated: RoomUnreadUpdatedEvent;
|
|
1336
1367
|
retentionCleanup: RetentionCleanupPayload;
|
|
1337
1368
|
|
|
1338
1369
|
// 갭 복구 — 복구된 메시지 자체는 일반 chatMessage 로 재생되므로 아래는 모두 선택 구독용.
|
|
@@ -1434,6 +1465,8 @@ export interface ChatClientEvents {
|
|
|
1434
1465
|
/** 본인이 영구 차단당함. */
|
|
1435
1466
|
roomListSelfBanned: RoomListUpdateEvent;
|
|
1436
1467
|
roomListRoomUpdated: RoomListUpdateEvent;
|
|
1468
|
+
/** 내가 어느 기기에서 읽든 방별 미독 절대값(+version)을 통지 — 크로스-디바이스 badge 동기화. */
|
|
1469
|
+
roomListUnreadUpdated: RoomUnreadUpdatedEvent;
|
|
1437
1470
|
retentionCleanup: RetentionCleanupPayload;
|
|
1438
1471
|
messageRead: MessageReadEventPayload;
|
|
1439
1472
|
typing: TypingEvent;
|
|
@@ -2021,3 +2054,32 @@ export class Logger {
|
|
|
2021
2054
|
export class ConnectionManager {}
|
|
2022
2055
|
export class MediaStreamManager {}
|
|
2023
2056
|
export class PeerConnectionManager {}
|
|
2057
|
+
|
|
2058
|
+
/**
|
|
2059
|
+
* 방 미독 카운트 계산기 (READ_SYNC_DESIGN §6).
|
|
2060
|
+
*
|
|
2061
|
+
* <p>SDK 는 방 목록 상태를 소유하지 않는다 — 순서 역전에 안전한 카운트 계산만 제공하고 앱이 결과를
|
|
2062
|
+
* 자신의 room store 에 반영한다. 방마다 마지막 절대값 스냅샷과 그 이후 delta 를 분리 보관해,
|
|
2063
|
+
* 서로 다른 발신 흐름의 이벤트가 도착 순서가 뒤바뀌어도 서버 진실과 수렴한다.</p>
|
|
2064
|
+
*
|
|
2065
|
+
* @example
|
|
2066
|
+
* const reconciler = new RoomUnreadReconciler(client.userId); // JWT 에서 SDK 가 추출한 내 userId
|
|
2067
|
+
* rooms.forEach(r => reconciler.applySnapshot(r.id, r.unreadCount, r.unreadVersion)); // REST baseline
|
|
2068
|
+
* client.on('roomListMessage', e => { reconciler.applyMessageReceived(e); render(e.roomId); });
|
|
2069
|
+
* client.on('roomListUnreadUpdated', e => { reconciler.applySnapshot(e.roomId, e.roomUnreadCount, e.unreadVersion); render(e.roomId); });
|
|
2070
|
+
* // render: const c = reconciler.getCount(roomId); c == null ? useRestValue() : store.setBadge(roomId, c);
|
|
2071
|
+
*/
|
|
2072
|
+
export class RoomUnreadReconciler {
|
|
2073
|
+
/** @param currentUserId 내 사용자 ID — 내가 보낸 메시지의 delta 를 걸러내는 데 쓴다. */
|
|
2074
|
+
constructor(currentUserId: string);
|
|
2075
|
+
/** MESSAGE_RECEIVED(delta +1) 반영. 발신자 본인 · 중복 messageId · 이미 반영된 version 은 무시. */
|
|
2076
|
+
applyMessageReceived(event: { roomId: string; messageId: string; actorId?: string; unreadVersion?: number | null }): void;
|
|
2077
|
+
/** 절대값 스냅샷(REST 또는 ROOM_UNREAD_UPDATED) 반영. stale version 은 무시, 반영된 pending 은 정리. */
|
|
2078
|
+
applySnapshot(roomId: string, count: number | null | undefined, version: number | null | undefined): void;
|
|
2079
|
+
/** 방의 현재 표시 카운트. baseline 이 아직 없으면 null(앱은 REST 값으로 표시). */
|
|
2080
|
+
getCount(roomId: string): number | null;
|
|
2081
|
+
/** 방을 상태에서 제거. */
|
|
2082
|
+
removeRoom(roomId: string): void;
|
|
2083
|
+
/** 전체 초기화. */
|
|
2084
|
+
clear(): void;
|
|
2085
|
+
}
|