{"version":3,"sources":["../src/streaming-avatar-store.ts","../src/useConnectionQuality.ts","../src/useConversationState.ts","../src/useInterrupt.ts","../src/useMessageHistory.ts","../src/useVoiceChat.ts","../src/useStreamingAvatarSession.ts","../src/useTextChat.ts"],"names":["StreamingAvatarSessionState","MessageSender","StreamingAvatarStore","ConnectionQuality","key","value","listener","config","message","content","messages","updatedMessages","lastMessage","avatarStore","useAvatarStore","forceUpdate","useState","useEffect","useAvatarStoreActions","configure","reset","useConnectionQuality","useConversationState","state","startListening","useCallback","stopListening","useInterrupt","useMessageHistory","useVoiceChat","setState","startVoiceChat","isInputAudioMuted","stopVoiceChat","muteInputAudio","unmuteInputAudio","currentSender","useStreamingAvatarSession","clearMessages","addMessage","updateLastMessage","init","token","onStreamReady","onStreamDisconnected","onAvatarStartTalking","onAvatarStopTalking","onAvatarTalkingMessage","onAvatarEndMessage","onUserStartTalking","onUserStopTalking","onUserTalkingMessage","onUserEndMessage","default","StreamingEvents","e","handleUserTalkingMessage","detail","generateId","handleStreamingTalkingMessage","handleEndMessage","handleStream","stop","start","useTextChat","sendMessage","TaskType","TaskMode","sendMessageSync","repeatMessage","repeatMessageSync"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { RefObject } from \"react\";\nimport { useEffect, useState } from \"react\";\n\nimport type { StreamingAvatar } from \"./types\";\nimport { ConnectionQuality } from \"./types\";\n\nexport enum StreamingAvatarSessionState {\n  INACTIVE = \"inactive\",\n  CONNECTING = \"connecting\",\n  CONNECTED = \"connected\",\n}\n\nexport enum MessageSender {\n  CLIENT = \"CLIENT\",\n  AVATAR = \"AVATAR\",\n}\n\nexport interface Message {\n  id: string;\n  sender: MessageSender;\n  content: string;\n}\n\ninterface StreamingAvatarState {\n  avatarRef: RefObject<StreamingAvatar | null>;\n  basePath: string | undefined;\n\n  isMuted: boolean;\n  isVoiceChatLoading: boolean;\n  isVoiceChatActive: boolean;\n\n  sessionState: StreamingAvatarSessionState;\n  stream: MediaStream | null;\n\n  messages: Message[];\n\n  isListening: boolean;\n  isUserTalking: boolean;\n  isAvatarTalking: boolean;\n\n  connectionQuality: ConnectionQuality;\n}\n\ntype StateListener = () => void;\n\nclass StreamingAvatarStore {\n  private state: StreamingAvatarState;\n  private listeners: Set<StateListener> = new Set();\n\n  constructor() {\n    this.state = {\n      avatarRef: { current: null },\n      basePath: undefined,\n      isMuted: true,\n      isVoiceChatLoading: false,\n      isVoiceChatActive: false,\n      sessionState: StreamingAvatarSessionState.INACTIVE,\n      stream: null,\n      messages: [],\n      isListening: false,\n      isUserTalking: false,\n      isAvatarTalking: false,\n      connectionQuality: ConnectionQuality.UNKNOWN,\n    };\n  }\n\n  getState(): StreamingAvatarState {\n    return this.state;\n  }\n\n  setState<K extends keyof StreamingAvatarState>(\n    key: K,\n    value: StreamingAvatarState[K]\n  ): void {\n    this.state[key] = value;\n    this.notifyListeners();\n  }\n\n  subscribe(listener: StateListener): () => void {\n    this.listeners.add(listener);\n\n    return () => {\n      this.listeners.delete(listener);\n    };\n  }\n\n  private notifyListeners(): void {\n    this.listeners.forEach((listener) => {\n      listener();\n    });\n  }\n\n  configure(config: { basePath?: string }): void {\n    if (config.basePath !== undefined) {\n      this.setState(\"basePath\", config.basePath);\n    }\n  }\n\n  reset(): void {\n    this.state = {\n      avatarRef: { current: null },\n      basePath: undefined,\n      isMuted: true,\n      isVoiceChatLoading: false,\n      isVoiceChatActive: false,\n      sessionState: StreamingAvatarSessionState.INACTIVE,\n      stream: null,\n      messages: [],\n      isListening: false,\n      isUserTalking: false,\n      isAvatarTalking: false,\n      connectionQuality: ConnectionQuality.UNKNOWN,\n    };\n    this.notifyListeners();\n  }\n\n  addMessage(message: Message): void {\n    this.setState(\"messages\", [...this.state.messages, message]);\n  }\n\n  updateLastMessage(content: string): void {\n    const messages = this.state.messages;\n\n    if (messages.length > 0) {\n      const updatedMessages = [...messages];\n\n      const lastMessage = updatedMessages[updatedMessages.length - 1];\n      if (lastMessage) {\n        updatedMessages[updatedMessages.length - 1] = {\n          ...lastMessage,\n          content,\n        };\n      }\n      this.setState(\"messages\", updatedMessages);\n    }\n  }\n\n  clearMessages(): void {\n    this.setState(\"messages\", []);\n  }\n}\n\nconst avatarStore = new StreamingAvatarStore();\n\nexport function useAvatarStore(): StreamingAvatarState {\n  const [, forceUpdate] = useState({});\n\n  useEffect(() => {\n    const unsubscribe = avatarStore.subscribe(() => {\n      forceUpdate({});\n    });\n\n    return unsubscribe;\n  }, []);\n\n  return avatarStore.getState();\n}\n\nexport function useAvatarStoreActions() {\n  const setState = <K extends keyof StreamingAvatarState>(\n    key: K,\n    value: StreamingAvatarState[K]\n  ) => {\n    avatarStore.setState(key, value);\n  };\n\n  return {\n    setState,\n    configure: (config: { basePath?: string }) => avatarStore.configure(config),\n    addMessage: (message: Message) => avatarStore.addMessage(message),\n    updateLastMessage: (content: string) =>\n      avatarStore.updateLastMessage(content),\n    clearMessages: () => avatarStore.clearMessages(),\n  };\n}\n\nexport function configure(config: { basePath?: string }): void {\n  avatarStore.configure(config);\n}\n\nexport function reset(): void {\n  avatarStore.reset();\n}\n\nexport { avatarStore };\n","import { useAvatarStore } from \"./streaming-avatar-store\";\n\nexport const useConnectionQuality = () => {\n  const state = useAvatarStore();\n\n  return {\n    connectionQuality: state.connectionQuality,\n  };\n};\n","import { useCallback } from \"react\";\n\nimport { useAvatarStore } from \"./streaming-avatar-store\";\n\nexport const useConversationState = () => {\n  const state = useAvatarStore();\n\n  const startListening = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current.startListening();\n  }, [state.avatarRef]);\n\n  const stopListening = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current.stopListening();\n  }, [state.avatarRef]);\n\n  return {\n    isAvatarListening: state.isListening,\n    startListening,\n    stopListening,\n    isUserTalking: state.isUserTalking,\n    isAvatarTalking: state.isAvatarTalking,\n  };\n};\n","import { useCallback } from \"react\";\n\nimport { useAvatarStore } from \"./streaming-avatar-store\";\n\nexport const useInterrupt = () => {\n  const state = useAvatarStore();\n\n  const interrupt = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current.interrupt();\n  }, [state.avatarRef]);\n\n  return { interrupt };\n};\n","import { useAvatarStore } from \"./streaming-avatar-store\";\n\nexport const useMessageHistory = () => {\n  const state = useAvatarStore();\n\n  return { messages: state.messages };\n};\n","import { useCallback } from \"react\";\n\nimport {\n  useAvatarStore,\n  useAvatarStoreActions,\n} from \"./streaming-avatar-store\";\n\nexport const useVoiceChat = () => {\n  const state = useAvatarStore();\n  const { setState } = useAvatarStoreActions();\n\n  const startVoiceChat = useCallback(\n    async (isInputAudioMuted?: boolean) => {\n      if (!state.avatarRef.current) return;\n      setState(\"isVoiceChatLoading\", true);\n\n      const config: { isInputAudioMuted?: boolean } = {};\n      if (isInputAudioMuted !== undefined) {\n        config.isInputAudioMuted = isInputAudioMuted;\n      }\n\n      await state.avatarRef.current?.startVoiceChat(config);\n      setState(\"isVoiceChatLoading\", false);\n      setState(\"isVoiceChatActive\", true);\n      setState(\"isMuted\", !!isInputAudioMuted);\n    },\n    [state.avatarRef, setState]\n  );\n\n  const stopVoiceChat = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current?.closeVoiceChat();\n    setState(\"isVoiceChatActive\", false);\n    setState(\"isMuted\", true);\n  }, [state.avatarRef, setState]);\n\n  const muteInputAudio = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current?.muteInputAudio();\n    setState(\"isMuted\", true);\n  }, [state.avatarRef, setState]);\n\n  const unmuteInputAudio = useCallback(() => {\n    if (!state.avatarRef.current) return;\n    state.avatarRef.current?.unmuteInputAudio();\n    setState(\"isMuted\", false);\n  }, [state.avatarRef, setState]);\n\n  return {\n    startVoiceChat,\n    stopVoiceChat,\n    muteInputAudio,\n    unmuteInputAudio,\n    isMuted: state.isMuted,\n    isVoiceChatActive: state.isVoiceChatActive,\n    isVoiceChatLoading: state.isVoiceChatLoading,\n  };\n};\n","import { generateId } from \"@react-ai-avatar-kit/core\";\nimport { useCallback } from \"react\";\n\nimport {\n  MessageSender,\n  StreamingAvatarSessionState,\n  useAvatarStore,\n  useAvatarStoreActions,\n} from \"./streaming-avatar-store\";\nimport {\n  type ConnectionQuality,\n  type InitEventCallback,\n  type StartAvatarRequest,\n  StreamingAvatar,\n  StreamingEvents,\n  type StreamingTalkingMessageEvent,\n  type UserTalkingMessageEvent,\n} from \"./types\";\nimport { useMessageHistory } from \"./useMessageHistory\";\nimport { useVoiceChat } from \"./useVoiceChat\";\n\nlet currentSender: MessageSender | null = null;\n\nexport const useStreamingAvatarSession = () => {\n  const state = useAvatarStore();\n  const { setState, clearMessages, addMessage, updateLastMessage } =\n    useAvatarStoreActions();\n  const { stopVoiceChat } = useVoiceChat();\n\n  useMessageHistory();\n\n  const init = useCallback(\n    (\n      token: string,\n      {\n        onStreamReady,\n        onStreamDisconnected,\n        onAvatarStartTalking,\n        onAvatarStopTalking,\n        onAvatarTalkingMessage,\n        onAvatarEndMessage,\n        onUserStartTalking,\n        onUserStopTalking,\n        onUserTalkingMessage,\n        onUserEndMessage,\n      }: InitEventCallback = {}\n    ) => {\n      const config: { token: string; basePath?: string } = { token };\n      if (state.basePath !== undefined) {\n        config.basePath = state.basePath;\n      }\n\n      state.avatarRef.current = new StreamingAvatar(config);\n\n      if (onStreamReady) {\n        state.avatarRef.current.on(StreamingEvents.STREAM_READY, (e) => {\n          onStreamReady(e);\n        });\n      }\n\n      if (onStreamDisconnected) {\n        state.avatarRef.current.on(StreamingEvents.STREAM_DISCONNECTED, (e) => {\n          onStreamDisconnected(e);\n        });\n      }\n\n      if (onAvatarStartTalking) {\n        state.avatarRef.current.on(\n          StreamingEvents.AVATAR_START_TALKING,\n          (e) => {\n            onAvatarStartTalking(e);\n          }\n        );\n      }\n\n      if (onAvatarStopTalking) {\n        state.avatarRef.current.on(StreamingEvents.AVATAR_STOP_TALKING, (e) => {\n          onAvatarStopTalking(e);\n        });\n      }\n\n      if (onAvatarTalkingMessage) {\n        state.avatarRef.current.on(\n          StreamingEvents.AVATAR_TALKING_MESSAGE,\n          (e) => {\n            onAvatarTalkingMessage(e);\n          }\n        );\n      }\n\n      if (onAvatarEndMessage) {\n        state.avatarRef.current.on(StreamingEvents.AVATAR_END_MESSAGE, (e) => {\n          onAvatarEndMessage(e);\n        });\n      }\n\n      if (onUserStartTalking) {\n        state.avatarRef.current.on(StreamingEvents.USER_START, (e) => {\n          onUserStartTalking(e);\n        });\n      }\n\n      if (onUserStopTalking) {\n        state.avatarRef.current.on(StreamingEvents.USER_STOP, (e) => {\n          onUserStopTalking(e);\n        });\n      }\n\n      if (onUserTalkingMessage) {\n        state.avatarRef.current.on(\n          StreamingEvents.USER_TALKING_MESSAGE,\n          (e) => {\n            onUserTalkingMessage(e);\n          }\n        );\n      }\n\n      if (onUserEndMessage) {\n        state.avatarRef.current.on(StreamingEvents.USER_END_MESSAGE, (e) => {\n          onUserEndMessage(e);\n        });\n      }\n\n      return state.avatarRef.current;\n    },\n    [state.basePath, state.avatarRef]\n  );\n\n  const handleUserTalkingMessage = useCallback(\n    ({ detail }: { detail: UserTalkingMessageEvent }) => {\n      if (currentSender === MessageSender.CLIENT) {\n        const lastMessage = state.messages[state.messages.length - 1];\n\n        if (lastMessage) {\n          updateLastMessage([lastMessage.content, detail.message].join(\"\"));\n        }\n      } else {\n        currentSender = MessageSender.CLIENT;\n        addMessage({\n          id: generateId(),\n          sender: MessageSender.CLIENT,\n          content: detail.message,\n        });\n      }\n    },\n    [state.messages, addMessage, updateLastMessage]\n  );\n\n  const handleStreamingTalkingMessage = useCallback(\n    ({ detail }: { detail: StreamingTalkingMessageEvent }) => {\n      if (currentSender === MessageSender.AVATAR) {\n        const lastMessage = state.messages[state.messages.length - 1];\n\n        if (lastMessage) {\n          updateLastMessage([lastMessage.content, detail.message].join(\"\"));\n        }\n      } else {\n        currentSender = MessageSender.AVATAR;\n        addMessage({\n          id: generateId(),\n          sender: MessageSender.AVATAR,\n          content: detail.message,\n        });\n      }\n    },\n    [state.messages, addMessage, updateLastMessage]\n  );\n\n  const handleEndMessage = useCallback(() => {\n    currentSender = null;\n  }, []);\n\n  const handleStream = useCallback(\n    ({ detail }: { detail: MediaStream }) => {\n      setState(\"stream\", detail);\n      setState(\"sessionState\", StreamingAvatarSessionState.CONNECTED);\n    },\n    [setState]\n  );\n\n  const stop = useCallback(async () => {\n    state.avatarRef.current?.off(StreamingEvents.STREAM_READY, handleStream);\n    state.avatarRef.current?.off(StreamingEvents.STREAM_DISCONNECTED, stop);\n    clearMessages();\n    currentSender = null;\n    stopVoiceChat();\n    setState(\"isListening\", false);\n    setState(\"isUserTalking\", false);\n    setState(\"isAvatarTalking\", false);\n    setState(\"stream\", null);\n    await state.avatarRef.current?.stopAvatar();\n    setState(\"sessionState\", StreamingAvatarSessionState.INACTIVE);\n  }, [handleStream, setState, state.avatarRef, stopVoiceChat, clearMessages]);\n\n  const start = useCallback(\n    async (config: StartAvatarRequest, token?: string) => {\n      if (state.sessionState !== StreamingAvatarSessionState.INACTIVE) {\n        throw new Error(\"There is already an active session\");\n      }\n\n      if (!state.avatarRef.current) {\n        if (!token) {\n          throw new Error(\"Token is required\");\n        }\n        init(token);\n      }\n\n      if (!state.avatarRef.current) {\n        throw new Error(\"Avatar is not initialized\");\n      }\n\n      setState(\"sessionState\", StreamingAvatarSessionState.CONNECTING);\n      state.avatarRef.current.on(StreamingEvents.STREAM_READY, handleStream);\n      state.avatarRef.current.on(StreamingEvents.STREAM_DISCONNECTED, stop);\n      state.avatarRef.current.on(\n        StreamingEvents.CONNECTION_QUALITY_CHANGED,\n        ({ detail }: { detail: ConnectionQuality }) =>\n          setState(\"connectionQuality\", detail)\n      );\n      state.avatarRef.current.on(StreamingEvents.USER_START, () => {\n        setState(\"isUserTalking\", true);\n      });\n      state.avatarRef.current.on(StreamingEvents.USER_STOP, () => {\n        setState(\"isUserTalking\", false);\n      });\n      state.avatarRef.current.on(StreamingEvents.AVATAR_START_TALKING, () => {\n        setState(\"isAvatarTalking\", true);\n      });\n      state.avatarRef.current.on(StreamingEvents.AVATAR_STOP_TALKING, () => {\n        setState(\"isAvatarTalking\", false);\n      });\n      state.avatarRef.current.on(\n        StreamingEvents.USER_TALKING_MESSAGE,\n        handleUserTalkingMessage\n      );\n      state.avatarRef.current.on(\n        StreamingEvents.AVATAR_TALKING_MESSAGE,\n        handleStreamingTalkingMessage\n      );\n      state.avatarRef.current.on(\n        StreamingEvents.USER_END_MESSAGE,\n        handleEndMessage\n      );\n      state.avatarRef.current.on(\n        StreamingEvents.AVATAR_END_MESSAGE,\n        handleEndMessage\n      );\n\n      await state.avatarRef.current.createStartAvatar(config);\n\n      return state.avatarRef.current;\n    },\n    [\n      init,\n      handleStream,\n      stop,\n      setState,\n      state.avatarRef,\n      state.sessionState,\n      handleUserTalkingMessage,\n      handleStreamingTalkingMessage,\n      handleEndMessage,\n    ]\n  );\n\n  return {\n    avatarRef: state.avatarRef,\n    sessionState: state.sessionState,\n    stream: state.stream,\n    initAvatar: init,\n    startAvatar: start,\n    stopAvatar: stop,\n  };\n};\n","import { useCallback } from \"react\";\n\nimport { useAvatarStore } from \"./streaming-avatar-store\";\nimport { TaskMode, TaskType } from \"./types\";\n\nexport const useTextChat = () => {\n  const state = useAvatarStore();\n\n  const sendMessage = useCallback(\n    (message: string) => {\n      if (!state.avatarRef.current) return;\n      state.avatarRef.current.speak({\n        text: message,\n        taskType: TaskType.TALK,\n        taskMode: TaskMode.ASYNC,\n      });\n    },\n    [state.avatarRef]\n  );\n\n  const sendMessageSync = useCallback(\n    async (message: string) => {\n      if (!state.avatarRef.current) return;\n\n      return await state.avatarRef.current?.speak({\n        text: message,\n        taskType: TaskType.TALK,\n        taskMode: TaskMode.SYNC,\n      });\n    },\n    [state.avatarRef]\n  );\n\n  const repeatMessage = useCallback(\n    (message: string) => {\n      if (!state.avatarRef.current) return;\n\n      return state.avatarRef.current?.speak({\n        text: message,\n        taskType: TaskType.REPEAT,\n        taskMode: TaskMode.ASYNC,\n      });\n    },\n    [state.avatarRef]\n  );\n\n  const repeatMessageSync = useCallback(\n    async (message: string) => {\n      if (!state.avatarRef.current) return;\n\n      return await state.avatarRef.current?.speak({\n        text: message,\n        taskType: TaskType.REPEAT,\n        taskMode: TaskMode.SYNC,\n      });\n    },\n    [state.avatarRef]\n  );\n\n  return {\n    sendMessage,\n    sendMessageSync,\n    repeatMessage,\n    repeatMessageSync,\n  };\n};\n"]}