@coze/realtime-api 1.2.1-beta.9 → 1.3.1

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.
@@ -0,0 +1,213 @@
1
+ declare enum EventNames {
2
+ /**
3
+ * en: All events
4
+ * zh: 所有事件
5
+ */
6
+ ALL = "realtime.event",
7
+ /**
8
+ * en: All client events
9
+ * zh: 所有客户端事件
10
+ */
11
+ ALL_CLIENT = "client.*",
12
+ /**
13
+ * en: All server events
14
+ * zh: 所有服务端事件
15
+ */
16
+ ALL_SERVER = "server.*",
17
+ /**
18
+ * en: Room info
19
+ * zh: 房间信息
20
+ */
21
+ ROOM_INFO = "client.room.info",
22
+ /**
23
+ * en: Client connected
24
+ * zh: 客户端连接
25
+ */
26
+ CONNECTED = "client.connected",
27
+ /**
28
+ * en: Client connecting
29
+ * zh: 客户端连接中
30
+ */
31
+ CONNECTING = "client.connecting",
32
+ /**
33
+ * en: Client interrupted
34
+ * zh: 客户端中断
35
+ */
36
+ INTERRUPTED = "client.interrupted",
37
+ /**
38
+ * en: Client disconnected
39
+ * zh: 客户端断开
40
+ */
41
+ DISCONNECTED = "client.disconnected",
42
+ /**
43
+ * en: Client audio unmuted
44
+ * zh: 客户端音频未静音
45
+ */
46
+ AUDIO_UNMUTED = "client.audio.unmuted",
47
+ /**
48
+ * en: Client audio muted
49
+ * zh: 客户端音频静音
50
+ */
51
+ AUDIO_MUTED = "client.audio.muted",
52
+ /**
53
+ * en: Client video on
54
+ * zh: 客户端视频开启
55
+ */
56
+ VIDEO_ON = "client.video.on",
57
+ /**
58
+ * en: Client video off
59
+ * zh: 客户端视频关闭
60
+ */
61
+ VIDEO_OFF = "client.video.off",
62
+ /**
63
+ * en: Client video error
64
+ * zh: 客户端视频(或屏幕共享)错误
65
+ */
66
+ VIDEO_ERROR = "client.video.error",
67
+ /**
68
+ * en: Client video event
69
+ * zh: 客户端视频事件
70
+ */
71
+ PLAYER_EVENT = "client.video.event",
72
+ /**
73
+ * en: Client error
74
+ * zh: 客户端错误
75
+ */
76
+ ERROR = "client.error",
77
+ /**
78
+ * en: Audio noise reduction enabled
79
+ * zh: 抑制平稳噪声
80
+ */
81
+ SUPPRESS_STATIONARY_NOISE = "client.suppress.stationary.noise",
82
+ /**
83
+ * en: Suppress non-stationary noise
84
+ * zh: 抑制非平稳噪声
85
+ */
86
+ SUPPRESS_NON_STATIONARY_NOISE = "client.suppress.non.stationary.noise",
87
+ /**
88
+ * en: Audio input device changed
89
+ * zh: 音频输入设备改变
90
+ */
91
+ AUDIO_INPUT_DEVICE_CHANGED = "client.input.device.changed",
92
+ /**
93
+ * en: Audio output device changed
94
+ * zh: 音频输出设备改变
95
+ */
96
+ AUDIO_OUTPUT_DEVICE_CHANGED = "client.output.device.changed",
97
+ /**
98
+ * en: Video input device changed
99
+ * zh: 视频输入设备改变
100
+ */
101
+ VIDEO_INPUT_DEVICE_CHANGED = "client.video.input.device.changed",
102
+ /**
103
+ * en: Network quality changed
104
+ * zh: 网络质量改变
105
+ */
106
+ NETWORK_QUALITY = "client.network.quality",
107
+ /**
108
+ * en: Bot joined
109
+ * zh: Bot 加入
110
+ */
111
+ BOT_JOIN = "server.bot.join",
112
+ /**
113
+ * en: Bot left
114
+ * zh: Bot 离开
115
+ */
116
+ BOT_LEAVE = "server.bot.leave",
117
+ /**
118
+ * en: Audio speech started
119
+ * zh: 开始说话
120
+ */
121
+ AUDIO_AGENT_SPEECH_STARTED = "server.audio.agent.speech_started",
122
+ /**
123
+ * en: Audio speech stopped
124
+ * zh: 停止说话
125
+ */
126
+ AUDIO_AGENT_SPEECH_STOPPED = "server.audio.agent.speech_stopped",
127
+ /**
128
+ * en: Server error
129
+ * zh: 服务端错误
130
+ */
131
+ SERVER_ERROR = "server.error",
132
+ /**
133
+ * en: User speech started
134
+ * zh: 用户开始说话
135
+ */
136
+ AUDIO_USER_SPEECH_STARTED = "server.audio.user.speech_started",
137
+ /**
138
+ * en: User speech stopped
139
+ * zh: 用户停止说话
140
+ */
141
+ AUDIO_USER_SPEECH_STOPPED = "server.audio.user.speech_stopped",
142
+ /**
143
+ * en: User successfully enters the room
144
+ * zh: 用户成功进入房间后,会收到该事件
145
+ */
146
+ SESSION_CREATED = "server.session.created",
147
+ /**
148
+ * en: Session updated
149
+ * zh: 会话更新
150
+ */
151
+ SESSION_UPDATED = "server.session.updated",
152
+ /**
153
+ * en: Conversation created
154
+ * zh: 会话创建
155
+ */
156
+ CONVERSATION_CREATED = "server.conversation.created",
157
+ /**
158
+ * en: Conversation chat created
159
+ * zh: 会话对话创建
160
+ */
161
+ CONVERSATION_CHAT_CREATED = "server.conversation.chat.created",
162
+ /**
163
+ * en: Conversation chat in progress
164
+ * zh: 对话正在处理中
165
+ */
166
+ CONVERSATION_CHAT_IN_PROGRESS = "server.conversation.chat.in_progress",
167
+ /**
168
+ * en: Conversation message delta received
169
+ * zh: 文本消息增量返回
170
+ */
171
+ CONVERSATION_MESSAGE_DELTA = "server.conversation.message.delta",
172
+ /**
173
+ * en: Conversation message completed
174
+ * zh: 文本消息完成
175
+ */
176
+ CONVERSATION_MESSAGE_COMPLETED = "server.conversation.message.completed",
177
+ /**
178
+ * en: Conversation chat completed
179
+ * zh: 对话完成
180
+ */
181
+ CONVERSATION_CHAT_COMPLETED = "server.conversation.chat.completed",
182
+ /**
183
+ * en: Conversation chat requires action
184
+ * zh: 对话需要插件
185
+ */
186
+ CONVERSATION_CHAT_REQUIRES_ACTION = "server.conversation.chat.requires_action",
187
+ /**
188
+ * en: Conversation chat failed
189
+ * zh: 对话失败
190
+ */
191
+ CONVERSATION_CHAT_FAILED = "server.conversation.chat.failed",
192
+ /**
193
+ * en: Session pre answer updated
194
+ * zh: 安抚配置更新成功
195
+ */
196
+ SESSION_PRE_ANSWER_UPDATED = "server.session.pre_answer.updated",
197
+ /**
198
+ * en: Conversation audio transcript delta
199
+ * zh: 用户语音识别字幕
200
+ */
201
+ CONVERSATION_AUDIO_TRANSCRIPT_DELTA = "server.conversation.audio_transcript.delta",
202
+ /**
203
+ * en: Mode updated
204
+ * zh: 更新房间模式成功
205
+ */
206
+ MODE_UPDATED = "server.mode.updated",
207
+ /**
208
+ * en: Live created
209
+ * zh: 直播创建
210
+ */
211
+ LIVE_CREATED = "server.live.created"
212
+ }
213
+ export default EventNames;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * WebRTC资源状态
3
+ */
4
+ export declare enum ResourceStatus {
5
+ IDLE = "idle",// 初始状态
6
+ CONNECTING = "connecting",// 连接中
7
+ CONNECTED = "connected",// 已连接
8
+ FAILED = "failed",// 连接失败
9
+ CLOSING = "closing",// 关闭中
10
+ CLOSED = "closed"
11
+ }
12
+ export type StatusChangeCallback = (status: ResourceStatus) => void;
13
+ /**
14
+ * 同声传译客户端
15
+ */
16
+ export declare class WebLiveClient {
17
+ private peerConnection;
18
+ private resourceUrl;
19
+ private status;
20
+ private player;
21
+ private statusListeners;
22
+ private liveId;
23
+ constructor(liveId: string);
24
+ /**
25
+ * 获取当前连接状态
26
+ */
27
+ getStatus(): ResourceStatus;
28
+ /**
29
+ * 添加状态变化监听器
30
+ * @param callback 状态变化回调函数
31
+ */
32
+ onStatusChange(callback: StatusChangeCallback): void;
33
+ /**
34
+ * 移除状态变化监听器
35
+ * @param callback 要移除的回调函数
36
+ */
37
+ offStatusChange(callback: StatusChangeCallback): void;
38
+ /**
39
+ * 移除状态变化监听器
40
+ * @param callback 要移除的回调函数
41
+ */
42
+ removeStatusListener(callback: StatusChangeCallback): void;
43
+ /**
44
+ * 订阅音频资源
45
+ * @param appId 应用ID
46
+ * @param streamId 流ID
47
+ * @param clientId 客户端ID
48
+ */
49
+ subscribe(appId: string, streamId: string, clientId?: string): Promise<{
50
+ status: ResourceStatus;
51
+ peerConnection: RTCPeerConnection;
52
+ }>;
53
+ /**
54
+ * 销毁订阅资源
55
+ */
56
+ unsubscribe(): Promise<boolean>;
57
+ /**
58
+ * 静音/取消静音
59
+ * @param muted 是否静音
60
+ */
61
+ setMuted(muted: boolean): void;
62
+ /**
63
+ * 关闭并清理资源
64
+ */
65
+ close(): void;
66
+ /**
67
+ * 获取直播信息
68
+ */
69
+ getLiveData: () => Promise<import("@coze/api").RetrieveLiveData>;
70
+ /**
71
+ * 等待ICE收集完成
72
+ * @param pc RTCPeerConnection实例
73
+ */
74
+ private waitForIceGathering;
75
+ private setupPeerConnectionListeners;
76
+ /**
77
+ * 关闭PeerConnection
78
+ */
79
+ private closePeerConnection;
80
+ /**
81
+ * 设置状态并触发监听回调
82
+ * @param newStatus 新状态
83
+ * @private 私有方法,仅内部使用
84
+ */
85
+ private setStatus;
86
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * WebRTC资源状态
3
+ */
4
+ export declare enum ResourceStatus {
5
+ IDLE = "idle",// 初始状态
6
+ CONNECTING = "connecting",// 连接中
7
+ CONNECTED = "connected",// 已连接
8
+ FAILED = "failed",// 连接失败
9
+ CLOSING = "closing",// 关闭中
10
+ CLOSED = "closed"
11
+ }
12
+ export type StatusChangeCallback = (status: ResourceStatus) => void;
13
+ /**
14
+ * 同声传译客户端
15
+ */
16
+ export declare class WebLiveClient {
17
+ private peerConnection;
18
+ private resourceUrl;
19
+ private status;
20
+ private player;
21
+ private statusListeners;
22
+ private liveId;
23
+ constructor(liveId: string);
24
+ /**
25
+ * 获取当前连接状态
26
+ */
27
+ getStatus(): ResourceStatus;
28
+ /**
29
+ * 添加状态变化监听器
30
+ * @param callback 状态变化回调函数
31
+ */
32
+ onStatusChange(callback: StatusChangeCallback): void;
33
+ /**
34
+ * 移除状态变化监听器
35
+ * @param callback 要移除的回调函数
36
+ */
37
+ offStatusChange(callback: StatusChangeCallback): void;
38
+ /**
39
+ * 移除状态变化监听器
40
+ * @param callback 要移除的回调函数
41
+ */
42
+ removeStatusListener(callback: StatusChangeCallback): void;
43
+ /**
44
+ * 订阅音频资源
45
+ * @param appId 应用ID
46
+ * @param streamId 流ID
47
+ * @param clientId 客户端ID
48
+ */
49
+ subscribe(appId: string, streamId: string, clientId?: string): Promise<{
50
+ status: ResourceStatus;
51
+ peerConnection: RTCPeerConnection;
52
+ }>;
53
+ /**
54
+ * 销毁订阅资源
55
+ */
56
+ unsubscribe(): Promise<boolean>;
57
+ /**
58
+ * 静音/取消静音
59
+ * @param muted 是否静音
60
+ */
61
+ setMuted(muted: boolean): void;
62
+ /**
63
+ * 关闭并清理资源
64
+ */
65
+ close(): void;
66
+ /**
67
+ * 获取直播信息
68
+ */
69
+ getLiveData: () => Promise<import("@coze/api").RetrieveLiveData>;
70
+ /**
71
+ * 等待ICE收集完成
72
+ * @param pc RTCPeerConnection实例
73
+ */
74
+ private waitForIceGathering;
75
+ private setupPeerConnectionListeners;
76
+ /**
77
+ * 关闭PeerConnection
78
+ */
79
+ private closePeerConnection;
80
+ /**
81
+ * 设置状态并触发监听回调
82
+ * @param newStatus 新状态
83
+ * @private 私有方法,仅内部使用
84
+ */
85
+ private setStatus;
86
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ + * Delays execution for the specified duration
3
+ + * @param milliseconds The time to sleep in milliseconds
4
+ + * @throws {Error} If milliseconds is negative
5
+ + * @returns Promise that resolves after the specified duration
6
+ + */
7
+ export declare const sleep: (milliseconds: number) => Promise<void>;
8
+ /**
9
+ * @deprecated use checkDevicePermission instead
10
+ * Check microphone permission,return boolean
11
+ */
12
+ export declare const checkPermission: ({ audio, video, }?: {
13
+ audio?: boolean;
14
+ video?: boolean;
15
+ }) => Promise<boolean>;
16
+ /**
17
+ * Checks device permissions for audio and video
18
+ * @param checkVideo Whether to check video permissions (default: false)
19
+ * @returns Promise that resolves with the device permission status
20
+ */
21
+ export declare const checkDevicePermission: (checkVideo?: boolean) => Promise<{
22
+ video: boolean;
23
+ audio: boolean;
24
+ videoExceptionError?: DOMException | undefined;
25
+ audioExceptionError?: DOMException | undefined;
26
+ }>;
27
+ /**
28
+ * Get audio devices
29
+ * @returns Promise<AudioDevices> Object containing arrays of audio input and output devices
30
+ */
31
+ export declare const getAudioDevices: ({ video, }?: {
32
+ video?: boolean;
33
+ }) => Promise<{
34
+ audioInputs: MediaDeviceInfo[];
35
+ audioOutputs: MediaDeviceInfo[];
36
+ videoInputs: MediaDeviceInfo[];
37
+ }>;
38
+ export declare const isScreenShareDevice: (deviceId?: string) => boolean;
39
+ /**
40
+ * 判断是否前后置摄像头
41
+ * @param deviceId
42
+ * @returns
43
+ */
44
+ export declare const isMobileVideoDevice: (deviceId?: string) => boolean;
45
+ /**
46
+ * Check if browser supports screen sharing
47
+ * 检查浏览器是否支持屏幕共享
48
+ */
49
+ export declare function isScreenShareSupported(): boolean;
package/dist/umd/index.js CHANGED
@@ -306,6 +306,54 @@
306
306
  * en: Session updated
307
307
  * zh: 会话更新
308
308
  */ EventNames["SESSION_UPDATED"] = "server.session.updated";
309
+ /**
310
+ * en: Conversation created
311
+ * zh: 会话创建
312
+ */ EventNames["CONVERSATION_CREATED"] = "server.conversation.created";
313
+ /**
314
+ * en: Conversation chat created
315
+ * zh: 会话对话创建
316
+ */ EventNames["CONVERSATION_CHAT_CREATED"] = "server.conversation.chat.created";
317
+ /**
318
+ * en: Conversation chat in progress
319
+ * zh: 对话正在处理中
320
+ */ EventNames["CONVERSATION_CHAT_IN_PROGRESS"] = "server.conversation.chat.in_progress";
321
+ /**
322
+ * en: Conversation message delta received
323
+ * zh: 文本消息增量返回
324
+ */ EventNames["CONVERSATION_MESSAGE_DELTA"] = "server.conversation.message.delta";
325
+ /**
326
+ * en: Conversation message completed
327
+ * zh: 文本消息完成
328
+ */ EventNames["CONVERSATION_MESSAGE_COMPLETED"] = "server.conversation.message.completed";
329
+ /**
330
+ * en: Conversation chat completed
331
+ * zh: 对话完成
332
+ */ EventNames["CONVERSATION_CHAT_COMPLETED"] = "server.conversation.chat.completed";
333
+ /**
334
+ * en: Conversation chat requires action
335
+ * zh: 对话需要插件
336
+ */ EventNames["CONVERSATION_CHAT_REQUIRES_ACTION"] = "server.conversation.chat.requires_action";
337
+ /**
338
+ * en: Conversation chat failed
339
+ * zh: 对话失败
340
+ */ EventNames["CONVERSATION_CHAT_FAILED"] = "server.conversation.chat.failed";
341
+ /**
342
+ * en: Session pre answer updated
343
+ * zh: 安抚配置更新成功
344
+ */ EventNames["SESSION_PRE_ANSWER_UPDATED"] = "server.session.pre_answer.updated";
345
+ /**
346
+ * en: Conversation audio transcript delta
347
+ * zh: 用户语音识别字幕
348
+ */ EventNames["CONVERSATION_AUDIO_TRANSCRIPT_DELTA"] = "server.conversation.audio_transcript.delta";
349
+ /**
350
+ * en: Mode updated
351
+ * zh: 更新房间模式成功
352
+ */ EventNames["MODE_UPDATED"] = "server.mode.updated";
353
+ /**
354
+ * en: Live created
355
+ * zh: 直播创建
356
+ */ EventNames["LIVE_CREATED"] = "server.live.created";
309
357
  return EventNames;
310
358
  }(event_names_EventNames || {});
311
359
  /* ESM default export */ const event_names = event_names_EventNames;
@@ -648,6 +696,7 @@
648
696
  if (isTestEnv) rtc_default().setParameter('ICE_CONFIG_REQUEST_URLS', [
649
697
  'rtc-test.bytedance.com'
650
698
  ]);
699
+ else localStorage.removeItem('RTC_ACCESS_URLS-VolcEngine');
651
700
  this.engine = rtc_default().createEngine(appId);
652
701
  this.handleMessage = this.handleMessage.bind(this);
653
702
  this.handleUserJoin = this.handleUserJoin.bind(this);
@@ -681,7 +730,7 @@
681
730
  else {
682
731
  const config = {};
683
732
  if (this._config.prologueContent) config.prologue_content = this._config.prologueContent;
684
- if (void 0 !== this._config.roomMode && null !== this._config.roomMode) config.room_mode = this._config.roomMode;
733
+ if (void 0 !== this._config.roomMode && null !== this._config.roomMode) config.room_mode = this._config.roomMode || api_.RoomMode.Default;
685
734
  if (this._config.videoConfig) {
686
735
  if (isScreenShareDevice(this._config.videoConfig.videoInputDeviceId)) config.video_config = {
687
736
  stream_video_type: 'screen'
@@ -690,7 +739,8 @@
690
739
  stream_video_type: 'main'
691
740
  };
692
741
  }
693
- roomInfo = await this._api.audio.rooms.create({
742
+ if (this._config.translateConfig) config.translate_config = this._config.translateConfig;
743
+ const params = {
694
744
  bot_id: botId,
695
745
  conversation_id: conversationId || void 0,
696
746
  voice_id: voiceId && voiceId.length > 0 ? voiceId : void 0,
@@ -698,7 +748,8 @@
698
748
  uid: this._config.userId || void 0,
699
749
  workflow_id: this._config.workflowId || void 0,
700
750
  config
701
- });
751
+ };
752
+ roomInfo = await this._api.audio.rooms.create(params);
702
753
  }
703
754
  } catch (error) {
704
755
  this.dispatch(event_names.ERROR, error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze/realtime-api",
3
- "version": "1.2.1-beta.9",
3
+ "version": "1.3.1",
4
4
  "description": "A powerful real-time communication SDK for voice interactions with Coze AI bots | 扣子官方实时通信 SDK,用于与 Coze AI bots 进行语音交互",
5
5
  "keywords": [
6
6
  "coze",
@@ -31,6 +31,11 @@
31
31
  "require": "./dist/cjs/event-names/index.js",
32
32
  "import": "./dist/esm/event-names/index.js",
33
33
  "types": "./dist/types/event-names/event-names.d.ts"
34
+ },
35
+ "./live": {
36
+ "require": "./dist/cjs/live/index.js",
37
+ "import": "./dist/esm/live/index.js",
38
+ "types": "./dist/types/live/live/index.d.ts"
34
39
  }
35
40
  },
36
41
  "main": "dist/cjs/index.js",
@@ -54,7 +59,7 @@
54
59
  "test:cov": "vitest --coverage --run"
55
60
  },
56
61
  "dependencies": {
57
- "@coze/api": "1.2.1-beta.18",
62
+ "@coze/api": "1.3.3",
58
63
  "@volcengine/rtc": "~4.62.11"
59
64
  },
60
65
  "devDependencies": {
@@ -71,6 +76,10 @@
71
76
  "typescript": "^5.5.3",
72
77
  "vitest": "~2.1.9"
73
78
  },
79
+ "publishConfig": {
80
+ "access": "public",
81
+ "registry": "https://registry.npmjs.org"
82
+ },
74
83
  "cozePublishConfig": {
75
84
  "exports": {
76
85
  ".": {
@@ -82,6 +91,11 @@
82
91
  "require": "./dist/cjs/event-names/index.js",
83
92
  "import": "./dist/esm/event-names/index.js",
84
93
  "types": "./dist/types/event-names/event-names.d.ts"
94
+ },
95
+ "./live": {
96
+ "require": "./dist/cjs/live/index.js",
97
+ "import": "./dist/esm/live/index.js",
98
+ "types": "./dist/types/live/live/index.d.ts"
85
99
  }
86
100
  },
87
101
  "main": "dist/cjs/index.js",