declare namespace hyExt {

/**
 * 报错信息
 * @property message - 报错信息
 * @property stack - 报错堆栈
 * @property line - 报错行
 * @property column - 报错列
 * @property Error - 报错原对象
 */
type ErrorInfo = {
    message: string;
    stack: string[];
    line: number;
    column: number;
    Error: any;
};

/**
 * @param err - 报错信息
 */
type ErrorCallback = (err: ErrorInfo) => void;

/**
 * 监听全局报错
 * @param callback - 报错监听
 * @returns 调用结果
 */
function onError(callback: ErrorCallback): void;

/**
 * 取消监听全局报错
 * @param [callback] - 要移除的监听
 * @returns 调用结果
 */
function offError(callback?: ErrorCallback): void;

/**
 * 本地持久化
 */
namespace localStorage {
    /**
     * 获取存储信息
     * @param key - 存储的键
     * @returns 返回存储的信息
     */
    function getItem(key: string): Promise<any>;
    /**
     * 设置存储信息
     * @param key - 存储的键
     * @param value - 存储的值
     * @returns 调用结果
     */
    function setItem(key: string, value: any): Promise<void>;
    /**
     * 移除存储信息
     * @param key - 存储的键
     * @returns 调用结果
     */
    function removeItem(key: string): Promise<void>;
    /**
     * 获取所有存储的键
     * @returns 调用结果
     */
    function clear(): Promise<void>;
}

/**
 * 日志实例
 */
namespace logger {
    /**
     * Debug日志
     * @param msg - 任意传参
     * @returns 调用结果
     */
    function debug(...msg: any[]): void;
    /**
     * 信息日志
     * @param msg - 任意传参
     * @returns 调用结果
     */
    function info(...msg: any[]): void;
    /**
     * 警告日志
     * @param msg - 任意传参
     * @returns 调用结果
     */
    function warn(...msg: any[]): void;
    /**
     * 报错日志
     * @param msg - 任意传参
     * @returns 调用结果
     */
    function error(...msg: any[]): void;
    /**
     * 设置报错等级
     * @param level - 日志等级
     * @returns 调用结果
     */
    function setLevel(level: LogLevel): Promise<void>;
    /**
     * 设置日志配置
     * @param config - 输入参数
     * @returns 调用结果
     */
    function setConfig(config: LoggerConfig): Promise<boolean>;
}

/**
 * 日志等级；取值说明:
 * 1 Debug放开所有;
 * 2 Info消息以上;
 * 3 Warn警告以上;
 * 4 Error报错以上;
 */
type LogLevel = number;

/**
 * 配置信息
 * @property [level] - 日志上报等级
 * @property [printLevel] - 日志打印等级
 */
type LoggerConfig = {
    level?: LogLevel;
    printLevel?: LogLevel;
};

/**
 * 请求参数
 * @property url - 请求地址
 * @property method - HTTP方法; 取值说明: GET GET请求; POST POST请求;
 * @property [data] - 请求的Body
 * @property [header] - 自定义的HTTP头，可选（值必须是字符串）
 * @property [dataType] - 返回的数据格式; 取值说明: json 返回JSON数据; text 返回文本数据;
 * @property [isDirect] - 仅在本地开发的时候，且在最新版本的APP和SDK能够使用，详情请参考配置本地服务
 */
type RequesReq = {
    url: string;
    method: string;
    data?: any;
    header?: any;
    dataType?: string;
    isDirect?: boolean;
};

/**
 * 响应参数
 * @property data - 开发者服务器返回的数据
 * @property statusCode - 开发者服务器返回的HTTP状态码，取值范围：
 * 1xx：标准HTTP状态码
 * 2xx：标准HTTP状态码
 * 3xx：标准HTTP状态码
 * 4xx：标准HTTP状态码
 * 5xx：标准HTTP状态码
 * 10001：发者服务器返回的数据存在敏感词语，用*进行替换
 * @property header - 开发者服务器返回的Response Header
 */
type RequestRsp = {
    data: any;
    statusCode: number;
    header: any;
};

/**
 * 发送HTTP请求
 * @param params - 请求参数
 * @returns 请求返回
 */
function request(params: RequesReq): Promise<RequestRsp>;

/**
 * websocket 实例
 */
class WebSocket {
}

/**
 * 服务端持久化
 */
namespace storage {
    /**
     * 获取存储信息
     * @param key - 存储的键
     * @returns 返回存储信息
     */
    function getItem(key: string): Promise<string>;
    /**
     * 设置存储信息
     * @param key - 存储的键
     * @param value - 存储的值
     * @returns 调用结果
     */
    function setItem(key: string, value: string): Promise<void>;
    /**
     * 移除存储信息
     * @param key - 存储的键
     * @returns 调用结果
     */
    function removeItem(key: string): Promise<void>;
    /**
     * 获取所有存储的键
     * @returns 调用结果
     */
    function getKeys(): Promise<StorageKeys>;
}

/**
 * 存储键的集合
 */
type StorageKeys = string[];

/**
 * @property version - SDK版本号
 * @property platform - 当前平台信息
 */
type SysConfig = {
    version: string;
    platform: string;
};

/**
 * 获取当前配置信息
 * @returns SDK配置信息
 */
function getConfig(): SysConfig;

/**
 * AR特效
 */
namespace ar {
    /**
     * 是否支持Unity
     * @returns 查询结果
     */
    function isSupportUnity(): Promise<SupportResp>;
    /**
     * 是否支持AR
     * @returns 查询结果
     */
    function isSupportAR(): Promise<SupportResp>;
    /**
     * 获取特效列表数据
     * @param params - 参数
     * @returns 调用结果
     */
    function getEffectList(params: SceneReq): Promise<SceneRespEffectInfo[]>;
    /**
     * 启动activity
     * @param params - 启动参数
     * @returns 调用结果
     */
    function loadUnity(params: SceneReq): Promise<void>;
    /**
     * 退出Unity
     * @returns 调用结果
     */
    function unloadUnity(): Promise<void>;
    /**
     * 切换AR特效
     * @param params - 切换参数
     * @returns 调用结果
     */
    function switchArEffect(params: SwitchReq): Promise<void>;
    /**
     * 获取当前场景名
     * @returns 调用结果
     */
    function getCurrentScene(): Promise<SceneResp>;
    /**
     * 重置AR平面
     * @returns 调用结果
     */
    function resetPlane(): Promise<void>;
    /**
     * 判断U3D是否正在运行
     * @returns 查询结果
     */
    function isRunning(): Promise<RunningResp>;
    /**
     * 获取当前AR特效
     * @returns 调用结果
     */
    function getCurrentArEffect(): Promise<ArEffectInfo>;
    /**
     * 获取当前伴舞特效
     * @returns 调用结果
     */
    function getCurrentDanceEffect(): Promise<DanceEffect>;
    /**
     * 获取伴舞特效列表数据
     * @param params - 参数
     * @returns 调用结果
     */
    function getDanceEffectList(params: DanceEffectParams): Promise<DanceEffectInfo[]>;
    /**
     * 切换伴舞特效
     * @param params - 切换参数
     * @returns 调用结果
     */
    function switchDanceEffect(params: SwitchDanceEffectParams): Promise<void>;
}

/**
 * @property isSupport - 是否支持
 */
type SupportResp = {
    isSupport: boolean;
};

/**
 * 场景参数
 * @property sceneName - 场景名, U3D_SCENE_SPECTRUM2D_VALUE-动感舞台, U3D_SCENE_AR_VALUE-AR主播
 */
type SceneReq = {
    sceneName: string;
};

/**
 * 特效信息
 * @property type - 类型
 * @property u3dResourceId - u3dResourceId
 * @property u3dResourceType - u3dResourceType
 * @property thumb - thumb
 */
type SceneRespEffectInfo = {
    type: number;
    u3dResourceId: number;
    u3dResourceType: number;
    thumb: string;
};

/**
 * 切换参数
 * @property resourceType - resourceType
 * @property resourceId - resourceId
 */
type SwitchReq = {
    resourceType: number;
    resourceId: number;
};

/**
 * @property sceneName - 场景名
 */
type SceneResp = {
    sceneName: string;
};

/**
 * @property isRunning - 是否在运行
 */
type RunningResp = {
    isRunning: boolean;
};

/**
 * AR特效信息
 * @property resourceType - resourceType
 * @property resourceId - resourceId
 */
type ArEffectInfo = {
    resourceType: number;
    resourceId: number;
};

/**
 * 伴舞特效信息
 * @property danceId - 伴舞特效Id
 */
type DanceEffect = {
    danceId: number;
};

/**
 * @property danceId - 伴舞特效ID
 * @property thumb - thumb
 */
type DanceEffectInfo = {
    danceId: number;
    thumb: string;
};

/**
 * 伴舞特效信息
 * @property sceneName - 场景名, U3D_SCENE_SPECTRUM2D_VALUE-动感舞台, U3D_SCENE_AR_VALUE-AR主播
 */
type DanceEffectParams = {
    sceneName: string;
};

/**
 * 切换伴舞特效参数
 * @property danceId - 伴舞特效ID
 */
type SwitchDanceEffectParams = {
    danceId: number;
};

namespace action {
    /**
     * 小程序入口控制
     * @param params - 输入参数
     */
    function localControlEntrance(params: EntranceReq): Promise<any>;
    /**
     * 本地控制小程序面板加载
     * @param params - 输入参数
     */
    function localControlPanelLoad(params: PanelLoadReq): Promise<any>;
    /**
     * 本地控制小程序面板可见
     * @param params - 输入参数
     * @returns 调用参数
     */
    function localControlPanelVisible(params: PanelVisibleReq): Promise<any>;
    /**
     * 显示客户端小程序入口
     * @param params - 参数
     * @returns 显示入口是否成功
     */
    function showEntrance(params: ShowEntranceReq): Promise<any>;
    /**
     * 隐藏客户端小程序入口
     * @param params - 参数
     * @returns 隐藏入口是否成功
     */
    function hideEntrance(params: HideEntranceReq): Promise<any>;
}

type Enum = any;

/**
 * 小程序入口控制参数
 * @property extType - 小程序类型, web_video_com-虎牙主站面板, web_popup-虎牙主站浮窗, app_panel-虎牙直播APP面板, app_popup-虎牙直播APP浮窗, zs_anchor_panel-虎牙助手面板, zs_anchor_popup-虎牙助手浮窗, pc_anchor_panel-PC主播端面板, pc_panel-PC观众端面板, pc_popup-PC观众端浮窗
 * @property visible - 入口是否显示
 * @property [param] - 自定义参数
 */
type EntranceReq = {
    extType: string;
    visible: boolean;
    param?: any;
};

/**
 * @property extType - 小程序类型, web_video_com-虎牙主站面板, web_popup-虎牙主站浮窗, app_panel-虎牙直播APP面板, app_popup-虎牙直播APP浮窗, zs_anchor_panel-虎牙助手面板, zs_anchor_popup-虎牙助手浮窗, pc_anchor_panel-PC主播端面板, pc_panel-PC观众端面板, pc_popup-PC观众端浮窗
 * @property load - 是否加载（仅适用于浮窗类型的小程序，是否加载）
 * @property [param] - 自定义参数
 */
type PanelLoadReq = {
    extType: string;
    load: boolean;
    param?: any;
};

/**
 * 本地控制小程序面板可见 参数
 * @property extType - 小程序类型, web_video_com-虎牙主站面板, app_panel-虎牙直播APP面板, zs_anchor_panel-虎牙助手面板, pc_anchor_panel-PC主播端面板, pc_panel-PC观众端面板
 * @property visible - 是否可见
 * @property [param] - 自定义参数
 */
type PanelVisibleReq = {
    extType: string;
    visible: boolean;
    param?: any;
};

/**
 * @property extTypes - 要显示入口的小程序类型枚举值，以逗号分隔, web_video_com-虎牙主站面板(默认), app_panel-虎牙直播APP面板
 * @property [countDown] - 入口显示的倒计时，单位是秒
 * @property [cornerMarkId] - 入口显示的角标, -无, fire-火, new-新
 */
type ShowEntranceReq = {
    extTypes: string;
    countDown?: number;
    cornerMarkId?: string;
};

/**
 * 隐藏客户端小程序入口参数
 * @property extTypes - 要隐藏入口的小程序类型枚举值，以逗号分隔, web_video_com-虎牙主站面板, app_panel-虎牙直播APP面板
 */
type HideEntranceReq = {
    extTypes: string;
};

/**
 * 高级模块
 */
namespace advance {
    /**
     * 当前直播间信息
     * @returns 返回直播间信息
     */
    function currentChannelInfo(): Promise<RespChannelInfo>;
    /**
     * 跳转登陆界面
     * @param [param] - 参数
     * @returns 返回是否跳转成功
     */
    function showLogin(param?: LoginParams): Promise<void>;
    /**
     * 当前登陆用户相关信息
     * @returns 返回当前登陆用户相关信息
     */
    function getCurrentUserInfo(): Promise<MainUserInfo>;
    /**
     * 数据埋点上报接口
     * @param prod - prod
     * @param eid - eid
     * @param [label] - label
     * @param [extraInfo] - extraInfo
     */
    function addActionEventWithExtraInfo(prod: string, eid: string, label?: string, extraInfo?: ExtraDataInfo): Promise<void>;
    /**
     * 打开指定的Url
     * @param param - 参数
     * @returns 返回打开结果
     */
    function openUrl(param: ReqUrlInfo): Promise<void>;
    /**
     * 获取用户凭证
     * @returns 返回结果
     */
    function getTid(): Promise<TidResp>;
    /**
     * 发送taf请求
     * @param params - 请求参数
     * @returns 请求返回的jce对象
     */
    function sendWup(params: WupReq): Promise<SendWupResp>;
    /**
     * 监听taf信令
     * @param params - 监听信息
     * @returns 监听结果
     */
    function onWupMessage(params: WupMessageReq): Promise<void>;
    /**
     * 监听信令连接状态变化
     * @param params - 监听参数
     * @returns 监听结果
     */
    function onLinkStatusChange(params: LinkStatusReq): Promise<void>;
    /**
     * 注册广播组
     * @param params - 注册组信息
     * @returns 注册广播组结果
     */
    function registerGroup(params: RegisteInfo): Promise<void>;
    /**
     * 注销广播组
     * @param params - 要注销的组信息
     * @returns 注销广播组结果
     */
    function unRegisterGroup(params: UnRegisteInfo): Promise<void>;
    /**
     * 【高级】当前用户送礼
     * @param params - 送礼信息
     */
    function sendGift(params: ReqSendGiftInfo): Promise<void>;
    /**
     * 在交友直播间中指定用户送礼
     * @param params - 礼物信息
     */
    function sendGiftToUser(params: SendGiftTUInfo): Promise<void>;
    /**
     * 获取交友直播间上麦用户信息
     * @returns 上麦用户信息列表
     */
    function getJoinMicUserList(): Promise<MicUserInfo[]>;
    /**
     * 读取本地设置
     * @param params - 读取参数
     * @returns 调用结果
     */
    function getLocalItem(params: GetLocalItemReq): Promise<SetLocalItemResp>;
    /**
     * 修改本地设置
     * @param params - 调用参数
     * @returns 调用结果
     */
    function setLocalItem(params: SetLocalItemReq): Promise<void>;
    /**
     * 高级增加特效
     * @param params - 输入参数
     * @returns 调用结果
     */
    function addEffect(params: AddEffectReq): Promise<void>;
    /**
     * 探测信令通道网络情况
     * @param [params] - 参数
     * @returns 调用结果
     */
    function pingSignal(params?: any): Promise<PingSignalRsp>;
    /**
     * 获取信令通道链接状态
     * @param params - 参数
     * @returns 返回结果
     */
    function getLinkStatus(params: LinkStatusParams): Promise<LinkStatusRsp>;
    /**
     * 调用端上支付接口
     * @param params - 支付参数
     * @returns 返回结果
     */
    function buyIAPProductWithParams(params: BuyIAPProdParams): Promise<void>;
    /**
     * 获取送礼面板选中的要送礼的用户
     * @returns 调用结果
     */
    function getGiftPanelSelectedUser(): Promise<GetSelectedUserRsp>;
    /**
     * 设置送礼面板中要送礼的用户
     * @param params - 输入参数
     * @returns 调用结果
     */
    function setGiftPanelSelectedUser(params: SetGiftPanelUserReq): Promise<void>;
    /**
     * 监听送礼面板选中的要送礼的用户信息改变
     * @param params - 输入参数
     * @returns 调用结果
     */
    function onGiftPanelSelectedUserChange(params: OnGiftPanelUserChangeReq): Promise<void>;
    /**
     * 取消监听送礼面板选中的要送礼的用户信息改变
     * @returns 调用结果
     */
    function offGiftPanelSelectedUserChange(): Promise<void>;
    /**
     * 获取原生组件布局信息
     * @param params - 输入参数
     * @returns 调用结果
     */
    function getNativeCompOffset(params: GetNavCompOffsetReq): Promise<GetNavCompOffsetRsp>;
    /**
     * 监听原生组件布局信息变化
     * @param params - 输入参数
     * @returns 调用结果
     */
    function onNativeCompOffsetChange(params: OnNavCompOffsetChangeReq): Promise<void>;
    /**
     * 取消监听原生组件布局信息变化
     * @param params - 输入参数
     * @returns 调用结果
     */
    function offNativeCompOffsetChange(params: OffNavCompOffsetChangeReq): Promise<void>;
    /**
     * 把某个品类添加到常用品类
     * @param params - 输入参数
     * @returns 调用结果
     */
    function addGidToOftenUsed(params: AddGidToOftenUsedReq): Promise<void>;
    /**
     * 退出登陆，清理登陆信息，包括匿名登陆信息
     * @returns 调用结果
     */
    function logout(): Promise<void>;
    /**
     * 取消监听taf信令
     * @param params - 监听信息
     * @returns 监听结果
     */
    function offWupMessage(params: OffWupMessageReq): Promise<void>;
}

/**
 * 直播间信息
 * @property aSid - aSid
 * @property topSid - 顶级频道
 * @property subSid - 子频道
 * @property presenterId - 主播uid
 * @property presenterName - 当前用户昵称
 * @property currentUid - 当前用户uid
 * @property currentLogoUrl - 当前用户头像
 * @property presenterLogoUrl - 主播头像
 * @property durationAfterJoinSuccess - 观看时长，秒
 * @property gameId - 品类ID
 * @property subscribeState - 当前主播订阅状态, 0-未订阅, 1-已订阅
 * @property isLiving - 是否正在直播, 0-不在直播, 1-正在直播
 */
type RespChannelInfo = {
    aSid: string;
    topSid: string;
    subSid: string;
    presenterId: number;
    presenterName: string;
    currentUid: number;
    currentLogoUrl: string;
    presenterLogoUrl: string;
    durationAfterJoinSuccess: number;
    gameId: string;
    subscribeState: number;
    isLiving: number;
};

/**
 * @property type - 登录类型, 0-全屏登录, 1-半屏登录(默认)
 */
type LoginParams = {
    type: number;
};

/**
 * 频道信息
 * @property tid - 顶级频道
 * @property sid - 子频道
 * @property pid - 主播id
 * @property presenterNick - 主播昵称
 * @property isGuard - 是否对应主播的守护
 * @property guardLevel - 守护等级
 * @property isFans - 是否对应主播的粉丝
 * @property fansLevel - 粉丝等级
 * @property fansName - 粉丝名称
 */
type ChannelInfo = {
    tid: number;
    sid: number;
    pid: number;
    presenterNick: string;
    isGuard: boolean;
    guardLevel: number;
    isFans: boolean;
    fansLevel: number;
    fansName: string;
};

/**
 * 贵族信息
 * @property isNoble - 是否是贵族
 * @property uid - 用户uid
 * @property validDate - 贵族有效期的时间戳
 * @property nobleName - 贵族名称
 * @property nobleLevel - 贵族等级, 6-大帝, 5-君王, 4-公爵
 * @property nobleNick - 用户昵称
 * @property channelInfo - 频道信息
 */
type NobleInfo = {
    isNoble: boolean;
    uid: number;
    validDate: number;
    nobleName: string;
    nobleLevel: number;
    nobleNick: string;
    channelInfo: ChannelInfo;
};

/**
 * 详细用户信息
 * @property imid - imid
 * @property uid - 用户uid
 * @property status - status
 * @property err_code - 错误码
 * @property udbToken - udbToken
 * @property ticketType - ticketType
 * @property avatarUrl - 头像路径
 * @property sex - 性别 "女"、"男"
 * @property name - 用户昵称
 * @property userLevel - 用户等级
 * @property sign - 签名
 * @property userCurrentExp - 当前经验值
 * @property nextLevelExp - 下个等级经验值
 * @property dailyExp - 日经验
 * @property nobleInfo - 贵族信息
 * @property isThirdPartyLogin - 是否第三方登录
 * @property udbAnonymousUid - 【仅观众端支持】匿名uid
 */
type MainUserInfo = {
    imid: number;
    uid: number;
    status: string;
    err_code: number;
    udbToken: string;
    ticketType: string;
    avatarUrl: string;
    sex: string;
    name: string;
    userLevel: number;
    sign: string;
    userCurrentExp: number;
    nextLevelExp: number;
    dailyExp: number;
    nobleInfo: NobleInfo;
    isThirdPartyLogin: boolean;
    udbAnonymousUid: number;
};

/**
 * 额外信息
 * @property prop - 上报数据
 */
type ExtraDataInfo = {
    prop: any;
};

/**
 * 外链信息
 * @property url - 要打开的url
 */
type ReqUrlInfo = {
    url: string;
};

/**
 * 用户凭证
 * @property lUid - 用户uid
 * @property sGuid - guid
 * @property sToken - token
 * @property sHuYaUA - ua
 * @property sCookie - cookie
 * @property iTokenType - token type
 * @property sDeviceInfo - 设备信息
 */
type TidInfo = {
    lUid: number;
    sGuid: string;
    sToken: string;
    sHuYaUA: string;
    sCookie: string;
    iTokenType: number;
    sDeviceInfo: string;
};

/**
 * @property tId - 用户凭证
 */
type TidResp = {
    tId: TidInfo;
};

/**
 * SendWupResp
 * @property rsp - 响应数据
 * @property bcode - 响应code
 */
type SendWupResp = {
    rsp: any;
    bcode: number;
};

/**
 * WupReq
 * @property req - 请求的jce对象
 * @property rspClass - 响应的jce类
 * @property servant - servant/ui
 * @property funcName - 方法名
 * @property [strategy] - 策略, 0-加载网络, 2-加载缓存
 * @property [reqClassName] - 请求的jce类名
 * @property [rspClassName] - 响应的jce类名
 * @property [channel] - 通道
 * @property [retryCount] - 重试次数
 * @property [totalTimeout] - 总超时时间，单位s
 * @property [unitPacket] - unitPacket
 * @property [useDirectStrategy] - 使用直连策略
 */
type WupReq = {
    req: any;
    rspClass: ((...params: any[]) => any) | any;
    servant: string;
    funcName: string;
    strategy?: number;
    reqClassName?: string;
    rspClassName?: string;
    channel?: number;
    retryCount?: number;
    totalTimeout?: number;
    unitPacket?: any;
    useDirectStrategy?: boolean;
};

/**
 * WupMessage
 * @property message - jce对象
 */
type WupMessage = {
    message: any;
};

/**
 * Wup消息回调
 * @param wupMessage - 回调参数
 */
type WupMessageCallback = (wupMessage: WupMessage) => void;

/**
 * 监听信息传参
 * @property messageClass - 返回的jce对象类型
 * @property uri - 监听uri
 * @property [useDirectStrategy] - 使用直连策略
 * @property callback - 回调函数
 */
type WupMessageReq = {
    messageClass: any | ((...params: any[]) => any);
    uri: string;
    useDirectStrategy?: boolean;
    callback: WupMessageCallback;
};

/**
 * 信令长链接变化回调参数
 * @property connected - 通道是否已连接
 */
type LinkStatusResp = {
    connected: boolean;
};

/**
 * @param linkStatusResp - 回调参数
 */
type LinkStatusChange = (linkStatusResp: LinkStatusResp) => void;

/**
 * 监听信息
 * @property channelType - 要监听的通道类型
 * @property callback - 回调函数
 * @property [useDirectStrategy] - 启用直连策略
 */
type LinkStatusReq = {
    channelType: number;
    callback: LinkStatusChange;
    useDirectStrategy?: boolean;
};

/**
 * 注册组信息
 * @property [group] - 组ID
 * @property [groupIds] - 组ID列表
 * @property [channelType] - 通道类型
 * @property [useDirectStrategy] - 使用直连策略
 */
type RegisteInfo = {
    group?: string;
    groupIds?: string[];
    channelType?: number;
    useDirectStrategy?: boolean;
};

/**
 * 注销组信息
 * @property [groupIds] - 组ID列表
 * @property [channelType] - 通道类型
 * @property [useDirectStrategy] - 使用直连策略
 */
type UnRegisteInfo = {
    groupIds?: string[];
    channelType?: number;
    useDirectStrategy?: boolean;
};

/**
 * 礼物信息
 * @property giftId - 礼物Id
 * @property giftCount - 礼物个数
 * @property [useSelectMic] - 向已选上麦用户送礼
 * @property [sourceType] - 来源
 * @property [mapParam] - 普通透传参数
 */
type ReqSendGiftInfo = {
    giftId: number;
    giftCount: number;
    useSelectMic?: boolean;
    sourceType?: string;
    mapParam?: any;
};

/**
 * 发送礼物信息
 * @property giftId - 发送礼物Id
 * @property giftCount - 发送礼物个数
 * @property uid - 用户的uid
 * @property [sourceType] - 来源
 * @property [mapParam] - 普通透传参数
 */
type SendGiftTUInfo = {
    giftId: number;
    giftCount: number;
    uid: number;
    sourceType?: string;
    mapParam?: any;
};

/**
 * 上麦用户信息
 * @property uid - 用户的uid
 * @property userNick - 用户昵称
 * @property userAvatarUrl - 用户头像地址
 * @property status - 上麦状态, 1-上麦中, 2-等待中
 * @property seatType - 身份, 0-纯交友：全部麦位, 1-陪玩派单：老板麦位, 2-陪玩派单：接待麦位, 3-交友电台：守护麦位, 4-交友电台：高级守护麦位
 * @property pos - 麦序（从1开始，仅适用于上麦状态是上麦中的用户）
 * @property seatName - 座位名字，仅适用于上麦状态是上麦中的用户
 */
type MicUserInfo = {
    uid: number;
    userNick: string;
    userAvatarUrl: string;
    status: number;
    seatType: number;
    pos: number;
    seatName: string;
};

/**
 * 获取本地设置参数
 * @property key - 键
 * @property bindUid - 是否要跟主播的身份绑定
 */
type GetLocalItemReq = {
    key: string;
    bindUid: boolean;
};

/**
 * 本地设置信息
 * @property value - 值
 */
type SetLocalItemResp = {
    value: string;
};

/**
 * 修改本地设置信息
 * @property key - 键
 * @property value - 值
 * @property bindUid - 是否要跟主播的身份绑定
 */
type SetLocalItemReq = {
    key: string;
    value: string;
    bindUid: boolean;
};

/**
 * @property md5 - 资源的md5
 * @property fileName - 文件名
 * @property [param] - 额外参数
 */
type AddEffectReq = {
    md5: string;
    fileName: string;
    param?: any;
};

/**
 * 网络情况信息
 * @property ping_start - 请求开始
 * @property huyacef_handle_start - 信令客户端收到业务请求
 * @property signal_ap_start - 信令服务收到sdk请求，服务端时间戳，跟其他时间戳有差异
 * @property signal_ap_end - 信令服务响应sdk请求，服务端时间戳，跟其他时间戳有差异
 * @property huyacef_handle_end - 信令客户端收到服务端回包回调业务时间点
 * @property ping_end - 请求结束
 */
type PingSignalInfo = {
    ping_start: number;
    huyacef_handle_start: number;
    signal_ap_start: number;
    signal_ap_end: number;
    huyacef_handle_end: number;
    ping_end: number;
};

/**
 * 网络情况信息
 * @property timestamp - 各个阶段时间戳信息
 */
type PingSignalRsp = {
    timestamp: PingSignalInfo;
};

/**
 * 链接状态信息
 * @property connected - 通道是否已连接
 */
type LinkStatusRsp = {
    connected: boolean;
};

/**
 * 参数
 * @property useDirectStrategy - 使用直连策略
 */
type LinkStatusParams = {
    useDirectStrategy: boolean;
};

/**
 * 充钱完成后的回调信息
 * @property payresult - 支付结果, 取值说明: '1' 成功; '0' 失败;
 */
type BuyIAPProdResult = {
    payresult: string;
};

/**
 * 充钱完成后的回调
 * @param res - 回调信息
 */
type BuyIAPProdCallback = (res: BuyIAPProdResult) => void;

/**
 * 支付参数
 * @property buyWay - buyWay
 * @property name - name
 * @property price - price
 * @property product_id - product_id
 * @property appId - appId
 * @property callback - 回调
 */
type BuyIAPProdParams = {
    buyWay: string;
    name: string;
    price: string;
    product_id: string;
    appId: string;
    callback: BuyIAPProdCallback;
};

/**
 * 选中的用户信息
 * @property uid - 用户uid
 * @property avatarUrl - 头像路径
 * @property nick - 用户昵称
 */
type SelectedUserInfo = {
    uid: number;
    avatarUrl: string;
    nick: string;
};

/**
 * 选中的用户信息
 * @property [all] - 是否选中全部上麦用户
 * @property [user] - 已选用户信息；all 为 true 时 user 为空
 */
type GetSelectedUserRsp = {
    all?: boolean;
    user?: SelectedUserInfo;
};

/**
 * 要选中的用户信息
 * @property [uid] - 用户uid，all 为 true 时 uid 不传
 * @property [all] - 全部上麦用户
 */
type SetGiftPanelUserReq = {
    uid?: number;
    all?: boolean;
};

/**
 * @param info - 用户信息
 */
type GiftPanelUserChange = (info: GetSelectedUserRsp) => void;

/**
 * 监听送礼面板选中的用户改变参数
 * @property callback - 选中用户改变回调
 */
type OnGiftPanelUserChangeReq = {
    callback: GiftPanelUserChange;
};

/**
 * 原生组件布局信息
 * @property top - 原生控件相对于浮窗容器上方的偏移量
 * @property left - 原生控件相对于浮窗容器左方的偏移量
 * @property width - 原生控件相对于浮窗容器的宽度
 * @property height - 原生控件相对于浮窗容器的高度
 * @property props - 关于这个原生控件的信息，JSON字符串，例如：头像框会带上uid等用户信息
 */
type NavCompLayoutInfo = {
    top: number;
    left: number;
    width: number;
    height: number;
    props: any;
};

/**
 * 获取原生组件布局信息
 * @property list - 布局信息列表
 */
type GetNavCompOffsetRsp = {
    list: NavCompLayoutInfo[];
};

/**
 * 获取原生组件布局信息参数
 * @property key - 原生控件标签, video-视频, linkMicAvatar-连麦用户头像(默认)
 */
type GetNavCompOffsetReq = {
    key: string;
};

/**
 * 原生组件布局信息
 * @property list - 布局信息列表
 * @property key - 原生控件标签, video-视频, linkMicAvatar-连麦用户头像(默认)
 */
type NavCompOffsetChangeInfo = {
    list: NavCompLayoutInfo[];
    key: string;
};

/**
 * @param info - 布局信息
 */
type NavCompOffsetChange = (info: NavCompOffsetChangeInfo) => void;

/**
 * 监听原生组件布局信息变化参数
 * @property key - 原生控件标签, video-视频, linkMicAvatar-连麦用户头像(默认)
 * @property callback - 布局变化回调
 */
type OnNavCompOffsetChangeReq = {
    key: string;
    callback: NavCompOffsetChange;
};

/**
 * 取消监听原生组件布局信息变化参数
 * @property key - 原生控件标签, video-视频, linkMicAvatar-连麦用户头像(默认)
 */
type OffNavCompOffsetChangeReq = {
    key: string;
};

/**
 * 添加常用品类参数
 * @property gid - 品类id
 */
type AddGidToOftenUsedReq = {
    gid: number;
};

/**
 * 监听信息传参
 * @property uri - 监听uri
 * @property [useDirectStrategy] - 使用直连策略
 */
type OffWupMessageReq = {
    uri: string;
    useDirectStrategy?: boolean;
};

/**
 * app模块
 */
namespace app {
    /**
     * 禁止native 容器手势
     * @param disable - 是否禁止native容器手势
     */
    function disableContainerGesture(disable: boolean): Promise<void>;
}

/**
 * 监听加载完成
 * @param callback - 回调函数
 * @returns 调用结果
 */
function onLoad(callback: (...params: any[]) => any): void;

/**
 * 监听取消加载
 * @returns 调用结果
 */
function onUnload(callback: (...params: any[]) => any): void;

/**
 * 注册App进入前台时回调
 * @returns 调用结果
 */
function onEnterForeground(callback: (...params: any[]) => any): void;

/**
 * 注册App进入后台时回调
 * @returns 调用结果
 */
function onLeaveForeground(callback: (...params: any[]) => any): void;

/**
 * 生命周期消息回调
 */
type LifeCallback = () => void;

/**
 * 小程序显示的生命周期
 * @returns 调用结果
 */
function onAppear(callback: LifeCallback): void;

/**
 * 小程序隐藏的生命周期
 * @returns 调用结果
 */
function onDisappear(callback: LifeCallback): void;

/**
 * 后台模块
 */
namespace backend {
    /**
     * 通用查询后台状态接口
     * @param params - 参数
     * @returns // key传入getServerTime参数时，返回GetServerTimeRsp，传入getPKInfo参数时, 返回GetPKInfoRsp
     */
    function commonQuery(params: SearchOptions): Promise<CommonQueryResp>;
    /**
     * 通用上行接口
     * @param params - 操作选项
     * @returns 返回结果
     */
    function commonOperate(params: DiyOptions): Promise<CommonOperateResp>;
}

/**
 * @property key - 关键字 getServerTime-获取服务器时间戳, getPKInfo-获取主播PK信息
 * @property [param] - 参数
 */
type SearchOptions = {
    key: string;
    param?: any;
};

/**
 * @property startTime - 开始的时间戳
 */
type GetServerTimeRsp = {
    startTime: number;
};

/**
 * @property nickName - 成员昵称
 * @property avatarUrl - 成员头像
 * @property scorce - 成员分数
 * @property unionId - 成员分数
 * @property roomId - 成员分数
 */
type MemberInfo = {
    nickName: string;
    avatarUrl: string;
    scorce: string;
    unionId: string;
    roomId: number;
};

/**
 * @property teamName - 队伍名称
 * @property teamScore - 队伍分数
 * @property scoreLevel - 分数等级
 * @property memberInfos - 成员信息
 */
type TeamInfo = {
    teamName: string;
    teamScore: number;
    scoreLevel: number;
    memberInfos: MemberInfo[];
};

/**
 * @property onPk - 是否正在PK
 * @property leftTeam - 发起队伍
 * @property rightTeam - 接受队伍（数据结构同发起队伍）
 * @property pkStatus - PK状态, 0-不处于PK模式, 1-开启PK模式, 2-开启PK准备, 3-某局PK进行中, 4-某局PK结束中, 5-三局两胜结束
 * @property pkResult - PK结果, 0-平局, 1-左边赢, 2-右边赢
 * @property remainSeconds - 剩余秒数
 * @property pkModeType - 模式, 0-礼物模式, 1-礼物+人气模式, 2-匹配模式
 * @property pkResults - 3局2胜每小局的结果, 0-平局, 1-左边赢, -1-右边赢
 */
type GetPKInfoRsp = {
    onPk: boolean;
    leftTeam: TeamInfo;
    rightTeam: TeamInfo;
    pkStatus: number;
    pkResult: number;
    remainSeconds: number;
    pkModeType: number;
    pkResults: number[];
};

/**
 * 返回结果
 */
type CommonQueryResp = GetServerTimeRsp | GetPKInfoRsp | any;

/**
 * @param web_popup - 虎牙主站-浮窗
 * @param app_popup - 虎牙直播APP-浮窗
 * @param zs_anchor_popup - 虎牙助手-浮窗
 * @param pc_popup - PC观众端浮窗
 * @param web_video_com - 虎牙主站-面板
 * @param app_panel - 虎牙直播APP-面板
 * @param pc_panel - PC观众端面板
 */
type ControlPanelExtTypes = Enum;

/**
 * @param web_popup - 虎牙主站-浮窗
 * @param app_popup - 虎牙直播APP-浮窗
 * @param zs_anchor_popup - 虎牙助手-浮窗
 * @param pc_popup - PC观众端浮窗
 */
type ControlPanelLoadExtTypes = Enum;

/**
 * @param web_video_com - 虎牙主站-面板
 * @param app_panel - 虎牙直播APP-面板
 * @param pc_panel - PC观众端面板
 */
type ControlEntranceExtTypes = Enum;

/**
 * @property extTypes - 观众端小程序类型枚举（逗号分隔），一共有3种枚举，每种枚举都与key对应。
 * @property visible - 是否显示
 */
type ControlReq = {
    extTypes: ControlEntranceExtTypes | ControlPanelLoadExtTypes | ControlPanelExtTypes;
    visible: boolean;
};

/**
 * @property status - 状态码, 0为成功
 * @property msg - 描述
 */
type ControlRsp = {
    status: number;
    msg: string;
};

/**
 * @property message - 发言内容，默认长度30个字符，过长会自动截断
 * @property roomId - 直播间ID
 */
type SendMessageReqByRoomId = {
    message: string;
    roomId: number;
};

/**
 * @property message - 发言内容，默认长度30个字符，过长会自动截断
 */
type SendMessageReq = {
    message: string;
};

/**
 * @param number2 - 发送失败/权限问题/频率超出
 * @param number17 - 贵族表情拦截
 * @param number107 - 直播间封禁弹幕或者高危敏感词
 * @param number905 - 未绑定手机号
 */
type SendMessageErrorEnum = Enum;

/**
 * @property message - 错误提示
 * @property res - 状态码
 */
type SendMessageRsp = {
    message: string;
    res: SendMessageErrorEnum;
};

/**
 * @param controlEntrance - 主播端控制观众端小程序入口
 * @param controlPanelLoad - 主播端控制观众端小程序面板加载
 * @param controlPanelShow - 主播端控制观众端小程序面板展示
 */
type ControOperateKey = Enum;

/**
 * @property key - 关键字
 * @property param - 参数,
 */
type ControOperateOptions = {
    key: ControOperateKey;
    param: ControlReq;
};

/**
 * @param sendUserMessage - 当前直播间发言接口
 * @param sendRoomMessage - 指定直播间发言接口
 */
type SendMessageOperateKey = Enum;

/**
 * @property key - 关键字
 * @property param - 参数,
 */
type SendMessageOperateOptions = {
    key: SendMessageOperateKey;
    param: SendMessageReq | SendMessageReqByRoomId;
};

/**
 * 参数
 * @property key - 关键字
 * @property [param] - 参数
 */
type DiyOptions = {
    key: string;
    param?: any;
};

/**
 * 操作选项
 */
type CommonOperateParams = ControOperateOptions | SendMessageOperateOptions | DiyOptions;

/**
 * 返回结果
 */
type CommonOperateResp = ControlRsp | SendMessageRsp | any;

/**
 * @property screenWidth - 屏幕宽度
 * @property screenHeight - 屏幕高度
 * @property isLandscape - 屏幕是否是横屏高度
 */
type Consts = {
    screenWidth: number;
    screenHeight: number;
    isLandscape: boolean;
};

/**
 * consts
 */
var consts: Consts;

/**
 * 直播间事件
 */
namespace context {
    /**
     * 监听直播间消息
     * @param topic - 宿主消息名, activated-小程序激活, subscribeSubmit-【观众端】当前观众订阅状态发生变化, giftSubmit-【观众端】当前观众送礼, barrageSubmit-当前用户发送弹幕, unzipProgress-每个任务的解压进度, userInteract-用户交互信息, openCoinPanelClosed-能量豆弹窗关闭
     * @param callback - 收到消息时回调 返回消息内容
     * @returns 调用结果
     */
    function on(topic: string, callback: ContextOnCallback): void;
    /**
     * 取消监听直播间消息
     * @param topic - 宿主消息名, activated-小程序激活, subscribeSubmit-【观众端】当前观众订阅状态发生变化, giftSubmit-【观众端】当前观众送礼, barrageSubmit-当前用户发送弹幕, unzipProgress-每个任务的解压进度, userInteract-用户交互信息, openCoinPanelClosed-能量豆弹窗关闭
     * @param [callback] - 收到消息时回调 返回消息内容
     * @returns 调用结果
     */
    function off(topic: string, callback?: ContextOnCallback): void;
    /**
     * 显示互动通道入口红点
     * @returns 返回是否显示成功
     */
    function showActivityBadge(): Promise<void>;
    /**
     * 显示toast
     * @param message - toast中显示的消息
     */
    function showToast(message: string): Promise<void>;
    /**
     * 获取安全区域的位置
     * @returns 返回安全区域位置信息
     */
    function getSafeAreaPosition(): Promise<PositionInfo>;
    /**
     * 监听当前直播间小程序容器布局变化消息
     * @param callback - 小程序容器布局变化回调
     */
    function onLayoutChange(callback: LayoutChange): Promise<void>;
    /**
     * 引导订阅
     */
    function leadSubscribe(): Promise<void>;
    /**
     * 获取当前直播间礼物配置
     * @returns 返回直播间礼物配置
     */
    function getGiftConf(): Promise<RoomGiftConfig[]>;
    /**
     * 当前观众送礼
     * @param params - 发送礼物信息
     */
    function sendGift(params: SendGiftInfo): Promise<void>;
    /**
     * 引导当前观众送礼
     * @returns 引导成功返回送礼人信息
     */
    function leadGift(): Promise<void>;
    /**
     * 监听当前直播间礼物变化消息
     * @param options - 过滤条件
     * @param callback - 礼物信息回调
     * @returns 操作结果
     */
    function onGiftChange(options: GiftChangeOptions, callback: GiftChange): Promise<void>;
    /**
     * 取消监听当前直播间礼物变化消息
     * @returns 操作结果
     */
    function offGiftChange(): Promise<void>;
    /**
     * 引导当前用户发送弹幕
     * @returns 调用结果
     */
    function leadBarrage(): Promise<void>;
    /**
     * 监听所有弹幕
     * @param options - 弹幕筛选条件
     * @param callback - 弹幕信息回调
     */
    function onBarrageChange(options: OnBarrageChangeOptions, callback: BarrageCallback): Promise<void>;
    /**
     * 关闭监听所有弹幕
     */
    function offBarrageChange(): Promise<void>;
    /**
     * 监听开通守护
     * @param params - 监听开通守护参数
     */
    function onOpenGuardianNotice(params: OpenGuardianNoticeParams): Promise<void>;
    /**
     * 关闭监听开通守护
     */
    function offOpenGuardianNotice(): Promise<void>;
    /**
     * 监听开通贵族
     * @param params - 监听开通贵族参数
     */
    function onOpenNobleNotice(params: OnOpenNobleNoticeParams): Promise<void>;
    /**
     * 关闭监听开通贵族
     */
    function offOpenNobleNotice(): Promise<void>;
    /**
     * 监听高级用户进场
     * @param params - 参数
     */
    function onVipEnterBannerNotice(params: VipEnterBannerNoticeParams): Promise<void>;
    /**
     * 取消监听高级用户进场
     */
    function offVipEnterBannerNotice(): Promise<void>;
    /**
     * 监听分享直播间事件
     * @param params - 监听分享直播间参数
     */
    function onShareLiveNotice(params: ShareLiveNoticeParams): Promise<void>;
    /**
     * 取消监听分享直播间事件
     */
    function offShareLiveNotice(): Promise<void>;
    /**
     * 获取当前观众是否订阅当前主播
     * @returns 返回是否订阅
     */
    function getSubscribeInfo(): Promise<boolean>;
    /**
     * 获取主播信息
     * @returns 返回用户信息
     */
    function getStreamerInfo(): Promise<StreamerInfo>;
    /**
     * 获取app信息，目前返回app版本、UA（计划废弃）
     * @returns 返回app信息
     */
    function getContextInfo(): Promise<ContextInfo>;
    /**
     * 获取直播间信息
     * @returns 返回直播间信息
     */
    function getLiveInfo(): Promise<RespLiveInfo>;
    /**
     * 获取用户信息
     * @returns 返回用户信息
     */
    function getUserInfo(): Promise<UserInfo>;
    /**
     * 获取直播间的粉丝榜信息
     * @returns 返回直播间粉丝榜信息
     */
    function getFansRank(): Promise<RankInfo>;
    /**
     * 获取直播间所有贵宾信息
     * @returns 返回直播间所有贵宾信息
     */
    function getVip(): Promise<VipItem[]>;
    /**
     * 获取直播间的周贡榜信息
     * @returns 返回周贡榜榜单数据
     */
    function getWeekRank(): Promise<WeekRankItem[]>;
    /**
     * 设置发送弹幕分组标签
     * @param param - 发送弹幕分组标签参数
     * @returns 返回设置发送弹幕分组标签是否显示成功
     */
    function setSendBarrageTag(param: SendBarrageTagParams): Promise<void>;
    /**
     * 设置显示弹幕分组标签
     * @param param - 显示弹幕分组标签参数
     * @returns 返回设置显示弹幕分组标签是否显示成功
     */
    function setDisplayBarrageTags(param: DisplayBarrageTagParams): Promise<void>;
    /**
     * 分享直播间
     * @param params - 分享配置
     * @returns 返回分享直播间是否成功
     */
    function share(params: ShareParams): Promise<void>;
    /**
     * 获取当前主播的订阅概况
     * @returns 订阅者概况
     */
    function getSubscriberSummary(): Promise<SubscriberSummary>;
    /**
     * 监听订阅信息改变
     * @param options - 订阅信息过滤条件
     * @param callback - 订阅信息改变回调
     */
    function onSubscriberChange(options: SubscriberOptions, callback: SubscriberChangeCallback): Promise<void>;
    /**
     * 取消监听订阅信息改变
     */
    function offSubscriberChange(): Promise<void>;
    /**
     * 获取直播间功能
     * @param params - 相关功能的键的数组（可以提供一个或者多个）
     * @returns 返回 直播间功能信息（根据参数提供的键会有对应的字段）
     */
    function getLiveRoomFeatures(params: FeatureKey[]): Promise<Features>;
    /**
     * 设置直播间功能
     * @param params - 相关功能的键以及要设置的参数（可以提供一个键或者多个）
     * @returns 功能设置结果（根据参数提供的键会有对应的字段）
     */
    function setLiveRoomFeatures(params: Features): Promise<FeaturesResp>;
    /**
     * 使用外部浏览器打开指定URL
     * @param params - 请求参数
     * @returns 返回结果
     */
    function openExternalUrl(params: UrlParams): Promise<void>;
}

/**
 * @param content - 收到宿主消息
 */
type ContextOnCallback = (content: any) => void;

/**
 * 全区域位置信息
 * @property left - 安全区域距离容器左侧的像素值
 * @property top - 安全区域距离容器上侧的像素值
 * @property right - 安全区域距离容器右侧的像素值
 * @property bottom - 安全区域距离容器下侧的像素值
 */
type PositionInfo = {
    left: number;
    top: number;
    right: number;
    bottom: number;
};

/**
 * 容器变化消息
 * @property screenWidth - 容器宽度
 * @property screenHeight - 容器高度
 * @property isLandscape - 是否横屏，web端固定为true
 */
type LayoutInfo = {
    screenWidth: number;
    screenHeight: number;
    isLandscape: boolean;
};

/**
 * 小程序容器布局变化回调
 * @param info - 容器变化消息
 */
type LayoutChange = (info: LayoutInfo) => void;

/**
 * 直播间礼物配置
 * @property giftId - 礼物Id
 * @property giftName - 礼物名称
 * @property giftLogo - 礼物图标
 * @property giftGif - 小程序图标（gif动图）
 * @property giftPriceHuya - 礼物价格（虎牙币）
 * @property giftPriceGreenBean - 礼物价格（金豆）
 * @property giftPriceWhiteBean - 礼物价格（银豆）, -1-表示此礼物不支持使用银豆购买
 */
type RoomGiftConfig = {
    giftId: number;
    giftName: string;
    giftLogo: string;
    giftGif: string;
    giftPriceHuya: number;
    giftPriceGreenBean: number;
    giftPriceWhiteBean: number;
};

/**
 * 发送礼物信息
 * @property giftId - 发送礼物Id
 * @property giftCount - 发送礼物个数
 */
type SendGiftInfo = {
    giftId: number;
    giftCount: number;
};

/**
 * 送礼人信息
 * @property sendNick - 送礼人的昵称
 * @property senderAvatarUrl - 送礼人的头像地址
 * @property itemId - 礼物Id
 * @property itemName - 礼物名称
 * @property sendItemCount - 礼物数量
 * @property sendItemComboHits - 送礼连击数
 * @property roomId - 房间号
 * @property unionId - 用户unionId
 * @property customText - 礼物的自定义文案
 * @property nobleLevel - 贵族等级
 * @property totalPay - 此次送礼支付总额（分）
 * @property nobleAttrType - 贵族等级类型
 */
type GifterInfo = {
    sendNick: string;
    senderAvatarUrl: string;
    itemId: number;
    itemName: string;
    sendItemCount: number;
    sendItemComboHits: number;
    roomId: number;
    unionId: string;
    customText: string;
    nobleLevel: number;
    totalPay: number;
    nobleAttrType: number;
};

/**
 * 礼物变化过滤条件
 * @property [sendNick] - 用户昵称关键字
 * @property [itemName] - 礼物名称关键字
 * @property [minSendItemCount] - 礼物数量超过这个值才监听
 * @property [minSendItemComboHits] - 连击数量超过这个值才监听
 */
type GiftChangeOptions = {
    sendNick?: string;
    itemName?: string;
    minSendItemCount?: number;
    minSendItemComboHits?: number;
};

/**
 * 礼物信息回调
 * @param giftInfo - 送礼人信息
 */
type GiftChange = (giftInfo: GifterInfo) => void;

/**
 * 弹幕消息
 * @property sendNick - 发言人的昵称
 * @property senderAvatarUrl - 发言人的头像地址
 * @property senderGender - 发言人的性别, 0-女, 1-男
 * @property nobleLevel - 发言人的贵族等级
 * @property fansLevel - 发言人的粉丝等级
 * @property content - 弹幕内容
 * @property unionId - 用户unionId
 * @property badgeName - 粉丝徽章名
 */
type BarragerInfo = {
    sendNick: string;
    senderAvatarUrl: string;
    senderGender: number;
    nobleLevel: number;
    fansLevel: number;
    content: string;
    unionId: string;
    badgeName: string;
};

/**
 * 弹幕信息回调
 * @param barrageInfo - 弹幕消息
 */
type BarrageCallback = (barrageInfo: BarragerInfo) => void;

/**
 * 弹幕筛选条件
 * @property [sendNick] - 用户昵称关键字
 * @property [nobleLevel] - 贵族等级
 * @property [fansLevel] - 粉丝等级
 * @property [content] - 弹幕内容关键字
 */
type OnBarrageChangeOptions = {
    sendNick?: string;
    nobleLevel?: number;
    fansLevel?: number;
    content?: string;
};

/**
 * 开启守护消息
 * @property openDays - 开通或者续费天数
 * @property lastGuardianLevel - 开通或者续费之前的守护等级
 * @property openGuardianLevel - 开通或续费后守护等级
 * @property presenterNick - 主播昵称
 * @property roomId - 房间Id
 * @property unionId - 用户unionId
 * @property userAvatarUrl - 用户头像
 * @property userNick - 用户昵称
 * @property guardType - 守护类型, 0-初爱守护, 2-超级守护, 3-至尊守护
 */
type OpenGuardianNotice = {
    openDays: number;
    lastGuardianLevel: number;
    openGuardianLevel: number;
    presenterNick: string;
    roomId: number;
    unionId: string;
    userAvatarUrl: string;
    userNick: string;
    guardType: number;
};

/**
 * 开通守护回调
 * @param notice - 开启守护消息
 */
type OpenGuardianNoticeCallback = (notice: OpenGuardianNotice) => void;

/**
 * 监听开通守护参数
 * @property callback - 开通守护回调
 */
type OpenGuardianNoticeParams = {
    callback: OpenGuardianNoticeCallback;
};

/**
 * 开启贵族消息
 * @property startTime - 贵族生效unix时间戳，单位是秒
 * @property endTime - 贵族失效unix时间戳，单位是秒
 * @property openFlag - 标志, 1-首次(非贵族开通任一贵族,或者低等级贵族更换高等级的贵族操作,都并入到首开), 2-续费
 * @property months - 开通月数
 * @property nobleLevel - 贵族等级
 * @property nobleAttrType - 贵族等级类型
 * @property nobleName - 贵族名
 * @property roomId - 房间Id
 * @property unionId - 用户unionId
 * @property userAvatarUrl - 用户头像
 * @property userNick - 用户昵称
 */
type OpenNobleNotice = {
    startTime: number;
    endTime: number;
    openFlag: number;
    months: number;
    nobleLevel: number;
    nobleAttrType: number;
    nobleName: string;
    roomId: number;
    unionId: string;
    userAvatarUrl: string;
    userNick: string;
};

/**
 * 开通贵族回调
 * @param notice - 开启贵族消息
 */
type OpenNobleNoticeCallback = (notice: OpenNobleNotice) => void;

/**
 * 监听开通贵族参数
 * @property callback - 监听开通贵族
 */
type OnOpenNobleNoticeParams = {
    callback: OpenNobleNoticeCallback;
};

/**
 * 高级用户进场消息
 * @property badgeName - 粉丝标签名
 * @property fansLevel - 粉丝等级
 * @property nobleLevel - 贵族等级
 * @property nobleAttrType - 贵族等级类型
 * @property nobleName - 贵族名
 * @property unionId - 用户unionId
 * @property roomId - 房间Id
 * @property userAvatarUrl - 用户头像
 * @property userNick - 用户昵称
 */
type VipEnterBannerNotice = {
    badgeName: string;
    fansLevel: number;
    nobleLevel: number;
    nobleAttrType: number;
    nobleName: string;
    unionId: string;
    roomId: number;
    userAvatarUrl: string;
    userNick: string;
};

/**
 * 高级用户进场回调
 * @param notice - 高级用户进场消息
 */
type VipEnterBannerNoticeCallback = (notice: VipEnterBannerNotice) => void;

/**
 * 监听高级用户进场参数
 * @property callback - 高级用户进场信息回调
 */
type VipEnterBannerNoticeParams = {
    callback: VipEnterBannerNoticeCallback;
};

/**
 * 直播间分享消息
 * @property actionUrl - 直播间跳转链接
 * @property content - 分享内容
 * @property imageUrl - 分享图片的url
 * @property presenterUnionId - 主播unionId
 * @property roomId - 房间Id
 * @property shareType - 分享类型，默认0
 * @property sharerNick - 分享人的昵称
 * @property sharerUnionId - 分享人的unionId
 * @property subtitle - 直播间副标题
 * @property title - 直播间标题
 */
type ShareLiveNotice = {
    actionUrl: string;
    content: string;
    imageUrl: string;
    presenterUnionId: string;
    roomId: number;
    shareType: number;
    sharerNick: string;
    sharerUnionId: string;
    subtitle: string;
    title: string;
};

/**
 * 分享直播间回调
 * @param notice - 直播间分享消息
 */
type ShareLiveNoticeCallback = (notice: ShareLiveNotice) => void;

/**
 * 监听分享直播间参数
 * @property callback - 分享直播间回调
 */
type ShareLiveNoticeParams = {
    callback: ShareLiveNoticeCallback;
};

/**
 * 主播信息
 * @property streamerNick - 主播昵称
 * @property streamerAvatarUrl - 主播头像地址
 * @property streamerSex - 主播性别, 1-表示男, 2-表示女
 * @property streamerRoomId - 房间Id
 * @property streamerLevel - 主播等级
 * @property streamerUnionId - 主播unionId
 */
type StreamerInfo = {
    streamerNick: string;
    streamerAvatarUrl: string;
    streamerSex: number;
    streamerRoomId: string;
    streamerLevel: number;
    streamerUnionId: string;
};

/**
 * APP信息
 * @property version - 版本信息
 * @property huyaUA - UA信息
 */
type ContextInfo = {
    version: string;
    huyaUA: string;
};

/**
 * 直播间信息
 * @property gameName - 品类，如果isOn为false，则为上次开播的品类
 * @property liveCount - 人气，如果isOn为false，则为上次开播的人气
 * @property roomTitle - 直播间介绍，如果isOn为false，则为上次开播的直播间介绍
 * @property startTime - 开播时间戳（秒)，如果isOn为false，则为上次开播的时间戳
 * @property isOn - 是否在播
 * @property gameId - 品类id，如果isOn为false，则为上次开播的品类id
 * @property hasVideo - 直播间中是否有视频，如果isOn为false，则返回false
 * @property template - 直播间模版
 * @property sourceType - 直播间来源
 * @property liveImmersion - 沉浸式直播间, 1-为沉浸式直播间, 0-为非沉浸式直播间
 * @property liveCompany - 交友陪玩直播间, 1-为交友陪玩直播间, 0-为非交友陪玩直播间
 * @property liveMode - 开播模式, kGame-【PC主播端】端游直播, kEntertainment-【PC主播端】娱乐直播, kMobile-【PC主播端】手游直播, kMakeFriends-【PC主播端】交友直播, kThirdParty-【PC主播端】第三方推流, kScreenCAP-【助手APP】录屏直播, kCamera-【助手APP】摄像头直播, kVoice-【助手APP】语音直播,
 * @property liveSubMode - 开播子模式, process-【PC主播端】端游直播-捕捉游戏画面, desktop-【PC主播端】端游直播-全屏捕捉, area-【PC主播端】端游直播-截取屏幕, window-【PC主播端】端游直播-窗口捕捉, adr-【PC主播端】手游直播-安卓手机, ios-【PC主播端】手游直播-苹果手机, audio-【PC主播端】交友直播-语音开播, video-【PC主播端】交友直播-视频开播, multiPlayersVideo-【PC主播端】派对模式,
 */
type RespLiveInfo = {
    gameName: string;
    liveCount: number;
    roomTitle: string;
    startTime: number;
    isOn: boolean;
    gameId: number;
    hasVideo: boolean;
    template: string;
    sourceType: number;
    liveImmersion: number;
    liveCompany: number;
    liveMode: string;
    liveSubMode: string;
};

/**
 * 用户信息
 * @property userNick - 用户昵称
 * @property userAvatarUrl - 用户头像地址
 * @property userLevel - 用户等级
 * @property userUnionId - 用户的unionId
 */
type UserInfo = {
    userNick: string;
    userAvatarUrl: string;
    userLevel: number;
    userUnionId: string;
};

/**
 * 粉丝榜单数据
 * @property userNick - 包含用户昵称
 * @property userAvatarUrl - 用户头像地址
 * @property score - 贡献值
 * @property fansLevel - 粉丝等级
 */
type FansRankItem = {
    userNick: string;
    userAvatarUrl: string;
    score: number;
    fansLevel: number;
};

/**
 * @property badgeName - 粉丝标签名
 * @property rank - 榜单列表
 */
type RankInfo = {
    badgeName: string;
    rank: FansRankItem[];
};

/**
 * Vip信息
 * @property userNick - 用户昵称
 * @property userAvatarUrl - 用户头像地址
 * @property nobleLevel - 贵族等级
 * @property nobleName - 贵族名称
 */
type VipItem = {
    userNick: string;
    userAvatarUrl: string;
    nobleLevel: number;
    nobleName: string;
};

/**
 * 周榜榜单数据
 * @property userNick - 包含用户昵称
 * @property userAvatarUrl - 用户头像地址
 * @property score - 贡献值
 */
type WeekRankItem = {
    userNick: string;
    userAvatarUrl: string;
    score: number;
};

/**
 * 发送弹幕分组标签参数
 * @property tag - 发送弹幕标签
 */
type SendBarrageTagParams = {
    tag: string;
};

/**
 * 显示弹幕分组标签参数
 * @property tags - 显示弹幕标签组
 */
type DisplayBarrageTagParams = {
    tags: string[];
};

/**
 * 分享配置
 * @property platform - 平台, all-全部平台(默认), weixin-微信, circle-朋友圈, qq-QQ, qzone-QQ空间, sinaweibo-新浪微博, copy-复制链接
 * @property title - 标题
 * @property content - 摘要
 * @property shareUrl - H5地址
 * @property imageUrl - 图片地址
 * @property [imageData] - 图片内容
 * @property [miniprogramUrl] - 小程序url
 * @property mediaType - 分享类型, 1-H5分享(默认), 2-图片分享, 5-微信小程序
 */
type ShareParams = {
    platform: string;
    title: string;
    content: string;
    shareUrl: string;
    imageUrl: string;
    imageData?: string;
    miniprogramUrl?: string;
    mediaType: string;
};

/**
 * 订阅者概况
 * @property subscribeCount - 当前主播订阅人数
 */
type SubscriberSummary = {
    subscribeCount: number;
};

/**
 * 订阅人
 * @property userNick - 用户昵称
 */
type SubscriberInfo = {
    userNick: string;
};

/**
 * 订阅者消息
 * @property subscriberList - 订阅用户列表
 */
type SubscriberInfos = {
    subscriberList: SubscriberInfo[];
};

/**
 * 订阅信息改变回调
 * @param subscriberInfo - 订阅者消息
 */
type SubscriberChangeCallback = (subscriberInfo: SubscriberInfos) => void;

/**
 * 订阅信息过滤条件
 * @property userNick - 用户昵称
 */
type SubscriberOptions = {
    userNick: string;
};

/**
 * @property enable - 是否接收弹幕（包括大弹幕、小弹幕、送礼弹幕等）
 */
type Barrage = {
    enable: boolean;
};

/**
 * @property giftEffectEnable - 是否接收并显示礼物特效
 * @property nobleEffectEnable - 是否接收并显示贵族特效
 */
type Effect = {
    giftEffectEnable: boolean;
    nobleEffectEnable: boolean;
};

/**
 * @property status - 播放器状态, playing-播放, paused-停止
 * @property displayMode - 画面显示状态, default-默认, stretch-拉伸, cover-放大
 */
type Player = {
    status: string;
    displayMode: string;
};

/**
 * @property activated - 是否激活UI（人气、主播头像、送礼、弹幕输入框、小程序等相关UI元素）
 */
type UI = {
    activated: boolean;
};

/**
 * @property videoStreamStatus - 视频流状态, playing-播放, paused-暂停
 * @property audioStreamStatus - 音频流状态, playing-播放, paused-暂停
 */
type Stream = {
    videoStreamStatus: string;
    audioStreamStatus: string;
};

/**
 * @property value - 设备方向, portrait-竖屏, landscape-横屏
 * @property [locked] - 是否锁定方向
 */
type Orientation = {
    value: string;
    locked?: boolean;
};

/**
 * @property [barrage] - 弹幕功能信息
 * @property [effect] - 特效功能信息
 * @property [player] - 播放功能信息
 * @property [ui] - UI功能信息
 * @property [stream] - 流功能信息
 * @property [orientation] - 设备方向信息
 */
type Features = {
    barrage?: Barrage;
    effect?: Effect;
    player?: Player;
    ui?: UI;
    stream?: Stream;
    orientation?: Orientation;
};

/**
 * 相关功能key, barrage-弹幕功能, efect-特效功能, player-播放功能, ui-UI功能, stream-流功能, orientation-设备方向
 */
type FeatureKey = string;

/**
 * @property [barrage] - 设置弹幕功能结果
 * @property [effect] - 设置特效功能结果
 * @property [player] - 设置播放功能结果
 * @property [ui] - 设置UI功能结果
 * @property [stream] - 设置流功能结果
 * @property [orientation] - 设置设备方向功能结果
 */
type FeaturesResp = {
    barrage?: boolean;
    effect?: boolean;
    player?: boolean;
    ui?: boolean;
    stream?: boolean;
    orientation?: boolean;
};

/**
 * @property url - 链接
 */
type UrlParams = {
    url: string;
};

/**
 * 下载中心
 */
namespace dc {
    /**
     * 开始下载
     * @param params - 输入参数
     * @returns 调用结果
     */
    function startDownload(params: StartDownLoadReq): Promise<void>;
    /**
     * 暂停下载
     * @param params - 输入参数
     * @returns 调用结果
     */
    function pauseDownload(params: PauseDownloadReq): Promise<void>;
    /**
     * 取消下载
     * @param params - 输入参数
     * @returns 调用结果
     */
    function cancelDownload(params: CancelDownloadReq): Promise<void>;
    /**
     * 安装Apk
     * @param params - 输入参数
     * @returns 调用结果
     */
    function installApk(params: InstallApkReq): Promise<void>;
    /**
     * 启动App
     * @param params - 输入参数
     * @returns 调用结果
     */
    function startApp(params: StartAppReq): Promise<void>;
    /**
     * 获取下载信息
     * @param params - 输入参数
     * @returns 调用结果
     */
    function getDownloadInfo(params: GetDownloadInfoReq): Promise<DownloadRsp>;
    /**
     * 添加对下载的监听
     * @param params - 输入参数
     * @returns 调用结果
     */
    function registerListener(params: RegisterListenerReq): Promise<void>;
    /**
     * 移除对下载的监听
     * @param params - 输入参数
     * @returns 调用结果
     */
    function unregisterListener(params: UnregisterListenerReq): Promise<void>;
    /**
     * 打开游戏预约弹窗
     * @param params - 参数
     * @returns 调用结果
     */
    function reserveGame(params: ReserveGameReq): Promise<ReserveGameRsp>;
}

/**
 * 下载状态，取值说明:
 * 0 STATUS_NOT_DOWNLOAD;
 * 1 STATUS_CONNECTING;
 * 2 STATUS_DOWNLOADING;
 * 3 STATUS_PAUSED;
 * 4 STATUS_DOWNLOAD_ERROR;
 * 5 STATUS_COMPLETE;
 * 6 STATUS_INSTALLED;
 * 7 STATUS_APPOINTED_DONE;
 * 8 STATUS_APPOINTED_NOT_YET;
 */
type DownLoadStatus = number;

/**
 * 开始下载参数
 * @property package - package
 * @property name - name
 * @property url - url
 * @property extra - extra
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 * @property continueDownload - continueDownload
 * @property downloadStatus - downloadStatus
 * @property gameIcon - gameIcon
 * @property versionCode - versionCode
 * @property actid - actid
 * @property anchoruid - anchoruid
 * @property webId - webId
 * @property fileMd5 - fileMd5
 */
type StartDownLoadReq = {
    package: string;
    name: string;
    url: string;
    extra: string;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
    continueDownload: boolean;
    downloadStatus: number;
    gameIcon: string;
    versionCode: number;
    actid: string;
    anchoruid: string;
    webId: string;
    fileMd5: string;
};

/**
 * 暂停下载参数
 * @property pauseAll - pauseAll
 * @property tag - tag
 * @property name - name
 * @property package - package
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 * @property gameIcon - gameIcon
 */
type PauseDownloadReq = {
    pauseAll: boolean;
    tag: string;
    name: string;
    package: string;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
    gameIcon: string;
};

/**
 * 取消下载参数
 * @property cancelAll - cancelAll
 * @property tag - tag
 * @property package - package
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 */
type CancelDownloadReq = {
    cancelAll: boolean;
    tag: string;
    package: string;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
};

/**
 * 安装Apk参数
 * @property package - package
 * @property name - name
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 * @property versionCode - versionCode
 */
type InstallApkReq = {
    package: string;
    name: string;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
    versionCode: number;
};

/**
 * 启动App参数
 * @property package - package
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 */
type StartAppReq = {
    package: string;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
};

/**
 * 下载信息
 * @property packageName - packageName
 * @property progress - progress
 * @property status - status
 * @property total - total
 * @property finished - finished
 * @property url - url
 * @property name - name
 * @property mVersionCode - mVersionCode
 * @property extra - extra
 * @property gameId - gameId
 * @property iconUrl - iconUrl
 * @property downloadPerSize - downloadPerSize
 * @property downloadSpeed - downloadSpeed
 */
type DownloadRsp = {
    packageName: string;
    progress: string;
    status: DownLoadStatus;
    total: string;
    finished: string;
    url: string;
    name: string;
    mVersionCode: string;
    extra: string;
    gameId: number;
    iconUrl: string;
    downloadPerSize: string;
    downloadSpeed: string;
};

/**
 * 获取下载信息参数
 * @property package - package
 * @property name - name
 * @property url - url
 * @property fileMd5 - fileMd5
 * @property joint - joint
 * @property versionCode - versionCode
 * @property gameId - gameId
 * @property downLoadAppId - downLoadAppId
 * @property gameBaseId - gameBaseId
 */
type GetDownloadInfoReq = {
    package: string;
    name: string;
    url: string;
    fileMd5: string;
    joint: number;
    versionCode: number;
    gameId: number;
    downLoadAppId: number;
    gameBaseId: number;
};

/**
 * 下载监听回调信息
 * @property packageName - packageName
 * @property progress - progress
 * @property status - status
 * @property total - total
 * @property finished - finished
 * @property url - url
 * @property name - name
 * @property mVersionCode - mVersionCode
 * @property extra - extra
 * @property gameId - gameId
 * @property iconUrl - iconUrl
 * @property downloadPerSize - downloadPerSize
 * @property downloadSpeed - downloadSpeed
 */
type RegisterCallbackInfo = {
    packageName: string;
    progress: string;
    status: DownLoadStatus;
    total: string;
    finished: string;
    url: string;
    name: string;
    mVersionCode: string;
    extra: string;
    gameId: number;
    iconUrl: string;
    downloadPerSize: string;
    downloadSpeed: string;
};

/**
 * @param info - 回调参数
 */
type RegisterCallback = (info: RegisterCallbackInfo) => void;

/**
 * 添加对下载的监听参数
 * @property callback - 回调
 */
type RegisterListenerReq = {
    callback: RegisterCallback;
};

/**
 * 移除对下载的监听参数
 * @property [callback] - 回调
 */
type UnregisterListenerReq = {
    callback?: RegisterCallback;
};

/**
 * 打开游戏预约弹窗参数
 * @property gameCenterId - gameCenterId
 * @property gameBaseId - gameBaseId
 * @property downLoadAppId - downLoadAppId
 * @property gameName - gameName
 * @property fromId - fromId
 */
type ReserveGameReq = {
    gameCenterId: number;
    gameBaseId: number;
    downLoadAppId: number;
    gameName: string;
    fromId: string;
};

/**
 * 打开游戏预约弹窗结果
 * @property isReserve - 是否预约上; 0-未预约 1-预约成功
 */
type ReserveGameRsp = {
    isReserve: number;
};

/**
 * 设备相关
 */
namespace device {
    /**
     * 获取设备摄像头分辨率
     */
    function getCameraResolution(): Promise<CameraResolutionInfo>;
    /**
     * 开始录制音频
     */
    function startAudioRecording(): Promise<void>;
    /**
     * 结束录制音频
     */
    function finishAudioRecording(): Promise<RecordInfo>;
    /**
     * 设置横竖屏
     * @param params - 输入参数
     */
    function setOrientation(params: SetOrientationOptions): Promise<void>;
    /**
     * 获取当前直播间的设备状态
     */
    function getDeviceInfo(): Promise<DeviceInfo>;
    /**
     * 在设备中打开一个webview
     * @param params - 打开webview的参数
     */
    function openWebView(params: OpenWebViewParams): Promise<WebViewInfo>;
    /**
     * 关闭webview
     * @param params - 关闭webview参数
     * @returns 调用结果
     */
    function closeWebView(params: WebViewParams): Promise<void>;
    /**
     * 设置webview的布局
     * @param params - webview基于容器的布局信息
     */
    function setWebViewLayout(params: WebViewLayoutParam): Promise<void>;
    /**
     * 发送本地 webview 广播消息
     * @param params - 消息参数
     */
    function postBroadcastMessage(params: PostBroadcastMessageParam): Promise<void>;
    /**
     * 监听webview容器宽高变化的消息
     * @param callback - webview容器宽高变化的回调
     */
    function onWebViewContainerLayoutChange(callback: WebViewContainerLayoutChangeCallback): Promise<void>;
    /**
     * 监听本地 webview 广播消息
     * @param params - 监听参数
     */
    function onBroadcastMessage(params: OnBroadcastMessageParams): Promise<void>;
    /**
     * 取消监听本地 webview 广播消息
     * @param params - 取消监听参数
     */
    function offBroadcastMessage(params: OffBroadcastMessageParams): Promise<void>;
    /**
     * 打开本地server
     * @param params - 打开本地server参数
     * @returns 返回服务信息
     */
    function startLocalServer(params: LocalServerParams): Promise<LocalServerInfo>;
    /**
     * 关闭本地server
     * @param params - 关闭本地server参数
     */
    function stopLocalServer(params: StopLocalServerParams): Promise<void>;
}

/**
 * @property width - 宽度（单位是像素）
 * @property height - 高度（单位是像素）
 */
type CameraResolutionInfo = {
    width: number;
    height: number;
};

/**
 * @property url - 录音的地址
 */
type RecordInfo = {
    url: string;
};

/**
 * @property orientation - 方向, portrait-竖屏(默认), landscape-横屏
 */
type SetOrientationOptions = {
    orientation: string;
};

/**
 * @property isCameraOn - 主播是否打开摄像头
 * @property isMicOn - 主播是否打开麦克风
 * @property isSpeakerOn - 主播是否打开扬声器
 * @property isKalaokOn - 主播是否打开伴奏
 */
type DeviceInfo = {
    isCameraOn: boolean;
    isMicOn: boolean;
    isSpeakerOn: boolean;
    isKalaokOn: boolean;
};

/**
 * webview信息
 * @property webViewId - webWiewId
 */
type WebViewInfo = {
    webViewId: string;
};

/**
 * webview的布局信息
 * @property [x] - WebView 距离左侧距离，单位像素
 * @property [y] - WebView 距离顶部距离，单位像素
 * @property width - WebView宽度，单位像素
 * @property height - WebView高度，单位像素
 */
type WebViewLayoutInfo = {
    x?: number;
    y?: number;
    width: number;
    height: number;
};

/**
 * 关闭按钮布局信息
 * @property url - 按钮图链接
 * @property x - 按钮距Webview左侧距离，单位像素
 * @property y - 按钮距Webview顶部距离，单位像素
 * @property width - 按钮宽度，单位像素
 * @property height - 按钮高度，单位像素
 */
type CloseBtnInfo = {
    url: string;
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * @property url - 要打开webview的地址，如果要传入初始化参数请以查询串的方式带在url后面
 * @property layout - webview基于容器的布局，单位是像素
 * @property [closeBtn] - 关闭按钮的图片和基于webview的布局，单位是像素
 */
type OpenWebViewParams = {
    url: string;
    layout: WebViewLayoutInfo;
    closeBtn?: CloseBtnInfo;
};

/**
 * @property webviewId - webviewId
 */
type WebViewParams = {
    webviewId: string;
};

/**
 * webview的布局信息
 * @property webviewId - webviewId
 * @property x - WebView 距离左侧距离，单位像素
 * @property y - WebView 距离顶部距离，单位像素
 * @property width - WebView宽度，单位像素
 * @property height - WebView高度，单位像素
 */
type WebViewLayoutParam = {
    webviewId: string;
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * @property eventName - 消息名
 * @property message - 消息内容
 */
type PostBroadcastMessageParam = {
    eventName: string;
    message: string;
};

/**
 * @property containerWidth - webview容器宽度
 * @property containerHeight - webview容器高度
 * @property isLandscape - 是否横屏，web端固定为true
 */
type LayoutChangeInfo = {
    containerWidth: number;
    containerHeight: number;
    isLandscape: boolean;
};

/**
 * @param info - webview容器宽高消息
 */
type WebViewContainerLayoutChangeCallback = (info: LayoutChangeInfo) => void;

/**
 * 本地小程序消息
 * @param message - 消息内容
 */
type BroadcastMessageCallback = (message: string) => void;

/**
 * 监听参数
 * @property eventName - 消息名
 * @property callback - 消息回调
 */
type OnBroadcastMessageParams = {
    eventName: string;
    callback: BroadcastMessageCallback;
};

/**
 * @property eventName - 消息名
 */
type OffBroadcastMessageParams = {
    eventName: string;
};

/**
 * 返回服务信息
 * @property serverId - 本地服务标识
 * @property root - 根路径
 */
type LocalServerInfo = {
    serverId: string;
    root: string;
};

/**
 * @property path - 指定启动的本地服务的root
 */
type LocalServerParams = {
    path: string;
};

/**
 * @property serverId - 指定要关闭的serverId
 */
type StopLocalServerParams = {
    serverId: string;
};

/**
 * 逐步废弃
 */
function requestEbs(options: any): void;

/**
 * 环境相关
 */
namespace env {
    /**
     * 获取当前版本类型
     * @returns 返回当前版本类型
     */
    function getVersionType(): Promise<GetVersionTypeRsp>;
    /**
     * 获取初始化参数
     * @returns 初始化参数
     */
    function getInitialParam(): Promise<object>;
    /**
     * 获取小程序参数
     * @returns 小程序参数
     */
    function getExtInfo(): Promise<GetExtInfoRsp>;
    /**
     * 获取宿主信息接口
     * @returns 返回宿主信息
     */
    function getHostInfo(): Promise<GetHostInfoRsp>;
    /**
     * 获取性能数据
     * @returns 调用结果
     */
    function getPerformaceData(): Promise<PerformaceDataRsp>;
}

/**
 * @param number1 - 开发版本
 * @param number2 - 灰度版本
 * @param number3 - 正式版本
 */
type ExtVersionType = Enum;

/**
 * @property versionType - 版本类型
 */
type GetVersionTypeRsp = {
    versionType: ExtVersionType;
};

/**
 * @property extUuid - 小程序id
 * @property extName - 小程序名字
 * @property extVersion - 小程序版本
 * @property extVersionType - 版本类型枚举
 * @property extType - 小程序类型
 */
type GetExtInfoRsp = {
    extUuid: string;
    extName: string;
    extVersion: string;
    extVersionType: ExtVersionType;
    extType: string;
};

/**
 * @param huya_web - 虎牙直播WEB主站
 * @param huya_app_ios - 虎牙直播APP(iOS)
 * @param huya_app_adr - 虎牙直播APP(安卓)
 * @param huya_pc_viewer - 虎牙直播PC观众端
 * @param huya_pc_anchor - 虎牙直播PC主播端
 * @param huya_zs_ios - 虎牙直播助手(iOS)
 * @param huya_zs_adr - 虎牙直播助手(安卓)
 */
type Host = Enum;

/**
 * @param web - 浏览器
 * @param ios - IOS
 * @param adr - 安卓
 * @param pc - PC客户端
 */
type Platform = Enum;

/**
 * 宿主信息
 * @property name - 宿主名称
 * @property platform - 平台
 * @property version - 宿主版本
 * @property baseVersion - 基础包版本
 */
type GetHostInfoRsp = {
    name: Host;
    platform: Platform;
    version: string;
    baseVersion: string;
};

/**
 * 性能数据
 * @property [session_id] - 会话id
 * @property [enter] - 进入直播间
 * @property [fetch_list_start] - 获取小程序列表开始
 * @property [fetch_list_succ] - 获取小程序列表成功
 * @property [fetch_list_fail] - 获取小程序列表失败
 * @property [show_entrance_succ] - 入口显示成功
 * @property [show_entrance_fail] - 入口显示失败
 * @property [show_entrance_channel_succ] - 互动通道显示成功
 * @property [show_entrance_channel_fail] - 互动通道显示失败
 * @property [exec_start] - 触发启动小程序开始
 * @property [exec_succ] - 触发启动小程序成功
 * @property [exec_fail] - 触发启动小程序失败
 * @property [check_auth_start] - 验证小程序权限开始
 * @property [check_auth_succ] - 验证小程序权限成功
 * @property [check_auth_fail] - 验证小程序权限失败
 * @property [install_start] - 安装小程序开始
 * @property [install_succ] - 安装小程序成功
 * @property [install_fail] - 安装小程序失败
 * @property [load_supframe_start] - 中间层iframe加载开始
 * @property [load_supframe_succ] - 中间层iframe加载成功
 * @property [load_supframe_fail] - 中间层iframe加载失败
 * @property [load_busiframe_start] - 业务层iframe加载开始
 * @property [load_busiframe_succ] - 业务层iframe加载成功
 * @property [load_busiframe_fail] - 业务层iframe加载失败
 * @property [create_vc_start] - vc创建开始
 * @property [download_base_start] - 开始下载base包
 * @property [download_base_end] - 完成下载base包
 * @property [download_busi_start] - 开始下载busi包
 * @property [download_busi_end] - 完成下载busi包
 * @property [load_basebundle_start] - baseBundle加载开始
 * @property [load_basebundle_end] - baseBundle加载成功
 * @property [load_busibundle_start] - 业务Bundle加载开始
 * @property [load_busibundle_end] - 业务Bundle加载成功
 * @property [create_bridge_start] - bridge创建开始
 * @property [create_rootview_start] - rootView创建开始
 * @property [rn_view_appear] - RN root View显示
 * @property [bundle_load_type] - bundle来源, 0-本地有URL指定的版本, 1-本地没有URL指定的版本，使用本地最新的版本, 2-本地没有URL指定版本，且一直等待下载完成
 * @property [cef_process_start] - CEF进程启动开始
 * @property [cef_process_succ] - CEF进程启动成功
 * @property [cef_process_fail] - CEF进程启动失败
 * @property [cef_loadpage_start] - CEF加载页面开始
 * @property [cef_loadpage_succ] - CEF加载页面成功
 * @property [cef_loadpage_fail] - CEF加载页面失败
 */
type PerformaceInfo = {
    session_id?: string;
    enter?: number;
    fetch_list_start?: number;
    fetch_list_succ?: number;
    fetch_list_fail?: number;
    show_entrance_succ?: number;
    show_entrance_fail?: number;
    show_entrance_channel_succ?: number;
    show_entrance_channel_fail?: number;
    exec_start?: number;
    exec_succ?: number;
    exec_fail?: number;
    check_auth_start?: number;
    check_auth_succ?: number;
    check_auth_fail?: number;
    install_start?: number;
    install_succ?: number;
    install_fail?: number;
    load_supframe_start?: number;
    load_supframe_succ?: number;
    load_supframe_fail?: number;
    load_busiframe_start?: number;
    load_busiframe_succ?: number;
    load_busiframe_fail?: number;
    create_vc_start?: number;
    download_base_start?: number;
    download_base_end?: number;
    download_busi_start?: number;
    download_busi_end?: number;
    load_basebundle_start?: number;
    load_basebundle_end?: number;
    load_busibundle_start?: number;
    load_busibundle_end?: number;
    create_bridge_start?: number;
    create_rootview_start?: number;
    rn_view_appear?: number;
    bundle_load_type?: number;
    cef_process_start?: number;
    cef_process_succ?: number;
    cef_process_fail?: number;
    cef_loadpage_start?: number;
    cef_loadpage_succ?: number;
    cef_loadpage_fail?: number;
};

/**
 * 性能数据
 * @property [data] - 性能数据详细
 */
type PerformaceDataRsp = {
    data?: PerformaceInfo;
};

/**
 * EXE加工相关
 */
namespace exe {
    /**
     * 初始化Game环境
     * @param params - 参数
     * @returns 返回操作结果
     */
    function initGameEnv(params: ExeInitGameEnvReq): Promise<void>;
    /**
     * 启动Game
     * @param params - 参数
     * @returns 返回操作结果
     */
    function launchGame(params: ExeLaunchGameReq): Promise<void>;
    /**
     * 停止Game
     * @returns 返回操作结果
     */
    function shutdownGame(): Promise<void>;
    /**
     * 发送消息至Game
     * @param params - 参数
     * @returns 返回操作结果
     */
    function sendToGame(params: ExeSendToGameReq): Promise<void>;
    /**
     * 监听消息信息
     * @param params - 参数
     * @returns 返回操作结果
     */
    function onGameMessage(params: ExeOnGameMessageReq): Promise<void>;
    /**
     * 取消监听消息信息
     * @returns 返回操作结果
     */
    function offGameMessage(): Promise<void>;
}

/**
 * 初始化Game环境传参
 * @property optParams - 预留参数(可选)
 */
type ExeInitGameEnvReq = {
    optParams: string;
};

/**
 * 启动Game传参
 * @property [processMode] - local/cloud: 本地加工(默认)/云端加工(可选)
 * @property md5 - game Exe的压缩包md5(必填)
 * @property exeName - game exe的本地文件名字(必填)
 * @property [exeParams] - game exe的启动参数(可选)
 * @property [optParams] - 预留参数(可选)
 */
type ExeLaunchGameReq = {
    processMode?: string;
    md5: string;
    exeName: string;
    exeParams?: string;
    optParams?: string;
};

/**
 * 发送消息至Game传参
 * @property message - 消息内容
 */
type ExeSendToGameReq = {
    message: string;
};

/**
 * 回调消息
 * @property name - 消息名称
 * @property message - 消息内容
 */
type ExeOnGameMessageCallbackParams = {
    name: string;
    message: string;
};

/**
 * 监听相关消息回调
 * @param params - 回调消息
 */
type ExeOnGameMessageCallback = (params: ExeOnGameMessageCallbackParams) => void;

/**
 * 监听消息信息传参
 * @property callback - 监听相关消息回调
 */
type ExeOnGameMessageReq = {
    callback: ExeOnGameMessageCallback;
};

/**
 * 反馈相关
 */
namespace feedback {
    /**
     * 上报数据到grafana
     * @param params - 请求参数
     * @returns 返回结果
     */
    function reportMetric(params: ReportMetricReq): Promise<void>;
    /**
     * 打开反馈表单
     * @param params - 请求参数
     * @returns 返回结果
     */
    function openFeedbackForm(params: FeedbackParams): Promise<void>;
}

/**
 * 上报grafana参数
 * @property namespace - namespace
 * @property metricName - metricName
 * @property dimensions - dimensions
 * @property fields - fields
 */
type ReportMetricReq = {
    namespace: string;
    metricName: string;
    dimensions: any;
    fields: any;
};

/**
 * @property type - 问题分类
 * @property content - 描述
 * @property param - 额外参数
 */
type FeedbackParams = {
    type: string;
    content: string;
    param: string;
};

/**
 * 文件系统
 */
namespace fs {
    /**
     * 上传图片
     * @returns 调用结果
     */
    function uploadImg(): Promise<UrlInfo>;
    /**
     * 离线资源是否下载完成
     * @param params - 监听参数
     * @returns 调用结果
     */
    function offlineFileReady(params: UrlInfo): Promise<void>;
    /**
     * 通用上传文件接口
     * @returns 调用结果
     */
    function uploadFile(): Promise<UrlInfo>;
    /**
     * 批量下载资源
     * @param params - 下载资源信息
     * @returns 调用结果
     */
    function downloadBatchRes(params: BatchRes[]): Promise<void>;
    /**
     * 删除资源
     * @param params - 要删除的资源信息
     * @returns 调用结果
     */
    function removeRes(params: RemoveRes): Promise<void>;
    /**
     * 判断资源是否存在
     * @param params - 要判断的资源信息
     * @returns 查询结果结果
     */
    function isResExists(params: ExistsReq): Promise<ExistsResp>;
    /**
     * 增强型上传文件
     * @param params - 要判断的资源信息
     * @returns 查询结果结果
     */
    function uploadFileExtra(params: FileExtraParams): Promise<FileExtraResp>;
    /**
     * 批量发起下载共享资源
     * @param params - 下载资源信息
     * @returns 调用结果
     */
    function downloadBatchSharedRes(params: BatchSharedRes[]): Promise<void>;
    /**
     * 判断共享资源是否存在
     * @param params - 要判断的资源信息
     * @returns 查询结果结果
     */
    function isSharedResExists(params: BatchSharedRes): Promise<ExistsResp>;
    /**
     * 清除下载资源
     * @param params - 参数
     * @returns 结果
     */
    function cleanRes(params: CleanResParams): Promise<void>;
}

/**
 * 文件信息
 * @property url - 文件的地址
 */
type UrlInfo = {
    url: string;
};

/**
 * 下载资源信息
 * @property url - 要下载的资源url
 * @property md5 - 资源md5
 * @property unzip - 自动解压
 * @property [offline] - 是否离线资源
 * @property [pathType] - 枚举, 0-目录1, 1-目录2, 2-目录3
 * @property [sourceName] - 资源名，用于当二级目录名
 * @property [encryptUrl] - 要下载的加密资源url
 * @property [encryptMd5] - 加密资源md5
 */
type BatchRes = {
    url: string;
    md5: string;
    unzip: boolean;
    offline?: boolean;
    pathType?: number;
    sourceName?: string;
    encryptUrl?: string;
    encryptMd5?: string;
};

/**
 * 要删除的资源信息
 * @property md5 - 资源md5
 * @property [encryptMd5] - 加密资源md5
 * @property [unzip] - 如果是true，则把zip包和解压目录一并删掉；否则只删除zip包
 */
type RemoveRes = {
    md5: string;
    encryptMd5?: string;
    unzip?: boolean;
};

/**
 * 判断结果
 * @property isExists - 是否存在
 * @property path - 如果存在，则返回目标文件的完整路径，否则为空
 */
type ExistsResp = {
    isExists: boolean;
    path: string;
};

/**
 * 判断资源是否存在参数
 * @property md5 - 资源md5
 * @property fileName - 文件名
 * @property [unzip] - 目标文件是否自动解压
 * @property [pathType] - 枚举, 0-目录1, 1-目录2, 2-目录3
 * @property [url] - 要下载的资源url
 * @property [encryptUrl] - 要下载的加密资源url
 * @property [encryptMd5] - 加密资源md5
 */
type ExistsReq = {
    md5: string;
    fileName: string;
    unzip?: boolean;
    pathType?: number;
    url?: string;
    encryptUrl?: string;
    encryptMd5?: string;
};

/**
 * 增强型上传文件返回
 * @property data - 上传服务返回的数据
 * @property statusCode - 上传服务返回的HTTP状态码
 * @property header - 上传服务返回的Response Header
 */
type FileInfo = {
    data: any;
    statusCode: number;
    header: any;
};

/**
 * 增强型上传文件返回
 * @property info - 文件信息
 */
type FileExtraResp = {
    info: FileInfo;
};

/**
 * 增强型上传文件参数
 * @property url - 指定的上传服务地址
 * @property fileKey - 文件在FormData中的键值
 * @property [params] - params自定义参数
 * @property compress - 是否需要压缩
 */
type FileExtraParams = {
    url: string;
    fileKey: string;
    params?: any;
    compress: boolean;
};

/**
 * 下载资源信息
 * @property url - 资源url
 * @property md5 - 资源md5
 * @property unzip - 是否自动解压
 */
type BatchSharedRes = {
    url: string;
    md5: string;
    unzip: boolean;
};

/**
 * 清除资源参数
 * @property reserveMD5List - 要保留的资源md5列表，至少传入一个
 */
type CleanResParams = {
    reserveMD5List: string[];
};

/**
 * 游戏相关
 */
namespace game {
    /**
     * 启动游戏
     * @param params - 参数
     * @returns 返回创建结果
     */
    function start(params: GameStartReq): Promise<LuaGameInfo>;
    /**
     * 停止游戏
     * @param params - 参数
     * @returns 返回操作结果
     */
    function stop(params: GameStopReq): Promise<void>;
    /**
     * 发送指令
     * @param params - 参数
     * @returns 返回操作结果
     */
    function pushCommand(params: GamePushCommandReq): Promise<void>;
    /**
     * 监听onCommand消息
     * @param params - 参数
     * @returns 返回操作结果
     */
    function onCommand(params: GameOnCommandReq): Promise<void>;
    /**
     * 通用事件监听
     * @param params - 参数
     * @returns 返回操作结果
     */
    function on(params: EventParams): Promise<void>;
    /**
     * 通用取消事件监听
     * @param params - 参数
     * @returns 返回操作结果
     */
    function off(params: EventParams): Promise<void>;
    /**
     * 开始小游戏（Lua加工）
     * @param params - 参数
     * @returns 返回操作结果
     */
    function startGame(params: StartGameParams): Promise<any>;
    /**
     * 关闭整个游戏
     * @param params - 参数
     * @returns 返回操作结果
     */
    function stopGame(params: StopGameParams): Promise<any>;
    /**
     * 增加节点
     * @param params - 参数
     * @returns 返回操作结果
     */
    function addNode(params: AddNodeParams): Promise<NodeInfo>;
    /**
     * 删除节点
     * @param params - 参数
     * @returns 返回操作结果
     */
    function removeNode(params: RemoveNodeParams): Promise<any>;
    /**
     * 开始游戏
     * @param params - 参数
     * @returns 返回操作结果
     */
    function begin(params: BeginParams): Promise<any>;
    /**
     * 结束游戏
     * @param params - 参数
     * @returns 返回操作结果
     */
    function end(params: any): Promise<any>;
    /**
     * 实时更新
     * @param params - 输入参数
     * @returns 调用结果
     */
    function updateNode(params: UpdateNodeParams): Promise<any>;
}

/**
 * lua实例的布局信息
 * @property x - 轴的偏移量，相对于推流分辨率
 * @property y - 轴的偏移量，相对于推流分辨率
 * @property width - 宽度，相对于推流分辨率
 * @property height - 高度，相对于推流分辨率
 * @property force - 是否强制使用上述的布局信息，默认是否，即按name字段记忆主播对这个lua实例的布局操作，以主播操作后的布局结果为准
 */
type LuaOffsetInfo = {
    x: number;
    y: number;
    width: number;
    height: number;
    force: boolean;
};

/**
 * 启动游戏传参
 * @property name - lua实例的名称，由业务指定，关联布局信息
 * @property offset - lua实例的布局信息
 * @property groupName - 图层分组的组名
 * @property md5 - md5
 * @property [params] - params自定义参数
 */
type GameStartReq = {
    name: string;
    offset: LuaOffsetInfo;
    groupName: string;
    md5: string;
    params?: any;
};

/**
 * Lua实例信息
 * @property id - lua实例的id，由终端生成，用于给lua实例发送命令
 * @property layerId - lua图层的id，由终端生成，用于监听图层状态变化
 */
type LuaGameInfo = {
    id: string;
    layerId: string;
};

/**
 * 停止游戏参数
 * @property id - lua实例的id，由终端生成
 */
type GameStopReq = {
    id: string;
};

/**
 * 发送指令传参
 * @property id - lua实例的id，由终端生成
 * @property cmd - cmd
 * @property [params] - params
 */
type GamePushCommandReq = {
    id: string;
    cmd: string;
    params?: any;
};

/**
 * Command消息回调
 * @param message - 回调消息
 */
type GameOnCommandCallback = (message: any) => void;

/**
 * 监听onCommand消息传参
 * @property id - lua实例的id，由终端生成
 * @property callback - callback
 */
type GameOnCommandReq = {
    id: string;
    callback: GameOnCommandCallback;
};

/**
 * 参数
 * @property eventName - 事件名
 * @property callback - 回调
 */
type EventParams = {
    eventName: string;
    callback: GameOnCommandCallback;
};

/**
 * 开始游戏参数
 * @property md5 - lua资源包md5
 * @property needDetect - 是否开启检测
 * @property gameScenes - 游戏场景, 1-多人游戏, 2-单人游戏
 * @property setMirror - 设置镜像
 * @property [params] - effect传给lua初始化参数--不同业务定义不同
 */
type StartGameParams = {
    md5: string;
    needDetect: boolean;
    gameScenes: number;
    setMirror: boolean;
    params?: any;
};

/**
 * 结束游戏参数
 * @property [type] - 目前可关闭的类型，只支持全部关闭，默认all
 */
type StopGameParams = {
    type?: string;
};

/**
 * Node数据
 * @property id - lua实例的id，由终端生成（保证在同一个小程序内唯一），用于给lua发命令
 * @property layerId - lua图层的id，由终端生成，用于监听图层状态变化
 */
type NodeInfo = {
    id: string;
    layerId: string;
};

/**
 * 布局信息
 * @property x - x方向偏移量
 * @property y - y方向偏移量
 * @property width - 宽度
 * @property height - 高度
 */
type LuaLayoutInfo = {
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * 增加节点参数
 * @property [name] - pc专用，图层名称
 * @property [groupName] - pc专用，图层分组的组名，只是对图层列表分组
 * @property md5 - 资源下载链接的md5
 * @property layoutInfo - 布局信息
 * @property nodeFlag - 表示节点类型，预留位运算的赋值方式暂时用不上
 * @property zOrder - 表示渲染层级
 * @property supportOperate - 使用位运算来判断node需要哪些能力
 * @property nodeInitParams - 节点启动参数
 * @property reload4SizeChange - 分辨率变化是否重启节点
 * @property [params] - 自定义参数
 */
type AddNodeParams = {
    name?: string;
    groupName?: string;
    md5: string;
    layoutInfo: LuaLayoutInfo;
    nodeFlag: number;
    zOrder: number;
    supportOperate: number;
    nodeInitParams: any;
    reload4SizeChange: boolean;
    params?: any;
};

/**
 * 删除节点参数
 * @property id - lua实例的id
 */
type RemoveNodeParams = {
    id: string;
};

/**
 * 开始游戏参数
 * @property gameScenes - 游戏场景, 1-多人游戏, 2-单人游戏
 * @property setMirror - 设置镜像，一旦设置了端上就不可更改镜像
 * @property [params] - 自定义参数
 */
type BeginParams = {
    gameScenes: number;
    setMirror: boolean;
    params?: any;
};

/**
 * 实时更新参数
 * @property id - lua实例id
 * @property layerId - lua图层的id
 * @property nodeInfo - 自定义参数
 */
type UpdateNodeParams = {
    id: string;
    layerId: string;
    nodeInfo: any;
};

/**
 * 互动相关
 */
namespace interact {
    /**
     * 发送自定义连麦消息
     * @param params - 参数
     * @returns 调用结果
     */
    function sendInteractMsg(params: InteractMsg): Promise<void>;
    /**
     * 本地模拟一条系统消息
     * @param params - 参数
     * @returns 调用结果
     */
    function showBarrageMsg(params: BarrageMsg): Promise<void>;
    /**
     * 获取连麦成员
     * @param [params] - 参数
     * @returns 调用结果
     */
    function getInteractGameMember(params?: any): Promise<Members>;
    /**
     * 获取正在游戏的成员列表
     * @param [params] - 参数
     * @returns 调用结果
     */
    function getInteractGamingMembers(params?: any): Promise<Members>;
    /**
     * 监听互动事件
     * @param eventName - 事件名, onInteractData-游戏连麦消息(默认), onInteractGameAction-游戏行为变化
     * @param callback - 连麦消息回调
     * @returns 调用结果
     */
    function on(eventName: string, callback: InteractCallback): Promise<void>;
    /**
     * 取消监听互动事件
     * @param eventName - 事件名, onInteractData-游戏连麦消息(默认), onInteractGameAction-游戏行为变化
     * @param [callback] - 连麦消息回调
     * @returns 调用结果
     */
    function off(eventName: string, callback?: InteractCallback): Promise<void>;
}

/**
 * 自定义连麦消息
 * @property unionIds - 被邀请主播端的unionId列表
 * @property msg - 自定义消息数据
 */
type InteractMsg = {
    unionIds: string[];
    msg: string;
};

/**
 * 模拟消息
 * @property text - 消息文案
 */
type BarrageMsg = {
    text: string;
};

/**
 * 成员信息
 * @property unionId - 用户unionId
 * @property name - 用户昵称
 * @property avatarUrl - 用户头像
 * @property role - 角色, 0-成员, 1-房主
 */
type Member = {
    unionId: string;
    name: string;
    avatarUrl: string;
    role: number;
};

/**
 * 成员列表
 * @property members - 连麦成员
 */
type Members = {
    members: Member[];
};

/**
 * 连麦消息
 * @property gameData - 游戏数据JSON字符串
 * @property action - 游戏行为, 1-游戏开始, 2-游戏人数变化
 */
type CallbackMsg = {
    gameData: string;
    action: number;
};

/**
 * @param msg - 回调消息
 */
type InteractCallback = (msg: CallbackMsg) => void;

/**
 * 云端Leaf加工
 */
namespace leaf {
    /**
     * 启动Leaf
     * @param params - 参数
     * @returns 调用结果
     */
    function start(params: LeafStartParams): Promise<LeafStartRsp>;
    /**
     * 关闭Leaf
     * @param params - 关闭参数
     * @returns 调用结果
     */
    function stop(params: LeafStopParams): Promise<LeafActionRsp>;
    /**
     * 给Leaf发送数据
     * @param params - 参数
     * @returns 调用结果
     */
    function sendJobMessage(params: JobMessage): Promise<LeafActionRsp>;
    /**
     * 通用Leaf事件监听
     * @param params - 输入参数
     * @returns 调用结果
     */
    function on(params: OnLeafEventsReq): Promise<void>;
    /**
     * 通用Leaf事件取消监听
     * @param params - 输入参数
     * @returns 调用结果
     */
    function off(params: OffLeafEventsReq): Promise<void>;
}

/**
 * Leaf开始信息
 * @property jobKey - 作业唯一key
 * @property ret - 业务返回码
 * @property msg - 错误码辅助信息
 * @property jobVersion - 作业的版本号更新的时候需要传入
 */
type LeafStartRsp = {
    jobKey: string;
    ret: number;
    msg: string;
    jobVersion: number;
};

/**
 * Leaf启动参数
 * @property buziCode - 业务Id
 * @property needHeartbeat - 是否需要心跳保活
 * @property [params] - 该业务ID自定义参数
 */
type LeafStartParams = {
    buziCode: string;
    needHeartbeat: boolean;
    params?: any;
};

/**
 * Leaf 操作结果
 * @property ret - 业务返回码
 * @property msg - 错误码辅助信息
 */
type LeafActionRsp = {
    ret: number;
    msg: string;
};

/**
 * Leaf 关闭参数
 * @property jobKey - 作业唯一key
 */
type LeafStopParams = {
    jobKey: string;
};

/**
 * 任务信息
 * @property jobKey - 作业唯一key
 * @property buziCode - 业务Id
 * @property message - 这个就是数据，一般是json字符串
 */
type JobMessage = {
    jobKey: string;
    buziCode: string;
    message: string;
};

/**
 * Leaf状态信息
 * @property status - 心跳状态, 0-心跳成功, 1-心跳失败
 * @property buziCode - 业务Id
 * @property jobKey - 作业唯一key
 * @property [msg] - 错误提示信息
 */
type LeafStatus = {
    status: number;
    buziCode: string;
    jobKey: string;
    msg?: string;
};

/**
 * @param info - 回调信息
 */
type LeafCallback = (info: LeafStatus | any) => void;

/**
 * Leaf事件监听参数
 * @property eventName - 事件名, leafStatusChange-听Leaf状态变化(默认)
 * @property callback - 事件回调
 */
type OnLeafEventsReq = {
    eventName: string;
    callback: LeafCallback;
};

/**
 * Leaf事件取消监听参数
 * @property eventName - 事件名, leafStatusChange-听Leaf状态变化(默认)
 */
type OffLeafEventsReq = {
    eventName: string;
};

/**
 * 连麦
 */
namespace link {
    /**
     * 开始讲话
     * @param params - 讲话参数
     * @returns 返回调用结果
     */
    function startPublishAudio(params: PublishAudioParams): Promise<AudioStreamInfo>;
    /**
     * 停止讲话
     * @returns 返回调用结果
     */
    function stopPublishAudio(): Promise<void>;
    /**
     * 设置讲话音量
     * @param params - 音量参数
     * @returns 返回调用结果
     */
    function setMicVolume(params: MicVolumeParams): Promise<void>;
    /**
     * 更新音频播放
     * @param params - 更新音频播放参数
     * @returns 返回调用结果
     */
    function updateAudioPlay(params: UpdateAudioPlayParams[]): Promise<void>;
    /**
     * 监听音频流改变(无用)
     * @param params - 音频流改变参数
     * @returns 返回调用结果
     */
    function onAudioStreamNameChange(params: AudioStreamNameChangeParams): Promise<void>;
    /**
     * 移除音频流改变监听(无用)
     * @returns 返回调用结果
     */
    function offAudioStreamNameChange(): Promise<void>;
    /**
     * 发起连麦邀请
     * @param params - 音频流改变参数
     * @returns 返回调用结果
     */
    function inviteLinkMic(params: InviteLinkMicParams): Promise<void>;
    /**
     * 监听连麦邀请消息
     * @param params - 音频流改变参数
     * @returns 返回调用结果
     */
    function onInviteNotice(params: OnInviteNoticeParams): Promise<void>;
    /**
     * 取消监听连麦邀请消息
     * @returns 返回调用结果
     */
    function offInviteNotice(): Promise<void>;
    /**
     * 监听拉流是否有声音
     * @param params - 音频流改变参数
     * @returns 返回调用结果
     */
    function onAudioChange(params: OnAudioChangeParams): Promise<void>;
    /**
     * 取消监听拉流是否有声音
     * @returns 返回调用结果
     */
    function offAudioChange(): Promise<void>;
}

/**
 * @property streamName - 推流的流名称
 */
type AudioStreamInfo = {
    streamName: string;
};

/**
 * @property [streamName] - 指定流名称推流，可选，如果没给的话由端上生成流名称
 */
type PublishAudioParams = {
    streamName?: string;
};

/**
 * @property volume - 音量，取值范围是0-100
 */
type MicVolumeParams = {
    volume: number;
};

/**
 * @property [unionId] - 用户的unionId
 * @property [uid] - 在UDB-SDK相关接口没提供之前暂用
 * @property [streamName] - 流名称
 * @property volume - 音量，取值范围是0-100
 */
type UpdateAudioPlayParams = {
    unionId?: string;
    uid?: number;
    streamName?: string;
    volume: number;
};

/**
 * @property streamName - 流名称
 */
type StreamNameChangeInfo = {
    streamName: string;
};

/**
 * @param streamNameChangeInfo - 流名称变化消息
 */
type AudioStreamNameChangeCallback = (streamNameChangeInfo: StreamNameChangeInfo) => void;

/**
 * @property callback - 音频流改变回调
 */
type AudioStreamNameChangeParams = {
    callback: AudioStreamNameChangeCallback;
};

/**
 * @property inviteMessage - 邀请框的文案
 * @property roomIds - 邀请对象的房间id
 * @property extTypes - 拉起的小程序类型列表
 * @property extraData - 拉起时带的额外参数
 */
type InviteLinkMicParams = {
    inviteMessage: string;
    roomIds: string[];
    extTypes: string[];
    extraData: string;
};

/**
 * @property noticeType - 消息类型, INVITEE-被邀请, ACCEPT_INVITE-接受邀请, REJECT_INVITE-拒绝邀请
 * @property roomId - 触发消息的房间号
 * @property extraData - 邀请消息的额外数据
 */
type InviteNotice = {
    noticeType: string;
    roomId: string;
    extraData: string;
};

/**
 * @param params - 邀请消息
 */
type InviteNoticeCallback = (params: InviteNotice) => void;

/**
 * @property callback - 连麦邀请回调
 */
type OnInviteNoticeParams = {
    callback: InviteNoticeCallback;
};

/**
 * @property speakerId - speakerId，实际上是主播uid
 * @property volume - 音量，0-100
 */
type AudioChangeInfo = {
    speakerId: number;
    volume: number;
};

/**
 * @param info - 消息内容
 */
type AudioChangeCallback = (info: AudioChangeInfo[]) => void;

/**
 * @property callback - 音量变化回调
 * @property [interval] - 音量变化回调频率，单位ms
 */
type OnAudioChangeParams = {
    callback: AudioChangeCallback;
    interval?: number;
};

/**
 * 直播间事件
 */
namespace liveEvent {
    /**
     * 监听直播间事件
     * @returns 调用结果
     */
    function on(eventName: string, callback: LiveEventCallback): Promise<void>;
    /**
     * 取消监听直播间事件
     * @param eventName - 事件名
     * @param [callback] - 回调函数
     * @returns 调用结果
     */
    function off(eventName: string, callback?: LiveEventCallback): Promise<void>;
}

/**
 * 直播间事件消息回调
 * @param content - 回调消息，服务端自定义
 */
type LiveEventCallback = (content: any) => void;

/**
 * 比赛
 */
namespace ob {
    /**
     * 获取比赛信息
     * @returns 返回比赛状态信息
     */
    function getMatchInfo(): Promise<MatchInfo>;
    /**
     * 设置超高分辨率直播流的分隔配置
     * @param param - 直播流的分隔配置参数
     * @returns 返回当前视角信息
     */
    function setSplitedOBStream(param: SplitedObParams): Promise<void>;
    /**
     * 设置当前视角
     * @param param - 当前视角参数
     * @returns 返回设置视角是否成功
     */
    function setPerspective(param: PerspectiveParams): Promise<void>;
    /**
     * 获取视角列表
     * @returns 返回视角信息列表
     */
    function getPerspectiveList(): Promise<PerspectiveInfo[]>;
    /**
     * 获取当前视角
     * @returns 返回当前视角信息
     */
    function getCurrentPerspective(): Promise<PerspectiveInfo>;
    /**
     * 监听ob消息
     * @param topic - 消息名 matchStatusChange-比赛状态改变(默认), perspectiveChange-当前视角改变
     * @param callback - 收到消息时回调
     * @returns 调用结果
     */
    function on(topic: string, callback: OBCallback): void;
    /**
     * 取消监听ob消息
     * @param topic - 消息名 matchStatusChange-比赛状态改变(默认), perspectiveChange-当前视角改变
     * @param [callback] - 调用ob.on()时传入的函数的引用
     * @returns 调用结果
     */
    function off(topic: string, callback?: OBCallback): void;
}

/**
 * @property state - 状态值
 */
type MatchInfo = {
    state: string;
};

/**
 * 直播流的分隔配置参数
 * @property row - 行
 * @property column - 列
 * @property height - 高
 * @property width - 宽
 */
type SplitedObParams = {
    row: number;
    column: number;
    height: number;
    width: number;
};

/**
 * 当前视角参数
 * @property pid - 视角id
 */
type PerspectiveParams = {
    pid: number;
};

/**
 * 视角信息
 * @property pid - 视角id
 * @property name - 视角名称
 */
type PerspectiveInfo = {
    pid: number;
    name: string;
};

/**
 * ob消息回调
 * @param content - 回调消息
 */
type OBCallback = (content: any) => void;

/**
 * 监听后台消息
 */
namespace observer {
    /**
     * 监听小程序消息
     * @param topic - 消息名
     * @param callback - 收到消息时回调 返回对应消息名的后台消息content
     * @returns 调用结果
     */
    function on(topic: string, callback: ObserverCallback): void;
    /**
     * 取消监听后台消息
     * @param topic - 消息名
     * @param [callback] - 消息回调
     * @returns 调用结果
     */
    function off(topic: string, callback?: ObserverCallback): void;
    /**
     * 触发小程序消息
     * @param topic - 小程序消息名
     * @param message - 小程序消息内容
     */
    function emit(topic: string, message: string): Promise<void>;
    /**
     * 监听本地小程序消息
     * @param params - 监听本地小程序参数
     */
    function onLocalMessage(params: LocalMessageParams): Promise<void>;
    /**
     * 取消监听自身小程序消息
     * @param params - 取消监听参数
     */
    function offLocalMessage(params: OffLocalMessageParams): Promise<void>;
    /**
     * 触发小程序本地消息
     * @param params - 本地消息参数
     * @returns 调用结果
     */
    function postLocalMessage(params: PostLocalMessageParams): Promise<void>;
    /**
     * 广播开发者维度的本地消息
     * @param params - 本地消息参数
     * @returns 调用结果
     */
    function postDevelperLocalMessage(params: PostLocalMessageParams): Promise<void>;
    /**
     * 监听开发者维度的本地消息
     * @param params - 参数
     * @returns 调用结果
     */
    function onDeveloperLocalMessage(params: LocalMessageParams): Promise<void>;
    /**
     * 取消监听开发者维度的本地消息
     * @param params - 参数
     * @returns 调用结果
     */
    function offDeveloperLocalMessage(params: OffLocalMessageParams): Promise<void>;
}

/**
 * 小程序消息回调
 * @param content - 消息内容
 */
type ObserverCallback = (content: string) => void;

/**
 * 本地小程序消息回调
 * @param message - 消息内容
 */
type LocalMessageCallback = (message: string) => void;

/**
 * 监听本地小程序参数
 * @property eventName - 消息名
 * @property callback - 消息回调
 */
type LocalMessageParams = {
    eventName: string;
    callback: LocalMessageCallback;
};

/**
 * 取消监听参数
 * @property eventName - 消息名
 */
type OffLocalMessageParams = {
    eventName: string;
};

/**
 * 本地消息参数
 * @property eventName - 消息名
 * @property message - 消息内容
 */
type PostLocalMessageParams = {
    eventName: string;
    message: string;
};

/**
 * 秩序相关
 */
namespace order {
    /**
     * 发起小程序文本的秩序审核
     * @param param - 文本秩序审核参数
     * @returns 调用结果，reject为审核失败
     */
    function reportText(param: ReportTextParams): Promise<void>;
}

/**
 * 文本秩序审核参数
 * @property text - 要检查的字符串
 */
type ReportTextParams = {
    text: string;
};

/**
 * PC相关
 */
namespace pc {
    /**
     * 下载资源
     * @param param - 下载资源参数
     * @returns 下载失败reject
     */
    function downloadRes(param: DownloadResParams): Promise<void>;
    /**
     * 启动外部EXE
     * @param param - 外部EXE参数
     * @returns 启动失败reject
     */
    function launchExe(param: LaunchExeParams): Promise<void>;
    /**
     * 监听小程序外部EXE消息
     * @param param - 监听小程序外部EXE消息参数
     * @returns 注册监听失败 reject
     */
    function onExeMessage(param: ExeMessageParams): Promise<void>;
    /**
     * 监听小程序外部EXE状态变化消息
     * @param param - 传入参数
     * @returns 注册监听失败 reject
     */
    function onExeStateChange(param: ExeStateListener): Promise<void>;
    /**
     * 发送消息到小程序外部EXE
     * @param param - 发到EXE的信息
     * @returns 发送失败 reject
     */
    function sendToExe(param: SendToExeInfo): Promise<void>;
    /**
     * 获取带token的url
     * @param param - 获取带token的url参数
     * @returns 返回信息
     */
    function getTokenUrl(param: TokenUrlParams): Promise<TokenUrlInfo>;
}

/**
 * 下载资源参数
 * @property url - 要下载资源的url
 * @property md5 - 资源的md5
 * @property [unzip] - 自动解压
 */
type DownloadResParams = {
    url: string;
    md5: string;
    unzip?: boolean;
};

/**
 * 外部EXE参数
 * @property extName - exe的名称
 * @property md5 - exe的md5
 * @property [params] - 额外的参数
 */
type LaunchExeParams = {
    extName: string;
    md5: string;
    params?: any;
};

/**
 * Exe消息回调
 * @param data - 消息内容
 */
type ExeCallback = (data: string) => void;

/**
 * 监听小程序外部EXE消息参数
 * @property md5 - 要监听消息exe的md5
 * @property callback - 消息回调
 */
type ExeMessageParams = {
    md5: string;
    callback: ExeCallback;
};

/**
 * 状态信息
 * @property state - 枚举状态 "0"-exe启动成功, "1"-exe启动失败, "2"-exe退出, "3"-exe为建立链接, "4"-exe链接成功, "5"-exe断开链接, "6"-exe网络错误
 */
type ExeStateInfo = {
    state: string;
};

/**
 * Exe状态变化回调
 * @param info - 消息内容
 */
type ExeStateCallback = (info: ExeStateInfo) => void;

/**
 * EXE状态监听
 * @property md5 - exe的md5
 * @property callback - 状态变化回调
 */
type ExeStateListener = {
    md5: string;
    callback: ExeStateCallback;
};

/**
 * 发到EXE的信息
 * @property md5 - 要发送消息exe的md5
 * @property data - 要发送消息exe的数据
 */
type SendToExeInfo = {
    md5: string;
    data: string;
};

/**
 * 带token的url信息
 * @property tokenUrl - 带token的url
 */
type TokenUrlInfo = {
    tokenUrl: string;
};

/**
 * 获取带token的url参数
 * @property baseUrl - 基础url
 */
type TokenUrlParams = {
    baseUrl: string;
};

/**
 * PK 相关
 */
namespace pk {
    /**
     * 是否能开启PK
     * @returns 结果
     */
    function isPKAvailable(): Promise<PKStatusInfo>;
    /**
     * 开始PK
     * @returns 结果
     */
    function startPk(): Promise<PKInfo>;
    /**
     * 结束PK
     * @returns 结果
     */
    function stopPk(): Promise<void>;
    /**
     * 结束本地行为（连麦、原生PK等）
     * @returns 调用结果
     */
    function stopLocalAction(): Promise<void>;
}

/**
 * @property status - 结果枚举, 0-不能PK, 1-可以PK, 2-经过用户允许之后可以PK
 * @property message - 结果说明
 */
type PKStatusInfo = {
    status: number;
    message: string;
};

/**
 * @property streamName - 流名称
 * @property videoWidth - 推流宽度（单位是像素）
 * @property videoHeight - 推流高度（单位是像素）
 * @property videoBitRate - 推流码率
 * @property mixStragy - 策略, 1-本地混化, 2-服务器混化
 */
type PKInfo = {
    streamName: string;
    videoWidth: number;
    videoHeight: number;
    videoBitRate: number;
    mixStragy: number;
};

/**
 * 面板
 */
namespace panel {
    /**
     * 设置小程序布局
     * @param params - 布局信息
     * @returns 调用结果
     */
    function setLayout(params: LayoutData): Promise<void>;
    /**
     * 主动销毁当前小程序
     * @returns 调用结果
     */
    function disposal(): Promise<void>;
    /**
     * 设置浮窗小程序的关闭按钮
     * @param params - 设置关闭按钮参数
     * @returns 设置结果
     */
    function setPopupCloseBtn(params: SetBtnParams): Promise<void>;
    /**
     * 设置面板类型小程序宽高
     * @param params - 设置面板类型小程序宽高参数
     * @returns 调用结果
     */
    function setPanelDimensions(params: SetPanelDimParams): Promise<void>;
}

/**
 * 布局信息
 * @property visible - 是否可见，默认true
 * @property x - 左上角横坐标占容器的比例
 * @property y - 左上角纵坐标占容器的比例
 * @property width - 宽度占容器的比例
 * @property height - 高度占容器的比例
 * @property [animate] - 是否带动画效果
 * @property [duration] - 动画时长（毫秒）
 * @property alpha - 不透明度
 */
type LayoutData = {
    visible: boolean;
    x: number;
    y: number;
    width: number;
    height: number;
    animate?: boolean;
    duration?: number;
    alpha: number;
};

/**
 * 设置关闭按钮参数
 * @property enable - 是否启用原生关闭按钮
 * @property [x] - 相对于小程序视图左上角的横坐标
 * @property [y] - 相对于小程序视图左上角的纵坐标
 * @property [width] - 关闭按钮的宽度
 * @property [height] - 关闭按钮的高度
 * @property [imgUrl] - 关闭按钮的背景图
 */
type SetBtnParams = {
    enable: boolean;
    x?: number;
    y?: number;
    width?: number;
    height?: number;
    imgUrl?: string;
};

/**
 * 设置面板类型小程序宽高参数
 * @property width - 宽度的像素值
 * @property height - 高度的像素值
 */
type SetPanelDimParams = {
    width: number;
    height: number;
};

/**
 * 玩家模块
 */
namespace player {
    /**
     * 小程序透明区域识别到单击手势，调用播放器单击事件
     * @param [params] - 触点相对于RN根元素坐标
     * @returns 返回调用是否成功
     */
    function tapped(params?: any): Promise<void>;
    /**
     * 小程序透明区域识别到双击手势，调用播放器双击事件
     * @param [params] - 触点相对于RN根元素坐标
     * @returns 返回调用是否成功
     */
    function doubleTapped(params?: any): Promise<void>;
    /**
     * 获取当前播放的视频帧信息
     * @returns 返回帧信息
     */
    function getFrameData(): Promise<FrameInfo>;
    /**
     * 事件监听
     * @param topic - 事件名 waiting-waiting, seeking-seeking, seeked-seeked, playing-playing, ended-ended, canplay-canplay, loadedmetadata-loadedmetadata, pause-pause, play-play, timeupdate-timeupdate, videoFrameReduceStart-videoFrameReduceStart, videoFrameGrowEnd-videoFrameGrowEnd
     * @param callback - 事件回调
     * @returns 调用结果
     */
    function on(topic: string, callback: (...params: any[]) => any): void;
    /**
     * 取消事件监听
     * @param topic - 事件名 waiting-waiting, seeking-seeking, seeked-seeked, playing-playing, ended-ended, canplay-canplay, loadedmetadata-loadedmetadata, pause-pause, play-play, timeupdate-timeupdate, videoFrameReduceStart-videoFrameReduceStart, videoFrameGrowEnd-videoFrameGrowEnd
     * @param [callback] - 事件回调
     * @returns 调用结果
     */
    function off(topic: string, callback?: (...params: any[]) => any): void;
    /**
     * 切换当前直播间线路
     * @param params - 切换线路参数
     * @returns 调用结果
     */
    function switchLine(params: SwitchLineParams): Promise<FrameInfo>;
    /**
     * 获取当前直播间线路列表
     * @returns 调用结果
     */
    function getLinesInfo(): Promise<LinesInfo>;
    /**
     * 获取当前直播间的当前线路
     * @returns 调用结果
     */
    function getCurrentLine(): Promise<CurrentLineInfo>;
    /**
     * 获取当前直播间播放视频的信息
     * @returns 调用结果
     */
    function getVideoInfo(): Promise<CurrentVideoInfo>;
    /**
     * 在当前直播间播放视频
     * @param params - 播放视频参数
     * @returns 操作结果
     */
    function playVideo(params: PlayVideoInfoParams): Promise<void>;
    /**
     * 暂停直播间点播视频播放
     * @returns 暂停结果
     */
    function pauseVideo(): Promise<void>;
    /**
     * 恢复直播间点播视频播放
     * @returns 调用结果
     */
    function resumeVideo(): Promise<void>;
    /**
     * 视频快进
     * @param params - 视频快进参数
     * @returns 调用结果
     */
    function fastForward(params: FastForwardParams): Promise<void>;
    /**
     * 视频快退
     * @returns 调用结果
     */
    function fastBackward(params: FastBackwardParams): Promise<void>;
    /**
     * 在当前直播间恢复直播
     * @returns 调用结果
     */
    function resumeLive(): Promise<void>;
    /**
     * 设置超高分辨率直播流视口
     * @param params - 高分辨率直播流视口参数
     * @returns 调用结果
     */
    function setViewport(params: ViewportParams): Promise<void>;
    /**
     * 获取超高分辨率直播流视口
     * @returns 调用结果
     */
    function getViewport(): Promise<ViewportInfo>;
    /**
     * 设置超高分辨率直播流视口增量
     * @param params - 直播流视口增量参数
     * @returns 调用结果
     */
    function addViewport(params: ViewportAddParams): Promise<void>;
    /**
     * 显示播放器UI
     * @param params - 展示UI参数
     * @returns 调用结果
     */
    function showUI(params: any): Promise<void>;
    /**
     * 获取视频相对于播放器的位置
     * @returns 调用结果
     */
    function getVideoPosition(): Promise<VideoPosition>;
    /**
     * 获取播放器的播放状态
     * @returns 调用结果
     */
    function getVideoState(): Promise<VideoState>;
    /**
     * 获取播放器布局信息
     * @returns 返回结果
     */
    function getLayoutInfo(): Promise<VideoLayoutInfo>;
    /**
     * 设置缓冲时间
     * @param params - 缓冲时间参数
     * @returns 返回结果
     */
    function setBufferTime(params: BufferTimeParams): Promise<void>;
    /**
     * 触发上下文菜单
     * @returns 返回结果
     */
    function contextMenu(): Promise<void>;
    /**
     * 在当前直播间播放直播流
     * @param params - 直播间播放直播流参数
     * @returns 返回结果
     */
    function playLive(params: PlayLiveParams): Promise<void>;
    /**
     * 获取播放器音量
     * @returns 返回结果
     */
    function getVolume(): Promise<VolumeInfo>;
    /**
     * 设置播放器音量
     * @param params - 播放器音量参数
     * @returns 返回结果
     */
    function setVolume(params: VolumeParams): Promise<void>;
    /**
     * 静音播放
     * @returns 返回结果
     */
    function mutePlay(): Promise<void>;
    /**
     * 非静音播放
     * @returns 返回结果
     */
    function unmutePlay(): Promise<void>;
    /**
     * 模拟鼠标hover到播放器
     * @returns 调用结果
     */
    function hover(): Promise<void>;
}

/**
 * 帧信息
 * @property pts - pts
 */
type FrameInfo = {
    pts: number;
};

/**
 * 切换线路参数
 * @property line - 线路标识
 */
type SwitchLineParams = {
    line: number;
};

/**
 * 路线信息
 * @property line - 线路标识
 * @property label - 线路名称
 */
type LineInfo = {
    line: number;
    label: string;
};

/**
 * 路线列表信息
 * @property lines - 线路列表
 */
type LinesInfo = {
    lines: LineInfo[];
};

/**
 * 当前线路信息
 * @property line - 线路标识
 */
type CurrentLineInfo = {
    line: number;
};

/**
 * 视频信息
 * @property duration - 视频时长
 * @property currentTime - 当前播放时间
 * @property isPlaying - 是否正在播放
 */
type VideoInfo = {
    duration: number;
    currentTime: number;
    isPlaying: boolean;
};

/**
 * 当前视频信息
 * @property videoInfo - 点播视频信息
 */
type CurrentVideoInfo = {
    videoInfo: VideoInfo;
};

/**
 * 播放视频参数
 * @property url - 视频地址
 * @property startTime - 视频开始时间
 */
type PlayVideoInfoParams = {
    url: string;
    startTime: number;
};

/**
 * 视频快进参数
 * @property time - 快进秒数
 */
type FastForwardParams = {
    time: number;
};

/**
 * 视频快进参数
 * @property time - 快退秒数
 */
type FastBackwardParams = {
    time: number;
};

/**
 * 高分辨率直播流视口参数
 * @property x - 视口左上角的横坐标
 * @property y - 视口左上角的纵坐标
 * @property scale - 视口的缩放比
 */
type ViewportParams = {
    x: number;
    y: number;
    scale: number;
};

/**
 * 直播流视口信息
 * @property x - 视口左上角的横坐标
 * @property y - 视口左上角的纵坐标
 * @property scale - 视口的缩放比
 */
type ViewportInfo = {
    x: number;
    y: number;
    scale: number;
};

/**
 * 直播流视口增量参数
 * @property x - 视口的横坐标增量
 * @property y - 视口的纵坐标增量
 * @property scale - 视口的缩放比增量
 */
type ViewportAddParams = {
    x: number;
    y: number;
    scale: number;
};

/**
 * 视频相对于播放器的位置信息
 * @property left - 视频区域距离播放器左侧的像素值
 * @property top - 视频区域距离播放器上侧的像素值
 * @property right - 视频区域距离播放器右侧的像素值
 * @property bottom - 视频区域距离播放器下侧的像素值
 */
type VideoPosition = {
    left: number;
    top: number;
    right: number;
    bottom: number;
};

/**
 * 播放器的播放状态
 * @property state - 状态值枚举, 1000-正在播放, 1001-直播关闭, 1002-加载失败, 1003-当前线路没有直播, 1004-没有拿到ob流的状态
 */
type VideoState = {
    state: number;
};

/**
 * 播放器布局信息
 * @property isZoomOut - 是否处于缩小布局
 */
type VideoLayoutInfo = {
    isZoomOut: boolean;
};

/**
 * 缓冲时间参数
 * @property time - 缓冲时间（毫秒）
 */
type BufferTimeParams = {
    time: number;
};

/**
 * 直播间播放直播流参数
 * @property streamName - 流名称
 */
type PlayLiveParams = {
    streamName: string;
};

/**
 * 播放器音量
 * @property volume - 音量（取值范围（0-1））
 */
type VolumeInfo = {
    volume: number;
};

/**
 * 播放器音量参数
 * @property volume - 音量（取值范围（0-1））
 */
type VolumeParams = {
    volume: number;
};

/**
 * 浮窗控制
 */
namespace popup {
    /**
     * 设置浮窗模式
     * @param params - 参数
     * @returns 调用结果
     */
    function setMode(params: ModeParams): Promise<SetModeRsp>;
    /**
     * 监听提示浮窗显示排队信息
     * @param params - 参数
     * @returns 调用结果
     */
    function onNoticeShow(params: NoticeShowParams): Promise<void>;
    /**
     * 取消监听提示浮窗显示排队信息
     * @returns 调用结果
     */
    function offNoticeShow(): Promise<void>;
    /**
     * 监听提示浮窗隐藏
     * @param params - 参数
     * @returns 调用结果
     */
    function onNoticeHide(params: NoticeHideParams): Promise<void>;
    /**
     * 取消监听提示浮窗隐藏
     * @returns 调用结果
     */
    function offNoticeHide(): Promise<void>;
}

/**
 * 设置浮窗模式返回信息
 * @property noticeKey - 回调标记
 */
type SetModeRsp = {
    noticeKey: string;
};

/**
 * 设置浮窗模式参数
 * @property mode - 模式的枚举值, NORMAL-默认状态，所有浮窗初始化的时候都是这个状态，可以自由布局(默认), NOTICE-提示状态，这个状态下不能自由布局，显示/隐藏下沉到平台进行控制，进入提示状态会默认显示，退出提示状态时会默认隐藏, RIGHT_BOTTOM_BTN-右下角按钮状态，这个状态下不能自由布局，显示/隐藏下沉到平台进行控制，进入提示状态会默认显示，退出提示状态时会默认隐藏
 * @property [key] - 权重key值
 * @property [width] - 宽度，单位是点/像素，仅在NOTICE模式下生效
 * @property [height] - 高度，单位是点/像素，仅在NOTICE模式下生效
 */
type ModeParams = {
    mode: string;
    key?: string;
    width?: number;
    height?: number;
};

/**
 * 提示浮窗显示消息
 * @property noticeKey - 调用hyExt.popup.setMode时返回的标记，用来匹配是哪次setMode的回调
 */
type NoticeShowInfo = {
    noticeKey: string;
};

/**
 * 提示浮窗显示回调
 * @param info - 提示浮窗显示消息
 */
type NoticeShowCallback = (info: NoticeShowInfo) => void;

/**
 * 提示浮窗显示监听参数
 * @property callback - 消息回调
 */
type NoticeShowParams = {
    callback: NoticeShowCallback;
};

/**
 * 提示浮窗隐藏消息
 * @property noticeKey - 调用hyExt.popup.setMode时返回的标记，用来匹配是哪次setMode的回调
 */
type NoticeHideInfo = {
    noticeKey: string;
};

/**
 * 提示浮窗隐藏回调
 * @param info - 提示浮窗隐藏消息
 */
type NoticeHideCallback = (info: NoticeHideInfo) => void;

/**
 * 提示浮窗隐藏监听参数
 * @property callback - 消息回调
 */
type NoticeHideParams = {
    callback: NoticeHideCallback;
};

/**
 * 识别相关
 */
namespace reg {
    /**
     * 监听当前直播间语音识别消息
     * @param param - 语音识别参数
     * @returns 调用结果
     */
    function onSpeechRecognition(param: SpeechParams): Promise<void>;
    /**
     * 取消监听当前直播间语音识别消息
     * @returns 调用结果
     */
    function offSpeechRecognition(): Promise<void>;
    /**
     * 监听当前直播间手势识别消息
     * @param param - 手势识别参数
     * @returns 调用结果
     */
    function onGestureRecognition(param: GestureRecognitionParams): Promise<void>;
    /**
     * 取消监听当前直播间手势识别消息
     * @returns 调用结果
     */
    function offGestureRecognition(): Promise<void>;
    /**
     * 监听当前直播间肢体骨骼点检测消息
     * @param param - 参数
     * @returns 调用结果
     */
    function onHumanSkeletonDetection(param: HumanSkeletonDetectionParams): Promise<void>;
    /**
     * 取消监听当前直播间肢体骨骼点检测消息
     * @returns 调用结果
     */
    function offHumanSkeletonDetection(): Promise<void>;
    /**
     * 监听当前直播间人脸特征点检测消息
     * @param param - 参数
     * @returns 调用结果
     */
    function onFacialLandmarkDetection(param: FacialLandmarkDetectionParams): Promise<void>;
    /**
     * 取消监听当前直播间肢体骨骼点检测消息
     * @returns 调用结果
     */
    function offFacialLandmarkDetection(): Promise<void>;
    /**
     * 监听当前直播间人体轮廓点检测消息
     * @param param - 人体轮廓识别消息参数
     * @returns 调用结果
     */
    function onHumanContourDetection(param: HumanContourDetectionParams): Promise<void>;
    /**
     * 取消监听当前直播间人体轮廓点检测消息
     * @returns 调用结果
     */
    function offHumanContourDetection(): Promise<void>;
    /**
     * 监听当前直播间视觉识别消息
     * @param param - 人体轮廓识别参数
     * @returns 调用结果
     */
    function onCVRecognition(param: CVRecognitionParams): Promise<void>;
    /**
     * 取消监听当前直播间视觉识别消息
     * @param param - 取消监听当前直播间视觉识别参数
     * @returns 调用结果
     */
    function offCVRecognition(param: OffCVRecognitionParams): Promise<void>;
    /**
     * 查询当前直播间视觉识别结果
     * @param param - 参数
     * @returns 识别消息列表
     */
    function queryCVRecognition(param: QueryCVRecognitionParams): Promise<CVRecognition[]>;
    /**
     * 监听当前直播间语音关键字识别消息
     * @param param - 调用参数
     * @returns 调用结果
     */
    function onSpeechKeywordRecognition(param: SpeechKeywordParams): Promise<void>;
    /**
     * 取消监听当前直播间肢体骨骼点检测消息
     * @returns 调用结果
     */
    function offSpeechKeywordRecognition(): Promise<void>;
    /**
     * 文本转语音
     * @param param - 传入参数
     * @returns 调用结果
     */
    function textToSpeech(param: TextToSpeechParams): Promise<TextToSpeechResp>;
}

/**
 * 语音识别消息
 * @property data - 语音识别出来的文字
 */
type SpeechResp = {
    data: string;
};

/**
 * 语音识别回调
 * @param recognition - 语音识别消息
 */
type SpeechCallback = (recognition: SpeechResp) => void;

/**
 * 语音识别参数
 * @property hotwords - 热词
 * @property callback - 语音识别回调
 */
type SpeechParams = {
    hotwords: string[];
    callback: SpeechCallback;
};

/**
 * 手势识别消息
 * @property key - 手势识别的标识, BIXIN-比心
 */
type GestureResp = {
    key: string;
};

/**
 * 手势识别回调
 * @param recognition - 识别消息
 */
type GestureCallback = (recognition: GestureResp) => void;

/**
 * @property callback - 手势识别回调
 */
type GestureRecognitionParams = {
    callback: GestureCallback;
};

/**
 * 画布信息
 * @property width - 画布宽度
 * @property height - 画布高度
 */
type CanvasInfo = {
    width: number;
    height: number;
};

/**
 * 骨骼点信息
 * @property x - 横坐标（值域 [0, 画布宽]，单位是像素）
 * @property y - 纵坐标（值域 [0, 画布宽]，单位是像素）
 * @property score - 置信度（值越高表示识别得越准确）
 * @property id - 骨骼点的标识 "0"-NOSE, "1"-LEFT_EYE, "2"-RIGHT_EYE, "3"-LEFT_EAR, "4"-RIGHT_EAR, "5"-LEFT_SHOULDER, "6"-RIGHT_SHOULDER, "7"-LEFT_ELBOW, "8"-RIGHT_ELBOW, "9"-LEFT_WRIST, "10"-RIGHT_WRIST, "11"-LEFT_HIP, "12"-RIGHT_HIP, "13"-LEFT_KNEE, "14"-RIGHT_KNEE, "15"-LEFT_ANKLE, "16"-RIGHT_ANKLE, "17"-LEFT_HAND, "18"-RIGHT_HAND
 */
type KeypointInfo = {
    x: number;
    y: number;
    score: number;
    id: string;
};

/**
 * 骨骼识别消息
 * @property canvas - 画布信息
 * @property keypoints - 骨骼点
 */
type SkeletonResp = {
    canvas: CanvasInfo;
    keypoints: KeypointInfo[];
};

/**
 * 骨骼识别回调
 * @param recognition - 骨骼识别消息
 */
type SkeletonCallback = (recognition: SkeletonResp) => void;

/**
 * 骨骼识别消息
 * @property callback - 骨骼识别回调
 */
type HumanSkeletonDetectionParams = {
    callback: SkeletonCallback;
};

/**
 * 人脸框信息
 * @property x - 人脸框左上角横坐标（相对与视频区域左上角，单位是像素）
 * @property y - 人脸框左上角纵坐标（相对与视频区域左上角，单位是像素）
 * @property width - 人脸框宽度（相对与视频区域左上角，单位是像素）
 * @property height - 人脸框高度（相对与视频区域左上角，单位是像素）
 */
type FaceRect = {
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * 人脸特征点信息
 * @property x - 横坐标（值域 [0, 画布宽]，单位是像素）
 * @property y - 纵坐标（值域 [0, 画布高]，单位是像素）
 */
type Landmark = {
    x: number;
    y: number;
};

/**
 * 人脸信息
 * @property faceRect - 人脸框
 * @property pitch - 俯仰角（x轴），值域 [-90, 90]
 * @property yaw - 偏航角（y轴），值域 [-90, 90]
 * @property roll - 翻滚角（z轴），值域 [-180, 180]
 * @property landmarks106 - 人脸特征点
 */
type FaceInfo = {
    faceRect: FaceRect;
    pitch: number;
    yaw: number;
    roll: number;
    landmarks106: Landmark[];
};

/**
 * 人脸识别消息
 * @property canvas - 画布信息
 * @property faces - 人脸信息
 */
type FacialResp = {
    canvas: CanvasInfo;
    faces: FaceInfo[];
};

/**
 * 人脸识别回调
 * @param recognition - 人脸识别消息
 */
type FacialCallback = (recognition: FacialResp) => void;

/**
 * @property callback - 人脸识别回调
 */
type FacialLandmarkDetectionParams = {
    callback: FacialCallback;
};

/**
 * 轮廓点信息
 * @property x - 横坐标（值域 [0, 画布宽]，单位是像素）
 * @property y - 纵坐标（值域 [0, 画布高]，单位是像素）
 */
type ContourPointInfo = {
    x: number;
    y: number;
};

/**
 * 人体轮廓识别消息
 * @property canvas - 画布信息
 * @property contourPoints - 轮廓点
 * @property contourCount - 轮廓数，值域为正整数
 */
type HumanResp = {
    canvas: CanvasInfo;
    contourPoints: ContourPointInfo[];
    contourCount: number;
};

/**
 * 人体轮廓识别回调
 * @param recognition - 人体轮廓识别消息
 */
type HumanCallback = (recognition: HumanResp) => void;

/**
 * 人体轮廓识别消息参数
 * @property callback - 画布信息
 */
type HumanContourDetectionParams = {
    callback: HumanCallback;
};

/**
 * 人体轮廓识别对象
 * @property cvRecKey - key
 * @property cvRecValue - value
 */
type CVRecognition = {
    cvRecKey: string;
    cvRecValue: any;
};

/**
 * 人体轮廓识别回调
 * @param recognitions - 识别消息列表
 */
type OnCVRecognitionOptionsCallback = (recognitions: CVRecognition[]) => void;

/**
 * 人体轮廓识别参数
 * @property keys - 识别标识
 */
type CVRecognitionParams = {
    keys: string[];
    callback: OnCVRecognitionOptionsCallback;
};

/**
 * 取消监听当前直播间视觉识别参数
 * @property keys - 识别标识
 */
type OffCVRecognitionParams = {
    keys: string[];
};

/**
 * 查询当前直播间视觉识别结果参数
 * @property keys - 识别标识
 */
type QueryCVRecognitionParams = {
    keys: string[];
};

/**
 * 热词识别消息
 * @property data - 识别出来的文字
 */
type KeywordResp = {
    data: string;
};

/**
 * 热词识别回调
 * @param recognition - 热词识别消息
 */
type SpeechKeywordCallback = (recognition: KeywordResp) => void;

/**
 * 热词监听请求参数
 * @property hotwords - 热词
 * @property callback - 热词识别回调
 */
type SpeechKeywordParams = {
    hotwords: string[];
    callback: SpeechKeywordCallback;
};

/**
 * 转换返回结果
 * @property returnCode - 返回码
 * @property message - 返回信息
 * @property audioUrl - 音频地址
 * @property duration - 音频长度
 */
type TextToSpeechResp = {
    returnCode: number;
    message: string;
    audioUrl: string;
    duration: number;
};

/**
 * 文本转语音参数
 * @property text - 文本
 * @property tone - 语调, 1-TONE_XIAOYU, 2-TONE_XIAOXIA, 3-TONE_XIAOXIN, 4-TONE_XIAOZE
 * @property type - 类型, 0-TYPE_WAV, 1-TYPE_PCM
 */
type TextToSpeechParams = {
    text: string;
    tone: number;
    type: number;
};

/**
 * 营收相关
 */
namespace revenue {
    /**
     * 开始营收统计
     * @param params - 参数
     * @returns 调用结果
     */
    function startRevenueStat(params: RevenueStatParams): Promise<void>;
    /**
     * 停止营收统计
     * @returns 调用结果
     */
    function stopRevenueStat(): Promise<void>;
    /**
     * 判断当前主播是否可以使用指定的商品
     * @param params - 参数
     * @returns 调用结果
     */
    function checkStreamerCanUseGoods(params: CanUseGoodsParams): Promise<CanUseGoodsInfo>;
    /**
     * 停止统计
     * @param params - 参数
     * @returns 调用结果
     */
    function endModuleGiftRevenueStat(params: EndGiftRevenueStatParams): Promise<void>;
    /**
     * 开始统计
     * @param params - 参数
     * @returns 调用结果
     */
    function startModuleGiftRevenueStat(params: StartGiftRevenueStatParams): Promise<void>;
    /**
     * 判断当前主播指定的商品的使用有效期
     * @param params - 参数
     * @returns 调用结果
     */
    function checkStreamerGoodsExpire(params: GoodsExpireParams): Promise<GoodsExpireInfo>;
    /**
     * 弹出商品购买的H5面板
     * @param params - 参数
     * @returns 调用结果
     */
    function popupGoodsBuyPanel(params: GoodsBuyParams): Promise<void>;
    /**
     * 发起购买
     * @param params - 购买参数
     * @returns 调用结果
     */
    function requestPurchase(params: PurchaseParams): Promise<PurchaseInfo>;
    /**
     * 获取购买订单号
     * @param params - 参数
     * @returns 调用结果
     */
    function getPurchaseOrderId(params: PurchaseOrderIdParams): Promise<PurchaseOrderIdInfo>;
    /**
     * 查询订单详情
     * @param params - 参数
     * @returns 调用结果
     */
    function queryPurchaseOrder(params: PurchaseOrderParams): Promise<PurchaseOrderInfo>;
    /**
     * 唤起能量豆充值弹窗
     * @param [params] - 参数
     * @returns 调用结果
     */
    function popupOpenCoinExchangePanel(params?: any): Promise<void>;
    /**
     * 发起能量豆消费下单
     * @param params - 参数
     * @returns 调用结果
     */
    function prePayOrder(params: PrePayOrderParams): Promise<PrePayOrderInfo>;
    /**
     * 能量豆余额查询
     * @param [params] - 参数
     * @returns 调用结果
     */
    function queryUserOpenCoinBalance(params?: any): Promise<OpenCoinInfo>;
    /**
     * 发起能量豆消费请求
     * @param params - 参数
     * @returns 调用结果
     */
    function requestOpenCoinConsume(params: OpenCoinConsumeParams): Promise<void>;
}

/**
 * 营收统计参数
 * @property eventData - 上报数据
 */
type RevenueStatParams = {
    eventData: any;
};

/**
 * 否可以使用指定的商品
 * @property isCanUse - 是否可用
 */
type CanUseGoodsInfo = {
    isCanUse: boolean;
};

/**
 * 是否可以使用指定的商品参数
 * @property goodsUuid - 商品id
 */
type CanUseGoodsParams = {
    goodsUuid: string;
};

/**
 * 停止统计参数
 * @property goodsUuid - 商品id
 */
type EndGiftRevenueStatParams = {
    goodsUuid: string;
};

/**
 * 开始统计参数
 * @property goodsUuid - 商品id
 * @property [giftIds] - 礼物id，多个用竖线分隔
 */
type StartGiftRevenueStatParams = {
    goodsUuid: string;
    giftIds?: string;
};

/**
 * 指定商品的使用有效期信息
 * @property expire - 主播指定商品的失效日期时间戳，没有购买过则返回-1
 * @property hadBuy - 是否有购买过
 */
type GoodsExpireInfo = {
    expire: number;
    hadBuy: boolean;
};

/**
 * 指定商品的使用有效期参数
 * @property goodsUuid - 商品id
 */
type GoodsExpireParams = {
    goodsUuid: string;
};

/**
 * 购买商品参数
 * @property goodsUuid - 商品id
 */
type GoodsBuyParams = {
    goodsUuid: string;
};

/**
 * 购买商品结果
 * @property code - 结果, OrderSucc-下单成功, OrderFail-下单失败
 * @property confirmType - 确认方式, Direct-直接点击, Phone-手机验证码
 * @property msg - 错误信息
 * @property purchaseOrderId - 支付订单号
 * @property url - 支付方式, HYB-虎牙币, HDB-互动币
 * @property createOrderNonce - 下单成功随机串
 */
type PurchaseInfo = {
    code: string;
    confirmType: string;
    msg: string;
    purchaseOrderId: string;
    url: string;
    createOrderNonce: string;
};

/**
 * 购买商品参数
 * @property goodsUuid - 商品id
 * @property purchaseOrderId - 支付订单号
 * @property feeType - 支付方式, HYB-虎牙币, HDB-互动币
 * @property totalFee - 总支付金额，单位分
 * @property price - 单个金额，单位分
 * @property quantity - 购买数量
 * @property productType - 商品类型, monetization-资源, custom-自定义商品
 * @property productId - 购买资源的ID（业务）
 * @property productName - 购买资源的名称（业务）
 * @property productDetail - 购买资源的可扩展字段（结构化的JSON字符串）
 * @property timeStamp - 时间戳（秒）
 * @property signType - 签名类型, MD5-MD5
 * @property signStr - 签名（请查看签名算法说明）
 * @property nonce - 随机串
 */
type PurchaseParams = {
    goodsUuid: string;
    purchaseOrderId: string;
    feeType: string;
    totalFee: number;
    price: number;
    quantity: number;
    productType: string;
    productId: string;
    productName: string;
    productDetail: string;
    timeStamp: number;
    signType: string;
    signStr: string;
    nonce: string;
};

/**
 * 购买订单ID信息
 * @property purchaseOrderId - 支付订单号
 */
type PurchaseOrderIdInfo = {
    purchaseOrderId: string;
};

/**
 * 获取购买订单号参数
 * @property timeStamp - 时间戳（秒）
 * @property signType - 签名类型, MD5-MD5
 * @property signStr - 签名（请查看签名算法说明）
 * @property nonce - 随机串
 */
type PurchaseOrderIdParams = {
    timeStamp: number;
    signType: string;
    signStr: string;
    nonce: string;
};

/**
 * 订单详情
 * @property code - 结果, OrderSucc-下单成功, OrderFail-下单失败, PaySucc-支付成功, PayFail-支付失败, PayHanding-支付处理中
 * @property msg - 错误信息
 * @property purchaseOrderId - 支付订单号
 * @property feeType - 支付方式, HYB-虎牙币, HDB-互动币
 * @property totalFee - 总支付金额，单位分
 * @property price - 单个金额，单位分
 * @property quantity - 购买数量
 * @property productType - 商品类型, monetization-资源, custom-自定义商品
 * @property productId - 购买资源的ID（业务）
 * @property productName - 购买资源的名称（业务）
 * @property productDetail - 购买资源的可扩展字段（结构化的JSON字符串）
 */
type PurchaseOrderInfo = {
    code: string;
    msg: string;
    purchaseOrderId: string;
    feeType: string;
    totalFee: number;
    price: number;
    quantity: number;
    productType: string;
    productId: string;
    productName: string;
    productDetail: string;
};

/**
 * 查询订单详情参数
 * @property purchaseOrderId - 支付订单号
 * @property timeStamp - 时间戳（秒）
 * @property signType - 签名类型, MD5-MD5
 * @property signStr - 签名（请查看签名算法说明）
 * @property nonce - 随机串
 */
type PurchaseOrderParams = {
    purchaseOrderId: string;
    timeStamp: number;
    signType: string;
    signStr: string;
    nonce: string;
};

/**
 * 能量豆消费订单信息
 * @property code - 结果, OrderSucc-下单成功, OrderFail-下单失败
 * @property msg - 错误信息
 * @property purchaseOrderId - 平台支付订单号
 * @property preOrderNonce - 下单成功随机串
 */
type PrePayOrderInfo = {
    code: string;
    msg: string;
    purchaseOrderId: string;
    preOrderNonce: string;
};

/**
 * 发起能量豆消费下单参数
 * @property outerPurchaseOrderId - 外部支付订单号
 * @property totalFee - 总支付金额
 * @property price - 单个金额
 * @property quantity - 购买数量
 * @property productId - 购买资源的ID（业务）
 * @property productName - 购买资源的名称（业务）
 * @property productDetail - 购买资源的可扩展字段（结构化的JSON字符串）
 * @property timeStamp - 时间戳（秒）
 * @property signType - 签名类型, MD5-MD5
 * @property signStr - 签名（请查看签名算法说明）
 * @property nonce - 随机串
 */
type PrePayOrderParams = {
    outerPurchaseOrderId: string;
    totalFee: string;
    price: string;
    quantity: number;
    productId: string;
    productName: string;
    productDetail: string;
    timeStamp: string;
    signType: string;
    signStr: string;
    nonce: string;
};

/**
 * 能量豆余额信息
 * @property balance - 余额，单位元，保留两位小数
 */
type OpenCoinInfo = {
    balance: string;
};

/**
 * 能量豆消费请求参数
 * @property purchaseOrderId - 平台支付订单号
 * @property preOrderNonce - 下单成功随机串
 */
type OpenCoinConsumeParams = {
    purchaseOrderId: string;
    preOrderNonce: string;
};

/**
 * 流模块
 */
namespace stream {
    /**
     * 获取当前直播间的延迟模式
     * @returns 调用结果
     */
    function getViewerLatencyMode(): Promise<ViewerLatencyModeInfo>;
    /**
     * 设置当前直播间的延迟模式
     * @param params - 设置直播间延迟模式参数
     * @returns 调用结果
     */
    function setViewerLatencyMode(params: ViewerLatencyModeParams): Promise<void>;
    /**
     * 创建小程序独立白板
     * @param params - 创建独立白板参数
     * @returns 返回白板信息
     */
    function addExtraWhiteBoard(params: WhiteBoardParams): Promise<WhiteBoardInfo>;
    /**
     * 移除小程序独立白板
     * @param params - 移除独立白板参数
     * @returns 调用结果
     */
    function removeExtraWhiteBoard(params: WhiteBoardInfo): Promise<void>;
    /**
     * 发送消息到小程序独立白板
     * @param params - 发送到白板的消息
     * @returns 调用结果
     */
    function sendToExtraWhiteBoard(params: WhiteBoardMsg): Promise<void>;
    /**
     * 获取推流的分辨率
     * @returns 返回推流的分辨率
     */
    function getStreamResolution(): Promise<StreamResolutionInfo>;
    /**
     * 设置推流分辨率
     * @param params - 推流分辨率参数
     * @returns 调用结果
     */
    function setStreamResolution(params: StreamResolutionParams): Promise<void>;
    /**
     * 获取当前直播间的延迟模式
     * @returns 调用结果
     */
    function getStreamerLatencyMode(): Promise<StreamerLatencyModeInfo>;
    /**
     * 设置当前直播间的延迟模式
     * @param params - 延迟模式参数
     * @returns 调用结果
     */
    function setStreamerLatencyMode(params: StreamerLatencyModeInfo): Promise<void>;
    /**
     * 批量创建图层
     * @param params - 图层信息队列
     * @returns 调用结果
     */
    function addLayers(params: LayerInfoParam[]): Promise<LayerId[]>;
    /**
     * 获取图层信息
     * @returns 调用结果
     */
    function getLayers(): Promise<LayerInfo[]>;
    /**
     * 批量更新图层
     * @param params - 携带图层id的图层信息队列
     * @returns 调用结果
     */
    function updateLayers(params: UpdateLayerParam[]): Promise<ChangePesp[]>;
    /**
     * 批量删除图层
     * @param params - 参数
     * @returns 调用结果
     */
    function removeLayers(params: LayerId[]): Promise<ChangePesp[]>;
    /**
     * 截取小程序的某个元素并让其内容显示到视频流中，截取的内容可以在开播端的“预览”界面进行编辑
     * @param params - 添加元素参数
     * @returns 调用结果
     */
    function addZone(params: ZoneParams): Promise<void>;
    /**
     * 删除投射区域
     * @returns 调用结果
     */
    function removeZone(): Promise<void>;
    /**
     * 创建小程序普通白板
     * @param params - 创建普通白板参数
     * @returns 调用结果
     */
    function addWhiteBoard(params: AddWhiteBoardParams): Promise<WhiteBoardInfo>;
    /**
     * 移除小程序普通白板
     * @returns 调用结果
     */
    function removeWhiteBoard(): Promise<void>;
    /**
     * 创建小程序图片图层
     * @param params - 创建图片图层参数
     * @returns 调用结果
     */
    function addImageLayer(params: ImageLayerParams): Promise<LayerId>;
    /**
     * 移除小程序图片图层
     * @param params - 移除涂图层信息
     * @returns 调用结果
     */
    function removeImageLayer(params: LayerId): Promise<void>;
    /**
     * 使用脸部效果
     * @param params - 调用参数
     * @returns 调用结果
     */
    function enableFaceEffect(params: FaceEffectParams): Promise<void>;
    /**
     * 创建小程序EXE白板
     * @param params - 创建EXE白板参数
     * @returns 调用结果
     */
    function addExeWhiteBoard(params: ExeWhiteBoardParams): Promise<void>;
    /**
     * 移除小程序EXE白板
     * @returns 调用结果
     */
    function removeExeWhiteBoard(): Promise<void>;
    /**
     * 监听小程序独立白板消息
     * @param params - 监听独立白板消息参数
     * @returns 调用结果
     */
    function onExtraWhiteBoardMessage(params: WhiteBoardMessageParams): Promise<void>;
    /**
     * 创建小程序文字图层
     * @param params - 文字图层参数
     * @returns 调用结果
     */
    function addTextLayer(params: TextLayerParams): Promise<LayerId>;
    /**
     * 移除文本图层
     * @param params - 参数
     * @returns 调用结果
     */
    function removeTextLayer(params: LayerId): Promise<void>;
    /**
     * 启用背景分离
     * @returns 调用结果
     */
    function enableBackgroundSegmentation(): Promise<void>;
    /**
     * 禁用背景分离
     * @returns 调用结果
     */
    function disableBackgroundSegmentation(): Promise<void>;
    /**
     * 创建白板
     * @param params - 创建白板参数
     * @returns 调用结果
     */
    function createWB(params: WBParams): Promise<WhiteBoardInfo>;
    /**
     * 删除白板
     * @param params - 参数
     * @returns 调用结果
     */
    function deleteWB(params: WhiteBoardInfo): Promise<void>;
    /**
     * 监听白板布局变化消息
     * @param params - 监听参数
     * @returns 调用结果
     */
    function onWBLayoutChange(params: WBLayoutChangeParams): Promise<void>;
    /**
     * 更新白板
     * @param params - 更新参数
     * @returns 调用结果
     */
    function updateWB(params: ChangeWBParams): Promise<void>;
    /**
     * 布局改变
     * @param params - 布局改变参数
     * @returns 调用结果
     */
    function onLayerLayoutChange(params: LayerLayoutChangeParams): Promise<void>;
    /**
     * 获取图层画布布局信息
     * @returns 调用结果
     */
    function getStreamCanvasLayout(): Promise<StreamLayoutInfo>;
    /**
     * 设置图层画布布局信息
     * @param params - 参数
     * @returns 调用结果
     */
    function setStreamCanvasLayout(params: StreamLayoutInfo): Promise<void>;
    /**
     * 创建图层
     * @param params - 图层信息
     * @returns 调用结果
     */
    function addLayer(params: LayerInfo): Promise<LayerId>;
    /**
     * 更新图层
     * @param params - 参数
     * @returns 调用结果
     */
    function updateLayer(params: LayerInfoParam | LayerId): Promise<void>;
    /**
     * 删除图层
     * @param params - 参数
     * @returns 调用结果
     */
    function removeLayer(params: LayerId): Promise<void>;
    /**
     * 增加特效
     * @param params - 参数
     * @returns 调用结果
     */
    function addEffect(params: EffectParams): Promise<void>;
    /**
     * 移除特效
     * @param params - 参数
     * @returns 调用结果
     */
    function removeEffect(params: RemoveEffectParams): Promise<void>;
    /**
     * 获取开播信息
     * @param params - 参数
     * @returns 调用结果
     */
    function getStreamingInfo(params: StreamingInfoParams): Promise<StreamingInfo>;
    /**
     * 设置是否启用白板编辑模式
     * @param params - 参数
     * @returns 调用结果
     */
    function setWBEditMode(params: SetWBEditModeParams): Promise<void>;
    /**
     * 获取当前特效列表
     * @returns 当前应用的特效列表
     */
    function getCurrentEffects(): Promise<CurrentEffectInfo[]>;
    /**
     * 获取PK连麦的视频图层布局信息
     * @returns 返回布局信息
     */
    function getLinkLayersLayout(): Promise<LinkLayerLayout[]>;
    /**
     * 监听图层状态变化消息
     * @param params - 参数
     */
    function onLayerStatusChange(params: OnLayerStatusChangeParams): Promise<void>;
    /**
     * 取消监听图层状态变化消息
     * @param params - 参数
     */
    function offLayerStatusChange(params: OffLayerStatusChangeParams): Promise<void>;
    /**
     * 获取图层信息
     * @param [params] - 参数
     */
    function getLayerInfo(params?: any): Promise<LayerInfoResp>;
    /**
     * 获取当前播放的流名称
     * @returns 调用结果
     */
    function getCurrentStreamName(): Promise<StreamNameInfo>;
    /**
     * 监听当前播放的流名称变化
     * @param params - 输入参数
     * @returns 调用结果
     */
    function onCurrentStreamNameChange(params: CurrentStreamNameChangeReq): Promise<void>;
    /**
     * 取消监听当前播放的流名称变化
     * @returns 调用结果
     */
    function offCurrentStreamNameChange(): Promise<void>;
}

/**
 * 直播间延迟模式
 * @property mode - 延迟模式标识, 0-普通模式, 1-低延迟模式
 */
type ViewerLatencyModeInfo = {
    mode: number;
};

/**
 * 设置直播间延迟模式参数
 * @property mode - 延迟模式标识, 0-普通模式(默认), 1-低延迟模式
 */
type ViewerLatencyModeParams = {
    mode: number;
};

/**
 * 白板信息
 * @property wbId - 白板ID
 */
type WhiteBoardInfo = {
    wbId: string;
};

/**
 * 创建独立白板参数
 * @property [param] - 独立白板的初始参数
 * @property width - 独立白板的宽度
 * @property height - 独立白板的高度
 */
type WhiteBoardParams = {
    param?: any;
    width: number;
    height: number;
};

/**
 * 发送到白板的消息
 * @property wbId - 独立白板的Id
 * @property [data] - 要发送的消息
 */
type WhiteBoardMsg = {
    wbId: string;
    data?: string;
};

/**
 * 推流的分辨率
 * @property width - 宽度（单位是像素）
 * @property height - 高度（单位是像素）
 */
type StreamResolutionInfo = {
    width: number;
    height: number;
};

/**
 * 推流分辨率参数
 * @property width - 宽度（单位是像素）
 * @property height - 高度（单位是像素）
 */
type StreamResolutionParams = {
    width: number;
    height: number;
};

/**
 * 直播间延迟模式信息
 * @property mode - 延迟模式标识, 0-普通模式, 1-低延迟模式
 */
type StreamerLatencyModeInfo = {
    mode: number;
};

/**
 * 创建图层信息参数
 * @property type - 图层类型, PK-PK图层(默认), IMAGE-图片图层, VIDEO-视频图层
 * @property [layerName] - 业务传入的图层标识
 * @property offsetX - 图层相对推流出去的界面左侧的偏移量（单位是像素）
 * @property offsetY - 图层相对推流出去的界面顶部的偏移量（单位是像素）
 * @property canvasWidth - 推流出去的界面里图层占的宽度（单位是像素）
 * @property canvasHeight - 推流出去的界面里图层占的高度（单位是像素）
 * @property [weight] - 权重
 * @property [force] - 强制使用当前配置
 * @property [param] - 参数
 */
type LayerInfoParam = {
    type: string;
    layerName?: string;
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
    weight?: number;
    force?: boolean;
    param?: any;
};

/**
 * 创建图层结果
 * @property layerId - 图层id
 */
type LayerId = {
    layerId: string;
};

/**
 * 图层信息
 * @property layerId - 图层id
 * @property type - 图层类型
 * @property layerName - 业务传入的图层标识
 * @property offsetX - 图层相对推流出去的界面左侧的偏移量（单位是像素）
 * @property offsetY - 图层相对推流出去的界面顶部的偏移量（单位是像素）
 * @property canvasWidth - 推流出去的界面里图层占的宽度（单位是像素）
 * @property canvasHeight - 推流出去的界面里图层占的高度（单位是像素）
 * @property weight - 权重
 * @property param - 参数
 */
type LayerInfo = {
    layerId: string;
    type: string;
    layerName: string;
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
    weight: number;
    param: any;
};

/**
 * 更新操作结果
 * @property res - 操作结果，0成功，非0失败
 */
type ChangePesp = {
    res: number;
};

/**
 * 更新图层信息参数
 * @property layerId - 图层id
 * @property offsetX - 图层相对推流出去的界面左侧的偏移量（单位是像素）
 * @property offsetY - 图层相对推流出去的界面顶部的偏移量（单位是像素）
 * @property canvasWidth - 推流出去的界面里图层占的宽度（单位是像素）
 * @property canvasHeight - 推流出去的界面里图层占的高度（单位是像素）
 * @property [weight] - 权重
 * @property [force] - 强制使用当前配置
 * @property [param] - 参数
 */
type UpdateLayerParam = {
    layerId: string;
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
    weight?: number;
    force?: boolean;
    param?: any;
};

/**
 * 元素配置
 * @property screenColor - 透明底色配置，默认为空，即不启用透明底色
 */
type ZoneOptions = {
    screenColor: string;
};

/**
 * 添加元素参数
 * @property elem - 截取的HTML元素/React组件
 * @property [options] - 截取选项
 */
type ZoneParams = {
    elem: any;
    options?: ZoneOptions;
};

/**
 * 创建普通白板参数
 * @property [param] - 独立白板的初始参数
 * @property width - 普通白板的宽度
 * @property height - 普通白板的高度
 * @property x - 普通白板的左上角横坐标
 * @property y - 普通白板的左上角纵坐标
 */
type AddWhiteBoardParams = {
    param?: any;
    width: number;
    height: number;
    x: number;
    y: number;
};

/**
 * 创建图片图层参数
 * @property md5 - 图片资源md5
 * @property [frameRate] - 帧率
 */
type ImageLayerParams = {
    md5: string;
    frameRate?: number;
};

/**
 * 脸部效果参数
 * @property md5 - 变脸效果的md5
 * @property enable - 是否启用
 */
type FaceEffectParams = {
    md5: string;
    enable: boolean;
};

/**
 * 创建EXE白板参数
 * @property sharedhandle - 第三方EXE的共享纹理句柄，用于把EXE的界面投屏到主播端
 * @property x - EXE白板的左上角横坐标
 * @property y - EXE白板的左上角纵坐标
 * @property width - EXE白板的宽度
 * @property height - EXE白板的高度
 */
type ExeWhiteBoardParams = {
    sharedhandle: string;
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * 独立白板消息回调
 * @param data - 消息内容
 */
type WhiteBoardMessageCallback = (data: string) => void;

/**
 * 监听独立白板消息参数
 * @property callback - 独立白板消息回调
 */
type WhiteBoardMessageParams = {
    callback: WhiteBoardMessageCallback;
};

/**
 * 创建文字图层参数
 * @property [layerId] - 文字图层id
 * @property text - 文字图层内容
 * @property [fontFamily] - 文字图层字体
 * @property [fontSize] - 文字图层字体大小
 * @property [fontColor] - 字图层字体颜色
 * @property [useBackground] - 是否带背景
 * @property [backgroundColor] - 文字图层背景颜色
 * @property [alpha] - 文字图层不透明度
 * @property [bold] - 是否加粗
 * @property [italic] - 是否斜体
 * @property [underline] - 是否带下划线
 * @property [scroll] - 是否滚动
 */
type TextLayerParams = {
    layerId?: string;
    text: string;
    fontFamily?: string;
    fontSize?: number;
    fontColor?: string;
    useBackground?: boolean;
    backgroundColor?: string;
    alpha?: number;
    bold?: boolean;
    italic?: boolean;
    underline?: boolean;
    scroll?: boolean;
};

/**
 * 创建白板参数
 * @property type - 白板类型, EXTRA-独立白板(默认), EXE-EXE白板, NORMAL-普通白板
 * @property wbName - 业务传入的白板标识
 * @property offsetX - 相对推流出去的界面左侧的偏移量（单位是像素）
 * @property offsetY - 相对推流出去的界面顶部的偏移量（单位是像素）
 * @property canvasWidth - 推流出去的界面里白板图层占的宽度（单位是像素）
 * @property canvasHeight - 推流出去的界面里白板图层占的高度（单位是像素
 * @property [x] - 白板左侧偏移量（单位是像素
 * @property [y] - 白板顶部偏移量（单位是像素）
 * @property width - 白板区域宽度（单位是像素）
 * @property height - 白板高度（单位是像素）
 * @property [force] - 强制使用当前配置
 * @property [param] - 参数
 * @property [combinable] - 是否合流
 * @property [editable] - 是否可编辑
 */
type WBParams = {
    type: string;
    wbName: string;
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
    x?: number;
    y?: number;
    width: number;
    height: number;
    force?: boolean;
    param?: any;
    combinable?: boolean;
    editable?: boolean;
};

/**
 * 白板布局数据
 * @property offsetX - 相对推流出去的界面左侧的偏移量（PC主播端单位是像素，助手单位是点）
 * @property offsetY - 相对推流出去的界面顶部的偏移量（PC主播端单位是像素，助手单位是点）
 * @property canvasWidth - 推流出去的界面里白板图层占的宽度（PC主播端单位是像素，助手单位是点）
 * @property canvasHeight - 推流出去的界面里白板图层占的高度（PC主播端单位是像素，助手单位是点）
 */
type WBLayoutInfo = {
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
};

/**
 * 白板布局变化信息
 * @property data - 布局数据
 */
type ChangedLayoutInfo = {
    data: WBLayoutInfo;
};

/**
 * 白板布局变化回调
 * @param layoutInfo - 布局信息
 */
type WBLayoutChangeCallback = (layoutInfo: ChangedLayoutInfo) => void;

/**
 * 监听参数
 * @property wbId - 白板id
 * @property [wbName] - 业务传入的白板标识
 * @property callback - 回调函数
 */
type WBLayoutChangeParams = {
    wbId: string;
    wbName?: string;
    callback: WBLayoutChangeCallback;
};

/**
 * 更新白板参数
 * @property wbId - 白板id
 * @property wbName - 业务传入的白板标识
 * @property offsetX - 相对推流出去的界面左侧的偏移量(单位是像素)
 * @property offsetY - 相对推流出去的界面顶部的偏移量(单位是像素)
 * @property canvasWidth - 推流出去的界面里白板图层占的宽度(单位是像素)
 * @property canvasHeight - 推流出去的界面里白板图层占的高度(单位是像素)
 */
type ChangeWBParams = {
    wbId: string;
    wbName: string;
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
};

/**
 * 图层布局改变回调
 * @param layoutInfo - 布局信息
 */
type LayerLayoutChangeCallback = (layoutInfo: LayerInfo) => void;

/**
 * 布局改变参数
 * @property layerId - 图层id
 * @property callback - 回调函数
 */
type LayerLayoutChangeParams = {
    layerId: string;
    callback: LayerLayoutChangeCallback;
};

/**
 * 布局信息
 * @property width - 宽度（单位是像素)
 * @property height - 高度（单位是像素）
 * @property x - 普通白板的左上角横坐标
 * @property y - 普通白板的左上角纵坐标
 */
type StreamLayoutInfo = {
    width: number;
    height: number;
    x: number;
    y: number;
};

/**
 * 特效信息
 * @property md5 - 资源的md5
 * @property fileName - 文件名
 * @property [param] - 额外参数
 */
type EffectParams = {
    md5: string;
    fileName: string;
    param?: any;
};

/**
 * 移除资源参数
 * @property md5 - 资源的md5
 * @property fileName - 文件名
 */
type RemoveEffectParams = {
    md5: string;
    fileName: string;
};

/**
 * 麦克风信息
 * @property isOn - 是否打开
 * @property volume - 音量
 */
type MicInfo = {
    isOn: boolean;
    volume: number;
};

/**
 * 扬声器信息
 * @property isOn - 是否打开
 * @property volume - 音量
 */
type SpeakerInfo = {
    isOn: boolean;
    volume: number;
};

/**
 * 伴奏信息
 * @property isOn - 是否打开
 * @property volume - 音量
 */
type MusicInfo = {
    isOn: boolean;
    volume: number;
};

/**
 * 可见性信息
 * @property isPrivate - 是否打开隐私模式
 * @property isPassword - 是否打开加密模式
 */
type AccessibilityInfo = {
    isPrivate: boolean;
    isPassword: boolean;
};

/**
 * 镜头信息
 * @property isOn - 摄像头是否打开
 * @property isFlip - 是否开启翻转(仅PC主播端支持)
 * @property isSplitScreen - 是否开启分屏(仅PC主播端支持)
 * @property isRhythm - 是否开启律动(仅PC主播端支持)
 */
type CameraInfo = {
    isOn: boolean;
    isFlip: boolean;
    isSplitScreen: boolean;
    isRhythm: boolean;
};

/**
 * 特效信息
 * @property id - id
 * @property name - name
 * @property tab_id - tab_id
 * @property tab_name - tab_name
 */
type EffectInfo = {
    id: number;
    name: string;
    tab_id: number;
    tab_name: string;
};

/**
 * 特效信息列表
 * @property isOn - 特效是否打开
 * @property effectList - 特效信息列表
 */
type EffectListInfo = {
    isOn: boolean;
    effectList: EffectInfo[];
};

/**
 * 分辨率信息
 * @property width - 横向分辨率(单位是像素)
 * @property height - 纵向分辨率(单位是像素)
 */
type ResolutionInfo = {
    width: number;
    height: number;
};

/**
 * 画质信息
 * @property bitRate - 码率
 * @property frameRate - 帧率
 * @property resolution - 分辨率信息
 */
type QualityInfo = {
    bitRate: number;
    frameRate: number;
    resolution: ResolutionInfo;
};

/**
 * 延迟信息
 * @property delayTime - 延迟时间(单位是秒)
 */
type DelayInfo = {
    delayTime: number;
};

/**
 * 开播信息
 * @property mic - 麦克风信息
 * @property speaker - 扬声器信息（仅PC主播端支持）
 * @property music - 伴奏信息
 * @property accessibility - 可见性信息
 * @property camera - 镜头信息
 * @property effect - 特效信息
 * @property quality - 画质信息
 * @property delay - 延迟信息（仅PC主播端支持）
 */
type StreamingInfo = {
    mic: MicInfo;
    speaker: SpeakerInfo;
    music: MusicInfo;
    accessibility: AccessibilityInfo;
    camera: CameraInfo;
    effect: EffectListInfo;
    quality: QualityInfo;
    delay: DelayInfo;
};

/**
 * 获取开播信息参数
 * @property keys - 查询的关键字
 */
type StreamingInfoParams = {
    keys: string[];
};

/**
 * 是否启用白板编辑模式参数
 * @property enable - 是否启用
 */
type SetWBEditModeParams = {
    enable: boolean;
};

/**
 * 当前特效信息
 * @property md5 - 资源的md5
 * @property fileName - 文件名
 * @property param - 额外参数
 */
type CurrentEffectInfo = {
    md5: string;
    fileName: string;
    param: any;
};

/**
 * pk连麦图层布局信息
 * @property offsetX - 图层相对推流出去的界面左侧的偏移量（单位是像素）
 * @property offsetY - 图层相对推流出去的界面顶部的偏移量（单位是像素）
 * @property canvasWidth - 推流出去的界面里图层占的宽度（单位是像素）
 * @property canvasHeight - 推流出去的界面里图层占的高度（单位是像素）
 */
type LinkLayerLayout = {
    offsetX: number;
    offsetY: number;
    canvasWidth: number;
    canvasHeight: number;
};

/**
 * 图层状态信息
 * @property layerId - 图层id
 * @property type - 图层类型
 * @property layerName - 业务传入的图层标识
 * @property status - 图层状态, VISIBLE-显示(默认), HIDDEN-隐藏, CLOSED-关闭
 * @property param - 额外参数
 */
type LayerStatusInfo = {
    layerId: string;
    type: string;
    layerName: string;
    status: string;
    param: any;
};

/**
 * @param statusInfo - 布局信息
 */
type LayerStatusChangeCallback = (statusInfo: LayerStatusInfo) => void;

/**
 * 监听图层状态变化消息参数
 * @property layerId - 图层id
 * @property callback - 回调函数
 */
type OnLayerStatusChangeParams = {
    layerId: string;
    callback: LayerStatusChangeCallback;
};

/**
 * 取消监听图层状态变化消息参数
 * @property layerId - 图层id
 * @property callback - 回调函数
 */
type OffLayerStatusChangeParams = {
    layerId: string;
    callback: LayerStatusChangeCallback;
};

/**
 * 布局信息
 * @property x - 左上角的横坐标，相对于推流分辨率
 * @property y - 左上角的纵坐标，相对于推流分辨率
 * @property width - 图层宽度，相对于推流分辨率
 * @property height - 图层高度，相对于推流分辨率
 */
type GetLayoutInfo = {
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * 图层信息
 * @property id - 根据这个id可以判断这个图层是否为当前小程序创建的图层
 * @property type - 图层类型
 * @property isVisible - 是否显示
 * @property order - 层级，0为最上层
 * @property layout - 布局信息
 */
type GetLayerInfo = {
    id: string;
    type: string;
    isVisible: boolean;
    order: number;
    layout: GetLayoutInfo;
};

/**
 * 返回图层信息
 * @property layerInfoList - 图层信息列表
 */
type LayerInfoResp = {
    layerInfoList: GetLayerInfo[];
};

/**
 * 播放的流名称信息
 * @property streamName - 当前播放的流名称
 */
type StreamNameInfo = {
    streamName: string;
};

/**
 * @param info - 流名称信息
 */
type CurrentStreamNameChangeCallback = (info: StreamNameInfo) => void;

/**
 * 监听当前播放的流名称变化参数
 * @property callback - 流名称变化回调
 */
type CurrentStreamNameChangeReq = {
    callback: CurrentStreamNameChangeCallback;
};

/**
 * theme
 */
namespace theme {
    /**
     * 获取当前是否暗黑模式
     * @returns 调用结果
     */
    function getCurrentTheme(): Promise<ThemeRsp>;
    /**
     * 监听模式变化
     * @param params - 监听模式变化参数
     * @returns 调用结果
     */
    function onThemeChange(params: ThemeChangeParam): Promise<void>;
    /**
     * 取消监听模式变化
     * @returns 调用结果
     */
    function offThemeChange(): Promise<void>;
}

/**
 * 模式信息
 * @property currentTheme - 当前模式；取值范围：light 明亮模式；dark 暗黑模式；
 */
type ThemeRsp = {
    currentTheme: string;
};

/**
 * 回调模式信息
 * @property currentTheme - 当前模式；取值范围：light 明亮模式；dark 暗黑模式；
 */
type ThemeInfo = {
    currentTheme: string;
};

/**
 * @param info - 主题信息
 */
type ThemeChangeCallback = (info: ThemeInfo) => void;

/**
 * 监听模式变化参数
 * @property callback - 模式变化回调
 */
type ThemeChangeParam = {
    callback: ThemeChangeCallback;
};

/**
 * ui
 */
namespace ui {
    /**
     * 设置开放平台互动入口红点显示状态
     * @param params - 参数
     * @returns 调用结果
     */
    function setOpenPlatformBadgeStatus(params: BadgeStatusParams): Promise<void>;
    /**
     * 弹出H5小程序窗口
     * @param params - 参数
     * @returns 调用结果
     */
    function openH5MiniappPopup(params: H5PopupParams): Promise<void>;
    /**
     * 设置小程序入口自定义文案
     * @param params - 参数
     * @returns 调用结果
     */
    function setEntranceText(params: EntranceTextParams): Promise<void>;
    /**
     * 开启或者关闭穿透模式
     * @param params - 参数
     * @returns 调用结果
     */
    function setGesturePenetration(params: GesturePenetrationParams): Promise<void>;
    /**
     * 监听小程序入口提示按钮点击
     * @param params - 参数
     * @returns 调用结果
     */
    function onEntranceToastClick(params: OnEnterToastClick): Promise<void>;
    /**
     * 取消监听小程序入口提示按钮点击
     * @returns 调用结果
     */
    function offEntranceToastClick(): Promise<void>;
    /**
     * 触发播放器点击
     * @param params - 调用参数
     * @returns 调用结果
     */
    function triggerVideoClick(params: TriggerVideoClickReq): Promise<void>;
    /**
     * 展示键盘输入框
     * @param params - 调用参数
     * @returns 调用结果
     */
    function showNativeInputBar(params: ShowInputBarReq): Promise<ShowInputBarRsp>;
}

/**
 * 设置参数
 * @property visible - 红点是否可见
 */
type BadgeStatusParams = {
    visible: boolean;
};

/**
 * 弹窗的宽高信息
 * @property width - 宽，单位像素
 * @property height - 高，单位像素
 */
type H5PopupSize = {
    width: number;
    height: number;
};

/**
 * 拖动区域的布局信息
 * @property x - 距左侧距离，单位像素
 * @property y - 距顶部距离，单位像素
 * @property width - 拖动区域宽度，单位像素
 * @property height - 拖动区域高度，单位像素
 */
type H5PopupDragSize = {
    x: number;
    y: number;
    width: number;
    height: number;
};

/**
 * 弹出H5窗口参数
 * @property url - URL
 * @property name - 名称
 * @property titlelbar - 是否需要标题栏
 * @property layout - 弹窗的宽高信息
 * @property dragHandleLayout - 拖动区域的布局信息
 */
type H5PopupParams = {
    url: string;
    name: string;
    titlelbar: boolean;
    layout: H5PopupSize;
    dragHandleLayout: H5PopupDragSize;
};

/**
 * 设置小程序入口自定义文案参数
 * @property text - 要设置的自定义文案，如果传空字符串就不显示任何内容（包括文案背景）
 * @property [toast] - 入口的toast，如果传空字符串就不显示toast
 * @property [toastAction] - toast上的按钮，如果传空字符串就不显示按钮
 * @property [toastActionID] - toast上的按钮ID，用于区分点击按钮
 */
type EntranceTextParams = {
    text: string;
    toast?: string;
    toastAction?: string;
    toastActionID?: string;
};

/**
 * 开启或者关闭穿透模式参数
 * @property enable - 开启或者关闭穿透模式
 */
type GesturePenetrationParams = {
    enable: boolean;
};

/**
 * @property toastActionID - 点击的按钮ID
 * @property toastAction - 点击的按钮文案
 */
type ClickToastInfo = {
    toastActionID: string;
    toastAction: string;
};

/**
 * @param info - 按钮点击回调数据
 */
type EnterToastClick = (info: ClickToastInfo) => void;

/**
 * @property callback - 入口toast按钮点击回调
 */
type OnEnterToastClick = {
    callback: EnterToastClick;
};

/**
 * 触发播放器点击参数
 * @property button - MouseEvent.button
 * @property clientX - 点击位置距离浮窗容器左上角的x轴坐标，单位是像素
 * @property clientY - 点击位置距离浮窗容器左上角的y轴坐标，单位是像素
 */
type TriggerVideoClickReq = {
    button: number;
    clientX: number;
    clientY: number;
};

/**
 * 键盘输入返回
 * @property text - 输入的文字
 */
type ShowInputBarRsp = {
    text: string;
};

/**
 * 展示APP端键盘输入框参数
 * @property [text] - 默认文字
 * @property [placeholder] - 默认提示文字
 */
type ShowInputBarReq = {
    text?: string;
    placeholder?: string;
};

/**
 * HY vidoe
 */
namespace hyv {
    /**
     * 打开虎牙视频播放页
     * @param params - 参数
     * @returns 调用结果
     */
    function openVideo(params: OpenVideoParams): Promise<void>;
}

/**
 * 打开视频播放页参数
 * @property vid - 视频ID
 */
type OpenVideoParams = {
    vid: string;
};

/**
 * 视图相关
 */
namespace view {
    /**
     * 创建分身
     * @param params - 创建分身参数
     * @returns 调用结果
     */
    function createSubView(params: SubViewParams): Promise<SubViewId>;
    /**
     * 销毁分身
     * @param params - 参数
     * @returns 调用结果
     */
    function destroySubView(params: SubViewId): Promise<void>;
    /**
     * 隐藏当前分身
     * @returns 调用结果
     */
    function hideCurrentView(): Promise<void>;
    /**
     * 隐藏分身
     * @param params - 参数
     * @returns 调用结果
     */
    function hideSubView(params: SubViewId): Promise<void>;
    /**
     * 显示分身
     * @param params - 参数
     * @returns 调用结果
     */
    function showSubView(params: SubViewId): Promise<void>;
    /**
     * 创建浮窗
     * @param params - 创建浮窗参数
     * @returns 调用结果
     */
    function createPopup(params: PopupParams): Promise<PopupId>;
    /**
     * 摧毁浮窗
     * @param params - 参数
     * @returns 调用结果
     */
    function destroyPopup(params: PopupId): Promise<void>;
    /**
     * 隐藏当前浮窗
     * @returns 调用结果
     */
    function hideCurrentPopup(): Promise<void>;
    /**
     * 隐藏浮窗
     * @param params - 参数
     * @returns 调用结果
     */
    function hidePopup(params: PopupId): Promise<void>;
    /**
     * 展示浮窗
     * @param params - 参数
     * @returns 调用结果
     */
    function showPopup(params: PopupId): Promise<void>;
}

/**
 * 分身信息
 * @property subViewId - 分身Id
 */
type SubViewId = {
    subViewId: string;
};

/**
 * 布局信息
 * @property width - 宽度占位置的比例
 * @property ratio - 宽高比
 * @property top - 左上角的纵坐标占位置的比例
 * @property left - 左上角的横坐标占位置的比例
 */
type Layout = {
    width: number;
    ratio: number;
    top: number;
    left: number;
};

/**
 * 创建分身参数
 * @property position - 位置, player-视频区, chatroom-公屏
 * @property layout - 布局信息
 * @property [level] - 层级
 * @property [weight] - 权重
 * @property [param] - 初始化参数
 */
type SubViewParams = {
    position: string;
    layout: Layout;
    level?: number;
    weight?: number;
    param?: any;
};

/**
 * 弹窗信息
 * @property popupId - 弹窗id
 */
type PopupId = {
    popupId: string;
};

/**
 * 配置参数
 * @property handleX - handleX
 * @property handleY - handleY
 * @property handleWidth - handleWidth
 * @property handleHeight - handleHeight
 */
type PopupConfig = {
    handleX: number;
    handleY: number;
    handleWidth: number;
    handleHeight: number;
};

/**
 * 创建浮窗参数
 * @property width - 宽
 * @property height - 高
 * @property [config] - 配置参数
 * @property [param] - 传给弹窗的初始化参数
 */
type PopupParams = {
    width: number;
    height: number;
    config?: PopupConfig;
    param?: any;
};

/**
 * vip
 */
namespace vip {
    /**
     * 获取当前用户Token
     * @param [params] - 参数
     * @returns 返回凭证信息
     */
    function getJWT(params?: GetJWTReq): Promise<JWTInfo>;
}

/**
 * 用户凭证信息
 * @property jwt - 用户凭证
 */
type JWTInfo = {
    jwt: string;
};

/**
 * 获取用户Token参数
 * @property [anonymous] - 是否匿名
 */
type GetJWTReq = {
    anonymous?: boolean;
};


}