/** * Unified public types & interfaces */ export declare enum Environment { cn = "cn", intl = "intl" } export declare enum DrivingServiceMode { /** Driven by SDK directly */ sdk = "sdk", /** Driven by host application */ host = "host" } export declare enum LogLevel { /** Disable all logs */ off = "off", /** Error logs only */ error = "error", /** Warning and error logs */ warning = "warning", /** All logs (info, warning, error), default value */ all = "all" } export interface AudioFormat { /** Channel count, fixed to 1 (mono) */ readonly channelCount: 1; /** Sample rate, supported: 8000, 16000, 22050, 24000, 32000, 44100, 48000, default: 16000 */ readonly sampleRate: number; } export interface Configuration { readonly environment: Environment; /** Driving service mode, default is sdk */ readonly drivingServiceMode?: DrivingServiceMode; /** Log level, default is off */ readonly logLevel?: LogLevel; /** Audio format configuration, default is { channelCount: 1, sampleRate: 16000 } */ readonly audioFormat?: AudioFormat; /** Custom character data API base URL (optional, if provided will be used preferentially, otherwise use environment-configured sdkApiBaseUrl) */ readonly characterApiBaseUrl?: string; } export declare enum LoadProgress { downloading = "downloading", completed = "completed", failed = "failed" } export interface LoadProgressInfo { type: LoadProgress; progress?: number; error?: Error; } export declare enum ConnectionState { disconnected = "disconnected", connecting = "connecting", connected = "connected", failed = "failed" } export declare enum ConversationState { /** Idle state (breathing animation) */ idle = "idle", /** Playing state */ playing = "playing", /** Paused state */ paused = "paused" } export declare enum ErrorCode { /** AppID not recognized (reserved, future appID validation logic) */ appIDUnrecognized = "appIDUnrecognized", /** Session Token invalid (WebSocket close code 4010) */ sessionTokenInvalid = "sessionTokenInvalid", /** Session Token expired (WebSocket close code 4010) */ sessionTokenExpired = "sessionTokenExpired", /** Insufficient balance (WebSocket close code 4001) */ insufficientBalance = "insufficientBalance", /** Concurrent connection limit exceeded (WebSocket close code 4003) */ concurrentLimitExceeded = "concurrentLimitExceeded", /** AvatarID not recognized */ avatarIDUnrecognized = "avatarIDUnrecognized", /** Failed to fetch avatar metadata */ failedToFetchAvatarMetadata = "failedToFetchAvatarMetadata", /** Failed to download avatar assets */ failedToDownloadAvatarAssets = "failedToDownloadAvatarAssets", /** WebSocket connection error (handshake failure, network error) */ websocketError = "websocketError", /** WebSocket connection closed abnormally (close code 1006) */ websocketClosedAbnormally = "websocketClosedAbnormally", /** WebSocket closed with unexpected close code */ websocketClosedUnexpected = "websocketClosedUnexpected", /** Session timeout (WebSocket close code 4002) */ sessionTimeout = "sessionTimeout", /** Connection already in progress */ connectionInProgress = "connectionInProgress", /** Network layer not available (SDK mode required) */ networkLayerNotAvailable = "networkLayerNotAvailable", /** Failed to start playback */ playbackStartFailed = "playbackStartFailed", /** Playback initialization failed */ playbackInitFailed = "playbackInitFailed", /** Audio-only playback initialization failed */ audioOnlyInitFailed = "audioOnlyInitFailed", /** No audio data to play */ noAudio = "noAudio", /** Audio context not initialized */ audioContextNotInitialized = "audioContextNotInitialized", /** Animation player not initialized */ animationPlayerNotInitialized = "animationPlayerNotInitialized", /** Server-side error */ serverError = "serverError" } export declare class AvatarError extends Error { code: ErrorCode; constructor(message: string, code: ErrorCode); } export interface CameraConfig { position: [number, number, number]; target: [number, number, number]; fov: number; near: number; far: number; up?: [number, number, number]; aspect?: number; } /** * Post-processing parameter configuration * Used to overlay in real-time on animation parameters returned by the server */ export interface PostProcessingConfig { /** Rotation (Euler angles, in radians) */ rotation?: { x?: number; y?: number; z?: number; }; /** Translation (position offset) */ translation?: { x?: number; y?: number; z?: number; }; /** Neck pose offset (in radians) */ neckPose?: { x?: number; y?: number; z?: number; weightX?: number; weightY?: number; weightZ?: number; }; /** Jaw pose offset (in radians) */ jawPose?: { x?: number; y?: number; z?: number; weight?: number; }; /** Eye pose offset (in radians) */ eyePose?: { x?: number; y?: number; z?: number; weightX?: number; weightY?: number; weightZ?: number; }; /** Eye blink value (-1.0 to 1.0, larger value means more closed) */ eyeBlink?: number; /** Expression weight (0.0-2.0, 0=no expression, 1=normal, >1=enhanced) */ expressionWeight?: number; /** Eye tracking complete configuration (real-time control of eye_focus, must provide complete configuration) */ eyefocus?: { enabled: boolean; auto_eyelid_adjustment?: boolean; eyelid_threshold?: number; targets?: number[]; }; } export interface FlameInfo { vertexCount: number; faceCount: number; jointCount: number; } export interface CharacterInfo { pointCount: number; hasAnimation: boolean; } export * from './character'; export type { FrameRateInfo, FrameRenderInfo } from '../performance/FrameRateMonitor';