@vibexnpm/talkx 3.2.1 → 4.0.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 +109 -30
- 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 +5 -3
- package/src/chat/ChatClient.js +62 -84
- package/src/constants.js +12 -0
- package/src/push/PushManager.js +13 -2
- package/src/talkflow/delegates.js +4 -0
- package/types/__typetests__/singleMessageAttachment.types.ts +68 -0
- package/types/__typetests__/tsconfig.json +12 -0
- package/types/index.d.ts +109 -30
package/dist/index.d.ts
CHANGED
|
@@ -71,9 +71,8 @@ export const SignalTypes: {
|
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
73
|
* SDK 가 런타임에 export 하는 ChatMessageType 상수.
|
|
74
|
-
* <p><b
|
|
75
|
-
*
|
|
76
|
-
* 필드로는 수신될 수 있으므로 {@link ChatMessageTypeValue} 는 해당 값을 포함한 union.</p>
|
|
74
|
+
* <p><b>{@code src/constants.js} 와 정확히 일치해야 한다</b> — 한쪽만 늘리면 소비자가 존재하는 상수를
|
|
75
|
+
* 못 쓰거나(누락) 없는 상수를 참조한다(초과).</p>
|
|
77
76
|
*/
|
|
78
77
|
export const ChatMessageType: {
|
|
79
78
|
readonly TEXT: 'TEXT';
|
|
@@ -81,17 +80,32 @@ export const ChatMessageType: {
|
|
|
81
80
|
readonly FILE: 'FILE';
|
|
82
81
|
readonly VIDEO: 'VIDEO';
|
|
83
82
|
readonly AUDIO: 'AUDIO';
|
|
83
|
+
readonly DOCUMENT: 'DOCUMENT';
|
|
84
|
+
/** 서로 다른 카테고리의 첨부가 섞인 메시지 (예: 이미지 2 + PDF 1). */
|
|
85
|
+
readonly MIXED: 'MIXED';
|
|
86
|
+
/**
|
|
87
|
+
* @deprecated 복수 첨부(타입 무관)를 뜻하던 과거 값. 신규 저장에서는 생성되지 않지만 기존 데이터에 남아 있다.
|
|
88
|
+
* {@link ChatClient.resolveMessageCategory} 로 복원할 것.
|
|
89
|
+
*/
|
|
90
|
+
readonly GALLERY: 'GALLERY';
|
|
84
91
|
readonly SYSTEM: 'SYSTEM';
|
|
85
92
|
};
|
|
86
93
|
|
|
87
94
|
/**
|
|
88
|
-
* 서버가 보낼 수 있는 메시지 타입 값
|
|
89
|
-
* <p
|
|
90
|
-
* 수신 {@link ChatMessage#chatMessageType} 비교 시 이 union 을 사용.</p>
|
|
95
|
+
* 서버가 보낼 수 있는 메시지 타입 값 전체 — {@link ChatMessageType} 상수와 같은 집합.
|
|
96
|
+
* <p>수신 {@link ChatMessage#chatMessageType} 비교 시 이 union 을 사용한다.</p>
|
|
91
97
|
*/
|
|
92
98
|
export type ChatMessageTypeValue =
|
|
93
99
|
| 'TEXT' | 'IMAGE' | 'FILE' | 'VIDEO' | 'AUDIO' | 'SYSTEM'
|
|
94
|
-
| 'DOCUMENT'
|
|
100
|
+
| 'DOCUMENT'
|
|
101
|
+
/** 서로 다른 카테고리의 첨부가 섞인 메시지 (예: 이미지 2 + PDF 1). 전송 1회 = 메시지 1건 계약의 신규 값. */
|
|
102
|
+
| 'MIXED'
|
|
103
|
+
/**
|
|
104
|
+
* @deprecated 복수 첨부(타입 무관)를 뜻하던 과거 값. 신규 저장에서는 생성되지 않지만 기존 데이터에 남아 있다.
|
|
105
|
+
* 동영상·문서 복수도 전부 이 값이므로 `IMAGE` 로 매핑하면 안 되고,
|
|
106
|
+
* {@link ChatClient.resolveMessageCategory} 로 `fileMetaDataList` 의 MIME 에서 복원해야 한다.
|
|
107
|
+
*/
|
|
108
|
+
| 'GALLERY';
|
|
95
109
|
|
|
96
110
|
export const ChatRoomType: {
|
|
97
111
|
readonly DIRECT: 'DIRECT';
|
|
@@ -568,6 +582,17 @@ export type FileCustomMetadata = { [key: string]: JsonValue };
|
|
|
568
582
|
|
|
569
583
|
/** 파일 메타데이터 (이미지/영상/오디오/문서). */
|
|
570
584
|
export interface FileMetaData {
|
|
585
|
+
/**
|
|
586
|
+
* 첨부 식별자 — **서버 `uploadFile` 이 발급한 UUID 를 그대로 실어야 한다**.
|
|
587
|
+
*
|
|
588
|
+
* <p>서버가 이 값을 첨부 좌표(문서 추출 캐시 키)로 쓰기 때문에, 병합 저장이 켜진 서버에서는
|
|
589
|
+
* **UUID 형식 + 메시지 내 유일**이 필수다(위반 시 400). `uploadFile` / `sendFileMessage` 경로는
|
|
590
|
+
* 서버 응답을 그대로 전달하므로 신경 쓸 것이 없다.</p>
|
|
591
|
+
*
|
|
592
|
+
* <p>⚠️ **외부 스토리지에 직접 올리고 `fileInfos` 를 손으로 조립하는 연동**은 이 필드를 반드시 채워야 한다.
|
|
593
|
+
* 값이 없거나 UUID 가 아니면 병합 저장이 켜진 뒤 전송이 거부된다. 임의 UUID v4 를 생성해 넣으면 된다.</p>
|
|
594
|
+
*/
|
|
595
|
+
fileId?: string;
|
|
571
596
|
fileUrl: string;
|
|
572
597
|
fileName?: string;
|
|
573
598
|
fileSize?: number;
|
|
@@ -1095,11 +1120,29 @@ export interface UpdateGroupRoomData {
|
|
|
1095
1120
|
engagementIntensity?: EngagementIntensityValue;
|
|
1096
1121
|
}
|
|
1097
1122
|
|
|
1123
|
+
/**
|
|
1124
|
+
* **전송 요청**에 싣는 첨부 — {@code fileId} 가 <b>필수</b>다.
|
|
1125
|
+
*
|
|
1126
|
+
* <p>서버가 이 값을 첨부 좌표(문서 추출 캐시 키)로 쓰기 때문에, 병합 저장이 켜진 서버는 UUID 형식 +
|
|
1127
|
+
* 메시지 내 유일을 강제하고 위반 시 400 을 낸다. {@link ChatClient.uploadFile} 은 서버가 발급한 UUID 를
|
|
1128
|
+
* 담아 반환하므로 그대로 넘기면 된다.</p>
|
|
1129
|
+
*
|
|
1130
|
+
* <p>⚠️ 외부 스토리지에 직접 올리고 {@code fileInfos} 를 손으로 조립하는 연동은 {@code crypto.randomUUID()}
|
|
1131
|
+
* 등으로 직접 채워야 한다. 수신 메시지의 {@link FileMetaData} 는 legacy 데이터를 위해 {@code fileId} 가
|
|
1132
|
+
* optional 이므로, 그것을 그대로 재전송하려면 {@code fileId} 를 보강해야 한다.</p>
|
|
1133
|
+
*/
|
|
1134
|
+
export type SendFileInfo = FileMetaData & { fileId: string };
|
|
1135
|
+
|
|
1098
1136
|
export interface SendMessageData {
|
|
1099
1137
|
/** @deprecated SDK 가 내부에서 UUID 를 자동 생성합니다. 지정해도 런타임에서 무시됩니다. */
|
|
1100
1138
|
messageId?: string;
|
|
1101
1139
|
message?: string;
|
|
1102
|
-
|
|
1140
|
+
/** 첨부 — {@code fileId} 필수. {@link SendFileInfo} 참고. */
|
|
1141
|
+
fileInfos?: SendFileInfo[];
|
|
1142
|
+
/**
|
|
1143
|
+
* @deprecated 더 이상 전송되지 않습니다. 전송 1회 = 메시지 1건이 계약이며, 첨부는 한 메시지에 전량 실립니다.
|
|
1144
|
+
* 지정해도 SDK 가 무시합니다.
|
|
1145
|
+
*/
|
|
1103
1146
|
separateFiles?: boolean;
|
|
1104
1147
|
replyToMessageId?: string;
|
|
1105
1148
|
}
|
|
@@ -1110,13 +1153,17 @@ export interface SendMessageResult {
|
|
|
1110
1153
|
}
|
|
1111
1154
|
|
|
1112
1155
|
/**
|
|
1113
|
-
* Optimistic
|
|
1156
|
+
* Optimistic 검증 메타데이터 — {@link OptimisticSendMessageResult} 에 첨부.
|
|
1114
1157
|
*
|
|
1115
|
-
* <p
|
|
1116
|
-
*
|
|
1158
|
+
* <p>전송 1회 = 메시지 1건이므로 `predictedMessageIds` 는 항상 `[baseMessageId]` 하나다.
|
|
1159
|
+
* SDK 가 서버 파일 분류 규칙을 mirror 해 여러 ID 를 예측하던 로직은 제거됐다.</p>
|
|
1160
|
+
*
|
|
1161
|
+
* <p>{@code predictionMatched: false} 면 서버가 아직 병합 저장을 켜지 않아 **한 요청이 여러 row 로
|
|
1162
|
+
* 저장된 것**이다(전환 기간의 정상 상태). 호출자는 placeholder 를 제거하고 `actualMessageIds` 기준으로
|
|
1163
|
+
* 재구성해야 한다 — 이 fallback 경로는 플래그가 켜질 때까지 실제로 발생한다.</p>
|
|
1117
1164
|
*/
|
|
1118
1165
|
export interface OptimisticPredictionInfo {
|
|
1119
|
-
/** SDK 가 호출 시점에
|
|
1166
|
+
/** SDK 가 호출 시점에 만든 messageId 배열 — 항상 길이 1(`[baseMessageId]`). */
|
|
1120
1167
|
predictedMessageIds: string[];
|
|
1121
1168
|
/** 서버 응답의 실제 messageId 배열 — {@code result.messages.map(m => m.messageId)} 와 동일. */
|
|
1122
1169
|
actualMessageIds: string[];
|
|
@@ -1136,29 +1183,27 @@ export interface OptimisticSendMessageResult extends SendMessageResult {
|
|
|
1136
1183
|
* Optimistic UI 핸들 — {@code sendMessageOptimistic} / {@code sendTextMessageOptimistic} /
|
|
1137
1184
|
* {@code sendReplyOptimistic} / {@code sendFileMessageOptimistic} 의 반환 타입.
|
|
1138
1185
|
*
|
|
1139
|
-
* <p
|
|
1140
|
-
*
|
|
1186
|
+
* <p>전송 1회 = 메시지 1건이므로 {@code messageIds} 는 <b>항상 {@code [baseMessageId]} 하나</b>다.
|
|
1187
|
+
* 첨부 개수와 무관하며, promise 시작 전 동기 반환된다. 서버의 messageId derivation 규칙
|
|
1188
|
+
* (텍스트=base, 파일=base#N)을 mirror 하던 예측기는 제거됐다.</p>
|
|
1141
1189
|
*
|
|
1142
|
-
* <p><b
|
|
1143
|
-
*
|
|
1144
|
-
*
|
|
1190
|
+
* <p><b>전환 기간 fallback</b>: 서버가 아직 병합 저장을 켜지 않았다면 한 요청이 여러 row 로 저장되어
|
|
1191
|
+
* {@code optimistic.predictionMatched} 가 {@code false} 가 된다. 오류가 아니라 정상 상태이며, SDK 가
|
|
1192
|
+
* warn 로그를 남긴다. 이때 호출자는 placeholder 를 제거하고
|
|
1193
|
+
* {@code result.optimistic.actualMessageIds} / {@code result.messages} 로 재구성해야 한다.</p>
|
|
1145
1194
|
*/
|
|
1146
1195
|
export interface OptimisticSendMessageHandle {
|
|
1147
1196
|
/** SDK 가 생성한 base messageId — 서버 멱등 키. 응답 첫 메시지가 텍스트면 이 값과 동일. */
|
|
1148
1197
|
baseMessageId: string;
|
|
1149
1198
|
/**
|
|
1150
|
-
*
|
|
1151
|
-
* <
|
|
1152
|
-
* <li>텍스트 단건: {@code [base]}</li>
|
|
1153
|
-
* <li>파일 1개 (text 없음): {@code [base]}</li>
|
|
1154
|
-
* <li>텍스트 + 파일들: {@code [base, base#0, base#1, ...]}</li>
|
|
1155
|
-
* <li>분리 다파일 (text 없음): {@code [base#0, base#1, ...]}</li>
|
|
1156
|
-
* </ul>
|
|
1199
|
+
* 전송할 messageId 배열 — 전송 1회 = 메시지 1건이므로 <b>항상 {@code [baseMessageId]} 하나</b>다.
|
|
1200
|
+
* <p>첨부 개수와 무관하다. 서버 저장 규칙을 mirror 해 {@code base#N} 을 계산하던 예측기는 제거됐다.</p>
|
|
1157
1201
|
*/
|
|
1158
1202
|
messageIds: string[];
|
|
1159
1203
|
/**
|
|
1160
1204
|
* 실제 전송 promise — 일반 결과 + {@code optimistic} 메타데이터.
|
|
1161
|
-
* {@code result.optimistic.predictionMatched} 가 {@code false} 면
|
|
1205
|
+
* {@code result.optimistic.predictionMatched} 가 {@code false} 면 서버가 아직 병합 저장을 켜지 않아
|
|
1206
|
+
* N건으로 저장한 것이다 — {@code actualMessageIds} 로 재구성한다(전환 기간의 정상 상태).
|
|
1162
1207
|
*/
|
|
1163
1208
|
promise: Promise<OptimisticSendMessageResult>;
|
|
1164
1209
|
}
|
|
@@ -1201,7 +1246,9 @@ export interface SendFileMessageProgressEvent extends UploadProgressEvent {
|
|
|
1201
1246
|
export interface SendFileMessageOptions {
|
|
1202
1247
|
/** 함께 보낼 텍스트. */
|
|
1203
1248
|
message?: string;
|
|
1204
|
-
/**
|
|
1249
|
+
/**
|
|
1250
|
+
* @deprecated 더 이상 전송되지 않습니다. 전송 1회 = 메시지 1건이 계약입니다.
|
|
1251
|
+
*/
|
|
1205
1252
|
separateFiles?: boolean;
|
|
1206
1253
|
/** 답글 대상 원본 메시지의 서버 messageId. */
|
|
1207
1254
|
replyToMessageId?: string;
|
|
@@ -1220,8 +1267,8 @@ export interface SendFileMessageOptions {
|
|
|
1220
1267
|
* <li>배열: index 별 파일에 매핑. 빈 슬롯 ({@code null} / {@code undefined}) 은 해당 파일에 metadata 미부여</li>
|
|
1221
1268
|
* </ul>
|
|
1222
1269
|
*
|
|
1223
|
-
* <p
|
|
1224
|
-
*
|
|
1270
|
+
* <p>첨부가 한 메시지에 묶여도 각 파일의 {@code metadata} 는 자신의 값을 유지하므로,
|
|
1271
|
+
* {@code fileMetaDataList[i].metadata} 가 i 별로 다를 수 있다.</p>
|
|
1225
1272
|
*/
|
|
1226
1273
|
metadata?: FileCustomMetadata | Array<FileCustomMetadata | undefined | null>;
|
|
1227
1274
|
}
|
|
@@ -1591,7 +1638,7 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
1591
1638
|
sendReply(roomId: string, message: string, replyToMessageId: string): Promise<SendMessageResult>;
|
|
1592
1639
|
sendReplyOptimistic(roomId: string, message: string, replyToMessageId: string): OptimisticSendMessageHandle;
|
|
1593
1640
|
|
|
1594
|
-
uploadFile(roomId: string, file: File, options?: FileUploadOptions): Promise<
|
|
1641
|
+
uploadFile(roomId: string, file: File, options?: FileUploadOptions): Promise<SendFileInfo>;
|
|
1595
1642
|
sendFileMessage(roomId: string, files: File | File[], options?: SendFileMessageOptions): Promise<SendMessageResult>;
|
|
1596
1643
|
/**
|
|
1597
1644
|
* 파일 메시지 Optimistic UI 버전 — 업로드 시작 전에 messageIds 를 동기 반환.
|
|
@@ -1599,6 +1646,22 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
1599
1646
|
*/
|
|
1600
1647
|
sendFileMessageOptimistic(roomId: string, files: File | File[], options?: SendFileMessageOptions): OptimisticSendMessageHandle;
|
|
1601
1648
|
|
|
1649
|
+
/**
|
|
1650
|
+
* MIME 타입 → 첨부 카테고리 (서버 분류 규칙 mirror).
|
|
1651
|
+
* <p>주로 {@link ChatClient.resolveMessageCategory} 가 쓰지만, 업로드 전 미리보기 분기 등에도 쓸 수 있다.</p>
|
|
1652
|
+
*/
|
|
1653
|
+
classifyFileType(mimeType: string): 'IMAGE' | 'VIDEO' | 'AUDIO' | 'DOCUMENT' | 'FILE';
|
|
1654
|
+
|
|
1655
|
+
/**
|
|
1656
|
+
* 메시지의 **렌더 카테고리**를 해석한다 — legacy `GALLERY` 복원용.
|
|
1657
|
+
*
|
|
1658
|
+
* <p>서버는 이제 첨부가 동질이면 그 카테고리를, 혼재면 `MIXED` 를 보낸다. 그러나 이 변경 이전에 저장된
|
|
1659
|
+
* 메시지는 복수 첨부면 타입 무관 전부 `GALLERY` 다 — 동영상 2개도, PDF 2개도 `GALLERY` 다.
|
|
1660
|
+
* 따라서 **`GALLERY` 를 `IMAGE` 로 매핑하면 안 된다.** 이 메서드가 `fileMetaDataList` 의 MIME 으로
|
|
1661
|
+
* 실제 카테고리를 복원하므로, 렌더러는 `GALLERY` 분기를 따로 둘 필요가 없다.</p>
|
|
1662
|
+
*/
|
|
1663
|
+
resolveMessageCategory(message: Pick<ChatMessage, 'chatMessageType' | 'fileMetaDataList'>): ChatMessageTypeValue;
|
|
1664
|
+
|
|
1602
1665
|
editMessage(roomId: string, messageId: string, message: string): Promise<void>;
|
|
1603
1666
|
deleteMessage(roomId: string, messageId: string, deleteType?: DeleteType): Promise<void>;
|
|
1604
1667
|
/** 메시지 읽음 처리 — sync. 연결 상태 or send 결과에 따라 boolean 반환. */
|
|
@@ -1938,7 +2001,7 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
1938
2001
|
sendReply(roomId: string, message: string, replyToMessageId: string): Promise<SendMessageResult>;
|
|
1939
2002
|
sendReplyOptimistic(roomId: string, message: string, replyToMessageId: string): OptimisticSendMessageHandle;
|
|
1940
2003
|
|
|
1941
|
-
uploadFile(roomId: string, file: File, options?: FileUploadOptions): Promise<
|
|
2004
|
+
uploadFile(roomId: string, file: File, options?: FileUploadOptions): Promise<SendFileInfo>;
|
|
1942
2005
|
sendFileMessage(roomId: string, files: File | File[], options?: SendFileMessageOptions): Promise<SendMessageResult>;
|
|
1943
2006
|
/**
|
|
1944
2007
|
* 파일 메시지 Optimistic UI 버전 — 업로드 시작 전에 messageIds 를 동기 반환.
|
|
@@ -1946,6 +2009,22 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
1946
2009
|
*/
|
|
1947
2010
|
sendFileMessageOptimistic(roomId: string, files: File | File[], options?: SendFileMessageOptions): OptimisticSendMessageHandle;
|
|
1948
2011
|
|
|
2012
|
+
/**
|
|
2013
|
+
* MIME 타입 → 첨부 카테고리 (서버 분류 규칙 mirror).
|
|
2014
|
+
* <p>주로 {@link ChatClient.resolveMessageCategory} 가 쓰지만, 업로드 전 미리보기 분기 등에도 쓸 수 있다.</p>
|
|
2015
|
+
*/
|
|
2016
|
+
classifyFileType(mimeType: string): 'IMAGE' | 'VIDEO' | 'AUDIO' | 'DOCUMENT' | 'FILE';
|
|
2017
|
+
|
|
2018
|
+
/**
|
|
2019
|
+
* 메시지의 **렌더 카테고리**를 해석한다 — legacy `GALLERY` 복원용.
|
|
2020
|
+
*
|
|
2021
|
+
* <p>서버는 이제 첨부가 동질이면 그 카테고리를, 혼재면 `MIXED` 를 보낸다. 그러나 이 변경 이전에 저장된
|
|
2022
|
+
* 메시지는 복수 첨부면 타입 무관 전부 `GALLERY` 다 — 동영상 2개도, PDF 2개도 `GALLERY` 다.
|
|
2023
|
+
* 따라서 **`GALLERY` 를 `IMAGE` 로 매핑하면 안 된다.** 이 메서드가 `fileMetaDataList` 의 MIME 으로
|
|
2024
|
+
* 실제 카테고리를 복원하므로, 렌더러는 `GALLERY` 분기를 따로 둘 필요가 없다.</p>
|
|
2025
|
+
*/
|
|
2026
|
+
resolveMessageCategory(message: Pick<ChatMessage, 'chatMessageType' | 'fileMetaDataList'>): ChatMessageTypeValue;
|
|
2027
|
+
|
|
1949
2028
|
editMessage(roomId: string, messageId: string, message: string): Promise<void>;
|
|
1950
2029
|
deleteMessage(roomId: string, messageId: string, deleteType?: DeleteType): Promise<void>;
|
|
1951
2030
|
/** 메시지 읽음 처리 — sync. 연결 상태 or send 결과에 따라 boolean 반환. */
|