@vibexnpm/talkx 5.1.0 → 5.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 +207 -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 +216 -0
- package/src/talkflow/delegates.js +10 -1
- package/src/utils/ApiClient.js +8 -4
- package/types/index.d.ts +207 -0
package/dist/index.d.ts
CHANGED
|
@@ -753,6 +753,177 @@ export interface ChatMessage {
|
|
|
753
753
|
decisionRequest?: DecisionRequest | null;
|
|
754
754
|
/** 사용자의 선택. 어느 카드인지는 {@code replyTo} 가 특정한다. */
|
|
755
755
|
decisionResponse?: DecisionResponse | null;
|
|
756
|
+
/**
|
|
757
|
+
* 투표 카드 — 투표가 열리거나 마감·취소됐음을 알리는 메시지의 payload.
|
|
758
|
+
*
|
|
759
|
+
* <p><b>모르면 그냥 텍스트로 그려라 — 그게 정상 동작이다.</b> {@code content} 에 같은 내용이
|
|
760
|
+
* 사람이 읽는 형태로 들어 있다. 반대로 카드를 그린다면 {@code content} 를 다시 그리지 마라.</p>
|
|
761
|
+
*
|
|
762
|
+
* <p>카드에는 집계가 없다. 결과는 {@code voteId} 로 {@link ChatClient.getVote} 를 호출해 받는다 —
|
|
763
|
+
* 마스킹이 호출자마다 다르게 계산되기 때문이다.</p>
|
|
764
|
+
*/
|
|
765
|
+
voteCard?: VoteCard | null;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* 투표 카드 payload — 이벤트 하나당 메시지 하나다(개설·마감·취소).
|
|
770
|
+
*
|
|
771
|
+
* <p>이미 발행된 카드는 고쳐지지 않는다. 투표가 삭제돼도 개설 카드는 그대로 남고 조회가 404 가 되며,
|
|
772
|
+
* 「취소됨」 표시는 화면 몫이다(별도의 취소 카드도 함께 발행된다).</p>
|
|
773
|
+
*/
|
|
774
|
+
export interface VoteCard {
|
|
775
|
+
voteId: string;
|
|
776
|
+
/**
|
|
777
|
+
* {@code 'OPENED'} | {@code 'CLOSED'} | {@code 'CANCELED'}.
|
|
778
|
+
*
|
|
779
|
+
* <p>🔴 <b>모르는 값이 올 수 있다</b> — 서버가 나중에 종류를 늘려도 구버전이 깨지지 않도록 열린 문자열이다.
|
|
780
|
+
* switch 의 default 는 텍스트 폴백으로 둔다.</p>
|
|
781
|
+
*/
|
|
782
|
+
kind: 'OPENED' | 'CLOSED' | 'CANCELED' | (string & {});
|
|
783
|
+
/**
|
|
784
|
+
* 발행 시점의 질문 <b>스냅샷</b>. 참여자가 0명인 동안 투표가 수정될 수 있으므로 최신값이 필요하면
|
|
785
|
+
* {@link ChatClient.getVote} 로 조회한다. 마감·취소 카드에서는 비어 있을 수 있다.
|
|
786
|
+
*/
|
|
787
|
+
question?: string | null;
|
|
788
|
+
/** 마감 예정 시각 (epoch millis, UTC). 마감·취소 카드에서는 null 일 수 있다. */
|
|
789
|
+
closeAt?: number | null;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
// ── 투표 (createVote / getVotes / getVote / submitVote ...) ──
|
|
793
|
+
|
|
794
|
+
/** 투표 등록 폼 — 생성과 수정이 같은 타입이다({@code PATCH} 지만 부분 수정이 아니다). */
|
|
795
|
+
export interface VoteForm {
|
|
796
|
+
/** 최대 500자. 공백만이면 거절. */
|
|
797
|
+
question: string;
|
|
798
|
+
type: 'SINGLE' | 'MULTIPLE';
|
|
799
|
+
/** 양수. {@code SINGLE} 이면 1. */
|
|
800
|
+
maxSelections: number;
|
|
801
|
+
/** {@code 'IMAGE'} 라는 값은 없다. */
|
|
802
|
+
optionType: 'TEXT' | 'TEXT_WITH_IMAGE';
|
|
803
|
+
/** 마감 시각 (epoch millis). 과거·현재 불가 · 최대 30일 뒤. 무기한 투표는 없다. */
|
|
804
|
+
closeAt: number;
|
|
805
|
+
/** 2~10개. */
|
|
806
|
+
options: VoteFormOption[];
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
export interface VoteFormOption {
|
|
810
|
+
/** {@code .} {@code $} NUL 사용 불가 · 최대 100자 · 중복 불가 (집계 필드명으로 쓰인다). */
|
|
811
|
+
id: string;
|
|
812
|
+
/** 최대 200자. */
|
|
813
|
+
content: string;
|
|
814
|
+
/** 표시 순서. */
|
|
815
|
+
order: number;
|
|
816
|
+
/**
|
|
817
|
+
* {@link ChatClient.uploadVoteImage} 가 돌려준 값을 <b>가공 없이</b> 넣는다 — 서버가 문자열로 비교한다.
|
|
818
|
+
* 채팅 첨부 URL 은 쓸 수 없다. {@code optionType: 'TEXT'} 면 넣으면 안 되고, 빈 문자열도 거절된다.
|
|
819
|
+
*/
|
|
820
|
+
imageUrl?: string | null;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
/** 투표 단건 + 집계 — 생성 · 수정 · 단건조회 · 접수 응답. */
|
|
824
|
+
export interface Vote {
|
|
825
|
+
voteId: string;
|
|
826
|
+
roomId: string;
|
|
827
|
+
question: string;
|
|
828
|
+
type: 'SINGLE' | 'MULTIPLE';
|
|
829
|
+
optionType: 'TEXT' | 'TEXT_WITH_IMAGE';
|
|
830
|
+
maxSelections: number;
|
|
831
|
+
/**
|
|
832
|
+
* {@code 'OPEN'} | {@code 'CLOSED'}.
|
|
833
|
+
*
|
|
834
|
+
* <p>🔴 <b>이 값만으로 마감을 판정하면 안 된다</b> — 서버 자동 마감이 미구현이라 {@code closeAt} 이
|
|
835
|
+
* 지났는데도 {@code 'OPEN'} 인 투표가 있고, 그건 마감된 것으로 동작한다. 둘을 함께 본다.</p>
|
|
836
|
+
*/
|
|
837
|
+
status: 'OPEN' | 'CLOSED' | (string & {});
|
|
838
|
+
/** epoch millis. */
|
|
839
|
+
closeAt: number;
|
|
840
|
+
/** 마감 전이면 null. epoch millis. */
|
|
841
|
+
closedAt?: number | null;
|
|
842
|
+
creatorId: string;
|
|
843
|
+
createdAt: number;
|
|
844
|
+
updatedAt: number;
|
|
845
|
+
/**
|
|
846
|
+
* 결과 공개 여부. 공개 조건은 「내가 응답했다」 또는 「마감됐다」.
|
|
847
|
+
*
|
|
848
|
+
* <p>🔴 {@code false} 일 때의 {@code count}/{@code ratio} 0 은 「참여자가 없다」가 아니라
|
|
849
|
+
* <b>서버가 가린 값</b>이다. 「아직 0표」로 표시하면 거짓말이 된다.</p>
|
|
850
|
+
*/
|
|
851
|
+
revealed: boolean;
|
|
852
|
+
/** 응답자 수. <b>득표 합이 아니다</b> — 복수 선택에서 값이 다르다. */
|
|
853
|
+
totalResponses: number;
|
|
854
|
+
/** 호출자가 고른 선택지. 없으면 빈 배열. 비공개 상태에서도 채워진다(재투표 화면용). */
|
|
855
|
+
myOptionIds: string[];
|
|
856
|
+
options: VoteOptionResult[];
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
export interface VoteOptionResult {
|
|
860
|
+
optionId: string;
|
|
861
|
+
content: string;
|
|
862
|
+
order: number;
|
|
863
|
+
/** {@code optionType} 이 {@code 'TEXT'} 면 항상 null. */
|
|
864
|
+
imageUrl?: string | null;
|
|
865
|
+
/** 득표 수. 비공개면 0(가려진 값). */
|
|
866
|
+
count: number;
|
|
867
|
+
/**
|
|
868
|
+
* 응답자 대비 %, 소수 첫째 자리.
|
|
869
|
+
*
|
|
870
|
+
* <p>분모가 <b>응답자 수</b>이지 총 선택 수가 아니다 — 복수 선택 투표에서는 합이 100을 넘는 것이
|
|
871
|
+
* 정상이고, 화면이 「복수 응답」임을 표기해야 한다.</p>
|
|
872
|
+
*/
|
|
873
|
+
ratio: number;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
/** {@link ChatClient.getVotes} 옵션. */
|
|
877
|
+
export interface GetVotesOptions {
|
|
878
|
+
/** 이전 응답의 {@code nextCursor} 를 <b>그대로</b>. 불투명 문자열이라 파싱하지 않는다. */
|
|
879
|
+
cursor?: string;
|
|
880
|
+
/** 기본 20, 최대 100. 초과분은 서버가 조용히 100 으로 보정한다(에러 아님). */
|
|
881
|
+
limit?: number;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
/** {@link ChatClient.getVotes} 반환. */
|
|
885
|
+
export interface VoteList {
|
|
886
|
+
/** 최신순. 비면 끝이다. */
|
|
887
|
+
items: VoteListItem[];
|
|
888
|
+
/** null 이면 끝. 마지막 페이지가 정확히 {@code limit} 개면 채워진 채 오고, 그 커서로 부르면 빈 목록이 온다. */
|
|
889
|
+
nextCursor?: string | null;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
/** 목록 항목 — {@code optionType} · {@code options} · {@code myOptionIds} · {@code revealed} 가 <b>없다</b>. */
|
|
893
|
+
export interface VoteListItem {
|
|
894
|
+
voteId: string;
|
|
895
|
+
question: string;
|
|
896
|
+
type: 'SINGLE' | 'MULTIPLE';
|
|
897
|
+
status: 'OPEN' | 'CLOSED' | (string & {});
|
|
898
|
+
closeAt: number;
|
|
899
|
+
creatorId: string;
|
|
900
|
+
createdAt: number;
|
|
901
|
+
/** 참여자 수. 선택지별 집계는 목록에 없다 — 마스킹이 사용자마다 다르기 때문이다. */
|
|
902
|
+
responseCount: number;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
/** {@link ChatClient.createVote} 옵션. */
|
|
906
|
+
export interface CreateVoteOptions {
|
|
907
|
+
/**
|
|
908
|
+
* 🔴 <b>필수.</b> SDK 가 대신 만들지 않는다 — 만들면 그 값이 호출자에게 남지 않아 응답만 유실된
|
|
909
|
+
* 타임아웃에서 복구가 불가능하다(다음 호출이 새 키를 만들어 투표가 두 개 생긴다).
|
|
910
|
+
*
|
|
911
|
+
* <p>한 투표당 한 번 만들어 보관하고, 같은 시도의 재시도에는 <b>같은 값</b>을 넘긴다 —
|
|
912
|
+
* 그러면 서버가 기존 투표를 돌려준다(201, 같은 voteId).</p>
|
|
913
|
+
*/
|
|
914
|
+
idempotencyKey: string;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
/** {@link ChatClient.uploadVoteImage} 옵션. */
|
|
918
|
+
export interface UploadVoteImageOptions {
|
|
919
|
+
onProgress?: (progress: { loaded: number; total: number; percent: number }) => void;
|
|
920
|
+
signal?: AbortSignal;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
/** {@link ChatClient.uploadVoteImage} 반환. */
|
|
924
|
+
export interface VoteImage {
|
|
925
|
+
/** 생성·수정 본문의 {@code options[].imageUrl} 에 <b>가공 없이</b> 넣는다. */
|
|
926
|
+
imageUrl: string;
|
|
756
927
|
}
|
|
757
928
|
|
|
758
929
|
/**
|
|
@@ -1721,6 +1892,24 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
1721
1892
|
refreshSummary(roomId: string, options?: RefreshSummaryOptions): Promise<RefreshSummaryResult>;
|
|
1722
1893
|
/** Rolling 누적 요약 조회 — rollup + segment 페이지. 저장된 요약의 단일 진실 소스. */
|
|
1723
1894
|
getSummary(roomId: string, options?: GetSummaryOptions): Promise<RoomSummaryView>;
|
|
1895
|
+
|
|
1896
|
+
// ── 투표 ──
|
|
1897
|
+
/** 투표 생성. {@code idempotencyKey} 필수 — 재시도에 같은 값을 넘겨야 투표가 두 개 안 생긴다. */
|
|
1898
|
+
createVote(roomId: string, vote: VoteForm, options: CreateVoteOptions): Promise<Vote>;
|
|
1899
|
+
/** 방의 투표 목록(최신순). 집계는 없고 참여자 수만 있다. */
|
|
1900
|
+
getVotes(roomId: string, options?: GetVotesOptions): Promise<VoteList>;
|
|
1901
|
+
/** 투표 단건 + 집계. 마스킹이 호출자마다 다르므로 공유 캐시에 넣지 않는다. */
|
|
1902
|
+
getVote(roomId: string, voteId: string): Promise<Vote>;
|
|
1903
|
+
/** 투표 수정 — 폼 전체를 보낸다. 개설자 + 참여자 0명일 때만. */
|
|
1904
|
+
updateVote(roomId: string, voteId: string, vote: VoteForm): Promise<Vote>;
|
|
1905
|
+
/** 투표 삭제(204). 이미 발행된 카드는 남고 조회가 404 가 된다. */
|
|
1906
|
+
deleteVote(roomId: string, voteId: string): Promise<void>;
|
|
1907
|
+
/** 수동 마감(204). 결과를 보려면 {@link getVote} 를 다시 호출한다. */
|
|
1908
|
+
closeVote(roomId: string, voteId: string): Promise<void>;
|
|
1909
|
+
/** 투표 접수 · 재투표 — 같은 메서드. 응답에 갱신된 집계가 함께 온다. */
|
|
1910
|
+
submitVote(roomId: string, voteId: string, optionIds: string[]): Promise<Vote>;
|
|
1911
|
+
/** 선택지 이미지 업로드. 반환 {@code imageUrl} 을 가공 없이 폼에 넣는다. */
|
|
1912
|
+
uploadVoteImage(roomId: string, file: File | Blob, options?: UploadVoteImageOptions): Promise<VoteImage>;
|
|
1724
1913
|
/** 방 PM 프롬프트 레이어 조회 — PM_BACKSTAGE 방 전용, 참여자 전체. 미등록 시 404. */
|
|
1725
1914
|
getRoomPmPrompt(roomId: string): Promise<PmPromptLayerResponse>;
|
|
1726
1915
|
/** 방 PM 프롬프트 레이어 등록/수정 (upsert, 새 버전 자동 기록) — 방 주인(OWNER) 전용. content 1~2,000자. */
|
|
@@ -2089,6 +2278,24 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
2089
2278
|
refreshSummary(roomId: string, options?: RefreshSummaryOptions): Promise<RefreshSummaryResult>;
|
|
2090
2279
|
/** Rolling 누적 요약 조회 — rollup + segment 페이지. 저장된 요약의 단일 진실 소스. */
|
|
2091
2280
|
getSummary(roomId: string, options?: GetSummaryOptions): Promise<RoomSummaryView>;
|
|
2281
|
+
|
|
2282
|
+
// ── 투표 ──
|
|
2283
|
+
/** 투표 생성. {@code idempotencyKey} 필수 — 재시도에 같은 값을 넘겨야 투표가 두 개 안 생긴다. */
|
|
2284
|
+
createVote(roomId: string, vote: VoteForm, options: CreateVoteOptions): Promise<Vote>;
|
|
2285
|
+
/** 방의 투표 목록(최신순). 집계는 없고 참여자 수만 있다. */
|
|
2286
|
+
getVotes(roomId: string, options?: GetVotesOptions): Promise<VoteList>;
|
|
2287
|
+
/** 투표 단건 + 집계. 마스킹이 호출자마다 다르므로 공유 캐시에 넣지 않는다. */
|
|
2288
|
+
getVote(roomId: string, voteId: string): Promise<Vote>;
|
|
2289
|
+
/** 투표 수정 — 폼 전체를 보낸다. 개설자 + 참여자 0명일 때만. */
|
|
2290
|
+
updateVote(roomId: string, voteId: string, vote: VoteForm): Promise<Vote>;
|
|
2291
|
+
/** 투표 삭제(204). 이미 발행된 카드는 남고 조회가 404 가 된다. */
|
|
2292
|
+
deleteVote(roomId: string, voteId: string): Promise<void>;
|
|
2293
|
+
/** 수동 마감(204). 결과를 보려면 {@link getVote} 를 다시 호출한다. */
|
|
2294
|
+
closeVote(roomId: string, voteId: string): Promise<void>;
|
|
2295
|
+
/** 투표 접수 · 재투표 — 같은 메서드. 응답에 갱신된 집계가 함께 온다. */
|
|
2296
|
+
submitVote(roomId: string, voteId: string, optionIds: string[]): Promise<Vote>;
|
|
2297
|
+
/** 선택지 이미지 업로드. 반환 {@code imageUrl} 을 가공 없이 폼에 넣는다. */
|
|
2298
|
+
uploadVoteImage(roomId: string, file: File | Blob, options?: UploadVoteImageOptions): Promise<VoteImage>;
|
|
2092
2299
|
/** 방 PM 프롬프트 레이어 조회 — PM_BACKSTAGE 방 전용, 참여자 전체. 미등록 시 404. */
|
|
2093
2300
|
getRoomPmPrompt(roomId: string): Promise<PmPromptLayerResponse>;
|
|
2094
2301
|
/** 방 PM 프롬프트 레이어 등록/수정 (upsert, 새 버전 자동 기록) — 방 주인(OWNER) 전용. content 1~2,000자. */
|