@elevenlabs/react 0.9.2 → 0.11.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.
@@ -1,22 +1,22 @@
1
1
 
2
- > @elevenlabs/react@0.9.2 prebuild /home/runner/work/packages/packages/packages/react
2
+ > @elevenlabs/react@0.11.0 prebuild /home/runner/work/packages/packages/packages/react
3
3
  > npm run generate-version
4
4
 
5
5
 
6
- > @elevenlabs/react@0.9.2 generate-version
6
+ > @elevenlabs/react@0.11.0 generate-version
7
7
  > printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
8
8
 
9
9
 
10
- > @elevenlabs/react@0.9.2 build /home/runner/work/packages/packages/packages/react
10
+ > @elevenlabs/react@0.11.0 build /home/runner/work/packages/packages/packages/react
11
11
  > BROWSERSLIST_ENV=modern microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react src/index.ts
12
12
 
13
13
  No name was provided for external module '@elevenlabs/client' in output.globals – guessing 'client'
14
14
  Build "@elevenlabs/react" to dist:
15
- 3.19 kB: lib.cjs.gz
16
- 2.82 kB: lib.cjs.br
17
- 2.87 kB: lib.modern.js.gz
18
- 2.52 kB: lib.modern.js.br
19
- 3.15 kB: lib.module.js.gz
20
- 2.78 kB: lib.module.js.br
21
- 3.24 kB: lib.umd.js.gz
22
- 2.87 kB: lib.umd.js.br
15
+ 3.26 kB: lib.cjs.gz
16
+ 2.88 kB: lib.cjs.br
17
+ 2.94 kB: lib.modern.js.gz
18
+ 2.58 kB: lib.modern.js.br
19
+ 3.22 kB: lib.module.js.gz
20
+ 2.84 kB: lib.module.js.br
21
+ 3.32 kB: lib.umd.js.gz
22
+ 2.92 kB: lib.umd.js.br
@@ -1,4 +1,4 @@
1
1
 
2
- > @elevenlabs/react@0.9.2 generate-version /home/runner/work/packages/packages/packages/react
2
+ > @elevenlabs/react@0.11.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
@@ -529,8 +529,6 @@ console.log(canSendFeedback); // boolean
529
529
 
530
530
  React hook for managing real-time speech-to-text transcription with ElevenLabs Scribe Realtime v2.
531
531
 
532
- **Note:** Scribe Realtime v2 is currently in closed beta. For access please [contact sales](https://elevenlabs.io/contact-sales).
533
-
534
532
  #### Quick Start
535
533
 
536
534
  ```tsx
@@ -538,12 +536,12 @@ import { useScribe } from "@elevenlabs/react";
538
536
 
539
537
  function MyComponent() {
540
538
  const scribe = useScribe({
541
- modelId: "scribe_realtime_v2",
539
+ modelId: "scribe_v2_realtime",
542
540
  onPartialTranscript: (data) => {
543
541
  console.log("Partial:", data.text);
544
542
  },
545
- onFinalTranscript: (data) => {
546
- console.log("Final:", data.text);
543
+ onCommittedTranscript: (data) => {
544
+ console.log("Committed:", data.text);
547
545
  },
548
546
  });
549
547
 
@@ -570,7 +568,7 @@ function MyComponent() {
570
568
  {scribe.partialTranscript && <p>Live: {scribe.partialTranscript}</p>}
571
569
 
572
570
  <div>
573
- {scribe.finalTranscripts.map((t) => (
571
+ {scribe.committedTranscripts.map((t) => (
574
572
  <p key={t.id}>{t.text}</p>
575
573
  ))}
576
574
  </div>
@@ -620,7 +618,7 @@ Configure the hook with default options and callbacks:
620
618
  const scribe = useScribe({
621
619
  // Connection options (can be overridden in connect())
622
620
  token: "optional-default-token",
623
- modelId: "scribe_realtime_v2",
621
+ modelId: "scribe_v2_realtime",
624
622
  baseUri: "wss://api.elevenlabs.io",
625
623
 
626
624
  // VAD options
@@ -649,10 +647,11 @@ const scribe = useScribe({
649
647
  // Event callbacks
650
648
  onSessionStarted: () => console.log("Session started"),
651
649
  onPartialTranscript: (data) => console.log("Partial:", data.text),
652
- onFinalTranscript: (data) => console.log("Final:", data.text),
653
- onFinalTranscriptWithTimestamps: (data) => console.log("With timestamps:", data),
650
+ onCommittedTranscript: (data) => console.log("Committed:", data.text),
651
+ onCommittedTranscriptWithTimestamps: (data) => console.log("With timestamps:", data),
654
652
  onError: (error) => console.error("Error:", error),
655
653
  onAuthError: (data) => console.error("Auth error:", data.error),
654
+ onQuotaExceededError: (data) => console.error("Quota exceeded:", data.error),
656
655
  onConnect: () => console.log("Connected"),
657
656
  onDisconnect: () => console.log("Disconnected"),
658
657
  });
@@ -665,7 +664,7 @@ Stream audio directly from the user's microphone:
665
664
  ```tsx
666
665
  function MicrophoneTranscription() {
667
666
  const scribe = useScribe({
668
- modelId: "scribe_realtime_v2",
667
+ modelId: "scribe_v2_realtime",
669
668
  });
670
669
 
671
670
  const startRecording = async () => {
@@ -695,7 +694,7 @@ function MicrophoneTranscription() {
695
694
  </div>
696
695
  )}
697
696
 
698
- {scribe.finalTranscripts.map((transcript) => (
697
+ {scribe.committedTranscripts.map((transcript) => (
699
698
  <div key={transcript.id}>{transcript.text}</div>
700
699
  ))}
701
700
  </div>
@@ -713,7 +712,7 @@ import { useScribe, AudioFormat } from "@elevenlabs/react";
713
712
  function FileTranscription() {
714
713
  const [file, setFile] = useState<File | null>(null);
715
714
  const scribe = useScribe({
716
- modelId: "scribe_realtime_v2",
715
+ modelId: "scribe_v2_realtime",
717
716
  audioFormat: AudioFormat.PCM_16000,
718
717
  sampleRate: 16000,
719
718
  });
@@ -764,7 +763,7 @@ function FileTranscription() {
764
763
  Transcribe
765
764
  </button>
766
765
 
767
- {scribe.finalTranscripts.map((transcript) => (
766
+ {scribe.committedTranscripts.map((transcript) => (
768
767
  <div key={transcript.id}>{transcript.text}</div>
769
768
  ))}
770
769
  </div>
@@ -780,7 +779,7 @@ function FileTranscription() {
780
779
  - **isConnected** - Boolean indicating if connected
781
780
  - **isTranscribing** - Boolean indicating if actively transcribing
782
781
  - **partialTranscript** - Current partial (interim) transcript
783
- - **finalTranscripts** - Array of completed transcript segments
782
+ - **committedTranscripts** - Array of completed transcript segments
784
783
  - **error** - Current error message, or null
785
784
 
786
785
  ```tsx
@@ -789,7 +788,7 @@ const scribe = useScribe(/* options */);
789
788
  console.log(scribe.status); // "connected"
790
789
  console.log(scribe.isConnected); // true
791
790
  console.log(scribe.partialTranscript); // "hello world"
792
- console.log(scribe.finalTranscripts); // [{ id: "...", text: "...", timestamp: ..., isFinal: true }]
791
+ console.log(scribe.committedTranscripts); // [{ id: "...", text: "...", words: ..., isFinal: true }]
793
792
  console.log(scribe.error); // null or error string
794
793
  ```
795
794
 
@@ -855,14 +854,14 @@ const connection = scribe.getConnection();
855
854
 
856
855
  #### Transcript Segment Type
857
856
 
858
- Each final transcript segment has the following structure:
857
+ Each committed transcript segment has the following structure:
859
858
 
860
859
  ```typescript
861
860
  interface TranscriptSegment {
862
861
  id: string; // Unique identifier
863
862
  text: string; // Transcript text
864
863
  timestamp: number; // Unix timestamp
865
- isFinal: boolean; // Always true for final transcripts
864
+ isFinal: boolean; // Always true for committed transcripts
866
865
  }
867
866
  ```
868
867
 
@@ -878,15 +877,15 @@ const scribe = useScribe({
878
877
  onPartialTranscript: (data: { text: string }) => {
879
878
  console.log("Partial:", data.text);
880
879
  },
881
- onFinalTranscript: (data: { text: string }) => {
882
- console.log("Final:", data.text);
880
+ onCommittedTranscript: (data: { text: string }) => {
881
+ console.log("Committed:", data.text);
883
882
  },
884
- onFinalTranscriptWithTimestamps: (data: {
883
+ onCommittedTranscriptWithTimestamps: (data: {
885
884
  text: string;
886
- timestamps?: { start: number; end: number }[];
885
+ words?: { start: number; end: number }[];
887
886
  }) => {
888
887
  console.log("Text:", data.text);
889
- console.log("Word timestamps:", data.timestamps);
888
+ console.log("Word timestamps:", data.words);
890
889
  },
891
890
  onError: (error: Error | Event) => {
892
891
  console.error("Connection error:", error);
@@ -905,23 +904,23 @@ const scribe = useScribe({
905
904
 
906
905
  #### Commit Strategies
907
906
 
908
- Control when transcriptions are finalized:
907
+ Control when transcriptions are committed:
909
908
 
910
909
  ```tsx
911
910
  import { CommitStrategy } from "@elevenlabs/react";
912
911
 
913
- // Automatic (default) - API detects speech end
914
- const scribe = useScribe({
915
- commitStrategy: CommitStrategy.AUTOMATIC,
916
- });
917
-
918
- // Manual - you control when to commit
912
+ // Manual (default) - you control when to commit
919
913
  const scribe = useScribe({
920
914
  commitStrategy: CommitStrategy.MANUAL,
921
915
  });
922
916
 
923
917
  // Later...
924
- scribe.commit(); // Finalize transcription
918
+ scribe.commit(); // Commit transcription
919
+
920
+ // Voice Activity Detection - model detects silences and automatically commits
921
+ const scribe = useScribe({
922
+ commitStrategy: CommitStrategy.VAD,
923
+ });
925
924
  ```
926
925
 
927
926
  #### Complete Example
@@ -934,10 +933,10 @@ function ScribeDemo() {
934
933
  const [mode, setMode] = useState<"microphone" | "file">("microphone");
935
934
 
936
935
  const scribe = useScribe({
937
- modelId: "scribe_realtime_v2",
936
+ modelId: "scribe_v2_realtime",
938
937
  commitStrategy: CommitStrategy.AUTOMATIC,
939
938
  onSessionStarted: () => console.log("Started"),
940
- onFinalTranscript: (data) => console.log("Final:", data.text),
939
+ onCommittedTranscript: (data) => console.log("Committed:", data.text),
941
940
  onError: (error) => console.error("Error:", error),
942
941
  });
943
942
 
@@ -979,10 +978,10 @@ function ScribeDemo() {
979
978
  </div>
980
979
  )}
981
980
 
982
- {/* Final Transcripts */}
981
+ {/* Committed Transcripts */}
983
982
  <div>
984
- <h2>Transcripts ({scribe.finalTranscripts.length})</h2>
985
- {scribe.finalTranscripts.map((t) => (
983
+ <h2>Transcripts ({scribe.committedTranscripts.length})</h2>
984
+ {scribe.committedTranscripts.map((t) => (
986
985
  <div key={t.id}>
987
986
  <span>{new Date(t.timestamp).toLocaleTimeString()}</span>
988
987
  <p>{t.text}</p>
@@ -1012,7 +1011,7 @@ import {
1012
1011
  } from "@elevenlabs/react";
1013
1012
 
1014
1013
  const scribe: UseScribeReturn = useScribe({
1015
- modelId: "scribe_realtime_v2",
1014
+ modelId: "scribe_v2_realtime",
1016
1015
  microphone: {
1017
1016
  echoCancellation: true,
1018
1017
  },
package/dist/lib.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["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 a=l.micMuted,c=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(l,r),v=e.useRef(null),f=e.useRef(null),m=e.useState("disconnected"),h=m[0],g=m[1],p=e.useState(!1),S=p[0],C=p[1],b=e.useState("listening"),y=b[0],M=b[1],T=e.useRef(a),R=e.useRef(c);return T.current=a,R.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 r,l,a=function(r){return l?r:function(r,l){try{var a=(I=i(D=o((null==e?void 0:e.serverLocation)||s)),A=u(D),f.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:A,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(S=null==e||null==(b=e.overrides)?void 0:b.client)?S:{},{source:(null==e||null==(y=e.overrides)||null==(y=y.client)?void 0:y.source)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.source)||"react_sdk",version:(null==e||null==(E=e.overrides)||null==(E=E.client)?void 0:E.version)||(null==d||null==(w=d.overrides)||null==(w=w.client)?void 0:w.version)||"0.9.2"})}),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),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 t,r=n.mode;M(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;C(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==T.current&&v.current.setMicMuted(T.current),void 0!==R.current&&v.current.setVolume({volume:R.current}),v.current.getId()}))}catch(e){return l(!0,e)}var c,m,h,p,S,b,y,P,E,w,D,I,A;return a&&a.then?a.then(l.bind(null,!1),l.bind(null,!0)):l(!1,a)}(0,function(e,n){if(f.current=null,e)throw n;return n})};if(null!=(r=v.current)&&r.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return l=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 t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=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(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=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(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:S,micMuted:a,isSpeaking:"speaking"===y}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,u=r.onFinalTranscript,l=r.onFinalTranscriptWithTimestamps,a=r.onError,c=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.token,f=r.modelId,m=r.baseUri,h=r.commitStrategy,g=r.vadSilenceThresholdSecs,p=r.vadThreshold,S=r.minSpeechDurationMs,C=r.minSilenceDurationMs,b=r.languageCode,y=r.microphone,M=r.audioFormat,T=r.sampleRate,R=r.autoConnect,P=void 0!==R&&R,E=e.useRef(null),w=e.useState("disconnected"),D=w[0],I=w[1],A=e.useState(""),k=A[0],F=A[1],O=e.useState([]),x=O[0],U=O[1],j=e.useState(null),L=j[0],V=j[1];e.useEffect(function(){return function(){var e;null==(e=E.current)||e.close()}},[]);var N=e.useCallback(function(e){void 0===e&&(e={});try{if(E.current)return console.warn("Already connected"),Promise.resolve();try{I("connecting"),V(null);var t=e.token||v,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,P=e.microphone||y,w=e.audioFormat||M,D=e.sampleRate||T;if(P)R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,microphone:P});else{if(!w||!D)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,audioFormat:w,sampleRate:D})}E.current=R,R.on(n.RealtimeEvents.SESSION_STARTED,function(){I("connected"),null==o||o()}),R.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),I("transcribing"),null==i||i(n)}),R.on(n.RealtimeEvents.FINAL_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(n.RealtimeEvents.FINAL_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(n.RealtimeEvents.ERROR,function(e){var n=e;V(n.error),I("error"),null==a||a(new Error(n.error))}),R.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;V(n.error),I("error"),null==c||c(n)}),R.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(n.RealtimeEvents.CLOSE,function(){I("disconnected"),E.current=null,null==d||d()})}catch(e){var A=e instanceof Error?e.message:"Failed to connect";throw V(A),I("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[v,f,m,h,g,p,S,C,b,y,M,T,o,i,u,l,a,c,s,d]),q=e.useCallback(function(){var e;null==(e=E.current)||e.close(),E.current=null,I("disconnected")},[]),_=e.useCallback(function(e,n){if(!E.current)throw new Error("Not connected to Scribe");E.current.send(t({audioBase64:e},n))},[]),B=e.useCallback(function(){if(!E.current)throw new Error("Not connected to Scribe");E.current.commit()},[]),H=e.useCallback(function(){U([]),F("")},[]),W=e.useCallback(function(){return E.current},[]);return e.useEffect(function(){P&&N()},[P,N]),{status:D,isConnected:"connected"===D||"transcribing"===D,isTranscribing:"transcribing"===D,partialTranscript:k,finalTranscripts:x,error:L,connect:N,disconnect:q,sendAudio:_,commit:B,clearTranscripts:H,getConnection:W}};
1
+ var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["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 a=l.micMuted,c=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(l,r),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),h=f[0],g=f[1],p=e.useState(!1),C=p[0],S=p[1],b=e.useState("listening"),T=b[0],M=b[1],E=e.useRef(a),y=e.useRef(c);return E.current=a,y.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 r,l,a=function(r){return l?r:function(r,l){try{var a=(I=i(w=o((null==e?void 0:e.serverLocation)||s)),A=u(w),m.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:A,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(C=null==e||null==(b=e.overrides)?void 0:b.client)?C:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(R=d.overrides)||null==(R=R.client)?void 0:R.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.11.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),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 t,r=n.mode;M(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;S(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==E.current&&v.current.setMicMuted(E.current),void 0!==y.current&&v.current.setVolume({volume:y.current}),v.current.getId()}))}catch(e){return l(!0,e)}var c,f,h,p,C,b,T,R,D,P,w,I,A;return a&&a.then?a.then(l.bind(null,!1),l.bind(null,!0)):l(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(r=v.current)&&r.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 l=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 t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=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(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=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(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:C,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,u=r.onCommittedTranscript,l=r.onCommittedTranscriptWithTimestamps,a=r.onError,c=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.onQuotaExceededError,m=r.token,f=r.modelId,h=r.baseUri,g=r.commitStrategy,p=r.vadSilenceThresholdSecs,C=r.vadThreshold,S=r.minSpeechDurationMs,b=r.minSilenceDurationMs,T=r.languageCode,M=r.microphone,E=r.audioFormat,y=r.sampleRate,R=r.autoConnect,D=void 0!==R&&R,P=e.useRef(null),w=e.useState("disconnected"),I=w[0],A=w[1],k=e.useState(""),O=k[0],F=k[1],x=e.useState([]),U=x[0],j=x[1],V=e.useState(null),L=V[0],_=V[1];e.useEffect(function(){return function(){var e;null==(e=P.current)||e.close()}},[]);var q=e.useCallback(function(e){void 0===e&&(e={});try{if(P.current)return console.warn("Already connected"),Promise.resolve();try{A("connecting"),_(null);var t=e.token||m,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,D=e.microphone||M,w=e.audioFormat||E,I=e.sampleRate||y,k=!(!e.onCommittedTranscriptWithTimestamps&&!l);if(D)R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,microphone:D,includeTimestamps:k});else{if(!w||!I)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,includeTimestamps:k,audioFormat:w,sampleRate:I})}P.current=R,R.on(n.RealtimeEvents.SESSION_STARTED,function(){A("connected"),null==o||o()}),R.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),A("transcribing"),null==i||i(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(n.RealtimeEvents.ERROR,function(e){var n=e;_(n.error),A("error"),null==a||a(new Error(n.error))}),R.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;_(n.error),A("error"),null==c||c(n)}),R.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;_(n.error),A("error"),null==v||v(n)}),R.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(n.RealtimeEvents.CLOSE,function(){A("disconnected"),P.current=null,null==d||d()})}catch(e){var O=e instanceof Error?e.message:"Failed to connect";throw _(O),A("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[m,f,h,g,p,C,S,b,T,M,E,y,o,i,u,l,a,c,s,d,v]),N=e.useCallback(function(){var e;null==(e=P.current)||e.close(),P.current=null,A("disconnected")},[]),B=e.useCallback(function(e,n){if(!P.current)throw new Error("Not connected to Scribe");P.current.send(t({audioBase64:e},n))},[]),W=e.useCallback(function(){if(!P.current)throw new Error("Not connected to Scribe");P.current.commit()},[]),H=e.useCallback(function(){j([]),F("")},[]),Q=e.useCallback(function(){return P.current},[]);return e.useEffect(function(){D&&q()},[D,q]),{status:I,isConnected:"connected"===I||"transcribing"===I,isTranscribing:"transcribing"===I,partialTranscript:O,committedTranscripts:U,error:L,connect:q,disconnect:N,sendAudio:B,commit:W,clearTranscripts:H,getConnection:Q}};
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 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 | \"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 livekitUrl = getLivekitUrlForLocation(resolvedServerLocation);\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n livekitUrl,\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 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.9.2\";\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 FinalTranscriptMessage,\n FinalTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onFinalTranscript?: (data: { text: string }) => void;\n onFinalTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\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\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n finalTranscripts: 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 }\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 onFinalTranscript,\n onFinalTranscriptWithTimestamps,\n onError,\n onAuthError,\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 } = 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 [finalTranscripts, setFinalTranscripts] = useState<TranscriptSegment[]>(\n []\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 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 } 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 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.FINAL_TRANSCRIPT, (data: unknown) => {\n const message = data as FinalTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setFinalTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onFinalTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.FINAL_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as FinalTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setFinalTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onFinalTranscriptWithTimestamps?.(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.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 onSessionStarted,\n onPartialTranscript,\n onFinalTranscript,\n onFinalTranscriptWithTimestamps,\n onError,\n onAuthError,\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 }\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 setFinalTranscripts([]);\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 finalTranscripts,\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","livekitUrl","Conversation","_extends","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","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","_temp4","_exit2","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_temp6","_exit3","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onFinalTranscript","onFinalTranscriptWithTimestamps","onAuthError","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","connectionRef","partialTranscript","setPartialTranscript","finalTranscripts","setFinalTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","FINAL_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","FINAL_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
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 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 | \"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 livekitUrl = getLivekitUrlForLocation(resolvedServerLocation);\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n livekitUrl,\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 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.11.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} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\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 timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\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 }\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 onConnect,\n onDisconnect,\n onQuotaExceededError,\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 } = 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 // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\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 };\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.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 onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\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 }\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","livekitUrl","Conversation","_extends","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","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","_temp4","_exit2","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_temp6","_exit3","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","onQuotaExceededError","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","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","includeTimestamps","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","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function a(){return a=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)({}).hasOwnProperty.call(o,r)&&(n[r]=o[r])}return n},a.apply(null,arguments)}function u(i={}){const{onSessionStarted:u,onPartialTranscript:c,onFinalTranscript:s,onFinalTranscriptWithTimestamps:d,onError:v,onAuthError:g,onConnect:m,onDisconnect:h,token:p,modelId:S,baseUri:C,commitStrategy:M,vadSilenceThresholdSecs:T,vadThreshold:b,minSpeechDurationMs:w,minSilenceDurationMs:y,languageCode:f,microphone:D,audioFormat:I,sampleRate:A,autoConnect:R=!1}=i,F=n(null),[E,k]=e("disconnected"),[P,O]=e(""),[U,V]=e([]),[x,N]=e(null);o(()=>()=>{var n;null==(n=F.current)||n.close()},[]);const _=r(async(n={})=>{if(F.current)console.warn("Already connected");else try{k("connecting"),N(null);const e=n.token||p,o=n.modelId||S;if(!e)throw new Error("Token is required");if(!o)throw new Error("Model ID is required");const r=n.microphone||D,i=n.audioFormat||I,a=n.sampleRate||A;let R;if(r)R=t.connect({token:e,modelId:o,baseUri:n.baseUri||C,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||T,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||w,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||f,microphone:r});else{if(!i||!a)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.connect({token:e,modelId:o,baseUri:n.baseUri||C,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||T,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||w,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||f,audioFormat:i,sampleRate:a})}F.current=R,R.on(l.SESSION_STARTED,()=>{k("connected"),null==u||u()}),R.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;O(e.text),k("transcribing"),null==c||c(e)}),R.on(l.FINAL_TRANSCRIPT,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),O(""),null==s||s(e)}),R.on(l.FINAL_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),O(""),null==d||d(e)}),R.on(l.ERROR,n=>{const e=n;N(e.error),k("error"),null==v||v(new Error(e.error))}),R.on(l.AUTH_ERROR,n=>{const e=n;N(e.error),k("error"),null==g||g(e)}),R.on(l.OPEN,()=>{null==m||m()}),R.on(l.CLOSE,()=>{k("disconnected"),F.current=null,null==h||h()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw N(e),k("error"),n}},[p,S,C,M,T,b,w,y,f,D,I,A,u,c,s,d,v,g,m,h]),L=r(()=>{var n;null==(n=F.current)||n.close(),F.current=null,k("disconnected")},[]),q=r((n,e)=>{if(!F.current)throw new Error("Not connected to Scribe");F.current.send(a({audioBase64:n},e))},[]),B=r(()=>{if(!F.current)throw new Error("Not connected to Scribe");F.current.commit()},[]),$=r(()=>{V([]),O("")},[]),j=r(()=>F.current,[]);return o(()=>{R&&_()},[R,_]),{status:E,isConnected:"connected"===E||"transcribing"===E,isTranscribing:"transcribing"===E,partialTranscript:P,finalTranscripts:U,error:x,connect:_,disconnect:L,sendAudio:q,commit:B,clearTranscripts:$,getConnection:j}}const c=["micMuted","volume","serverLocation"];function s(n="us"){switch(n){case"eu-residency":case"in-residency":case"us":case"global":return n;default:return console.warn(`[ConversationalAI] Invalid server-location: ${n}. Defaulting to "us"`),"us"}}function d(n){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"}[n]}function v(n){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"}[n]}function g(r={}){const{micMuted:t,volume:l,serverLocation:u}=r,g=function(n,e){if(null==n)return{};var o={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;o[r]=n[r]}return o}(r,c),m=n(null),h=n(null),[p,S]=e("disconnected"),[C,M]=e(!1),[T,b]=e("listening"),w=n(t),y=n(l);return w.current=t,y.current=l,o(()=>{var n;void 0!==t&&(null==m||null==(n=m.current)||n.setMicMuted(t))},[t]),o(()=>{var n;void 0!==l&&(null==m||null==(n=m.current)||n.setVolume({volume:l}))},[l]),o(()=>()=>{var n;null==(n=m.current)||n.endSession()},[]),{startSession:async n=>{var e;if(null!=(e=m.current)&&e.isOpen())return m.current.getId();if(h.current)return(await h.current).getId();try{var o,r,t,l,c,p,C,T,f,D;const e=s((null==n?void 0:n.serverLocation)||u),I=d(e),A=v(e);return h.current=i.startSession(a({},null!=g?g:{},null!=n?n:{},{origin:I,livekitUrl:A,overrides:a({},null!=(o=null==g?void 0:g.overrides)?o:{},null!=(r=null==n?void 0:n.overrides)?r:{},{client:a({},null!=(t=null==g||null==(l=g.overrides)?void 0:l.client)?t:{},null!=(c=null==n||null==(p=n.overrides)?void 0:p.client)?c:{},{source:(null==n||null==(C=n.overrides)||null==(C=C.client)?void 0:C.source)||(null==g||null==(T=g.overrides)||null==(T=T.client)?void 0:T.source)||"react_sdk",version:(null==n||null==(f=n.overrides)||null==(f=f.client)?void 0:f.version)||(null==g||null==(D=g.overrides)||null==(D=D.client)?void 0:D.version)||"0.9.2"})}),onConnect:(null==n?void 0:n.onConnect)||(null==g?void 0:g.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==g?void 0:g.onDisconnect),onError:(null==n?void 0:n.onError)||(null==g?void 0:g.onError),onMessage:(null==n?void 0:n.onMessage)||(null==g?void 0:g.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==g?void 0:g.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==g?void 0:g.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==g?void 0:g.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==g?void 0:g.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==g?void 0:g.onInterruption),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==g?void 0:g.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==g?void 0:g.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==g?void 0:g.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==g?void 0:g.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==g?void 0:g.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==g?void 0:g.onAgentChatResponsePart),onModeChange:({mode:e})=>{var o;b(e),null==(o=(null==n?void 0:n.onModeChange)||(null==g?void 0:g.onModeChange))||o({mode:e})},onStatusChange:({status:e})=>{var o;S(e),null==(o=(null==n?void 0:n.onStatusChange)||(null==g?void 0:g.onStatusChange))||o({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var o;M(e),null==(o=(null==n?void 0:n.onCanSendFeedbackChange)||(null==g?void 0:g.onCanSendFeedbackChange))||o({canSendFeedback:e})}})),m.current=await h.current,void 0!==w.current&&m.current.setMicMuted(w.current),void 0!==y.current&&m.current.setVolume({volume:y.current}),m.current.getId()}finally{h.current=null}},endSession:async()=>{const n=m.current;m.current=null,await(null==n?void 0:n.endSession())},setVolume:({volume:n})=>{var e;null==(e=m.current)||e.setVolume({volume:n})},getInputByteFrequencyData:()=>{var n;return null==(n=m.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:()=>{var n;return null==(n=m.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:()=>{var n,e;return null!=(n=null==(e=m.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:()=>{var n,e;return null!=(n=null==(e=m.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:n=>{var e;null==(e=m.current)||e.sendFeedback(n)},getId:()=>{var n;return null==(n=m.current)?void 0:n.getId()},sendContextualUpdate:n=>{var e;null==(e=m.current)||e.sendContextualUpdate(n)},sendUserMessage:n=>{var e;null==(e=m.current)||e.sendUserMessage(n)},sendUserActivity:()=>{var n;null==(n=m.current)||n.sendUserActivity()},sendMCPToolApprovalResult:(n,e)=>{var o;null==(o=m.current)||o.sendMCPToolApprovalResult(n,e)},changeInputDevice:async n=>{if(m.current&&"changeInputDevice"in m.current)return await m.current.changeInputDevice(n);throw new Error("Device switching is only available for voice conversations")},changeOutputDevice:async n=>{if(m.current&&"changeOutputDevice"in m.current)return await m.current.changeOutputDevice(n);throw new Error("Device switching is only available for voice conversations")},status:p,canSendFeedback:C,micMuted:t,isSpeaking:"speaking"===T}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,s as parseLocation,g as useConversation,u as useScribe};
1
+ import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function a(){return a=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)({}).hasOwnProperty.call(o,r)&&(n[r]=o[r])}return n},a.apply(null,arguments)}function u(i={}){const{onSessionStarted:u,onPartialTranscript:s,onCommittedTranscript:c,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onConnect:g,onDisconnect:p,onQuotaExceededError:h,token:C,modelId:S,baseUri:T,commitStrategy:M,vadSilenceThresholdSecs:b,vadThreshold:w,minSpeechDurationMs:y,minSilenceDurationMs:D,languageCode:f,microphone:I,audioFormat:E,sampleRate:A,autoConnect:R=!1}=i,k=n(null),[O,F]=e("disconnected"),[P,U]=e(""),[x,V]=e([]),[_,N]=e(null);o(()=>()=>{var n;null==(n=k.current)||n.close()},[]);const q=r(async(n={})=>{if(k.current)console.warn("Already connected");else try{F("connecting"),N(null);const e=n.token||C,o=n.modelId||S;if(!e)throw new Error("Token is required");if(!o)throw new Error("Model ID is required");const r=n.microphone||I,i=n.audioFormat||E,a=n.sampleRate||A;let R;const O=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(r)R=t.connect({token:e,modelId:o,baseUri:n.baseUri||T,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||b,vadThreshold:n.vadThreshold||w,minSpeechDurationMs:n.minSpeechDurationMs||y,minSilenceDurationMs:n.minSilenceDurationMs||D,languageCode:n.languageCode||f,microphone:r,includeTimestamps:O});else{if(!i||!a)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.connect({token:e,modelId:o,baseUri:n.baseUri||T,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||b,vadThreshold:n.vadThreshold||w,minSpeechDurationMs:n.minSpeechDurationMs||y,minSilenceDurationMs:n.minSilenceDurationMs||D,languageCode:n.languageCode||f,includeTimestamps:O,audioFormat:i,sampleRate:a})}k.current=R,R.on(l.SESSION_STARTED,()=>{F("connected"),null==u||u()}),R.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;U(e.text),F("transcribing"),null==s||s(e)}),R.on(l.COMMITTED_TRANSCRIPT,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),U(""),null==c||c(e)}),R.on(l.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),U(""),null==d||d(e)}),R.on(l.ERROR,n=>{const e=n;N(e.error),F("error"),null==v||v(new Error(e.error))}),R.on(l.AUTH_ERROR,n=>{const e=n;N(e.error),F("error"),null==m||m(e)}),R.on(l.QUOTA_EXCEEDED,n=>{const e=n;N(e.error),F("error"),null==h||h(e)}),R.on(l.OPEN,()=>{null==g||g()}),R.on(l.CLOSE,()=>{F("disconnected"),k.current=null,null==p||p()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw N(e),F("error"),n}},[C,S,T,M,b,w,y,D,f,I,E,A,u,s,c,d,v,m,g,p,h]),B=r(()=>{var n;null==(n=k.current)||n.close(),k.current=null,F("disconnected")},[]),L=r((n,e)=>{if(!k.current)throw new Error("Not connected to Scribe");k.current.send(a({audioBase64:n},e))},[]),$=r(()=>{if(!k.current)throw new Error("Not connected to Scribe");k.current.commit()},[]),W=r(()=>{V([]),U("")},[]),j=r(()=>k.current,[]);return o(()=>{R&&q()},[R,q]),{status:O,isConnected:"connected"===O||"transcribing"===O,isTranscribing:"transcribing"===O,partialTranscript:P,committedTranscripts:x,error:_,connect:q,disconnect:B,sendAudio:L,commit:$,clearTranscripts:W,getConnection:j}}const s=["micMuted","volume","serverLocation"];function c(n="us"){switch(n){case"eu-residency":case"in-residency":case"us":case"global":return n;default:return console.warn(`[ConversationalAI] Invalid server-location: ${n}. Defaulting to "us"`),"us"}}function d(n){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"}[n]}function v(n){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"}[n]}function m(r={}){const{micMuted:t,volume:l,serverLocation:u}=r,m=function(n,e){if(null==n)return{};var o={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;o[r]=n[r]}return o}(r,s),g=n(null),p=n(null),[h,C]=e("disconnected"),[S,T]=e(!1),[M,b]=e("listening"),w=n(t),y=n(l);return w.current=t,y.current=l,o(()=>{var n;void 0!==t&&(null==g||null==(n=g.current)||n.setMicMuted(t))},[t]),o(()=>{var n;void 0!==l&&(null==g||null==(n=g.current)||n.setVolume({volume:l}))},[l]),o(()=>()=>{var n;null==(n=g.current)||n.endSession()},[]),{startSession:async n=>{var e;if(null!=(e=g.current)&&e.isOpen())return g.current.getId();if(p.current)return(await p.current).getId();try{var o,r,t,l,s,h,S,M,D,f;const e=c((null==n?void 0:n.serverLocation)||u),I=d(e),E=v(e);return p.current=i.startSession(a({},null!=m?m:{},null!=n?n:{},{origin:I,livekitUrl:E,overrides:a({},null!=(o=null==m?void 0:m.overrides)?o:{},null!=(r=null==n?void 0:n.overrides)?r:{},{client:a({},null!=(t=null==m||null==(l=m.overrides)?void 0:l.client)?t:{},null!=(s=null==n||null==(h=n.overrides)?void 0:h.client)?s:{},{source:(null==n||null==(S=n.overrides)||null==(S=S.client)?void 0:S.source)||(null==m||null==(M=m.overrides)||null==(M=M.client)?void 0:M.source)||"react_sdk",version:(null==n||null==(D=n.overrides)||null==(D=D.client)?void 0:D.version)||(null==m||null==(f=m.overrides)||null==(f=f.client)?void 0:f.version)||"0.11.0"})}),onConnect:(null==n?void 0:n.onConnect)||(null==m?void 0:m.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==m?void 0:m.onDisconnect),onError:(null==n?void 0:n.onError)||(null==m?void 0:m.onError),onMessage:(null==n?void 0:n.onMessage)||(null==m?void 0:m.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==m?void 0:m.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==m?void 0:m.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==m?void 0:m.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==m?void 0:m.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==m?void 0:m.onInterruption),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==m?void 0:m.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==m?void 0:m.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==m?void 0:m.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==m?void 0:m.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==m?void 0:m.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==m?void 0:m.onAgentChatResponsePart),onModeChange:({mode:e})=>{var o;b(e),null==(o=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||o({mode:e})},onStatusChange:({status:e})=>{var o;C(e),null==(o=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||o({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var o;T(e),null==(o=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||o({canSendFeedback:e})}})),g.current=await p.current,void 0!==w.current&&g.current.setMicMuted(w.current),void 0!==y.current&&g.current.setVolume({volume:y.current}),g.current.getId()}finally{p.current=null}},endSession:async()=>{const n=g.current;g.current=null,await(null==n?void 0:n.endSession())},setVolume:({volume:n})=>{var e;null==(e=g.current)||e.setVolume({volume:n})},getInputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:n=>{var e;null==(e=g.current)||e.sendFeedback(n)},getId:()=>{var n;return null==(n=g.current)?void 0:n.getId()},sendContextualUpdate:n=>{var e;null==(e=g.current)||e.sendContextualUpdate(n)},sendUserMessage:n=>{var e;null==(e=g.current)||e.sendUserMessage(n)},sendUserActivity:()=>{var n;null==(n=g.current)||n.sendUserActivity()},sendMCPToolApprovalResult:(n,e)=>{var o;null==(o=g.current)||o.sendMCPToolApprovalResult(n,e)},changeInputDevice:async n=>{if(g.current&&"changeInputDevice"in g.current)return await g.current.changeInputDevice(n);throw new Error("Device switching is only available for voice conversations")},changeOutputDevice:async n=>{if(g.current&&"changeOutputDevice"in g.current)return await g.current.changeOutputDevice(n);throw new Error("Device switching is only available for voice conversations")},status:h,canSendFeedback:S,micMuted:t,isSpeaking:"speaking"===M}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,c as parseLocation,m as useConversation,u as useScribe};
2
2
  //# sourceMappingURL=lib.modern.js.map