@vibexnpm/talkx 8.5.0 → 8.7.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 -13
- 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/TalkFlowClient.js +21 -9
- package/src/auth/AuthSession.js +27 -2
- package/src/chat/ChatClient.js +54 -19
- package/src/constants.js +1 -0
- package/src/core/ConnectionManager.js +166 -63
- package/src/index.js +1 -0
- package/src/talkflow/eventForwarding.js +1 -0
- package/src/talkflow/session.js +3 -0
- package/src/webrtc/PeerConnectionManager.js +10 -1
- package/src/webrtc/WebRTCClient.js +287 -28
- package/types/__typetests__/authSession.types.ts +23 -1
- package/types/index.d.ts +62 -13
package/dist/index.d.ts
CHANGED
|
@@ -577,6 +577,7 @@ export const DefaultConfig: {
|
|
|
577
577
|
readonly environment: EnvironmentValue;
|
|
578
578
|
readonly reconnectDelay: number;
|
|
579
579
|
readonly maxReconnectAttempts: number;
|
|
580
|
+
readonly reconnectRecoveryDelay: number;
|
|
580
581
|
readonly heartbeatIncoming: number;
|
|
581
582
|
readonly heartbeatOutgoing: number;
|
|
582
583
|
readonly apiTimeout: number;
|
|
@@ -1043,14 +1044,20 @@ export interface DecisionResponse {
|
|
|
1043
1044
|
optionId: string;
|
|
1044
1045
|
}
|
|
1045
1046
|
|
|
1047
|
+
/**
|
|
1048
|
+
* 회사 역할. `GUEST` 는 회사 밖에서 초대받아 그 회사 계정을 가진 사람이다 — 초대받은 방에서 채팅만 하고 PM·AI 버튼·조직도·
|
|
1049
|
+
* 방 만들기·초대 등은 서버가 막는다(403 `GUEST_FORBIDDEN`). 화면 노출 판단용이며 인가 근거는 아니다.
|
|
1050
|
+
*/
|
|
1051
|
+
export type CompanyRole = 'PARTNER' | 'MEMBER' | 'GUEST';
|
|
1052
|
+
|
|
1046
1053
|
/** 로그인한 회원. `userId` 는 메시지 발신자 식별과 같은 값이다. */
|
|
1047
1054
|
export interface LoginMember {
|
|
1048
1055
|
userId: string;
|
|
1049
1056
|
email?: string | null;
|
|
1050
1057
|
nickname?: string | null;
|
|
1051
1058
|
profileUrl?: string | null;
|
|
1052
|
-
/** 회사 역할 — 클라이언트가
|
|
1053
|
-
companyRole:
|
|
1059
|
+
/** 회사 역할 — 클라이언트가 파트너·게스트 화면 노출을 결정한다. 인가 근거는 아니다(서버가 재확인). */
|
|
1060
|
+
companyRole: CompanyRole;
|
|
1054
1061
|
preferredLanguage?: string | null;
|
|
1055
1062
|
/**
|
|
1056
1063
|
* 초기 비밀번호를 아직 안 바꿨는가 — `true` 면 **비밀번호 변경 화면으로 보내라**.
|
|
@@ -1062,11 +1069,11 @@ export interface LoginMember {
|
|
|
1062
1069
|
}
|
|
1063
1070
|
|
|
1064
1071
|
/**
|
|
1065
|
-
* `TalkFlowClient.loginUser` 응답.
|
|
1066
|
-
*
|
|
1067
|
-
* 회사 선택 단계가 없다 — 로그인 키가 전역 유일이라 이메일 하나로 회원과 회사가 함께 정해진다.
|
|
1072
|
+
* `TalkFlowClient.loginUser` 의 로그인 성공 응답. 회사 선택이 필요하면 대신 {@link WorkspaceSelection} 이 온다 —
|
|
1073
|
+
* `workspaceSelectionRequired` 로 가른다.
|
|
1068
1074
|
*/
|
|
1069
1075
|
export interface LoginResult {
|
|
1076
|
+
workspaceSelectionRequired?: false;
|
|
1070
1077
|
/** SDK가 저장·회전하는 갱신 자격. 직접 API를 쓰는 경우에만 응답에서 사용한다. */
|
|
1071
1078
|
refreshToken?: string;
|
|
1072
1079
|
/** 서버 현재 시각 및 refresh 만료 시각, Unix epoch 밀리초. */
|
|
@@ -1082,6 +1089,23 @@ export interface LoginResult {
|
|
|
1082
1089
|
user: LoginMember;
|
|
1083
1090
|
}
|
|
1084
1091
|
|
|
1092
|
+
/** 로그인 회사 선택지 하나. */
|
|
1093
|
+
export interface Workspace {
|
|
1094
|
+
projectId: string;
|
|
1095
|
+
companyName: string | null;
|
|
1096
|
+
/** 그 회사에서의 역할 — 선택 화면에 «게스트» 표시를 붙이는 데 쓴다. */
|
|
1097
|
+
companyRole: CompanyRole;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
/**
|
|
1101
|
+
* 로그인 회사 선택 결과 — 같은 이메일의 여러 회사 계정에서 비밀번호가 둘 이상 맞았다. **토큰이 없고 저장된 세션은 그대로다.**
|
|
1102
|
+
* 고른 `projectId` 를 실어 같은 이메일·비밀번호로 `loginUser` 를 다시 부른다.
|
|
1103
|
+
*/
|
|
1104
|
+
export interface WorkspaceSelection {
|
|
1105
|
+
workspaceSelectionRequired: true;
|
|
1106
|
+
workspaces: Workspace[];
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1085
1109
|
/** 회사 조직도의 회원 — 초대 UI 에 필요한 것만. */
|
|
1086
1110
|
export interface DirectoryMember {
|
|
1087
1111
|
userId: string;
|
|
@@ -1123,7 +1147,7 @@ export interface MyProfile {
|
|
|
1123
1147
|
phone?: string | null;
|
|
1124
1148
|
profileUrl?: string | null;
|
|
1125
1149
|
/** 회사 역할 — 방 역할(ParticipantResponse.role)과 다른 축이다. */
|
|
1126
|
-
companyRole:
|
|
1150
|
+
companyRole: CompanyRole;
|
|
1127
1151
|
orgNodeId?: string | null;
|
|
1128
1152
|
orgName?: string | null;
|
|
1129
1153
|
preferredLanguage?: string | null;
|
|
@@ -1169,6 +1193,10 @@ export interface ParticipantResponse {
|
|
|
1169
1193
|
role: 'OWNER' | 'ADMIN' | 'MEMBER' | 'ASSISTANT';
|
|
1170
1194
|
/** 참가 시각(epoch millis). */
|
|
1171
1195
|
joinedAt: number;
|
|
1196
|
+
/**
|
|
1197
|
+
* 회사 역할 — 게스트 배지(`GUEST`)용. 방 역할({@link role})과 다른 축이다. PM(ASSISTANT)·정보를 못 찾은 참여자는 없다.
|
|
1198
|
+
*/
|
|
1199
|
+
companyRole?: CompanyRole;
|
|
1172
1200
|
}
|
|
1173
1201
|
|
|
1174
1202
|
/** 채팅방 last message preview. */
|
|
@@ -1279,6 +1307,8 @@ export interface RoomListMemberInfo {
|
|
|
1279
1307
|
userId: string;
|
|
1280
1308
|
nickname?: string | null;
|
|
1281
1309
|
profileUrl?: string | null;
|
|
1310
|
+
/** 회사 역할 — 방금 들어온 게스트에도 다시 읽지 않고 배지를 그린다. PM·역할을 모르는 경로는 없다. */
|
|
1311
|
+
companyRole?: CompanyRole;
|
|
1282
1312
|
}
|
|
1283
1313
|
|
|
1284
1314
|
export interface RoomListUpdateEvent {
|
|
@@ -1609,6 +1639,8 @@ export interface TalkFlowClientOptions {
|
|
|
1609
1639
|
maxReconnectDelay?: number;
|
|
1610
1640
|
/** 최대 재연결 시도. 기본 10. */
|
|
1611
1641
|
maxReconnectAttempts?: number;
|
|
1642
|
+
/** 기존 연결의 재시도 소진 후 자동 복구 대기(ms, 기본 60000, ±20% 지터). 0이면 비활성화. */
|
|
1643
|
+
reconnectRecoveryDelay?: number;
|
|
1612
1644
|
/** 수신 하트비트 간격 (ms). 기본 10000. */
|
|
1613
1645
|
heartbeatIncoming?: number;
|
|
1614
1646
|
/** 발신 하트비트 간격 (ms). 기본 10000. */
|
|
@@ -1931,7 +1963,7 @@ export interface ChatMessageReceivedPayload {
|
|
|
1931
1963
|
|
|
1932
1964
|
export interface MemberChangePayload {
|
|
1933
1965
|
roomId: string;
|
|
1934
|
-
members: Array<{ userId: string; nickname?: string; profileUrl?: string | null }>;
|
|
1966
|
+
members: Array<{ userId: string; nickname?: string; profileUrl?: string | null; companyRole?: CompanyRole }>;
|
|
1935
1967
|
participantCount: number;
|
|
1936
1968
|
timestamp?: number;
|
|
1937
1969
|
}
|
|
@@ -2093,6 +2125,8 @@ export interface TalkFlowClientEvents {
|
|
|
2093
2125
|
mediaStateChanged: unknown;
|
|
2094
2126
|
callStarted: unknown;
|
|
2095
2127
|
callEnded: unknown;
|
|
2128
|
+
/** 그룹 통화 재참가가 불가능해 로컬 통화를 종료한 경우. */
|
|
2129
|
+
callRecoveryFailed: { roomId: string; error: unknown };
|
|
2096
2130
|
callRequested: unknown;
|
|
2097
2131
|
callAccepted: unknown;
|
|
2098
2132
|
callRejected: unknown;
|
|
@@ -2186,6 +2220,8 @@ export interface WebRTCClientEvents {
|
|
|
2186
2220
|
error: unknown;
|
|
2187
2221
|
callStarted: unknown;
|
|
2188
2222
|
callEnded: unknown;
|
|
2223
|
+
/** 그룹 통화 재참가가 불가능해 로컬 통화를 종료한 경우. */
|
|
2224
|
+
callRecoveryFailed: { roomId: string; error: unknown };
|
|
2189
2225
|
callRequested: unknown;
|
|
2190
2226
|
callAccepted: unknown;
|
|
2191
2227
|
callRejected: unknown;
|
|
@@ -2394,6 +2430,13 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
2394
2430
|
resumeAssistantStreams(reason?: string): Promise<void>;
|
|
2395
2431
|
}
|
|
2396
2432
|
|
|
2433
|
+
/** POST /api/v1/webrtc/rooms 요청. 생략한 값은 서버 기본값을 사용합니다. */
|
|
2434
|
+
export interface CreateCallRoomRequest {
|
|
2435
|
+
invitedUsers?: string[];
|
|
2436
|
+
title?: string;
|
|
2437
|
+
maxParticipants?: number;
|
|
2438
|
+
}
|
|
2439
|
+
|
|
2397
2440
|
export class WebRTCClient implements SdkEventEmitter<WebRTCClientEvents> {
|
|
2398
2441
|
on<K extends keyof WebRTCClientEvents>(event: K, listener: (payload: WebRTCClientEvents[K]) => void): () => void;
|
|
2399
2442
|
once<K extends keyof WebRTCClientEvents>(event: K, listener: (payload: WebRTCClientEvents[K]) => void): () => void;
|
|
@@ -2405,7 +2448,7 @@ export class WebRTCClient implements SdkEventEmitter<WebRTCClientEvents> {
|
|
|
2405
2448
|
initializeIceServers(): Promise<RTCIceServer[]>;
|
|
2406
2449
|
getTurnCredentials(): Promise<{ iceServers: RTCIceServer[] }>;
|
|
2407
2450
|
|
|
2408
|
-
createCallRoom(data:
|
|
2451
|
+
createCallRoom(data: CreateCallRoomRequest): Promise<unknown>;
|
|
2409
2452
|
getCallRoom(roomId: string): Promise<unknown>;
|
|
2410
2453
|
joinCallRoomApi(roomId: string): Promise<unknown>;
|
|
2411
2454
|
leaveCallRoomApi(roomId: string): Promise<unknown>;
|
|
@@ -2588,16 +2631,18 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
2588
2631
|
/**
|
|
2589
2632
|
* 회원 로그인 — 클라이언트 생성 **전에** 호출한다. Server Key 도 고객사 BFF 도 필요 없다.
|
|
2590
2633
|
* 응답의 `clientKey`/`projectId`/`accessToken` 이 그대로 SDK 초기화 입력이다.
|
|
2591
|
-
* 회사
|
|
2634
|
+
* 같은 이메일로 비밀번호가 맞는 회사 계정이 둘 이상이면 {@link WorkspaceSelection} 이 온다 — 고른 `projectId` 로 다시 부른다.
|
|
2592
2635
|
*/
|
|
2593
2636
|
static loginUser(options: {
|
|
2594
2637
|
serverUrl: string;
|
|
2595
2638
|
email: string;
|
|
2596
2639
|
password: string;
|
|
2597
|
-
|
|
2640
|
+
/** 회사 선택 응답에서 고른 회사. */
|
|
2641
|
+
projectId?: string;
|
|
2642
|
+
}): Promise<LoginResult | WorkspaceSelection>;
|
|
2598
2643
|
|
|
2599
|
-
/** 회원 로그인 (인스턴스) — 재로그인·계정 전환용. 성공 시 토큰을 자동 설정한다. */
|
|
2600
|
-
loginUser(credentials: { email: string; password: string }): Promise<LoginResult>;
|
|
2644
|
+
/** 회원 로그인 (인스턴스) — 재로그인·계정 전환용. 성공 시 토큰을 자동 설정한다. 회사 선택 결과면 토큰을 설정하지 않는다. */
|
|
2645
|
+
loginUser(credentials: { email: string; password: string; projectId?: string }): Promise<LoginResult | WorkspaceSelection>;
|
|
2601
2646
|
|
|
2602
2647
|
/** localStorage의 refresh로 복구. 세션이 없으면 null, 네트워크/서버 장애는 reject. */
|
|
2603
2648
|
static restoreSession(options: { serverUrl: string }): Promise<LoginResult | null>;
|
|
@@ -2631,6 +2676,10 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
2631
2676
|
changeMyPassword(params: { currentPassword: string; newPassword: string }): Promise<unknown>;
|
|
2632
2677
|
|
|
2633
2678
|
// Connection lifecycle
|
|
2679
|
+
/**
|
|
2680
|
+
* 연결 완료까지 기다립니다. 이전 연결의 자동 복구가 이어지는 동안 재시도 한도 소진으로 reject하지 않습니다.
|
|
2681
|
+
* 복구 연결 시 resolve하며, 명시적 disconnect·인증 종료·최초 연결 실패 시 reject합니다.
|
|
2682
|
+
*/
|
|
2634
2683
|
connect(jwt?: string, options?: ConnectOptions): Promise<void>;
|
|
2635
2684
|
disconnect(): Promise<void>;
|
|
2636
2685
|
logout(): Promise<void>;
|
|
@@ -2859,7 +2908,7 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
2859
2908
|
initializeIceServers(): Promise<RTCIceServer[]>;
|
|
2860
2909
|
getTurnCredentials(): Promise<{ iceServers: RTCIceServer[] }>;
|
|
2861
2910
|
|
|
2862
|
-
createCallRoom(data:
|
|
2911
|
+
createCallRoom(data: CreateCallRoomRequest): Promise<unknown>;
|
|
2863
2912
|
getCallRoom(roomId: string): Promise<unknown>;
|
|
2864
2913
|
joinCallRoomApi(roomId: string): Promise<unknown>;
|
|
2865
2914
|
leaveCallRoomApi(roomId: string): Promise<unknown>;
|