@elevenlabs/client 0.15.2 → 1.0.0-rc.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.
- package/README.md +20 -836
- package/dist/BaseConversation.d.ts +10 -12
- package/dist/BaseConversation.d.ts.map +1 -0
- package/dist/BaseConversation.js +392 -0
- package/dist/BaseConversation.js.map +1 -0
- package/dist/InputController.d.ts +13 -0
- package/dist/InputController.d.ts.map +1 -0
- package/dist/InputController.js +2 -0
- package/dist/InputController.js.map +1 -0
- package/dist/OutputController.d.ts +12 -0
- package/dist/OutputController.d.ts.map +1 -0
- package/dist/OutputController.js +2 -0
- package/dist/OutputController.js.map +1 -0
- package/dist/TextConversation.d.ts +7 -0
- package/dist/TextConversation.d.ts.map +1 -0
- package/dist/TextConversation.js +53 -0
- package/dist/TextConversation.js.map +1 -0
- package/dist/VoiceConversation.d.ts +14 -12
- package/dist/VoiceConversation.d.ts.map +1 -0
- package/dist/VoiceConversation.js +225 -0
- package/dist/VoiceConversation.js.map +1 -0
- package/dist/index.d.ts +11 -6
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +8 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +1 -0
- package/dist/lib.iife.js +23493 -0
- package/dist/lib.iife.js.map +1 -0
- package/dist/platform/VoiceSessionSetup.d.ts +35 -0
- package/dist/platform/VoiceSessionSetup.d.ts.map +1 -0
- package/dist/platform/VoiceSessionSetup.js +74 -0
- package/dist/platform/VoiceSessionSetup.js.map +1 -0
- package/dist/scribe/connection.d.ts +1 -0
- package/dist/scribe/connection.d.ts.map +1 -0
- package/dist/scribe/connection.js +363 -0
- package/dist/scribe/connection.js.map +1 -0
- package/dist/scribe/index.d.ts +1 -0
- package/dist/scribe/index.d.ts.map +1 -0
- package/dist/scribe/index.js +8 -0
- package/dist/scribe/index.js.map +1 -0
- package/dist/scribe/scribe.d.ts +1 -0
- package/dist/scribe/scribe.d.ts.map +1 -0
- package/dist/scribe/scribe.js +193 -0
- package/dist/scribe/scribe.js.map +1 -0
- package/dist/sourceInfo.d.ts +7 -0
- package/dist/sourceInfo.d.ts.map +1 -0
- package/dist/sourceInfo.js +9 -0
- package/dist/sourceInfo.js.map +1 -0
- package/dist/utils/BaseConnection.d.ts +2 -9
- package/dist/utils/BaseConnection.d.ts.map +1 -0
- package/dist/utils/BaseConnection.js +73 -0
- package/dist/utils/BaseConnection.js.map +1 -0
- package/dist/utils/ConnectionFactory.d.ts +1 -0
- package/dist/utils/ConnectionFactory.d.ts.map +1 -0
- package/dist/utils/ConnectionFactory.js +26 -0
- package/dist/utils/ConnectionFactory.js.map +1 -0
- package/dist/utils/WebRTCConnection.d.ts +6 -1
- package/dist/utils/WebRTCConnection.d.ts.map +1 -0
- package/dist/utils/WebRTCConnection.js +494 -0
- package/dist/utils/WebRTCConnection.js.map +1 -0
- package/dist/utils/WebSocketConnection.d.ts +8 -3
- package/dist/utils/WebSocketConnection.d.ts.map +1 -0
- package/dist/utils/WebSocketConnection.js +155 -0
- package/dist/utils/WebSocketConnection.js.map +1 -0
- package/dist/utils/applyDelay.d.ts +1 -0
- package/dist/utils/applyDelay.d.ts.map +1 -0
- package/dist/utils/applyDelay.js +18 -0
- package/dist/utils/applyDelay.js.map +1 -0
- package/dist/utils/attachConnectionToOutput.d.ts +5 -0
- package/dist/utils/attachConnectionToOutput.d.ts.map +1 -0
- package/dist/utils/attachConnectionToOutput.js +11 -0
- package/dist/utils/attachConnectionToOutput.js.map +1 -0
- package/dist/utils/attachInputToConnection.d.ts +6 -0
- package/dist/utils/attachInputToConnection.d.ts.map +1 -0
- package/dist/utils/attachInputToConnection.js +16 -0
- package/dist/utils/attachInputToConnection.js.map +1 -0
- package/dist/utils/audio.d.ts +1 -0
- package/dist/utils/audio.d.ts.map +1 -0
- package/dist/utils/audio.js +16 -0
- package/dist/utils/audio.js.map +1 -0
- package/dist/utils/audioConcatProcessor.generated.d.ts +1 -0
- package/dist/utils/audioConcatProcessor.generated.d.ts.map +1 -0
- package/{worklets/audioConcatProcessor.js → dist/utils/audioConcatProcessor.generated.js} +12 -18
- package/dist/utils/audioConcatProcessor.generated.js.map +1 -0
- package/dist/utils/compatibility.d.ts +1 -0
- package/dist/utils/compatibility.d.ts.map +1 -0
- package/dist/utils/compatibility.js +16 -0
- package/dist/utils/compatibility.js.map +1 -0
- package/dist/utils/connection.d.ts +11 -0
- package/dist/utils/connection.d.ts.map +1 -0
- package/dist/utils/connection.js +14 -0
- package/dist/utils/connection.js.map +1 -0
- package/dist/utils/createWorkletModuleLoader.d.ts +1 -0
- package/dist/utils/createWorkletModuleLoader.d.ts.map +1 -0
- package/dist/utils/createWorkletModuleLoader.js +43 -0
- package/dist/utils/createWorkletModuleLoader.js.map +1 -0
- package/dist/utils/errors.d.ts +1 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +11 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/events.d.ts +3 -5
- package/dist/utils/events.d.ts.map +1 -0
- package/dist/utils/events.js +4 -0
- package/dist/utils/events.js.map +1 -0
- package/dist/utils/input.d.ts +22 -11
- package/dist/utils/input.d.ts.map +1 -0
- package/dist/utils/input.js +181 -0
- package/dist/utils/input.js.map +1 -0
- package/dist/utils/location.d.ts +5 -0
- package/dist/utils/location.d.ts.map +1 -0
- package/dist/utils/location.js +31 -0
- package/dist/utils/location.js.map +1 -0
- package/dist/utils/mergeOptions.d.ts +11 -0
- package/dist/utils/mergeOptions.d.ts.map +1 -0
- package/dist/utils/mergeOptions.js +38 -0
- package/dist/utils/mergeOptions.js.map +1 -0
- package/dist/utils/output.d.ts +36 -10
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +127 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/overrides.d.ts +1 -0
- package/dist/utils/overrides.d.ts.map +1 -0
- package/dist/utils/overrides.js +40 -0
- package/dist/utils/overrides.js.map +1 -0
- package/dist/utils/postOverallFeedback.d.ts +1 -0
- package/dist/utils/postOverallFeedback.d.ts.map +1 -0
- package/dist/utils/postOverallFeedback.js +19 -0
- package/dist/utils/postOverallFeedback.js.map +1 -0
- package/dist/utils/rawAudioProcessor.generated.d.ts +1 -0
- package/dist/utils/rawAudioProcessor.generated.d.ts.map +1 -0
- package/{worklets/rawAudioProcessor.js → dist/utils/rawAudioProcessor.generated.js} +7 -1
- package/dist/utils/rawAudioProcessor.generated.js.map +1 -0
- package/dist/utils/scribeAudioProcessor.generated.d.ts +1 -0
- package/dist/utils/scribeAudioProcessor.generated.d.ts.map +1 -0
- package/{worklets/scribeAudioProcessor.js → dist/utils/scribeAudioProcessor.generated.js} +7 -1
- package/dist/utils/scribeAudioProcessor.generated.js.map +1 -0
- package/dist/version.d.ts +2 -1
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +22 -16
- package/.turbo/turbo-build.log +0 -13
- package/.turbo/turbo-generate-version.log +0 -4
- package/.turbo/turbo-generate-worklets.log +0 -9
- package/.turbo/turbo-lint$colon$es.log +0 -6
- package/.turbo/turbo-lint$colon$prettier.log +0 -6
- package/CHANGELOG.md +0 -50
- package/dist/lib.cjs +0 -2
- package/dist/lib.cjs.map +0 -1
- package/dist/lib.modern.js +0 -2
- package/dist/lib.modern.js.map +0 -1
- package/dist/lib.module.js +0 -2
- package/dist/lib.module.js.map +0 -1
- package/dist/lib.umd.js +0 -2
- package/dist/lib.umd.js.map +0 -1
- package/dist/utils/addLibsamplerateModule.d.ts +0 -1
- package/scripts/generateWorklets.js +0 -59
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
import { BaseConnection, parseFormat, } from "./BaseConnection";
|
|
2
|
+
import { sourceInfo } from "../sourceInfo";
|
|
3
|
+
import { isValidSocketEvent } from "./events";
|
|
4
|
+
import { Room, RoomEvent, Track, ConnectionState, createLocalAudioTrack, } from "livekit-client";
|
|
5
|
+
import { constructOverrides, CONVERSATION_INITIATION_CLIENT_DATA_TYPE, } from "./overrides";
|
|
6
|
+
import { arrayBufferToBase64 } from "./audio";
|
|
7
|
+
import { loadRawAudioProcessor } from "./rawAudioProcessor.generated";
|
|
8
|
+
const DEFAULT_LIVEKIT_WS_URL = "wss://livekit.rtc.elevenlabs.io";
|
|
9
|
+
const HTTPS_API_ORIGIN = "https://api.elevenlabs.io";
|
|
10
|
+
// Convert WSS origin to HTTPS for API calls
|
|
11
|
+
function convertWssToHttps(origin) {
|
|
12
|
+
return origin.replace(/^wss:\/\//, "https://");
|
|
13
|
+
}
|
|
14
|
+
export class WebRTCConnection extends BaseConnection {
|
|
15
|
+
conversationId;
|
|
16
|
+
inputFormat;
|
|
17
|
+
outputFormat;
|
|
18
|
+
room;
|
|
19
|
+
isConnected = false;
|
|
20
|
+
audioEventId = 1;
|
|
21
|
+
audioCaptureContext = null;
|
|
22
|
+
audioElements = [];
|
|
23
|
+
outputDeviceId = null;
|
|
24
|
+
outputAnalyser = null;
|
|
25
|
+
outputFrequencyData = null;
|
|
26
|
+
// InputController state
|
|
27
|
+
_isMuted = false;
|
|
28
|
+
// InputController interface exposed as a property
|
|
29
|
+
input = {
|
|
30
|
+
close: async () => {
|
|
31
|
+
// Close only microphone tracks, not the entire connection
|
|
32
|
+
if (this.isConnected) {
|
|
33
|
+
try {
|
|
34
|
+
this.room.localParticipant.audioTrackPublications.forEach(publication => {
|
|
35
|
+
if (publication.track) {
|
|
36
|
+
publication.track.stop();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.warn("Error stopping local tracks:", error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
setDevice: async (config) => {
|
|
46
|
+
// WebRTC only supports changing inputDeviceId
|
|
47
|
+
// sampleRate, format, and preferHeadphonesForIosDevices are not supported
|
|
48
|
+
if (config?.sampleRate !== undefined ||
|
|
49
|
+
config?.format !== undefined ||
|
|
50
|
+
config?.preferHeadphonesForIosDevices !== undefined) {
|
|
51
|
+
throw new Error("WebRTC input device does not support sampleRate, format, or preferHeadphonesForIosDevices options");
|
|
52
|
+
}
|
|
53
|
+
const inputDeviceId = config?.inputDeviceId;
|
|
54
|
+
if (!inputDeviceId) {
|
|
55
|
+
// No device ID specified - this is a no-op for WebRTC
|
|
56
|
+
// The default device is already being used
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await this.setAudioInputDevice(inputDeviceId);
|
|
60
|
+
},
|
|
61
|
+
setMuted: async (isMuted) => {
|
|
62
|
+
if (!this.isConnected || !this.room.localParticipant) {
|
|
63
|
+
console.warn("Cannot set microphone muted: room not connected or no local participant");
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Get the microphone track publication
|
|
67
|
+
const micTrackPublication = this.room.localParticipant.getTrackPublication(Track.Source.Microphone);
|
|
68
|
+
if (micTrackPublication?.track) {
|
|
69
|
+
try {
|
|
70
|
+
// Use LiveKit's built-in track muting
|
|
71
|
+
if (isMuted) {
|
|
72
|
+
await micTrackPublication.track.mute();
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
await micTrackPublication.track.unmute();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (_error) {
|
|
79
|
+
// If track muting fails, fall back to participant-level control
|
|
80
|
+
await this.room.localParticipant.setMicrophoneEnabled(!isMuted);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// No track found, use participant-level control directly
|
|
85
|
+
await this.room.localParticipant.setMicrophoneEnabled(!isMuted);
|
|
86
|
+
}
|
|
87
|
+
this._isMuted = isMuted;
|
|
88
|
+
},
|
|
89
|
+
isMuted: () => this._isMuted,
|
|
90
|
+
getAnalyser: () => undefined, // WebRTC doesn't provide input analyser
|
|
91
|
+
};
|
|
92
|
+
// OutputController interface exposed as a property
|
|
93
|
+
output = {
|
|
94
|
+
close: async () => {
|
|
95
|
+
// No-op for WebRTC - LiveKit handles cleanup
|
|
96
|
+
// Audio elements are cleaned up when the connection closes
|
|
97
|
+
},
|
|
98
|
+
setDevice: async (config) => {
|
|
99
|
+
// WebRTC only supports changing outputDeviceId
|
|
100
|
+
// sampleRate and format are not supported
|
|
101
|
+
if (config?.sampleRate !== undefined || config?.format !== undefined) {
|
|
102
|
+
throw new Error("WebRTC output device does not support sampleRate or format options");
|
|
103
|
+
}
|
|
104
|
+
const outputDeviceId = config?.outputDeviceId;
|
|
105
|
+
if (!outputDeviceId) {
|
|
106
|
+
// No device ID specified - this is a no-op for WebRTC
|
|
107
|
+
// The default device is already being used
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
await this.setAudioOutputDevice(outputDeviceId);
|
|
111
|
+
},
|
|
112
|
+
setVolume: (volume) => {
|
|
113
|
+
this.setAudioVolume(volume);
|
|
114
|
+
},
|
|
115
|
+
interrupt: (_resetDuration) => {
|
|
116
|
+
// No-op for WebRTC - LiveKit handles audio playback and interruption
|
|
117
|
+
// Audio interruption is managed by the server/agent
|
|
118
|
+
},
|
|
119
|
+
getAnalyser: () => this.outputAnalyser ?? undefined,
|
|
120
|
+
};
|
|
121
|
+
constructor(room, conversationId, inputFormat, outputFormat, config = {}) {
|
|
122
|
+
super(config);
|
|
123
|
+
this.room = room;
|
|
124
|
+
this.conversationId = conversationId;
|
|
125
|
+
this.inputFormat = inputFormat;
|
|
126
|
+
this.outputFormat = outputFormat;
|
|
127
|
+
this.setupRoomEventListeners();
|
|
128
|
+
}
|
|
129
|
+
static async create(config) {
|
|
130
|
+
let conversationToken;
|
|
131
|
+
// Handle different authentication scenarios
|
|
132
|
+
if ("conversationToken" in config && config.conversationToken) {
|
|
133
|
+
// Direct token provided
|
|
134
|
+
conversationToken = config.conversationToken;
|
|
135
|
+
}
|
|
136
|
+
else if ("agentId" in config && config.agentId) {
|
|
137
|
+
// Agent ID provided - fetch token from API
|
|
138
|
+
try {
|
|
139
|
+
const { name: source, version } = sourceInfo;
|
|
140
|
+
const configOrigin = config.origin ?? HTTPS_API_ORIGIN;
|
|
141
|
+
const origin = convertWssToHttps(configOrigin); //origin is wss, not https
|
|
142
|
+
const url = `${origin}/v1/convai/conversation/token?agent_id=${config.agentId}&source=${source}&version=${version}`;
|
|
143
|
+
const response = await fetch(url);
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
throw new Error(`ElevenLabs API returned ${response.status} ${response.statusText}`);
|
|
146
|
+
}
|
|
147
|
+
const data = await response.json();
|
|
148
|
+
conversationToken = data.token;
|
|
149
|
+
if (!conversationToken) {
|
|
150
|
+
throw new Error("No conversation token received from API");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
let msg = error instanceof Error ? error.message : String(error);
|
|
155
|
+
if (error instanceof Error && error.message.includes("401")) {
|
|
156
|
+
msg =
|
|
157
|
+
"Your agent has authentication enabled, but no signed URL or conversation token was provided.";
|
|
158
|
+
}
|
|
159
|
+
throw new Error(`Failed to fetch conversation token for agent ${config.agentId}: ${msg}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new Error("Either conversationToken or agentId is required for WebRTC connection");
|
|
164
|
+
}
|
|
165
|
+
const room = new Room();
|
|
166
|
+
try {
|
|
167
|
+
// Create connection instance first to set up event listeners
|
|
168
|
+
const conversationId = `room_${Date.now()}`;
|
|
169
|
+
const inputFormat = parseFormat("pcm_48000");
|
|
170
|
+
const outputFormat = parseFormat("pcm_48000");
|
|
171
|
+
const connection = new WebRTCConnection(room, conversationId, inputFormat, outputFormat, config);
|
|
172
|
+
// Use configurable LiveKit URL or default if not provided
|
|
173
|
+
const livekitUrl = config.livekitUrl || DEFAULT_LIVEKIT_WS_URL;
|
|
174
|
+
// Enable microphone on SignalConnected (before room.connect resolves).
|
|
175
|
+
// The server may wait for the client to publish audio before fully
|
|
176
|
+
// establishing the subscriber peer connection, matching the behaviour
|
|
177
|
+
// of @livekit/components-react's useLiveKitRoom hook.
|
|
178
|
+
const micEnabled = config.textOnly
|
|
179
|
+
? Promise.resolve()
|
|
180
|
+
: new Promise((resolve, reject) => {
|
|
181
|
+
room.once(RoomEvent.SignalConnected, () => {
|
|
182
|
+
room.localParticipant
|
|
183
|
+
.setMicrophoneEnabled(true)
|
|
184
|
+
.then(() => resolve())
|
|
185
|
+
.catch(reject);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
// Connect to the LiveKit room
|
|
189
|
+
await room.connect(livekitUrl, conversationToken);
|
|
190
|
+
// Wait for the Connected event to ensure isConnected is true
|
|
191
|
+
await new Promise(resolve => {
|
|
192
|
+
if (connection.isConnected) {
|
|
193
|
+
resolve();
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
const onConnected = () => {
|
|
197
|
+
room.off(RoomEvent.Connected, onConnected);
|
|
198
|
+
resolve();
|
|
199
|
+
};
|
|
200
|
+
room.on(RoomEvent.Connected, onConnected);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
// Ensure the microphone was successfully enabled
|
|
204
|
+
await micEnabled;
|
|
205
|
+
if (room.name) {
|
|
206
|
+
connection.conversationId =
|
|
207
|
+
room.name.match(/(conv_[a-zA-Z0-9]+)/)?.[0] || room.name;
|
|
208
|
+
}
|
|
209
|
+
const overridesEvent = constructOverrides(config);
|
|
210
|
+
connection.debug({
|
|
211
|
+
type: CONVERSATION_INITIATION_CLIENT_DATA_TYPE,
|
|
212
|
+
message: overridesEvent,
|
|
213
|
+
});
|
|
214
|
+
await connection.sendMessage(overridesEvent);
|
|
215
|
+
return connection;
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
await room.disconnect();
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
setupRoomEventListeners() {
|
|
223
|
+
this.room.on(RoomEvent.Connected, async () => {
|
|
224
|
+
this.isConnected = true;
|
|
225
|
+
});
|
|
226
|
+
this.room.on(RoomEvent.Disconnected, reason => {
|
|
227
|
+
this.isConnected = false;
|
|
228
|
+
this.disconnect({
|
|
229
|
+
reason: "agent",
|
|
230
|
+
context: new CloseEvent("close", { reason: reason?.toString() }),
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
this.room.on(RoomEvent.ConnectionStateChanged, state => {
|
|
234
|
+
if (state === ConnectionState.Disconnected) {
|
|
235
|
+
this.isConnected = false;
|
|
236
|
+
this.disconnect({
|
|
237
|
+
reason: "error",
|
|
238
|
+
message: `LiveKit connection state changed to ${state}`,
|
|
239
|
+
context: new Event("connection_state_changed"),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
// Handle incoming data messages
|
|
244
|
+
this.room.on(RoomEvent.DataReceived, (payload, _participant) => {
|
|
245
|
+
try {
|
|
246
|
+
const message = JSON.parse(new TextDecoder().decode(payload));
|
|
247
|
+
// Filter out audio messages for WebRTC - they're handled via audio tracks
|
|
248
|
+
if (message.type === "audio") {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (isValidSocketEvent(message)) {
|
|
252
|
+
this.handleMessage(message);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
console.warn("Invalid socket event received:", message);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.warn("Failed to parse incoming data message:", error);
|
|
260
|
+
console.warn("Raw payload:", new TextDecoder().decode(payload));
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
this.room.on(RoomEvent.TrackSubscribed, async (track, _publication, participant) => {
|
|
264
|
+
if (track.kind === Track.Kind.Audio &&
|
|
265
|
+
participant.identity.includes("agent")) {
|
|
266
|
+
// Play the audio track
|
|
267
|
+
const remoteAudioTrack = track;
|
|
268
|
+
const audioElement = remoteAudioTrack.attach();
|
|
269
|
+
audioElement.autoplay = true;
|
|
270
|
+
audioElement.controls = false;
|
|
271
|
+
// Set output device if one was previously selected
|
|
272
|
+
if (this.outputDeviceId && audioElement.setSinkId) {
|
|
273
|
+
try {
|
|
274
|
+
await audioElement.setSinkId(this.outputDeviceId);
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
console.warn("Failed to set output device for new audio element:", error);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// Add to DOM (hidden) to ensure it plays
|
|
281
|
+
audioElement.style.display = "none";
|
|
282
|
+
document.body.appendChild(audioElement);
|
|
283
|
+
// Store reference for volume control
|
|
284
|
+
this.audioElements.push(audioElement);
|
|
285
|
+
// Apply current volume if it exists (for when volume was set before audio track arrived)
|
|
286
|
+
if (this.audioElements.length === 1) {
|
|
287
|
+
// First audio element - trigger a callback to sync with current volume
|
|
288
|
+
this.onDebug?.({ type: "audio_element_ready" });
|
|
289
|
+
}
|
|
290
|
+
// Set up audio capture for onAudio callback
|
|
291
|
+
await this.setupAudioCapture(remoteAudioTrack);
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
this.room.on(RoomEvent.ActiveSpeakersChanged, async (speakers) => {
|
|
295
|
+
if (speakers.length > 0) {
|
|
296
|
+
this.updateMode(speakers[0].identity.startsWith("agent") ? "speaking" : "listening");
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
this.updateMode("listening");
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
this.room.on(RoomEvent.ParticipantDisconnected, (participant) => {
|
|
303
|
+
if (participant.identity?.startsWith("agent")) {
|
|
304
|
+
this.disconnect({
|
|
305
|
+
reason: "agent",
|
|
306
|
+
context: new CloseEvent("close", { reason: "agent disconnected" }),
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
close() {
|
|
312
|
+
if (this.isConnected) {
|
|
313
|
+
try {
|
|
314
|
+
// Explicitly stop all local tracks before disconnecting to ensure microphone is released
|
|
315
|
+
this.room.localParticipant.audioTrackPublications.forEach(publication => {
|
|
316
|
+
if (publication.track) {
|
|
317
|
+
publication.track.stop();
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
console.warn("Error stopping local tracks:", error);
|
|
323
|
+
}
|
|
324
|
+
// Clean up audio capture context (non-blocking)
|
|
325
|
+
if (this.audioCaptureContext) {
|
|
326
|
+
this.audioCaptureContext.close().catch(error => {
|
|
327
|
+
console.warn("Error closing audio capture context:", error);
|
|
328
|
+
});
|
|
329
|
+
this.audioCaptureContext = null;
|
|
330
|
+
}
|
|
331
|
+
// Clean up audio elements
|
|
332
|
+
this.audioElements.forEach(element => {
|
|
333
|
+
if (element.parentNode) {
|
|
334
|
+
element.parentNode.removeChild(element);
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
this.audioElements = [];
|
|
338
|
+
this.room.disconnect();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async sendMessage(message) {
|
|
342
|
+
if (!this.isConnected || !this.room.localParticipant) {
|
|
343
|
+
console.warn("Cannot send message: room not connected or no local participant");
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
// In WebRTC mode, audio is sent via published tracks, not data messages
|
|
347
|
+
if ("user_audio_chunk" in message) {
|
|
348
|
+
// Ignore audio data messages - audio flows through WebRTC tracks
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
try {
|
|
352
|
+
const encoder = new TextEncoder();
|
|
353
|
+
const data = encoder.encode(JSON.stringify(message));
|
|
354
|
+
await this.room.localParticipant.publishData(data, { reliable: true });
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
this.debug({
|
|
358
|
+
type: "send_message_error",
|
|
359
|
+
message: {
|
|
360
|
+
message,
|
|
361
|
+
error,
|
|
362
|
+
},
|
|
363
|
+
});
|
|
364
|
+
console.error("Failed to send message via WebRTC:", error);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Get the room instance for advanced usage
|
|
368
|
+
getRoom() {
|
|
369
|
+
return this.room;
|
|
370
|
+
}
|
|
371
|
+
async setupAudioCapture(track) {
|
|
372
|
+
try {
|
|
373
|
+
// Create audio context for processing
|
|
374
|
+
const audioContext = new AudioContext();
|
|
375
|
+
this.audioCaptureContext = audioContext;
|
|
376
|
+
// Create analyser for frequency data
|
|
377
|
+
this.outputAnalyser = audioContext.createAnalyser();
|
|
378
|
+
this.outputAnalyser.fftSize = 2048;
|
|
379
|
+
this.outputAnalyser.smoothingTimeConstant = 0.8;
|
|
380
|
+
// Create MediaStream from the track
|
|
381
|
+
const mediaStream = new MediaStream([track.mediaStreamTrack]);
|
|
382
|
+
// Create audio source from the stream
|
|
383
|
+
const source = audioContext.createMediaStreamSource(mediaStream);
|
|
384
|
+
// Connect source to analyser
|
|
385
|
+
source.connect(this.outputAnalyser);
|
|
386
|
+
await loadRawAudioProcessor(audioContext.audioWorklet);
|
|
387
|
+
const worklet = new AudioWorkletNode(audioContext, "rawAudioProcessor");
|
|
388
|
+
// Connect analyser to worklet for processing
|
|
389
|
+
this.outputAnalyser.connect(worklet);
|
|
390
|
+
// Configure the processor for the output format
|
|
391
|
+
worklet.port.postMessage({
|
|
392
|
+
type: "setFormat",
|
|
393
|
+
format: this.outputFormat.format,
|
|
394
|
+
sampleRate: this.outputFormat.sampleRate,
|
|
395
|
+
});
|
|
396
|
+
// Handle processed audio data
|
|
397
|
+
worklet.port.onmessage = (event) => {
|
|
398
|
+
const [audioData, maxVolume] = event.data;
|
|
399
|
+
// Only send audio if there's significant volume (not just silence)
|
|
400
|
+
const volumeThreshold = 0.01;
|
|
401
|
+
if (maxVolume > volumeThreshold) {
|
|
402
|
+
// Convert to base64
|
|
403
|
+
const base64Audio = arrayBufferToBase64(audioData.buffer);
|
|
404
|
+
// Use sequential event ID for proper feedback tracking
|
|
405
|
+
const eventId = this.audioEventId++;
|
|
406
|
+
// Trigger the onAudio callback by simulating an audio event
|
|
407
|
+
this.handleMessage({
|
|
408
|
+
type: "audio",
|
|
409
|
+
audio_event: {
|
|
410
|
+
audio_base_64: base64Audio,
|
|
411
|
+
event_id: eventId,
|
|
412
|
+
},
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
// Connect the audio processing chain
|
|
417
|
+
source.connect(worklet);
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
console.warn("Failed to set up audio capture:", error);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
setAudioVolume(volume) {
|
|
424
|
+
this.audioElements.forEach(element => {
|
|
425
|
+
element.volume = volume;
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
async setAudioOutputDevice(deviceId) {
|
|
429
|
+
if (!("setSinkId" in HTMLAudioElement.prototype)) {
|
|
430
|
+
throw new Error("setSinkId is not supported in this browser");
|
|
431
|
+
}
|
|
432
|
+
// Set output device for all existing audio elements
|
|
433
|
+
const promises = this.audioElements.map(async (element) => {
|
|
434
|
+
try {
|
|
435
|
+
await element.setSinkId(deviceId);
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
console.error("Failed to set sink ID for audio element:", error);
|
|
439
|
+
throw error;
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
await Promise.all(promises);
|
|
443
|
+
// Store the device ID for future audio elements
|
|
444
|
+
this.outputDeviceId = deviceId;
|
|
445
|
+
}
|
|
446
|
+
async setAudioInputDevice(deviceId) {
|
|
447
|
+
if (!this.isConnected || !this.room.localParticipant) {
|
|
448
|
+
throw new Error("Cannot change input device: room not connected or no local participant");
|
|
449
|
+
}
|
|
450
|
+
try {
|
|
451
|
+
// Get the current microphone track publication
|
|
452
|
+
const currentMicTrackPublication = this.room.localParticipant.getTrackPublication(Track.Source.Microphone);
|
|
453
|
+
// Stop the current microphone track if it exists
|
|
454
|
+
if (currentMicTrackPublication?.track) {
|
|
455
|
+
await currentMicTrackPublication.track.stop();
|
|
456
|
+
await this.room.localParticipant.unpublishTrack(currentMicTrackPublication.track);
|
|
457
|
+
}
|
|
458
|
+
// Create constraints for the new input device
|
|
459
|
+
const audioConstraints = {
|
|
460
|
+
deviceId: { exact: deviceId },
|
|
461
|
+
echoCancellation: true,
|
|
462
|
+
noiseSuppression: true,
|
|
463
|
+
autoGainControl: true,
|
|
464
|
+
channelCount: { ideal: 1 },
|
|
465
|
+
};
|
|
466
|
+
// Create new audio track with the specified device
|
|
467
|
+
const audioTrack = await createLocalAudioTrack(audioConstraints);
|
|
468
|
+
// Publish the new microphone track
|
|
469
|
+
await this.room.localParticipant.publishTrack(audioTrack, {
|
|
470
|
+
name: "microphone",
|
|
471
|
+
source: Track.Source.Microphone,
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
catch (error) {
|
|
475
|
+
console.error("Failed to change input device:", error);
|
|
476
|
+
// Try to re-enable default microphone on failure
|
|
477
|
+
try {
|
|
478
|
+
await this.room.localParticipant.setMicrophoneEnabled(true);
|
|
479
|
+
}
|
|
480
|
+
catch (recoveryError) {
|
|
481
|
+
console.error("Failed to recover microphone after device switch error:", recoveryError);
|
|
482
|
+
}
|
|
483
|
+
throw error;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
getOutputByteFrequencyData() {
|
|
487
|
+
if (!this.outputAnalyser)
|
|
488
|
+
return null;
|
|
489
|
+
this.outputFrequencyData ??= new Uint8Array(this.outputAnalyser.frequencyBinCount);
|
|
490
|
+
this.outputAnalyser.getByteFrequencyData(this.outputFrequencyData);
|
|
491
|
+
return this.outputFrequencyData;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=WebRTCConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebRTCConnection.js","sourceRoot":"","sources":["../../src/utils/WebRTCConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { BaseConnection, type SessionConfig, type FormatConfig } from "./BaseConnection";
|
|
2
|
-
import { type OutgoingSocketEvent } from "./events";
|
|
3
|
-
|
|
2
|
+
import { type OutgoingSocketEvent, type IncomingSocketEvent } from "./events";
|
|
3
|
+
import type { OutputEventTarget, OutputListener } from "./output";
|
|
4
|
+
export declare class WebSocketConnection extends BaseConnection implements OutputEventTarget {
|
|
4
5
|
private readonly socket;
|
|
5
6
|
readonly conversationId: string;
|
|
6
7
|
readonly inputFormat: FormatConfig;
|
|
7
8
|
readonly outputFormat: FormatConfig;
|
|
9
|
+
private outputListeners;
|
|
8
10
|
private constructor();
|
|
9
11
|
static create(config: SessionConfig): Promise<WebSocketConnection>;
|
|
10
12
|
close(): void;
|
|
11
13
|
sendMessage(message: OutgoingSocketEvent): void;
|
|
12
|
-
|
|
14
|
+
addListener(listener: OutputListener): void;
|
|
15
|
+
removeListener(listener: OutputListener): void;
|
|
16
|
+
protected handleMessage(parsedEvent: IncomingSocketEvent): void;
|
|
13
17
|
}
|
|
18
|
+
//# sourceMappingURL=WebSocketConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketConnection.d.ts","sourceRoot":"","sources":["../../src/utils/WebSocketConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAMlE,qBAAa,mBACX,SAAQ,cACR,YAAW,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,WAAW,EAAE,YAAY,CAAC;IAC1C,SAAgB,YAAY,EAAE,YAAY,CAAC;IAE3C,OAAO,CAAC,eAAe,CAAkC;IAEzD,OAAO;WAqEa,MAAM,CACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,mBAAmB,CAAC;IA0GxB,KAAK;IAIL,WAAW,CAAC,OAAO,EAAE,mBAAmB;IAIxC,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAI3C,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;cAIlC,aAAa,CAAC,WAAW,EAAE,mBAAmB;CAWlE"}
|