@elevenlabs/react 0.12.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.0\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","onConnect","onDisconnect","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","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_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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"}
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 ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.1\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","onConnect","onDisconnect","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","includeTimestamps","defaultIncludeTimestamps","connectionRef","useRef","status","setStatus","useState","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","error","setError","useEffect","_connectionRef$curren","current","close","connect","useCallback","async","runtimeOptions","console","warn","_ref","_runtimeOptions$inclu","Error","connection","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","words","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","_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","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,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.onQuotaExceededError,h=l.onCommitThrottledError,g=l.onTranscriberError,p=l.onUnacceptedTermsError,C=l.onRateLimitedError,T=l.onInputError,E=l.onQueueOverflowError,S=l.onResourceExhaustedError,M=l.onSessionTimeLimitExceededError,I=l.onChunkSizeExceededError,D=l.onInsufficientAudioActivityError,R=l.onConnect,b=l.onDisconnect,A=l.token,y=l.modelId,P=l.baseUri,w=l.commitStrategy,O=l.vadSilenceThresholdSecs,U=l.vadThreshold,k=l.minSpeechDurationMs,F=l.minSilenceDurationMs,_=l.languageCode,x=l.microphone,N=l.audioFormat,V=l.sampleRate,L=l.autoConnect,q=void 0!==L&&L,j=n(null),B=e("disconnected"),H=B[0],Q=B[1],W=e(""),X=W[0],z=W[1],K=e([]),Y=K[0],Z=K[1],G=e(null),J=G[0],$=G[1];r(function(){return function(){var n;null==(n=j.current)||n.close()}},[]);var nn=o(function(n){void 0===n&&(n={});try{if(j.current)return console.warn("Already connected"),Promise.resolve();try{Q("connecting"),$(null);var e=n.token||A,r=n.modelId||y;if(!e)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var o,l=n.microphone||x,u=n.audioFormat||N,L=n.sampleRate||V,q=!(!n.onCommittedTranscriptWithTimestamps&&!d);if(l)o=t.connect({token:e,modelId:r,baseUri:n.baseUri||P,commitStrategy:n.commitStrategy||w,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||O,vadThreshold:n.vadThreshold||U,minSpeechDurationMs:n.minSpeechDurationMs||k,minSilenceDurationMs:n.minSilenceDurationMs||F,languageCode:n.languageCode||_,microphone:l,includeTimestamps:q});else{if(!u||!L)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");o=t.connect({token:e,modelId:r,baseUri:n.baseUri||P,commitStrategy:n.commitStrategy||w,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||O,vadThreshold:n.vadThreshold||U,minSpeechDurationMs:n.minSpeechDurationMs||k,minSilenceDurationMs:n.minSilenceDurationMs||F,languageCode:n.languageCode||_,includeTimestamps:q,audioFormat:u,sampleRate:L})}j.current=o,o.on(i.SESSION_STARTED,function(){Q("connected"),null==c||c()}),o.on(i.PARTIAL_TRANSCRIPT,function(n){var e=n;z(e.text),Q("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};Z(function(n){return[].concat(n,[r])}),z(""),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};Z(function(n){return[].concat(n,[r])}),z(""),null==d||d(e)}),o.on(i.ERROR,function(n){var e=n;$(e.error),Q("error"),null==v||v(new Error(e.error))}),o.on(i.AUTH_ERROR,function(n){var e=n;$(e.error),Q("error"),null==m||m(e)}),o.on(i.QUOTA_EXCEEDED,function(n){var e=n;$(e.error),Q("error"),null==f||f(e)}),o.on(i.COMMIT_THROTTLED,function(n){var e=n;$(e.error),Q("error"),null==h||h(e)}),o.on(i.TRANSCRIBER_ERROR,function(n){var e=n;$(e.error),Q("error"),null==g||g(e)}),o.on(i.UNACCEPTED_TERMS,function(n){var e=n;$(e.error),Q("error"),null==p||p(e)}),o.on(i.RATE_LIMITED,function(n){var e=n;$(e.error),Q("error"),null==C||C(e)}),o.on(i.INPUT_ERROR,function(n){var e=n;$(e.error),Q("error"),null==T||T(e)}),o.on(i.QUEUE_OVERFLOW,function(n){var e=n;$(e.error),Q("error"),null==E||E(e)}),o.on(i.RESOURCE_EXHAUSTED,function(n){var e=n;$(e.error),Q("error"),null==S||S(e)}),o.on(i.SESSION_TIME_LIMIT_EXCEEDED,function(n){var e=n;$(e.error),Q("error"),null==M||M(e)}),o.on(i.CHUNK_SIZE_EXCEEDED,function(n){var e=n;$(e.error),Q("error"),null==I||I(e)}),o.on(i.INSUFFICIENT_AUDIO_ACTIVITY,function(n){var e=n;$(e.error),Q("error"),null==D||D(e)}),o.on(i.OPEN,function(){null==R||R()}),o.on(i.CLOSE,function(){Q("disconnected"),j.current=null,null==b||b()})}catch(n){var B=n instanceof Error?n.message:"Failed to connect";throw $(B),Q("error"),n}return Promise.resolve()}catch(n){return Promise.reject(n)}},[A,y,P,w,O,U,k,F,_,x,N,V,c,a,s,d,v,m,f,h,g,p,C,T,E,S,M,I,D,R,b]),en=o(function(){var n;null==(n=j.current)||n.close(),j.current=null,Q("disconnected")},[]),rn=o(function(n,e){if(!j.current)throw new Error("Not connected to Scribe");j.current.send(u({audioBase64:n},e))},[]),on=o(function(){if(!j.current)throw new Error("Not connected to Scribe");j.current.commit()},[]),tn=o(function(){Z([]),z("")},[]),ln=o(function(){return j.current},[]);return r(function(){q&&nn()},[q,nn]),{status:H,isConnected:"connected"===H||"transcribing"===H,isTranscribing:"transcribing"===H,partialTranscript:X,committedTranscripts:Y,error:J,connect:nn,disconnect:en,sendAudio:rn,commit:on,clearTranscripts:tn,getConnection:ln}}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],T=e(!1),E=T[0],S=T[1],M=e("listening"),I=M[0],D=M[1],R=n(t),b=n(i);return R.current=t,b.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=(P=d(y=s((null==n?void 0:n.serverLocation)||c)),w=v(y),h.current=l.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:P,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||w,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==(T=n.overrides)?void 0:T.client)?p:{},{source:(null==n||null==(E=n.overrides)||null==(E=E.client)?void 0:E.source)||(null==m||null==(M=m.overrides)||null==(M=M.client)?void 0:M.source)||"react_sdk",version:(null==n||null==(I=n.overrides)||null==(I=I.client)?void 0:I.version)||(null==m||null==(A=m.overrides)||null==(A=A.client)?void 0:A.version)||"0.12.0"})}),onConnect:(null==n?void 0:n.onConnect)||(null==m?void 0:m.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==m?void 0:m.onDisconnect),onError:(null==n?void 0:n.onError)||(null==m?void 0:m.onError),onMessage:(null==n?void 0:n.onMessage)||(null==m?void 0:m.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==m?void 0:m.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==m?void 0:m.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==m?void 0:m.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==m?void 0:m.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==m?void 0:m.onInterruption),onAgentToolRequest:(null==n?void 0:n.onAgentToolRequest)||(null==m?void 0:m.onAgentToolRequest),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==m?void 0:m.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==m?void 0:m.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==m?void 0:m.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==m?void 0:m.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==m?void 0:m.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==m?void 0:m.onAgentChatResponsePart),onModeChange:function(e){var r,o=e.mode;D(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;S(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!==R.current&&f.current.setMicMuted(R.current),void 0!==b.current&&f.current.setVolume({volume:b.current}),f.current.getId()}))}catch(n){return r(!0,n)}var t,i,a,g,p,T,E,M,I,A,y,P,w;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:E,micMuted:t,isSpeaking:"speaking"===I}}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.onQuotaExceededError,h=l.onCommitThrottledError,g=l.onTranscriberError,p=l.onUnacceptedTermsError,T=l.onRateLimitedError,C=l.onInputError,E=l.onQueueOverflowError,S=l.onResourceExhaustedError,M=l.onSessionTimeLimitExceededError,I=l.onChunkSizeExceededError,D=l.onInsufficientAudioActivityError,R=l.onConnect,b=l.onDisconnect,A=l.token,y=l.modelId,w=l.baseUri,P=l.commitStrategy,O=l.vadSilenceThresholdSecs,U=l.vadThreshold,k=l.minSpeechDurationMs,F=l.minSilenceDurationMs,_=l.languageCode,x=l.microphone,N=l.audioFormat,V=l.sampleRate,L=l.autoConnect,q=void 0!==L&&L,j=l.includeTimestamps,B=n(null),H=e("disconnected"),Q=H[0],W=H[1],X=e(""),z=X[0],K=X[1],Y=e([]),Z=Y[0],G=Y[1],J=e(null),$=J[0],nn=J[1];r(function(){return function(){var n;null==(n=B.current)||n.close()}},[]);var en=o(function(n){void 0===n&&(n={});try{if(B.current)return console.warn("Already connected"),Promise.resolve();try{var e,r;W("connecting"),nn(null);var o=n.token||A,l=n.modelId||y;if(!o)throw new Error("Token is required");if(!l)throw new Error("Model ID is required");var u,L=n.microphone||x,q=n.audioFormat||N,H=n.sampleRate||V,Q=null!=(e=null!=(r=n.includeTimestamps)?r:j)?e:!(!n.onCommittedTranscriptWithTimestamps&&!d);if(L)u=t.connect({token:o,modelId:l,baseUri:n.baseUri||w,commitStrategy:n.commitStrategy||P,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||O,vadThreshold:n.vadThreshold||U,minSpeechDurationMs:n.minSpeechDurationMs||k,minSilenceDurationMs:n.minSilenceDurationMs||F,languageCode:n.languageCode||_,microphone:L,includeTimestamps:Q});else{if(!q||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");u=t.connect({token:o,modelId:l,baseUri:n.baseUri||w,commitStrategy:n.commitStrategy||P,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||O,vadThreshold:n.vadThreshold||U,minSpeechDurationMs:n.minSpeechDurationMs||k,minSilenceDurationMs:n.minSilenceDurationMs||F,languageCode:n.languageCode||_,includeTimestamps:Q,audioFormat:q,sampleRate:H})}B.current=u,u.on(i.SESSION_STARTED,function(){W("connected"),null==c||c()}),u.on(i.PARTIAL_TRANSCRIPT,function(n){var e=n;K(e.text),W("transcribing"),null==a||a(e)}),u.on(i.COMMITTED_TRANSCRIPT,function(n){var e=n,r={id:Date.now()+"-"+Math.random(),text:e.text,timestamp:Date.now(),isFinal:!0};G(function(n){return[].concat(n,[r])}),K(""),null==s||s(e)}),u.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,words:e.words};G(function(n){return[].concat(n,[r])}),K(""),null==d||d(e)}),u.on(i.ERROR,function(n){var e=n;nn(e.error),W("error"),null==v||v(new Error(e.error))}),u.on(i.AUTH_ERROR,function(n){var e=n;nn(e.error),W("error"),null==m||m(e)}),u.on(i.QUOTA_EXCEEDED,function(n){var e=n;nn(e.error),W("error"),null==f||f(e)}),u.on(i.COMMIT_THROTTLED,function(n){var e=n;nn(e.error),W("error"),null==h||h(e)}),u.on(i.TRANSCRIBER_ERROR,function(n){var e=n;nn(e.error),W("error"),null==g||g(e)}),u.on(i.UNACCEPTED_TERMS,function(n){var e=n;nn(e.error),W("error"),null==p||p(e)}),u.on(i.RATE_LIMITED,function(n){var e=n;nn(e.error),W("error"),null==T||T(e)}),u.on(i.INPUT_ERROR,function(n){var e=n;nn(e.error),W("error"),null==C||C(e)}),u.on(i.QUEUE_OVERFLOW,function(n){var e=n;nn(e.error),W("error"),null==E||E(e)}),u.on(i.RESOURCE_EXHAUSTED,function(n){var e=n;nn(e.error),W("error"),null==S||S(e)}),u.on(i.SESSION_TIME_LIMIT_EXCEEDED,function(n){var e=n;nn(e.error),W("error"),null==M||M(e)}),u.on(i.CHUNK_SIZE_EXCEEDED,function(n){var e=n;nn(e.error),W("error"),null==I||I(e)}),u.on(i.INSUFFICIENT_AUDIO_ACTIVITY,function(n){var e=n;nn(e.error),W("error"),null==D||D(e)}),u.on(i.OPEN,function(){null==R||R()}),u.on(i.CLOSE,function(){W("disconnected"),B.current=null,null==b||b()})}catch(n){var X=n instanceof Error?n.message:"Failed to connect";throw nn(X),W("error"),n}return Promise.resolve()}catch(n){return Promise.reject(n)}},[A,y,w,P,O,U,k,F,_,x,N,V,j,c,a,s,d,v,m,f,h,g,p,T,C,E,S,M,I,D,R,b]),rn=o(function(){var n;null==(n=B.current)||n.close(),B.current=null,W("disconnected")},[]),on=o(function(n,e){if(!B.current)throw new Error("Not connected to Scribe");B.current.send(u({audioBase64:n},e))},[]),tn=o(function(){if(!B.current)throw new Error("Not connected to Scribe");B.current.commit()},[]),ln=o(function(){G([]),K("")},[]),un=o(function(){return B.current},[]);return r(function(){q&&en()},[q,en]),{status:Q,isConnected:"connected"===Q||"transcribing"===Q,isTranscribing:"transcribing"===Q,partialTranscript:z,committedTranscripts:Z,error:$,connect:en,disconnect:rn,sendAudio:on,commit:tn,clearTranscripts:ln,getConnection:un}}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],T=g[1],C=e(!1),E=C[0],S=C[1],M=e("listening"),I=M[0],D=M[1],R=n(t),b=n(i);return R.current=t,b.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=(w=d(y=s((null==n?void 0:n.serverLocation)||c)),P=v(y),h.current=l.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:w,livekitUrl:(null==n?void 0:n.livekitUrl)||(null==m?void 0:m.livekitUrl)||P,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==(C=n.overrides)?void 0:C.client)?p:{},{source:(null==n||null==(E=n.overrides)||null==(E=E.client)?void 0:E.source)||(null==m||null==(M=m.overrides)||null==(M=M.client)?void 0:M.source)||"react_sdk",version:(null==n||null==(I=n.overrides)||null==(I=I.client)?void 0:I.version)||(null==m||null==(A=m.overrides)||null==(A=A.client)?void 0:A.version)||"0.12.1"})}),onConnect:(null==n?void 0:n.onConnect)||(null==m?void 0:m.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==m?void 0:m.onDisconnect),onError:(null==n?void 0:n.onError)||(null==m?void 0:m.onError),onMessage:(null==n?void 0:n.onMessage)||(null==m?void 0:m.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==m?void 0:m.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==m?void 0:m.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==m?void 0:m.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==m?void 0:m.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==m?void 0:m.onInterruption),onAgentToolRequest:(null==n?void 0:n.onAgentToolRequest)||(null==m?void 0:m.onAgentToolRequest),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==m?void 0:m.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==m?void 0:m.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==m?void 0:m.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==m?void 0:m.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==m?void 0:m.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==m?void 0:m.onAgentChatResponsePart),onModeChange:function(e){var r,o=e.mode;D(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;T(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;S(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!==R.current&&f.current.setMicMuted(R.current),void 0!==b.current&&f.current.setVolume({volume:b.current}),f.current.getId()}))}catch(n){return r(!0,n)}var t,i,a,g,p,C,E,M,I,A,y,w,P;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:E,micMuted:t,isSpeaking:"speaking"===I}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,s as parseLocation,m as useConversation,c as useScribe};
2
2
  //# sourceMappingURL=lib.module.js.map
@@ -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 ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Determine if timestamps should be included based on whether the callback was provided\n // We do this instead of providing includeTimestamps as we can assume that if the callback is provided, the user wants timestamps\n const includeTimestamps = !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.0\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","onConnect","onDisconnect","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","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","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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"}
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 ScribeCommitThrottledErrorMessage,\n ScribeTranscriberErrorMessage,\n ScribeUnacceptedTermsErrorMessage,\n ScribeRateLimitedErrorMessage,\n ScribeInputErrorMessage,\n ScribeQueueOverflowErrorMessage,\n ScribeResourceExhaustedErrorMessage,\n ScribeSessionTimeLimitExceededErrorMessage,\n ScribeChunkSizeExceededErrorMessage,\n ScribeInsufficientAudioActivityErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface WordTimestamp {\n text?: string;\n /** Start time in seconds */\n start?: number;\n /** End time in seconds */\n end?: number;\n type?: \"word\" | \"spacing\";\n speaker_id?: string;\n logprob?: number;\n characters?: string[];\n}\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n /** Word-level timestamps (only present when includeTimestamps is enabled) */\n words?: WordTimestamp[];\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n words?: WordTimestamp[];\n }) => void;\n /** Called for any error (also called when specific error callbacks fire) */\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onQuotaExceededError?: (data: { error: string }) => void;\n onCommitThrottledError?: (data: { error: string }) => void;\n onTranscriberError?: (data: { error: string }) => void;\n onUnacceptedTermsError?: (data: { error: string }) => void;\n onRateLimitedError?: (data: { error: string }) => void;\n onInputError?: (data: { error: string }) => void;\n onQueueOverflowError?: (data: { error: string }) => void;\n onResourceExhaustedError?: (data: { error: string }) => void;\n onSessionTimeLimitExceededError?: (data: { error: string }) => void;\n onChunkSizeExceededError?: (data: { error: string }) => void;\n onInsufficientAudioActivityError?: (data: { error: string }) => void;\n\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n\n // Include timestamps\n includeTimestamps?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n\n // Timestamps\n includeTimestamps: defaultIncludeTimestamps,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n // Include timestamps if explicitly requested OR if the callback is provided\n const includeTimestamps =\n runtimeOptions.includeTimestamps ??\n defaultIncludeTimestamps ??\n !!(\n runtimeOptions.onCommittedTranscriptWithTimestamps ||\n onCommittedTranscriptWithTimestamps\n );\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n includeTimestamps,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n includeTimestamps,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n words: message.words,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.QUOTA_EXCEEDED, (data: unknown) => {\n const message = data as ScribeQuotaExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQuotaExceededError?.(message);\n });\n\n connection.on(RealtimeEvents.COMMIT_THROTTLED, (data: unknown) => {\n const message = data as ScribeCommitThrottledErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onCommitThrottledError?.(message);\n });\n\n connection.on(RealtimeEvents.TRANSCRIBER_ERROR, (data: unknown) => {\n const message = data as ScribeTranscriberErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onTranscriberError?.(message);\n });\n\n connection.on(RealtimeEvents.UNACCEPTED_TERMS, (data: unknown) => {\n const message = data as ScribeUnacceptedTermsErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onUnacceptedTermsError?.(message);\n });\n\n connection.on(RealtimeEvents.RATE_LIMITED, (data: unknown) => {\n const message = data as ScribeRateLimitedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onRateLimitedError?.(message);\n });\n\n connection.on(RealtimeEvents.INPUT_ERROR, (data: unknown) => {\n const message = data as ScribeInputErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInputError?.(message);\n });\n\n connection.on(RealtimeEvents.QUEUE_OVERFLOW, (data: unknown) => {\n const message = data as ScribeQueueOverflowErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onQueueOverflowError?.(message);\n });\n\n connection.on(RealtimeEvents.RESOURCE_EXHAUSTED, (data: unknown) => {\n const message = data as ScribeResourceExhaustedErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onResourceExhaustedError?.(message);\n });\n\n connection.on(\n RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,\n (data: unknown) => {\n const message = data as ScribeSessionTimeLimitExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onSessionTimeLimitExceededError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.CHUNK_SIZE_EXCEEDED, (data: unknown) => {\n const message = data as ScribeChunkSizeExceededErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onChunkSizeExceededError?.(message);\n });\n\n connection.on(\n RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,\n (data: unknown) => {\n const message = data as ScribeInsufficientAudioActivityErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onInsufficientAudioActivityError?.(message);\n }\n );\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n defaultIncludeTimestamps,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onQuotaExceededError,\n onCommitThrottledError,\n onTranscriberError,\n onUnacceptedTermsError,\n onRateLimitedError,\n onInputError,\n onQueueOverflowError,\n onResourceExhaustedError,\n onSessionTimeLimitExceededError,\n onChunkSizeExceededError,\n onInsufficientAudioActivityError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number; previousText?: string }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n WordTimestamp,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onAgentToolRequest\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const calculatedLivekitUrl = getLivekitUrlForLocation(\n resolvedServerLocation\n );\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n\n livekitUrl:\n options?.livekitUrl ||\n defaultOptions?.livekitUrl ||\n calculatedLivekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolRequest:\n options?.onAgentToolRequest || defaultOptions?.onAgentToolRequest,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.12.1\";\n"],"names":["useScribe","options","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onError","onAuthError","onQuotaExceededError","onCommitThrottledError","onTranscriberError","onUnacceptedTermsError","onRateLimitedError","onInputError","onQueueOverflowError","onResourceExhaustedError","onSessionTimeLimitExceededError","onChunkSizeExceededError","onInsufficientAudioActivityError","onConnect","onDisconnect","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","defaultIncludeTimestamps","includeTimestamps","connectionRef","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","_ref","_runtimeOptions$inclu","Error","connection","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","words","ERROR","err","AUTH_ERROR","QUOTA_EXCEEDED","COMMIT_THROTTLED","TRANSCRIBER_ERROR","UNACCEPTED_TERMS","RATE_LIMITED","INPUT_ERROR","QUEUE_OVERFLOW","RESOURCE_EXHAUSTED","SESSION_TIME_LIMIT_EXCEEDED","CHUNK_SIZE_EXCEEDED","INSUFFICIENT_AUDIO_ACTIVITY","OPEN","CLOSE","errorMessage","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","_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,r){function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},t.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 r.AudioFormat}}),Object.defineProperty(e,"CommitStrategy",{enumerable:!0,get:function(){return r.CommitStrategy}}),Object.defineProperty(e,"RealtimeEvents",{enumerable:!0,get:function(){return r.RealtimeEvents}}),Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return r.postOverallFeedback}}),e.getLivekitUrlForLocation=u,e.getOriginForLocation=l,e.parseLocation=i,e.useConversation=function(e){void 0===e&&(e={});var a=e.micMuted,c=e.volume,s=e.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(e,o),v=n.useRef(null),f=n.useRef(null),m=n.useState("disconnected"),h=m[0],E=m[1],g=n.useState(!1),p=g[0],C=g[1],S=n.useState("listening"),T=S[0],R=S[1],b=n.useRef(a),M=n.useRef(c);return b.current=a,M.current=c,n.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),n.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),n.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var n,o,a=function(n){return o?n:function(n,o){try{var a=(P=l(A=i((null==e?void 0:e.serverLocation)||s)),O=u(A),f.current=r.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:P,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||O,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:t({},null!=(h=null==d||null==(g=d.overrides)?void 0:g.client)?h:{},null!=(p=null==e||null==(S=e.overrides)?void 0:S.client)?p:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(I=d.overrides)||null==(I=I.client)?void 0:I.source)||"react_sdk",version:(null==e||null==(y=e.overrides)||null==(y=y.client)?void 0:y.version)||(null==d||null==(D=d.overrides)||null==(D=D.client)?void 0:D.version)||"0.12.0"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var r,t=n.mode;R(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;E(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==b.current&&v.current.setMicMuted(b.current),void 0!==M.current&&v.current.setVolume({volume:M.current}),v.current.getId()}))}catch(e){return o(!0,e)}var c,m,h,g,p,S,T,I,y,D,A,P,O;return a&&a.then?a.then(o.bind(null,!1),o.bind(null,!0)):o(!1,a)}(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 c=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return o=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:p,micMuted:a,isSpeaking:"speaking"===T}},e.useScribe=function(e){void 0===e&&(e={});var o=e.onSessionStarted,i=e.onPartialTranscript,l=e.onCommittedTranscript,u=e.onCommittedTranscriptWithTimestamps,a=e.onError,c=e.onAuthError,s=e.onQuotaExceededError,d=e.onCommitThrottledError,v=e.onTranscriberError,f=e.onUnacceptedTermsError,m=e.onRateLimitedError,h=e.onInputError,E=e.onQueueOverflowError,g=e.onResourceExhaustedError,p=e.onSessionTimeLimitExceededError,C=e.onChunkSizeExceededError,S=e.onInsufficientAudioActivityError,T=e.onConnect,R=e.onDisconnect,b=e.token,M=e.modelId,I=e.baseUri,y=e.commitStrategy,D=e.vadSilenceThresholdSecs,A=e.vadThreshold,P=e.minSpeechDurationMs,O=e.minSilenceDurationMs,w=e.languageCode,k=e.microphone,U=e.audioFormat,F=e.sampleRate,_=e.autoConnect,x=void 0!==_&&_,L=n.useRef(null),N=n.useState("disconnected"),V=N[0],j=N[1],q=n.useState(""),B=q[0],H=q[1],Q=n.useState([]),W=Q[0],X=Q[1],z=n.useState(null),K=z[0],Y=z[1];n.useEffect(function(){return function(){var e;null==(e=L.current)||e.close()}},[]);var Z=n.useCallback(function(e){void 0===e&&(e={});try{if(L.current)return console.warn("Already connected"),Promise.resolve();try{j("connecting"),Y(null);var n=e.token||b,t=e.modelId||M;if(!n)throw new Error("Token is required");if(!t)throw new Error("Model ID is required");var _,x=e.microphone||k,N=e.audioFormat||U,V=e.sampleRate||F,q=!(!e.onCommittedTranscriptWithTimestamps&&!u);if(x)_=r.Scribe.connect({token:n,modelId:t,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||y,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||D,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||O,languageCode:e.languageCode||w,microphone:x,includeTimestamps:q});else{if(!N||!V)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");_=r.Scribe.connect({token:n,modelId:t,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||y,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||D,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||O,languageCode:e.languageCode||w,includeTimestamps:q,audioFormat:N,sampleRate:V})}L.current=_,_.on(r.RealtimeEvents.SESSION_STARTED,function(){j("connected"),null==o||o()}),_.on(r.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;H(n.text),j("transcribing"),null==i||i(n)}),_.on(r.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};X(function(e){return[].concat(e,[r])}),H(""),null==l||l(n)}),_.on(r.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};X(function(e){return[].concat(e,[r])}),H(""),null==u||u(n)}),_.on(r.RealtimeEvents.ERROR,function(e){var n=e;Y(n.error),j("error"),null==a||a(new Error(n.error))}),_.on(r.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Y(n.error),j("error"),null==c||c(n)}),_.on(r.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==s||s(n)}),_.on(r.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Y(n.error),j("error"),null==d||d(n)}),_.on(r.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Y(n.error),j("error"),null==v||v(n)}),_.on(r.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Y(n.error),j("error"),null==f||f(n)}),_.on(r.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Y(n.error),j("error"),null==m||m(n)}),_.on(r.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Y(n.error),j("error"),null==h||h(n)}),_.on(r.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Y(n.error),j("error"),null==E||E(n)}),_.on(r.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Y(n.error),j("error"),null==g||g(n)}),_.on(r.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==p||p(n)}),_.on(r.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Y(n.error),j("error"),null==C||C(n)}),_.on(r.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Y(n.error),j("error"),null==S||S(n)}),_.on(r.RealtimeEvents.OPEN,function(){null==T||T()}),_.on(r.RealtimeEvents.CLOSE,function(){j("disconnected"),L.current=null,null==R||R()})}catch(e){var B=e instanceof Error?e.message:"Failed to connect";throw Y(B),j("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,y,D,A,P,O,w,k,U,F,o,i,l,u,a,c,s,d,v,f,m,h,E,g,p,C,S,T,R]),G=n.useCallback(function(){var e;null==(e=L.current)||e.close(),L.current=null,j("disconnected")},[]),J=n.useCallback(function(e,n){if(!L.current)throw new Error("Not connected to Scribe");L.current.send(t({audioBase64:e},n))},[]),$=n.useCallback(function(){if(!L.current)throw new Error("Not connected to Scribe");L.current.commit()},[]),ee=n.useCallback(function(){X([]),H("")},[]),ne=n.useCallback(function(){return L.current},[]);return n.useEffect(function(){x&&Z()},[x,Z]),{status:V,isConnected:"connected"===V||"transcribing"===V,isTranscribing:"transcribing"===V,partialTranscript:B,committedTranscripts:W,error:K,connect:Z,disconnect:G,sendAudio:J,commit:$,clearTranscripts:ee,getConnection:ne}}});
1
+ !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,r){function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var t in r)({}).hasOwnProperty.call(r,t)&&(e[t]=r[t])}return e},t.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 r.AudioFormat}}),Object.defineProperty(e,"CommitStrategy",{enumerable:!0,get:function(){return r.CommitStrategy}}),Object.defineProperty(e,"RealtimeEvents",{enumerable:!0,get:function(){return r.RealtimeEvents}}),Object.defineProperty(e,"postOverallFeedback",{enumerable:!0,get:function(){return r.postOverallFeedback}}),e.getLivekitUrlForLocation=u,e.getOriginForLocation=l,e.parseLocation=i,e.useConversation=function(e){void 0===e&&(e={});var a=e.micMuted,c=e.volume,s=e.serverLocation,d=function(e,n){if(null==e)return{};var r={};for(var t in e)if({}.hasOwnProperty.call(e,t)){if(-1!==n.indexOf(t))continue;r[t]=e[t]}return r}(e,o),v=n.useRef(null),m=n.useRef(null),f=n.useState("disconnected"),h=f[0],E=f[1],g=n.useState(!1),p=g[0],C=g[1],S=n.useState("listening"),T=S[0],R=S[1],b=n.useRef(a),M=n.useRef(c);return b.current=a,M.current=c,n.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),n.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),n.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var n,o,a=function(n){return o?n:function(n,o){try{var a=(P=l(A=i((null==e?void 0:e.serverLocation)||s)),w=u(A),m.current=r.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:P,livekitUrl:(null==e?void 0:e.livekitUrl)||(null==d?void 0:d.livekitUrl)||w,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==(g=d.overrides)?void 0:g.client)?h:{},null!=(p=null==e||null==(S=e.overrides)?void 0:S.client)?p:{},{source:(null==e||null==(T=e.overrides)||null==(T=T.client)?void 0:T.source)||(null==d||null==(I=d.overrides)||null==(I=I.client)?void 0:I.source)||"react_sdk",version:(null==e||null==(y=e.overrides)||null==(y=y.client)?void 0:y.version)||(null==d||null==(D=d.overrides)||null==(D=D.client)?void 0:D.version)||"0.12.1"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolRequest:(null==e?void 0:e.onAgentToolRequest)||(null==d?void 0:d.onAgentToolRequest),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var r,t=n.mode;R(t),null==(r=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||r({mode:t})},onStatusChange:function(n){var r,t=n.status;E(t),null==(r=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||r({status:t})},onCanSendFeedbackChange:function(n){var r,t=n.canSendFeedback;C(t),null==(r=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||r({canSendFeedback:t})}})),Promise.resolve(m.current).then(function(e){return v.current=e,void 0!==b.current&&v.current.setMicMuted(b.current),void 0!==M.current&&v.current.setVolume({volume:M.current}),v.current.getId()}))}catch(e){return o(!0,e)}var c,f,h,g,p,S,T,I,y,D,A,P,w;return a&&a.then?a.then(o.bind(null,!1),o.bind(null,!0)):o(!1,a)}(0,function(e,n){if(m.current=null,e)throw n;return n})};if(null!=(n=v.current)&&n.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 o=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var r;null==(r=v.current)||r.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,r=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},t=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(t&&t.then?t.then(r):r(t))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:p,micMuted:a,isSpeaking:"speaking"===T}},e.useScribe=function(e){void 0===e&&(e={});var o=e.onSessionStarted,i=e.onPartialTranscript,l=e.onCommittedTranscript,u=e.onCommittedTranscriptWithTimestamps,a=e.onError,c=e.onAuthError,s=e.onQuotaExceededError,d=e.onCommitThrottledError,v=e.onTranscriberError,m=e.onUnacceptedTermsError,f=e.onRateLimitedError,h=e.onInputError,E=e.onQueueOverflowError,g=e.onResourceExhaustedError,p=e.onSessionTimeLimitExceededError,C=e.onChunkSizeExceededError,S=e.onInsufficientAudioActivityError,T=e.onConnect,R=e.onDisconnect,b=e.token,M=e.modelId,I=e.baseUri,y=e.commitStrategy,D=e.vadSilenceThresholdSecs,A=e.vadThreshold,P=e.minSpeechDurationMs,w=e.minSilenceDurationMs,O=e.languageCode,k=e.microphone,U=e.audioFormat,F=e.sampleRate,_=e.autoConnect,x=void 0!==_&&_,L=e.includeTimestamps,N=n.useRef(null),V=n.useState("disconnected"),j=V[0],q=V[1],B=n.useState(""),H=B[0],Q=B[1],W=n.useState([]),X=W[0],z=W[1],K=n.useState(null),Y=K[0],Z=K[1];n.useEffect(function(){return function(){var e;null==(e=N.current)||e.close()}},[]);var G=n.useCallback(function(e){void 0===e&&(e={});try{if(N.current)return console.warn("Already connected"),Promise.resolve();try{var n,t;q("connecting"),Z(null);var _=e.token||b,x=e.modelId||M;if(!_)throw new Error("Token is required");if(!x)throw new Error("Model ID is required");var V,j=e.microphone||k,B=e.audioFormat||U,H=e.sampleRate||F,W=null!=(n=null!=(t=e.includeTimestamps)?t:L)?n:!(!e.onCommittedTranscriptWithTimestamps&&!u);if(j)V=r.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||y,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||D,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,microphone:j,includeTimestamps:W});else{if(!B||!H)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");V=r.Scribe.connect({token:_,modelId:x,baseUri:e.baseUri||I,commitStrategy:e.commitStrategy||y,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||D,vadThreshold:e.vadThreshold||A,minSpeechDurationMs:e.minSpeechDurationMs||P,minSilenceDurationMs:e.minSilenceDurationMs||w,languageCode:e.languageCode||O,includeTimestamps:W,audioFormat:B,sampleRate:H})}N.current=V,V.on(r.RealtimeEvents.SESSION_STARTED,function(){q("connected"),null==o||o()}),V.on(r.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;Q(n.text),q("transcribing"),null==i||i(n)}),V.on(r.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};z(function(e){return[].concat(e,[r])}),Q(""),null==l||l(n)}),V.on(r.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,r={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0,words:n.words};z(function(e){return[].concat(e,[r])}),Q(""),null==u||u(n)}),V.on(r.RealtimeEvents.ERROR,function(e){var n=e;Z(n.error),q("error"),null==a||a(new Error(n.error))}),V.on(r.RealtimeEvents.AUTH_ERROR,function(e){var n=e;Z(n.error),q("error"),null==c||c(n)}),V.on(r.RealtimeEvents.QUOTA_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==s||s(n)}),V.on(r.RealtimeEvents.COMMIT_THROTTLED,function(e){var n=e;Z(n.error),q("error"),null==d||d(n)}),V.on(r.RealtimeEvents.TRANSCRIBER_ERROR,function(e){var n=e;Z(n.error),q("error"),null==v||v(n)}),V.on(r.RealtimeEvents.UNACCEPTED_TERMS,function(e){var n=e;Z(n.error),q("error"),null==m||m(n)}),V.on(r.RealtimeEvents.RATE_LIMITED,function(e){var n=e;Z(n.error),q("error"),null==f||f(n)}),V.on(r.RealtimeEvents.INPUT_ERROR,function(e){var n=e;Z(n.error),q("error"),null==h||h(n)}),V.on(r.RealtimeEvents.QUEUE_OVERFLOW,function(e){var n=e;Z(n.error),q("error"),null==E||E(n)}),V.on(r.RealtimeEvents.RESOURCE_EXHAUSTED,function(e){var n=e;Z(n.error),q("error"),null==g||g(n)}),V.on(r.RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==p||p(n)}),V.on(r.RealtimeEvents.CHUNK_SIZE_EXCEEDED,function(e){var n=e;Z(n.error),q("error"),null==C||C(n)}),V.on(r.RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY,function(e){var n=e;Z(n.error),q("error"),null==S||S(n)}),V.on(r.RealtimeEvents.OPEN,function(){null==T||T()}),V.on(r.RealtimeEvents.CLOSE,function(){q("disconnected"),N.current=null,null==R||R()})}catch(e){var X=e instanceof Error?e.message:"Failed to connect";throw Z(X),q("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[b,M,I,y,D,A,P,w,O,k,U,F,L,o,i,l,u,a,c,s,d,v,m,f,h,E,g,p,C,S,T,R]),J=n.useCallback(function(){var e;null==(e=N.current)||e.close(),N.current=null,q("disconnected")},[]),$=n.useCallback(function(e,n){if(!N.current)throw new Error("Not connected to Scribe");N.current.send(t({audioBase64:e},n))},[]),ee=n.useCallback(function(){if(!N.current)throw new Error("Not connected to Scribe");N.current.commit()},[]),ne=n.useCallback(function(){z([]),Q("")},[]),re=n.useCallback(function(){return N.current},[]);return n.useEffect(function(){x&&G()},[x,G]),{status:j,isConnected:"connected"===j||"transcribing"===j,isTranscribing:"transcribing"===j,partialTranscript:H,committedTranscripts:X,error:Y,connect:G,disconnect:J,sendAudio:$,commit:ee,clearTranscripts:ne,getConnection:re}}});
2
2
  //# sourceMappingURL=lib.umd.js.map