@elevenlabs/client 0.15.2 → 1.0.0-rc.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 +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,193 @@
|
|
|
1
|
+
import { RealtimeConnection } from "./connection";
|
|
2
|
+
import { loadScribeAudioProcessor } from "../utils/scribeAudioProcessor.generated";
|
|
3
|
+
export var AudioFormat;
|
|
4
|
+
(function (AudioFormat) {
|
|
5
|
+
AudioFormat["PCM_8000"] = "pcm_8000";
|
|
6
|
+
AudioFormat["PCM_16000"] = "pcm_16000";
|
|
7
|
+
AudioFormat["PCM_22050"] = "pcm_22050";
|
|
8
|
+
AudioFormat["PCM_24000"] = "pcm_24000";
|
|
9
|
+
AudioFormat["PCM_44100"] = "pcm_44100";
|
|
10
|
+
AudioFormat["PCM_48000"] = "pcm_48000";
|
|
11
|
+
AudioFormat["ULAW_8000"] = "ulaw_8000";
|
|
12
|
+
})(AudioFormat || (AudioFormat = {}));
|
|
13
|
+
export var CommitStrategy;
|
|
14
|
+
(function (CommitStrategy) {
|
|
15
|
+
CommitStrategy["MANUAL"] = "manual";
|
|
16
|
+
CommitStrategy["VAD"] = "vad";
|
|
17
|
+
})(CommitStrategy || (CommitStrategy = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Real-time speech-to-text transcription client for browser environments.
|
|
20
|
+
* Supports microphone streaming and manual audio chunk transmission.
|
|
21
|
+
*/
|
|
22
|
+
// biome-ignore lint/complexity/noStaticOnlyClass: This class is static only because it is a singleton
|
|
23
|
+
export class ScribeRealtime {
|
|
24
|
+
static DEFAULT_BASE_URI = "wss://api.elevenlabs.io";
|
|
25
|
+
static getWebSocketUri(baseUri = ScribeRealtime.DEFAULT_BASE_URI) {
|
|
26
|
+
return `${baseUri}/v1/speech-to-text/realtime`;
|
|
27
|
+
}
|
|
28
|
+
static buildWebSocketUri(options) {
|
|
29
|
+
const baseUri = ScribeRealtime.getWebSocketUri(options.baseUri);
|
|
30
|
+
const params = new URLSearchParams();
|
|
31
|
+
// Model ID and token are required, so no check required
|
|
32
|
+
params.append("model_id", options.modelId);
|
|
33
|
+
params.append("token", options.token);
|
|
34
|
+
// Add optional parameters if provided, with validation
|
|
35
|
+
if (options.commitStrategy !== undefined) {
|
|
36
|
+
params.append("commit_strategy", options.commitStrategy);
|
|
37
|
+
}
|
|
38
|
+
if (options.audioFormat !== undefined) {
|
|
39
|
+
params.append("audio_format", options.audioFormat);
|
|
40
|
+
}
|
|
41
|
+
if (options.vadSilenceThresholdSecs !== undefined) {
|
|
42
|
+
if (options.vadSilenceThresholdSecs <= 0.3 ||
|
|
43
|
+
options.vadSilenceThresholdSecs > 3.0) {
|
|
44
|
+
throw new Error("vadSilenceThresholdSecs must be between 0.3 and 3.0");
|
|
45
|
+
}
|
|
46
|
+
params.append("vad_silence_threshold_secs", options.vadSilenceThresholdSecs.toString());
|
|
47
|
+
}
|
|
48
|
+
if (options.vadThreshold !== undefined) {
|
|
49
|
+
if (options.vadThreshold < 0.1 || options.vadThreshold > 0.9) {
|
|
50
|
+
throw new Error("vadThreshold must be between 0.1 and 0.9");
|
|
51
|
+
}
|
|
52
|
+
params.append("vad_threshold", options.vadThreshold.toString());
|
|
53
|
+
}
|
|
54
|
+
if (options.minSpeechDurationMs !== undefined) {
|
|
55
|
+
if (options.minSpeechDurationMs <= 50 ||
|
|
56
|
+
options.minSpeechDurationMs > 2000) {
|
|
57
|
+
throw new Error("minSpeechDurationMs must be between 50 and 2000");
|
|
58
|
+
}
|
|
59
|
+
params.append("min_speech_duration_ms", options.minSpeechDurationMs.toString());
|
|
60
|
+
}
|
|
61
|
+
if (options.minSilenceDurationMs !== undefined) {
|
|
62
|
+
if (options.minSilenceDurationMs <= 50 ||
|
|
63
|
+
options.minSilenceDurationMs > 2000) {
|
|
64
|
+
throw new Error("minSilenceDurationMs must be between 50 and 2000");
|
|
65
|
+
}
|
|
66
|
+
params.append("min_silence_duration_ms", options.minSilenceDurationMs.toString());
|
|
67
|
+
}
|
|
68
|
+
if (options.languageCode !== undefined) {
|
|
69
|
+
params.append("language_code", options.languageCode);
|
|
70
|
+
}
|
|
71
|
+
if (options.includeTimestamps !== undefined) {
|
|
72
|
+
params.append("include_timestamps", options.includeTimestamps ? "true" : "false");
|
|
73
|
+
}
|
|
74
|
+
const queryString = params.toString();
|
|
75
|
+
return queryString ? `${baseUri}?${queryString}` : baseUri;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Establishes a WebSocket connection for real-time speech-to-text transcription.
|
|
79
|
+
*
|
|
80
|
+
* @param options - Configuration options for the connection
|
|
81
|
+
* @returns A RealtimeConnection instance
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* // Manual audio streaming
|
|
86
|
+
* const connection = Scribe.connect({
|
|
87
|
+
* token: "...",
|
|
88
|
+
* modelId: "scribe_v2_realtime",
|
|
89
|
+
* audioFormat: AudioFormat.PCM_16000,
|
|
90
|
+
* sampleRate: 16000,
|
|
91
|
+
* });
|
|
92
|
+
*
|
|
93
|
+
* // Automatic microphone streaming
|
|
94
|
+
* const connection = Scribe.connect({
|
|
95
|
+
* token: "...",
|
|
96
|
+
* modelId: "scribe_v2_realtime",
|
|
97
|
+
* microphone: {
|
|
98
|
+
* echoCancellation: true,
|
|
99
|
+
* noiseSuppression: true
|
|
100
|
+
* }
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
static connect(options) {
|
|
105
|
+
if (!options.modelId) {
|
|
106
|
+
throw new Error("modelId is required");
|
|
107
|
+
}
|
|
108
|
+
// Create connection object first so users can attach event listeners before messages arrive
|
|
109
|
+
const sampleRate = "microphone" in options && options.microphone
|
|
110
|
+
? 16000
|
|
111
|
+
: options.sampleRate;
|
|
112
|
+
const connection = new RealtimeConnection(sampleRate);
|
|
113
|
+
// Build WebSocket URI with query parameters
|
|
114
|
+
const uri = ScribeRealtime.buildWebSocketUri(options);
|
|
115
|
+
const websocket = new WebSocket(uri);
|
|
116
|
+
// If microphone mode, set up streaming handler
|
|
117
|
+
if ("microphone" in options && options.microphone) {
|
|
118
|
+
websocket.addEventListener("open", () => {
|
|
119
|
+
ScribeRealtime.streamFromMicrophone(options, connection);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
connection.setWebSocket(websocket);
|
|
123
|
+
return connection;
|
|
124
|
+
}
|
|
125
|
+
static async streamFromMicrophone(options, connection) {
|
|
126
|
+
const TARGET_SAMPLE_RATE = 16000;
|
|
127
|
+
try {
|
|
128
|
+
// Get microphone access
|
|
129
|
+
const stream = await navigator.mediaDevices.getUserMedia({
|
|
130
|
+
audio: {
|
|
131
|
+
deviceId: options.microphone?.deviceId,
|
|
132
|
+
echoCancellation: options.microphone?.echoCancellation ?? true,
|
|
133
|
+
noiseSuppression: options.microphone?.noiseSuppression ?? true,
|
|
134
|
+
autoGainControl: options.microphone?.autoGainControl ?? true,
|
|
135
|
+
channelCount: options.microphone?.channelCount ?? 1,
|
|
136
|
+
sampleRate: { ideal: TARGET_SAMPLE_RATE },
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
// Get the actual sample rate from the stream - the ideal may not have been honored
|
|
140
|
+
const trackSettings = stream.getAudioTracks()[0]?.getSettings();
|
|
141
|
+
const streamSampleRate = trackSettings?.sampleRate;
|
|
142
|
+
// Create audio context matching the stream's sample rate to avoid Firefox errors
|
|
143
|
+
// Firefox requires the AudioContext to match the microphone's native sample rate
|
|
144
|
+
const audioContext = new AudioContext(streamSampleRate ? { sampleRate: streamSampleRate } : {});
|
|
145
|
+
// Load scribe worklet
|
|
146
|
+
await loadScribeAudioProcessor(audioContext.audioWorklet);
|
|
147
|
+
// Set up audio pipeline
|
|
148
|
+
const source = audioContext.createMediaStreamSource(stream);
|
|
149
|
+
const scribeNode = new AudioWorkletNode(audioContext, "scribeAudioProcessor");
|
|
150
|
+
// Configure the worklet with sample rate info for resampling
|
|
151
|
+
// (only needed when AudioContext sample rate differs from target)
|
|
152
|
+
if (audioContext.sampleRate !== TARGET_SAMPLE_RATE) {
|
|
153
|
+
scribeNode.port.postMessage({
|
|
154
|
+
type: "configure",
|
|
155
|
+
inputSampleRate: audioContext.sampleRate,
|
|
156
|
+
outputSampleRate: TARGET_SAMPLE_RATE,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
// Handle audio data from worklet
|
|
160
|
+
scribeNode.port.onmessage = event => {
|
|
161
|
+
const { audioData } = event.data;
|
|
162
|
+
// Convert ArrayBuffer to base64
|
|
163
|
+
const bytes = new Uint8Array(audioData);
|
|
164
|
+
let binary = "";
|
|
165
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
166
|
+
binary += String.fromCharCode(bytes[i]);
|
|
167
|
+
}
|
|
168
|
+
const base64Audio = btoa(binary);
|
|
169
|
+
connection.send({ audioBase64: base64Audio });
|
|
170
|
+
};
|
|
171
|
+
// Connect audio pipeline
|
|
172
|
+
source.connect(scribeNode);
|
|
173
|
+
// Resume audio context if needed
|
|
174
|
+
if (audioContext.state === "suspended") {
|
|
175
|
+
await audioContext.resume();
|
|
176
|
+
}
|
|
177
|
+
// Store cleanup function
|
|
178
|
+
connection._audioCleanup = () => {
|
|
179
|
+
stream.getTracks().forEach(track => {
|
|
180
|
+
track.stop();
|
|
181
|
+
});
|
|
182
|
+
source.disconnect();
|
|
183
|
+
scribeNode.disconnect();
|
|
184
|
+
audioContext.close();
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
console.error("Failed to start microphone streaming:", error);
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=scribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scribe.js","sourceRoot":"","sources":["../../src/scribe/scribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceInfo.d.ts","sourceRoot":"","sources":["../src/sourceInfo.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,IAAI,UAAU,EAAE,QAAQ,CAAC,UAAU,CAGxC,CAAC;AAEH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAErD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceInfo.js","sourceRoot":"","sources":["../src/sourceInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAO5C,MAAM,CAAC,IAAI,UAAU,GAAyB,MAAM,CAAC,MAAM,CAAC;IAC1D,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,eAAe;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC7C,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { IncomingSocketEvent, OutgoingSocketEvent } from "./events";
|
|
2
2
|
import type { Mode } from "../BaseConversation";
|
|
3
|
-
import type { ConversationConfigOverrideAgentLanguage as Language } from "@elevenlabs/types
|
|
4
|
-
import type { DisconnectionDetails } from "@elevenlabs/types";
|
|
3
|
+
import type { DisconnectionDetails, ConversationConfigOverrideAgentLanguage as Language } from "@elevenlabs/types";
|
|
5
4
|
export type { DisconnectionDetails, ConversationConfigOverrideAgentLanguage as Language, } from "@elevenlabs/types";
|
|
6
5
|
export type DelayConfig = {
|
|
7
6
|
default: number;
|
|
@@ -11,7 +10,6 @@ export type DelayConfig = {
|
|
|
11
10
|
export type FormatConfig = {
|
|
12
11
|
format: "pcm" | "ulaw";
|
|
13
12
|
sampleRate: number;
|
|
14
|
-
outputDeviceId?: string;
|
|
15
13
|
};
|
|
16
14
|
export type OnDisconnectCallback = (details: DisconnectionDetails) => void;
|
|
17
15
|
export type OnMessageCallback = (event: IncomingSocketEvent) => void;
|
|
@@ -36,10 +34,6 @@ export type BaseSessionConfig = {
|
|
|
36
34
|
conversation?: {
|
|
37
35
|
textOnly?: boolean;
|
|
38
36
|
};
|
|
39
|
-
client?: {
|
|
40
|
-
source?: string;
|
|
41
|
-
version?: string;
|
|
42
|
-
};
|
|
43
37
|
};
|
|
44
38
|
customLlmExtraBody?: unknown;
|
|
45
39
|
dynamicVariables?: Record<string, string | number | boolean>;
|
|
@@ -47,7 +41,6 @@ export type BaseSessionConfig = {
|
|
|
47
41
|
connectionDelay?: DelayConfig;
|
|
48
42
|
textOnly?: boolean;
|
|
49
43
|
userId?: string;
|
|
50
|
-
environment?: string;
|
|
51
44
|
};
|
|
52
45
|
export type ConnectionType = "websocket" | "webrtc";
|
|
53
46
|
export type PublicSessionConfig = BaseSessionConfig & {
|
|
@@ -85,7 +78,6 @@ export declare abstract class BaseConnection {
|
|
|
85
78
|
protected debug(info: unknown): void;
|
|
86
79
|
abstract close(): void;
|
|
87
80
|
abstract sendMessage(message: OutgoingSocketEvent): void;
|
|
88
|
-
abstract setMicMuted(isMuted: boolean): Promise<void>;
|
|
89
81
|
onMessage(callback: OnMessageCallback): void;
|
|
90
82
|
onDisconnect(callback: OnDisconnectCallback): void;
|
|
91
83
|
onModeChange(callback: (mode: Mode) => void): void;
|
|
@@ -94,3 +86,4 @@ export declare abstract class BaseConnection {
|
|
|
94
86
|
protected handleMessage(parsedEvent: IncomingSocketEvent): void;
|
|
95
87
|
}
|
|
96
88
|
export declare function parseFormat(format: string): FormatConfig;
|
|
89
|
+
//# sourceMappingURL=BaseConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseConnection.d.ts","sourceRoot":"","sources":["../../src/utils/BaseConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export class BaseConnection {
|
|
2
|
+
queue = [];
|
|
3
|
+
disconnectionDetails = null;
|
|
4
|
+
onDisconnectCallback = null;
|
|
5
|
+
onMessageCallback = null;
|
|
6
|
+
onModeChangeCallback = null;
|
|
7
|
+
onDebug;
|
|
8
|
+
constructor(config = {}) {
|
|
9
|
+
this.onDebug = config.onDebug;
|
|
10
|
+
}
|
|
11
|
+
debug(info) {
|
|
12
|
+
if (this.onDebug)
|
|
13
|
+
this.onDebug(info);
|
|
14
|
+
}
|
|
15
|
+
onMessage(callback) {
|
|
16
|
+
this.onMessageCallback = callback;
|
|
17
|
+
const queue = this.queue;
|
|
18
|
+
this.queue = [];
|
|
19
|
+
if (queue.length > 0) {
|
|
20
|
+
// Make sure the queue is flushed after the constructors finishes and
|
|
21
|
+
// classes are initialized.
|
|
22
|
+
queueMicrotask(() => {
|
|
23
|
+
queue.forEach(callback);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
onDisconnect(callback) {
|
|
28
|
+
this.onDisconnectCallback = callback;
|
|
29
|
+
const details = this.disconnectionDetails;
|
|
30
|
+
if (details) {
|
|
31
|
+
// Make sure the event is triggered after the constructors finishes and
|
|
32
|
+
// classes are initialized.
|
|
33
|
+
queueMicrotask(() => {
|
|
34
|
+
callback(details);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
onModeChange(callback) {
|
|
39
|
+
this.onModeChangeCallback = callback;
|
|
40
|
+
}
|
|
41
|
+
updateMode(mode) {
|
|
42
|
+
this.onModeChangeCallback?.(mode);
|
|
43
|
+
}
|
|
44
|
+
disconnect(details) {
|
|
45
|
+
if (!this.disconnectionDetails) {
|
|
46
|
+
this.disconnectionDetails = details;
|
|
47
|
+
this.onDisconnectCallback?.(details);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
handleMessage(parsedEvent) {
|
|
51
|
+
if (this.onMessageCallback) {
|
|
52
|
+
this.onMessageCallback(parsedEvent);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this.queue.push(parsedEvent);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function parseFormat(format) {
|
|
60
|
+
const [formatPart, sampleRatePart] = format.split("_");
|
|
61
|
+
if (!["pcm", "ulaw"].includes(formatPart)) {
|
|
62
|
+
throw new Error(`Invalid format: ${format}`);
|
|
63
|
+
}
|
|
64
|
+
const sampleRate = Number.parseInt(sampleRatePart);
|
|
65
|
+
if (Number.isNaN(sampleRate)) {
|
|
66
|
+
throw new Error(`Invalid sample rate: ${sampleRatePart}`);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
format: formatPart,
|
|
70
|
+
sampleRate,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=BaseConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseConnection.js","sourceRoot":"","sources":["../../src/utils/BaseConnection.ts"],"names":[],"mappings":"AAqFA,MAAM,OAAgB,cAAc;IAKxB,KAAK,GAA0B,EAAE,CAAC;IAClC,oBAAoB,GAAgC,IAAI,CAAC;IACzD,oBAAoB,GAAgC,IAAI,CAAC;IACzD,iBAAiB,GAA6B,IAAI,CAAC;IACnD,oBAAoB,GAAkC,IAAI,CAAC;IAC3D,OAAO,CAA2B;IAE5C,YAAY,SAAgD,EAAE;QAC5D,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAES,KAAK,CAAC,IAAa;QAC3B,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAKM,SAAS,CAAC,QAA2B;QAC1C,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,qEAAqE;YACrE,2BAA2B;YAC3B,cAAc,CAAC,GAAG,EAAE;gBAClB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,YAAY,CAAC,QAA8B;QAChD,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,uEAAuE;YACvE,2BAA2B;YAC3B,cAAc,CAAC,GAAG,EAAE;gBAClB,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,YAAY,CAAC,QAA8B;QAChD,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACvC,CAAC;IAES,UAAU,CAAC,IAAU;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAES,UAAU,CAAC,OAA6B;QAChD,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;YACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAES,aAAa,CAAC,WAAgC;QACtD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAoC;QAC5C,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionFactory.d.ts","sourceRoot":"","sources":["../../src/utils/ConnectionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAEd,MAAM,kBAAkB,CAAC;AAmB1B,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CAWzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WebSocketConnection } from "./WebSocketConnection";
|
|
2
|
+
import { WebRTCConnection } from "./WebRTCConnection";
|
|
3
|
+
function determineConnectionType(config) {
|
|
4
|
+
// If connectionType is explicitly specified, use it
|
|
5
|
+
if (config.connectionType) {
|
|
6
|
+
return config.connectionType;
|
|
7
|
+
}
|
|
8
|
+
// If conversationToken is provided, use WebRTC
|
|
9
|
+
if ("conversationToken" in config && config.conversationToken) {
|
|
10
|
+
return "webrtc";
|
|
11
|
+
}
|
|
12
|
+
// Default to WebSocket for backward compatibility
|
|
13
|
+
return "websocket";
|
|
14
|
+
}
|
|
15
|
+
export async function createConnection(config) {
|
|
16
|
+
const connectionType = determineConnectionType(config);
|
|
17
|
+
switch (connectionType) {
|
|
18
|
+
case "websocket":
|
|
19
|
+
return WebSocketConnection.create(config);
|
|
20
|
+
case "webrtc":
|
|
21
|
+
return WebRTCConnection.create(config);
|
|
22
|
+
default:
|
|
23
|
+
throw new Error(`Unknown connection type: ${connectionType}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ConnectionFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectionFactory.js","sourceRoot":"","sources":["../../src/utils/ConnectionFactory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,SAAS,uBAAuB,CAAC,MAAqB;IACpD,oDAAoD;IACpD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,+CAA+C;IAC/C,IAAI,mBAAmB,IAAI,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kDAAkD;IAClD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB;IAErB,MAAM,cAAc,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEvD,QAAQ,cAAc,EAAE,CAAC;QACvB,KAAK,WAAW;YACd,OAAO,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { BaseConnection, type SessionConfig, type FormatConfig } from "./BaseConnection";
|
|
2
2
|
import { type OutgoingSocketEvent } from "./events";
|
|
3
3
|
import { Room } from "livekit-client";
|
|
4
|
+
import type { InputController } from "../InputController";
|
|
5
|
+
import type { OutputController } from "../OutputController";
|
|
4
6
|
export type ConnectionConfig = SessionConfig & {
|
|
5
7
|
onDebug?: (info: unknown) => void;
|
|
6
8
|
};
|
|
@@ -16,16 +18,19 @@ export declare class WebRTCConnection extends BaseConnection {
|
|
|
16
18
|
private outputDeviceId;
|
|
17
19
|
private outputAnalyser;
|
|
18
20
|
private outputFrequencyData;
|
|
21
|
+
private _isMuted;
|
|
22
|
+
readonly input: InputController;
|
|
23
|
+
readonly output: OutputController;
|
|
19
24
|
private constructor();
|
|
20
25
|
static create(config: ConnectionConfig): Promise<WebRTCConnection>;
|
|
21
26
|
private setupRoomEventListeners;
|
|
22
27
|
close(): void;
|
|
23
28
|
sendMessage(message: OutgoingSocketEvent): Promise<void>;
|
|
24
29
|
getRoom(): Room;
|
|
25
|
-
setMicMuted(isMuted: boolean): Promise<void>;
|
|
26
30
|
private setupAudioCapture;
|
|
27
31
|
setAudioVolume(volume: number): void;
|
|
28
32
|
setAudioOutputDevice(deviceId: string): Promise<void>;
|
|
29
33
|
setAudioInputDevice(deviceId: string): Promise<void>;
|
|
30
34
|
getOutputByteFrequencyData(): Uint8Array<ArrayBuffer> | null;
|
|
31
35
|
}
|
|
36
|
+
//# sourceMappingURL=WebRTCConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebRTCConnection.d.ts","sourceRoot":"","sources":["../../src/utils/WebRTCConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACxE,OAAO,EACL,IAAI,EAKL,MAAM,gBAAgB,CAAC;AAaxB,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAUhF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,qBAAa,gBAAiB,SAAQ,cAAc;IAC3C,cAAc,EAAE,MAAM,CAAC;IAC9B,SAAgB,WAAW,EAAE,YAAY,CAAC;IAC1C,SAAgB,YAAY,EAAE,YAAY,CAAC;IAE3C,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,mBAAmB,CAAwC;IAGnE,OAAO,CAAC,QAAQ,CAAS;IAGzB,SAAgB,KAAK,EAAE,eAAe,CAuEpC;IAGF,SAAgB,MAAM,EAAE,gBAAgB,CA8BtC;IAEF,OAAO;WAgBa,MAAM,CACxB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAsH5B,OAAO,CAAC,uBAAuB;IA0HxB,KAAK;IAmCC,WAAW,CAAC,OAAO,EAAE,mBAAmB;IAgC9C,OAAO,IAAI,IAAI;YAIR,iBAAiB;IAiExB,cAAc,CAAC,MAAM,EAAE,MAAM;IAMvB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsD1D,0BAA0B,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;CASpE"}
|