{"version":3,"file":"lib.cjs","sources":["../src/version.ts","../src/index.ts"],"sourcesContent":["// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.4.3\";\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n  Conversation,\n  Mode,\n  SessionConfig,\n  Callbacks,\n  Options,\n  Status,\n  ClientToolsConfig,\n  InputConfig,\n} from \"@elevenlabs/client\";\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 type {\n  Role,\n  Mode,\n  Status,\n  SessionConfig,\n  DisconnectionDetails,\n  Language,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\nexport type HookOptions = Partial<\n  SessionConfig &\n    HookCallbacks &\n    ClientToolsConfig &\n    InputConfig & {\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  | \"onDebug\"\n  | \"onUnhandledClientToolCall\"\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  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\n        lockRef.current = Conversation.startSession({\n          ...(defaultOptions ?? {}),\n          ...(options ?? {}),\n          origin,\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: options?.onUnhandledClientToolCall || defaultOptions?.onUnhandledClientToolCall,\n          onModeChange: ({ mode }) => {\n            setMode(mode);\n          },\n          onStatusChange: ({ status }) => {\n            setStatus(status);\n          },\n          onCanSendFeedbackChange: ({ canSendFeedback }) => {\n            setCanSendFeedback(canSendFeedback);\n          },\n        } as Options);\n\n        conversationRef.current = await lockRef.current;\n        // Persist controlled state between sessions\n        if (micMuted !== undefined) {\n          conversationRef.current.setMicMuted(micMuted);\n        }\n        if (volume !== undefined) {\n          conversationRef.current.setVolume({ volume });\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    status,\n    canSendFeedback,\n    micMuted,\n    isSpeaking: mode === \"speaking\",\n  };\n}\n\n// const con = useConversation({agentId: \"\"})\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","useEffect","_conversationRef$curr","undefined","current","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","Conversation","_extends","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onModeChange","_ref","onStatusChange","_ref2","onCanSendFeedbackChange","_ref3","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref4","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","isSpeaking"],"mappings":"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"}