@elevenlabs/react 0.11.2 → 0.11.3
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 +10 -10
- package/.turbo/turbo-generate-version.log +1 -1
- package/README.md +1 -0
- 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/version.d.ts +1 -1
- package/package.json +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.11.
|
|
2
|
+
> @elevenlabs/react@0.11.3 prebuild /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> npm run generate-version
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @elevenlabs/react@0.11.
|
|
6
|
+
> @elevenlabs/react@0.11.3 generate-version
|
|
7
7
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @elevenlabs/react@0.11.
|
|
10
|
+
> @elevenlabs/react@0.11.3 build /home/runner/work/packages/packages/packages/react
|
|
11
11
|
> BROWSERSLIST_ENV=modern microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react src/index.ts
|
|
12
12
|
|
|
13
13
|
No name was provided for external module '@elevenlabs/client' in output.globals – guessing 'client'
|
|
14
14
|
Build "@elevenlabs/react" to dist:
|
|
15
|
-
3.
|
|
16
|
-
|
|
17
|
-
2.
|
|
15
|
+
3.28 kB: lib.cjs.gz
|
|
16
|
+
2.9 kB: lib.cjs.br
|
|
17
|
+
2.96 kB: lib.modern.js.gz
|
|
18
18
|
2.59 kB: lib.modern.js.br
|
|
19
|
-
3.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
22
|
-
2.
|
|
19
|
+
3.24 kB: lib.module.js.gz
|
|
20
|
+
2.86 kB: lib.module.js.br
|
|
21
|
+
3.34 kB: lib.umd.js.gz
|
|
22
|
+
2.93 kB: lib.umd.js.br
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.11.
|
|
2
|
+
> @elevenlabs/react@0.11.3 generate-version /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
4
4
|
|
package/README.md
CHANGED
|
@@ -76,6 +76,7 @@ const conversation = useConversation({
|
|
|
76
76
|
- **onVadScore** - handler called with voice activity detection scores, indicating the likelihood of speech in the audio input.
|
|
77
77
|
- **onMCPToolCall** - handler called when an MCP (Model Context Protocol) tool is invoked by the agent.
|
|
78
78
|
- **onMCPConnectionStatus** - handler called when the MCP connection status changes, useful for monitoring MCP server connectivity.
|
|
79
|
+
- **onAgentToolRequest** - handler called when the agent begins tool execution.
|
|
79
80
|
- **onAgentToolResponse** - handler called when the agent receives a response from a tool execution.
|
|
80
81
|
- **onConversationMetadata** - handler called with conversation initiation metadata, providing information about the conversation setup.
|
|
81
82
|
- **onAsrInitiationMetadata** - handler called with ASR (Automatic Speech Recognition) initiation metadata, containing configuration details for speech recognition.
|
package/dist/index.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export type ControlledState = {
|
|
|
23
23
|
micMuted?: boolean;
|
|
24
24
|
volume?: number;
|
|
25
25
|
};
|
|
26
|
-
export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart">;
|
|
26
|
+
export type HookCallbacks = Pick<Callbacks, "onConnect" | "onDisconnect" | "onError" | "onMessage" | "onAudio" | "onModeChange" | "onStatusChange" | "onCanSendFeedbackChange" | "onDebug" | "onUnhandledClientToolCall" | "onVadScore" | "onInterruption" | "onAgentToolResponse" | "onAgentToolRequest" | "onConversationMetadata" | "onMCPToolCall" | "onMCPConnectionStatus" | "onAsrInitiationMetadata" | "onAgentChatResponsePart">;
|
|
27
27
|
export declare function useConversation<T extends HookOptions & ControlledState>(props?: T): {
|
|
28
28
|
startSession: T extends SessionConfig ? (options?: HookOptions) => Promise<string> : (options: SessionConfig & HookOptions) => Promise<string>;
|
|
29
29
|
endSession: () => Promise<void>;
|
package/dist/lib.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=u,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(l){void 0===l&&(l={});var a=l.micMuted,c=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(l,r),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),h=f[0],g=f[1],p=e.useState(!1),C=p[0],S=p[1],b=e.useState("listening"),T=b[0],M=b[1],E=e.useRef(a),y=e.useRef(c);return E.current=a,y.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var r,l,a=function(r){return l?r:function(r,l){try{var a=(I=i(w=o((null==e?void 0:e.serverLocation)||s)),k=u(w),m.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||k,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(C=null==e||null==(b=e.overrides)?void 0:b.client)?C:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(R=d.overrides)||null==(R=R.client)?void 0:R.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.11.2"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var t,r=n.mode;M(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;S(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==E.current&&v.current.setMicMuted(E.current),void 0!==y.current&&v.current.setVolume({volume:y.current}),v.current.getId()}))}catch(e){return l(!0,e)}var c,f,h,p,C,b,T,R,D,P,w,I,k;return a&&a.then?a.then(l.bind(null,!1),l.bind(null,!0)):l(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(r=v.current)&&r.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return l=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:C,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,u=r.onCommittedTranscript,l=r.onCommittedTranscriptWithTimestamps,a=r.onError,c=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.onQuotaExceededError,m=r.token,f=r.modelId,h=r.baseUri,g=r.commitStrategy,p=r.vadSilenceThresholdSecs,C=r.vadThreshold,S=r.minSpeechDurationMs,b=r.minSilenceDurationMs,T=r.languageCode,M=r.microphone,E=r.audioFormat,y=r.sampleRate,R=r.autoConnect,D=void 0!==R&&R,P=e.useRef(null),w=e.useState("disconnected"),I=w[0],k=w[1],A=e.useState(""),O=A[0],F=A[1],U=e.useState([]),x=U[0],j=U[1],V=e.useState(null),L=V[0],_=V[1];e.useEffect(function(){return function(){var e;null==(e=P.current)||e.close()}},[]);var q=e.useCallback(function(e){void 0===e&&(e={});try{if(P.current)return console.warn("Already connected"),Promise.resolve();try{k("connecting"),_(null);var t=e.token||m,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,D=e.microphone||M,w=e.audioFormat||E,I=e.sampleRate||y,A=!(!e.onCommittedTranscriptWithTimestamps&&!l);if(D)R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,microphone:D,includeTimestamps:A});else{if(!w||!I)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,includeTimestamps:A,audioFormat:w,sampleRate:I})}P.current=R,R.on(n.RealtimeEvents.SESSION_STARTED,function(){k("connected"),null==o||o()}),R.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),k("transcribing"),null==i||i(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(n.RealtimeEvents.ERROR,function(e){var n=e;_(n.error),k("error"),null==a||a(new Error(n.error))}),R.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;_(n.error),k("error"),null==c||c(n)}),R.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;_(n.error),k("error"),null==v||v(n)}),R.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(n.RealtimeEvents.CLOSE,function(){k("disconnected"),P.current=null,null==d||d()})}catch(e){var O=e instanceof Error?e.message:"Failed to connect";throw _(O),k("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[m,f,h,g,p,C,S,b,T,M,E,y,o,i,u,l,a,c,s,d,v]),N=e.useCallback(function(){var e;null==(e=P.current)||e.close(),P.current=null,k("disconnected")},[]),B=e.useCallback(function(e,n){if(!P.current)throw new Error("Not connected to Scribe");P.current.send(t({audioBase64:e},n))},[]),W=e.useCallback(function(){if(!P.current)throw new Error("Not connected to Scribe");P.current.commit()},[]),H=e.useCallback(function(){j([]),F("")},[]),Q=e.useCallback(function(){return P.current},[]);return e.useEffect(function(){D&&q()},[D,q]),{status:I,isConnected:"connected"===I||"transcribing"===I,isTranscribing:"transcribing"===I,partialTranscript:O,committedTranscripts:x,error:L,connect:q,disconnect:N,sendAudio:B,commit:W,clearTranscripts:H,getConnection:Q}};
|
|
1
|
+
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function 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 t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(u,r),v=e.useRef(null),m=e.useRef(null),f=e.useState("disconnected"),h=f[0],g=f[1],p=e.useState(!1),C=p[0],S=p[1],b=e.useState("listening"),T=b[0],M=b[1],E=e.useRef(a),R=e.useRef(c);return E.current=a,R.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var r,u,a=function(r){return u?r:function(r,u){try{var a=(A=i(w=o((null==e?void 0:e.serverLocation)||s)),I=l(w),m.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:A,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||I,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(f=null==e?void 0:e.overrides)?f:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(C=null==e||null==(b=e.overrides)?void 0:b.client)?C:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(y=d.overrides)||null==(y=y.client)?void 0:y.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.11.3"})}),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 t,r=n.mode;M(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;S(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==E.current&&v.current.setMicMuted(E.current),void 0!==R.current&&v.current.setVolume({volume:R.current}),v.current.getId()}))}catch(e){return u(!0,e)}var c,f,h,p,C,b,T,y,D,P,w,A,I;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!=(r=v.current)&&r.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(m.current)return Promise.resolve(m.current).then(function(e){var n=e.getId();return 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 t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:C,micMuted:a,isSpeaking:"speaking"===T}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,l=r.onCommittedTranscript,u=r.onCommittedTranscriptWithTimestamps,a=r.onError,c=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.onQuotaExceededError,m=r.token,f=r.modelId,h=r.baseUri,g=r.commitStrategy,p=r.vadSilenceThresholdSecs,C=r.vadThreshold,S=r.minSpeechDurationMs,b=r.minSilenceDurationMs,T=r.languageCode,M=r.microphone,E=r.audioFormat,R=r.sampleRate,y=r.autoConnect,D=void 0!==y&&y,P=e.useRef(null),w=e.useState("disconnected"),A=w[0],I=w[1],k=e.useState(""),O=k[0],F=k[1],U=e.useState([]),x=U[0],j=U[1],q=e.useState(null),V=q[0],L=q[1];e.useEffect(function(){return function(){var e;null==(e=P.current)||e.close()}},[]);var _=e.useCallback(function(e){void 0===e&&(e={});try{if(P.current)return console.warn("Already connected"),Promise.resolve();try{I("connecting"),L(null);var t=e.token||m,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var y,D=e.microphone||M,w=e.audioFormat||E,A=e.sampleRate||R,k=!(!e.onCommittedTranscriptWithTimestamps&&!u);if(D)y=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,microphone:D,includeTimestamps:k});else{if(!w||!A)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");y=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,includeTimestamps:k,audioFormat:w,sampleRate:A})}P.current=y,y.on(n.RealtimeEvents.SESSION_STARTED,function(){I("connected"),null==o||o()}),y.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),I("transcribing"),null==i||i(n)}),y.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),y.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};j(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),y.on(n.RealtimeEvents.ERROR,function(e){var n=e;L(n.error),I("error"),null==a||a(new Error(n.error))}),y.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;L(n.error),I("error"),null==c||c(n)}),y.on(n.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;L(n.error),I("error"),null==v||v(n)}),y.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),y.on(n.RealtimeEvents.CLOSE,function(){I("disconnected"),P.current=null,null==d||d()})}catch(e){var O=e instanceof Error?e.message:"Failed to connect";throw L(O),I("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[m,f,h,g,p,C,S,b,T,M,E,R,o,i,l,u,a,c,s,d,v]),N=e.useCallback(function(){var e;null==(e=P.current)||e.close(),P.current=null,I("disconnected")},[]),B=e.useCallback(function(e,n){if(!P.current)throw new Error("Not connected to Scribe");P.current.send(t({audioBase64:e},n))},[]),W=e.useCallback(function(){if(!P.current)throw new Error("Not connected to Scribe");P.current.commit()},[]),H=e.useCallback(function(){j([]),F("")},[]),Q=e.useCallback(function(){return P.current},[]);return e.useEffect(function(){D&&_()},[D,_]),{status:A,isConnected:"connected"===A||"transcribing"===A,isTranscribing:"transcribing"===A,partialTranscript:O,committedTranscripts:x,error:V,connect:_,disconnect:N,sendAudio:B,commit:W,clearTranscripts:H,getConnection:Q}};
|
|
2
2
|
//# sourceMappingURL=lib.cjs.map
|
package/dist/lib.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const 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 onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.11.2\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","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","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","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
|
1
|
+
{"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.11.3\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","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","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
package/dist/lib.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)({}).hasOwnProperty.call(o,r)&&(n[r]=o[r])}return n},u.apply(null,arguments)}function a(i={}){const{onSessionStarted:a,onPartialTranscript:s,onCommittedTranscript:c,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onConnect:g,onDisconnect:p,onQuotaExceededError:h,token:C,modelId:S,baseUri:T,commitStrategy:M,vadSilenceThresholdSecs:b,vadThreshold:w,minSpeechDurationMs:y,minSilenceDurationMs:D,languageCode:f,microphone:I,audioFormat:
|
|
1
|
+
import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)({}).hasOwnProperty.call(o,r)&&(n[r]=o[r])}return n},u.apply(null,arguments)}function a(i={}){const{onSessionStarted:a,onPartialTranscript:s,onCommittedTranscript:c,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onConnect:g,onDisconnect:p,onQuotaExceededError:h,token:C,modelId:S,baseUri:T,commitStrategy:M,vadSilenceThresholdSecs:b,vadThreshold:w,minSpeechDurationMs:y,minSilenceDurationMs:D,languageCode:f,microphone:I,audioFormat:A,sampleRate:E,autoConnect:R=!1}=i,k=n(null),[O,F]=e("disconnected"),[P,U]=e(""),[x,V]=e([]),[q,_]=e(null);o(()=>()=>{var n;null==(n=k.current)||n.close()},[]);const N=r(async(n={})=>{if(k.current)console.warn("Already connected");else try{F("connecting"),_(null);const e=n.token||C,o=n.modelId||S;if(!e)throw new Error("Token is required");if(!o)throw new Error("Model ID is required");const r=n.microphone||I,i=n.audioFormat||A,u=n.sampleRate||E;let R;const O=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(r)R=t.connect({token:e,modelId:o,baseUri:n.baseUri||T,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||b,vadThreshold:n.vadThreshold||w,minSpeechDurationMs:n.minSpeechDurationMs||y,minSilenceDurationMs:n.minSilenceDurationMs||D,languageCode:n.languageCode||f,microphone:r,includeTimestamps:O});else{if(!i||!u)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.connect({token:e,modelId:o,baseUri:n.baseUri||T,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||b,vadThreshold:n.vadThreshold||w,minSpeechDurationMs:n.minSpeechDurationMs||y,minSilenceDurationMs:n.minSilenceDurationMs||D,languageCode:n.languageCode||f,includeTimestamps:O,audioFormat:i,sampleRate:u})}k.current=R,R.on(l.SESSION_STARTED,()=>{F("connected"),null==a||a()}),R.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;U(e.text),F("transcribing"),null==s||s(e)}),R.on(l.COMMITTED_TRANSCRIPT,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),U(""),null==c||c(e)}),R.on(l.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),U(""),null==d||d(e)}),R.on(l.ERROR,n=>{const e=n;_(e.error),F("error"),null==v||v(new Error(e.error))}),R.on(l.AUTH_ERROR,n=>{const e=n;_(e.error),F("error"),null==m||m(e)}),R.on(l.QUOTA_EXCEEDED,n=>{const e=n;_(e.error),F("error"),null==h||h(e)}),R.on(l.OPEN,()=>{null==g||g()}),R.on(l.CLOSE,()=>{F("disconnected"),k.current=null,null==p||p()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw _(e),F("error"),n}},[C,S,T,M,b,w,y,D,f,I,A,E,a,s,c,d,v,m,g,p,h]),B=r(()=>{var n;null==(n=k.current)||n.close(),k.current=null,F("disconnected")},[]),L=r((n,e)=>{if(!k.current)throw new Error("Not connected to Scribe");k.current.send(u({audioBase64:n},e))},[]),$=r(()=>{if(!k.current)throw new Error("Not connected to Scribe");k.current.commit()},[]),W=r(()=>{V([]),U("")},[]),j=r(()=>k.current,[]);return o(()=>{R&&N()},[R,N]),{status:O,isConnected:"connected"===O||"transcribing"===O,isTranscribing:"transcribing"===O,partialTranscript:P,committedTranscripts:x,error:q,connect:N,disconnect:B,sendAudio:L,commit:$,clearTranscripts:W,getConnection:j}}const s=["micMuted","volume","serverLocation"];function c(n="us"){switch(n){case"eu-residency":case"in-residency":case"us":case"global":return n;default:return console.warn(`[ConversationalAI] Invalid server-location: ${n}. Defaulting to "us"`),"us"}}function d(n){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[n]}function v(n){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[n]}function m(r={}){const{micMuted:t,volume:l,serverLocation:a}=r,m=function(n,e){if(null==n)return{};var o={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;o[r]=n[r]}return o}(r,s),g=n(null),p=n(null),[h,C]=e("disconnected"),[S,T]=e(!1),[M,b]=e("listening"),w=n(t),y=n(l);return w.current=t,y.current=l,o(()=>{var n;void 0!==t&&(null==g||null==(n=g.current)||n.setMicMuted(t))},[t]),o(()=>{var n;void 0!==l&&(null==g||null==(n=g.current)||n.setVolume({volume:l}))},[l]),o(()=>()=>{var n;null==(n=g.current)||n.endSession()},[]),{startSession:async n=>{var e;if(null!=(e=g.current)&&e.isOpen())return g.current.getId();if(p.current)return(await p.current).getId();try{var o,r,t,l,s,h,S,M,D,f;const e=c((null==n?void 0:n.serverLocation)||a),I=d(e),A=v(e);return p.current=i.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:I,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||A,overrides:u({},null!=(o=null==m?void 0:m.overrides)?o:{},null!=(r=null==n?void 0:n.overrides)?r:{},{client:u({},null!=(t=null==m||null==(l=m.overrides)?void 0:l.client)?t:{},null!=(s=null==n||null==(h=n.overrides)?void 0:h.client)?s:{},{source:(null==n||null==(S=n.overrides)||null==(S=S.client)?void 0:S.source)||(null==m||null==(M=m.overrides)||null==(M=M.client)?void 0:M.source)||"react_sdk",version:(null==n||null==(D=n.overrides)||null==(D=D.client)?void 0:D.version)||(null==m||null==(f=m.overrides)||null==(f=f.client)?void 0:f.version)||"0.11.3"})}),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 o;b(e),null==(o=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||o({mode:e})},onStatusChange:({status:e})=>{var o;C(e),null==(o=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||o({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var o;T(e),null==(o=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||o({canSendFeedback:e})}})),g.current=await p.current,void 0!==w.current&&g.current.setMicMuted(w.current),void 0!==y.current&&g.current.setVolume({volume:y.current}),g.current.getId()}finally{p.current=null}},endSession:async()=>{const n=g.current;g.current=null,await(null==n?void 0:n.endSession())},setVolume:({volume:n})=>{var e;null==(e=g.current)||e.setVolume({volume:n})},getInputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:n=>{var e;null==(e=g.current)||e.sendFeedback(n)},getId:()=>{var n;return null==(n=g.current)?void 0:n.getId()},sendContextualUpdate:n=>{var e;null==(e=g.current)||e.sendContextualUpdate(n)},sendUserMessage:n=>{var e;null==(e=g.current)||e.sendUserMessage(n)},sendUserActivity:()=>{var n;null==(n=g.current)||n.sendUserActivity()},sendMCPToolApprovalResult:(n,e)=>{var o;null==(o=g.current)||o.sendMCPToolApprovalResult(n,e)},changeInputDevice:async n=>{if(g.current&&"changeInputDevice"in g.current)return await g.current.changeInputDevice(n);throw new Error("Device switching is only available for voice conversations")},changeOutputDevice:async n=>{if(g.current&&"changeOutputDevice"in g.current)return await g.current.changeOutputDevice(n);throw new Error("Device switching is only available for voice conversations")},status:h,canSendFeedback:S,micMuted:t,isSpeaking:"speaking"===M}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,c as parseLocation,m as useConversation,a as useScribe};
|
|
2
2
|
//# sourceMappingURL=lib.modern.js.map
|
package/dist/lib.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.modern.js","sources":["../src/scribe.ts","../src/index.ts","../src/version.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const 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 onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.11.2\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onConnect","onDisconnect","onQuotaExceededError","token","defaultToken","modelId","defaultModelId","baseUri","defaultBaseUri","commitStrategy","defaultCommitStrategy","vadSilenceThresholdSecs","defaultVadSilenceThresholdSecs","vadThreshold","defaultVadThreshold","minSpeechDurationMs","defaultMinSpeechDurationMs","minSilenceDurationMs","defaultMinSilenceDurationMs","languageCode","defaultLanguageCode","microphone","defaultMicrophone","audioFormat","defaultAudioFormat","sampleRate","defaultSampleRate","autoConnect","connectionRef","useRef","status","setStatus","useState","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","error","setError","useEffect","_connectionRef$curren","current","close","connect","useCallback","async","runtimeOptions","console","warn","Error","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","text","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_extends","commit","clearTranscripts","getConnection","isConnected","isTranscribing","_excluded","parseLocation","location","getOriginForLocation","us","global","getLivekitUrlForLocation","useConversation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","conversationRef","lockRef","canSendFeedback","setCanSendFeedback","mode","setMode","micMutedRef","volumeRef","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","_conversationRef$curr4","isOpen","getId","_defaultOptions$overr","_options$overrides","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","_options$overrides3","_defaultOptions$overr4","_options$overrides4","_defaultOptions$overr5","resolvedServerLocation","origin","calculatedLivekitUrl","Conversation","livekitUrl","overrides","client","source","version","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","conversation","_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","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","changeOutputDevice","isSpeaking"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.modern.js","sources":["../src/scribe.ts","../src/index.ts","../src/version.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","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.11.3\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onConnect","onDisconnect","onQuotaExceededError","token","defaultToken","modelId","defaultModelId","baseUri","defaultBaseUri","commitStrategy","defaultCommitStrategy","vadSilenceThresholdSecs","defaultVadSilenceThresholdSecs","vadThreshold","defaultVadThreshold","minSpeechDurationMs","defaultMinSpeechDurationMs","minSilenceDurationMs","defaultMinSilenceDurationMs","languageCode","defaultLanguageCode","microphone","defaultMicrophone","audioFormat","defaultAudioFormat","sampleRate","defaultSampleRate","autoConnect","connectionRef","useRef","status","setStatus","useState","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","error","setError","useEffect","_connectionRef$curren","current","close","connect","useCallback","async","runtimeOptions","console","warn","Error","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","text","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_extends","commit","clearTranscripts","getConnection","isConnected","isTranscribing","_excluded","parseLocation","location","getOriginForLocation","us","global","getLivekitUrlForLocation","useConversation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","conversationRef","lockRef","canSendFeedback","setCanSendFeedback","mode","setMode","micMutedRef","volumeRef","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","_conversationRef$curr4","isOpen","getId","_defaultOptions$overr","_options$overrides","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","_options$overrides3","_defaultOptions$overr4","_options$overrides4","_defaultOptions$overr5","resolvedServerLocation","origin","calculatedLivekitUrl","Conversation","livekitUrl","overrides","client","source","version","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","conversation","_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","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","changeOutputDevice","isSpeaking"],"mappings":"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"}
|
package/dist/lib.module.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 i,Conversation as l}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 c(l){void 0===l&&(l={});var c=l.onSessionStarted,a=l.onPartialTranscript,s=l.onCommittedTranscript,d=l.onCommittedTranscriptWithTimestamps,v=l.onError,m=l.onAuthError,f=l.onConnect,h=l.onDisconnect,g=l.onQuotaExceededError,p=l.token,C=l.modelId,S=l.baseUri,T=l.commitStrategy,M=l.vadSilenceThresholdSecs,b=l.vadThreshold,D=l.minSpeechDurationMs,y=l.minSilenceDurationMs,w=l.languageCode,P=l.microphone,I=l.audioFormat,E=l.sampleRate,A=l.autoConnect,R=void 0!==A&&A,k=n(null),O=e("disconnected"),F=O[0],U=O[1],x=e(""),V=x[0],_=x[1],j=e([]),N=j[0],q=j[1],B=e(null),L=B[0],W=B[1];r(function(){return function(){var n;null==(n=k.current)||n.close()}},[]);var H=o(function(n){void 0===n&&(n={});try{if(k.current)return console.warn("Already connected"),Promise.resolve();try{U("connecting"),W(null);var e=n.token||p,r=n.modelId||C;if(!e)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var o,l=n.microphone||P,u=n.audioFormat||I,A=n.sampleRate||E,R=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(l)o=t.connect({token:e,modelId:r,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||T,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||M,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||D,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||w,microphone:l,includeTimestamps:R});else{if(!u||!A)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");o=t.connect({token:e,modelId:r,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||T,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||M,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||D,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||w,includeTimestamps:R,audioFormat:u,sampleRate:A})}k.current=o,o.on(i.SESSION_STARTED,function(){U("connected"),null==c||c()}),o.on(i.PARTIAL_TRANSCRIPT,function(n){var e=n;_(e.text),U("transcribing"),null==a||a(e)}),o.on(i.COMMITTED_TRANSCRIPT,function(n){var e=n,r={id:Date.now()+"-"+Math.random(),text:e.text,timestamp:Date.now(),isFinal:!0};q(function(n){return[].concat(n,[r])}),_(""),null==s||s(e)}),o.on(i.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(n){var e=n,r={id:Date.now()+"-"+Math.random(),text:e.text,timestamp:Date.now(),isFinal:!0};q(function(n){return[].concat(n,[r])}),_(""),null==d||d(e)}),o.on(i.ERROR,function(n){var e=n;W(e.error),U("error"),null==v||v(new Error(e.error))}),o.on(i.AUTH_ERROR,function(n){var e=n;W(e.error),U("error"),null==m||m(e)}),o.on(i.QUOTA_EXCEEDED,function(n){var e=n;W(e.error),U("error"),null==g||g(e)}),o.on(i.OPEN,function(){null==f||f()}),o.on(i.CLOSE,function(){U("disconnected"),k.current=null,null==h||h()})}catch(n){var O=n instanceof Error?n.message:"Failed to connect";throw W(O),U("error"),n}return Promise.resolve()}catch(n){return Promise.reject(n)}},[p,C,S,T,M,b,D,y,w,P,I,E,c,a,s,d,v,m,f,h,g]),Q=o(function(){var n;null==(n=k.current)||n.close(),k.current=null,U("disconnected")},[]),X=o(function(n,e){if(!k.current)throw new Error("Not connected to Scribe");k.current.send(u({audioBase64:n},e))},[]),z=o(function(){if(!k.current)throw new Error("Not connected to Scribe");k.current.commit()},[]),G=o(function(){q([]),_("")},[]),J=o(function(){return k.current},[]);return r(function(){R&&H()},[R,H]),{status:F,isConnected:"connected"===F||"transcribing"===F,isTranscribing:"transcribing"===F,partialTranscript:V,committedTranscripts:N,error:L,connect:H,disconnect:Q,sendAudio:X,commit:z,clearTranscripts:G,getConnection:J}}var a=["micMuted","volume","serverLocation"];function s(n){switch(void 0===n&&(n="us"),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){void 0===o&&(o={});var t=o.micMuted,i=o.volume,c=o.serverLocation,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,a),f=n(null),h=n(null),g=e("disconnected"),p=g[0],C=g[1],S=e(!1),T=S[0],M=S[1],b=e("listening"),D=b[0],y=b[1],w=n(t),P=n(i);return w.current=t,P.current=i,r(function(){var n;void 0!==t&&(null==f||null==(n=f.current)||n.setMicMuted(t))},[t]),r(function(){var n;void 0!==i&&(null==f||null==(n=f.current)||n.setVolume({volume:i}))},[i]),r(function(){return function(){var n;null==(n=f.current)||n.endSession()}},[]),{startSession:function(n){try{var e,r,o=function(e){return r?e:function(e,r){try{var o=(A=d(E=s((null==n?void 0:n.serverLocation)||c)),R=v(E),h.current=l.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:A,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||R,overrides:u({},null!=(t=null==m?void 0:m.overrides)?t:{},null!=(i=null==n?void 0:n.overrides)?i:{},{client:u({},null!=(a=null==m||null==(g=m.overrides)?void 0:g.client)?a:{},null!=(p=null==n||null==(S=n.overrides)?void 0:S.client)?p:{},{source:(null==n||null==(T=n.overrides)||null==(T=T.client)?void 0:T.source)||(null==m||null==(b=m.overrides)||null==(b=b.client)?void 0:b.source)||"react_sdk",version:(null==n||null==(D=n.overrides)||null==(D=D.client)?void 0:D.version)||(null==m||null==(I=m.overrides)||null==(I=I.client)?void 0:I.version)||"0.11.2"})}),onConnect:(null==n?void 0:n.onConnect)||(null==m?void 0:m.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==m?void 0:m.onDisconnect),onError:(null==n?void 0:n.onError)||(null==m?void 0:m.onError),onMessage:(null==n?void 0:n.onMessage)||(null==m?void 0:m.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==m?void 0:m.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==m?void 0:m.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==m?void 0:m.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==m?void 0:m.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==m?void 0:m.onInterruption),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==m?void 0:m.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==m?void 0:m.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==m?void 0:m.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==m?void 0:m.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==m?void 0:m.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==m?void 0:m.onAgentChatResponsePart),onModeChange:function(e){var r,o=e.mode;y(o),null==(r=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||r({mode:o})},onStatusChange:function(e){var r,o=e.status;C(o),null==(r=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||r({status:o})},onCanSendFeedbackChange:function(e){var r,o=e.canSendFeedback;M(o),null==(r=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||r({canSendFeedback:o})}})),Promise.resolve(h.current).then(function(n){return f.current=n,void 0!==w.current&&f.current.setMicMuted(w.current),void 0!==P.current&&f.current.setVolume({volume:P.current}),f.current.getId()}))}catch(n){return r(!0,n)}var t,i,a,g,p,S,T,b,D,I,E,A,R;return o&&o.then?o.then(r.bind(null,!1),r.bind(null,!0)):r(!1,o)}(0,function(n,e){if(h.current=null,n)throw e;return e})};if(null!=(e=f.current)&&e.isOpen())return Promise.resolve(f.current.getId());var t=function(){if(h.current)return Promise.resolve(h.current).then(function(n){var e=n.getId();return r=1,e})}();return Promise.resolve(t&&t.then?t.then(o):o(t))}catch(n){return Promise.reject(n)}},endSession:function(){try{var n=f.current;return f.current=null,Promise.resolve(null==n?void 0:n.endSession()).then(function(){})}catch(n){return Promise.reject(n)}},setVolume:function(n){var e;null==(e=f.current)||e.setVolume({volume:n.volume})},getInputByteFrequencyData:function(){var n;return null==(n=f.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var n;return null==(n=f.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:function(){var n,e;return null!=(n=null==(e=f.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:function(){var n,e;return null!=(n=null==(e=f.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:function(n){var e;null==(e=f.current)||e.sendFeedback(n)},getId:function(){var n;return null==(n=f.current)?void 0:n.getId()},sendContextualUpdate:function(n){var e;null==(e=f.current)||e.sendContextualUpdate(n)},sendUserMessage:function(n){var e;null==(e=f.current)||e.sendUserMessage(n)},sendUserActivity:function(){var n;null==(n=f.current)||n.sendUserActivity()},sendMCPToolApprovalResult:function(n,e){var r;null==(r=f.current)||r.sendMCPToolApprovalResult(n,e)},changeInputDevice:function(n){try{var e,r=function(n){if(e)return n;throw new Error("Device switching is only available for voice conversations")},o=function(){if(f.current&&"changeInputDevice"in f.current)return Promise.resolve(f.current.changeInputDevice(n)).then(function(n){return e=1,n})}();return Promise.resolve(o&&o.then?o.then(r):r(o))}catch(n){return Promise.reject(n)}},changeOutputDevice:function(n){try{var e,r=function(n){if(e)return n;throw new Error("Device switching is only available for voice conversations")},o=function(){if(f.current&&"changeOutputDevice"in f.current)return Promise.resolve(f.current.changeOutputDevice(n)).then(function(n){return e=1,n})}();return Promise.resolve(o&&o.then?o.then(r):r(o))}catch(n){return Promise.reject(n)}},status:p,canSendFeedback:T,micMuted:t,isSpeaking:"speaking"===D}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,s as parseLocation,m as useConversation,c as useScribe};
|
|
1
|
+
import{useRef as n,useState as e,useEffect as r,useCallback as o}from"react";import{Scribe as t,RealtimeEvents as i,Conversation as l}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 c(l){void 0===l&&(l={});var c=l.onSessionStarted,a=l.onPartialTranscript,s=l.onCommittedTranscript,d=l.onCommittedTranscriptWithTimestamps,v=l.onError,m=l.onAuthError,f=l.onConnect,h=l.onDisconnect,g=l.onQuotaExceededError,p=l.token,C=l.modelId,S=l.baseUri,T=l.commitStrategy,M=l.vadSilenceThresholdSecs,b=l.vadThreshold,D=l.minSpeechDurationMs,y=l.minSilenceDurationMs,w=l.languageCode,P=l.microphone,I=l.audioFormat,A=l.sampleRate,E=l.autoConnect,R=void 0!==E&&E,k=n(null),O=e("disconnected"),F=O[0],U=O[1],x=e(""),V=x[0],q=x[1],_=e([]),j=_[0],N=_[1],B=e(null),L=B[0],W=B[1];r(function(){return function(){var n;null==(n=k.current)||n.close()}},[]);var H=o(function(n){void 0===n&&(n={});try{if(k.current)return console.warn("Already connected"),Promise.resolve();try{U("connecting"),W(null);var e=n.token||p,r=n.modelId||C;if(!e)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var o,l=n.microphone||P,u=n.audioFormat||I,E=n.sampleRate||A,R=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(l)o=t.connect({token:e,modelId:r,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||T,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||M,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||D,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||w,microphone:l,includeTimestamps:R});else{if(!u||!E)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");o=t.connect({token:e,modelId:r,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||T,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||M,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||D,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||w,includeTimestamps:R,audioFormat:u,sampleRate:E})}k.current=o,o.on(i.SESSION_STARTED,function(){U("connected"),null==c||c()}),o.on(i.PARTIAL_TRANSCRIPT,function(n){var e=n;q(e.text),U("transcribing"),null==a||a(e)}),o.on(i.COMMITTED_TRANSCRIPT,function(n){var e=n,r={id:Date.now()+"-"+Math.random(),text:e.text,timestamp:Date.now(),isFinal:!0};N(function(n){return[].concat(n,[r])}),q(""),null==s||s(e)}),o.on(i.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(n){var e=n,r={id:Date.now()+"-"+Math.random(),text:e.text,timestamp:Date.now(),isFinal:!0};N(function(n){return[].concat(n,[r])}),q(""),null==d||d(e)}),o.on(i.ERROR,function(n){var e=n;W(e.error),U("error"),null==v||v(new Error(e.error))}),o.on(i.AUTH_ERROR,function(n){var e=n;W(e.error),U("error"),null==m||m(e)}),o.on(i.QUOTA_EXCEEDED,function(n){var e=n;W(e.error),U("error"),null==g||g(e)}),o.on(i.OPEN,function(){null==f||f()}),o.on(i.CLOSE,function(){U("disconnected"),k.current=null,null==h||h()})}catch(n){var O=n instanceof Error?n.message:"Failed to connect";throw W(O),U("error"),n}return Promise.resolve()}catch(n){return Promise.reject(n)}},[p,C,S,T,M,b,D,y,w,P,I,A,c,a,s,d,v,m,f,h,g]),Q=o(function(){var n;null==(n=k.current)||n.close(),k.current=null,U("disconnected")},[]),X=o(function(n,e){if(!k.current)throw new Error("Not connected to Scribe");k.current.send(u({audioBase64:n},e))},[]),z=o(function(){if(!k.current)throw new Error("Not connected to Scribe");k.current.commit()},[]),G=o(function(){N([]),q("")},[]),J=o(function(){return k.current},[]);return r(function(){R&&H()},[R,H]),{status:F,isConnected:"connected"===F||"transcribing"===F,isTranscribing:"transcribing"===F,partialTranscript:V,committedTranscripts:j,error:L,connect:H,disconnect:Q,sendAudio:X,commit:z,clearTranscripts:G,getConnection:J}}var a=["micMuted","volume","serverLocation"];function s(n){switch(void 0===n&&(n="us"),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){void 0===o&&(o={});var t=o.micMuted,i=o.volume,c=o.serverLocation,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,a),f=n(null),h=n(null),g=e("disconnected"),p=g[0],C=g[1],S=e(!1),T=S[0],M=S[1],b=e("listening"),D=b[0],y=b[1],w=n(t),P=n(i);return w.current=t,P.current=i,r(function(){var n;void 0!==t&&(null==f||null==(n=f.current)||n.setMicMuted(t))},[t]),r(function(){var n;void 0!==i&&(null==f||null==(n=f.current)||n.setVolume({volume:i}))},[i]),r(function(){return function(){var n;null==(n=f.current)||n.endSession()}},[]),{startSession:function(n){try{var e,r,o=function(e){return r?e:function(e,r){try{var o=(E=d(A=s((null==n?void 0:n.serverLocation)||c)),R=v(A),h.current=l.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:E,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||R,overrides:u({},null!=(t=null==m?void 0:m.overrides)?t:{},null!=(i=null==n?void 0:n.overrides)?i:{},{client:u({},null!=(a=null==m||null==(g=m.overrides)?void 0:g.client)?a:{},null!=(p=null==n||null==(S=n.overrides)?void 0:S.client)?p:{},{source:(null==n||null==(T=n.overrides)||null==(T=T.client)?void 0:T.source)||(null==m||null==(b=m.overrides)||null==(b=b.client)?void 0:b.source)||"react_sdk",version:(null==n||null==(D=n.overrides)||null==(D=D.client)?void 0:D.version)||(null==m||null==(I=m.overrides)||null==(I=I.client)?void 0:I.version)||"0.11.3"})}),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:function(e){var r,o=e.mode;y(o),null==(r=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||r({mode:o})},onStatusChange:function(e){var r,o=e.status;C(o),null==(r=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||r({status:o})},onCanSendFeedbackChange:function(e){var r,o=e.canSendFeedback;M(o),null==(r=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||r({canSendFeedback:o})}})),Promise.resolve(h.current).then(function(n){return f.current=n,void 0!==w.current&&f.current.setMicMuted(w.current),void 0!==P.current&&f.current.setVolume({volume:P.current}),f.current.getId()}))}catch(n){return r(!0,n)}var t,i,a,g,p,S,T,b,D,I,A,E,R;return o&&o.then?o.then(r.bind(null,!1),r.bind(null,!0)):r(!1,o)}(0,function(n,e){if(h.current=null,n)throw e;return e})};if(null!=(e=f.current)&&e.isOpen())return Promise.resolve(f.current.getId());var t=function(){if(h.current)return Promise.resolve(h.current).then(function(n){var e=n.getId();return r=1,e})}();return Promise.resolve(t&&t.then?t.then(o):o(t))}catch(n){return Promise.reject(n)}},endSession:function(){try{var n=f.current;return f.current=null,Promise.resolve(null==n?void 0:n.endSession()).then(function(){})}catch(n){return Promise.reject(n)}},setVolume:function(n){var e;null==(e=f.current)||e.setVolume({volume:n.volume})},getInputByteFrequencyData:function(){var n;return null==(n=f.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var n;return null==(n=f.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:function(){var n,e;return null!=(n=null==(e=f.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:function(){var n,e;return null!=(n=null==(e=f.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:function(n){var e;null==(e=f.current)||e.sendFeedback(n)},getId:function(){var n;return null==(n=f.current)?void 0:n.getId()},sendContextualUpdate:function(n){var e;null==(e=f.current)||e.sendContextualUpdate(n)},sendUserMessage:function(n){var e;null==(e=f.current)||e.sendUserMessage(n)},sendUserActivity:function(){var n;null==(n=f.current)||n.sendUserActivity()},sendMCPToolApprovalResult:function(n,e){var r;null==(r=f.current)||r.sendMCPToolApprovalResult(n,e)},changeInputDevice:function(n){try{var e,r=function(n){if(e)return n;throw new Error("Device switching is only available for voice conversations")},o=function(){if(f.current&&"changeInputDevice"in f.current)return Promise.resolve(f.current.changeInputDevice(n)).then(function(n){return e=1,n})}();return Promise.resolve(o&&o.then?o.then(r):r(o))}catch(n){return Promise.reject(n)}},changeOutputDevice:function(n){try{var e,r=function(n){if(e)return n;throw new Error("Device switching is only available for voice conversations")},o=function(){if(f.current&&"changeOutputDevice"in f.current)return Promise.resolve(f.current.changeOutputDevice(n)).then(function(n){return e=1,n})}();return Promise.resolve(o&&o.then?o.then(r):r(o))}catch(n){return Promise.reject(n)}},status:p,canSendFeedback:T,micMuted:t,isSpeaking:"speaking"===D}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,s as parseLocation,m as useConversation,c as useScribe};
|
|
2
2
|
//# sourceMappingURL=lib.module.js.map
|
package/dist/lib.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.module.js","sources":["../src/scribe.ts","../src/index.ts","../src/version.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const 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 onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.11.2\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onConnect","onDisconnect","onQuotaExceededError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","useRef","_useState","useState","status","setStatus","_useState2","partialTranscript","setPartialTranscript","_useState3","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","useEffect","_connectionRef$curren","current","close","connect","useCallback","runtimeOptions","console","warn","Promise","resolve","Error","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","text","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","e","reject","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_extends","commit","clearTranscripts","getConnection","isConnected","isTranscribing","parseLocation","location","getOriginForLocation","us","global","getLivekitUrlForLocation","useConversation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","lockRef","canSendFeedback","setCanSendFeedback","mode","setMode","micMutedRef","volumeRef","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","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","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","_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","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_exit2","_temp4","_result3","_temp3","_await$conversationRe","changeOutputDevice","_exit3","_temp6","_result4","_temp5","_await$conversationRe2","isSpeaking"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.module.js","sources":["../src/scribe.ts","../src/index.ts","../src/version.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","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.11.3\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onConnect","onDisconnect","onQuotaExceededError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","useRef","_useState","useState","status","setStatus","_useState2","partialTranscript","setPartialTranscript","_useState3","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","useEffect","_connectionRef$curren","current","close","connect","useCallback","runtimeOptions","console","warn","Promise","resolve","Error","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","text","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","e","reject","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_extends","commit","clearTranscripts","getConnection","isConnected","isTranscribing","parseLocation","location","getOriginForLocation","us","global","getLivekitUrlForLocation","useConversation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","lockRef","canSendFeedback","setCanSendFeedback","mode","setMode","micMutedRef","volumeRef","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","calculatedLivekitUrl","Conversation","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","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolRequest","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","_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","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_exit2","_temp4","_result3","_temp3","_await$conversationRe","changeOutputDevice","_exit3","_temp6","_result4","_temp5","_await$conversationRe2","isSpeaking"],"mappings":"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"}
|
package/dist/lib.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("@elevenlabs/client")):"function"==typeof define&&define.amd?define(["exports","react","@elevenlabs/client"],n):n((e||self).react={},e.react,e.client)}(this,function(e,n,t){function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(null,arguments)}var o=["micMuted","volume","serverLocation"];function i(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 l(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(e,"AudioFormat",{enumerable:!0,get:function(){return t.AudioFormat}}),Object.defineProperty(e,"CommitStrategy",{enumerable:!0,get:function(){return t.CommitStrategy}}),Object.defineProperty(e,"RealtimeEvents",{enumerable:!0,get:function(){return t.RealtimeEvents}}),Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return t.postOverallFeedback}}),e.getLivekitUrlForLocation=u,e.getOriginForLocation=l,e.parseLocation=i,e.useConversation=function(e){void 0===e&&(e={});var c=e.micMuted,a=e.volume,s=e.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(e,o),v=n.useRef(null),f=n.useRef(null),m=n.useState("disconnected"),h=m[0],g=m[1],p=n.useState(!1),C=p[0],S=p[1],b=n.useState("listening"),T=b[0],y=b[1],M=n.useRef(c),E=n.useRef(a);return M.current=c,E.current=a,n.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setMicMuted(c))},[c]),n.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setVolume({volume:a}))},[a]),n.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var n,o,c=function(n){return o?n:function(n,o){try{var c=(I=l(w=i((null==e?void 0:e.serverLocation)||s)),k=u(w),f.current=t.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||k,overrides:r({},null!=(a=null==d?void 0:d.overrides)?a:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:r({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(C=null==e||null==(b=e.overrides)?void 0:b.client)?C:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(R=d.overrides)||null==(R=R.client)?void 0:R.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.11.2"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var t,r=n.mode;y(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;S(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==M.current&&v.current.setMicMuted(M.current),void 0!==E.current&&v.current.setVolume({volume:E.current}),v.current.getId()}))}catch(e){return o(!0,e)}var a,m,h,p,C,b,T,R,D,P,w,I,k;return c&&c.then?c.then(o.bind(null,!1),o.bind(null,!0)):o(!1,c)}(0,function(e,n){if(f.current=null,e)throw n;return n})};if(null!=(n=v.current)&&n.isOpen())return Promise.resolve(v.current.getId());var a=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return o=1,n})}();return Promise.resolve(a&&a.then?a.then(c):c(a))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:C,micMuted:c,isSpeaking:"speaking"===T}},e.useScribe=function(e){void 0===e&&(e={});var o=e.onSessionStarted,i=e.onPartialTranscript,l=e.onCommittedTranscript,u=e.onCommittedTranscriptWithTimestamps,c=e.onError,a=e.onAuthError,s=e.onConnect,d=e.onDisconnect,v=e.onQuotaExceededError,f=e.token,m=e.modelId,h=e.baseUri,g=e.commitStrategy,p=e.vadSilenceThresholdSecs,C=e.vadThreshold,S=e.minSpeechDurationMs,b=e.minSilenceDurationMs,T=e.languageCode,y=e.microphone,M=e.audioFormat,E=e.sampleRate,R=e.autoConnect,D=void 0!==R&&R,P=n.useRef(null),w=n.useState("disconnected"),I=w[0],k=w[1],A=n.useState(""),O=A[0],F=A[1],U=n.useState([]),j=U[0],x=U[1],V=n.useState(null),L=V[0],_=V[1];n.useEffect(function(){return function(){var e;null==(e=P.current)||e.close()}},[]);var q=n.useCallback(function(e){void 0===e&&(e={});try{if(P.current)return console.warn("Already connected"),Promise.resolve();try{k("connecting"),_(null);var n=e.token||f,r=e.modelId||m;if(!n)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,D=e.microphone||y,w=e.audioFormat||M,I=e.sampleRate||E,A=!(!e.onCommittedTranscriptWithTimestamps&&!u);if(D)R=t.Scribe.connect({token:n,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,microphone:D,includeTimestamps:A});else{if(!w||!I)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.Scribe.connect({token:n,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,includeTimestamps:A,audioFormat:w,sampleRate:I})}P.current=R,R.on(t.RealtimeEvents.SESSION_STARTED,function(){k("connected"),null==o||o()}),R.on(t.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),k("transcribing"),null==i||i(n)}),R.on(t.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};x(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(t.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};x(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(t.RealtimeEvents.ERROR,function(e){var n=e;_(n.error),k("error"),null==c||c(new Error(n.error))}),R.on(t.RealtimeEvents.AUTH_ERROR,function(e){var n=e;_(n.error),k("error"),null==a||a(n)}),R.on(t.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;_(n.error),k("error"),null==v||v(n)}),R.on(t.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(t.RealtimeEvents.CLOSE,function(){k("disconnected"),P.current=null,null==d||d()})}catch(e){var O=e instanceof Error?e.message:"Failed to connect";throw _(O),k("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[f,m,h,g,p,C,S,b,T,y,M,E,o,i,l,u,c,a,s,d,v]),N=n.useCallback(function(){var e;null==(e=P.current)||e.close(),P.current=null,k("disconnected")},[]),B=n.useCallback(function(e,n){if(!P.current)throw new Error("Not connected to Scribe");P.current.send(r({audioBase64:e},n))},[]),W=n.useCallback(function(){if(!P.current)throw new Error("Not connected to Scribe");P.current.commit()},[]),H=n.useCallback(function(){x([]),F("")},[]),Q=n.useCallback(function(){return P.current},[]);return n.useEffect(function(){D&&q()},[D,q]),{status:I,isConnected:"connected"===I||"transcribing"===I,isTranscribing:"transcribing"===I,partialTranscript:O,committedTranscripts:j,error:L,connect:q,disconnect:N,sendAudio:B,commit:W,clearTranscripts:H,getConnection:Q}}});
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react"),require("@elevenlabs/client")):"function"==typeof define&&define.amd?define(["exports","react","@elevenlabs/client"],n):n((e||self).react={},e.react,e.client)}(this,function(e,n,t){function r(){return r=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},r.apply(null,arguments)}var o=["micMuted","volume","serverLocation"];function i(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 l(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(e,"AudioFormat",{enumerable:!0,get:function(){return t.AudioFormat}}),Object.defineProperty(e,"CommitStrategy",{enumerable:!0,get:function(){return t.CommitStrategy}}),Object.defineProperty(e,"RealtimeEvents",{enumerable:!0,get:function(){return t.RealtimeEvents}}),Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return t.postOverallFeedback}}),e.getLivekitUrlForLocation=u,e.getOriginForLocation=l,e.parseLocation=i,e.useConversation=function(e){void 0===e&&(e={});var c=e.micMuted,a=e.volume,s=e.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(e,o),v=n.useRef(null),f=n.useRef(null),m=n.useState("disconnected"),h=m[0],g=m[1],p=n.useState(!1),C=p[0],S=p[1],b=n.useState("listening"),T=b[0],y=b[1],M=n.useRef(c),E=n.useRef(a);return M.current=c,E.current=a,n.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setMicMuted(c))},[c]),n.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setVolume({volume:a}))},[a]),n.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var n,o,c=function(n){return o?n:function(n,o){try{var c=(A=l(w=i((null==e?void 0:e.serverLocation)||s)),I=u(w),f.current=t.Conversation.startSession(r({},null!=d?d:{},null!=e?e:{},{origin:A,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||I,overrides:r({},null!=(a=null==d?void 0:d.overrides)?a:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:r({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(C=null==e||null==(b=e.overrides)?void 0:b.client)?C:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(R=d.overrides)||null==(R=R.client)?void 0:R.source)||"react_sdk",version:(null==e||null==(D=e.overrides)||null==(D=D.client)?void 0:D.version)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.version)||"0.11.3"})}),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 t,r=n.mode;y(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;S(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==M.current&&v.current.setMicMuted(M.current),void 0!==E.current&&v.current.setVolume({volume:E.current}),v.current.getId()}))}catch(e){return o(!0,e)}var a,m,h,p,C,b,T,R,D,P,w,A,I;return c&&c.then?c.then(o.bind(null,!1),o.bind(null,!0)):o(!1,c)}(0,function(e,n){if(f.current=null,e)throw n;return n})};if(null!=(n=v.current)&&n.isOpen())return Promise.resolve(v.current.getId());var a=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return o=1,n})}();return Promise.resolve(a&&a.then?a.then(c):c(a))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:C,micMuted:c,isSpeaking:"speaking"===T}},e.useScribe=function(e){void 0===e&&(e={});var o=e.onSessionStarted,i=e.onPartialTranscript,l=e.onCommittedTranscript,u=e.onCommittedTranscriptWithTimestamps,c=e.onError,a=e.onAuthError,s=e.onConnect,d=e.onDisconnect,v=e.onQuotaExceededError,f=e.token,m=e.modelId,h=e.baseUri,g=e.commitStrategy,p=e.vadSilenceThresholdSecs,C=e.vadThreshold,S=e.minSpeechDurationMs,b=e.minSilenceDurationMs,T=e.languageCode,y=e.microphone,M=e.audioFormat,E=e.sampleRate,R=e.autoConnect,D=void 0!==R&&R,P=n.useRef(null),w=n.useState("disconnected"),A=w[0],I=w[1],k=n.useState(""),O=k[0],F=k[1],U=n.useState([]),j=U[0],x=U[1],q=n.useState(null),V=q[0],L=q[1];n.useEffect(function(){return function(){var e;null==(e=P.current)||e.close()}},[]);var _=n.useCallback(function(e){void 0===e&&(e={});try{if(P.current)return console.warn("Already connected"),Promise.resolve();try{I("connecting"),L(null);var n=e.token||f,r=e.modelId||m;if(!n)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,D=e.microphone||y,w=e.audioFormat||M,A=e.sampleRate||E,k=!(!e.onCommittedTranscriptWithTimestamps&&!u);if(D)R=t.Scribe.connect({token:n,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,microphone:D,includeTimestamps:k});else{if(!w||!A)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.Scribe.connect({token:n,modelId:r,baseUri:e.baseUri||h,commitStrategy:e.commitStrategy||g,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||p,vadThreshold:e.vadThreshold||C,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||b,languageCode:e.languageCode||T,includeTimestamps:k,audioFormat:w,sampleRate:A})}P.current=R,R.on(t.RealtimeEvents.SESSION_STARTED,function(){I("connected"),null==o||o()}),R.on(t.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),I("transcribing"),null==i||i(n)}),R.on(t.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};x(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(t.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};x(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(t.RealtimeEvents.ERROR,function(e){var n=e;L(n.error),I("error"),null==c||c(new Error(n.error))}),R.on(t.RealtimeEvents.AUTH_ERROR,function(e){var n=e;L(n.error),I("error"),null==a||a(n)}),R.on(t.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;L(n.error),I("error"),null==v||v(n)}),R.on(t.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(t.RealtimeEvents.CLOSE,function(){I("disconnected"),P.current=null,null==d||d()})}catch(e){var O=e instanceof Error?e.message:"Failed to connect";throw L(O),I("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[f,m,h,g,p,C,S,b,T,y,M,E,o,i,l,u,c,a,s,d,v]),N=n.useCallback(function(){var e;null==(e=P.current)||e.close(),P.current=null,I("disconnected")},[]),B=n.useCallback(function(e,n){if(!P.current)throw new Error("Not connected to Scribe");P.current.send(r({audioBase64:e},n))},[]),W=n.useCallback(function(){if(!P.current)throw new Error("Not connected to Scribe");P.current.commit()},[]),H=n.useCallback(function(){x([]),F("")},[]),Q=n.useCallback(function(){return P.current},[]);return n.useEffect(function(){D&&_()},[D,_]),{status:A,isConnected:"connected"===A||"transcribing"===A,isTranscribing:"transcribing"===A,partialTranscript:O,committedTranscripts:j,error:V,connect:_,disconnect:N,sendAudio:B,commit:W,clearTranscripts:H,getConnection:Q}}});
|
|
2
2
|
//# sourceMappingURL=lib.umd.js.map
|
package/dist/lib.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.umd.js","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const 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 onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.11.2\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","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","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","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.umd.js","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.11.3\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n ScribeQuotaExceededErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n onQuotaExceededError,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","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","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","includeTimestamps","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const PACKAGE_VERSION = "0.11.
|
|
1
|
+
export declare const PACKAGE_VERSION = "0.11.3";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elevenlabs/react",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.3",
|
|
4
4
|
"description": "ElevenLabs React Library",
|
|
5
5
|
"main": "./dist/lib.umd.js",
|
|
6
6
|
"module": "./dist/lib.module.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"author": "ElevenLabs",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@elevenlabs/client": "0.11.
|
|
22
|
+
"@elevenlabs/client": "0.11.3"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": ">=16.8.0"
|