@elevenlabs/react 0.12.1 → 0.13.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/.turbo/turbo-build.log +11 -11
- package/.turbo/turbo-generate-version.log +1 -1
- package/README.md +75 -35
- package/dist/index.d.ts +2 -2
- package/dist/lib.cjs +1 -1
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.modern.js +1 -1
- package/dist/lib.modern.js.map +1 -1
- package/dist/lib.module.js +1 -1
- package/dist/lib.module.js.map +1 -1
- package/dist/lib.umd.js +1 -1
- package/dist/lib.umd.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/jest.config.cjs +23 -0
- package/package.json +6 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.
|
|
2
|
+
> @elevenlabs/react@0.13.0 prebuild /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> npm run generate-version
|
|
4
4
|
|
|
5
5
|
npm warn Unknown env config "shared-workspace-lockfile". This will stop working in the next major version of npm.
|
|
@@ -9,20 +9,20 @@ npm warn Unknown env config "node-version". This will stop working in the next m
|
|
|
9
9
|
npm warn Unknown env config "link-workspace-packages". This will stop working in the next major version of npm.
|
|
10
10
|
npm warn Unknown env config "_jsr-registry". This will stop working in the next major version of npm.
|
|
11
11
|
|
|
12
|
-
> @elevenlabs/react@0.
|
|
12
|
+
> @elevenlabs/react@0.13.0 generate-version
|
|
13
13
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
> @elevenlabs/react@0.
|
|
16
|
+
> @elevenlabs/react@0.13.0 build /home/runner/work/packages/packages/packages/react
|
|
17
17
|
> BROWSERSLIST_ENV=modern microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react src/index.ts
|
|
18
18
|
|
|
19
19
|
No name was provided for external module '@elevenlabs/client' in output.globals – guessing 'client'
|
|
20
20
|
Build "@elevenlabs/react" to dist:
|
|
21
|
-
3.
|
|
22
|
-
3.
|
|
23
|
-
3.
|
|
24
|
-
2.
|
|
25
|
-
|
|
26
|
-
3.
|
|
27
|
-
3.
|
|
28
|
-
3.
|
|
21
|
+
3.81 kB: lib.cjs.gz
|
|
22
|
+
3.32 kB: lib.cjs.br
|
|
23
|
+
3.44 kB: lib.modern.js.gz
|
|
24
|
+
2.98 kB: lib.modern.js.br
|
|
25
|
+
3.76 kB: lib.module.js.gz
|
|
26
|
+
3.28 kB: lib.module.js.br
|
|
27
|
+
3.86 kB: lib.umd.js.gz
|
|
28
|
+
3.36 kB: lib.umd.js.br
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.
|
|
2
|
+
> @elevenlabs/react@0.13.0 generate-version /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
4
4
|
|
package/README.md
CHANGED
|
@@ -59,27 +59,31 @@ const conversation = useConversation({
|
|
|
59
59
|
});
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
62
|
+
| Property | Description |
|
|
63
|
+
|----------|-------------|
|
|
64
|
+
| **clientTools** | Object definition for client tools that can be invoked by the agent. [See below](#client-tools) for details. |
|
|
65
|
+
| **overrides** | Object definition for conversation settings overrides. [See below](#conversation-overrides) for details. |
|
|
66
|
+
| **textOnly** | Whether the conversation should run in text-only mode. [See below](#text-only) for details. |
|
|
67
|
+
| **onConnect** | Handler called when the conversation connection is established. |
|
|
68
|
+
| **onDisconnect** | Handler called when the conversation connection has ended. |
|
|
69
|
+
| **onMessage** | Handler called when a new message is received. These can be tentative or final transcriptions of user voice, replies produced by LLM, or debug messages when a debug option is enabled. |
|
|
70
|
+
| **onError** | Handler called when an error is encountered. |
|
|
71
|
+
| **onStatusChange** | Handler called whenever connection status changes. Can be `connected`, `connecting`, or `disconnected` (initial). |
|
|
72
|
+
| **onModeChange** | Handler called when a status changes, e.g., agent switches from `speaking` to `listening`, or vice versa. |
|
|
73
|
+
| **onCanSendFeedbackChange** | Handler called when sending feedback becomes available or unavailable. |
|
|
74
|
+
| **onUnhandledClientToolCall** | Handler called when a client tool is invoked but no corresponding client tool was defined. |
|
|
75
|
+
| **onDebug** | Handler called for debugging events, including tentative agent responses and internal events. Useful for development and troubleshooting. |
|
|
76
|
+
| **onAudio** | Handler called when audio data is received from the agent. Provides access to raw audio events for custom processing. |
|
|
77
|
+
| **onInterruption** | Handler called when the conversation is interrupted, typically when the user starts speaking while the agent is talking. |
|
|
78
|
+
| **onVadScore** | Handler called with voice activity detection scores, indicating the likelihood of speech in the audio input. |
|
|
79
|
+
| **onMCPToolCall** | Handler called when an MCP (Model Context Protocol) tool is invoked by the agent. |
|
|
80
|
+
| **onMCPConnectionStatus** | Handler called when the MCP connection status changes, useful for monitoring MCP server connectivity. |
|
|
81
|
+
| **onAgentToolRequest** | Handler called when the agent begins tool execution. |
|
|
82
|
+
| **onAgentToolResponse** | Handler called when the agent receives a response from a tool execution. |
|
|
83
|
+
| **onConversationMetadata** | Handler called with conversation initiation metadata, providing information about the conversation setup. |
|
|
84
|
+
| **onAsrInitiationMetadata** | Handler called with ASR (Automatic Speech Recognition) initiation metadata, containing configuration details for speech recognition. |
|
|
85
|
+
| **onAudioAlignment** | Handler called with character-level timing data for synthesized audio. Provides arrays of characters, start times, and durations for text-to-speech synchronization. |
|
|
86
|
+
|
|
83
87
|
|
|
84
88
|
##### Client Tools
|
|
85
89
|
|
|
@@ -115,12 +119,16 @@ const conversation = useConversation({
|
|
|
115
119
|
agent: {
|
|
116
120
|
prompt: {
|
|
117
121
|
prompt: "My custom prompt",
|
|
122
|
+
llm: "gemini-2.5-flash",
|
|
118
123
|
},
|
|
119
124
|
firstMessage: "My custom first message",
|
|
120
125
|
language: "en",
|
|
121
126
|
},
|
|
122
127
|
tts: {
|
|
123
128
|
voiceId: "custom voice id",
|
|
129
|
+
speed: 1.0,
|
|
130
|
+
stability: 0.5,
|
|
131
|
+
similarityBoost: 0.8,
|
|
124
132
|
},
|
|
125
133
|
conversation: {
|
|
126
134
|
textOnly: true,
|
|
@@ -533,6 +541,7 @@ React hook for managing real-time speech-to-text transcription with ElevenLabs S
|
|
|
533
541
|
#### Quick Start
|
|
534
542
|
|
|
535
543
|
```tsx
|
|
544
|
+
import { useEffect } from "react";
|
|
536
545
|
import { useScribe } from "@elevenlabs/react";
|
|
537
546
|
|
|
538
547
|
function MyComponent() {
|
|
@@ -546,23 +555,42 @@ function MyComponent() {
|
|
|
546
555
|
},
|
|
547
556
|
});
|
|
548
557
|
|
|
558
|
+
// Start recording
|
|
549
559
|
const handleStart = async () => {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
560
|
+
try {
|
|
561
|
+
const token = await fetchTokenFromServer();
|
|
562
|
+
await scribe.connect({
|
|
563
|
+
token,
|
|
564
|
+
microphone: {
|
|
565
|
+
echoCancellation: true,
|
|
566
|
+
noiseSuppression: true,
|
|
567
|
+
},
|
|
568
|
+
});
|
|
569
|
+
} catch (err) {
|
|
570
|
+
console.error("Failed to start recording:", err);
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
// Stop recording
|
|
575
|
+
const handleDisconnect = () => {
|
|
576
|
+
scribe.disconnect();
|
|
558
577
|
};
|
|
559
578
|
|
|
579
|
+
// Disconnect on unmount
|
|
580
|
+
useEffect(() => {
|
|
581
|
+
return () => {
|
|
582
|
+
if (scribe.isConnected) {
|
|
583
|
+
scribe.disconnect();
|
|
584
|
+
}
|
|
585
|
+
};
|
|
586
|
+
}, [scribe]);
|
|
587
|
+
|
|
560
588
|
return (
|
|
561
589
|
<div>
|
|
562
590
|
<button onClick={handleStart} disabled={scribe.isConnected}>
|
|
563
591
|
Start Recording
|
|
564
592
|
</button>
|
|
565
|
-
<button onClick={
|
|
593
|
+
<button onClick={handleDisconnect} disabled={!scribe.isConnected}>
|
|
566
594
|
Stop
|
|
567
595
|
</button>
|
|
568
596
|
|
|
@@ -932,11 +960,13 @@ const scribe = useScribe({
|
|
|
932
960
|
#### Complete Example
|
|
933
961
|
|
|
934
962
|
```tsx
|
|
935
|
-
import { useScribe,
|
|
936
|
-
import { useState } from "react";
|
|
963
|
+
import { useScribe, CommitStrategy } from "@elevenlabs/react";
|
|
964
|
+
import { useState, useEffect } from "react";
|
|
965
|
+
|
|
966
|
+
type Mode = "microphone" | "file"
|
|
937
967
|
|
|
938
968
|
function ScribeDemo() {
|
|
939
|
-
const [mode, setMode] = useState<
|
|
969
|
+
const [mode, setMode] = useState<Mode>("microphone");
|
|
940
970
|
|
|
941
971
|
const scribe = useScribe({
|
|
942
972
|
modelId: "scribe_v2_realtime",
|
|
@@ -957,6 +987,16 @@ function ScribeDemo() {
|
|
|
957
987
|
});
|
|
958
988
|
};
|
|
959
989
|
|
|
990
|
+
const handleDisconnect = () => scribe.disconnect();
|
|
991
|
+
|
|
992
|
+
const handleClearTranscripts = () => scribe.clearTranscripts();
|
|
993
|
+
|
|
994
|
+
useEffect(() => {
|
|
995
|
+
return () => {
|
|
996
|
+
handleDisconnect();
|
|
997
|
+
};
|
|
998
|
+
}, []);
|
|
999
|
+
|
|
960
1000
|
return (
|
|
961
1001
|
<div>
|
|
962
1002
|
<h1>Scribe Demo</h1>
|
|
@@ -972,9 +1012,9 @@ function ScribeDemo() {
|
|
|
972
1012
|
{!scribe.isConnected ? (
|
|
973
1013
|
<button onClick={startMicrophone}>Start Recording</button>
|
|
974
1014
|
) : (
|
|
975
|
-
<button onClick={
|
|
1015
|
+
<button onClick={handleDisconnect}>Stop</button>
|
|
976
1016
|
)}
|
|
977
|
-
<button onClick={
|
|
1017
|
+
<button onClick={handleClearTranscripts}>Clear</button>
|
|
978
1018
|
</div>
|
|
979
1019
|
|
|
980
1020
|
{/* Live Transcript */}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type Location = "us" | "global" | "eu-residency" | "in-residency";
|
|
|
12
12
|
export declare function parseLocation(location?: string): Location;
|
|
13
13
|
export declare function getOriginForLocation(location: Location): string;
|
|
14
14
|
export declare function getLivekitUrlForLocation(location: Location): string;
|
|
15
|
-
export type { Role, Mode, Status, SessionConfig, DisconnectionDetails, Language, VadScoreEvent, InputConfig, FormatConfig, VoiceConversation, TextConversation, Callbacks, } from "@elevenlabs/client";
|
|
15
|
+
export type { Role, Mode, Status, SessionConfig, DisconnectionDetails, Language, VadScoreEvent, AudioAlignmentEvent, InputConfig, FormatConfig, VoiceConversation, TextConversation, Callbacks, } from "@elevenlabs/client";
|
|
16
16
|
export { postOverallFeedback } from "@elevenlabs/client";
|
|
17
17
|
export { useScribe, AudioFormat, CommitStrategy, RealtimeEvents, } from "./scribe";
|
|
18
18
|
export type { ScribeStatus, TranscriptSegment, WordTimestamp, ScribeCallbacks, ScribeHookOptions, UseScribeReturn, RealtimeConnection, } from "./scribe";
|
|
@@ -23,7 +23,7 @@ export type ControlledState = {
|
|
|
23
23
|
micMuted?: boolean;
|
|
24
24
|
volume?: number;
|
|
25
25
|
};
|
|
26
|
-
export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onAgentToolRequest" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart">;
|
|
26
|
+
export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onAgentToolRequest" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart" | "onAudioAlignment">;
|
|
27
27
|
export declare function useConversation<T extends HookOptions & ControlledState>(props?: T): {
|
|
28
28
|
startSession: T extends SessionConfig ? (options?: HookOptions) => Promise<string> : (options: SessionConfig & HookOptions) => Promise<string>;
|
|
29
29
|
endSession: () => Promise<void>;
|
package/dist/lib.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react"),n=require("@elevenlabs/client");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},r.apply(null,arguments)}var t=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function l(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=l,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(u){void 0===u&&(u={});var a=u.micMuted,c=u.volume,s=u.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(u,t),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),E=f[0],h=f[1],g=e.useState(!1),p=g[0],C=g[1],S=e.useState("listening"),T=S[0],R=S[1],b=e.useRef(a),M=e.useRef(c);return b.current=a,M.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var t,u,a=function(t){return u?t:function(t,u){try{var a=(P=i(A=o((null==e?void 0:e.serverLocation)||s)),w=l(A),m.current=n.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:P,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||w,overrides:r({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:r({},null!=(E=null==d||null==(g=d.overrides)?void 0:g.client)?E:{},null!=(p=null==e||null==(S=e.overrides)?void 0:S.client)?p:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(I=d.overrides)||null==(I=I.client)?void 0:I.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(y=d.overrides)||null==(y=y.client)?void 0:y.version)||"0.12.1"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var r,t=n.mode;R(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;h(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==b.current&&v.current.setMicMuted(b.current),void 0!==M.current&&v.current.setVolume({volume:M.current}),v.current.getId()}))}catch(e){return u(!0,e)}var c,f,E,g,p,S,T,I,D,y,A,P,w;return a&&a.then?a.then(u.bind(null,!1),u.bind(null,!0)):u(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(t=v.current)&&t.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return u=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:E,canSendFeedback:p,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(t){void 0===t&&(t={});var o=t.onSessionStarted,i=t.onPartialTranscript,l=t.onCommittedTranscript,u=t.onCommittedTranscriptWithTimestamps,a=t.onError,c=t.onAuthError,s=t.onQuotaExceededError,d=t.onCommitThrottledError,v=t.onTranscriberError,m=t.onUnacceptedTermsError,f=t.onRateLimitedError,E=t.onInputError,h=t.onQueueOverflowError,g=t.onResourceExhaustedError,p=t.onSessionTimeLimitExceededError,C=t.onChunkSizeExceededError,S=t.onInsufficientAudioActivityError,T=t.onConnect,R=t.onDisconnect,b=t.token,M=t.modelId,I=t.baseUri,D=t.commitStrategy,y=t.vadSilenceThresholdSecs,A=t.vadThreshold,P=t.minSpeechDurationMs,w=t.minSilenceDurationMs,O=t.languageCode,k=t.microphone,U=t.audioFormat,F=t.sampleRate,_=t.autoConnect,x=void 0!==_&&_,L=t.includeTimestamps,N=e.useRef(null),V=e.useState("disconnected"),j=V[0],q=V[1],B=e.useState(""),H=B[0],Q=B[1],W=e.useState([]),X=W[0],z=W[1],K=e.useState(null),Y=K[0],Z=K[1];e.useEffect(function(){return function(){var e;null==(e=N.current)||e.close()}},[]);var G=e.useCallback(function(e){void 0===e&&(e={});try{if(N.current)return console.warn("Already connected"),Promise.resolve();try{var r,t;q("connecting"),Z(null);var _=e.token||b,x=e.modelId||M;if(!_)throw new Error("Token is required");if(!x)throw new Error("Model ID is required");var V,j=e.microphone||k,B=e.audioFormat||U,H=e.sampleRate||F,W=null!=(r=null!=(t=e.includeTimestamps)?t:L)?r:!(!e.onCommittedTranscriptWithTimestamps&&!u);if(j)V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,microphone:j,includeTimestamps:W});else{if(!B||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,includeTimestamps:W,audioFormat:B,sampleRate:H})}N.current=V,V.on(n.RealtimeEvents.SESSION_STARTED,function(){q("connected"),null==o||o()}),V.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;Q(n.text),q("transcribing"),null==i||i(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};z(function(e){return[].concat(e,[r])}),Q(""),null==l||l(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0,words:n.words};z(function(e){return[].concat(e,[r])}),Q(""),null==u||u(n)}),V.on(n.RealtimeEvents.ERROR,function(e){var n=e;Z(n.error),q("error"),null==a||a(new Error(n.error))}),V.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Z(n.error),q("error"),null==c||c(n)}),V.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==s||s(n)}),V.on(n.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Z(n.error),q("error"),null==d||d(n)}),V.on(n.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Z(n.error),q("error"),null==v||v(n)}),V.on(n.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Z(n.error),q("error"),null==m||m(n)}),V.on(n.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Z(n.error),q("error"),null==f||f(n)}),V.on(n.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Z(n.error),q("error"),null==E||E(n)}),V.on(n.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Z(n.error),q("error"),null==h||h(n)}),V.on(n.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Z(n.error),q("error"),null==g||g(n)}),V.on(n.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==p||p(n)}),V.on(n.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==C||C(n)}),V.on(n.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Z(n.error),q("error"),null==S||S(n)}),V.on(n.RealtimeEvents.OPEN,function(){null==T||T()}),V.on(n.RealtimeEvents.CLOSE,function(){q("disconnected"),N.current=null,null==R||R()})}catch(e){var X=e instanceof Error?e.message:"Failed to connect";throw Z(X),q("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,D,y,A,P,w,O,k,U,F,L,o,i,l,u,a,c,s,d,v,m,f,E,h,g,p,C,S,T,R]),J=e.useCallback(function(){var e;null==(e=N.current)||e.close(),N.current=null,q("disconnected")},[]),$=e.useCallback(function(e,n){if(!N.current)throw new Error("Not connected to Scribe");N.current.send(r({audioBase64:e},n))},[]),ee=e.useCallback(function(){if(!N.current)throw new Error("Not connected to Scribe");N.current.commit()},[]),ne=e.useCallback(function(){z([]),Q("")},[]),re=e.useCallback(function(){return N.current},[]);return e.useEffect(function(){x&&G()},[x,G]),{status:j,isConnected:"connected"===j||"transcribing"===j,isTranscribing:"transcribing"===j,partialTranscript:H,committedTranscripts:X,error:Y,connect:G,disconnect:J,sendAudio:$,commit:ee,clearTranscripts:ne,getConnection:re}};
|
|
1
|
+
var e=require("react"),n=require("@elevenlabs/client");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},r.apply(null,arguments)}var t=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=u,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(l){void 0===l&&(l={});var c=l.micMuted,a=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(l,t),v=e.useRef(null),m=e.useRef(null),f=e.useRef(!1),h=e.useState("disconnected"),E=h[0],g=h[1],p=e.useState(!1),S=p[0],C=p[1],T=e.useState("listening"),R=T[0],b=T[1],M=e.useRef(c),I=e.useRef(a);return M.current=c,I.current=a,e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setMicMuted(c))},[c]),e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setVolume({volume:a}))},[a]),e.useEffect(function(){return function(){var e;f.current=!0,m.current?m.current.then(function(e){return e.endSession()}):null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var t,l,c=function(t){return l?t:(f.current=!1,function(t,l){try{var c=(w=i(y=o((null==e?void 0:e.serverLocation)||s)),O=u(y),m.current=n.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:w,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||O,overrides:r({},null!=(a=null==d?void 0:d.overrides)?a:{},null!=(h=null==e?void 0:e.overrides)?h:{},{client:r({},null!=(E=null==d||null==(p=d.overrides)?void 0:p.client)?E:{},null!=(S=null==e||null==(T=e.overrides)?void 0:T.client)?S:{},{source:(null==e||null==(R=e.overrides)||null==(R=R.client)?void 0:R.source)||(null==d||null==(D=d.overrides)||null==(D=D.client)?void 0:D.source)||"react_sdk",version:(null==e||null==(A=e.overrides)||null==(A=A.client)?void 0:A.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.13.0"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onAudioAlignment:(null==e?void 0:e.onAudioAlignment)||(null==d?void 0:d.onAudioAlignment),onModeChange:function(n){var r,t=n.mode;b(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;g(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(m.current).then(function(e){function n(e){return void 0!==M.current&&v.current.setMicMuted(M.current),void 0!==I.current&&v.current.setVolume({volume:I.current}),v.current.getId()}v.current=e;var r=function(){if(f.current)return Promise.resolve(v.current.endSession()).then(function(){throw v.current=null,m.current=null,new Error("Session cancelled during connection")})}();return r&&r.then?r.then(n):n()}))}catch(e){return l(!0,e)}var a,h,E,p,S,T,R,D,A,P,y,w,O;return c&&c.then?c.then(l.bind(null,!1),l.bind(null,!0)):l(!1,c)}(0,function(e,n){if(m.current=null,e)throw n;return n}))};if(null!=(t=v.current)&&t.isOpen())return Promise.resolve(v.current.getId());var a=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return l=1,n})}();return Promise.resolve(a&&a.then?a.then(c):c(a))}catch(e){return Promise.reject(e)}},endSession:function(){try{f.current=!0;var e=m.current,n=v.current;v.current=null;var r=e?Promise.resolve(e).then(function(e){return Promise.resolve(e.endSession()).then(function(){})}):Promise.resolve(null==n?void 0:n.endSession()).then(function(){});return Promise.resolve(r&&r.then?r.then(function(){}):void 0)}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:E,canSendFeedback:S,micMuted:c,isSpeaking:"speaking"===R}},exports.useScribe=function(t){void 0===t&&(t={});var o=t.onSessionStarted,i=t.onPartialTranscript,u=t.onCommittedTranscript,l=t.onCommittedTranscriptWithTimestamps,c=t.onError,a=t.onAuthError,s=t.onQuotaExceededError,d=t.onCommitThrottledError,v=t.onTranscriberError,m=t.onUnacceptedTermsError,f=t.onRateLimitedError,h=t.onInputError,E=t.onQueueOverflowError,g=t.onResourceExhaustedError,p=t.onSessionTimeLimitExceededError,S=t.onChunkSizeExceededError,C=t.onInsufficientAudioActivityError,T=t.onConnect,R=t.onDisconnect,b=t.token,M=t.modelId,I=t.baseUri,D=t.commitStrategy,A=t.vadSilenceThresholdSecs,P=t.vadThreshold,y=t.minSpeechDurationMs,w=t.minSilenceDurationMs,O=t.languageCode,k=t.microphone,U=t.audioFormat,F=t.sampleRate,_=t.autoConnect,x=void 0!==_&&_,L=t.includeTimestamps,N=e.useRef(null),V=e.useState("disconnected"),j=V[0],q=V[1],B=e.useState(""),H=B[0],Q=B[1],W=e.useState([]),X=W[0],z=W[1],K=e.useState(null),Y=K[0],Z=K[1];e.useEffect(function(){return function(){var e;null==(e=N.current)||e.close()}},[]);var G=e.useCallback(function(e){void 0===e&&(e={});try{if(N.current)return console.warn("Already connected"),Promise.resolve();try{var r,t;q("connecting"),Z(null);var _=e.token||b,x=e.modelId||M;if(!_)throw new Error("Token is required");if(!x)throw new Error("Model ID is required");var V,j=e.microphone||k,B=e.audioFormat||U,H=e.sampleRate||F,W=null!=(r=null!=(t=e.includeTimestamps)?t:L)?r:!(!e.onCommittedTranscriptWithTimestamps&&!l);if(j)V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||A,vadThreshold:e.vadThreshold||P,minSpeechDurationMs:e.minSpeechDurationMs||y,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,microphone:j,includeTimestamps:W});else{if(!B||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||A,vadThreshold:e.vadThreshold||P,minSpeechDurationMs:e.minSpeechDurationMs||y,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,includeTimestamps:W,audioFormat:B,sampleRate:H})}N.current=V,V.on(n.RealtimeEvents.SESSION_STARTED,function(){q("connected"),null==o||o()}),V.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;Q(n.text),q("transcribing"),null==i||i(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};z(function(e){return[].concat(e,[r])}),Q(""),null==u||u(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0,words:n.words};z(function(e){return[].concat(e,[r])}),Q(""),null==l||l(n)}),V.on(n.RealtimeEvents.ERROR,function(e){var n=e;Z(n.error),q("error"),null==c||c(new Error(n.error))}),V.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Z(n.error),q("error"),null==a||a(n)}),V.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==s||s(n)}),V.on(n.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Z(n.error),q("error"),null==d||d(n)}),V.on(n.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Z(n.error),q("error"),null==v||v(n)}),V.on(n.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Z(n.error),q("error"),null==m||m(n)}),V.on(n.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Z(n.error),q("error"),null==f||f(n)}),V.on(n.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Z(n.error),q("error"),null==h||h(n)}),V.on(n.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Z(n.error),q("error"),null==E||E(n)}),V.on(n.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Z(n.error),q("error"),null==g||g(n)}),V.on(n.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==p||p(n)}),V.on(n.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==S||S(n)}),V.on(n.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Z(n.error),q("error"),null==C||C(n)}),V.on(n.RealtimeEvents.OPEN,function(){null==T||T()}),V.on(n.RealtimeEvents.CLOSE,function(){q("disconnected"),N.current=null,null==R||R()})}catch(e){var X=e instanceof Error?e.message:"Failed to connect";throw Z(X),q("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,D,A,P,y,w,O,k,U,F,L,o,i,u,l,c,a,s,d,v,m,f,h,E,g,p,S,C,T,R]),J=e.useCallback(function(){var e;null==(e=N.current)||e.close(),N.current=null,q("disconnected")},[]),$=e.useCallback(function(e,n){if(!N.current)throw new Error("Not connected to Scribe");N.current.send(r({audioBase64:e},n))},[]),ee=e.useCallback(function(){if(!N.current)throw new Error("Not connected to Scribe");N.current.commit()},[]),ne=e.useCallback(function(){z([]),Q("")},[]),re=e.useCallback(function(){return N.current},[]);return e.useEffect(function(){x&&G()},[x,G]),{status:j,isConnected:"connected"===j||"transcribing"===j,isTranscribing:"transcribing"===j,partialTranscript:H,committedTranscripts:X,error:Y,connect:G,disconnect:J,sendAudio:$,commit:ee,clearTranscripts:ne,getConnection:re}};
|
|
2
2
|
//# sourceMappingURL=lib.cjs.map
|
package/dist/lib.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.1\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","_extends","livekitUrl","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_exit2","_temp4","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_exit3","_temp6","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","defaultIncludeTimestamps","includeTimestamps","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","_runtimeOptions$inclu","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","words","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"4TA+BgB,SAAAA,EAAcC,GAC5B,YAD4B,IAAAA,IAAAA,EAAmB,MACvCA,GACN,IAAK,eACL,IAAK,eACL,IAAK,KACL,IAAK,SACH,OAAOA,EACT,QAIE,OAHAC,QAAQC,KACyCF,+CAAAA,EAA8B,wBAExE,KAEb,CAEgB,SAAAG,EAAqBH,GAQnC,MAP4C,CAC1CI,GAAI,0BACJ,eAAgB,uCAChB,eAAgB,uCAChBC,OAAQ,2BAGOL,EACnB,CAEM,SAAUM,EAAyBN,GAQvC,MAPgD,CAC9CI,GAAI,kCACJ,eAAgB,+CAChB,eAAgB,+CAChBC,OAAQ,mCAGWL,EACvB,uhBAyEgB,SACdO,QAAA,IAAAA,IAAAA,EAAW,CAAO,GAElB,IAAQC,EAAwDD,EAAxDC,SAAUC,EAA8CF,EAA9CE,OAAQC,EAAsCH,EAAtCG,eAAmBC,6IAAcC,CAAKL,EAALM,GACrDC,EAAkBC,EAAMA,OAAsB,MAC9CC,EAAUD,EAAAA,OAAqC,MACrDE,EAA4BC,EAAQA,SAAS,gBAAtCC,EAAMF,KAAEG,EAASH,EAAA,GACxBI,EAA8CH,EAAAA,UAAS,GAAhDI,EAAeD,EAAEE,GAAAA,EAAkBF,EAC1C,GAAAG,EAAwBN,EAAQA,SAAO,aAAhCO,EAAID,EAAEE,GAAAA,EAAOF,EAEpB,GAAMG,EAAcZ,EAAMA,OAAsBP,GAC1CoB,EAAYb,EAAAA,OAA2BN,GAuB7C,OArBAkB,EAAYE,QAAUrB,EACtBoB,EAAUC,QAAUpB,EAEpBqB,EAASA,UAAC,WACoBC,IAAAA,OAAXC,IAAbxB,UACFM,GAAwB,OAATiB,EAAfjB,EAAiBe,UAAjBE,EAA0BE,YAAYzB,GAE1C,EAAG,CAACA,IAEJsB,EAAAA,UAAU,WACkBI,IAAAA,OAAXF,IAAXvB,IACayB,MAAfpB,GAAwB,OAAToB,EAAfpB,EAAiBe,UAAjBK,EAA0BC,UAAU,CAAE1B,OAAAA,IAE1C,EAAG,CAACA,IAEJqB,EAAAA,UAAU,WACR,OAAY,WAAA,IAAAM,EACa,OAAvBA,EAAAtB,EAAgBe,UAAhBO,EAAyBC,YAC3B,CACF,EAAG,IAEI,CACLC,aAAYA,SAAUC,GAAqB,IAAIC,IAAAA,EAyGpBC,EAzGoBC,EAAA,SAAAC,GAAAF,OAAAA,EAAAE,2BAcrCC,EAASzC,EAHT0C,EAAyB9C,GACtB,MAAPwC,OAAO,EAAPA,EAAS7B,iBAAkBA,IAGvBoC,EAAuBxC,EAC3BuC,GAGF7B,EAAQa,QAAUkB,EAAAA,aAAaT,aAAYU,EACrCrC,CAAAA,EAAAA,MAAAA,EAAAA,EAAkB,CAAA,EAClB4B,MAAAA,EAAAA,EAAW,GACfK,CAAAA,OAAAA,EAEAK,YACS,MAAPV,OAAO,EAAPA,EAASU,cACTtC,MAAAA,OAAAA,EAAAA,EAAgBsC,aAChBH,EACFI,UAASF,EAAA,CAAA,EACsBG,OADtBA,EACHxC,MAAAA,OAAAA,EAAAA,EAAgBuC,WAASC,EAAI,CAAE,EACbC,OADaA,EAC/Bb,MAAAA,OAAAA,EAAAA,EAASW,WAASE,EAAI,CAAA,EAC1BC,CAAAA,OAAML,KACiC,OADjCM,EACc,MAAd3C,GAAyB,OAAX4C,EAAd5C,EAAgBuC,gBAAS,EAAzBK,EAA2BF,QAAMC,EAAI,CAAA,EACX,OADaE,EAChCC,MAAPlB,UAAOkB,EAAPlB,EAASW,kBAATO,EAAoBJ,QAAMG,EAAI,CAAE,EACpCE,CAAAA,QACS,MAAPnB,GAAkBoB,OAAXA,EAAPpB,EAASW,YAATS,OAAkBA,EAAlBA,EAAoBN,aAApBM,EAAAA,EAA4BD,UACd,MAAd/C,GAAyB,OAAXiD,EAAdjD,EAAgBuC,YAAiB,OAARU,EAAzBA,EAA2BP,aAAM,EAAjCO,EAAmCF,SACnC,YACFG,SACSC,MAAPvB,GAAkB,OAAXuB,EAAPvB,EAASW,YAAiB,OAARY,EAAlBA,EAAoBT,aAAM,EAA1BS,EAA4BD,WACd,MAAdlD,GAAyBoD,OAAXA,EAAdpD,EAAgBuC,YAAiB,OAARa,EAAzBA,EAA2BV,aAAM,EAAjCU,EAAmCF,UCrNpB,aD0NrBG,WAAkB,MAAPzB,OAAO,EAAPA,EAASyB,aAAarD,MAAAA,OAAAA,EAAAA,EAAgBqD,WACjDC,cAAc1B,MAAAA,OAAAA,EAAAA,EAAS0B,gBAA8B,MAAdtD,OAAc,EAAdA,EAAgBsD,cACvDC,SAAS3B,MAAAA,OAAAA,EAAAA,EAAS2B,WAAyB,MAAdvD,OAAc,EAAdA,EAAgBuD,SAC7CC,WAAkB,MAAP5B,OAAO,EAAPA,EAAS4B,aAAaxD,MAAAA,OAAAA,EAAAA,EAAgBwD,WACjDC,SAAgB,MAAP7B,OAAO,EAAPA,EAAS6B,WAAWzD,MAAAA,OAAAA,EAAAA,EAAgByD,SAC7CC,SAAS9B,MAAAA,OAAAA,EAAAA,EAAS8B,WAAyB,MAAd1D,OAAc,EAAdA,EAAgB0D,SAC7CC,2BACE/B,MAAAA,OAAAA,EAAAA,EAAS+B,6BACK,MAAd3D,OAAc,EAAdA,EAAgB2D,2BAClBC,YAAmB,MAAPhC,OAAO,EAAPA,EAASgC,cAAc5D,MAAAA,OAAAA,EAAAA,EAAgB4D,YACnDC,gBACS,MAAPjC,OAAO,EAAPA,EAASiC,kBAAkB7D,MAAAA,OAAAA,EAAAA,EAAgB6D,gBAC7CC,0BACElC,SAAAA,EAASkC,sBAAoC,MAAd9D,OAAc,EAAdA,EAAgB8D,oBACjDC,2BACEnC,SAAAA,EAASmC,uBAAqC,MAAd/D,OAAc,EAAdA,EAAgB+D,qBAClDC,8BACEpC,SAAAA,EAASoC,0BACK,MAAdhE,OAAc,EAAdA,EAAgBgE,wBAClBC,qBACErC,SAAAA,EAASqC,iBAA+B,MAAdjE,OAAc,EAAdA,EAAgBiE,eAC5CC,uBACEtC,MAAAA,OAAAA,EAAAA,EAASsC,yBACTlE,MAAAA,OAAAA,EAAAA,EAAgBkE,uBAClBC,yBACEvC,MAAAA,OAAAA,EAAAA,EAASuC,iCACTnE,SAAAA,EAAgBmE,yBAClBC,yBACS,MAAPxC,OAAO,EAAPA,EAASwC,2BACK,MAAdpE,OAAc,EAAdA,EAAgBoE,yBAClBC,aAAc,SAAFC,GAAe,IAAAC,EAAVzD,EAAIwD,EAAJxD,KACfC,EAAQD,UACRyD,GAAQ,MAAP3C,OAAO,EAAPA,EAASyC,gBAAgBrE,MAAAA,OAAAA,EAAAA,EAAgBqE,gBAA1CE,EAA0D,CAAEzD,KAAAA,GAC9D,EACA0D,eAAgB,SAAFC,GAAiB,IAAAC,EAAZlE,EAAMiE,EAANjE,OACjBC,EAAUD,GACVkE,OAAAA,GAAC9C,MAAAA,OAAAA,EAAAA,EAAS4C,kBAAkBxE,MAAAA,OAAAA,EAAAA,EAAgBwE,kBAA5CE,EAA8D,CAC5DlE,OAAAA,GAEJ,EACAmE,wBAAyB,SAAFC,GAA0BC,IAAAA,EAArBlE,EAAeiE,EAAfjE,gBAC1BC,EAAmBD,GAGsB,OAFzCkE,GACEjD,MAAAA,OAAAA,EAAAA,EAAS+C,iCACT3E,SAAAA,EAAgB2E,2BAFlBE,EAGI,CAAElE,gBAAAA,GACR,KACYmE,QAAAC,QAEkB1E,EAAQa,SAAO8D,KAAA,SAAAC,GAS/C,OATA9E,EAAgBe,QAAO+D,OAEK5D,IAAxBL,EAAYE,SACdf,EAAgBe,QAAQI,YAAYN,EAAYE,cAExBG,IAAtBJ,EAAUC,SACZf,EAAgBe,QAAQM,UAAU,CAAE1B,OAAQmB,EAAUC,UAGjDf,EAAgBe,QAAQgE,OAAQ,4BA7FrC,IAAA1C,EAAAC,EAAAE,EAAAC,EAAAC,EAAAC,EAAAE,EAAAC,EAAAE,EAAAC,EACIlB,EAGAD,EACAE,mEAfqCgD,CAUzC,EA8FHC,SAAAA,EAAAC,GACwB,GAAvBhF,EAAQa,QAAU,KAAKkE,EAAA,MAAAC,EAAAA,OAAAA,CAAA,EAAAvD,EAxGzB,GAAID,OAAJA,EAAI1B,EAAgBe,UAAhBW,EAAyByD,SAC3B,OAAAR,QAAAC,QAAO5E,EAAgBe,QAAQgE,SAChC,IAAAK,gBAEGlF,EAAQa,QAAO,OAAA4D,QAAAC,QACU1E,EAAQa,SAAO8D,KAApCQ,SAAAA,GAAYC,IAAAA,EACXD,EAAaN,QAAO,OAAApD,EAAA,EAAA2D,CAAA,EAAA,IAAA,OAAAX,QAAAC,QAAAQ,GAAAA,EAAAP,KAAAO,EAAAP,KAAAjD,GAAAA,EAAAwD,GAoG/B,CAAC,MAAAG,GAAAZ,OAAAA,QAAAa,OAAAD,KAGDhE,WAAUA,WAAa,IACrB,IAAM8D,EAAerF,EAAgBe,QACN,OAA/Bf,EAAgBe,QAAU,KAAK4D,QAAAC,QACzBS,MAAAA,OAAAA,EAAAA,EAAc9D,cAAYsD,KAAA,WAAA,EAClC,CAAC,MAAAU,GAAAZ,OAAAA,QAAAa,OAAAD,EACDlE,CAAAA,EAAAA,UAAW,SAAFoE,GAAqCC,IAAAA,EACrB,OAAvBA,EAAA1F,EAAgBe,UAAhB2E,EAAyBrE,UAAU,CAAE1B,OADnB8F,EAAN9F,QAEd,EACAgG,0BAA2B,WAAK,IAAAC,EAC9B,OAA8B,OAA9BA,EAAO5F,EAAgBe,cAAO,EAAvB6E,EAAyBD,2BAClC,EACAE,2BAA4B,WAAK,IAAAC,EAC/B,OAA8B,OAA9BA,EAAO9F,EAAgBe,cAAO,EAAvB+E,EAAyBD,4BAClC,EACAE,eAAgB,WAAK,IAAAC,EAAAC,EACnB,OAAgD,OAAhDD,EAAOC,OAAPA,EAAOjG,EAAgBe,cAAhBkF,EAAAA,EAAyBF,kBAAgBC,EAAI,CACtD,EACAE,gBAAiB,WAAK,IAAAC,EAAAC,EACpB,OAAiDD,OAAjDA,EAAOC,OAAPA,EAAOpG,EAAgBe,cAAhBqF,EAAAA,EAAyBF,mBAAiBC,EAAI,CACvD,EACAE,aAAc,SAACC,GAAiB,IAAAC,EAC9BA,OAAAA,EAAAvG,EAAgBe,UAAhBwF,EAAyBF,aAAaC,EACxC,EACAvB,MAAO,WAAK,IAAAyB,EACV,OAA8B,OAA9BA,EAAOxG,EAAgBe,cAAO,EAAvByF,EAAyBzB,OAClC,EACA0B,qBAAsB,SAACC,GAAgBC,IAAAA,SACrCA,EAAA3G,EAAgBe,UAAhB4F,EAAyBF,qBAAqBC,EAChD,EACAE,gBAAiB,SAACF,GAAgB,IAAAG,EACT,OAAvBA,EAAA7G,EAAgBe,UAAhB8F,EAAyBD,gBAAgBF,EAC3C,EACAI,iBAAkB,WAAKC,IAAAA,EACE,OAAvBA,EAAA/G,EAAgBe,UAAhBgG,EAAyBD,kBAC3B,EACAE,0BAA2B,SAACC,EAAoBC,GAAuBC,IAAAA,EAC9C,OAAvBA,EAAAnH,EAAgBe,UAAhBoG,EAAyBH,0BACvBC,EACAC,EAEJ,EACAE,kBAAiB,SACfC,GACE,IAAA,IAaAC,EAbAC,EAAAA,SAAAC,GAAA,GAAAF,EAAA,OAAAE,EAWF,MAAM,IAAIC,MACR,6DACA,EAAAC,EAXA1H,WAAAA,GAAAA,EAAgBe,SAChB,sBAAuBf,EAAgBe,QAAO,OAAA4D,QAAAC,QAG5C5E,EAAgBe,QAGhBqG,kBAAkBC,IAAOxC,KAAA,SAAA8C,GAAA,OAAAL,EAAA,EAAAK,CAAA,EAAA,CAP3B3H,GAO2B,OAAA2E,QAAAC,QAAA8C,GAAAA,EAAA7C,KAAA6C,EAAA7C,KAAA0C,GAAAA,EAAAG,GAK/B,CAAC,MAAAnC,GAAA,OAAAZ,QAAAa,OAAAD,EACDqC,CAAAA,EAAAA,mBAAkBA,SAASP,GAA0B,QAajDQ,EAbqDC,EAAA,SAAAC,GAAAF,GAAAA,EAAAE,OAAAA,EAWvD,MAAU,IAAAN,MACR,6DACA,EAAAO,EAAA,WAAA,GAXAhI,EAAgBe,SAChB,uBAAwBf,EAAgBe,QAAO4D,OAAAA,QAAAC,QAG7C5E,EAAgBe,QAGhB6G,mBAAmBP,IAAOxC,KAAAoD,SAAAA,UAAAJ,IAAAI,CAAA,EAAA,CAI5B,GAJ4B,OAAAtD,QAAAC,QAAAoD,GAAAA,EAAAnD,KAAAmD,EAAAnD,KAAAiD,GAAAA,EAAAE,GAKhC,CAAC,MAAAzC,GAAA,OAAAZ,QAAAa,OAAAD,EAAA,CAAA,EACDlF,OAAAA,EACAG,gBAAAA,EACAd,SAAAA,EACAwI,WAAqB,aAATvH,EAEhB,oBE1NgB,SAAUc,YAAAA,IAAAA,EAA6B,CAAA,GACrD,IAEE0G,EAyCE1G,EAzCF0G,iBACAC,EAwCE3G,EAxCF2G,oBACAC,EAuCE5G,EAvCF4G,sBACAC,EAsCE7G,EAtCF6G,oCACAlF,EAqCE3B,EArCF2B,QACAmF,EAoCE9G,EApCF8G,YACAC,EAmCE/G,EAnCF+G,qBACAC,EAkCEhH,EAlCFgH,uBACAC,EAiCEjH,EAjCFiH,mBACAC,EAgCElH,EAhCFkH,uBACAC,EA+BEnH,EA/BFmH,mBACAC,EA8BEpH,EA9BFoH,aACAC,EA6BErH,EA7BFqH,qBACAC,EA4BEtH,EA5BFsH,yBACAC,EA2BEvH,EA3BFuH,gCACAC,EA0BExH,EA1BFwH,yBACAC,EAyBEzH,EAzBFyH,iCACAhG,EAwBEzB,EAxBFyB,UACAC,EAuBE1B,EAvBF0B,aAGOgG,EAoBL1H,EApBF2H,MACSC,EAmBP5H,EAnBF6H,QACSC,EAkBP9H,EAlBF+H,QACgBC,EAiBdhI,EAjBFiI,eACyBC,EAgBvBlI,EAhBFmI,wBACcC,EAeZpI,EAfFqI,aACqBC,EAcnBtI,EAdFuI,oBACsBC,EAapBxI,EAbFyI,qBACcC,EAYZ1I,EAZF2I,aAGYC,EASV5I,EATF6I,WACaC,EAQX9I,EARF+I,YACYC,EAOVhJ,EAPFiJ,WAAUC,EAORlJ,EAJFmJ,YAAAA,OAAc,IAAHD,GAAQA,EAGAE,EACjBpJ,EADFqJ,kBAGIC,EAAgB9K,SAAkC,MAExDE,EAA4BC,EAAQA,SAAe,gBAA5CC,EAAMF,EAAEG,GAAAA,EAASH,EAAA,GACxBI,EAAkDH,EAAQA,SAAS,IAA5D4K,EAAiBzK,EAAE0K,GAAAA,EAAoB1K,EAC9C,GAAAG,EAAwDN,EAAAA,SAEtD,IAFK8K,EAAoBxK,EAAEyK,GAAAA,EAAuBzK,EAGpD,GAAA0K,EAA0BhL,EAAQA,SAAgB,MAA3CiL,EAAKD,EAAA,GAAEE,EAAQF,EAAA,GAGtBpK,EAASA,UAAC,WACR,OAAY,WAAA,IAAAuK,EACVA,OAAAA,EAAAR,EAAchK,UAAdwK,EAAuBC,OACzB,CACF,EAAG,IAEH,IAAMC,EAAUC,cACPC,SAAAA,YAAAA,IAAAA,EAA6C,CAAA,GAAM,IACxD,GAAIZ,EAAchK,QAEhB,OADA5B,QAAQC,KAAK,qBACbuF,QAAAC,UAGF,IAAIT,IAAAA,EAAAyH,EACFtL,EAAU,cACVgL,EAAS,MAGT,IAAMlC,EAAQuC,EAAevC,OAASD,EAChCG,EAAUqC,EAAerC,SAAWD,EAE1C,IAAKD,EACH,MAAU,IAAA3B,MAAM,qBAElB,IAAK6B,EACH,MAAU,IAAA7B,MAAM,wBAIlB,IAIIoE,EAJEvB,EAAaqB,EAAerB,YAAcD,EAC1CG,EAAcmB,EAAenB,aAAeD,EAC5CG,EAAaiB,EAAejB,YAAcD,EAK1CK,EAEoB,OAFH3G,EACW,OADXyH,EACrBD,EAAeb,mBAAiBc,EAChCf,GAAwB1G,KAEtBwH,EAAerD,sCACfA,GAGJ,GAAIgC,EAEFuB,EAAaC,EAAMA,OAACL,QAAQ,CAC1BrC,MAAAA,EACAE,QAAAA,EACAE,QAASmC,EAAenC,SAAWD,EACnCG,eACEiC,EAAejC,gBAAkBD,EACnCG,wBACE+B,EAAe/B,yBACfD,EACFG,aAAc6B,EAAe7B,cAAgBD,EAC7CG,oBACE2B,EAAe3B,qBAAuBD,EACxCG,qBACEyB,EAAezB,sBACfD,EACFG,aAAcuB,EAAevB,cAAgBD,EAC7CG,WAAAA,EACAQ,kBAAAA,QAEON,KAAAA,IAAeE,EAuBxB,MAAU,IAAAjD,MACR,4EAtBFoE,EAAaC,EAAMA,OAACL,QAAQ,CAC1BrC,MAAAA,EACAE,QAAAA,EACAE,QAASmC,EAAenC,SAAWD,EACnCG,eACEiC,EAAejC,gBAAkBD,EACnCG,wBACE+B,EAAe/B,yBACfD,EACFG,aAAc6B,EAAe7B,cAAgBD,EAC7CG,oBACE2B,EAAe3B,qBAAuBD,EACxCG,qBACEyB,EAAezB,sBACfD,EACFG,aAAcuB,EAAevB,cAAgBD,EAC7CW,kBAAAA,EACAN,YAAAA,EACAE,WAAAA,GAMJ,CAEAK,EAAchK,QAAU8K,EAGxBA,EAAWE,GAAGC,EAAAA,eAAeC,gBAAiB,WAC5C3L,EAAU,aACV6H,MAAAA,GAAAA,GACF,GAEA0D,EAAWE,GAAGC,EAAAA,eAAeE,mBAAoB,SAACC,GAChD,IAAMC,EAAUD,EAChBlB,EAAqBmB,EAAQ1F,MAC7BpG,EAAU,gBACS,MAAnB8H,GAAAA,EAAsBgE,EACxB,GAEAP,EAAWE,GAAGC,iBAAeK,qBAAsB,SAACF,GAClD,IAAMC,EAAUD,EACVG,EAA6B,CACjCC,GAAOC,KAAKC,MAAK,IAAIC,KAAKC,SAC1BjG,KAAM0F,EAAQ1F,KACdkG,UAAWJ,KAAKC,MAChBI,SAAS,GAEX1B,EAAwB,SAAA2B,YAAIC,OAAQD,EAAI,CAAER,GAAO,GACjDrB,EAAqB,IACA,MAArB5C,GAAAA,EAAwB+D,EAC1B,GAEAP,EAAWE,GACTC,iBAAegB,qCACf,SAACb,GACC,IAAMC,EAAUD,EACVG,EAA6B,CACjCC,GAAOC,KAAKC,MAAK,IAAIC,KAAKC,SAC1BjG,KAAM0F,EAAQ1F,KACdkG,UAAWJ,KAAKC,MAChBI,SAAS,EACTI,MAAOb,EAAQa,OAEjB9B,EAAwB,SAAA2B,GAAI,MAAA,GAAAC,OAAQD,EAAI,CAAER,GAAQ,GAClDrB,EAAqB,IACc,MAAnC3C,GAAAA,EAAsC8D,EACxC,GAGFP,EAAWE,GAAGC,EAAcA,eAACkB,MAAO,SAACC,GACnC,IAAMf,EAAUe,EAChB7B,EAASc,EAAQf,OACjB/K,EAAU,SACV8C,MAAAA,GAAAA,EAAU,IAAIqE,MAAM2E,EAAQf,OAC9B,GAEAQ,EAAWE,GAAGC,EAAAA,eAAeoB,WAAY,SAACjB,GACxC,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACC,MAAXiI,GAAAA,EAAc6D,EAChB,GAEAP,EAAWE,GAAGC,EAAcA,eAACqB,eAAgB,SAAClB,GAC5C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACVkI,MAAAA,GAAAA,EAAuB4D,EACzB,GAEAP,EAAWE,GAAGC,EAAcA,eAACsB,iBAAkB,SAACnB,GAC9C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACY,MAAtBmI,GAAAA,EAAyB2D,EAC3B,GAEAP,EAAWE,GAAGC,EAAAA,eAAeuB,kBAAmB,SAACpB,GAC/C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACVoI,MAAAA,GAAAA,EAAqB0D,EACvB,GAEAP,EAAWE,GAAGC,EAAcA,eAACwB,iBAAkB,SAACrB,GAC9C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACY,MAAtBqI,GAAAA,EAAyByD,EAC3B,GAEAP,EAAWE,GAAGC,EAAcA,eAACyB,aAAc,SAACtB,GAC1C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,eACVsI,GAAAA,EAAqBwD,EACvB,GAEAP,EAAWE,GAAGC,EAAAA,eAAe0B,YAAa,SAACvB,GACzC,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACE,MAAZuI,GAAAA,EAAeuD,EACjB,GAEAP,EAAWE,GAAGC,EAAcA,eAAC2B,eAAgB,SAACxB,GAC5C,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACVwI,MAAAA,GAAAA,EAAuBsD,EACzB,GAEAP,EAAWE,GAAGC,EAAcA,eAAC4B,mBAAoB,SAACzB,GAChD,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACVyI,MAAAA,GAAAA,EAA2BqD,EAC7B,GAEAP,EAAWE,GACTC,EAAcA,eAAC6B,4BACf,SAAC1B,GACC,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACV0I,MAAAA,GAAAA,EAAkCoD,EACpC,GAGFP,EAAWE,GAAGC,EAAcA,eAAC8B,oBAAqB,SAAC3B,GACjD,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACc,MAAxB2I,GAAAA,EAA2BmD,EAC7B,GAEAP,EAAWE,GACTC,EAAcA,eAAC+B,4BACf,SAAC5B,GACC,IAAMC,EAAUD,EAChBb,EAASc,EAAQf,OACjB/K,EAAU,SACsB,MAAhC4I,GAAAA,EAAmCkD,EACrC,GAGFP,EAAWE,GAAGC,EAAcA,eAACgC,KAAM,WACxB,MAAT9K,GAAAA,GACF,GAEA2I,EAAWE,GAAGC,EAAcA,eAACiC,MAAO,WAClC3N,EAAU,gBACVyK,EAAchK,QAAU,KACZ,MAAZoC,GAAAA,GACF,EACF,CAAE,MAAOgK,GACP,IAAMe,EACJf,aAAe1F,MAAQ0F,EAAIf,QAAU,oBAGvC,MAFAd,EAAS4C,GACT5N,EAAU,SACJ6M,CACR,CAAC,OAAAxI,QAAAC,SACH,CAAC,MAAAW,GAAAZ,OAAAA,QAAAa,OAAAD,EAAA,CAAA,EACD,CACE4D,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAE,EACAI,EACA1C,EACAC,EACAC,EACAC,EACAlF,EACAmF,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAhG,EACAC,IAIEgL,EAAazC,EAAWA,YAAC,WAAK0C,IAAAA,EACb,OAArBA,EAAArD,EAAchK,UAAdqN,EAAuB5C,QACvBT,EAAchK,QAAU,KACxBT,EAAU,eACZ,EAAG,IAEG+N,EAAY3C,cAChB,SACE4C,EACA7M,GAEA,IAAKsJ,EAAchK,QACjB,MAAU,IAAA0G,MAAM,2BAElBsD,EAAchK,QAAQwN,KAAIrM,EAAA,CAAGoM,YAAAA,GAAgB7M,GAC/C,EACA,IAGI+M,GAAS9C,EAAWA,YAAC,WACzB,IAAKX,EAAchK,QACjB,MAAM,IAAI0G,MAAM,2BAElBsD,EAAchK,QAAQyN,QACxB,EAAG,IAEGC,GAAmB/C,EAAWA,YAAC,WACnCP,EAAwB,IACxBF,EAAqB,GACvB,EAAG,IAEGyD,GAAgBhD,EAAAA,YAAY,WAChC,OAAOX,EAAchK,OACvB,EAAG,IASH,OANAC,EAAAA,UAAU,WACJ4J,GACFa,GAEJ,EAAG,CAACb,EAAaa,IAEV,CAELpL,OAAAA,EACAsO,YAAwB,cAAXtO,GAAqC,iBAAXA,EACvCuO,eAA2B,iBAAXvO,EAChB2K,kBAAAA,EACAE,qBAAAA,EACAG,MAAAA,EAGAI,QAAAA,EACA0C,WAAAA,EACAE,UAAAA,EACAG,OAAAA,GACAC,iBAAAA,GACAC,cAAAA,GAEJ"}
|
|
1
|
+
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n AudioAlignmentEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n | \"onAudioAlignment\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const shouldEndRef = useRef(false);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n shouldEndRef.current = true;\n if (lockRef.current) {\n lockRef.current.then(conv => conv.endSession());\n } else {\n conversationRef.current?.endSession();\n }\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n shouldEndRef.current = false;\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onAudioAlignment:\n options?.onAudioAlignment || defaultOptions?.onAudioAlignment,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n\n // Check if session was cancelled while connecting\n if (shouldEndRef.current) {\n await conversationRef.current.endSession();\n conversationRef.current = null;\n lockRef.current = null;\n throw new Error(\"Session cancelled during connection\");\n }\n\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n shouldEndRef.current = true;\n const pendingConnection = lockRef.current;\n const conversation = conversationRef.current;\n conversationRef.current = null;\n\n if (pendingConnection) {\n const conv = await pendingConnection;\n await conv.endSession();\n } else {\n await conversation?.endSession();\n }\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.13.0\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","shouldEndRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","then","conv","endSession","startSession","options","_conversationRef$curr4","_exit","_temp4","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","_extends","livekitUrl","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onAudioAlignment","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","_lockRef$current","_temp2","_result3","getId","_temp","Error","_finallyRethrows","_wasThrown","_result2","isOpen","_temp3","conversation","_conversation$getId","e","reject","pendingConnection","_temp5","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_temp7","_exit3","_result4","_temp6","_await$conversationRe","changeOutputDevice","_exit4","_temp9","_result5","_temp8","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","defaultIncludeTimestamps","includeTimestamps","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","_runtimeOptions$inclu","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","words","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|