@elevenlabs/react 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +11 -11
- package/.turbo/turbo-generate-version.log +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/lib.cjs +1 -1
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.modern.js +1 -1
- package/dist/lib.modern.js.map +1 -1
- package/dist/lib.module.js +1 -1
- package/dist/lib.module.js.map +1 -1
- package/dist/lib.umd.js +1 -1
- package/dist/lib.umd.js.map +1 -1
- package/dist/scribe.d.ts +14 -4
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.12.
|
|
2
|
+
> @elevenlabs/react@0.12.1 prebuild /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> npm run generate-version
|
|
4
4
|
|
|
5
5
|
npm warn Unknown env config "shared-workspace-lockfile". This will stop working in the next major version of npm.
|
|
@@ -9,20 +9,20 @@ npm warn Unknown env config "node-version". This will stop working in the next m
|
|
|
9
9
|
npm warn Unknown env config "link-workspace-packages". This will stop working in the next major version of npm.
|
|
10
10
|
npm warn Unknown env config "_jsr-registry". This will stop working in the next major version of npm.
|
|
11
11
|
|
|
12
|
-
> @elevenlabs/react@0.12.
|
|
12
|
+
> @elevenlabs/react@0.12.1 generate-version
|
|
13
13
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
> @elevenlabs/react@0.12.
|
|
16
|
+
> @elevenlabs/react@0.12.1 build /home/runner/work/packages/packages/packages/react
|
|
17
17
|
> BROWSERSLIST_ENV=modern microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react src/index.ts
|
|
18
18
|
|
|
19
19
|
No name was provided for external module '@elevenlabs/client' in output.globals – guessing 'client'
|
|
20
20
|
Build "@elevenlabs/react" to dist:
|
|
21
|
-
3.
|
|
22
|
-
3.
|
|
23
|
-
3.
|
|
24
|
-
2.
|
|
25
|
-
|
|
26
|
-
3.
|
|
27
|
-
3.
|
|
28
|
-
3.
|
|
21
|
+
3.65 kB: lib.cjs.gz
|
|
22
|
+
3.19 kB: lib.cjs.br
|
|
23
|
+
3.33 kB: lib.modern.js.gz
|
|
24
|
+
2.88 kB: lib.modern.js.br
|
|
25
|
+
3.6 kB: lib.module.js.gz
|
|
26
|
+
3.17 kB: lib.module.js.br
|
|
27
|
+
3.71 kB: lib.umd.js.gz
|
|
28
|
+
3.23 kB: lib.umd.js.br
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.12.
|
|
2
|
+
> @elevenlabs/react@0.12.1 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/dist/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export declare function getLivekitUrlForLocation(location: Location): string;
|
|
|
15
15
|
export type { Role, Mode, Status, SessionConfig, DisconnectionDetails, Language, VadScoreEvent, InputConfig, FormatConfig, VoiceConversation, TextConversation, Callbacks, } from "@elevenlabs/client";
|
|
16
16
|
export { postOverallFeedback } from "@elevenlabs/client";
|
|
17
17
|
export { useScribe, AudioFormat, CommitStrategy, RealtimeEvents, } from "./scribe";
|
|
18
|
-
export type { ScribeStatus, TranscriptSegment, ScribeCallbacks, ScribeHookOptions, UseScribeReturn, RealtimeConnection, } from "./scribe";
|
|
18
|
+
export type { ScribeStatus, TranscriptSegment, WordTimestamp, ScribeCallbacks, ScribeHookOptions, UseScribeReturn, RealtimeConnection, } from "./scribe";
|
|
19
19
|
export type HookOptions = Partial<SessionConfig & HookCallbacks & ClientToolsConfig & InputConfig & OutputConfig & AudioWorkletConfig & FormatConfig & {
|
|
20
20
|
serverLocation?: Location | string;
|
|
21
21
|
}>;
|
package/dist/lib.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react"),n=require("@elevenlabs/client");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},r.apply(null,arguments)}var t=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function l(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=l,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(u){void 0===u&&(u={});var a=u.micMuted,c=u.volume,s=u.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(u,t),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),E=f[0],h=f[1],g=e.useState(!1),p=g[0],C=g[1],S=e.useState("listening"),T=S[0],R=S[1],b=e.useRef(a),M=e.useRef(c);return b.current=a,M.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var t,u,a=function(t){return u?t:function(t,u){try{var a=(P=i(A=o((null==e?void 0:e.serverLocation)||s)),O=l(A),m.current=n.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:P,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||O,overrides:r({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:r({},null!=(E=null==d||null==(g=d.overrides)?void 0:g.client)?E:{},null!=(p=null==e||null==(S=e.overrides)?void 0:S.client)?p:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(I=d.overrides)||null==(I=I.client)?void 0:I.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(y=d.overrides)||null==(y=y.client)?void 0:y.version)||"0.12.0"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var r,t=n.mode;R(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;h(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==b.current&&v.current.setMicMuted(b.current),void 0!==M.current&&v.current.setVolume({volume:M.current}),v.current.getId()}))}catch(e){return u(!0,e)}var c,f,E,g,p,S,T,I,D,y,A,P,O;return a&&a.then?a.then(u.bind(null,!1),u.bind(null,!0)):u(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(t=v.current)&&t.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return u=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:E,canSendFeedback:p,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(t){void 0===t&&(t={});var o=t.onSessionStarted,i=t.onPartialTranscript,l=t.onCommittedTranscript,u=t.onCommittedTranscriptWithTimestamps,a=t.onError,c=t.onAuthError,s=t.onQuotaExceededError,d=t.onCommitThrottledError,v=t.onTranscriberError,m=t.onUnacceptedTermsError,f=t.onRateLimitedError,E=t.onInputError,h=t.onQueueOverflowError,g=t.onResourceExhaustedError,p=t.onSessionTimeLimitExceededError,C=t.onChunkSizeExceededError,S=t.onInsufficientAudioActivityError,T=t.onConnect,R=t.onDisconnect,b=t.token,M=t.modelId,I=t.baseUri,D=t.commitStrategy,y=t.vadSilenceThresholdSecs,A=t.vadThreshold,P=t.minSpeechDurationMs,O=t.minSilenceDurationMs,w=t.languageCode,k=t.microphone,U=t.audioFormat,F=t.sampleRate,_=t.autoConnect,x=void 0!==_&&_,L=e.useRef(null),N=e.useState("disconnected"),V=N[0],j=N[1],q=e.useState(""),B=q[0],H=q[1],Q=e.useState([]),W=Q[0],X=Q[1],z=e.useState(null),K=z[0],Y=z[1];e.useEffect(function(){return function(){var e;null==(e=L.current)||e.close()}},[]);var Z=e.useCallback(function(e){void 0===e&&(e={});try{if(L.current)return console.warn("Already connected"),Promise.resolve();try{j("connecting"),Y(null);var r=e.token||b,t=e.modelId||M;if(!r)throw new Error("Token is required");if(!t)throw new Error("Model ID is required");var _,x=e.microphone||k,N=e.audioFormat||U,V=e.sampleRate||F,q=!(!e.onCommittedTranscriptWithTimestamps&&!u);if(x)_=n.Scribe.connect({token:r,modelId:t,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||O,languageCode:e.languageCode||w,microphone:x,includeTimestamps:q});else{if(!N||!V)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");_=n.Scribe.connect({token:r,modelId:t,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||O,languageCode:e.languageCode||w,includeTimestamps:q,audioFormat:N,sampleRate:V})}L.current=_,_.on(n.RealtimeEvents.SESSION_STARTED,function(){j("connected"),null==o||o()}),_.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;H(n.text),j("transcribing"),null==i||i(n)}),_.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};X(function(e){return[].concat(e,[r])}),H(""),null==l||l(n)}),_.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};X(function(e){return[].concat(e,[r])}),H(""),null==u||u(n)}),_.on(n.RealtimeEvents.ERROR,function(e){var n=e;Y(n.error),j("error"),null==a||a(new Error(n.error))}),_.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Y(n.error),j("error"),null==c||c(n)}),_.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==s||s(n)}),_.on(n.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Y(n.error),j("error"),null==d||d(n)}),_.on(n.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Y(n.error),j("error"),null==v||v(n)}),_.on(n.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Y(n.error),j("error"),null==m||m(n)}),_.on(n.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Y(n.error),j("error"),null==f||f(n)}),_.on(n.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Y(n.error),j("error"),null==E||E(n)}),_.on(n.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Y(n.error),j("error"),null==h||h(n)}),_.on(n.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Y(n.error),j("error"),null==g||g(n)}),_.on(n.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==p||p(n)}),_.on(n.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==C||C(n)}),_.on(n.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Y(n.error),j("error"),null==S||S(n)}),_.on(n.RealtimeEvents.OPEN,function(){null==T||T()}),_.on(n.RealtimeEvents.CLOSE,function(){j("disconnected"),L.current=null,null==R||R()})}catch(e){var B=e instanceof Error?e.message:"Failed to connect";throw Y(B),j("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,D,y,A,P,O,w,k,U,F,o,i,l,u,a,c,s,d,v,m,f,E,h,g,p,C,S,T,R]),G=e.useCallback(function(){var e;null==(e=L.current)||e.close(),L.current=null,j("disconnected")},[]),J=e.useCallback(function(e,n){if(!L.current)throw new Error("Not connected to Scribe");L.current.send(r({audioBase64:e},n))},[]),$=e.useCallback(function(){if(!L.current)throw new Error("Not connected to Scribe");L.current.commit()},[]),ee=e.useCallback(function(){X([]),H("")},[]),ne=e.useCallback(function(){return L.current},[]);return e.useEffect(function(){x&&Z()},[x,Z]),{status:V,isConnected:"connected"===V||"transcribing"===V,isTranscribing:"transcribing"===V,partialTranscript:B,committedTranscripts:W,error:K,connect:Z,disconnect:G,sendAudio:J,commit:$,clearTranscripts:ee,getConnection:ne}};
|
|
1
|
+
var e=require("react"),n=require("@elevenlabs/client");function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},r.apply(null,arguments)}var t=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function l(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=l,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(u){void 0===u&&(u={});var a=u.micMuted,c=u.volume,s=u.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(u,t),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),E=f[0],h=f[1],g=e.useState(!1),p=g[0],C=g[1],S=e.useState("listening"),T=S[0],R=S[1],b=e.useRef(a),M=e.useRef(c);return b.current=a,M.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var t,u,a=function(t){return u?t:function(t,u){try{var a=(P=i(A=o((null==e?void 0:e.serverLocation)||s)),w=l(A),m.current=n.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:P,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||w,overrides:r({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:r({},null!=(E=null==d||null==(g=d.overrides)?void 0:g.client)?E:{},null!=(p=null==e||null==(S=e.overrides)?void 0:S.client)?p:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(I=d.overrides)||null==(I=I.client)?void 0:I.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(y=d.overrides)||null==(y=y.client)?void 0:y.version)||"0.12.1"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var r,t=n.mode;R(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;h(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==b.current&&v.current.setMicMuted(b.current),void 0!==M.current&&v.current.setVolume({volume:M.current}),v.current.getId()}))}catch(e){return u(!0,e)}var c,f,E,g,p,S,T,I,D,y,A,P,w;return a&&a.then?a.then(u.bind(null,!1),u.bind(null,!0)):u(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(t=v.current)&&t.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return u=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:E,canSendFeedback:p,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(t){void 0===t&&(t={});var o=t.onSessionStarted,i=t.onPartialTranscript,l=t.onCommittedTranscript,u=t.onCommittedTranscriptWithTimestamps,a=t.onError,c=t.onAuthError,s=t.onQuotaExceededError,d=t.onCommitThrottledError,v=t.onTranscriberError,m=t.onUnacceptedTermsError,f=t.onRateLimitedError,E=t.onInputError,h=t.onQueueOverflowError,g=t.onResourceExhaustedError,p=t.onSessionTimeLimitExceededError,C=t.onChunkSizeExceededError,S=t.onInsufficientAudioActivityError,T=t.onConnect,R=t.onDisconnect,b=t.token,M=t.modelId,I=t.baseUri,D=t.commitStrategy,y=t.vadSilenceThresholdSecs,A=t.vadThreshold,P=t.minSpeechDurationMs,w=t.minSilenceDurationMs,O=t.languageCode,k=t.microphone,U=t.audioFormat,F=t.sampleRate,_=t.autoConnect,x=void 0!==_&&_,L=t.includeTimestamps,N=e.useRef(null),V=e.useState("disconnected"),j=V[0],q=V[1],B=e.useState(""),H=B[0],Q=B[1],W=e.useState([]),X=W[0],z=W[1],K=e.useState(null),Y=K[0],Z=K[1];e.useEffect(function(){return function(){var e;null==(e=N.current)||e.close()}},[]);var G=e.useCallback(function(e){void 0===e&&(e={});try{if(N.current)return console.warn("Already connected"),Promise.resolve();try{var r,t;q("connecting"),Z(null);var _=e.token||b,x=e.modelId||M;if(!_)throw new Error("Token is required");if(!x)throw new Error("Model ID is required");var V,j=e.microphone||k,B=e.audioFormat||U,H=e.sampleRate||F,W=null!=(r=null!=(t=e.includeTimestamps)?t:L)?r:!(!e.onCommittedTranscriptWithTimestamps&&!u);if(j)V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,microphone:j,includeTimestamps:W});else{if(!B||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");V=n.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||D,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||y,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,includeTimestamps:W,audioFormat:B,sampleRate:H})}N.current=V,V.on(n.RealtimeEvents.SESSION_STARTED,function(){q("connected"),null==o||o()}),V.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;Q(n.text),q("transcribing"),null==i||i(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};z(function(e){return[].concat(e,[r])}),Q(""),null==l||l(n)}),V.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0,words:n.words};z(function(e){return[].concat(e,[r])}),Q(""),null==u||u(n)}),V.on(n.RealtimeEvents.ERROR,function(e){var n=e;Z(n.error),q("error"),null==a||a(new Error(n.error))}),V.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Z(n.error),q("error"),null==c||c(n)}),V.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==s||s(n)}),V.on(n.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Z(n.error),q("error"),null==d||d(n)}),V.on(n.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Z(n.error),q("error"),null==v||v(n)}),V.on(n.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Z(n.error),q("error"),null==m||m(n)}),V.on(n.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Z(n.error),q("error"),null==f||f(n)}),V.on(n.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Z(n.error),q("error"),null==E||E(n)}),V.on(n.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Z(n.error),q("error"),null==h||h(n)}),V.on(n.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Z(n.error),q("error"),null==g||g(n)}),V.on(n.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==p||p(n)}),V.on(n.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==C||C(n)}),V.on(n.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Z(n.error),q("error"),null==S||S(n)}),V.on(n.RealtimeEvents.OPEN,function(){null==T||T()}),V.on(n.RealtimeEvents.CLOSE,function(){q("disconnected"),N.current=null,null==R||R()})}catch(e){var X=e instanceof Error?e.message:"Failed to connect";throw Z(X),q("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,D,y,A,P,w,O,k,U,F,L,o,i,l,u,a,c,s,d,v,m,f,E,h,g,p,C,S,T,R]),J=e.useCallback(function(){var e;null==(e=N.current)||e.close(),N.current=null,q("disconnected")},[]),$=e.useCallback(function(e,n){if(!N.current)throw new Error("Not connected to Scribe");N.current.send(r({audioBase64:e},n))},[]),ee=e.useCallback(function(){if(!N.current)throw new Error("Not connected to Scribe");N.current.commit()},[]),ne=e.useCallback(function(){z([]),Q("")},[]),re=e.useCallback(function(){return N.current},[]);return e.useEffect(function(){x&&G()},[x,G]),{status:j,isConnected:"connected"===j||"transcribing"===j,isTranscribing:"transcribing"===j,partialTranscript:H,committedTranscripts:X,error:Y,connect:G,disconnect:J,sendAudio:$,commit:ee,clearTranscripts:ne,getConnection:re}};
|
|
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 | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.0\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface 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 /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = 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.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","_extends","livekitUrl","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_exit2","_temp4","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_exit3","_temp6","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","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","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.1\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","_extends","livekitUrl","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_exit2","_temp4","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_exit3","_temp6","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","defaultIncludeTimestamps","includeTimestamps","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","_runtimeOptions$inclu","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","words","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
package/dist/lib.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as n,useState as e,useEffect as r,useCallback as o}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var o in r)({}).hasOwnProperty.call(r,o)&&(n[o]=r[o])}return n},u.apply(null,arguments)}function a(i={}){const{onSessionStarted:a,onPartialTranscript:s,onCommittedTranscript:c,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onQuotaExceededError:g,onCommitThrottledError:p,onTranscriberError:C,onUnacceptedTermsError:T,onRateLimitedError:h,onInputError:E,onQueueOverflowError:S,onResourceExhaustedError:M,onSessionTimeLimitExceededError:I,onChunkSizeExceededError:D,onInsufficientAudioActivityError:R,onConnect:b,onDisconnect:w,token:y,modelId:A,baseUri:f,commitStrategy:O,vadSilenceThresholdSecs:U,vadThreshold:k,minSpeechDurationMs:F,minSilenceDurationMs:_,languageCode:P,microphone:x,audioFormat:N,sampleRate:V,autoConnect:L=!1}=i,q=n(null),[B,H]=e("disconnected"),[$,Q]=e(""),[W,X]=e([]),[j,z]=e(null);r(()=>()=>{var n;null==(n=q.current)||n.close()},[]);const K=o(async(n={})=>{if(q.current)console.warn("Already connected");else try{H("connecting"),z(null);const e=n.token||y,r=n.modelId||A;if(!e)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");const o=n.microphone||x,i=n.audioFormat||N,u=n.sampleRate||V;let L;const B=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(o)L=t.connect({token:e,modelId:r,baseUri:n.baseUri||f,commitStrategy:n.commitStrategy||O,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||U,vadThreshold:n.vadThreshold||k,minSpeechDurationMs:n.minSpeechDurationMs||F,minSilenceDurationMs:n.minSilenceDurationMs||_,languageCode:n.languageCode||P,microphone:o,includeTimestamps:B});else{if(!i||!u)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");L=t.connect({token:e,modelId:r,baseUri:n.baseUri||f,commitStrategy:n.commitStrategy||O,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||U,vadThreshold:n.vadThreshold||k,minSpeechDurationMs:n.minSpeechDurationMs||F,minSilenceDurationMs:n.minSilenceDurationMs||_,languageCode:n.languageCode||P,includeTimestamps:B,audioFormat:i,sampleRate:u})}q.current=L,L.on(l.SESSION_STARTED,()=>{H("connected"),null==a||a()}),L.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;Q(e.text),H("transcribing"),null==s||s(e)}),L.on(l.COMMITTED_TRANSCRIPT,n=>{const e=n,r={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};X(n=>[...n,r]),Q(""),null==c||c(e)}),L.on(l.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,r={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};X(n=>[...n,r]),Q(""),null==d||d(e)}),L.on(l.ERROR,n=>{const e=n;z(e.error),H("error"),null==v||v(new Error(e.error))}),L.on(l.AUTH_ERROR,n=>{const e=n;z(e.error),H("error"),null==m||m(e)}),L.on(l.QUOTA_EXCEEDED,n=>{const e=n;z(e.error),H("error"),null==g||g(e)}),L.on(l.COMMIT_THROTTLED,n=>{const e=n;z(e.error),H("error"),null==p||p(e)}),L.on(l.TRANSCRIBER_ERROR,n=>{const e=n;z(e.error),H("error"),null==C||C(e)}),L.on(l.UNACCEPTED_TERMS,n=>{const e=n;z(e.error),H("error"),null==T||T(e)}),L.on(l.RATE_LIMITED,n=>{const e=n;z(e.error),H("error"),null==h||h(e)}),L.on(l.INPUT_ERROR,n=>{const e=n;z(e.error),H("error"),null==E||E(e)}),L.on(l.QUEUE_OVERFLOW,n=>{const e=n;z(e.error),H("error"),null==S||S(e)}),L.on(l.RESOURCE_EXHAUSTED,n=>{const e=n;z(e.error),H("error"),null==M||M(e)}),L.on(l.SESSION_TIME_LIMIT_EXCEEDED,n=>{const e=n;z(e.error),H("error"),null==I||I(e)}),L.on(l.CHUNK_SIZE_EXCEEDED,n=>{const e=n;z(e.error),H("error"),null==D||D(e)}),L.on(l.INSUFFICIENT_AUDIO_ACTIVITY,n=>{const e=n;z(e.error),H("error"),null==R||R(e)}),L.on(l.OPEN,()=>{null==b||b()}),L.on(l.CLOSE,()=>{H("disconnected"),q.current=null,null==w||w()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw z(e),H("error"),n}},[y,A,f,O,U,k,F,_,P,x,N,V,a,s,c,d,v,m,g,p,C,T,h,E,S,M,I,D,R,b,w]),Y=o(()=>{var n;null==(n=q.current)||n.close(),q.current=null,H("disconnected")},[]),Z=o((n,e)=>{if(!q.current)throw new Error("Not connected to Scribe");q.current.send(u({audioBase64:n},e))},[]),G=o(()=>{if(!q.current)throw new Error("Not connected to Scribe");q.current.commit()},[]),J=o(()=>{X([]),Q("")},[]),nn=o(()=>q.current,[]);return r(()=>{L&&K()},[L,K]),{status:B,isConnected:"connected"===B||"transcribing"===B,isTranscribing:"transcribing"===B,partialTranscript:$,committedTranscripts:W,error:j,connect:K,disconnect:Y,sendAudio:Z,commit:G,clearTranscripts:J,getConnection:nn}}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(o={}){const{micMuted:t,volume:l,serverLocation:a}=o,m=function(n,e){if(null==n)return{};var r={};for(var o in n)if({}.hasOwnProperty.call(n,o)){if(-1!==e.indexOf(o))continue;r[o]=n[o]}return r}(o,s),g=n(null),p=n(null),[C,T]=e("disconnected"),[h,E]=e(!1),[S,M]=e("listening"),I=n(t),D=n(l);return I.current=t,D.current=l,r(()=>{var n;void 0!==t&&(null==g||null==(n=g.current)||n.setMicMuted(t))},[t]),r(()=>{var n;void 0!==l&&(null==g||null==(n=g.current)||n.setVolume({volume:l}))},[l]),r(()=>()=>{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 r,o,t,l,s,C,h,S,R,b;const e=c((null==n?void 0:n.serverLocation)||a),w=d(e),y=v(e);return p.current=i.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:w,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||y,overrides:u({},null!=(r=null==m?void 0:m.overrides)?r:{},null!=(o=null==n?void 0:n.overrides)?o:{},{client:u({},null!=(t=null==m||null==(l=m.overrides)?void 0:l.client)?t:{},null!=(s=null==n||null==(C=n.overrides)?void 0:C.client)?s:{},{source:(null==n||null==(h=n.overrides)||null==(h=h.client)?void 0:h.source)||(null==m||null==(S=m.overrides)||null==(S=S.client)?void 0:S.source)||"react_sdk",version:(null==n||null==(R=n.overrides)||null==(R=R.client)?void 0:R.version)||(null==m||null==(b=m.overrides)||null==(b=b.client)?void 0:b.version)||"0.12.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),onAgentToolRequest:(null==n?void 0:n.onAgentToolRequest)||(null==m?void 0:m.onAgentToolRequest),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 r;M(e),null==(r=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||r({mode:e})},onStatusChange:({status:e})=>{var r;T(e),null==(r=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||r({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var r;E(e),null==(r=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||r({canSendFeedback:e})}})),g.current=await p.current,void 0!==I.current&&g.current.setMicMuted(I.current),void 0!==D.current&&g.current.setVolume({volume:D.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 r;null==(r=g.current)||r.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:C,canSendFeedback:h,micMuted:t,isSpeaking:"speaking"===S}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,c as parseLocation,m as useConversation,a as useScribe};
|
|
1
|
+
import{useRef as n,useState as e,useEffect as r,useCallback as o}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var o in r)({}).hasOwnProperty.call(r,o)&&(n[o]=r[o])}return n},u.apply(null,arguments)}function a(i={}){const{onSessionStarted:a,onPartialTranscript:s,onCommittedTranscript:c,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onQuotaExceededError:g,onCommitThrottledError:p,onTranscriberError:T,onUnacceptedTermsError:C,onRateLimitedError:h,onInputError:E,onQueueOverflowError:S,onResourceExhaustedError:M,onSessionTimeLimitExceededError:I,onChunkSizeExceededError:D,onInsufficientAudioActivityError:R,onConnect:b,onDisconnect:w,token:y,modelId:A,baseUri:f,commitStrategy:O,vadSilenceThresholdSecs:U,vadThreshold:k,minSpeechDurationMs:F,minSilenceDurationMs:_,languageCode:P,microphone:x,audioFormat:N,sampleRate:V,autoConnect:L=!1,includeTimestamps:q}=i,B=n(null),[H,$]=e("disconnected"),[Q,W]=e(""),[X,j]=e([]),[z,K]=e(null);r(()=>()=>{var n;null==(n=B.current)||n.close()},[]);const Y=o(async(n={})=>{if(B.current)console.warn("Already connected");else try{var e,r;$("connecting"),K(null);const o=n.token||y,i=n.modelId||A;if(!o)throw new Error("Token is required");if(!i)throw new Error("Model ID is required");const u=n.microphone||x,L=n.audioFormat||N,H=n.sampleRate||V;let Q;const X=null!=(e=null!=(r=n.includeTimestamps)?r:q)?e:!(!n.onCommittedTranscriptWithTimestamps&&!d);if(u)Q=t.connect({token:o,modelId:i,baseUri:n.baseUri||f,commitStrategy:n.commitStrategy||O,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||U,vadThreshold:n.vadThreshold||k,minSpeechDurationMs:n.minSpeechDurationMs||F,minSilenceDurationMs:n.minSilenceDurationMs||_,languageCode:n.languageCode||P,microphone:u,includeTimestamps:X});else{if(!L||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");Q=t.connect({token:o,modelId:i,baseUri:n.baseUri||f,commitStrategy:n.commitStrategy||O,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||U,vadThreshold:n.vadThreshold||k,minSpeechDurationMs:n.minSpeechDurationMs||F,minSilenceDurationMs:n.minSilenceDurationMs||_,languageCode:n.languageCode||P,includeTimestamps:X,audioFormat:L,sampleRate:H})}B.current=Q,Q.on(l.SESSION_STARTED,()=>{$("connected"),null==a||a()}),Q.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;W(e.text),$("transcribing"),null==s||s(e)}),Q.on(l.COMMITTED_TRANSCRIPT,n=>{const e=n,r={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};j(n=>[...n,r]),W(""),null==c||c(e)}),Q.on(l.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,r={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0,words:e.words};j(n=>[...n,r]),W(""),null==d||d(e)}),Q.on(l.ERROR,n=>{const e=n;K(e.error),$("error"),null==v||v(new Error(e.error))}),Q.on(l.AUTH_ERROR,n=>{const e=n;K(e.error),$("error"),null==m||m(e)}),Q.on(l.QUOTA_EXCEEDED,n=>{const e=n;K(e.error),$("error"),null==g||g(e)}),Q.on(l.COMMIT_THROTTLED,n=>{const e=n;K(e.error),$("error"),null==p||p(e)}),Q.on(l.TRANSCRIBER_ERROR,n=>{const e=n;K(e.error),$("error"),null==T||T(e)}),Q.on(l.UNACCEPTED_TERMS,n=>{const e=n;K(e.error),$("error"),null==C||C(e)}),Q.on(l.RATE_LIMITED,n=>{const e=n;K(e.error),$("error"),null==h||h(e)}),Q.on(l.INPUT_ERROR,n=>{const e=n;K(e.error),$("error"),null==E||E(e)}),Q.on(l.QUEUE_OVERFLOW,n=>{const e=n;K(e.error),$("error"),null==S||S(e)}),Q.on(l.RESOURCE_EXHAUSTED,n=>{const e=n;K(e.error),$("error"),null==M||M(e)}),Q.on(l.SESSION_TIME_LIMIT_EXCEEDED,n=>{const e=n;K(e.error),$("error"),null==I||I(e)}),Q.on(l.CHUNK_SIZE_EXCEEDED,n=>{const e=n;K(e.error),$("error"),null==D||D(e)}),Q.on(l.INSUFFICIENT_AUDIO_ACTIVITY,n=>{const e=n;K(e.error),$("error"),null==R||R(e)}),Q.on(l.OPEN,()=>{null==b||b()}),Q.on(l.CLOSE,()=>{$("disconnected"),B.current=null,null==w||w()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw K(e),$("error"),n}},[y,A,f,O,U,k,F,_,P,x,N,V,q,a,s,c,d,v,m,g,p,T,C,h,E,S,M,I,D,R,b,w]),Z=o(()=>{var n;null==(n=B.current)||n.close(),B.current=null,$("disconnected")},[]),G=o((n,e)=>{if(!B.current)throw new Error("Not connected to Scribe");B.current.send(u({audioBase64:n},e))},[]),J=o(()=>{if(!B.current)throw new Error("Not connected to Scribe");B.current.commit()},[]),nn=o(()=>{j([]),W("")},[]),en=o(()=>B.current,[]);return r(()=>{L&&Y()},[L,Y]),{status:H,isConnected:"connected"===H||"transcribing"===H,isTranscribing:"transcribing"===H,partialTranscript:Q,committedTranscripts:X,error:z,connect:Y,disconnect:Z,sendAudio:G,commit:J,clearTranscripts:nn,getConnection:en}}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(o={}){const{micMuted:t,volume:l,serverLocation:a}=o,m=function(n,e){if(null==n)return{};var r={};for(var o in n)if({}.hasOwnProperty.call(n,o)){if(-1!==e.indexOf(o))continue;r[o]=n[o]}return r}(o,s),g=n(null),p=n(null),[T,C]=e("disconnected"),[h,E]=e(!1),[S,M]=e("listening"),I=n(t),D=n(l);return I.current=t,D.current=l,r(()=>{var n;void 0!==t&&(null==g||null==(n=g.current)||n.setMicMuted(t))},[t]),r(()=>{var n;void 0!==l&&(null==g||null==(n=g.current)||n.setVolume({volume:l}))},[l]),r(()=>()=>{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 r,o,t,l,s,T,h,S,R,b;const e=c((null==n?void 0:n.serverLocation)||a),w=d(e),y=v(e);return p.current=i.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:w,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||y,overrides:u({},null!=(r=null==m?void 0:m.overrides)?r:{},null!=(o=null==n?void 0:n.overrides)?o:{},{client:u({},null!=(t=null==m||null==(l=m.overrides)?void 0:l.client)?t:{},null!=(s=null==n||null==(T=n.overrides)?void 0:T.client)?s:{},{source:(null==n||null==(h=n.overrides)||null==(h=h.client)?void 0:h.source)||(null==m||null==(S=m.overrides)||null==(S=S.client)?void 0:S.source)||"react_sdk",version:(null==n||null==(R=n.overrides)||null==(R=R.client)?void 0:R.version)||(null==m||null==(b=m.overrides)||null==(b=b.client)?void 0:b.version)||"0.12.1"})}),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),onAgentToolRequest:(null==n?void 0:n.onAgentToolRequest)||(null==m?void 0:m.onAgentToolRequest),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 r;M(e),null==(r=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||r({mode:e})},onStatusChange:({status:e})=>{var r;C(e),null==(r=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||r({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var r;E(e),null==(r=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||r({canSendFeedback:e})}})),g.current=await p.current,void 0!==I.current&&g.current.setMicMuted(I.current),void 0!==D.current&&g.current.setVolume({volume:D.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 r;null==(r=g.current)||r.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:T,canSendFeedback:h,micMuted:t,isSpeaking:"speaking"===S}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,c as parseLocation,m as useConversation,a as useScribe};
|
|
2
2
|
//# sourceMappingURL=lib.modern.js.map
|