@vibexnpm/talkx 8.13.0 → 9.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/README.md +3 -2
- package/dist/index.d.ts +708 -155
- 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 +4 -2
- package/src/TalkFlowClient.js +13 -5
- package/src/chat/ChatClient.js +159 -2
- package/src/constants.js +52 -41
- package/src/core/ConnectionManager.js +11 -1
- package/src/index.js +5 -4
- package/src/talkflow/delegates.js +19 -23
- package/src/talkflow/eventForwarding.js +11 -23
- package/src/talkflow/session.js +37 -4
- package/src/utils/ApiClient.js +45 -41
- package/src/webrtc/CallLedger.js +135 -0
- package/src/webrtc/LiveKitMediaSession.js +1568 -0
- package/src/webrtc/WebRTCClient.js +909 -1068
- package/types/__typetests__/call.types.ts +101 -0
- package/types/__typetests__/roomOrigin.types.ts +32 -0
- package/types/__typetests__/scheduledReports.types.ts +138 -0
- package/types/index.d.ts +708 -155
- package/src/webrtc/MediaStreamManager.js +0 -478
- package/src/webrtc/PeerConnectionManager.js +0 -476
package/dist/index.d.ts
CHANGED
|
@@ -39,37 +39,48 @@ export const ErrorTypes: {
|
|
|
39
39
|
readonly CHAT_SUBSCRIPTION_FAILED: 'CHAT_SUBSCRIPTION_FAILED';
|
|
40
40
|
readonly MEDIA_ACCESS_DENIED: 'MEDIA_ACCESS_DENIED';
|
|
41
41
|
readonly SCREEN_SHARE_DENIED: 'SCREEN_SHARE_DENIED';
|
|
42
|
-
readonly
|
|
43
|
-
readonly ICE_CONNECTION_FAILED: 'ICE_CONNECTION_FAILED';
|
|
44
|
-
readonly SIGNALING_FAILED: 'SIGNALING_FAILED';
|
|
42
|
+
readonly MEDIA_CONNECTION_FAILED: 'MEDIA_CONNECTION_FAILED';
|
|
45
43
|
readonly DEVICE_SWITCH_FAILED: 'DEVICE_SWITCH_FAILED';
|
|
46
44
|
readonly ENUMERATE_DEVICES_FAILED: 'ENUMERATE_DEVICES_FAILED';
|
|
47
45
|
readonly CALL_ROOM_NOT_FOUND: 'CALL_ROOM_NOT_FOUND';
|
|
46
|
+
readonly CALL_ALREADY_ACTIVE: 'CALL_ALREADY_ACTIVE';
|
|
47
|
+
readonly NO_ACTIVE_CALL: 'NO_ACTIVE_CALL';
|
|
48
48
|
readonly INVALID_STATE: 'INVALID_STATE';
|
|
49
49
|
readonly UNKNOWN_ERROR: 'UNKNOWN_ERROR';
|
|
50
50
|
};
|
|
51
51
|
export type ErrorTypeValue = typeof ErrorTypes[keyof typeof ErrorTypes];
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
readonly
|
|
59
|
-
readonly
|
|
60
|
-
readonly
|
|
61
|
-
readonly
|
|
62
|
-
readonly
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
readonly
|
|
68
|
-
readonly
|
|
69
|
-
readonly CALL_END: 'call_end';
|
|
70
|
-
readonly CALL_INVITATION: 'call_invitation';
|
|
71
|
-
readonly CALL_BUSY: 'call_busy';
|
|
53
|
+
/**
|
|
54
|
+
* 서버 → 클라이언트 통화 이벤트 종류(서버 WebRTCMessageType). 클라이언트는 통화 신호를 보내지 않는다 — 통화 제어는 REST, 미디어는
|
|
55
|
+
* LiveKit(v9.0.0).
|
|
56
|
+
*/
|
|
57
|
+
export const CallEventTypes: {
|
|
58
|
+
readonly INVITATION: 'call_invitation';
|
|
59
|
+
readonly ANSWERED: 'call_answered';
|
|
60
|
+
readonly REJECT: 'call_reject';
|
|
61
|
+
readonly CANCEL: 'call_cancel';
|
|
62
|
+
readonly END: 'call_end';
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/** 통화 종류. */
|
|
66
|
+
export const CallKind: {
|
|
67
|
+
readonly DIRECT: 'DIRECT';
|
|
68
|
+
readonly GROUP: 'GROUP';
|
|
72
69
|
};
|
|
70
|
+
export type CallKindValue = typeof CallKind[keyof typeof CallKind];
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 통화 상태 — ringing(받는 쪽 울림)·connecting(입장·미디어 접속 중)·connected·reconnecting(LiveKit 재접속 또는 «제거됨» 뒤 다시
|
|
74
|
+
* 입장 중)·ended.
|
|
75
|
+
*/
|
|
76
|
+
export const CallState: {
|
|
77
|
+
readonly RINGING: 'ringing';
|
|
78
|
+
readonly CONNECTING: 'connecting';
|
|
79
|
+
readonly CONNECTED: 'connected';
|
|
80
|
+
readonly RECONNECTING: 'reconnecting';
|
|
81
|
+
readonly ENDED: 'ended';
|
|
82
|
+
};
|
|
83
|
+
export type CallStateValue = typeof CallState[keyof typeof CallState];
|
|
73
84
|
|
|
74
85
|
/**
|
|
75
86
|
* SDK 가 런타임에 export 하는 ChatMessageType 상수.
|
|
@@ -132,6 +143,15 @@ export const ChatRoomType: {
|
|
|
132
143
|
};
|
|
133
144
|
export type ChatRoomTypeValue = typeof ChatRoomType[keyof typeof ChatRoomType];
|
|
134
145
|
|
|
146
|
+
/** 방이 생긴 경위 — 사람이 만든 방({@code USER}) · 예약 보고 전용 방({@code SCHEDULED_REPORT}). */
|
|
147
|
+
export const ChatRoomOrigin: {
|
|
148
|
+
/** 사람이 만든 방 — {@link CursorPageParams.origin} 거르기 값. 방 응답에는 칸이 오지 않는다. */
|
|
149
|
+
readonly USER: 'USER';
|
|
150
|
+
/** 예약 보고가 만든 전용 방. */
|
|
151
|
+
readonly SCHEDULED_REPORT: 'SCHEDULED_REPORT';
|
|
152
|
+
};
|
|
153
|
+
export type ChatRoomOriginValue = typeof ChatRoomOrigin[keyof typeof ChatRoomOrigin];
|
|
154
|
+
|
|
135
155
|
export const AssistantMode: {
|
|
136
156
|
readonly GENERAL: 'GENERAL';
|
|
137
157
|
readonly PEOPLE_ONLY: 'PEOPLE_ONLY';
|
|
@@ -573,7 +593,6 @@ export const WebSocketPaths: {
|
|
|
573
593
|
readonly CHAT_SEND: string;
|
|
574
594
|
readonly CHAT_READ: string;
|
|
575
595
|
readonly CHAT_TYPING: string;
|
|
576
|
-
readonly WEBRTC_SIGNAL: string;
|
|
577
596
|
};
|
|
578
597
|
|
|
579
598
|
export const DefaultConfig: {
|
|
@@ -584,7 +603,8 @@ export const DefaultConfig: {
|
|
|
584
603
|
readonly heartbeatIncoming: number;
|
|
585
604
|
readonly heartbeatOutgoing: number;
|
|
586
605
|
readonly apiTimeout: number;
|
|
587
|
-
|
|
606
|
+
/** 받는 쪽 울림을 스스로 끄는 시각(ms) — 서버 울림 상한 60초 + 여유. */
|
|
607
|
+
readonly callRingTimeoutMs: number;
|
|
588
608
|
readonly logLevel: LogLevelValue;
|
|
589
609
|
};
|
|
590
610
|
|
|
@@ -1245,6 +1265,8 @@ export interface ChatRoomResponse {
|
|
|
1245
1265
|
assistantMode?: AssistantModeValue;
|
|
1246
1266
|
/** 방 AI 사용 방식 (상위 SSOT). 구버전 서버 응답에서는 없을 수 있음. */
|
|
1247
1267
|
roomAiType?: RoomAiTypeValue;
|
|
1268
|
+
/** 방이 생긴 경위 — 예약 보고 전용 방만 값이 있다. 없으면 사람이 만든 방이다. */
|
|
1269
|
+
origin?: 'SCHEDULED_REPORT';
|
|
1248
1270
|
/** PM 개입 강도 (PM_BACKSTAGE 방 전용). 그 외 방 타입/구버전 응답에서는 없을 수 있음. */
|
|
1249
1271
|
engagementIntensity?: EngagementIntensityValue;
|
|
1250
1272
|
roomName: string;
|
|
@@ -1399,6 +1421,219 @@ export interface PmReportDetail extends PmReport {
|
|
|
1399
1421
|
contentLength: number;
|
|
1400
1422
|
}
|
|
1401
1423
|
|
|
1424
|
+
// ── 예약 보고 (getScheduledReports / createScheduledReport / updateScheduledReport ...) ──
|
|
1425
|
+
|
|
1426
|
+
/** 예약 작업 종류 — 자료조사({@code RESEARCH}) · 방 정리({@code ROOM_DIGEST}). 만든 뒤 못 바꾼다. */
|
|
1427
|
+
export type ScheduledTaskKind = 'RESEARCH' | 'ROOM_DIGEST';
|
|
1428
|
+
|
|
1429
|
+
/** 방 정리 기간 — 예정 시각에서 거슬러 올라가는 길이. */
|
|
1430
|
+
export type ScheduledReportPeriod = 'LAST_24_HOURS' | 'LAST_7_DAYS';
|
|
1431
|
+
|
|
1432
|
+
/** 자료조사 작업 칸 — 지시문으로 웹 조사를 맡기고, PM 이 결과를 전용 방에 보고한다. */
|
|
1433
|
+
export interface ResearchReportSpec {
|
|
1434
|
+
kind: 'RESEARCH';
|
|
1435
|
+
/** 지시문 (1~2,000자). */
|
|
1436
|
+
instruction: string;
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
/** 방 정리 작업 칸 — 원천 방의 지난 기간 대화를 정리해 전용 방에 올린다. */
|
|
1440
|
+
export interface RoomDigestReportSpec {
|
|
1441
|
+
kind: 'ROOM_DIGEST';
|
|
1442
|
+
/** 원천 방 — {@link ChatClient.getScheduledReportSourceRooms} 에서 고른다. 만든 뒤 못 바꾼다. */
|
|
1443
|
+
sourceRoomId: string;
|
|
1444
|
+
period: ScheduledReportPeriod;
|
|
1445
|
+
format: SummarizeFormatValue;
|
|
1446
|
+
/** 특히 볼 내용 (0~500자, 선택). */
|
|
1447
|
+
focus?: string;
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
/** 작업 칸 — {@code kind} 로 가른다. 요청과 응답이 같은 모양이다. */
|
|
1451
|
+
export type ScheduledReportSpec = ResearchReportSpec | RoomDigestReportSpec;
|
|
1452
|
+
|
|
1453
|
+
/** 요일 — 대문자 영어 이름 그대로. */
|
|
1454
|
+
export type ScheduledReportDay = 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY';
|
|
1455
|
+
|
|
1456
|
+
/** 매일({@code DAILY}) · 평일({@code WEEKDAYS}, 월~금 · 공휴일을 빼지 않는다) — 요일을 받지 않는다. */
|
|
1457
|
+
export interface ScheduledReportDailyCadence {
|
|
1458
|
+
type: 'DAILY' | 'WEEKDAYS';
|
|
1459
|
+
/** 보내지 않아도 된다. 요일을 넣으면 400 {@code SCHEDULED_REPORT_CADENCE_INVALID}. */
|
|
1460
|
+
days?: [];
|
|
1461
|
+
/** 시각 {@code HH:mm} — {@code zoneId} 기준. */
|
|
1462
|
+
time: string;
|
|
1463
|
+
/** IANA 시간대({@code Asia/Seoul}). 비우면 만들기는 내 프로필 시간대, 고치기는 지금 시간대. */
|
|
1464
|
+
zoneId?: string;
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
/** 고른 요일마다({@code WEEKLY}). */
|
|
1468
|
+
export interface ScheduledReportWeeklyCadence {
|
|
1469
|
+
type: 'WEEKLY';
|
|
1470
|
+
/** 요일 1~7개, 중복 불가. */
|
|
1471
|
+
days: ScheduledReportDay[];
|
|
1472
|
+
/** 시각 {@code HH:mm} — {@code zoneId} 기준. */
|
|
1473
|
+
time: string;
|
|
1474
|
+
/** IANA 시간대({@code Asia/Seoul}). 비우면 만들기는 내 프로필 시간대, 고치기는 지금 시간대. */
|
|
1475
|
+
zoneId?: string;
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
/** 요청의 주기 — {@code type} 으로 가른다. */
|
|
1479
|
+
export type ScheduledReportCadence = ScheduledReportDailyCadence | ScheduledReportWeeklyCadence;
|
|
1480
|
+
|
|
1481
|
+
/** 응답의 주기 — 요일은 늘 배열이고(매일·평일은 빈 배열, 주간은 월요일부터) 시간대는 늘 있다. 그대로 다시 보낼 수 있다. */
|
|
1482
|
+
export type ScheduledReportCadenceResponse =
|
|
1483
|
+
| (ScheduledReportDailyCadence & { days: []; zoneId: string })
|
|
1484
|
+
| (ScheduledReportWeeklyCadence & { zoneId: string });
|
|
1485
|
+
|
|
1486
|
+
/** 예약 상태 — {@code PAUSED} 면 회차를 만들지 않는다. */
|
|
1487
|
+
export type ScheduledReportStatus = 'ACTIVE' | 'PAUSED';
|
|
1488
|
+
|
|
1489
|
+
/** 예약이 멈춘 사유 — 만든 사람이 멈췄거나({@code USER}), 회차가 더 돌릴 수 없다고 봤다. */
|
|
1490
|
+
export type ScheduledReportPauseReason =
|
|
1491
|
+
| 'USER'
|
|
1492
|
+
| 'OWNER_INACTIVE'
|
|
1493
|
+
| 'OWNER_NOT_IN_ROOM'
|
|
1494
|
+
| 'ROOM_UNAVAILABLE'
|
|
1495
|
+
| 'PM_UNAVAILABLE'
|
|
1496
|
+
| 'SOURCE_UNAVAILABLE'
|
|
1497
|
+
| 'INVALID';
|
|
1498
|
+
|
|
1499
|
+
/** 예약 한 건 — 시각은 UTC ISO-8601 문자열({@code 2026-10-30T00:30:00Z})이다. */
|
|
1500
|
+
export interface ScheduledReport {
|
|
1501
|
+
id: string;
|
|
1502
|
+
title: string;
|
|
1503
|
+
spec: ScheduledReportSpec;
|
|
1504
|
+
cadence: ScheduledReportCadenceResponse;
|
|
1505
|
+
deliveryRoomIds: string[];
|
|
1506
|
+
/** 결과가 올라가는 전용 방 — 방 목록·초대는 이 id 로 기존 방 API 를 쓴다. */
|
|
1507
|
+
homeRoomId: string;
|
|
1508
|
+
status: ScheduledReportStatus;
|
|
1509
|
+
/** 멈췄을 때만 있다. */
|
|
1510
|
+
pauseReason?: ScheduledReportPauseReason;
|
|
1511
|
+
/** 다음 예정 시각. */
|
|
1512
|
+
nextRunAt: string;
|
|
1513
|
+
createdAt: string;
|
|
1514
|
+
updatedAt: string;
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
/** 회차 상태 — {@code PENDING}·{@code CLAIMED}·{@code STARTED}·{@code DELIVERING} 은 진행 중, 나머지는 끝난 상태다. */
|
|
1518
|
+
export type ScheduledReportRunState =
|
|
1519
|
+
| 'PENDING'
|
|
1520
|
+
| 'CLAIMED'
|
|
1521
|
+
| 'STARTED'
|
|
1522
|
+
| 'DELIVERING'
|
|
1523
|
+
| 'DONE'
|
|
1524
|
+
| 'SKIPPED'
|
|
1525
|
+
| 'MISSED'
|
|
1526
|
+
| 'EXPIRED'
|
|
1527
|
+
| 'FAILED';
|
|
1528
|
+
|
|
1529
|
+
/** 회차가 {@code SKIPPED}·{@code FAILED} 로 끝난 사유. */
|
|
1530
|
+
export type ScheduledReportRunEndReason =
|
|
1531
|
+
| 'REPORT_DELETED'
|
|
1532
|
+
| 'REPORT_PAUSED'
|
|
1533
|
+
| 'OWNER_INACTIVE'
|
|
1534
|
+
| 'OWNER_NOT_IN_ROOM'
|
|
1535
|
+
| 'ROOM_UNAVAILABLE'
|
|
1536
|
+
| 'PM_UNAVAILABLE'
|
|
1537
|
+
| 'SOURCE_UNAVAILABLE'
|
|
1538
|
+
| 'NOT_SUBSCRIBED'
|
|
1539
|
+
| 'NO_CREDIT'
|
|
1540
|
+
| 'SOURCE_CHANGED'
|
|
1541
|
+
| 'PUBLISH_EXPIRED'
|
|
1542
|
+
| 'TASK_FAILED'
|
|
1543
|
+
| 'TASK_TIMEOUT'
|
|
1544
|
+
| 'START_FAILED';
|
|
1545
|
+
|
|
1546
|
+
/** 방 정리의 결과 종류 — 보고 · 새 대화 없음 · 실패 안내. */
|
|
1547
|
+
export type ScheduledReportResultKind = 'REPORT' | 'NO_DATA' | 'FAILURE';
|
|
1548
|
+
|
|
1549
|
+
/** 보낼 방 복사 상태. */
|
|
1550
|
+
export type ScheduledReportDeliveryState = 'PENDING' | 'DELIVERED' | 'SKIPPED' | 'EXPIRED';
|
|
1551
|
+
|
|
1552
|
+
/** 보낼 방 하나를 건너뛴 사유. */
|
|
1553
|
+
export type ScheduledReportDeliverySkipReason = 'ROOM_NOT_ELIGIBLE' | 'SOURCE_CHANGED' | 'REMOVED_FROM_REPORT' | 'REPORT_DELETED';
|
|
1554
|
+
|
|
1555
|
+
/** 보낼 방 복사 하나. */
|
|
1556
|
+
export interface ScheduledReportRunDelivery {
|
|
1557
|
+
roomId: string;
|
|
1558
|
+
state: ScheduledReportDeliveryState;
|
|
1559
|
+
/** 복사한 글 — 끝났을 때만 있다. */
|
|
1560
|
+
messageId?: string;
|
|
1561
|
+
/** 건너뛰었을 때만 있다. */
|
|
1562
|
+
skipReason?: ScheduledReportDeliverySkipReason;
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
/** 회차 하나 — 언제 돌았고 어떻게 끝났나. */
|
|
1566
|
+
export interface ScheduledReportRun {
|
|
1567
|
+
id: string;
|
|
1568
|
+
/** 예정 시각 (UTC ISO-8601). */
|
|
1569
|
+
scheduledAt: string;
|
|
1570
|
+
state: ScheduledReportRunState;
|
|
1571
|
+
/** {@code SKIPPED}·{@code FAILED} 일 때만 있다. */
|
|
1572
|
+
endReason?: ScheduledReportRunEndReason;
|
|
1573
|
+
/** 방 정리의 확정 결과 — 자료조사이거나 확정 전이면 없다. */
|
|
1574
|
+
resultKind?: ScheduledReportResultKind;
|
|
1575
|
+
/** 결과 글 — 없으면 아직 안 올렸다. */
|
|
1576
|
+
resultMessageId?: string;
|
|
1577
|
+
deliveries: ScheduledReportRunDelivery[];
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
/** {@link ChatClient.getScheduledReport} 응답 — 예약과 최근 회차(예정 늦은 순, 최대 10개). */
|
|
1581
|
+
export interface ScheduledReportDetail {
|
|
1582
|
+
report: ScheduledReport;
|
|
1583
|
+
recentRuns: ScheduledReportRun[];
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
/** 예약 화면의 방 고르기 목록의 방 하나. */
|
|
1587
|
+
export interface ScheduledReportRoomOption {
|
|
1588
|
+
roomId: string;
|
|
1589
|
+
/** 화면 이름 — 1:1 은 상대 이름이고, 상대를 못 찾으면 없다. */
|
|
1590
|
+
name?: string;
|
|
1591
|
+
roomType?: ChatRoomTypeValue;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
/**
|
|
1595
|
+
* {@link ChatClient.getScheduledReportDeliveryRooms} 파라미터 — 고치기 화면은 {@code reportId}, 만들기 화면은 {@code kind}.
|
|
1596
|
+
* 방 정리는 원천 방으로만 보내므로 {@code sourceRoomId} 가 필요하다.
|
|
1597
|
+
*/
|
|
1598
|
+
export type ScheduledReportDeliveryRoomParams =
|
|
1599
|
+
| { reportId: string }
|
|
1600
|
+
| { kind: 'RESEARCH' }
|
|
1601
|
+
| { kind: 'ROOM_DIGEST'; sourceRoomId: string };
|
|
1602
|
+
|
|
1603
|
+
/** {@link ChatClient.createScheduledReport} 폼. */
|
|
1604
|
+
export interface CreateScheduledReportData {
|
|
1605
|
+
/** 제목 (앞뒤 공백을 뺀 1~50자). 전용 방 이름으로도 쓴다. */
|
|
1606
|
+
title: string;
|
|
1607
|
+
spec: ScheduledReportSpec;
|
|
1608
|
+
cadence: ScheduledReportCadence;
|
|
1609
|
+
/** 결과를 복사할 방 (0~3개) — {@link ChatClient.getScheduledReportDeliveryRooms} 에서 고른다. 비우면 보내지 않는다. */
|
|
1610
|
+
deliveryRoomIds?: string[];
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
/** {@link ChatClient.createScheduledReport} 옵션. */
|
|
1614
|
+
export interface CreateScheduledReportOptions {
|
|
1615
|
+
/**
|
|
1616
|
+
* 🔴 <b>필수.</b> SDK 가 대신 만들지 않는다 — 만들면 그 값이 호출자에게 남지 않아 응답만 유실된
|
|
1617
|
+
* 타임아웃에서 같은 키로 다시 보낼 수 없다(새 키는 예약과 방을 하나 더 만든다).
|
|
1618
|
+
*
|
|
1619
|
+
* <p>폼마다 한 번 만들어 보관하고, 재시도에는 <b>같은 값</b>을 넘긴다. 공백 없는 인쇄 가능 ASCII 1~200자.</p>
|
|
1620
|
+
*/
|
|
1621
|
+
idempotencyKey: string;
|
|
1622
|
+
}
|
|
1623
|
+
|
|
1624
|
+
/**
|
|
1625
|
+
* {@link ChatClient.updateScheduledReport} 칸 — 고칠 칸만 보낸다. {@code spec} 은 보내면 칸 전체이고 작업 종류·원천 방은
|
|
1626
|
+
* 지금 값과 같아야 한다. {@code cadence} 는 보내면 주기 전체다. {@code deliveryRoomIds} 는 보내면 목록 전체다(빈 배열 = 보내지 않음).
|
|
1627
|
+
*/
|
|
1628
|
+
export interface UpdateScheduledReportData {
|
|
1629
|
+
title?: string;
|
|
1630
|
+
spec?: ScheduledReportSpec;
|
|
1631
|
+
cadence?: ScheduledReportCadence;
|
|
1632
|
+
deliveryRoomIds?: string[];
|
|
1633
|
+
/** {@code PAUSED} = 멈추기 · {@code ACTIVE} = 다시 켜기. */
|
|
1634
|
+
status?: ScheduledReportStatus;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1402
1637
|
// ============================================================================
|
|
1403
1638
|
// Event payloads
|
|
1404
1639
|
// ============================================================================
|
|
@@ -1421,6 +1656,8 @@ export interface RoomMeta {
|
|
|
1421
1656
|
roomAiType?: RoomAiTypeValue;
|
|
1422
1657
|
/** ROOM_UPDATED 메타의 PM 개입 강도 (PM_BACKSTAGE 방 전용). */
|
|
1423
1658
|
engagementIntensity?: EngagementIntensityValue;
|
|
1659
|
+
/** ROOM_UPDATED 메타의 방 만든 경위 — 예약 보고 전용 방만 값이 있고, 사람이 만든 방은 {@code null} 이다. */
|
|
1660
|
+
origin?: 'SCHEDULED_REPORT' | null;
|
|
1424
1661
|
}
|
|
1425
1662
|
|
|
1426
1663
|
/** 채팅방 리스트 실시간 업데이트 이벤트. */
|
|
@@ -1820,8 +2057,8 @@ export interface TalkFlowClientOptions {
|
|
|
1820
2057
|
maxSyncPages?: number;
|
|
1821
2058
|
/** 갭 복구 페이지 크기. 기본 100. */
|
|
1822
2059
|
syncPageSize?: number;
|
|
1823
|
-
/**
|
|
1824
|
-
|
|
2060
|
+
/** 받는 쪽 울림을 스스로 끄는 시각(ms). 기본 65000 — 서버 «응답함»·«취소» 가 먼저 오면 그때 끈다. */
|
|
2061
|
+
callRingTimeoutMs?: number;
|
|
1825
2062
|
/** connect() 시 채팅방 리스트 자동 구독. 기본 true. */
|
|
1826
2063
|
autoSubscribeRoomList?: boolean;
|
|
1827
2064
|
/** 로그 레벨. 기본 WARN. */
|
|
@@ -1851,6 +2088,8 @@ export interface CursorPageParams {
|
|
|
1851
2088
|
lastSortValue?: number | string;
|
|
1852
2089
|
/** 방 리스트에서 타입 필터. */
|
|
1853
2090
|
type?: ChatRoomTypeValue;
|
|
2091
|
+
/** 방 리스트에서 만든 경위 필터. 커서 페이지라 클라이언트에서 거르면 뒤쪽 방을 놓친다. */
|
|
2092
|
+
origin?: ChatRoomOriginValue;
|
|
1854
2093
|
}
|
|
1855
2094
|
|
|
1856
2095
|
/**
|
|
@@ -2149,7 +2388,7 @@ export interface RetentionCleanupPayload {
|
|
|
2149
2388
|
* <p><b>Connection 관련</b>: stateChange, connected, disconnected, reconnecting, reconnected, resumed, subscriptionRequired, connectionError, tokenSet, loggedOut</p>
|
|
2150
2389
|
* <p><b>Chat 관련 (ChatClient 이벤트를 이 이름으로 re-emit)</b>: chatMessage, newChatMessage, messageUpdated, messageDeleted, reactionChanged, linkPreviewAttached, messageRead, typing, assistantProgress, memberJoined, memberLeft, roomSubscribed, roomUnsubscribed, roomListSubscribed, roomListUnsubscribed, roomListUpdate, roomListMessage, roomListCreated, roomListJoined, roomListLeft, roomListSelfLeft, roomListRoomUpdated, aiUnavailable, retentionCleanup</p>
|
|
2151
2390
|
* <p><b>Push 관련</b>: pushEnabled, pushFailed, pushNotification</p>
|
|
2152
|
-
* <p><b
|
|
2391
|
+
* <p><b>화상통화 관련(WebRTCClient 이벤트를 같은 이름으로 re-emit)</b>: incomingCall, ringStopped, callStateChanged, callEnded, callRejected, participantJoined, participantLeft, trackSubscribed, trackUnsubscribed, localTrackPublished, localTrackUnpublished, participantMediaChanged, callRecoveryFailed, callError</p>
|
|
2153
2392
|
*/
|
|
2154
2393
|
export interface TalkFlowClientEvents {
|
|
2155
2394
|
// Connection
|
|
@@ -2275,34 +2514,22 @@ export interface TalkFlowClientEvents {
|
|
|
2275
2514
|
/** Gmail 묶음 푸시(4통 이상) — 포그라운드. */
|
|
2276
2515
|
newMailSummary: NewMailSummaryEvent;
|
|
2277
2516
|
|
|
2278
|
-
//
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
callInvitation: unknown;
|
|
2295
|
-
callBusy: unknown;
|
|
2296
|
-
incomingCall: unknown;
|
|
2297
|
-
incomingCallWhileBusy: unknown;
|
|
2298
|
-
userJoined: unknown;
|
|
2299
|
-
userLeft: unknown;
|
|
2300
|
-
participantLeft: unknown;
|
|
2301
|
-
participantMediaState: unknown;
|
|
2302
|
-
peerConnected: unknown;
|
|
2303
|
-
peerDisconnected: unknown;
|
|
2304
|
-
peerClosed: unknown;
|
|
2305
|
-
webrtcError: unknown;
|
|
2517
|
+
// 화상통화 (re-emit from WebRTCClient)
|
|
2518
|
+
incomingCall: IncomingCallEvent;
|
|
2519
|
+
ringStopped: RingStoppedEvent;
|
|
2520
|
+
callStateChanged: CallStateChangedEvent;
|
|
2521
|
+
callEnded: CallEndedEvent;
|
|
2522
|
+
callRejected: CallRejectedEvent;
|
|
2523
|
+
participantJoined: CallParticipantEvent;
|
|
2524
|
+
participantLeft: CallParticipantEvent;
|
|
2525
|
+
trackSubscribed: CallTrackEvent;
|
|
2526
|
+
trackUnsubscribed: CallTrackEvent;
|
|
2527
|
+
localTrackPublished: CallLocalTrackEvent;
|
|
2528
|
+
localTrackUnpublished: CallLocalTrackEvent;
|
|
2529
|
+
participantMediaChanged: CallParticipantMediaChangedEvent;
|
|
2530
|
+
/** LiveKit 재접속 실패 — 통화는 이 기기에서 끝난다(나가기는 보내지 않았다, 끊김 유예 안에 joinCall 로 돌아올 수 있다). */
|
|
2531
|
+
callRecoveryFailed: CallRecoveryFailedEvent;
|
|
2532
|
+
callError: CallErrorEvent;
|
|
2306
2533
|
}
|
|
2307
2534
|
|
|
2308
2535
|
/**
|
|
@@ -2368,36 +2595,24 @@ export interface ChatClientEvents {
|
|
|
2368
2595
|
}
|
|
2369
2596
|
|
|
2370
2597
|
/**
|
|
2371
|
-
* WebRTCClient 가 직접 emit 하는 이벤트
|
|
2598
|
+
* WebRTCClient 가 직접 emit 하는 이벤트 맵(v9.0.0, LiveKit SFU).
|
|
2372
2599
|
*/
|
|
2373
2600
|
export interface WebRTCClientEvents {
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
callRejected: unknown;
|
|
2390
|
-
callCancelled: unknown;
|
|
2391
|
-
callInvitation: unknown;
|
|
2392
|
-
callBusy: unknown;
|
|
2393
|
-
incomingCall: unknown;
|
|
2394
|
-
incomingCallWhileBusy: unknown;
|
|
2395
|
-
userJoined: unknown;
|
|
2396
|
-
userLeft: unknown;
|
|
2397
|
-
participantLeft: unknown;
|
|
2398
|
-
participantMediaState: unknown;
|
|
2399
|
-
mediaStateChanged: unknown;
|
|
2400
|
-
deviceChange: unknown;
|
|
2601
|
+
incomingCall: IncomingCallEvent;
|
|
2602
|
+
ringStopped: RingStoppedEvent;
|
|
2603
|
+
callStateChanged: CallStateChangedEvent;
|
|
2604
|
+
callEnded: CallEndedEvent;
|
|
2605
|
+
callRejected: CallRejectedEvent;
|
|
2606
|
+
participantJoined: CallParticipantEvent;
|
|
2607
|
+
participantLeft: CallParticipantEvent;
|
|
2608
|
+
trackSubscribed: CallTrackEvent;
|
|
2609
|
+
trackUnsubscribed: CallTrackEvent;
|
|
2610
|
+
localTrackPublished: CallLocalTrackEvent;
|
|
2611
|
+
localTrackUnpublished: CallLocalTrackEvent;
|
|
2612
|
+
participantMediaChanged: CallParticipantMediaChangedEvent;
|
|
2613
|
+
/** LiveKit 재접속 실패 — 통화는 이 기기에서 끝난다(나가기는 보내지 않았다, 끊김 유예 안에 joinCall 로 돌아올 수 있다). */
|
|
2614
|
+
callRecoveryFailed: CallRecoveryFailedEvent;
|
|
2615
|
+
callError: CallErrorEvent;
|
|
2401
2616
|
}
|
|
2402
2617
|
|
|
2403
2618
|
// ============================================================================
|
|
@@ -2526,6 +2741,31 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
2526
2741
|
|
|
2527
2742
|
/** PM 보고서 상세 — 목록 한 줄 + 본문({@code content}). 없거나 볼 수 없으면 404. 반환은 envelope 째. */
|
|
2528
2743
|
getPmReport(reportId: string): Promise<ApiEnvelope<PmReportDetail>>;
|
|
2744
|
+
|
|
2745
|
+
/** 내가 만든 예약 목록(만든 순). */
|
|
2746
|
+
getScheduledReports(): Promise<ScheduledReport[]>;
|
|
2747
|
+
|
|
2748
|
+
/** 예약 하나와 최근 회차(예정 늦은 순, 최대 10개). 없거나 남의 예약이면 404. */
|
|
2749
|
+
getScheduledReport(reportId: string): Promise<ScheduledReportDetail>;
|
|
2750
|
+
|
|
2751
|
+
/** 지금 새로 만들 수 있는 작업 종류. 키에 PM 권한이 없거나 일시정지 중인 종류는 빠진다 — 빈 배열이면 만들기를 막는다. */
|
|
2752
|
+
getScheduledReportKinds(): Promise<ScheduledTaskKind[]>;
|
|
2753
|
+
|
|
2754
|
+
/** 방 정리의 원천 방 고르기 — 내가 지금 참여 중이고 메시지 보관 기간이 없는 방. */
|
|
2755
|
+
getScheduledReportSourceRooms(): Promise<ScheduledReportRoomOption[]>;
|
|
2756
|
+
|
|
2757
|
+
/** 보낼 방 고르기 — 만들기·고치기와 같은 판정으로 거른 방. */
|
|
2758
|
+
getScheduledReportDeliveryRooms(params: ScheduledReportDeliveryRoomParams): Promise<ScheduledReportRoomOption[]>;
|
|
2759
|
+
|
|
2760
|
+
/** 예약 만들기 — 전용 방을 만들고 예약을 저장한다. {@code idempotencyKey} 필수 — 재시도에 같은 값을 넘겨야 예약과 방이 두 개 안 생긴다. */
|
|
2761
|
+
createScheduledReport(report: CreateScheduledReportData, options: CreateScheduledReportOptions): Promise<ScheduledReport>;
|
|
2762
|
+
|
|
2763
|
+
/** 예약 고치기·멈추기·다시 켜기 — 고칠 칸만 보낸다. 바꾼 예약을 돌려준다. */
|
|
2764
|
+
updateScheduledReport(reportId: string, changes: UpdateScheduledReportData): Promise<ScheduledReport>;
|
|
2765
|
+
|
|
2766
|
+
/** 예약 지우기 — 예약만 지우고 전용 방은 남긴다. */
|
|
2767
|
+
deleteScheduledReport(reportId: string): Promise<void>;
|
|
2768
|
+
|
|
2529
2769
|
fetchLinkPreview(url: string): Promise<FetchLinkPreviewResponse | null>;
|
|
2530
2770
|
sendMessage(roomId: string, data: SendMessageData): Promise<SendMessageResult>;
|
|
2531
2771
|
/** Optimistic UI 버전 — 응답 전 base/예측 messageIds 동기 반환. */
|
|
@@ -2610,13 +2850,190 @@ export class ChatClient implements SdkEventEmitter<ChatClientEvents> {
|
|
|
2610
2850
|
resumeAssistantStreams(reason?: string): Promise<void>;
|
|
2611
2851
|
}
|
|
2612
2852
|
|
|
2613
|
-
/**
|
|
2614
|
-
export interface
|
|
2615
|
-
|
|
2853
|
+
/** 미디어 선택 — 생략하면 카메라·마이크 둘 다 켠다. */
|
|
2854
|
+
export interface CallMediaOptions {
|
|
2855
|
+
video?: boolean;
|
|
2856
|
+
audio?: boolean;
|
|
2857
|
+
}
|
|
2858
|
+
|
|
2859
|
+
/** 그룹 통화 열기. 생략한 값은 서버 기본값을 쓴다. */
|
|
2860
|
+
export interface CreateGroupCallOptions extends CallMediaOptions {
|
|
2861
|
+
invitedUsers: string[];
|
|
2616
2862
|
title?: string;
|
|
2617
2863
|
maxParticipants?: number;
|
|
2618
2864
|
}
|
|
2619
2865
|
|
|
2866
|
+
/**
|
|
2867
|
+
* 통화가 끝난 사유 — 서버 사유(ended_by_host·cancelled·declined·busy·no_answer·participant_left·connection_lost·media_room_closed·
|
|
2868
|
+
* empty·expired), 이 기기의 사유(left 나감·replaced 같은 사용자가 다른 기기로 들어옴·removed·room_deleted·room_closed·failed),
|
|
2869
|
+
* 또는 받지 않고 끝난 울림의 사유({@link RingStopReason} 중 accepted 를 뺀 것).
|
|
2870
|
+
*/
|
|
2871
|
+
export type CallEndReason =
|
|
2872
|
+
| 'ended_by_host' | 'cancelled' | 'declined' | 'busy' | 'no_answer' | 'participant_left' | 'connection_lost'
|
|
2873
|
+
| 'media_room_closed' | 'empty' | 'expired'
|
|
2874
|
+
| 'left' | 'replaced' | 'removed' | 'room_deleted' | 'room_closed' | 'failed'
|
|
2875
|
+
| 'rejected' | 'answered_elsewhere' | 'timeout' | 'stale' | 'ended'
|
|
2876
|
+
| (string & {});
|
|
2877
|
+
|
|
2878
|
+
/**
|
|
2879
|
+
* 울림이 멈춘 사유 — accepted(이 기기에서 받음)·rejected(이 기기에서 거절)·answered_elsewhere(같은 사용자의 다른 기기가 받았거나
|
|
2880
|
+
* 그룹 통화를 거절함)·timeout(울림 상한)·stale(다시 물으니 더는 울리지 않음)·ended(통화가 없어졌거나 이 기기의 로그인 신원이 끝남)
|
|
2881
|
+
* 또는 서버 사유(취소·종료).
|
|
2882
|
+
* accepted 가 아니면 같은 사유로 callStateChanged(ended)·callEnded 도 온다.
|
|
2883
|
+
*/
|
|
2884
|
+
export type RingStopReason =
|
|
2885
|
+
| 'accepted' | 'rejected' | 'answered_elsewhere' | 'timeout' | 'stale' | 'ended'
|
|
2886
|
+
| 'cancelled' | 'no_answer' | 'declined' | 'busy' | 'ended_by_host' | 'empty' | 'expired' | 'media_room_closed'
|
|
2887
|
+
| (string & {});
|
|
2888
|
+
|
|
2889
|
+
/** 트랙 출처. */
|
|
2890
|
+
export type CallTrackSource = 'camera' | 'microphone' | 'screen' | 'screen_audio' | 'unknown';
|
|
2891
|
+
|
|
2892
|
+
/** 울림 시작. 이 리스너 안에서 바로 거절·받으면 그 통화의 `callStateChanged`(ringing) 은 오지 않는다. */
|
|
2893
|
+
export interface IncomingCallEvent {
|
|
2894
|
+
callRoomId: string;
|
|
2895
|
+
kind: CallKindValue | null;
|
|
2896
|
+
callerId: string | null;
|
|
2897
|
+
callerName: string | null;
|
|
2898
|
+
callerProfileUrl: string | null;
|
|
2899
|
+
title: string | null;
|
|
2900
|
+
}
|
|
2901
|
+
|
|
2902
|
+
export interface RingStoppedEvent {
|
|
2903
|
+
callRoomId: string;
|
|
2904
|
+
reason: RingStopReason;
|
|
2905
|
+
}
|
|
2906
|
+
|
|
2907
|
+
export interface CallStateChangedEvent {
|
|
2908
|
+
callRoomId: string;
|
|
2909
|
+
state: CallStateValue;
|
|
2910
|
+
/** ended 이면 끝난 사유, reconnecting 이면 removed(서버가 연결을 뺐다)일 수 있다. */
|
|
2911
|
+
reason?: CallEndReason;
|
|
2912
|
+
}
|
|
2913
|
+
|
|
2914
|
+
export interface CallEndedEvent {
|
|
2915
|
+
callRoomId: string;
|
|
2916
|
+
reason: CallEndReason;
|
|
2917
|
+
}
|
|
2918
|
+
|
|
2919
|
+
/** 방장에게 — 초대 대상의 거절(declined·busy)·무응답(no_answer). 1:1 이면 통화도 끝난다(callEnded). */
|
|
2920
|
+
export interface CallRejectedEvent {
|
|
2921
|
+
callRoomId: string;
|
|
2922
|
+
userId: string | null;
|
|
2923
|
+
reason: string | null;
|
|
2924
|
+
}
|
|
2925
|
+
|
|
2926
|
+
export interface CallParticipantEvent {
|
|
2927
|
+
callRoomId: string;
|
|
2928
|
+
userId: string;
|
|
2929
|
+
}
|
|
2930
|
+
|
|
2931
|
+
/**
|
|
2932
|
+
* 화면에 붙이는 미디어 트랙 — livekit-client 의 Track 가운데 SDK 가 약속하는 부분이다(실제 값은 RemoteTrack·LocalTrack). livekit-client
|
|
2933
|
+
* 타입을 그대로 내보내지 않는다 — 그 판에 묶이지 않게.
|
|
2934
|
+
*/
|
|
2935
|
+
export interface CallMediaTrack {
|
|
2936
|
+
/** 'audio' · 'video' */
|
|
2937
|
+
readonly kind: string;
|
|
2938
|
+
readonly mediaStreamTrack: MediaStreamTrack;
|
|
2939
|
+
/** 새 <video>/<audio> 요소를 만들어 붙이고 돌려준다. */
|
|
2940
|
+
attach(): HTMLMediaElement;
|
|
2941
|
+
/** 주어진 요소에 붙인다. */
|
|
2942
|
+
attach(element: HTMLMediaElement): HTMLMediaElement;
|
|
2943
|
+
/** 붙인 요소 전부에서 떼고 그 요소들을 돌려준다. */
|
|
2944
|
+
detach(): HTMLMediaElement[];
|
|
2945
|
+
/** 주어진 요소에서 뗀다. */
|
|
2946
|
+
detach(element: HTMLMediaElement): HTMLMediaElement;
|
|
2947
|
+
}
|
|
2948
|
+
|
|
2949
|
+
export interface CallTrackEvent {
|
|
2950
|
+
callRoomId: string;
|
|
2951
|
+
userId: string;
|
|
2952
|
+
source: CallTrackSource;
|
|
2953
|
+
/** 상대의 트랙 — {@code track.attach()} 로 화면에 붙인다. */
|
|
2954
|
+
track: CallMediaTrack;
|
|
2955
|
+
}
|
|
2956
|
+
|
|
2957
|
+
/**
|
|
2958
|
+
* 내 트랙 게시·내림 — 카메라·마이크의 게시는 그 장치의 지금 트랙만 온다(재접속 중 다시 켜 새 트랙이 생기면 늦게 다시 게시되는 옛
|
|
2959
|
+
* 트랙은 오지 않는다). 게시가 온 트랙은 내려질 때(그 사이 새 트랙으로 바뀌었어도) 짝으로 내림이 온다.
|
|
2960
|
+
*/
|
|
2961
|
+
export interface CallLocalTrackEvent {
|
|
2962
|
+
callRoomId: string;
|
|
2963
|
+
source: CallTrackSource;
|
|
2964
|
+
/** 내 트랙 — 미리보기용. */
|
|
2965
|
+
track: CallMediaTrack;
|
|
2966
|
+
}
|
|
2967
|
+
|
|
2968
|
+
/** 참가자 미디어 상태 — 내 것이면 userId 는 null. */
|
|
2969
|
+
export interface CallParticipantMedia {
|
|
2970
|
+
userId: string | null;
|
|
2971
|
+
camera: boolean;
|
|
2972
|
+
microphone: boolean;
|
|
2973
|
+
screen: boolean;
|
|
2974
|
+
}
|
|
2975
|
+
|
|
2976
|
+
export interface CallParticipantMediaChangedEvent extends CallParticipantMedia {
|
|
2977
|
+
callRoomId: string;
|
|
2978
|
+
}
|
|
2979
|
+
|
|
2980
|
+
export interface CallRecoveryFailedEvent {
|
|
2981
|
+
callRoomId: string;
|
|
2982
|
+
reason: string;
|
|
2983
|
+
}
|
|
2984
|
+
|
|
2985
|
+
export interface CallErrorEvent {
|
|
2986
|
+
callRoomId: string;
|
|
2987
|
+
code: ErrorTypeValue | string;
|
|
2988
|
+
message: string;
|
|
2989
|
+
error?: unknown;
|
|
2990
|
+
}
|
|
2991
|
+
|
|
2992
|
+
export interface CurrentCall {
|
|
2993
|
+
/** 방을 만드는 중(callUser·createGroupCall 이 서버 응답을 기다리는 동안)이면 null. */
|
|
2994
|
+
callRoomId: string | null;
|
|
2995
|
+
kind: CallKindValue | null;
|
|
2996
|
+
state: CallStateValue | null;
|
|
2997
|
+
participants: CallParticipantMedia[];
|
|
2998
|
+
localMedia: { camera: boolean; microphone: boolean; screen: boolean };
|
|
2999
|
+
}
|
|
3000
|
+
|
|
3001
|
+
export interface RingingCall {
|
|
3002
|
+
callRoomId: string;
|
|
3003
|
+
kind: CallKindValue | null;
|
|
3004
|
+
callerId: string | null;
|
|
3005
|
+
title: string | null;
|
|
3006
|
+
}
|
|
3007
|
+
|
|
3008
|
+
/** GET /api/v1/webrtc/rooms/{id}/participation */
|
|
3009
|
+
export interface CallParticipation {
|
|
3010
|
+
callRoomId: string;
|
|
3011
|
+
participating: boolean;
|
|
3012
|
+
/** 초대 대상의 울림 상태. 방장·초대 밖이면 null. */
|
|
3013
|
+
ring: 'RINGING' | 'ANSWERED' | 'DECLINED' | 'BUSY' | 'NO_ANSWER' | (string & {}) | null;
|
|
3014
|
+
}
|
|
3015
|
+
|
|
3016
|
+
/** GET /api/v1/webrtc/rooms/{id} */
|
|
3017
|
+
export interface CallRoomInfo {
|
|
3018
|
+
callRoomId: string;
|
|
3019
|
+
kind: CallKindValue;
|
|
3020
|
+
status: 'CREATED' | 'ACTIVE' | 'ENDED' | 'EXPIRED' | (string & {});
|
|
3021
|
+
version: number;
|
|
3022
|
+
hostUserId: string;
|
|
3023
|
+
invitedUsers: string[];
|
|
3024
|
+
title: string | null;
|
|
3025
|
+
/** ISO-8601 */
|
|
3026
|
+
createdAt: string;
|
|
3027
|
+
/** ISO-8601 */
|
|
3028
|
+
expiresAt: string;
|
|
3029
|
+
maxParticipants: number | null;
|
|
3030
|
+
projectId: string;
|
|
3031
|
+
}
|
|
3032
|
+
|
|
3033
|
+
/**
|
|
3034
|
+
* 화상통화 클라이언트(v9.0.0) — 통화 제어는 서버 REST, 미디어는 LiveKit(SFU), 서버 알림은 STOMP. 클라이언트는 통화 신호를 보내지
|
|
3035
|
+
* 않는다. 한 번에 한 통화만 미디어에 붙는다.
|
|
3036
|
+
*/
|
|
2620
3037
|
export class WebRTCClient implements SdkEventEmitter<WebRTCClientEvents> {
|
|
2621
3038
|
on<K extends keyof WebRTCClientEvents>(event: K, listener: (payload: WebRTCClientEvents[K]) => void): () => void;
|
|
2622
3039
|
once<K extends keyof WebRTCClientEvents>(event: K, listener: (payload: WebRTCClientEvents[K]) => void): () => void;
|
|
@@ -2625,44 +3042,102 @@ export class WebRTCClient implements SdkEventEmitter<WebRTCClientEvents> {
|
|
|
2625
3042
|
removeAllListeners(event?: keyof WebRTCClientEvents): void;
|
|
2626
3043
|
listenerCount(event: keyof WebRTCClientEvents): number;
|
|
2627
3044
|
|
|
2628
|
-
|
|
2629
|
-
getTurnCredentials(): Promise<{ iceServers: RTCIceServer[] }>;
|
|
2630
|
-
|
|
2631
|
-
createCallRoom(data: CreateCallRoomRequest): Promise<unknown>;
|
|
2632
|
-
getCallRoom(roomId: string): Promise<unknown>;
|
|
2633
|
-
joinCallRoomApi(roomId: string): Promise<unknown>;
|
|
2634
|
-
leaveCallRoomApi(roomId: string): Promise<unknown>;
|
|
2635
|
-
|
|
2636
|
-
/** 수신 call 구독 활성화 — 내부 WebSocket subscribe 가 async. */
|
|
3045
|
+
/** 통화 알림 수신(개인 큐 구독) — connect() 가 부른다. */
|
|
2637
3046
|
enableIncomingCalls(): Promise<void>;
|
|
2638
3047
|
disableIncomingCalls(): void;
|
|
2639
3048
|
isIncomingCallsEnabled(): boolean;
|
|
2640
3049
|
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
3050
|
+
/**
|
|
3051
|
+
* 1:1 통화를 건다 — 방 만들기 → 입장 → 미디어 접속. 반환: callRoomId. 방을 만드는 중에 이 기기의 로그인 신원이 끝나거나(로그아웃·
|
|
3052
|
+
* 전환) destroy 되면 `NO_ACTIVE_CALL` 로 끝난다. destroy 뒤에는 `INVALID_STATE`.
|
|
3053
|
+
*/
|
|
3054
|
+
callUser(targetUserId: string, media?: CallMediaOptions): Promise<string>;
|
|
3055
|
+
/** 그룹 통화를 연다. 반환: callRoomId. 끝나는 경우는 callUser 와 같다. */
|
|
3056
|
+
createGroupCall(options: CreateGroupCallOptions): Promise<string>;
|
|
3057
|
+
/**
|
|
3058
|
+
* 울리는 통화를 받는다 — 이 기기 울림을 끄고 입장한다. 입장 중에 통화가 끝나면(상대 취소 등) 던지지 않고 callEnded 로 알린다.
|
|
3059
|
+
*/
|
|
3060
|
+
acceptCall(callRoomId: string, media?: CallMediaOptions): Promise<string>;
|
|
3061
|
+
/** 그룹 통화에 들어가거나 다시 들어간다 — 나간 뒤·재접속 실패 뒤에도 통화가 이어지면 다시 들어갈 수 있다. */
|
|
3062
|
+
joinCall(callRoomId: string, media?: CallMediaOptions): Promise<string>;
|
|
3063
|
+
/** 울리는 통화를 거절한다. 기본 DECLINED. callRoomId 가 없으면 요청 없이 던진다. */
|
|
3064
|
+
rejectCall(callRoomId: string, options?: { reason?: 'DECLINED' | 'BUSY' }): Promise<void>;
|
|
3065
|
+
/** 건 통화를 취소한다(방장, 상대 입장 전). 생략하면 지금 통화. 방을 만드는 중이면 만든 뒤 취소한다. */
|
|
3066
|
+
cancelCall(callRoomId?: string): Promise<void>;
|
|
3067
|
+
/**
|
|
3068
|
+
* 지금 통화에서 나간다 — 이 기기의 미디어 끊기를 시작하고 같은 틱에 서버에 나가기를 보낸다(끊기를 기다리지 않는다 — 누른 순간의
|
|
3069
|
+
* 신원으로 나간다). 서버 요청이 실패하면 던지지만 통화는 이미 끝났다(callEnded left). 방을 만드는 중이면 만든 뒤 끝내고 취소를
|
|
3070
|
+
* 보낸다 — 나가기·취소·모두 끝내기 중 처음 누른 것이 정한다. 울리던 초대를 받고 입장 전에 나가면 서버 초대를 거절(DECLINED)로
|
|
3071
|
+
* 정리한다. 로그인 신원이 바뀌어 재시도를 멈추면 `INVALID_STATE`.
|
|
3072
|
+
*/
|
|
3073
|
+
leaveCall(): Promise<void>;
|
|
3074
|
+
/** 모두의 통화를 끝낸다(방장). */
|
|
3075
|
+
endCallForAll(): Promise<void>;
|
|
3076
|
+
|
|
3077
|
+
/**
|
|
3078
|
+
* 카메라를 켜고 끈다 — 통화가 있으면 언제든. 미디어가 붙기 전(방을 만드는 중·입장 중·미디어 서버 접속 중)에 부르면 의도만
|
|
3079
|
+
* 기록하고 바로 끝나며, 붙으면 그 의도로 켜고 끈다. 붙은 뒤에는 장치가 그 상태가 되면 끝난다(켜기는 권한 응답 뒤) — 그 사이 다시
|
|
3080
|
+
* 부르면 마지막 의도로 맞추고 앞선 호출은 그대로 끝난다. 끄기·한 번 켠 장치 다시 켜기(음소거 풀기)는 다른 장치의 권한 창을 기다리지
|
|
3081
|
+
* 않는다(처음 켜기만 권한 창을 하나씩 띄우려 줄에 서고, 줄에서 기다리는 사이 끄면 바로 끝난다). 그 의도가 실패하면(권한
|
|
3082
|
+
* 거부) `MEDIA_ACCESS_DENIED` — 통화가 기억하는 켜짐·꺼짐은 실제 상태로 돌아가고(앞선 누름도 실패했으면 그것이 아니라) 다시
|
|
3083
|
+
* 부르면 다시 시도한다. 통화가 끝나면 기다리던 호출도 끝난다. 통화가 없으면 `NO_ACTIVE_CALL`. 켜 둔 장치가 빠져 LiveKit 이 다시
|
|
3084
|
+
* 열지 못하면(스스로 음소거하거나 재접속 뒤 다시 올리지 못하면) 그 장치를 끈 것으로 보고 `callError`(`MEDIA_ACCESS_DENIED`)로 알린다
|
|
3085
|
+
* — 통화도 꺼짐으로 기억해 다시 입장해도 저절로 켜지지 않는다. 꺼진 카메라는 장치를 쥐지 않고, 게시 없이 열린 채 남은 트랙(재접속
|
|
3086
|
+
* 뒤 다시 열고 게시만 못 함)은 끄면(늦게 다시 열려도) 멈추고 다시 켜면 새 트랙으로 바뀐다. 재접속의 다시 게시가 옛 트랙을 다시 여는
|
|
3087
|
+
* 사이 다시 켜 새 트랙이 생기면 옛 트랙은 늦게 열리거나 게시돼도 멈추고 내린다(장치마다 게시는 하나, 꺼짐이면 보내는 트랙 없음).
|
|
3088
|
+
* 통화가 끝나면 그 연결이 연 카메라·마이크를 모두 그 자리에서 멈춘다(게시를 기다리는 중이어도, 권한 응답이 통화가 끝난 뒤에 와도).
|
|
3089
|
+
*/
|
|
3090
|
+
setCameraEnabled(enabled: boolean): Promise<void>;
|
|
3091
|
+
/** 마이크를 켜고 끈다 — `setCameraEnabled` 와 같은 규칙. 장치가 빠져 끝난 마이크는 켤 때 다시 연다(못 열면 그 켜기가 실패한다). */
|
|
3092
|
+
setMicrophoneEnabled(enabled: boolean): Promise<void>;
|
|
3093
|
+
/**
|
|
3094
|
+
* 화면 공유 — 미디어 접속이 끝난 뒤에만(공유 창은 사용자 조작 안에서만 열려 미룰 수 없다). 그 전이면 `INVALID_STATE`, 거부는
|
|
3095
|
+
* `SCREEN_SHARE_DENIED`. 마지막 누름대로 맞춘다 — 켜져 있으면 마지막에 고른 화면 하나만 게시된다. 공유 중이 아니면 공유 창을 바로
|
|
3096
|
+
* 열고 고른 화면(함께 고른 소리까지)이 게시되면 끝나며, 공유 창이 떠 있는 동안 다시 부르면 그 창의 결과를 같이 기다린다(창은 하나, 공유 중이면 새 창을
|
|
3097
|
+
* 열지 않는다). 공유 창을 취소하거나 게시가 실패하면 그 사이 대체된 누름은 그대로 끝나고 마지막 누름만 거부된다(게시를 시도한 쪽이
|
|
3098
|
+
* 앞선 누름·재접속 뒤 정리여도 — 기다리는 누름이 없으면 `callError`, 이미 게시된 영상·소리도 내린다 — 끈 화면의 늦은 실패는 알리지 않는다). 재접속 중에는 SDK 가
|
|
3099
|
+
* 게시하지 않는다 — 공유 중이던 화면이면 바로 끝나고, 새로 고른 화면은 다시 붙은 뒤(LiveKit 의 다시 게시가 끝난 뒤) 게시하고
|
|
3100
|
+
* 끝난다(다른 트랙의 다시 게시 실패는 화면 공유를 끄지 않는다). 재접속 중에 다시
|
|
3101
|
+
* 고르면 다시 게시된 옛 화면은 내린다. 통화가 끝나면 기다리지 않고 `INVALID_STATE` 로 끝난다(화면 공유는 다시 입장한 연결로 넘어가지
|
|
3102
|
+
* 않는다).
|
|
3103
|
+
*/
|
|
3104
|
+
startScreenShare(): Promise<void>;
|
|
3105
|
+
/**
|
|
3106
|
+
* 화면 공유를 멈춘다 — `startScreenShare` 와 같은 규칙. 고른 화면을 그 자리에서 멈추고(공유 표시가 바로 꺼진다) 게시를 내린 뒤
|
|
3107
|
+
* 끝난다. 공유 창이 떠 있어도 바로 끝나고 그 뒤 고른 화면은 게시하지 않는다. 재접속 중에 멈춰도 다시 게시된 화면까지 내리고, LiveKit
|
|
3108
|
+
* 이 다시 게시하는 중이어도, 게시가 아직 끝나지 않았어도(협상·재접속 대기) 기다리지 않는다 — 늦게 붙은 화면은 바로 내린다.
|
|
3109
|
+
*/
|
|
3110
|
+
stopScreenShare(): Promise<void>;
|
|
3111
|
+
/** 장치 목록 — 통화 전에도 부를 수 있다. */
|
|
3112
|
+
getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]>;
|
|
3113
|
+
/**
|
|
3114
|
+
* 장치를 바꾼다 — 통화가 있으면 언제든. 미디어가 붙기 전이면 기억했다가 붙을 때 그 장치로, 다시 입장해도 그 장치로 붙는다. 카메라·
|
|
3115
|
+
* 마이크는 그 장치의 켜고 끄기·앞선 바꾸기와 부른 순서대로 하나씩 옮긴다 — 켜는 중(권한 창·획득)이면 켜기가 끝난 뒤 옮기고 끝나며,
|
|
3116
|
+
* 켜는 중에 끄고 고르면 끈 뒤 옮기며, 옮기는 중에 끈 카메라는 옮긴 뒤 꺼진다(마이크 음소거는 기다리지 않는다). 켜져 있는 장치를 못
|
|
3117
|
+
* 바꾸면(같은 장치를 다시 골라도 다시 연다) `DEVICE_SWITCH_FAILED`(또는 false) — 쓰던 장치로 한 번 다시 열고 기억도 지금 쓰는 장치가
|
|
3118
|
+
* 된다(앞선 선택도 실패했으면 그것이 아니라 — 쓰던 장치로도 못 돌아가거나 쓰던 장치를 모르면 그 장치를 끈 뒤 `callError` 로 알린다 — 바로 다시 켜면 다시 연다, 끄는 사이
|
|
3119
|
+
* 다시 켜거나 끄면 그 누름이 이기고 알리지 않는다). 꺼진
|
|
3120
|
+
* 카메라·음소거한 마이크는 바꿀 때 열지 않고 켤 때 연다 — 그때 못 열면 그 켜기가 `MEDIA_ACCESS_DENIED`(`cause` 에 원래 오류)로
|
|
3121
|
+
* 실패한다. 스피커도 부른 순서대로 하나씩 바꾼다 — 상대 소리 요소마다 바꾸고 모두 끝난 뒤 판정해, 일부만 바뀌면 바뀐 요소를 쓰던
|
|
3122
|
+
* 출력으로 되돌린 뒤 실패한다(되돌리지도 못하면 그 `DEVICE_SWITCH_FAILED` 에 `outputMismatch: true` — 일부 소리가 고른 출력에 남았고
|
|
3123
|
+
* 기억은 쓰던 출력이다, 다시 고르면 모두 맞춘다). 전체 재접속 중(다시 붙었어도 LiveKit 이 다시 게시하는 중이면 그 끝까지)에 고른
|
|
3124
|
+
* 카메라·마이크는 그 끝을 기다려 옮기고 그때 끝난다(그동안 옮기면 다시 게시가 옛 장치로 열려 기억과 실제가 어긋난다 — 기다리는 동안
|
|
3125
|
+
* 그 장치의 켜고 끄기는 막지 않고, 기다리는 사이 다시 고르면 마지막에 고른 장치로만 옮기며, 스피커는 기다리지 않는다). 장치를 여는 중·다시 맞추기를 기다리는 중에 통화가 끝나면 기다리지 않고
|
|
3126
|
+
* true 로 끝난다(고른 장치는 기억한다). LiveKit 이 스스로 장치를 옮기면(빠진 장치 대신 다른 장치로 다시 열기·기기 변화로 입력·출력
|
|
3127
|
+
* 전환, 꺼진 카메라·음소거한 마이크에 적어 둔 다음 켜기 장치 — 꺼진 채 바꾼 장치는 재접속 뒤에도 그 장치) 고른 장치 기억도 따라간다 — 다시 입장해도 없는 장치로 붙지 않는다(바꾸는 중이면 그
|
|
3128
|
+
* 바꾸기의 결과가 기억이다, 고른 장치가 없으면 기본 장치 그대로).
|
|
3129
|
+
*/
|
|
3130
|
+
switchDevice(kind: MediaDeviceKind, deviceId: string): Promise<boolean>;
|
|
3131
|
+
|
|
3132
|
+
getCallRoom(callRoomId: string): Promise<CallRoomInfo>;
|
|
3133
|
+
/** 내 참가 상태 — ring 이 RINGING 이면 아직 울리는 중. */
|
|
3134
|
+
getParticipation(callRoomId: string): Promise<CallParticipation>;
|
|
2664
3135
|
isInCall(): boolean;
|
|
2665
|
-
|
|
3136
|
+
getCurrentCall(): CurrentCall | null;
|
|
3137
|
+
getRingingCalls(): RingingCall[];
|
|
3138
|
+
|
|
3139
|
+
setLogLevel(level: LogLevelValue): void;
|
|
3140
|
+
destroy(): void;
|
|
2666
3141
|
}
|
|
2667
3142
|
|
|
2668
3143
|
/** 푸시 디바이스 응답 (내 디바이스 목록). deviceToken 은 보안상 미포함. */
|
|
@@ -3030,6 +3505,31 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
3030
3505
|
|
|
3031
3506
|
/** PM 보고서 상세 — 목록 한 줄 + 본문({@code content}). 없거나 볼 수 없으면 404. 반환은 envelope 째. */
|
|
3032
3507
|
getPmReport(reportId: string): Promise<ApiEnvelope<PmReportDetail>>;
|
|
3508
|
+
|
|
3509
|
+
/** 내가 만든 예약 목록(만든 순). */
|
|
3510
|
+
getScheduledReports(): Promise<ScheduledReport[]>;
|
|
3511
|
+
|
|
3512
|
+
/** 예약 하나와 최근 회차(예정 늦은 순, 최대 10개). 없거나 남의 예약이면 404. */
|
|
3513
|
+
getScheduledReport(reportId: string): Promise<ScheduledReportDetail>;
|
|
3514
|
+
|
|
3515
|
+
/** 지금 새로 만들 수 있는 작업 종류. 키에 PM 권한이 없거나 일시정지 중인 종류는 빠진다 — 빈 배열이면 만들기를 막는다. */
|
|
3516
|
+
getScheduledReportKinds(): Promise<ScheduledTaskKind[]>;
|
|
3517
|
+
|
|
3518
|
+
/** 방 정리의 원천 방 고르기 — 내가 지금 참여 중이고 메시지 보관 기간이 없는 방. */
|
|
3519
|
+
getScheduledReportSourceRooms(): Promise<ScheduledReportRoomOption[]>;
|
|
3520
|
+
|
|
3521
|
+
/** 보낼 방 고르기 — 만들기·고치기와 같은 판정으로 거른 방. */
|
|
3522
|
+
getScheduledReportDeliveryRooms(params: ScheduledReportDeliveryRoomParams): Promise<ScheduledReportRoomOption[]>;
|
|
3523
|
+
|
|
3524
|
+
/** 예약 만들기 — 전용 방을 만들고 예약을 저장한다. {@code idempotencyKey} 필수 — 재시도에 같은 값을 넘겨야 예약과 방이 두 개 안 생긴다. */
|
|
3525
|
+
createScheduledReport(report: CreateScheduledReportData, options: CreateScheduledReportOptions): Promise<ScheduledReport>;
|
|
3526
|
+
|
|
3527
|
+
/** 예약 고치기·멈추기·다시 켜기 — 고칠 칸만 보낸다. 바꾼 예약을 돌려준다. */
|
|
3528
|
+
updateScheduledReport(reportId: string, changes: UpdateScheduledReportData): Promise<ScheduledReport>;
|
|
3529
|
+
|
|
3530
|
+
/** 예약 지우기 — 예약만 지우고 전용 방은 남긴다. */
|
|
3531
|
+
deleteScheduledReport(reportId: string): Promise<void>;
|
|
3532
|
+
|
|
3033
3533
|
fetchLinkPreview(url: string): Promise<FetchLinkPreviewResponse | null>;
|
|
3034
3534
|
sendMessage(roomId: string, data: SendMessageData): Promise<SendMessageResult>;
|
|
3035
3535
|
/** Optimistic UI 버전 — 응답 전 base/예측 messageIds 동기 반환. */
|
|
@@ -3109,45 +3609,100 @@ export default class TalkFlowClient implements SdkEventEmitter<TalkFlowClientEve
|
|
|
3109
3609
|
*/
|
|
3110
3610
|
resumeAssistantStreams(reason?: string): Promise<void>;
|
|
3111
3611
|
|
|
3112
|
-
//
|
|
3113
|
-
|
|
3114
|
-
getTurnCredentials(): Promise<{ iceServers: RTCIceServer[] }>;
|
|
3115
|
-
|
|
3116
|
-
createCallRoom(data: CreateCallRoomRequest): Promise<unknown>;
|
|
3117
|
-
getCallRoom(roomId: string): Promise<unknown>;
|
|
3118
|
-
joinCallRoomApi(roomId: string): Promise<unknown>;
|
|
3119
|
-
leaveCallRoomApi(roomId: string): Promise<unknown>;
|
|
3120
|
-
|
|
3121
|
-
/** 수신 call 구독 활성화 — 내부 WebSocket subscribe 가 async. */
|
|
3612
|
+
// 화상통화 delegations (→ client.webrtc)
|
|
3613
|
+
/** 통화 알림 수신(개인 큐 구독) — connect() 가 부른다. */
|
|
3122
3614
|
enableIncomingCalls(): Promise<void>;
|
|
3123
3615
|
disableIncomingCalls(): void;
|
|
3124
3616
|
isIncomingCallsEnabled(): boolean;
|
|
3125
3617
|
|
|
3126
|
-
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3130
|
-
|
|
3131
|
-
|
|
3132
|
-
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3618
|
+
/**
|
|
3619
|
+
* 1:1 통화를 건다 — 방 만들기 → 입장 → 미디어 접속. 반환: callRoomId. 방을 만드는 중에 이 기기의 로그인 신원이 끝나거나(로그아웃·
|
|
3620
|
+
* 전환) destroy 되면 `NO_ACTIVE_CALL` 로 끝난다. destroy 뒤에는 `INVALID_STATE`.
|
|
3621
|
+
*/
|
|
3622
|
+
callUser(targetUserId: string, media?: CallMediaOptions): Promise<string>;
|
|
3623
|
+
/** 그룹 통화를 연다. 반환: callRoomId. 끝나는 경우는 callUser 와 같다. */
|
|
3624
|
+
createGroupCall(options: CreateGroupCallOptions): Promise<string>;
|
|
3625
|
+
/**
|
|
3626
|
+
* 울리는 통화를 받는다 — 이 기기 울림을 끄고 입장한다. 입장 중에 통화가 끝나면(상대 취소 등) 던지지 않고 callEnded 로 알린다.
|
|
3627
|
+
*/
|
|
3628
|
+
acceptCall(callRoomId: string, media?: CallMediaOptions): Promise<string>;
|
|
3629
|
+
/** 그룹 통화에 들어가거나 다시 들어간다 — 나간 뒤·재접속 실패 뒤에도 통화가 이어지면 다시 들어갈 수 있다. */
|
|
3630
|
+
joinCall(callRoomId: string, media?: CallMediaOptions): Promise<string>;
|
|
3631
|
+
/** 울리는 통화를 거절한다. 기본 DECLINED. callRoomId 가 없으면 요청 없이 던진다. */
|
|
3632
|
+
rejectCall(callRoomId: string, options?: { reason?: 'DECLINED' | 'BUSY' }): Promise<void>;
|
|
3633
|
+
/** 건 통화를 취소한다(방장, 상대 입장 전). 생략하면 지금 통화. 방을 만드는 중이면 만든 뒤 취소한다. */
|
|
3634
|
+
cancelCall(callRoomId?: string): Promise<void>;
|
|
3635
|
+
/**
|
|
3636
|
+
* 지금 통화에서 나간다 — 이 기기의 미디어 끊기를 시작하고 같은 틱에 서버에 나가기를 보낸다(끊기를 기다리지 않는다 — 누른 순간의
|
|
3637
|
+
* 신원으로 나간다). 서버 요청이 실패하면 던지지만 통화는 이미 끝났다(callEnded left). 방을 만드는 중이면 만든 뒤 끝내고 취소를
|
|
3638
|
+
* 보낸다 — 나가기·취소·모두 끝내기 중 처음 누른 것이 정한다. 울리던 초대를 받고 입장 전에 나가면 서버 초대를 거절(DECLINED)로
|
|
3639
|
+
* 정리한다. 로그인 신원이 바뀌어 재시도를 멈추면 `INVALID_STATE`.
|
|
3640
|
+
*/
|
|
3641
|
+
leaveCall(): Promise<void>;
|
|
3642
|
+
/** 모두의 통화를 끝낸다(방장). */
|
|
3643
|
+
endCallForAll(): Promise<void>;
|
|
3644
|
+
|
|
3645
|
+
/**
|
|
3646
|
+
* 카메라를 켜고 끈다 — 통화가 있으면 언제든. 미디어가 붙기 전(방을 만드는 중·입장 중·미디어 서버 접속 중)에 부르면 의도만
|
|
3647
|
+
* 기록하고 바로 끝나며, 붙으면 그 의도로 켜고 끈다. 붙은 뒤에는 장치가 그 상태가 되면 끝난다(켜기는 권한 응답 뒤) — 그 사이 다시
|
|
3648
|
+
* 부르면 마지막 의도로 맞추고 앞선 호출은 그대로 끝난다. 끄기·한 번 켠 장치 다시 켜기(음소거 풀기)는 다른 장치의 권한 창을 기다리지
|
|
3649
|
+
* 않는다(처음 켜기만 권한 창을 하나씩 띄우려 줄에 서고, 줄에서 기다리는 사이 끄면 바로 끝난다). 그 의도가 실패하면(권한
|
|
3650
|
+
* 거부) `MEDIA_ACCESS_DENIED` — 통화가 기억하는 켜짐·꺼짐은 실제 상태로 돌아가고(앞선 누름도 실패했으면 그것이 아니라) 다시
|
|
3651
|
+
* 부르면 다시 시도한다. 통화가 끝나면 기다리던 호출도 끝난다. 통화가 없으면 `NO_ACTIVE_CALL`. 켜 둔 장치가 빠져 LiveKit 이 다시
|
|
3652
|
+
* 열지 못하면(스스로 음소거하거나 재접속 뒤 다시 올리지 못하면) 그 장치를 끈 것으로 보고 `callError`(`MEDIA_ACCESS_DENIED`)로 알린다
|
|
3653
|
+
* — 통화도 꺼짐으로 기억해 다시 입장해도 저절로 켜지지 않는다. 꺼진 카메라는 장치를 쥐지 않고, 게시 없이 열린 채 남은 트랙(재접속
|
|
3654
|
+
* 뒤 다시 열고 게시만 못 함)은 끄면(늦게 다시 열려도) 멈추고 다시 켜면 새 트랙으로 바뀐다. 재접속의 다시 게시가 옛 트랙을 다시 여는
|
|
3655
|
+
* 사이 다시 켜 새 트랙이 생기면 옛 트랙은 늦게 열리거나 게시돼도 멈추고 내린다(장치마다 게시는 하나, 꺼짐이면 보내는 트랙 없음).
|
|
3656
|
+
* 통화가 끝나면 그 연결이 연 카메라·마이크를 모두 그 자리에서 멈춘다(게시를 기다리는 중이어도, 권한 응답이 통화가 끝난 뒤에 와도).
|
|
3657
|
+
*/
|
|
3658
|
+
setCameraEnabled(enabled: boolean): Promise<void>;
|
|
3659
|
+
/** 마이크를 켜고 끈다 — `setCameraEnabled` 와 같은 규칙. 장치가 빠져 끝난 마이크는 켤 때 다시 연다(못 열면 그 켜기가 실패한다). */
|
|
3660
|
+
setMicrophoneEnabled(enabled: boolean): Promise<void>;
|
|
3661
|
+
/**
|
|
3662
|
+
* 화면 공유 — 미디어 접속이 끝난 뒤에만(공유 창은 사용자 조작 안에서만 열려 미룰 수 없다). 그 전이면 `INVALID_STATE`, 거부는
|
|
3663
|
+
* `SCREEN_SHARE_DENIED`. 마지막 누름대로 맞춘다 — 켜져 있으면 마지막에 고른 화면 하나만 게시된다. 공유 중이 아니면 공유 창을 바로
|
|
3664
|
+
* 열고 고른 화면(함께 고른 소리까지)이 게시되면 끝나며, 공유 창이 떠 있는 동안 다시 부르면 그 창의 결과를 같이 기다린다(창은 하나, 공유 중이면 새 창을
|
|
3665
|
+
* 열지 않는다). 공유 창을 취소하거나 게시가 실패하면 그 사이 대체된 누름은 그대로 끝나고 마지막 누름만 거부된다(게시를 시도한 쪽이
|
|
3666
|
+
* 앞선 누름·재접속 뒤 정리여도 — 기다리는 누름이 없으면 `callError`, 이미 게시된 영상·소리도 내린다 — 끈 화면의 늦은 실패는 알리지 않는다). 재접속 중에는 SDK 가
|
|
3667
|
+
* 게시하지 않는다 — 공유 중이던 화면이면 바로 끝나고, 새로 고른 화면은 다시 붙은 뒤(LiveKit 의 다시 게시가 끝난 뒤) 게시하고
|
|
3668
|
+
* 끝난다(다른 트랙의 다시 게시 실패는 화면 공유를 끄지 않는다). 재접속 중에 다시
|
|
3669
|
+
* 고르면 다시 게시된 옛 화면은 내린다. 통화가 끝나면 기다리지 않고 `INVALID_STATE` 로 끝난다(화면 공유는 다시 입장한 연결로 넘어가지
|
|
3670
|
+
* 않는다).
|
|
3671
|
+
*/
|
|
3672
|
+
startScreenShare(): Promise<void>;
|
|
3673
|
+
/**
|
|
3674
|
+
* 화면 공유를 멈춘다 — `startScreenShare` 와 같은 규칙. 고른 화면을 그 자리에서 멈추고(공유 표시가 바로 꺼진다) 게시를 내린 뒤
|
|
3675
|
+
* 끝난다. 공유 창이 떠 있어도 바로 끝나고 그 뒤 고른 화면은 게시하지 않는다. 재접속 중에 멈춰도 다시 게시된 화면까지 내리고, LiveKit
|
|
3676
|
+
* 이 다시 게시하는 중이어도, 게시가 아직 끝나지 않았어도(협상·재접속 대기) 기다리지 않는다 — 늦게 붙은 화면은 바로 내린다.
|
|
3677
|
+
*/
|
|
3678
|
+
stopScreenShare(): Promise<void>;
|
|
3679
|
+
/** 장치 목록 — 통화 전에도 부를 수 있다. */
|
|
3680
|
+
getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]>;
|
|
3681
|
+
/**
|
|
3682
|
+
* 장치를 바꾼다 — 통화가 있으면 언제든. 미디어가 붙기 전이면 기억했다가 붙을 때 그 장치로, 다시 입장해도 그 장치로 붙는다. 카메라·
|
|
3683
|
+
* 마이크는 그 장치의 켜고 끄기·앞선 바꾸기와 부른 순서대로 하나씩 옮긴다 — 켜는 중(권한 창·획득)이면 켜기가 끝난 뒤 옮기고 끝나며,
|
|
3684
|
+
* 켜는 중에 끄고 고르면 끈 뒤 옮기며, 옮기는 중에 끈 카메라는 옮긴 뒤 꺼진다(마이크 음소거는 기다리지 않는다). 켜져 있는 장치를 못
|
|
3685
|
+
* 바꾸면(같은 장치를 다시 골라도 다시 연다) `DEVICE_SWITCH_FAILED`(또는 false) — 쓰던 장치로 한 번 다시 열고 기억도 지금 쓰는 장치가
|
|
3686
|
+
* 된다(앞선 선택도 실패했으면 그것이 아니라 — 쓰던 장치로도 못 돌아가거나 쓰던 장치를 모르면 그 장치를 끈 뒤 `callError` 로 알린다 — 바로 다시 켜면 다시 연다, 끄는 사이
|
|
3687
|
+
* 다시 켜거나 끄면 그 누름이 이기고 알리지 않는다). 꺼진
|
|
3688
|
+
* 카메라·음소거한 마이크는 바꿀 때 열지 않고 켤 때 연다 — 그때 못 열면 그 켜기가 `MEDIA_ACCESS_DENIED`(`cause` 에 원래 오류)로
|
|
3689
|
+
* 실패한다. 스피커도 부른 순서대로 하나씩 바꾼다 — 상대 소리 요소마다 바꾸고 모두 끝난 뒤 판정해, 일부만 바뀌면 바뀐 요소를 쓰던
|
|
3690
|
+
* 출력으로 되돌린 뒤 실패한다(되돌리지도 못하면 그 `DEVICE_SWITCH_FAILED` 에 `outputMismatch: true` — 일부 소리가 고른 출력에 남았고
|
|
3691
|
+
* 기억은 쓰던 출력이다, 다시 고르면 모두 맞춘다). 전체 재접속 중(다시 붙었어도 LiveKit 이 다시 게시하는 중이면 그 끝까지)에 고른
|
|
3692
|
+
* 카메라·마이크는 그 끝을 기다려 옮기고 그때 끝난다(그동안 옮기면 다시 게시가 옛 장치로 열려 기억과 실제가 어긋난다 — 기다리는 동안
|
|
3693
|
+
* 그 장치의 켜고 끄기는 막지 않고, 기다리는 사이 다시 고르면 마지막에 고른 장치로만 옮기며, 스피커는 기다리지 않는다). 장치를 여는 중·다시 맞추기를 기다리는 중에 통화가 끝나면 기다리지 않고
|
|
3694
|
+
* true 로 끝난다(고른 장치는 기억한다). LiveKit 이 스스로 장치를 옮기면(빠진 장치 대신 다른 장치로 다시 열기·기기 변화로 입력·출력
|
|
3695
|
+
* 전환, 꺼진 카메라·음소거한 마이크에 적어 둔 다음 켜기 장치 — 꺼진 채 바꾼 장치는 재접속 뒤에도 그 장치) 고른 장치 기억도 따라간다 — 다시 입장해도 없는 장치로 붙지 않는다(바꾸는 중이면 그
|
|
3696
|
+
* 바꾸기의 결과가 기억이다, 고른 장치가 없으면 기본 장치 그대로).
|
|
3697
|
+
*/
|
|
3698
|
+
switchDevice(kind: MediaDeviceKind, deviceId: string): Promise<boolean>;
|
|
3699
|
+
|
|
3700
|
+
getCallRoom(callRoomId: string): Promise<CallRoomInfo>;
|
|
3701
|
+
/** 내 참가 상태 — ring 이 RINGING 이면 아직 울리는 중. */
|
|
3702
|
+
getParticipation(callRoomId: string): Promise<CallParticipation>;
|
|
3149
3703
|
isInCall(): boolean;
|
|
3150
|
-
|
|
3704
|
+
getCurrentCall(): CurrentCall | null;
|
|
3705
|
+
getRingingCalls(): RingingCall[];
|
|
3151
3706
|
|
|
3152
3707
|
// Cleanup
|
|
3153
3708
|
destroy(): Promise<void>;
|
|
@@ -3189,8 +3744,6 @@ export class Logger {
|
|
|
3189
3744
|
}
|
|
3190
3745
|
|
|
3191
3746
|
export class ConnectionManager {}
|
|
3192
|
-
export class MediaStreamManager {}
|
|
3193
|
-
export class PeerConnectionManager {}
|
|
3194
3747
|
|
|
3195
3748
|
/**
|
|
3196
3749
|
* 방 미독 카운트 계산기 (READ_SYNC_DESIGN §6).
|