UNPKG

@voxket-ai/voxket-live

Version:

A React widget for embedding Voxket-powered audio/video/chat experiences.

203 lines (202 loc) 8.95 kB
import { Room, ConnectionState } from 'livekit-client'; import { VoxketEventEmitter } from './event-emitter'; import { PluginManager } from '../plugins/plugin-system'; import { RenderUIOptions } from './ui-renderer'; import { LiveAvatarManager, LiveAvatarClientConfig } from './liveavatar-manager'; import { VoxketConfig, SessionConfig, VoxketSession, VoxketEvents, SessionState, SessionMetrics, AgentInfo, ParticipantInfo, ChatMessage, TranscriptionSegment, ModalityValue, VoxketError } from '../types/core'; import { VoxketInteractiveView, ViewPresentationMode, InteractiveUIState, RpcEvents } from '../types/rpc'; export interface VoxketClientConfig extends VoxketConfig { agentId?: string; participantName?: string; modalities?: ModalityValue[]; participantMetadata?: Record<string, any>; /** LiveAvatar FULL mode configuration — when provided, video modality uses LiveAvatar */ liveAvatarConfig?: LiveAvatarClientConfig; /** * Existing Voxket session ID to join instead of creating a new one. * When set, fetchConnectionDetails() calls the join endpoint instead of create. */ sessionId?: string; onConnected?: () => void; onDisconnected?: (reason?: string) => void; onError?: (error: VoxketError) => void; onMessageReceived?: (message: ChatMessage) => void; onTranscriptionReceived?: (transcription: TranscriptionSegment) => void; onSessionStateChanged?: (state: SessionState) => void; onSessionStart?: (sessionId: string) => void; onSessionEnd?: (metrics: any) => void; onUserJoined?: (userId: string) => void; onUserLeft?: (userId: string) => void; } /** * VoxketClient * * Main client class that orchestrates all Voxket functionality. * Uses specialized managers for different concerns: * - ChatManager: Chat messages and attachments * - MediaManager: Camera, microphone, screen share * - ConnectionManager: Room connection and participants * - StreamHandlerManager: Text/byte stream handlers * - UIRenderer: React UI rendering * - AgentManager: Agent state and info * - RpcManager: RPC method handling * - PluginManager: Plugin system */ export declare class VoxketClient extends VoxketEventEmitter<VoxketEvents & RpcEvents> { private config; private pluginManager; private rpcManager; private chatManager; private mediaManager; private connectionManager; private streamHandlerManager; private uiRenderer; private agentManager; private liveAvatarManager; private currentSession; constructor(config: VoxketClientConfig); /** * Setup event listeners for various events */ private setupEventListeners; /** * Setup RPC event forwarding from RpcManager */ private setupRpcEventForwarding; addConsentLog(consentType: string, consentVersion: string, agentId: string, modalities: ModalityValue[]): Promise<any>; connect(agentId?: string, participantName?: string, modalities?: ModalityValue[], participantMetadata?: Record<string, any>): Promise<{ serverUrl: string; participantToken: string; voxketSessionId: string; agentInfo?: AgentInfo; }>; disconnect(): Promise<void>; createSession(config: SessionConfig): Promise<VoxketSession>; startSession(agentId?: string, options?: { participantName?: string; modalities?: ModalityValue[]; metadata?: Record<string, any>; participantMetadata?: Record<string, any>; }): Promise<VoxketSession>; endSession(): Promise<SessionMetrics | null>; getCurrentSession(): VoxketSession | null; getSessionMetrics(): SessionMetrics | null; sendMessage(message: string, metadata?: Record<string, any>): Promise<void>; sendChatMessage(message: string, metadata?: Record<string, any>): Promise<void>; sendAttachments(files: File[], metadata?: Record<string, any>): Promise<void>; sendAttachment(file: File, metadata?: Record<string, any>): Promise<void>; getChatMessages(): ChatMessage[]; addChatMessage(message: ChatMessage): void; updateChatMessage(updatedMessage: ChatMessage): void; clearChatMessages(): void; toggleMicrophone(enabled?: boolean): Promise<void>; setMicrophoneEnabled(enabled: boolean): Promise<void>; toggleCamera(enabled?: boolean): Promise<void>; setCameraEnabled(enabled: boolean): Promise<void>; enableCamera(): Promise<void>; disableCamera(): Promise<void>; switchCamera(): Promise<void>; getCurrentCameraFacingMode(): 'user' | 'environment'; startScreenShare(): Promise<void>; stopScreenShare(): Promise<void>; getAudioInputDevices(): Promise<MediaDeviceInfo[]>; getVideoInputDevices(): Promise<MediaDeviceInfo[]>; setAudioInputDevice(deviceId: string): Promise<void>; setVideoInputDevice(deviceId: string): Promise<void>; get isMicrophoneEnabled(): boolean; get isCameraEnabled(): boolean; get isScreenShareEnabled(): boolean; getMicrophoneTrack(): import('livekit-client').LocalTrack<import("livekit-client").Track.Kind> | null | undefined; getCameraTrack(): import('livekit-client').LocalTrack<import("livekit-client").Track.Kind> | null | undefined; getScreenShareTrack(): import('livekit-client').LocalTrack<import("livekit-client").Track.Kind> | null | undefined; getAgentAudioTrack(): { source: import("livekit-client").Track.Source; participant: import('livekit-client').RemoteParticipant; publication: import('livekit-client').RemoteTrackPublication; } | null; getAgentVideoTrack(): { source: import("livekit-client").Track.Source; participant: import('livekit-client').RemoteParticipant; publication: import('livekit-client').RemoteTrackPublication; } | null; getVideoTrackRefs(): { source: import("livekit-client").Track.Source; participant: any; publication: any; }[]; getCameraTrackRefs(): { source: import("livekit-client").Track.Source; participant: any; publication: any; }[]; getScreenShareTrackRefs(): { source: import("livekit-client").Track.Source; participant: any; publication: any; }[]; getPublishPermissions(): { camera: boolean; microphone: boolean; screenShare: boolean; data: boolean; }; canPublishSource(source: 'camera' | 'microphone' | 'screenShare'): boolean; getLocalParticipant(): import('livekit-client').LocalParticipant | null; getRemoteParticipants(): import('livekit-client').RemoteParticipant[]; getParticipants(): ParticipantInfo[]; getRoom(): Room | null; getConnectionState(): ConnectionState; get connected(): boolean; getCurrentAgentInfo(): AgentInfo | null; getIsAgentConnected(): boolean; getAgentState(): 'idle' | 'thinking' | 'speaking'; renderUI(options?: RenderUIOptions): void; removeUI(target?: string | HTMLElement): void; removeAllUI(): void; registerFrontendRPC(methodName: string, component: VoxketInteractiveView, presentationMode?: ViewPresentationMode): Promise<void>; getCurrentInteraction(): InteractiveUIState | null; dismissCurrentInteraction(): void; getRegisteredRpcMethods(): string[]; unregisterRpcMethod(methodName: string): void; /** * Get the LiveAvatarManager instance */ getLiveAvatarManager(): LiveAvatarManager; /** * Set LiveAvatar config on an existing client instance. * Useful when a pre-created VoxketClient is passed to the widget * and liveAvatarConfig needs to be applied after construction. */ setLiveAvatarConfig(config: LiveAvatarClientConfig): void; /** * Check if the current session is using LiveAvatar */ isLiveAvatarSession(): boolean; /** * Attach the LiveAvatar video/audio stream to an HTML media element */ attachLiveAvatar(element: HTMLMediaElement): void; /** * Send a message to the LiveAvatar (triggers LLM response) */ sendLiveAvatarMessage(message: string): void; /** * Make the LiveAvatar repeat specific text (TTS only) */ repeatLiveAvatar(text: string): void; /** * Interrupt the LiveAvatar's current speech */ interruptLiveAvatar(): void; registerPlugin(plugin: any): void; getPluginManager(): PluginManager; registerEventListener<K extends keyof (VoxketEvents & RpcEvents)>(eventName: K, callback: (data: any) => void): () => void; registerEventEmitter(topic: string, handler: (data: string) => void): void; getRegisteredEventEmitters(): string[]; hasEventEmitter(topic: string): boolean; updateConfig(updates: Partial<VoxketClientConfig>): void; setParticipantMetadata(metadata: Record<string, any>): void; getParticipantMetadata(): Record<string, any> | undefined; startRecording(): Promise<void>; stopRecording(): Promise<void>; }