@realsee/live 0.4.0-beta.4 → 0.4.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"realsee-live.esm.js","sources":["../src/utils/subscribe.ts","../src/rtc/CoreRTC.ts","../src/typings/rtc/type.ts","../src/utils/uuid.ts","../src/rtc/BrowserRTC.ts","../src/rtc/BrowserRTC4Chime.ts","../src/typings/rtc/joinedInfo.ts","../src/rtc/VRWebViewRTC.ts","../src/typings/live/LiveMsg.ts","../src/typings/live/UserInfo.ts","../src/typings/live/WebSocket.ts","../src/utils/appendUri.ts","../src/utils/clientDetector.ts","../src/utils/equal.ts","../src/live/controller.ts","../src/live/createLive.ts","../src/live/createLiveReact.tsx"],"sourcesContent":["const EVENT_SYMBOL: unique symbol = Symbol('$$REALSEE_LIVE_EVENT$$');\n\nexport type EventMap = {\n [name: string]: (...args: any[]) => void | boolean;\n};\n\nfunction __generateEventIfNotExisted<T extends EventMap>(\n instance: any,\n): {\n [Key in keyof T]: [\n callback: (...args: Parameters<T[Key]>) => ReturnType<T[Key]>,\n once: boolean,\n ][];\n} {\n if (!instance[EVENT_SYMBOL]) {\n instance[EVENT_SYMBOL] = {};\n }\n return instance[EVENT_SYMBOL];\n}\n\nfunction __removeEventIfNotExisted(instance: any) {\n if (!instance[EVENT_SYMBOL]) {\n delete instance[EVENT_SYMBOL];\n }\n}\n\n/**\n * 监听者模式\n * @template T 预设的监听回调类型\n * @example\n * ```\n * new Subscribe<{\n * \"foo\": [arg1: number, arg2: string],\n * \"bar\": [arg: boolean],\n * }>()\n * ```\n */\nexport class Subscribe<T extends EventMap> {\n /**\n * 判断是否注册了事件\n * @param name 事件类型\n */\n hasListener(name: keyof T): boolean {\n const events = __generateEventIfNotExisted<T>(this);\n return events && events[name] && events[name].length > 0;\n }\n\n /**\n * 注册事件\n * @param name 事件类型\n * @param callback 事件回调函数\n * @param once 是否只执行一次\n * @returns 解除事件\n * @template K 预设的监听事件名称\n * @template C 回调函数函数上下文\n */\n on<K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n once?: boolean,\n ): () => void {\n const events = __generateEventIfNotExisted<T>(this);\n if (!events[name]) events[name] = [];\n events[name].push([callback as any, once || false]);\n return () => this.off(name, callback);\n }\n\n /**\n * 注册事件(是否只执行一次)\n * @param name 事件类型\n * @param callback 事件回调函数\n * @returns 解除事件\n * @template K 预设的监听事件名称\n * @template C 回调函数函数上下文\n */\n once<K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): () => void {\n return this.on(name, callback, true);\n }\n\n /**\n * 解除事件\n *\n * 如果 name 不传的话解除对应所有事件\n * 如果 name, callback 不传的话解除所有name的所有事件\n * @param name 事件类型\n * @param callback 事件回调函数\n * @template K 预设的监听事件名称\n */\n off<K extends keyof T>(\n name?: K,\n callback?: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): void {\n if (name === undefined) {\n __removeEventIfNotExisted(this);\n return;\n }\n const events = __generateEventIfNotExisted<T>(this);\n if (!events[name]) events[name] = [];\n if (callback === undefined) {\n events[name].length = 0;\n return;\n }\n let index = 0;\n for (; index < events[name].length; index++) {\n if (events[name][index][0] === callback) break;\n }\n if (index < events[name].length) {\n events[name].splice(index, 1);\n }\n }\n\n /**\n * 触发事件\n * @param name 事件类型\n * @param data 触发事件的数据\n * @returns canceled 是否被触发取消\n * @template K 预设的监听事件名称\n */\n emit<K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean {\n let canceled = false;\n const events = __generateEventIfNotExisted<T>(this);\n const event = events[name] || [];\n for (let one of event.slice()) {\n const [callback, once = false] = one;\n const result = callback(...data);\n if (once) this.off(name, callback);\n if (result === false) canceled = true;\n }\n return canceled;\n }\n}\n\nexport namespace SubscribeMixinType {\n export interface hasListener<T extends EventMap> {\n (name: keyof T): boolean;\n }\n export interface on<T extends EventMap> {\n <K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n once?: boolean,\n ): () => void;\n }\n export interface once<T extends EventMap> {\n <K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): () => void;\n }\n export interface off<T extends EventMap> {\n <K extends keyof T>(\n names?: K | K[],\n callback?: (...args: any[]) => any,\n ): void;\n }\n export interface emit<T extends EventMap> {\n <K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean;\n }\n}\n","import { RTCEventType } from '../typings/rtc/eventType';\nimport { RTCProtocol } from '../typings/rtc/protocol';\nimport { RTCType } from '../typings/rtc/type';\nimport { Subscribe } from '../utils/subscribe';\n\n/**\n * rtc 基础抽象类\n */\nexport abstract class CoreRTC\n extends Subscribe<RTCEventType>\n implements RTCProtocol\n{\n abstract joined: boolean;\n\n abstract micro: boolean;\n\n abstract voiceId: string;\n\n abstract type: RTCType;\n\n abstract join(options: {\n voiceId: string;\n userId: string;\n roomId: string | number | undefined;\n type: RTCType;\n }): Promise<boolean>;\n\n abstract quit(): Promise<boolean>;\n\n abstract detectMicro(): Promise<boolean>;\n\n abstract toggleMicro(flag?: boolean): Promise<boolean>;\n\n abstract shock(): void;\n}\n","/**\n * rtc 类型\n */\nexport enum RTCType {\n RealseeBrowserRTC = 'RealseeBrowserRTC',\n RealseeVRWebViewRTC = 'RealseeVRWebViewRTC',\n RealseeBrowserChimeRTC = 'RealseeBrowserChimeRTC',\n}\n\nexport enum BuiltInRTCType {\n RealseeXTRTC = 'trtc',\n RealseeXChimeRTC = 'chime',\n}\n","// uuid\nfunction S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\n/**\n * 基于伪随机数生成 **uuid**。\n */\nexport function uuid() {\n // then to call it, plus stitch in '4' in the third group\n return (\n S4() +\n S4() +\n '-' +\n S4() +\n '-4' +\n S4().substr(0, 3) +\n '-' +\n S4() +\n '-' +\n S4() +\n S4() +\n S4()\n ).toLowerCase();\n}\n","import TRTC, { Client, LocalStream } from 'trtc-js-sdk';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { RTCType } from '../typings/rtc/type';\n\nimport { uuid } from '../utils/uuid';\nimport { CoreRTC } from './CoreRTC';\n\ninterface ITrtcInstance {\n client: Client | null;\n stream: LocalStream | null;\n}\n\nexport class BrowserRTC extends CoreRTC {\n type = RTCType.RealseeBrowserRTC;\n joined = false;\n micro = false;\n voiceId = '';\n\n private _getVoiceSign: GetVoiceSign = () => {\n throw new Error('方法 getVoiceSign 未实现');\n };\n\n private $dom: HTMLDivElement = document.createElement('div');\n\n private _trtc: ITrtcInstance = {\n client: null,\n stream: null,\n };\n\n constructor(options: { getVoiceSign: GetVoiceSign }) {\n super();\n this._getVoiceSign = options.getVoiceSign;\n this._initParentDom();\n }\n\n private _initParentDom() {\n this.$dom.id = `rs-rtc-${uuid()}`;\n this.$dom.style.display = 'none';\n document.body.appendChild(this.$dom);\n }\n\n join = async (options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }): Promise<boolean> => {\n this.emit('joinWillStart');\n const createClientOptions = await this._getVoiceSign({\n voiceId: options.voiceId,\n roomId: options.roomId,\n userId: options.userId,\n });\n // 1. 创建client\n this._trtc.client = TRTC.createClient({\n mode: 'rtc',\n ...createClientOptions,\n });\n\n this._trtc.client?.enableAudioVolumeEvaluation();\n\n // 2. 订阅事件\n this._registerRtcEvent();\n\n // 3. 加入语音房间\n let result = await new Promise<boolean>((resolve) => {\n this._trtc.client\n ?.join({ roomId: Number(options.voiceId) })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n this.joined = result;\n\n if (!result) return false; // 进房失败\n\n // 4. 创建本地流\n this._trtc.stream = TRTC.createStream({\n userId: createClientOptions.userId,\n audio: true,\n video: false,\n });\n\n // 5. 初始化本地流\n result = await new Promise<boolean>((resolve) => {\n this._trtc.stream\n ?.initialize()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n // 6. 发布本地流\n result = await new Promise<boolean>((resolve) => {\n this._trtc.client\n ?.publish(this._trtc.stream!)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n this.joined = result;\n\n if (this.joined) this.emit('joined');\n\n return result;\n };\n\n quit(): Promise<boolean> {\n return new Promise(async (resolve) => {\n this.joined = false;\n if (this._trtc.stream) {\n await this._trtc.client?.unpublish(this._trtc.stream);\n this._trtc.stream.stop();\n this._trtc.stream.close();\n this._trtc.stream = null;\n }\n this._trtc.client\n ?.leave()\n .then(() => (this._trtc.client = null))\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n\n detectMicro(): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const rule = { audio: true, video: false };\n try {\n navigator.mediaDevices\n .getUserMedia(rule)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n } catch (e) {\n console.error(e);\n resolve(false);\n }\n });\n }\n\n toggleMicro(flag?: boolean): Promise<boolean> {\n return Promise.resolve(\n (flag\n ? this._trtc?.stream?.unmuteAudio()\n : this._trtc?.stream?.muteAudio()) || false,\n );\n }\n\n shock(): void {\n throw new Error('Method not implemented.');\n }\n\n private _registerRtcEvent() {\n this._trtc.client?.on('stream-added', this._handleStreamAdded);\n this._trtc.client?.on('stream-subscribed', this._handleStreamSubscribed);\n this._trtc.client?.on('audio-volume', (event) =>\n this.emit('userVolumes', [\n { userId: event.userId, audioVolume: event.audioVolume },\n ]),\n );\n this._trtc.client?.on('error', (event: any) => this.emit('error', event));\n }\n\n private _handleStreamAdded = (event: any) => {\n const remoteStream = event.stream;\n console.log('远端流增加: ' + remoteStream.getId());\n //订阅远端流\n this._trtc.client?.subscribe(remoteStream);\n };\n\n private _handleStreamSubscribed = (event: any) => {\n const remoteStream = event.stream;\n console.log('远端流订阅成功:' + remoteStream.getId());\n const playId = remoteStream.getId();\n const domId = `rs-rtc-remote_stream-${playId}`;\n const dom = document.createElement('div');\n dom.id = domId;\n this.$dom.appendChild(dom);\n // 播放远端流\n remoteStream.play(domId);\n };\n}\n","import {\n AudioVideoObserver,\n ConsoleLogger,\n DefaultDeviceController,\n DefaultMeetingSession,\n DefaultModality,\n DeviceChangeObserver,\n LogLevel,\n MeetingSessionConfiguration,\n MeetingSessionStatusCode,\n} from 'amazon-chime-sdk-js';\nimport { MeetingSessionConfigurationOptions } from '../typings/chime/MeetingSessionConfigurationOptions';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { RTCType } from '../typings/rtc/type';\n\nimport { uuid } from '../utils/uuid';\nimport { CoreRTC } from './CoreRTC';\n\n/**\n * amazon-chime-sdk-js 适配的rtc实现\n */\nexport class BrowserRTC4Chime extends CoreRTC {\n type = RTCType.RealseeBrowserChimeRTC;\n joined = false;\n micro = false;\n voiceId = '';\n userId = '';\n logger: ConsoleLogger;\n deviceController: DefaultDeviceController;\n meetingSession: DefaultMeetingSession | undefined;\n\n audioInput: MediaDeviceInfo | undefined;\n audioOutput: MediaDeviceInfo | undefined;\n\n deviceChangeObserver: DeviceChangeObserver = {};\n audioVideoObserver: AudioVideoObserver = {};\n\n private _getVoiceSign: GetVoiceSign = () => {\n throw new Error('方法 getVoiceSign 未实现');\n };\n\n private $dom: HTMLDivElement = document.createElement('div');\n private $audio: HTMLAudioElement = document.createElement('audio');\n\n constructor(options: { getVoiceSign: GetVoiceSign; logLevel?: LogLevel }) {\n super();\n // 挂载签名钩子\n this._getVoiceSign = options.getVoiceSign;\n this._initDom();\n this.logger = new ConsoleLogger(\n 'WebRTCLogger',\n options.logLevel || LogLevel.OFF,\n );\n this.deviceController = new DefaultDeviceController(this.logger);\n this.initObservers();\n }\n\n /**\n * 对audio标签初始化\n */\n _initDom = () => {\n this.$audio.id = `rs-rtc-${uuid()}`;\n this.$dom.id = `rs-rtc-${uuid()}`;\n this.$dom.appendChild(this.$audio);\n document.body.appendChild(this.$dom);\n };\n\n /**\n * 初始化事件监听器\n */\n initObservers = () => {\n // 输入输出设备变化的监听器\n this.deviceChangeObserver = {\n audioInputsChanged: (freshAudioInputDeviceList: any[]) => {\n // An array of MediaDeviceInfo objects\n freshAudioInputDeviceList?.forEach((mediaDeviceInfo) => {\n this.logger.info(\n `Device ID: ${mediaDeviceInfo.deviceId} Microphone: ${mediaDeviceInfo.label}`,\n );\n });\n },\n\n audioOutputsChanged: (freshAudioOutputDeviceList: any) => {\n this.logger.info(\n `Audio outputs updated: ${freshAudioOutputDeviceList}`,\n );\n },\n\n videoInputsChanged: (freshVideoInputDeviceList: any) => {\n this.logger.info(`Video inputs updated: ${freshVideoInputDeviceList}`);\n },\n\n audioInputMuteStateChanged: (device: any, muted: any) => {\n this.logger.info(\n `Device ${device.toString()} ${\n muted ? 'is muted in hardware' : 'is not muted'\n }`,\n );\n },\n };\n\n // 流变化监听器\n this.audioVideoObserver = {\n audioVideoDidStart: () => {\n this.logger.info('Started');\n },\n audioVideoDidStop: (sessionStatus: any) => {\n // See the \"Stopping a session\" section for details.\n this.logger.info(\n `Stopped with a session status code: ${sessionStatus.statusCode()}`,\n );\n },\n audioVideoDidStartConnecting: (reconnecting: any) => {\n if (reconnecting) {\n // e.g. the WiFi connection is dropped.\n this.logger.info('Attempting to reconnect');\n }\n },\n };\n };\n\n /**\n * 加入语音会议\n * @param options\n * @returns\n */\n async join(options: {\n voiceId: string;\n userId: string;\n roomId: string | number | undefined;\n type: RTCType;\n }): Promise<boolean> {\n return new Promise(async (success, fail) => {\n this.emit('joinWillStart');\n try {\n // 取签名\n const { sdkAppId, userId, roomId, userSig } = await this._getVoiceSign({\n ...options,\n roomId: options.roomId || 0,\n });\n this.userId = userId;\n const {\n attendence,\n vendor_wrapper,\n }: MeetingSessionConfigurationOptions = JSON.parse(\n decodeURIComponent(userSig),\n );\n\n // 初始化配置\n const configuration = new MeetingSessionConfiguration(\n {\n Meeting: vendor_wrapper,\n },\n {\n Attendee: {\n ExternalUserId: attendence.external_user_id,\n AttendeeId: attendence.attendee_id,\n JoinToken: attendence.join_token,\n },\n },\n );\n\n // 初始化会议会话\n this.meetingSession = new DefaultMeetingSession(\n configuration,\n this.logger,\n this.deviceController,\n );\n\n // 注册事件\n this._registerRtcEvent();\n\n // 绑定监听器\n this.meetingSession.audioVideo.addDeviceChangeObserver(\n this.deviceChangeObserver,\n );\n this.meetingSession.audioVideo.addObserver(this.audioVideoObserver);\n\n // 绑定播放器\n this.meetingSession.audioVideo.bindAudioElement(this.$audio);\n\n const observer: AudioVideoObserver = {\n audioVideoDidStart: () => {\n this.meetingSession?.audioVideo.realtimeMuteLocalAudio();\n this.joined = true;\n this.emit('joined');\n success(true);\n },\n audioVideoDidStop: () => {\n this.joined = false;\n success(false);\n },\n };\n\n this.meetingSession.audioVideo.addObserver(observer);\n\n // 选择语音输入设备\n const audioInputDevices =\n await this.deviceController.listAudioInputDevices(true);\n const defaultAudioInput = audioInputDevices.find(\n (device: any) => device.deviceId === 'default',\n );\n const otherAudioInput = audioInputDevices.find(\n (device: any) => device.deviceId !== '',\n );\n this.audioInput = defaultAudioInput || otherAudioInput;\n\n await this.meetingSession.audioVideo.chooseVideoInputDevice(null);\n await this.meetingSession.audioVideo.chooseAudioInputDevice(\n this.audioInput?.deviceId || 'default',\n );\n\n this.meetingSession.audioVideo.start();\n } catch (e: unknown) {\n this.emit('error', e as Error);\n this.logger.error((e as Error).message);\n success(false);\n }\n });\n }\n\n /**\n * 注册rtc事件\n */\n _registerRtcEvent = () => {\n const presentAttendeeId =\n this.meetingSession?.configuration?.credentials?.attendeeId || '';\n if (presentAttendeeId) {\n // 处理音量变化\n const roster = new Map<\n string,\n {\n userId: string;\n volume: number | null;\n muted: boolean | null;\n signalStrength: number | null;\n }\n >();\n\n const getUserVolumes = () => {\n const result: any = [];\n roster.forEach((v, k) => {\n result.push({\n userId: v.userId,\n volume:\n v.muted || v.signalStrength === 0 || !Boolean(v.volume)\n ? 0\n : v.volume,\n });\n });\n return result;\n };\n\n this.meetingSession?.audioVideo.realtimeSubscribeToAttendeeIdPresence(\n (presentAttendeeId: any, present: any, externalUserId: any) => {\n if (!present) {\n roster.delete(presentAttendeeId);\n this.emit('userVolumes', getUserVolumes());\n return;\n }\n\n this.meetingSession?.audioVideo.realtimeSubscribeToVolumeIndicator(\n presentAttendeeId,\n (attendeeId: any, volume: any, muted: any, signalStrength: any) => {\n const baseAttendeeId = new DefaultModality(attendeeId).base();\n if (baseAttendeeId !== attendeeId) {\n // Optional: Do not include the content attendee (attendee-id#content) in the roster.\n // See the \"Screen and content share\" section for details.\n return;\n }\n\n roster.set(attendeeId, {\n userId: externalUserId || attendeeId,\n volume,\n muted,\n signalStrength,\n });\n this.emit('userVolumes', getUserVolumes());\n },\n );\n },\n );\n\n // 弱网\n this.meetingSession?.audioVideo.realtimeSubscribeToVolumeIndicator(\n presentAttendeeId,\n (attendeeId: any, volume: any, muted: any, signalStrength: any) => {\n const baseAttendeeId = new DefaultModality(attendeeId).base();\n if (baseAttendeeId === attendeeId) {\n if (signalStrength !== null && signalStrength !== 1) {\n this.emit('weakNetwork');\n }\n }\n },\n );\n\n // 报错\n\n this.meetingSession?.audioVideo.realtimeSubscribeToFatalError(\n (error: any) => this.emit('error', error),\n );\n }\n };\n\n quit(): Promise<boolean> {\n return new Promise((success, fail) => {\n this.joined = false;\n const observer: AudioVideoObserver = {\n audioVideoDidStop: (sessionStatus: any) => {\n const sessionStatusCode = sessionStatus.statusCode();\n if (sessionStatusCode === MeetingSessionStatusCode.Left) {\n /*\n - You called meetingSession.audioVideo.stop().\n - When closing a browser window or page, Chime SDK attempts to leave the session.\n */\n this.logger.info('You left the session');\n success(true);\n } else {\n this.logger.info(\n `Stopped with a session status code: ${sessionStatusCode}`,\n );\n success(true);\n }\n },\n };\n this.meetingSession?.audioVideo.addObserver(observer);\n this.meetingSession?.audioVideo.stop();\n });\n }\n\n async detectMicro(): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const rule = { audio: true, video: false };\n try {\n navigator.mediaDevices\n .getUserMedia(rule)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n } catch (e: unknown) {\n this.logger.error((e as Error).message);\n resolve(false);\n }\n });\n }\n\n async toggleMicro(flag?: boolean): Promise<boolean> {\n if (flag) {\n this.meetingSession?.audioVideo.realtimeUnmuteLocalAudio();\n } else {\n this.meetingSession?.audioVideo.realtimeMuteLocalAudio();\n }\n const muted = this.meetingSession?.audioVideo.realtimeIsLocalAudioMuted();\n if (muted !== undefined) {\n return flag !== muted;\n } else {\n return false;\n }\n }\n\n shock(): void {\n throw new Error('Method not implemented.');\n }\n}\n","/**\n * rtc加入返回值code枚举\n */\nexport enum RTCJoinedInfoCodeEnum {\n /**\n * 成功\n */\n Success = 0,\n /**\n * 失败\n */\n Failure = 1,\n /**\n * 重复加入\n */\n ReJoin = 2,\n /**\n * 无麦克风权限\n */\n NoMicroPermission = 3,\n}\n\n/**\n * 进入rtc房间的回调信息\n */\nexport interface RTCJoinedInfo {\n code: RTCJoinedInfoCodeEnum;\n message: string;\n userId?: string;\n roomId?: number;\n errInfo?: {\n errCode: number;\n errMsg: string;\n };\n}\n","import { UserVolume } from '../typings/live/UserVolume';\nimport {\n RTCJoinedInfo,\n RTCJoinedInfoCodeEnum,\n} from '../typings/rtc/joinedInfo';\nimport { RTCType } from '../typings/rtc/type';\nimport { VRWebViewRTCOptions } from '../typings/rtc/VRWebViewRTCOptions';\nimport { CoreRTC } from './CoreRTC';\n\nexport class VRWebViewRTC extends CoreRTC {\n type: RTCType = RTCType.RealseeVRWebViewRTC\n joined = false;\n micro = false;\n voiceId: string = '';\n\n private options: VRWebViewRTCOptions;\n\n get jsBridge() {\n return this.options.jsBridge;\n }\n\n constructor({ jsBridge, getVoiceSign }: VRWebViewRTCOptions) {\n super();\n this.options = { jsBridge, getVoiceSign };\n\n this.jsBridge.callAndListen(\n 'live/userVolumes',\n (userVolumes: UserVolume[]) => {\n this.emit('userVolumes', userVolumes);\n },\n );\n this.jsBridge.callAndListen('live/weakNetwork', (weakNetwork: boolean) => {\n if (weakNetwork) this.emit('weakNetwork');\n });\n }\n\n async join(options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }) {\n this.emit('joinWillStart');\n const { sdkAppId, userId, userSig } = await this.options.getVoiceSign(\n options,\n );\n\n this.type = options.type;\n const [res, error] = await this.jsBridge.callAndBackfeed<RTCJoinedInfo>(\n `live/join?sdkAppID=${sdkAppId}&userID=${userId}&roomID=${Number(\n options.voiceId,\n )}&userSig=${userSig}`,\n );\n\n if (!res) {\n this.emit('error', error ? error : new Error('加入房间失败:未知异常。'));\n this.joined = false;\n } else {\n if (res.code === RTCJoinedInfoCodeEnum.Success) {\n this.emit('joined');\n this.joined = true;\n } else {\n this.emit('error', res);\n this.joined = false;\n }\n }\n return this.joined;\n }\n\n async quit() {\n const [res, error] = await this.jsBridge.callAndBackfeed<boolean>(\n 'live/quit',\n );\n if (res === null) {\n this.emit('error', error ? error : new Error('退出房间失败:未知异常。'));\n }\n this.joined = false;\n return !!res;\n }\n\n async detectMicro() {\n const [res, error] = await this.jsBridge.detectMicro();\n if (res === null) {\n this.emit('error', error ? error : new Error('麦克风监测异常!'));\n return false;\n }\n return res;\n }\n\n async toggleMicro(flag?: boolean) {\n const [res, error] = await this.jsBridge.callAndBackfeed<boolean>(\n `live/toggleMicro?flag=${!!flag ? 1 : 0}`,\n );\n if (res === null) {\n this.emit('error', error ? error : new Error('麦克风监测异常!'));\n return false;\n }\n this.micro = res;\n return res;\n }\n\n shock() {\n this.jsBridge.shock(1);\n }\n}\n","/**\n * WebSocket 通信指令\n * - 下行:服务端推送数据\n * - 上行:客户端上报数据\n */\nexport enum Command {\n /* 当前用户信息:下行 */\n SelfUserInfo = \"SELF_USER_INFO\",\n /* 房间信息:下行 */\n RoomInfo = \"ROOM_INFO\",\n /* RTC信息:下行 */\n RTCInfo = \"RTC_INFO\",\n /* 用户列表:下行 */\n UserList = \"USER_LIST\",\n /* 内置消息:下行、上行 */\n BuiltinMsg = \"BUILTIN_MSG\",\n /* 自定义广播事件消息:下行、上行 */\n CustomEvent = \"CUSTOM_EVENT\",\n /* 帧数据同步:下行、上行 */\n KeyframeSync = \"KEYFRAME_SYNC\",\n /* 被踢出房间:下行 */\n UserKickOut = \"USER_KICK_OUT\",\n}\n\n/**\n * 向服务端请求数据时的数据格式。\n */\nexport type ReqLiveMsg = {\n /**\n * 请求指令。\n */\n command: Command;\n /**\n * 前端请求时生成的uuid()。\n */\n front_request_id: string;\n /**\n * 数据内容\n */\n data: {\n /**\n * 如果此数据仅发送给某些用户,请提供这些用户的ucid。\n */\n to_user_ids?: string[];\n [key: string]: any;\n };\n};\n\n/**\n * 内置事件类型。\n */\nexport enum BuiltinEventType {\n /**\n * 变更用户状态。\n */\n UserChange = \"user_change\",\n /**\n * 变更房间状态。\n */\n RoomChange = \"room_change\",\n}\n\n/**\n * 内置事件行为类型。\n */\nexport enum BuiltinActionType {\n /**\n * 修改麦克风状态。\n */\n UserMicroStatus = \"change_micro_status\",\n /**\n * 同步当前用户状态:客户端麦克风状态已经修改成功,通知服务端\n */\n UserMicroStatusSync = \"sync_micro_status\",\n /**\n * 调整某些用户的权限。\n */\n UserPermission = \"change_permission\",\n /**\n * 用户状态发生改变。\n */\n UserStatus = \"change_status\",\n /**\n * 更新用户信息。\n */\n UserInfo = \"change_info\",\n /**\n * 关闭房间。\n */\n RoomClose = \"close\",\n}\n\n/**\n * 内置事件数据结构体。\n */\nexport type BuiltinMsg = {\n event_type: BuiltinEventType;\n action: BuiltinActionType;\n to_user_ids: string[];\n data: {\n extension?: Record<string, any>;\n [key: string]: any;\n };\n};\n\n/**\n * 麦克风状态。\n */\nexport enum MicroStatus {\n OPEN = \"OPEN\",\n CLOSE = \"CLOSE\",\n}\n/**\n * 响应的信息结构体。\n */\nexport type LiveMsg = {\n code: string;\n message: string;\n command: Command;\n roomCode: string;\n appId: string;\n requestId: string;\n frontRequestId: string;\n triggerUserId: string;\n data: Record<string, any> | Record<string, any>[];\n};\n\n/**\n * 解析下后端数据格式。\n * @param jsonTxt - JSON序列化后的文本。\n * @returns false 标识解析失败;解析成功返回 {@link LiveMsg} 实例。\n */\nexport function parseLiveMsg(jsonTxt: string): LiveMsg | boolean {\n try {\n const msg = JSON.parse(jsonTxt);\n const resMsg: Record<string, any> = {\n code: msg.code,\n message: msg.message,\n command: msg.command,\n roomCode: msg.room_code,\n appID: msg.app_id,\n requestId: msg.request_id,\n frontRequestId: msg.front_request_id,\n triggerUserID: msg.trigger_user_id,\n data: msg.data || {},\n };\n\n const undefinedKeys = Object.keys(resMsg).filter(\n (key) => resMsg[key] === undefined\n );\n if (undefinedKeys.length > 0) {\n console.warn(`推送数据格式异常:${undefinedKeys.join(\" \")} 值不存在!`);\n }\n return resMsg as LiveMsg;\n } catch (error) {\n // notcare? 过滤掉所有不符合规范的数据\n return false;\n }\n}\n","/**\n * 用户当前状态枚举。\n */\nexport enum UserStatus {\n /**\n * 正常\n */\n Normal = 0,\n /**\n * 被移除\n */\n Removed = 1,\n /**\n * 被替换\n */\n Replaced = 2,\n}\n\nexport enum MemUserStatus {\n WAIT_ENTER = 'WAIT_ENTER',\n ONLINE = 'ONLINE',\n LEAVE = 'LEAVE',\n KICK_OUT = 'KICK_OUT',\n BE_REPLACE = 'BE_REPLACE',\n EXCEPTION = 'EXCEPTION',\n}\n\n/**\n * 用户信息扩展字段:比如提供用户画像相关的数据。\n */\nexport type UserInfoExt = {\n /**\n * 用户昵称。\n */\n nickname?: string\n /**\n * 用户头像。\n */\n avatar?: string\n /**\n * 其他用户相关的字段,比如用户职称、住址、联系方式等信息。\n */\n [key: string]: any\n}\n\n/**\n * 带看会话房间用户的信息格式。\n */\nexport type UserInfo = {\n /**\n * 用户唯一标识ID。\n */\n id: string\n /**\n * 用户当前的状态。\n */\n status?: UserStatus\n /**\n * 内存中的用户状态。\n */\n mem_user_status?: MemUserStatus\n /**\n * 用户当前是否开启麦克风。 \n */\n micro_status: boolean\n /**\n * 用户角色定义。(前端不关注此字段)。\n */\n user_role?: number | string\n /**\n * 用户当前是否在线。\n */\n current_ws_online?: boolean\n /**\n * 用户曾经是否在线过,即进入房间后又由于某种原因离开后重新进入。\n */\n once_ws_online?: boolean\n /**\n * RTC 环境是否就绪,即当前语音是否联通。\n */\n rtc: boolean\n /**\n * 当前用户的权限配置。(UI层面理解)。\n */\n permission?: Record<string, boolean>\n /**\n * 用户信息扩展字段。\n */\n extension?: UserInfoExt\n}\n","/**\n * WebSocket 连接状态枚举\n */\nexport enum WebSocketState {\n /**\n * 尚未初始化\n */\n NOTINITIALIZED = -1,\n\n /**\n * 正在链接中\n */\n CONNECTING = 0,\n\n /**\n * 已经链接并且可以通讯\n */\n OPEN = 1,\n\n /**\n * 连接正在关闭\n */\n CLOSING = 2,\n\n /**\n * 连接已关闭或者没有链接成功\n */\n CLOSED = 3,\n}\n\nexport type WebSocketError = {\n type: WebSocketErrorType,\n closeError?: WebSocketCloseError,\n target?: Event | CloseEvent\n error?: any\n}\n\nexport enum WebSocketErrorType {\n Error = 'Error',\n Close = 'Close',\n MicroAuth = 'MicroAuth',\n DuplicateConnect = 'DuplicateConnect',\n IllegalURL = 'IllegalURL',\n Unknown = 'Unknown',\n IllegalArgs = 'IllegalArgs'\n}\n\n/**\n * WebSocket 异常关闭枚举:https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent。\n */\nexport enum WebSocketCloseError {\n /**\n * 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开。\n */\n Err_1001 = 'CLOSE_GOING_AWAY',\n\n /**\n * 由于协议错误而中断连接。\n */\n Err_1002 = 'CLOSE_PROTOCOL_ERROR',\n\n /**\n * 由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据)。\n */\n Err_1003 = 'CLOSE_UNSUPPORTED',\n\n /**\n * 安全因素或WebSocket连接次数达到上限。\n */\n Err_1006 = 'CLOSE_ABNORMAL',\n\n /**\n * 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据)。\n */\n Err_1007 = 'Unsupported Data',\n /**\n * 由于收到不符合约定的数据而断开连接。\n */\n Err_1008 = 'Policy Violation',\n /**\n * 由于收到过大的数据帧而断开连接。\n */\n Err_1009 = 'CLOSE_TOO_LARGE',\n /**\n * 未知错误。\n */\n Err_unknown = 'unknown'\n\n}\n\n\nexport function parseWSClsErr(code: number) {\n switch (code) {\n case 1001: {\n return WebSocketCloseError.Err_1001\n }\n case 1002: {\n return WebSocketCloseError.Err_1002\n }\n case 1003: {\n return WebSocketCloseError.Err_1003\n }\n case 1006: {\n return WebSocketCloseError.Err_1006\n }\n case 1007: {\n return WebSocketCloseError.Err_1007\n }\n case 1008: {\n return WebSocketCloseError.Err_1008\n }\n case 1009: {\n return WebSocketCloseError.Err_1009\n }\n default:\n break\n }\n\n return WebSocketCloseError.Err_unknown\n}\n","export function appendUri(uri: string, query: Record<string, string | number> = {}) {\n const hasQuery = uri.indexOf('?') !== -1\n const newQuery = Object.keys(query).reduce(\n (accu, curr, idx) =>\n `${accu}${(idx === 0 && !hasQuery) ? '?' : '&'}${curr}=${query[curr]}`,\n '')\n\n return uri + newQuery\n}\n","const userAgent = globalThis.navigator.userAgent\n\nexport const isAndroid = /android/gi.test(userAgent)\n\nexport const isIOS = /iPhone|iPad\\s+OS/gi.test(userAgent)\n\nexport const isWxMiniProgram = /MicroMessenger/gi.test(userAgent) && /miniProgram/gi.test(userAgent)\n\nexport const isRealseeVRWebview = /realsee/gi.test(userAgent)\n","/**\n * 判断是否是真实的对象类型\n * @param value\n * @returns\n */\nfunction isTrulyObject(value: any): boolean {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * 判断基础类型是否相等\n * @param value\n * @param other\n * @returns\n */\nfunction baseIsEqual(value: any, other: any): boolean {\n if (value === other) return true;\n if (typeof value !== typeof other) return false;\n if (Number.isNaN(value) && Number.isNaN(other)) return true;\n return false;\n}\n\n/**\n * 对象浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction objEqualShallow(value: any, other: any): boolean {\n const valueProps = Object.getOwnPropertyNames(value);\n const otherProps = Object.getOwnPropertyNames(other);\n if (valueProps.length !== otherProps.length) return false;\n\n for (let i = 0, len = valueProps.length; i < len; i++) {\n const propName = valueProps[i];\n if (!baseIsEqual(value[propName], other[propName])) return false;\n }\n\n return true;\n}\n\n/**\n * 数组浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction arrayEqualShallow(value: any, other: any): boolean {\n if (value.length !== other.length) return false;\n for (let i = 0, len = value.length; i < len; i++) {\n if (!baseIsEqual(value[i], other[i])) return false;\n }\n return true;\n}\n\n/**\n * 变量浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction isShallowEqual(value: any, other: any): boolean {\n if (baseIsEqual(value, other)) return true;\n if (isTrulyObject(value) && isTrulyObject(other))\n return objEqualShallow(value, other);\n if (Array.isArray(value) && Array.isArray(other))\n return arrayEqualShallow(value, other);\n return false;\n}\n\n/**\n * 对象深比较\n * @param value\n * @param other\n * @returns\n */\nfunction isDeepEqual(value: any, other: any): boolean {\n if (baseIsEqual(value, other)) return true;\n if (isTrulyObject(value) && isTrulyObject(other))\n return objEqualDeep(value, other);\n if (Array.isArray(value) && Array.isArray(other))\n return arrayEqualDeep(value, other);\n return false;\n}\n\n/**\n * 数组深比较\n * @param value\n * @param other\n * @returns\n */\nfunction arrayEqualDeep(value: any, other: any): boolean {\n if (value.length !== other.length) return false;\n for (let i = 0, len = value.length; i < len; i++) {\n if (!isDeepEqual(value[i], other[i])) return false;\n }\n return true;\n}\n\n/**\n * 对象深比较\n * @param value\n * @param other\n * @returns\n */\nfunction objEqualDeep(value: any, other: any): boolean {\n const valueProps = Object.getOwnPropertyNames(value);\n const otherProps = Object.getOwnPropertyNames(other);\n if (valueProps.length !== otherProps.length) return false;\n\n for (let i = 0, len = valueProps.length; i < len; i++) {\n const propName = valueProps[i];\n if (!isDeepEqual(value[propName], other[propName])) return false;\n }\n\n return true;\n}\n\n/**\n * 对象比较。\n * @param value 第一个比较的值。\n * @param other 第二个比较的值。\n * @param options 可选参数,可选项:`deep` 是否深比较。\n * @returns {boolean} 是否相等。\n */\nexport function equal(value: any, other: any, opt = { deep: false }): boolean {\n if (!opt.deep) return isShallowEqual(value, other);\n return isDeepEqual(value, other);\n}\n","import { KeyframeTypes } from '../typings/live/EventType';\nimport { Live } from '../typings/live/Live';\nimport {\n LiveMsg,\n Command,\n BuiltinEventType,\n BuiltinActionType,\n MicroStatus,\n BuiltinMsg,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { RoomInfo } from '../typings/live/RoomInfo';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport { WebSocketState } from '../typings/live/WebSocket';\nimport { RTCType } from '../typings/rtc/type';\nimport { equal } from '../utils/equal';\n\nexport class LiveController<Snapshot extends Record<string, any>> {\n readyState = WebSocketState.NOTINITIALIZED;\n options: LiveOptions;\n healthCheckId?: number;\n canSync = true;\n webSocket?: WebSocket;\n connecting = false;\n selfUserInfo?: UserInfo;\n userList?: UserInfo[];\n roomInfo?: RoomInfo;\n keyframes: Partial<Snapshot> = {};\n\n constructor(options: LiveOptions) {\n this.options = Object.assign(\n { autoConnect: true, healthCheck: 3000 },\n options,\n );\n }\n /**\n * 检测 WebSocket.readyState 状态\n */\n checkReadyState = (live: Live<Snapshot>) => {\n do {\n if (!this.webSocket) {\n if (this.readyState !== WebSocketState.NOTINITIALIZED) {\n this.readyState = WebSocketState.NOTINITIALIZED;\n live.emit('ws.readyStateUpdate', this.readyState);\n }\n break;\n }\n const readyState = this.webSocket.readyState;\n if (readyState !== this.readyState) {\n this.readyState = readyState;\n live.emit('ws.readyStateUpdate', this.readyState);\n }\n } while (false);\n\n return this.readyState;\n };\n\n onEvtOpnListener?: (evt: Event) => void;\n onEvtMsgListener?: (evt: MessageEvent) => void;\n onEvtErrListener?: (evt: Event) => void;\n onEvtCLEListener?: (evt: CloseEvent) => void;\n\n dispose = () => {\n this.disposeWebSocket();\n this.connecting = false;\n if (this.healthCheckId) {\n clearInterval(this.healthCheckId);\n this.healthCheckId = undefined;\n }\n };\n\n /**\n * 销毁WebSocket相关依赖。\n */\n disposeWebSocket = () => {\n if (!this.webSocket) return;\n if (this.onEvtOpnListener) {\n this.webSocket!.removeEventListener('open', this.onEvtOpnListener);\n this.onEvtOpnListener = undefined;\n }\n if (this.onEvtMsgListener) {\n this.webSocket!.removeEventListener('message', this.onEvtMsgListener);\n this.onEvtMsgListener = undefined;\n }\n if (this.onEvtErrListener) {\n this.webSocket!.removeEventListener('error', this.onEvtErrListener);\n this.onEvtErrListener = undefined;\n }\n\n if (this.onEvtCLEListener) {\n this.webSocket!.removeEventListener('close', this.onEvtCLEListener);\n this.onEvtCLEListener = undefined;\n }\n this.webSocket!.close();\n this.webSocket = undefined;\n };\n\n /**\n * 解析数据\n * @param liveMsg\n * @param live\n */\n handleMessage(liveMsg: LiveMsg, live: Live<Snapshot>) {\n const { command, data, frontRequestId, code, message } = liveMsg;\n if (code === 'SUCCESS') {\n switch (command) {\n /**\n * 自己的状态变化\n */\n case Command.SelfUserInfo: {\n const selfInfo = data as UserInfo;\n if (equal(this.selfUserInfo, selfInfo, { deep: true })) return;\n this.selfUserInfo = selfInfo;\n live.emit('selfInfoUpdate', this.selfUserInfo, frontRequestId);\n break;\n }\n\n /**\n * 房间信息变化\n */\n case Command.RoomInfo: {\n const roomInfo = data as RoomInfo;\n this.roomInfo = Object.assign({}, roomInfo);\n live.emit(\n 'readyKeyframeSync',\n (roomInfo.last_frame || {}) as Partial<Snapshot>,\n );\n break;\n }\n\n /**\n * 语音信息变化\n */\n case Command.RTCInfo: {\n const { voice_id: voiceId, type } = data as {\n voice_id: string;\n type: RTCType;\n };\n /* 如果已经进入语音房间,则不重复进入 --> \"RTCInfo\" 指令可能会下发多次 */\n if (live.$RTC.joined) {\n break;\n }\n live.$RTC.join({\n voiceId,\n userId: this.selfUserInfo?.id || '',\n roomId: this.roomInfo?.info.room_code,\n type,\n });\n // 加入房间后 麦克风默认就开启了:需要发个指令。\n live.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: MicroStatus.OPEN,\n },\n );\n break;\n }\n\n /**\n * 房间用户列表变化\n */\n case Command.UserList: {\n const userList = data as UserInfo[];\n this.userList = userList;\n live.emit('userListUpdate', this.userList, frontRequestId);\n break;\n }\n\n /**\n * 自定义事件广播\n */\n case Command.CustomEvent: {\n const evtMsg = data as Record<string, any>;\n live.emit('broadcast', evtMsg, frontRequestId);\n break;\n }\n\n /**\n * 帧数据同步\n */\n case Command.KeyframeSync: {\n const remoteKeyframes = data as Partial<Snapshot>;\n // 此处做一层 diff,仅跟本地数据不一致的情况下才广播数据。\n const keyframes: Partial<Snapshot> = Object.keys(\n remoteKeyframes,\n ).reduce((accu: Partial<Snapshot>, curr: keyof Snapshot) => {\n if (\n equal(remoteKeyframes[curr], this.keyframes[curr], { deep: true })\n ) {\n return accu;\n }\n const params = [\n remoteKeyframes[curr],\n this.keyframes[curr],\n frontRequestId,\n ];\n const evtName = curr as keyof KeyframeTypes<Snapshot>;\n live.keyframes.emit(\n evtName,\n ...(params as Parameters<\n KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]\n >),\n );\n this.keyframes[curr] = remoteKeyframes[curr];\n accu[curr] = remoteKeyframes[curr];\n return accu;\n }, {});\n\n live.emit('keyframes', keyframes, frontRequestId);\n break;\n }\n\n /**\n * 内置消息\n */\n case Command.BuiltinMsg: {\n const builtinMsg = data as BuiltinMsg;\n live.emit('builtinEvent', builtinMsg);\n\n if (builtinMsg.event_type === BuiltinEventType.UserChange) {\n live.emit('userChange', builtinMsg);\n }\n\n if (builtinMsg.event_type === BuiltinEventType.RoomChange) {\n live.emit('roomChange', builtinMsg);\n }\n /**\n * 下发指令自己操作麦克风\n */\n if (\n builtinMsg.event_type === BuiltinEventType.UserChange &&\n builtinMsg.action === BuiltinActionType.UserMicroStatus\n ) {\n live.toggleMicro(builtinMsg.data.status === MicroStatus.OPEN);\n }\n\n /**\n * 如果下发指令退出房间,则 关闭麦克风 及 销毁 WebSocket\n */\n if (\n builtinMsg.event_type === BuiltinEventType.RoomChange &&\n builtinMsg.action === BuiltinActionType.RoomClose\n ) {\n this.options.rtc?.quit();\n this.disposeWebSocket();\n }\n break;\n }\n /**\n * 被踢出房间\n */\n case Command.UserKickOut: {\n live.emit('kickOut');\n break;\n }\n /**\n * 其它未知广播\n */\n default: {\n console.warn('unknown command: ', command);\n }\n }\n } else {\n live.emit('error', liveMsg);\n }\n }\n /**\n * 发送数据\n * @param data\n */\n sendMessage(data: Record<string, any>) {\n if (!this.webSocket)\n return console.warn('WebSocket has not yet been initialized!');\n if (!data) return console.warn('WebSocket messages is empty!');\n this.webSocket.send(JSON.stringify(data));\n }\n}\n","import JSBridge, { JSBridgeCore, JSBridgeProtocol } from '@realsee/jsbridge-x';\nimport { LogLevel } from 'amazon-chime-sdk-js';\nimport {\n BrowserRTC,\n BrowserRTC4Chime,\n RTCProtocol,\n VRWebViewRTC,\n} from '../rtc';\nimport { EventType, KeyframeTypes } from '../typings/live/EventType';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { Live } from '../typings/live/Live';\nimport {\n Command,\n ReqLiveMsg,\n BuiltinEventType,\n BuiltinActionType,\n MicroStatus,\n parseLiveMsg,\n LiveMsg,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport {\n WebSocketState,\n WebSocketErrorType,\n parseWSClsErr,\n WebSocketError,\n} from '../typings/live/WebSocket';\nimport { BuiltInRTCType, RTCType } from '../typings/rtc/type';\nimport { appendUri } from '../utils/appendUri';\nimport {\n isAndroid,\n isIOS,\n isRealseeVRWebview,\n isWxMiniProgram,\n} from '../utils/clientDetector';\nimport { Subscribe } from '../utils/subscribe';\nimport { uuid } from '../utils/uuid';\nimport { LiveController } from './controller';\n\nconst unimplementedGetVoiceSign: GetVoiceSign = (params) =>\n Promise.reject('unimplemented method GetVoiceSign');\n\n/**\n * 创建 `live` 实例。\n */\nexport function createLive<Snapshot>(options: LiveOptions): Live<Snapshot> {\n const liveController = new LiveController<Snapshot>(options);\n const createLiveMsg = (\n command: Command,\n data: Record<string, any> = {},\n toUserIds?: string | string[],\n ) => {\n toUserIds = toUserIds\n ? Array.isArray(toUserIds)\n ? toUserIds\n : [toUserIds]\n : [];\n if (toUserIds) data['to_user_ids'] = toUserIds;\n return { command, front_request_id: uuid(), data } as ReqLiveMsg;\n };\n class LiveTpl\n extends Subscribe<EventType<Snapshot>>\n implements Live<Snapshot>\n {\n get options(): LiveOptions {\n return Object.freeze(Object.assign({}, liveController.options));\n }\n\n get readyState() {\n liveController.checkReadyState(this);\n return liveController.readyState;\n }\n\n get url() {\n return liveController.webSocket?.url || '';\n }\n\n get selfInfo() {\n return liveController.selfUserInfo;\n }\n\n get userList() {\n return liveController.userList || [];\n }\n\n get snapshot(): Partial<Snapshot> {\n return liveController.keyframes || {};\n }\n\n get $RTC(): RTCProtocol {\n return liveController.options.rtc!;\n }\n\n get jsBridge(): JSBridgeProtocol {\n return liveController.options.jsBridge!;\n }\n\n keyframes = new Subscribe<KeyframeTypes<Snapshot>>();\n\n constructor() {\n super();\n\n const jsBridge = (() => {\n if (options.jsBridge) return options.jsBridge;\n if (options.useBuiltInJsBridge) return new JSBridge();\n return undefined;\n })();\n\n liveController.options.jsBridge = jsBridge;\n\n // 没有传rtc实例时\n if (!options.rtc) {\n // 取指定的内部rtc类型\n if (options.rtcType) {\n if (!options.getVoiceSign) {\n throw new Error(\n 'GetVoiceSign method must be passed when using built-in RTC instances',\n );\n }\n\n const getVoiceSign =\n options.getVoiceSign ?? unimplementedGetVoiceSign;\n\n switch (options.rtcType) {\n case RTCType.RealseeVRWebViewRTC: {\n // 内置的 VRWebViewRTC\n if (!jsBridge) {\n throw new Error(\n 'JsBridge instance must be passed when using built-in VRWebViewRTC instances',\n );\n }\n liveController.options.rtc = new VRWebViewRTC({\n jsBridge,\n getVoiceSign,\n });\n break;\n }\n case RTCType.RealseeBrowserChimeRTC: {\n // 内置的 RealseeBrowserChimeRTC\n liveController.options.rtc = new BrowserRTC4Chime({\n getVoiceSign,\n logLevel: options.__debug__ ? LogLevel.DEBUG : LogLevel.ERROR,\n });\n break;\n }\n case RTCType.RealseeBrowserRTC: {\n // 内置的 RealseeBrowserRTC\n liveController.options.rtc = new BrowserRTC({\n getVoiceSign,\n });\n break;\n }\n default: {\n throw new Error('unknown built-in RTC type');\n }\n }\n }\n\n // 都不满足时取内置\n\n if (options.useBuiltInRTC) {\n if (!options.getVoiceSign) {\n throw new Error(\n 'GetVoiceSign method must be passed when using built-in RTC instances',\n );\n }\n const getVoiceSign =\n options.getVoiceSign ?? unimplementedGetVoiceSign;\n\n if (!jsBridge) {\n throw new Error(\n 'jsBridge instance must be passed when using built-in RTC instances',\n );\n }\n // vrwebview 默认\n if ((isRealseeVRWebview && (isAndroid || isIOS)) || isWxMiniProgram) {\n liveController.options.rtc = new VRWebViewRTC({\n jsBridge,\n getVoiceSign,\n });\n } else {\n // 其它终端使用\n liveController.options.rtc =\n options.builtInRTCType === BuiltInRTCType.RealseeXChimeRTC\n ? new BrowserRTC4Chime({ getVoiceSign })\n : new BrowserRTC({ getVoiceSign });\n }\n }\n }\n\n if (!liveController.options.rtc) {\n console.warn('unused rtc');\n }\n\n // 默认自动连接\n if (liveController.options.url && liveController.options.getTicket) {\n this.connect();\n }\n\n // 健康检查:WHY --> 在某些WebView特殊场景下 WebSocket.readyState 发生变化时不会出发error\\close等事件;\n // 因此,开启一个定时任务监测 WebSocket.readyState 状态的更新\n const healthCheck = ((healthCheck) => {\n if (!healthCheck) return 0;\n if (healthCheck === true) return 3000;\n\n const duration = Number(healthCheck);\n if (duration > 0) return duration;\n\n return 3000;\n })(liveController.options.healthCheck);\n\n if (healthCheck) {\n liveController.healthCheckId = setInterval(\n () => liveController.checkReadyState(this),\n healthCheck,\n );\n }\n }\n\n async setSelfInfo(userInfo: Partial<UserInfo>) {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n\n try {\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserInfo,\n userInfo,\n );\n } catch (error) {\n return error as Error;\n }\n }\n\n getFramesByKey<Key extends keyof Snapshot>(\n key: Key,\n ): Partial<Snapshot>[Key] | undefined {\n return liveController.keyframes[key];\n }\n\n sendKeyframe<Key extends keyof Snapshot>(\n key: Key,\n frame: Snapshot[Key],\n ): boolean | Error {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n liveController.keyframes[key] = frame;\n\n const liveMsg = createLiveMsg(Command.KeyframeSync, this.snapshot);\n liveController.sendMessage(liveMsg);\n return true;\n }\n\n broadcast<T1, T2>(\n data: T1,\n toUserIds: string | string[],\n timeout: number,\n ): Promise<T2> | Error {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n\n return new Promise((resolve, reject) => {\n const customEvent = createLiveMsg(Command.CustomEvent, data, toUserIds);\n const front_request_id = customEvent.front_request_id;\n\n liveController.sendMessage(customEvent);\n\n const timeoutId = timeout\n ? setTimeout(() => {\n reject(new Error('RESPONSE TIMEOUT'));\n this.off('broadcast', broadcast);\n }, timeout)\n : undefined;\n\n const broadcast = (\n data: Record<string, any>,\n frontRequestId: string,\n ) => {\n if (frontRequestId !== front_request_id) return;\n this.off('broadcast', broadcast);\n resolve(data as T2);\n if (timeoutId) clearInterval(timeoutId);\n };\n this.on('broadcast', broadcast);\n });\n }\n\n async updateStatus(\n evtType: BuiltinEventType,\n atnType: BuiltinActionType,\n status: Record<string, any>,\n toUserIds?: string | string[],\n ) {\n // TODO 统一规则,不能联合类型\n if (this.readyState !== WebSocketState.OPEN) {\n return false;\n }\n const data = Object.assign(\n { event_type: evtType, action: atnType },\n { data: status },\n );\n const liveMsg = createLiveMsg(Command.BuiltinMsg, data, toUserIds);\n liveController.sendMessage(liveMsg);\n return true;\n }\n\n // 仅用于用户自己的麦克风控制\n async toggleMicro(microStatus: boolean) {\n if (!this.selfInfo?.permission?.control_own_micro) return false;\n\n await this.$RTC.toggleMicro(microStatus);\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: microStatus ? MicroStatus.OPEN : MicroStatus.CLOSE,\n },\n [],\n );\n }\n\n async forbidMicro(microStatus: MicroStatus, toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserMicro &&\n !liveController.options.canForbidUserMicro(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.control_other_micro) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: microStatus,\n },\n toUserIds,\n );\n }\n\n /**\n * @deprecated 暂不可用\n */\n async forbidSync(sync: boolean, toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserSync &&\n !liveController.options.canForbidUserSync(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.control_other_sync) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserPermission,\n { sync_frame: sync },\n toUserIds,\n );\n }\n\n async kick(toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserKick &&\n !liveController.options.canForbidUserKick(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.change_other_status) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserStatus,\n {\n status: 'KICK_OUT',\n },\n toUserIds,\n );\n }\n\n async exit() {\n /** 退出强制关闭语音(?) */\n await this.$RTC.quit();\n return await this.updateStatus(\n BuiltinEventType.RoomChange,\n BuiltinActionType.RoomClose,\n {},\n );\n }\n\n async connect(\n options: {\n url?: string;\n force?: boolean;\n getTicket?: () => Promise<string>;\n } = {},\n ) {\n // 连接 WebSocket 前验证麦克风权限\n const microAuth = await this.$RTC.detectMicro();\n if (!microAuth) {\n const error = new Error('系统监测麦克风未授权~');\n this.emit('ws.error', { type: WebSocketErrorType.MicroAuth, error });\n return error;\n }\n\n // WebSocket 正在连接中,规避重复连接\n if (liveController.connecting) {\n const error = new Error('WebSocket 正在连接中,请勿重复连接 ...');\n this.emit('ws.error', {\n type: WebSocketErrorType.DuplicateConnect,\n error,\n });\n return error;\n }\n\n // 非强制连接场景下,如果已经完成 WebSocket 连接则不执行后续逻辑\n const { force } = options;\n\n if (!force) {\n if (\n this.readyState === WebSocketState.CONNECTING ||\n this.readyState === WebSocketState.OPEN\n ) {\n return true;\n }\n }\n\n // WebSocket URL 逻辑\n if (options.url) {\n liveController.options.url = options.url;\n }\n\n if (options.getTicket) {\n liveController.options.getTicket = options.getTicket;\n }\n\n if (\n !liveController.options.url ||\n !liveController.options.url.startsWith('ws')\n ) {\n const error = new Error(\n `WebSocket URL 未配置或格式不合法:\"${liveController.options.url}\"`,\n );\n this.emit('ws.error', { type: WebSocketErrorType.IllegalURL, error });\n return error;\n }\n\n if (!liveController.options.getTicket) {\n const error = new Error(`getTicket() 未配置!`);\n this.emit('ws.error', { type: WebSocketErrorType.IllegalArgs, error });\n return error;\n }\n\n // 连接锁\n liveController.connecting = true;\n // 连接前销毁之前绑定的事件\n liveController.disposeWebSocket();\n this.emit('ws.beforeConnect');\n\n const url =\n force || options.url || !this.url\n ? appendUri(liveController.options.url!, {\n ticket: await liveController.options.getTicket(),\n force: Number(!!force),\n })\n : this.url;\n\n liveController.webSocket = new WebSocket(url);\n liveController.onEvtOpnListener = () => {\n liveController.checkReadyState(this);\n this.emit('ws.afterConnect');\n };\n\n liveController.onEvtMsgListener = (evt: MessageEvent) => {\n liveController.checkReadyState(this);\n try {\n const liveMsg = parseLiveMsg(evt.data);\n if (liveMsg === false) return;\n liveController.handleMessage(liveMsg as LiveMsg, this);\n } catch (error) {\n // 未知错误\n this.emit('ws.error', {\n type: WebSocketErrorType.Unknown,\n error,\n target: evt,\n });\n }\n };\n\n liveController.onEvtErrListener = (evt: Event) => {\n live.emit('ws.error', { type: WebSocketErrorType.Error, target: evt });\n liveController.checkReadyState(this);\n };\n\n liveController.onEvtCLEListener = (evt: CloseEvent) => {\n liveController.checkReadyState(this);\n const code = Number(evt.code);\n if (code === 1000) return;\n // 异常退出不一定会触发'error'事件,根据 evt.code 一些类型的退出也算是 error 行为\n const errMsg = parseWSClsErr(code);\n live.emit('ws.error', {\n target: evt,\n type: WebSocketErrorType.Close,\n closeError: errMsg,\n });\n };\n\n liveController.webSocket.addEventListener(\n 'open',\n liveController.onEvtOpnListener,\n );\n liveController.webSocket.addEventListener(\n 'message',\n liveController.onEvtMsgListener,\n );\n liveController.webSocket.addEventListener(\n 'error',\n liveController.onEvtErrListener,\n );\n liveController.webSocket.addEventListener(\n 'close',\n liveController.onEvtCLEListener,\n );\n\n return await new Promise<boolean | Error>((resolve, reject) => {\n const success = () => {\n resolve(true);\n liveController.connecting = false;\n this.off('ws.error', fail);\n };\n const fail = (error: WebSocketError) => {\n reject(\n error.error\n ? error.error\n : new Error('WebSocket connection failed!'),\n );\n liveController.connecting = false;\n this.off('ws.afterConnect', success);\n };\n this.once('ws.afterConnect', success);\n this.once('ws.error', fail);\n });\n }\n\n async revoke() {\n return true;\n }\n }\n const live = new LiveTpl();\n\n // 如果是调试环境则将内部状态暴露出来\n if (options.__debug__) {\n Object.assign(live, { __controller__: liveController });\n Object.assign(window, { $live: live });\n }\n\n return live;\n}\n","import React from 'react';\nimport {\n KeyframeTypes,\n LiveEventType,\n WebSocketEventType,\n} from '../typings/live/EventType';\nimport { Live, LiveActionReactCallback } from '../typings/live/Live';\nimport {\n MicroStatus,\n BuiltinEventType,\n BuiltinActionType,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport { WebSocketState } from '../typings/live/WebSocket';\nimport {\n LiveReact,\n LiveProviderPropTypes,\n RTCActionReactCallback,\n} from '../typings/react';\nimport { RTCType, RTCEventType } from '../typings/rtc';\nimport { createLive } from './createLive';\n\n/**\n * 创建 {@link LiveReact} 实例,并提供 `React` 技术栈相关工具链。\n */\nexport function createLiveReact<Snapshot>(\n options: LiveOptions,\n): LiveReact<Snapshot> {\n const LiveContext = React.createContext<Live<Snapshot> | null>(null);\n const live = createLive<Snapshot>(options);\n const jsBridge = live.jsBridge\n \n function LiveProvider(props: LiveProviderPropTypes<Snapshot>) {\n return (\n <LiveContext.Provider value={props.live || live}>\n {props.children}\n </LiveContext.Provider>\n );\n }\n\n function useLiveInstance() {\n const context = React.useContext(LiveContext);\n if (!context) throw new Error('LiveProvider never found.');\n return context;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function unsafe__useLiveInstance() {\n return useLiveInstance();\n }\n\n function useRTCInstance() {\n const live = useLiveInstance();\n return live.$RTC;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function unsafe__useRTCInstance() {\n return useRTCInstance();\n }\n\n function useConnect() {\n const live = useLiveInstance();\n return async (options?: {\n force?: boolean;\n url?: string;\n getTicket?: () => Promise<string>;\n }) => await live.connect(options);\n }\n\n function useCurrentWebSocketUrl() {\n const live = useLiveInstance();\n const [state, setState] = React.useState<string | undefined>(undefined);\n\n React.useEffect(() => {\n const onWSBeforeConnect = () => setState(live.url);\n live.on('ws.beforeConnect', onWSBeforeConnect);\n return () => live.off('ws.beforeConnect', onWSBeforeConnect);\n }, [live]);\n\n return state;\n }\n\n function useKeyframeUpdateCallback<K extends keyof KeyframeTypes<Snapshot>>(\n name: K,\n callback: (\n ...args: Parameters<KeyframeTypes<Snapshot>[K]>\n ) => ReturnType<KeyframeTypes<Snapshot>[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dependencyList: React.DependencyList = [live, name, ...deps];\n const dispose = () => live.keyframes.off(name, callback);\n React.useEffect(() => {\n live.keyframes.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n function useLiveAction() {\n const live = useLiveInstance();\n\n const toggleMicro = React.useCallback(\n (microStatus: boolean) => live.toggleMicro(microStatus),\n [live],\n );\n\n const broadcast = React.useCallback(\n (data: Record<string, any>, toUserIds: string | string[], timeout = 0) =>\n live.broadcast(data, toUserIds, timeout),\n [live],\n );\n\n const exit = React.useCallback(() => live.exit(), [live]);\n\n const kick = React.useCallback(\n (toUserIds: string | string[]) => live.kick(toUserIds),\n [live],\n );\n\n const forbidMicro = React.useCallback(\n (micro: MicroStatus, toUserIds?: string | string[] | undefined) =>\n live.forbidMicro(micro, toUserIds),\n [live],\n );\n\n // const forbidSync = React.useCallback(\n // (sync: boolean, toUserIds?: string | string[] | undefined) =>\n // live.forbidSync(sync, toUserIds),\n // [live],\n // );\n\n const getFramesByKey = React.useCallback(\n (key: keyof Snapshot) => live.getFramesByKey(key),\n [live],\n );\n\n const sendKeyframe = React.useCallback(\n (key: keyof Snapshot, frame: Snapshot[keyof Snapshot]) =>\n live.sendKeyframe(key, frame),\n [live],\n );\n\n const setSelfInfo = React.useCallback(\n (userInfo: Partial<UserInfo>) => live.setSelfInfo(userInfo),\n [live],\n );\n\n const updateStatus = React.useCallback(\n (\n evtType: BuiltinEventType,\n atnType: BuiltinActionType,\n status: Record<string, any>,\n toUserIds?: string | string[],\n ) => live.updateStatus(evtType, atnType, status, toUserIds),\n [live],\n );\n return {\n broadcast,\n exit,\n kick,\n toggleMicro,\n forbidMicro,\n // forbidSync,\n sendKeyframe,\n getFramesByKey,\n setSelfInfo,\n updateStatus,\n } as LiveActionReactCallback<Snapshot>;\n }\n\n function useKeyframe<K extends keyof Snapshot>(key: K) {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<Snapshot[K] | undefined>(\n live.getFramesByKey(key),\n );\n\n React.useEffect(() => {\n const onUpdate = (nextKeyframes: Snapshot[K]) =>\n updateState(nextKeyframes);\n\n const evtName = key as unknown as keyof KeyframeTypes<Snapshot>;\n const callback = onUpdate as unknown as (\n ...args: Parameters<\n KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]\n >\n ) => ReturnType<KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]>;\n live.keyframes.on(evtName, callback);\n return () => live.keyframes.off(evtName, callback);\n }, [live]);\n\n const setState = React.useCallback(\n (frame: Snapshot[K]) => live.sendKeyframe(key, frame),\n [live],\n );\n type CallbackType = [\n frame: Snapshot[K] | undefined,\n setFrame: (frame: Snapshot[K]) => boolean | Error,\n ];\n return [state, setState] as CallbackType;\n }\n\n function useLiveEventCallback<K extends keyof LiveEventType<Snapshot>>(\n name: K,\n callback: (\n ...args: Parameters<LiveEventType<Snapshot>[K]>\n ) => ReturnType<LiveEventType<Snapshot>[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n\n React.useEffect(() => {\n live.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function useReadyState() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<WebSocketState>(\n live.readyState,\n );\n React.useEffect(() => {\n const readyStateUpdate = (readyState: WebSocketState) =>\n updateState(readyState);\n live.on('ws.readyStateUpdate', readyStateUpdate);\n\n return () => live.off('ws.readyStateUpdate', readyStateUpdate);\n }, [live]);\n\n return state;\n }\n\n function useRTCAction() {\n const live = useLiveInstance();\n\n const join = React.useCallback(\n (options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }) => live.$RTC.join(options),\n [live],\n );\n const quit = React.useCallback(() => live.$RTC.quit(), [live]);\n const shock = React.useCallback(() => live.$RTC.shock?.(), [live]);\n const toggleMicro = React.useCallback(\n (flag?: boolean | undefined) => live.$RTC.toggleMicro(flag),\n [live],\n );\n const detectMicro = React.useCallback(\n () => live.$RTC.detectMicro(),\n [live],\n );\n\n return {\n join,\n quit,\n shock,\n toggleMicro,\n detectMicro,\n } as RTCActionReactCallback;\n }\n\n function useRTCEventCallback<K extends keyof RTCEventType>(\n name: K,\n callback: (\n ...args: Parameters<RTCEventType[K]>\n ) => ReturnType<RTCEventType[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.$RTC.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n React.useEffect(() => {\n live.$RTC.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n function useSelfInfo() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<Partial<UserInfo>>(\n live.selfInfo || {},\n );\n\n const selfInfoUpdate = (userInfo: Partial<UserInfo>) =>\n updateState(userInfo);\n\n React.useEffect(() => {\n live.on('selfInfoUpdate', selfInfoUpdate);\n return () => live.off('selfInfoUpdate', selfInfoUpdate);\n }, [live]);\n\n const setState = React.useCallback(\n async (userInfo: Partial<UserInfo>) => {\n return await live.setSelfInfo(userInfo);\n },\n [live],\n );\n\n type CallbackType = [\n Partial<UserInfo>,\n (userInfo: Partial<UserInfo>) => Promise<boolean | Error>,\n ];\n return [state, setState] as CallbackType;\n }\n\n function useSnapshot() {\n const live = useLiveInstance();\n const [state, setState] = React.useState<Partial<Snapshot>>(live.snapshot);\n\n React.useEffect(() => {\n const onKeyframes = (keyframes: Partial<Snapshot>) => setState(keyframes);\n live.on('keyframes', onKeyframes);\n return () => live.off('keyframes', onKeyframes);\n });\n\n return state;\n }\n function useUserList() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<UserInfo[]>(live.userList);\n\n const userListUpdate = (userList: UserInfo[]) => updateState(userList);\n\n React.useEffect(() => {\n live.on('userListUpdate', userListUpdate);\n return () => live.off('userListUpdate', userListUpdate);\n }, [live]);\n\n return state;\n }\n\n /**\n *\n * @param name\n * @param callback\n * @param deps\n * @returns\n * @deprecated\n */\n function useWebSocketEventCallback<K extends keyof WebSocketEventType>(\n name: K,\n callback: (\n ...args: Parameters<WebSocketEventType[K]>\n ) => ReturnType<WebSocketEventType[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n\n React.useEffect(() => {\n live.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n return {\n live,\n jsBridge,\n LiveProvider,\n unsafe__useLiveInstance,\n unsafe__useRTCInstance,\n useCurrentWebSocketUrl,\n useConnect,\n useKeyframe,\n useKeyframeUpdateCallback,\n useLiveAction,\n useLiveEventCallback,\n useReadyState,\n useRTCAction,\n useRTCEventCallback,\n useSelfInfo,\n useSnapshot,\n useUserList,\n useWebSocketEventCallback,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realsee-live.esm.js","sources":["../src/utils/subscribe.ts","../src/rtc/CoreRTC.ts","../src/typings/rtc/type.ts","../src/utils/uuid.ts","../src/rtc/BrowserRTC.ts","../src/rtc/BrowserRTC4Chime.ts","../src/typings/rtc/joinedInfo.ts","../src/rtc/VRWebViewRTC.ts","../src/typings/live/LiveMsg.ts","../src/typings/live/UserInfo.ts","../src/typings/live/WebSocket.ts","../src/utils/appendUri.ts","../src/utils/clientDetector.ts","../src/utils/equal.ts","../src/live/controller.ts","../src/live/createLive.ts","../src/live/createLiveReact.tsx"],"sourcesContent":["const EVENT_SYMBOL: unique symbol = Symbol('$$REALSEE_LIVE_EVENT$$');\n\nexport type EventMap = {\n [name: string]: (...args: any[]) => void | boolean;\n};\n\nfunction __generateEventIfNotExisted<T extends EventMap>(\n instance: any,\n): {\n [Key in keyof T]: [\n callback: (...args: Parameters<T[Key]>) => ReturnType<T[Key]>,\n once: boolean,\n ][];\n} {\n if (!instance[EVENT_SYMBOL]) {\n instance[EVENT_SYMBOL] = {};\n }\n return instance[EVENT_SYMBOL];\n}\n\nfunction __removeEventIfNotExisted(instance: any) {\n if (!instance[EVENT_SYMBOL]) {\n delete instance[EVENT_SYMBOL];\n }\n}\n\n/**\n * 监听者模式\n * @template T 预设的监听回调类型\n * @example\n * ```\n * new Subscribe<{\n * \"foo\": [arg1: number, arg2: string],\n * \"bar\": [arg: boolean],\n * }>()\n * ```\n */\nexport class Subscribe<T extends EventMap> {\n /**\n * 判断是否注册了事件\n * @param name 事件类型\n */\n hasListener(name: keyof T): boolean {\n const events = __generateEventIfNotExisted<T>(this);\n return events && events[name] && events[name].length > 0;\n }\n\n /**\n * 注册事件\n * @param name 事件类型\n * @param callback 事件回调函数\n * @param once 是否只执行一次\n * @returns 解除事件\n * @template K 预设的监听事件名称\n * @template C 回调函数函数上下文\n */\n on<K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n once?: boolean,\n ): () => void {\n const events = __generateEventIfNotExisted<T>(this);\n if (!events[name]) events[name] = [];\n events[name].push([callback as any, once || false]);\n return () => this.off(name, callback);\n }\n\n /**\n * 注册事件(是否只执行一次)\n * @param name 事件类型\n * @param callback 事件回调函数\n * @returns 解除事件\n * @template K 预设的监听事件名称\n * @template C 回调函数函数上下文\n */\n once<K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): () => void {\n return this.on(name, callback, true);\n }\n\n /**\n * 解除事件\n *\n * 如果 name 不传的话解除对应所有事件\n * 如果 name, callback 不传的话解除所有name的所有事件\n * @param name 事件类型\n * @param callback 事件回调函数\n * @template K 预设的监听事件名称\n */\n off<K extends keyof T>(\n name?: K,\n callback?: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): void {\n if (name === undefined) {\n __removeEventIfNotExisted(this);\n return;\n }\n const events = __generateEventIfNotExisted<T>(this);\n if (!events[name]) events[name] = [];\n if (callback === undefined) {\n events[name].length = 0;\n return;\n }\n let index = 0;\n for (; index < events[name].length; index++) {\n if (events[name][index][0] === callback) break;\n }\n if (index < events[name].length) {\n events[name].splice(index, 1);\n }\n }\n\n /**\n * 触发事件\n * @param name 事件类型\n * @param data 触发事件的数据\n * @returns canceled 是否被触发取消\n * @template K 预设的监听事件名称\n */\n emit<K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean {\n let canceled = false;\n const events = __generateEventIfNotExisted<T>(this);\n const event = events[name] || [];\n for (let one of event.slice()) {\n const [callback, once = false] = one;\n const result = callback(...data);\n if (once) this.off(name, callback);\n if (result === false) canceled = true;\n }\n return canceled;\n }\n}\n\nexport namespace SubscribeMixinType {\n export interface hasListener<T extends EventMap> {\n (name: keyof T): boolean;\n }\n export interface on<T extends EventMap> {\n <K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n once?: boolean,\n ): () => void;\n }\n export interface once<T extends EventMap> {\n <K extends keyof T>(\n name: K,\n callback: (...args: Parameters<T[K]>) => ReturnType<T[K]>,\n ): () => void;\n }\n export interface off<T extends EventMap> {\n <K extends keyof T>(\n names?: K | K[],\n callback?: (...args: any[]) => any,\n ): void;\n }\n export interface emit<T extends EventMap> {\n <K extends keyof T>(name: K, ...data: Parameters<T[K]>): boolean;\n }\n}\n","import { RTCEventType } from '../typings/rtc/eventType';\nimport { RTCProtocol } from '../typings/rtc/protocol';\nimport { RTCType } from '../typings/rtc/type';\nimport { Subscribe } from '../utils/subscribe';\n\n/**\n * rtc 基础抽象类\n */\nexport abstract class CoreRTC\n extends Subscribe<RTCEventType>\n implements RTCProtocol\n{\n abstract joined: boolean;\n\n abstract micro: boolean;\n\n abstract voiceId: string;\n\n abstract type: RTCType;\n\n abstract join(options: {\n voiceId: string;\n userId: string;\n roomId: string | number | undefined;\n type: RTCType;\n }): Promise<boolean>;\n\n abstract quit(): Promise<boolean>;\n\n abstract detectMicro(): Promise<boolean>;\n\n abstract toggleMicro(flag?: boolean): Promise<boolean>;\n\n abstract shock(): void;\n}\n","/**\n * rtc 类型\n */\nexport enum RTCType {\n RealseeBrowserRTC = 'RealseeBrowserRTC',\n RealseeVRWebViewRTC = 'RealseeVRWebViewRTC',\n RealseeBrowserChimeRTC = 'RealseeBrowserChimeRTC',\n}\n\nexport enum BuiltInRTCType {\n RealseeXTRTC = 'trtc',\n RealseeXChimeRTC = 'chime',\n}\n","// uuid\nfunction S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\n/**\n * 基于伪随机数生成 **uuid**。\n */\nexport function uuid() {\n // then to call it, plus stitch in '4' in the third group\n return (\n S4() +\n S4() +\n '-' +\n S4() +\n '-4' +\n S4().substr(0, 3) +\n '-' +\n S4() +\n '-' +\n S4() +\n S4() +\n S4()\n ).toLowerCase();\n}\n","import TRTC, { Client, LocalStream } from 'trtc-js-sdk';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { RTCType } from '../typings/rtc/type';\n\nimport { uuid } from '../utils/uuid';\nimport { CoreRTC } from './CoreRTC';\n\ninterface ITrtcInstance {\n client: Client | null;\n stream: LocalStream | null;\n}\n\nexport class BrowserRTC extends CoreRTC {\n type = RTCType.RealseeBrowserRTC;\n joined = false;\n micro = false;\n voiceId = '';\n\n private _getVoiceSign: GetVoiceSign = () => {\n throw new Error('方法 getVoiceSign 未实现');\n };\n\n private $dom: HTMLDivElement = document.createElement('div');\n\n private _trtc: ITrtcInstance = {\n client: null,\n stream: null,\n };\n\n constructor(options: { getVoiceSign: GetVoiceSign }) {\n super();\n this._getVoiceSign = options.getVoiceSign;\n this._initParentDom();\n }\n\n private _initParentDom() {\n this.$dom.id = `rs-rtc-${uuid()}`;\n this.$dom.style.display = 'none';\n document.body.appendChild(this.$dom);\n }\n\n join = async (options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }): Promise<boolean> => {\n this.emit('joinWillStart');\n const createClientOptions = await this._getVoiceSign({\n voiceId: options.voiceId,\n roomId: options.roomId,\n userId: options.userId,\n });\n // 1. 创建client\n this._trtc.client = TRTC.createClient({\n mode: 'rtc',\n ...createClientOptions,\n });\n\n this._trtc.client?.enableAudioVolumeEvaluation();\n\n // 2. 订阅事件\n this._registerRtcEvent();\n\n // 3. 加入语音房间\n let result = await new Promise<boolean>((resolve) => {\n this._trtc.client\n ?.join({ roomId: Number(options.voiceId) })\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n this.joined = result;\n\n if (!result) return false; // 进房失败\n\n // 4. 创建本地流\n this._trtc.stream = TRTC.createStream({\n userId: createClientOptions.userId,\n audio: true,\n video: false,\n });\n\n // 5. 初始化本地流\n result = await new Promise<boolean>((resolve) => {\n this._trtc.stream\n ?.initialize()\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n // 6. 发布本地流\n result = await new Promise<boolean>((resolve) => {\n this._trtc.client\n ?.publish(this._trtc.stream!)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n\n this.joined = result;\n\n if (this.joined) this.emit('joined');\n\n return result;\n };\n\n quit(): Promise<boolean> {\n return new Promise(async (resolve) => {\n this.joined = false;\n if (this._trtc.stream) {\n await this._trtc.client?.unpublish(this._trtc.stream);\n this._trtc.stream.stop();\n this._trtc.stream.close();\n this._trtc.stream = null;\n }\n this._trtc.client\n ?.leave()\n .then(() => (this._trtc.client = null))\n .then(() => resolve(true))\n .catch(() => resolve(false));\n });\n }\n\n detectMicro(): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const rule = { audio: true, video: false };\n try {\n navigator.mediaDevices\n .getUserMedia(rule)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n } catch (e) {\n console.error(e);\n resolve(false);\n }\n });\n }\n\n toggleMicro(flag?: boolean): Promise<boolean> {\n return Promise.resolve(\n (flag\n ? this._trtc?.stream?.unmuteAudio()\n : this._trtc?.stream?.muteAudio()) || false,\n );\n }\n\n shock(): void {\n throw new Error('Method not implemented.');\n }\n\n private _registerRtcEvent() {\n this._trtc.client?.on('stream-added', this._handleStreamAdded);\n this._trtc.client?.on('stream-subscribed', this._handleStreamSubscribed);\n this._trtc.client?.on('audio-volume', (event) =>\n this.emit('userVolumes', [\n { userId: event.userId, audioVolume: event.audioVolume },\n ]),\n );\n this._trtc.client?.on('error', (event: any) => this.emit('error', event));\n }\n\n private _handleStreamAdded = (event: any) => {\n const remoteStream = event.stream;\n console.log('远端流增加: ' + remoteStream.getId());\n //订阅远端流\n this._trtc.client?.subscribe(remoteStream);\n };\n\n private _handleStreamSubscribed = (event: any) => {\n const remoteStream = event.stream;\n console.log('远端流订阅成功:' + remoteStream.getId());\n const playId = remoteStream.getId();\n const domId = `rs-rtc-remote_stream-${playId}`;\n const dom = document.createElement('div');\n dom.id = domId;\n this.$dom.appendChild(dom);\n // 播放远端流\n remoteStream.play(domId);\n };\n}\n","import {\n AudioVideoObserver,\n ConsoleLogger,\n DefaultDeviceController,\n DefaultMeetingSession,\n DefaultModality,\n DeviceChangeObserver,\n LogLevel,\n MeetingSessionConfiguration,\n MeetingSessionStatusCode,\n} from 'amazon-chime-sdk-js';\nimport { MeetingSessionConfigurationOptions } from '../typings/chime/MeetingSessionConfigurationOptions';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { RTCType } from '../typings/rtc/type';\n\nimport { uuid } from '../utils/uuid';\nimport { CoreRTC } from './CoreRTC';\n\n/**\n * amazon-chime-sdk-js 适配的rtc实现\n */\nexport class BrowserRTC4Chime extends CoreRTC {\n type = RTCType.RealseeBrowserChimeRTC;\n joined = false;\n micro = false;\n voiceId = '';\n userId = '';\n logger: ConsoleLogger;\n deviceController: DefaultDeviceController;\n meetingSession: DefaultMeetingSession | undefined;\n\n audioInput: MediaDeviceInfo | undefined;\n audioOutput: MediaDeviceInfo | undefined;\n\n deviceChangeObserver: DeviceChangeObserver = {};\n audioVideoObserver: AudioVideoObserver = {};\n\n private _getVoiceSign: GetVoiceSign = () => {\n throw new Error('方法 getVoiceSign 未实现');\n };\n\n private $dom: HTMLDivElement = document.createElement('div');\n private $audio: HTMLAudioElement = document.createElement('audio');\n\n constructor(options: { getVoiceSign: GetVoiceSign; logLevel?: LogLevel }) {\n super();\n // 挂载签名钩子\n this._getVoiceSign = options.getVoiceSign;\n this._initDom();\n this.logger = new ConsoleLogger(\n 'WebRTCLogger',\n options.logLevel || LogLevel.OFF,\n );\n this.deviceController = new DefaultDeviceController(this.logger);\n this.initObservers();\n }\n\n /**\n * 对audio标签初始化\n */\n _initDom = () => {\n this.$audio.id = `rs-rtc-${uuid()}`;\n this.$dom.id = `rs-rtc-${uuid()}`;\n this.$dom.appendChild(this.$audio);\n document.body.appendChild(this.$dom);\n };\n\n /**\n * 初始化事件监听器\n */\n initObservers = () => {\n // 输入输出设备变化的监听器\n this.deviceChangeObserver = {\n audioInputsChanged: (freshAudioInputDeviceList: any[]) => {\n // An array of MediaDeviceInfo objects\n freshAudioInputDeviceList?.forEach((mediaDeviceInfo) => {\n this.logger.info(\n `Device ID: ${mediaDeviceInfo.deviceId} Microphone: ${mediaDeviceInfo.label}`,\n );\n });\n },\n\n audioOutputsChanged: (freshAudioOutputDeviceList: any) => {\n this.logger.info(\n `Audio outputs updated: ${freshAudioOutputDeviceList}`,\n );\n },\n\n videoInputsChanged: (freshVideoInputDeviceList: any) => {\n this.logger.info(`Video inputs updated: ${freshVideoInputDeviceList}`);\n },\n\n audioInputMuteStateChanged: (device: any, muted: any) => {\n this.logger.info(\n `Device ${device.toString()} ${\n muted ? 'is muted in hardware' : 'is not muted'\n }`,\n );\n },\n };\n\n // 流变化监听器\n this.audioVideoObserver = {\n audioVideoDidStart: () => {\n this.logger.info('Started');\n },\n audioVideoDidStop: (sessionStatus: any) => {\n // See the \"Stopping a session\" section for details.\n this.logger.info(\n `Stopped with a session status code: ${sessionStatus.statusCode()}`,\n );\n },\n audioVideoDidStartConnecting: (reconnecting: any) => {\n if (reconnecting) {\n // e.g. the WiFi connection is dropped.\n this.logger.info('Attempting to reconnect');\n }\n },\n };\n };\n\n /**\n * 加入语音会议\n * @param options\n * @returns\n */\n async join(options: {\n voiceId: string;\n userId: string;\n roomId: string | number | undefined;\n type: RTCType;\n }): Promise<boolean> {\n return new Promise(async (success, fail) => {\n this.emit('joinWillStart');\n try {\n // 取签名\n const { sdkAppId, userId, roomId, userSig } = await this._getVoiceSign({\n ...options,\n roomId: options.roomId || 0,\n });\n this.userId = userId;\n const {\n attendence,\n vendor_wrapper,\n }: MeetingSessionConfigurationOptions = JSON.parse(\n decodeURIComponent(userSig),\n );\n\n // 初始化配置\n const configuration = new MeetingSessionConfiguration(\n {\n Meeting: vendor_wrapper,\n },\n {\n Attendee: {\n ExternalUserId: attendence.external_user_id,\n AttendeeId: attendence.attendee_id,\n JoinToken: attendence.join_token,\n },\n },\n );\n\n // 初始化会议会话\n this.meetingSession = new DefaultMeetingSession(\n configuration,\n this.logger,\n this.deviceController,\n );\n\n // 注册事件\n this._registerRtcEvent();\n\n // 绑定监听器\n this.meetingSession.audioVideo.addDeviceChangeObserver(\n this.deviceChangeObserver,\n );\n this.meetingSession.audioVideo.addObserver(this.audioVideoObserver);\n\n // 绑定播放器\n this.meetingSession.audioVideo.bindAudioElement(this.$audio);\n\n const observer: AudioVideoObserver = {\n audioVideoDidStart: () => {\n this.meetingSession?.audioVideo.realtimeMuteLocalAudio();\n this.joined = true;\n this.emit('joined');\n success(true);\n },\n audioVideoDidStop: () => {\n this.joined = false;\n success(false);\n },\n };\n\n this.meetingSession.audioVideo.addObserver(observer);\n\n // 选择语音输入设备\n const audioInputDevices =\n await this.deviceController.listAudioInputDevices(true);\n const defaultAudioInput = audioInputDevices.find(\n (device: any) => device.deviceId === 'default',\n );\n const otherAudioInput = audioInputDevices.find(\n (device: any) => device.deviceId !== '',\n );\n this.audioInput = defaultAudioInput || otherAudioInput;\n\n await this.meetingSession.audioVideo.chooseVideoInputDevice(null);\n await this.meetingSession.audioVideo.chooseAudioInputDevice(\n this.audioInput?.deviceId || 'default',\n );\n\n this.meetingSession.audioVideo.start();\n } catch (e: unknown) {\n this.emit('error', e as Error);\n this.logger.error((e as Error).message);\n success(false);\n }\n });\n }\n\n /**\n * 注册rtc事件\n */\n _registerRtcEvent = () => {\n const presentAttendeeId =\n this.meetingSession?.configuration?.credentials?.attendeeId || '';\n if (presentAttendeeId) {\n // 处理音量变化\n const roster = new Map<\n string,\n {\n userId: string;\n volume: number | null;\n muted: boolean | null;\n signalStrength: number | null;\n }\n >();\n\n const getUserVolumes = () => {\n const result: any = [];\n roster.forEach((v, k) => {\n result.push({\n userId: v.userId,\n volume:\n v.muted || v.signalStrength === 0 || !Boolean(v.volume)\n ? 0\n : v.volume,\n });\n });\n return result;\n };\n\n this.meetingSession?.audioVideo.realtimeSubscribeToAttendeeIdPresence(\n (presentAttendeeId: any, present: any, externalUserId: any) => {\n if (!present) {\n roster.delete(presentAttendeeId);\n this.emit('userVolumes', getUserVolumes());\n return;\n }\n\n this.meetingSession?.audioVideo.realtimeSubscribeToVolumeIndicator(\n presentAttendeeId,\n (attendeeId: any, volume: any, muted: any, signalStrength: any) => {\n const baseAttendeeId = new DefaultModality(attendeeId).base();\n if (baseAttendeeId !== attendeeId) {\n // Optional: Do not include the content attendee (attendee-id#content) in the roster.\n // See the \"Screen and content share\" section for details.\n return;\n }\n\n roster.set(attendeeId, {\n userId: externalUserId || attendeeId,\n volume,\n muted,\n signalStrength,\n });\n this.emit('userVolumes', getUserVolumes());\n },\n );\n },\n );\n\n // 弱网\n this.meetingSession?.audioVideo.realtimeSubscribeToVolumeIndicator(\n presentAttendeeId,\n (attendeeId: any, volume: any, muted: any, signalStrength: any) => {\n const baseAttendeeId = new DefaultModality(attendeeId).base();\n if (baseAttendeeId === attendeeId) {\n if (signalStrength !== null && signalStrength !== 1) {\n this.emit('weakNetwork');\n }\n }\n },\n );\n\n // 报错\n\n this.meetingSession?.audioVideo.realtimeSubscribeToFatalError(\n (error: any) => this.emit('error', error),\n );\n }\n };\n\n quit(): Promise<boolean> {\n return new Promise((success, fail) => {\n this.joined = false;\n const observer: AudioVideoObserver = {\n audioVideoDidStop: (sessionStatus: any) => {\n const sessionStatusCode = sessionStatus.statusCode();\n if (sessionStatusCode === MeetingSessionStatusCode.Left) {\n /*\n - You called meetingSession.audioVideo.stop().\n - When closing a browser window or page, Chime SDK attempts to leave the session.\n */\n this.logger.info('You left the session');\n success(true);\n } else {\n this.logger.info(\n `Stopped with a session status code: ${sessionStatusCode}`,\n );\n success(true);\n }\n },\n };\n this.meetingSession?.audioVideo.addObserver(observer);\n this.meetingSession?.audioVideo.stop();\n });\n }\n\n async detectMicro(): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n const rule = { audio: true, video: false };\n try {\n navigator.mediaDevices\n .getUserMedia(rule)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n } catch (e: unknown) {\n this.logger.error((e as Error).message);\n resolve(false);\n }\n });\n }\n\n async toggleMicro(flag?: boolean): Promise<boolean> {\n if (flag) {\n this.meetingSession?.audioVideo.realtimeUnmuteLocalAudio();\n } else {\n this.meetingSession?.audioVideo.realtimeMuteLocalAudio();\n }\n const muted = this.meetingSession?.audioVideo.realtimeIsLocalAudioMuted();\n if (muted !== undefined) {\n return flag !== muted;\n } else {\n return false;\n }\n }\n\n shock(): void {\n throw new Error('Method not implemented.');\n }\n}\n","/**\n * rtc加入返回值code枚举\n */\nexport enum RTCJoinedInfoCodeEnum {\n /**\n * 成功\n */\n Success = 0,\n /**\n * 失败\n */\n Failure = 1,\n /**\n * 重复加入\n */\n ReJoin = 2,\n /**\n * 无麦克风权限\n */\n NoMicroPermission = 3,\n}\n\n/**\n * 进入rtc房间的回调信息\n */\nexport interface RTCJoinedInfo {\n code: RTCJoinedInfoCodeEnum;\n message: string;\n userId?: string;\n roomId?: number;\n errInfo?: {\n errCode: number;\n errMsg: string;\n };\n}\n","import { UserVolume } from '../typings/live/UserVolume';\nimport {\n RTCJoinedInfo,\n RTCJoinedInfoCodeEnum,\n} from '../typings/rtc/joinedInfo';\nimport { RTCType } from '../typings/rtc/type';\nimport { VRWebViewRTCOptions } from '../typings/rtc/VRWebViewRTCOptions';\nimport { CoreRTC } from './CoreRTC';\n\nexport class VRWebViewRTC extends CoreRTC {\n type: RTCType = RTCType.RealseeVRWebViewRTC\n joined = false;\n micro = false;\n voiceId: string = '';\n\n private options: VRWebViewRTCOptions;\n\n get jsBridge() {\n return this.options.jsBridge;\n }\n\n constructor({ jsBridge, getVoiceSign }: VRWebViewRTCOptions) {\n super();\n this.options = { jsBridge, getVoiceSign };\n\n this.jsBridge.callAndListen(\n 'live/userVolumes',\n (userVolumes: UserVolume[]) => {\n this.emit('userVolumes', userVolumes);\n },\n );\n this.jsBridge.callAndListen('live/weakNetwork', (weakNetwork: boolean) => {\n if (weakNetwork) this.emit('weakNetwork');\n });\n }\n\n async join(options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }) {\n this.emit('joinWillStart');\n const { sdkAppId, userId, userSig } = await this.options.getVoiceSign(\n options,\n );\n\n this.type = options.type;\n const [res, error] = await this.jsBridge.callAndBackfeed<RTCJoinedInfo>(\n `live/join?sdkAppID=${sdkAppId}&userID=${userId}&roomID=${Number(\n options.voiceId,\n )}&userSig=${userSig}`,\n );\n\n if (!res) {\n this.emit('error', error ? error : new Error('加入房间失败:未知异常。'));\n this.joined = false;\n } else {\n if (res.code === RTCJoinedInfoCodeEnum.Success) {\n this.emit('joined');\n this.joined = true;\n } else {\n this.emit('error', res);\n this.joined = false;\n }\n }\n return this.joined;\n }\n\n async quit() {\n const [res, error] = await this.jsBridge.callAndBackfeed<boolean>(\n 'live/quit',\n );\n if (res === null) {\n this.emit('error', error ? error : new Error('退出房间失败:未知异常。'));\n }\n this.joined = false;\n return !!res;\n }\n\n async detectMicro() {\n const [res, error] = await this.jsBridge.detectMicro();\n if (res === null) {\n this.emit('error', error ? error : new Error('麦克风监测异常!'));\n return false;\n }\n return res;\n }\n\n async toggleMicro(flag?: boolean) {\n const [res, error] = await this.jsBridge.callAndBackfeed<boolean>(\n `live/toggleMicro?flag=${!!flag ? 1 : 0}`,\n );\n if (res === null) {\n this.emit('error', error ? error : new Error('麦克风监测异常!'));\n return false;\n }\n this.micro = res;\n return res;\n }\n\n shock() {\n this.jsBridge.shock(1);\n }\n}\n","/**\n * WebSocket 通信指令\n * - 下行:服务端推送数据\n * - 上行:客户端上报数据\n */\nexport enum Command {\n /* 当前用户信息:下行 */\n SelfUserInfo = \"SELF_USER_INFO\",\n /* 房间信息:下行 */\n RoomInfo = \"ROOM_INFO\",\n /* RTC信息:下行 */\n RTCInfo = \"RTC_INFO\",\n /* 用户列表:下行 */\n UserList = \"USER_LIST\",\n /* 内置消息:下行、上行 */\n BuiltinMsg = \"BUILTIN_MSG\",\n /* 自定义广播事件消息:下行、上行 */\n CustomEvent = \"CUSTOM_EVENT\",\n /* 帧数据同步:下行、上行 */\n KeyframeSync = \"KEYFRAME_SYNC\",\n /* 被踢出房间:下行 */\n UserKickOut = \"USER_KICK_OUT\",\n}\n\n/**\n * 向服务端请求数据时的数据格式。\n */\nexport type ReqLiveMsg = {\n /**\n * 请求指令。\n */\n command: Command;\n /**\n * 前端请求时生成的uuid()。\n */\n front_request_id: string;\n /**\n * 数据内容\n */\n data: {\n /**\n * 如果此数据仅发送给某些用户,请提供这些用户的ucid。\n */\n to_user_ids?: string[];\n [key: string]: any;\n };\n};\n\n/**\n * 内置事件类型。\n */\nexport enum BuiltinEventType {\n /**\n * 变更用户状态。\n */\n UserChange = \"user_change\",\n /**\n * 变更房间状态。\n */\n RoomChange = \"room_change\",\n}\n\n/**\n * 内置事件行为类型。\n */\nexport enum BuiltinActionType {\n /**\n * 修改麦克风状态。\n */\n UserMicroStatus = \"change_micro_status\",\n /**\n * 同步当前用户状态:客户端麦克风状态已经修改成功,通知服务端\n */\n UserMicroStatusSync = \"sync_micro_status\",\n /**\n * 调整某些用户的权限。\n */\n UserPermission = \"change_permission\",\n /**\n * 用户状态发生改变。\n */\n UserStatus = \"change_status\",\n /**\n * 更新用户信息。\n */\n UserInfo = \"change_info\",\n /**\n * 关闭房间。\n */\n RoomClose = \"close\",\n}\n\n/**\n * 内置事件数据结构体。\n */\nexport type BuiltinMsg = {\n event_type: BuiltinEventType;\n action: BuiltinActionType;\n to_user_ids: string[];\n data: {\n extension?: Record<string, any>;\n [key: string]: any;\n };\n};\n\n/**\n * 麦克风状态。\n */\nexport enum MicroStatus {\n OPEN = \"OPEN\",\n CLOSE = \"CLOSE\",\n}\n/**\n * 响应的信息结构体。\n */\nexport type LiveMsg = {\n code: string;\n message: string;\n command: Command;\n roomCode: string;\n appId: string;\n requestId: string;\n frontRequestId: string;\n triggerUserId: string;\n data: Record<string, any> | Record<string, any>[];\n};\n\n/**\n * 解析下后端数据格式。\n * @param jsonTxt - JSON序列化后的文本。\n * @returns false 标识解析失败;解析成功返回 {@link LiveMsg} 实例。\n */\nexport function parseLiveMsg(jsonTxt: string): LiveMsg | boolean {\n try {\n const msg = JSON.parse(jsonTxt);\n const resMsg: Record<string, any> = {\n code: msg.code,\n message: msg.message,\n command: msg.command,\n roomCode: msg.room_code,\n appID: msg.app_id,\n requestId: msg.request_id,\n frontRequestId: msg.front_request_id,\n triggerUserID: msg.trigger_user_id,\n data: msg.data || {},\n };\n\n const undefinedKeys = Object.keys(resMsg).filter(\n (key) => resMsg[key] === undefined\n );\n if (undefinedKeys.length > 0) {\n console.warn(`推送数据格式异常:${undefinedKeys.join(\" \")} 值不存在!`);\n }\n return resMsg as LiveMsg;\n } catch (error) {\n // notcare? 过滤掉所有不符合规范的数据\n return false;\n }\n}\n","/**\n * 用户当前状态枚举。\n */\nexport enum UserStatus {\n /**\n * 正常\n */\n Normal = 0,\n /**\n * 被移除\n */\n Removed = 1,\n /**\n * 被替换\n */\n Replaced = 2,\n}\n\nexport enum MemUserStatus {\n WAIT_ENTER = 'WAIT_ENTER',\n ONLINE = 'ONLINE',\n LEAVE = 'LEAVE',\n KICK_OUT = 'KICK_OUT',\n BE_REPLACE = 'BE_REPLACE',\n EXCEPTION = 'EXCEPTION',\n}\n\n/**\n * 用户信息扩展字段:比如提供用户画像相关的数据。\n */\nexport type UserInfoExt = {\n /**\n * 用户昵称。\n */\n nickname?: string\n /**\n * 用户头像。\n */\n avatar?: string\n /**\n * 其他用户相关的字段,比如用户职称、住址、联系方式等信息。\n */\n [key: string]: any\n}\n\n/**\n * 带看会话房间用户的信息格式。\n */\nexport type UserInfo = {\n /**\n * 用户唯一标识ID。\n */\n id: string\n /**\n * 用户当前的状态。\n */\n status?: UserStatus\n /**\n * 内存中的用户状态。\n */\n mem_user_status?: MemUserStatus\n /**\n * 用户当前是否开启麦克风。 \n */\n micro_status: boolean\n /**\n * 用户角色定义。(前端不关注此字段)。\n */\n user_role?: number | string\n /**\n * 用户当前是否在线。\n */\n current_ws_online?: boolean\n /**\n * 用户曾经是否在线过,即进入房间后又由于某种原因离开后重新进入。\n */\n once_ws_online?: boolean\n /**\n * RTC 环境是否就绪,即当前语音是否联通。\n */\n rtc: boolean\n /**\n * 当前用户的权限配置。(UI层面理解)。\n */\n permission?: Record<string, boolean>\n /**\n * 用户信息扩展字段。\n */\n extension?: UserInfoExt\n}\n","/**\n * WebSocket 连接状态枚举\n */\nexport enum WebSocketState {\n /**\n * 尚未初始化\n */\n NOTINITIALIZED = -1,\n\n /**\n * 正在链接中\n */\n CONNECTING = 0,\n\n /**\n * 已经链接并且可以通讯\n */\n OPEN = 1,\n\n /**\n * 连接正在关闭\n */\n CLOSING = 2,\n\n /**\n * 连接已关闭或者没有链接成功\n */\n CLOSED = 3,\n}\n\nexport type WebSocketError = {\n type: WebSocketErrorType,\n closeError?: WebSocketCloseError,\n target?: Event | CloseEvent\n error?: any\n}\n\nexport enum WebSocketErrorType {\n Error = 'Error',\n Close = 'Close',\n MicroAuth = 'MicroAuth',\n DuplicateConnect = 'DuplicateConnect',\n IllegalURL = 'IllegalURL',\n Unknown = 'Unknown',\n IllegalArgs = 'IllegalArgs'\n}\n\n/**\n * WebSocket 异常关闭枚举:https://developer.mozilla.org/zh-CN/docs/Web/API/CloseEvent。\n */\nexport enum WebSocketCloseError {\n /**\n * 终端离开, 可能因为服务端错误, 也可能因为浏览器正从打开连接的页面跳转离开。\n */\n Err_1001 = 'CLOSE_GOING_AWAY',\n\n /**\n * 由于协议错误而中断连接。\n */\n Err_1002 = 'CLOSE_PROTOCOL_ERROR',\n\n /**\n * 由于接收到不允许的数据类型而断开连接 (如仅接收文本数据的终端接收到了二进制数据)。\n */\n Err_1003 = 'CLOSE_UNSUPPORTED',\n\n /**\n * 安全因素或WebSocket连接次数达到上限。\n */\n Err_1006 = 'CLOSE_ABNORMAL',\n\n /**\n * 由于收到了格式不符的数据而断开连接 (如文本消息中包含了非 UTF-8 数据)。\n */\n Err_1007 = 'Unsupported Data',\n /**\n * 由于收到不符合约定的数据而断开连接。\n */\n Err_1008 = 'Policy Violation',\n /**\n * 由于收到过大的数据帧而断开连接。\n */\n Err_1009 = 'CLOSE_TOO_LARGE',\n /**\n * 未知错误。\n */\n Err_unknown = 'unknown'\n\n}\n\n\nexport function parseWSClsErr(code: number) {\n switch (code) {\n case 1001: {\n return WebSocketCloseError.Err_1001\n }\n case 1002: {\n return WebSocketCloseError.Err_1002\n }\n case 1003: {\n return WebSocketCloseError.Err_1003\n }\n case 1006: {\n return WebSocketCloseError.Err_1006\n }\n case 1007: {\n return WebSocketCloseError.Err_1007\n }\n case 1008: {\n return WebSocketCloseError.Err_1008\n }\n case 1009: {\n return WebSocketCloseError.Err_1009\n }\n default:\n break\n }\n\n return WebSocketCloseError.Err_unknown\n}\n","export function appendUri(uri: string, query: Record<string, string | number> = {}) {\n const hasQuery = uri.indexOf('?') !== -1\n const newQuery = Object.keys(query).reduce(\n (accu, curr, idx) =>\n `${accu}${(idx === 0 && !hasQuery) ? '?' : '&'}${curr}=${query[curr]}`,\n '')\n\n return uri + newQuery\n}\n","const userAgent = globalThis.navigator.userAgent\n\nexport const isAndroid = /android/gi.test(userAgent)\n\nexport const isIOS = /iPhone|iPad\\s+OS/gi.test(userAgent)\n\nexport const isWxMiniProgram = /MicroMessenger/gi.test(userAgent) && /miniProgram/gi.test(userAgent)\n\nexport const isRealseeVRWebview = /realsee/gi.test(userAgent)\n","/**\n * 判断是否是真实的对象类型\n * @param value\n * @returns\n */\nfunction isTrulyObject(value: any): boolean {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * 判断基础类型是否相等\n * @param value\n * @param other\n * @returns\n */\nfunction baseIsEqual(value: any, other: any): boolean {\n if (value === other) return true;\n if (typeof value !== typeof other) return false;\n if (Number.isNaN(value) && Number.isNaN(other)) return true;\n return false;\n}\n\n/**\n * 对象浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction objEqualShallow(value: any, other: any): boolean {\n const valueProps = Object.getOwnPropertyNames(value);\n const otherProps = Object.getOwnPropertyNames(other);\n if (valueProps.length !== otherProps.length) return false;\n\n for (let i = 0, len = valueProps.length; i < len; i++) {\n const propName = valueProps[i];\n if (!baseIsEqual(value[propName], other[propName])) return false;\n }\n\n return true;\n}\n\n/**\n * 数组浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction arrayEqualShallow(value: any, other: any): boolean {\n if (value.length !== other.length) return false;\n for (let i = 0, len = value.length; i < len; i++) {\n if (!baseIsEqual(value[i], other[i])) return false;\n }\n return true;\n}\n\n/**\n * 变量浅比较\n * @param value\n * @param other\n * @returns\n */\nfunction isShallowEqual(value: any, other: any): boolean {\n if (baseIsEqual(value, other)) return true;\n if (isTrulyObject(value) && isTrulyObject(other))\n return objEqualShallow(value, other);\n if (Array.isArray(value) && Array.isArray(other))\n return arrayEqualShallow(value, other);\n return false;\n}\n\n/**\n * 对象深比较\n * @param value\n * @param other\n * @returns\n */\nfunction isDeepEqual(value: any, other: any): boolean {\n if (baseIsEqual(value, other)) return true;\n if (isTrulyObject(value) && isTrulyObject(other))\n return objEqualDeep(value, other);\n if (Array.isArray(value) && Array.isArray(other))\n return arrayEqualDeep(value, other);\n return false;\n}\n\n/**\n * 数组深比较\n * @param value\n * @param other\n * @returns\n */\nfunction arrayEqualDeep(value: any, other: any): boolean {\n if (value.length !== other.length) return false;\n for (let i = 0, len = value.length; i < len; i++) {\n if (!isDeepEqual(value[i], other[i])) return false;\n }\n return true;\n}\n\n/**\n * 对象深比较\n * @param value\n * @param other\n * @returns\n */\nfunction objEqualDeep(value: any, other: any): boolean {\n const valueProps = Object.getOwnPropertyNames(value);\n const otherProps = Object.getOwnPropertyNames(other);\n if (valueProps.length !== otherProps.length) return false;\n\n for (let i = 0, len = valueProps.length; i < len; i++) {\n const propName = valueProps[i];\n if (!isDeepEqual(value[propName], other[propName])) return false;\n }\n\n return true;\n}\n\n/**\n * 对象比较。\n * @param value 第一个比较的值。\n * @param other 第二个比较的值。\n * @param options 可选参数,可选项:`deep` 是否深比较。\n * @returns {boolean} 是否相等。\n */\nexport function equal(value: any, other: any, opt = { deep: false }): boolean {\n if (!opt.deep) return isShallowEqual(value, other);\n return isDeepEqual(value, other);\n}\n","import { KeyframeTypes } from '../typings/live/EventType';\nimport { Live } from '../typings/live/Live';\nimport {\n LiveMsg,\n Command,\n BuiltinEventType,\n BuiltinActionType,\n MicroStatus,\n BuiltinMsg,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { RoomInfo } from '../typings/live/RoomInfo';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport { WebSocketState } from '../typings/live/WebSocket';\nimport { RTCType } from '../typings/rtc/type';\nimport { equal } from '../utils/equal';\n\nexport class LiveController<Snapshot extends Record<string, any>> {\n readyState = WebSocketState.NOTINITIALIZED;\n options: LiveOptions;\n healthCheckId?: number;\n canSync = true;\n webSocket?: WebSocket;\n connecting = false;\n selfUserInfo?: UserInfo;\n userList?: UserInfo[];\n roomInfo?: RoomInfo;\n keyframes: Partial<Snapshot> = {};\n\n constructor(options: LiveOptions) {\n this.options = Object.assign(\n { autoConnect: true, healthCheck: 3000 },\n options,\n );\n }\n /**\n * 检测 WebSocket.readyState 状态\n */\n checkReadyState = (live: Live<Snapshot>) => {\n do {\n if (!this.webSocket) {\n if (this.readyState !== WebSocketState.NOTINITIALIZED) {\n this.readyState = WebSocketState.NOTINITIALIZED;\n live.emit('ws.readyStateUpdate', this.readyState);\n }\n break;\n }\n const readyState = this.webSocket.readyState;\n if (readyState !== this.readyState) {\n this.readyState = readyState;\n live.emit('ws.readyStateUpdate', this.readyState);\n }\n } while (false);\n\n return this.readyState;\n };\n\n onEvtOpnListener?: (evt: Event) => void;\n onEvtMsgListener?: (evt: MessageEvent) => void;\n onEvtErrListener?: (evt: Event) => void;\n onEvtCLEListener?: (evt: CloseEvent) => void;\n\n dispose = () => {\n this.disposeWebSocket();\n this.connecting = false;\n if (this.healthCheckId) {\n clearInterval(this.healthCheckId);\n this.healthCheckId = undefined;\n }\n return true\n };\n\n /**\n * 销毁WebSocket相关依赖。\n */\n disposeWebSocket = () => {\n if (!this.webSocket) return;\n if (this.onEvtOpnListener) {\n this.webSocket!.removeEventListener('open', this.onEvtOpnListener);\n this.onEvtOpnListener = undefined;\n }\n if (this.onEvtMsgListener) {\n this.webSocket!.removeEventListener('message', this.onEvtMsgListener);\n this.onEvtMsgListener = undefined;\n }\n if (this.onEvtErrListener) {\n this.webSocket!.removeEventListener('error', this.onEvtErrListener);\n this.onEvtErrListener = undefined;\n }\n\n if (this.onEvtCLEListener) {\n this.webSocket!.removeEventListener('close', this.onEvtCLEListener);\n this.onEvtCLEListener = undefined;\n }\n this.webSocket!.close();\n this.webSocket = undefined;\n return true\n };\n\n /**\n * 解析数据\n * @param liveMsg\n * @param live\n */\n handleMessage(liveMsg: LiveMsg, live: Live<Snapshot>) {\n const { command, data, frontRequestId, code, message } = liveMsg;\n if (code === 'SUCCESS') {\n switch (command) {\n /**\n * 自己的状态变化\n */\n case Command.SelfUserInfo: {\n const selfInfo = data as UserInfo;\n if (equal(this.selfUserInfo, selfInfo, { deep: true })) return;\n this.selfUserInfo = selfInfo;\n live.emit('selfInfoUpdate', this.selfUserInfo, frontRequestId);\n break;\n }\n\n /**\n * 房间信息变化\n */\n case Command.RoomInfo: {\n const roomInfo = data as RoomInfo;\n this.roomInfo = Object.assign({}, roomInfo);\n live.emit(\n 'readyKeyframeSync',\n (roomInfo.last_frame || {}) as Partial<Snapshot>,\n );\n break;\n }\n\n /**\n * 语音信息变化\n */\n case Command.RTCInfo: {\n const { voice_id: voiceId, type } = data as {\n voice_id: string;\n type: RTCType;\n };\n /* 如果已经进入语音房间,则不重复进入 --> \"RTCInfo\" 指令可能会下发多次 */\n if (live.$RTC.joined) {\n break;\n }\n live.$RTC.join({\n voiceId,\n userId: this.selfUserInfo?.id || '',\n roomId: this.roomInfo?.info.room_code,\n type,\n });\n // 加入房间后 麦克风默认就开启了:需要发个指令。\n live.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: MicroStatus.OPEN,\n },\n );\n break;\n }\n\n /**\n * 房间用户列表变化\n */\n case Command.UserList: {\n const userList = data as UserInfo[];\n this.userList = userList;\n live.emit('userListUpdate', this.userList, frontRequestId);\n break;\n }\n\n /**\n * 自定义事件广播\n */\n case Command.CustomEvent: {\n const evtMsg = data as Record<string, any>;\n live.emit('broadcast', evtMsg, frontRequestId);\n break;\n }\n\n /**\n * 帧数据同步\n */\n case Command.KeyframeSync: {\n const remoteKeyframes = data as Partial<Snapshot>;\n // 此处做一层 diff,仅跟本地数据不一致的情况下才广播数据。\n const keyframes: Partial<Snapshot> = Object.keys(\n remoteKeyframes,\n ).reduce((accu: Partial<Snapshot>, curr: keyof Snapshot) => {\n if (\n equal(remoteKeyframes[curr], this.keyframes[curr], { deep: true })\n ) {\n return accu;\n }\n const params = [\n remoteKeyframes[curr],\n this.keyframes[curr],\n frontRequestId,\n ];\n const evtName = curr as keyof KeyframeTypes<Snapshot>;\n live.keyframes.emit(\n evtName,\n ...(params as Parameters<\n KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]\n >),\n );\n this.keyframes[curr] = remoteKeyframes[curr];\n accu[curr] = remoteKeyframes[curr];\n return accu;\n }, {});\n\n live.emit('keyframes', keyframes, frontRequestId);\n break;\n }\n\n /**\n * 内置消息\n */\n case Command.BuiltinMsg: {\n const builtinMsg = data as BuiltinMsg;\n live.emit('builtinEvent', builtinMsg);\n\n if (builtinMsg.event_type === BuiltinEventType.UserChange) {\n live.emit('userChange', builtinMsg);\n }\n\n if (builtinMsg.event_type === BuiltinEventType.RoomChange) {\n live.emit('roomChange', builtinMsg);\n }\n /**\n * 下发指令自己操作麦克风\n */\n if (\n builtinMsg.event_type === BuiltinEventType.UserChange &&\n builtinMsg.action === BuiltinActionType.UserMicroStatus\n ) {\n live.toggleMicro(builtinMsg.data.status === MicroStatus.OPEN);\n }\n\n /**\n * 如果下发指令退出房间,则 关闭麦克风 及 销毁 WebSocket\n */\n if (\n builtinMsg.event_type === BuiltinEventType.RoomChange &&\n builtinMsg.action === BuiltinActionType.RoomClose\n ) {\n this.options.rtc?.quit();\n this.disposeWebSocket();\n }\n break;\n }\n /**\n * 被踢出房间\n */\n case Command.UserKickOut: {\n live.emit('kickOut');\n break;\n }\n /**\n * 其它未知广播\n */\n default: {\n console.warn('unknown command: ', command);\n }\n }\n } else {\n live.emit('error', liveMsg);\n }\n }\n /**\n * 发送数据\n * @param data\n */\n sendMessage(data: Record<string, any>) {\n if (!this.webSocket)\n return console.warn('WebSocket has not yet been initialized!');\n if (!data) return console.warn('WebSocket messages is empty!');\n this.webSocket.send(JSON.stringify(data));\n }\n}\n","import JSBridge, { JSBridgeCore, JSBridgeProtocol } from '@realsee/jsbridge-x';\nimport { LogLevel } from 'amazon-chime-sdk-js';\nimport {\n BrowserRTC,\n BrowserRTC4Chime,\n RTCProtocol,\n VRWebViewRTC,\n} from '../rtc';\nimport { EventType, KeyframeTypes } from '../typings/live/EventType';\nimport { GetVoiceSign } from '../typings/live/GetVoiceSign';\nimport { Live } from '../typings/live/Live';\nimport {\n Command,\n ReqLiveMsg,\n BuiltinEventType,\n BuiltinActionType,\n MicroStatus,\n parseLiveMsg,\n LiveMsg,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport {\n WebSocketState,\n WebSocketErrorType,\n parseWSClsErr,\n WebSocketError,\n} from '../typings/live/WebSocket';\nimport { BuiltInRTCType, RTCType } from '../typings/rtc/type';\nimport { appendUri } from '../utils/appendUri';\nimport {\n isAndroid,\n isIOS,\n isRealseeVRWebview,\n isWxMiniProgram,\n} from '../utils/clientDetector';\nimport { Subscribe } from '../utils/subscribe';\nimport { uuid } from '../utils/uuid';\nimport { LiveController } from './controller';\n\nconst unimplementedGetVoiceSign: GetVoiceSign = (params) =>\n Promise.reject('unimplemented method GetVoiceSign');\n\n/**\n * 创建 `live` 实例。\n */\nexport function createLive<Snapshot>(options: LiveOptions): Live<Snapshot> {\n const liveController = new LiveController<Snapshot>(options);\n const createLiveMsg = (\n command: Command,\n data: Record<string, any> = {},\n toUserIds?: string | string[],\n ) => {\n toUserIds = toUserIds\n ? Array.isArray(toUserIds)\n ? toUserIds\n : [toUserIds]\n : [];\n if (toUserIds) data['to_user_ids'] = toUserIds;\n return { command, front_request_id: uuid(), data } as ReqLiveMsg;\n };\n class LiveTpl\n extends Subscribe<EventType<Snapshot>>\n implements Live<Snapshot>\n {\n get options(): LiveOptions {\n return Object.freeze(Object.assign({}, liveController.options));\n }\n\n get readyState() {\n liveController.checkReadyState(this);\n return liveController.readyState;\n }\n\n get url() {\n return liveController.webSocket?.url || '';\n }\n\n get selfInfo() {\n return liveController.selfUserInfo;\n }\n\n get userList() {\n return liveController.userList || [];\n }\n\n get snapshot(): Partial<Snapshot> {\n return liveController.keyframes || {};\n }\n\n get $RTC(): RTCProtocol {\n return liveController.options.rtc!;\n }\n\n get jsBridge(): JSBridgeProtocol {\n return liveController.options.jsBridge!;\n }\n\n keyframes = new Subscribe<KeyframeTypes<Snapshot>>();\n\n constructor() {\n super();\n\n const jsBridge = (() => {\n if (options.jsBridge) return options.jsBridge;\n if (options.useBuiltInJsBridge) return new JSBridge();\n return undefined;\n })();\n\n liveController.options.jsBridge = jsBridge;\n\n // 没有传rtc实例时\n if (!options.rtc) {\n // 取指定的内部rtc类型\n if (options.rtcType) {\n if (!options.getVoiceSign) {\n throw new Error(\n 'GetVoiceSign method must be passed when using built-in RTC instances',\n );\n }\n\n const getVoiceSign =\n options.getVoiceSign ?? unimplementedGetVoiceSign;\n\n switch (options.rtcType) {\n case RTCType.RealseeVRWebViewRTC: {\n // 内置的 VRWebViewRTC\n if (!jsBridge) {\n throw new Error(\n 'JsBridge instance must be passed when using built-in VRWebViewRTC instances',\n );\n }\n liveController.options.rtc = new VRWebViewRTC({\n jsBridge,\n getVoiceSign,\n });\n break;\n }\n case RTCType.RealseeBrowserChimeRTC: {\n // 内置的 RealseeBrowserChimeRTC\n liveController.options.rtc = new BrowserRTC4Chime({\n getVoiceSign,\n logLevel: options.__debug__ ? LogLevel.DEBUG : LogLevel.ERROR,\n });\n break;\n }\n case RTCType.RealseeBrowserRTC: {\n // 内置的 RealseeBrowserRTC\n liveController.options.rtc = new BrowserRTC({\n getVoiceSign,\n });\n break;\n }\n default: {\n throw new Error('unknown built-in RTC type');\n }\n }\n }\n\n // 都不满足时取内置\n\n if (options.useBuiltInRTC) {\n if (!options.getVoiceSign) {\n throw new Error(\n 'GetVoiceSign method must be passed when using built-in RTC instances',\n );\n }\n const getVoiceSign =\n options.getVoiceSign ?? unimplementedGetVoiceSign;\n\n if (!jsBridge) {\n throw new Error(\n 'jsBridge instance must be passed when using built-in RTC instances',\n );\n }\n // vrwebview 默认\n if ((isRealseeVRWebview && (isAndroid || isIOS)) || isWxMiniProgram) {\n liveController.options.rtc = new VRWebViewRTC({\n jsBridge,\n getVoiceSign,\n });\n } else {\n // 其它终端使用\n liveController.options.rtc =\n options.builtInRTCType === BuiltInRTCType.RealseeXChimeRTC\n ? new BrowserRTC4Chime({ getVoiceSign })\n : new BrowserRTC({ getVoiceSign });\n }\n }\n }\n\n if (!liveController.options.rtc) {\n console.warn('unused rtc');\n }\n\n // 默认自动连接\n if (liveController.options.url && liveController.options.getTicket) {\n this.connect();\n }\n\n // 健康检查:WHY --> 在某些WebView特殊场景下 WebSocket.readyState 发生变化时不会出发error\\close等事件;\n // 因此,开启一个定时任务监测 WebSocket.readyState 状态的更新\n const healthCheck = ((healthCheck) => {\n if (!healthCheck) return 0;\n if (healthCheck === true) return 3000;\n\n const duration = Number(healthCheck);\n if (duration > 0) return duration;\n\n return 3000;\n })(liveController.options.healthCheck);\n\n if (healthCheck) {\n liveController.healthCheckId = setInterval(\n () => liveController.checkReadyState(this),\n healthCheck,\n );\n }\n }\n\n async setSelfInfo(userInfo: Partial<UserInfo>) {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n\n try {\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserInfo,\n userInfo,\n );\n } catch (error) {\n return error as Error;\n }\n }\n\n getFramesByKey<Key extends keyof Snapshot>(\n key: Key,\n ): Partial<Snapshot>[Key] | undefined {\n return liveController.keyframes[key];\n }\n\n sendKeyframe<Key extends keyof Snapshot>(\n key: Key,\n frame: Snapshot[Key],\n ): boolean | Error {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n liveController.keyframes[key] = frame;\n\n const liveMsg = createLiveMsg(Command.KeyframeSync, this.snapshot);\n liveController.sendMessage(liveMsg);\n return true;\n }\n\n broadcast<T1, T2>(\n data: T1,\n toUserIds: string | string[],\n timeout: number,\n ): Promise<T2> | Error {\n if (this.readyState !== WebSocketState.OPEN) {\n return new Error(\n 'The connection is not open and ready to communicate.',\n );\n }\n\n return new Promise((resolve, reject) => {\n const customEvent = createLiveMsg(Command.CustomEvent, data, toUserIds);\n const front_request_id = customEvent.front_request_id;\n\n liveController.sendMessage(customEvent);\n\n const timeoutId = timeout\n ? setTimeout(() => {\n reject(new Error('RESPONSE TIMEOUT'));\n this.off('broadcast', broadcast);\n }, timeout)\n : undefined;\n\n const broadcast = (\n data: Record<string, any>,\n frontRequestId: string,\n ) => {\n if (frontRequestId !== front_request_id) return;\n this.off('broadcast', broadcast);\n resolve(data as T2);\n if (timeoutId) clearInterval(timeoutId);\n };\n this.on('broadcast', broadcast);\n });\n }\n\n async updateStatus(\n evtType: BuiltinEventType,\n atnType: BuiltinActionType,\n status: Record<string, any>,\n toUserIds?: string | string[],\n ) {\n // TODO 统一规则,不能联合类型\n if (this.readyState !== WebSocketState.OPEN) {\n return false;\n }\n const data = Object.assign(\n { event_type: evtType, action: atnType },\n { data: status },\n );\n const liveMsg = createLiveMsg(Command.BuiltinMsg, data, toUserIds);\n liveController.sendMessage(liveMsg);\n return true;\n }\n\n // 仅用于用户自己的麦克风控制\n async toggleMicro(microStatus: boolean) {\n if (!this.selfInfo?.permission?.control_own_micro) return false;\n\n await this.$RTC.toggleMicro(microStatus);\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: microStatus ? MicroStatus.OPEN : MicroStatus.CLOSE,\n },\n [],\n );\n }\n\n async forbidMicro(microStatus: MicroStatus, toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserMicro &&\n !liveController.options.canForbidUserMicro(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.control_other_micro) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserMicroStatus,\n {\n status: microStatus,\n },\n toUserIds,\n );\n }\n\n /**\n * @deprecated 暂不可用\n */\n async forbidSync(sync: boolean, toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserSync &&\n !liveController.options.canForbidUserSync(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.control_other_sync) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserPermission,\n { sync_frame: sync },\n toUserIds,\n );\n }\n\n async kick(toUserIds: string | string[]) {\n if (\n liveController.options.canForbidUserKick &&\n !liveController.options.canForbidUserKick(toUserIds)\n ) {\n return false;\n }\n\n if (!this.selfInfo?.permission?.change_other_status) {\n return false;\n }\n\n return await this.updateStatus(\n BuiltinEventType.UserChange,\n BuiltinActionType.UserStatus,\n {\n status: 'KICK_OUT',\n },\n toUserIds,\n );\n }\n\n async exit() {\n /** 退出强制关闭语音(?) */\n await this.$RTC.quit();\n await this.updateStatus(\n BuiltinEventType.RoomChange,\n BuiltinActionType.RoomClose,\n {},\n );\n return liveController.dispose();\n }\n\n async connect(\n options: {\n url?: string;\n force?: boolean;\n getTicket?: () => Promise<string>;\n } = {},\n ) {\n // 连接 WebSocket 前验证麦克风权限\n const microAuth = await this.$RTC.detectMicro();\n if (!microAuth) {\n const error = new Error('系统监测麦克风未授权~');\n this.emit('ws.error', { type: WebSocketErrorType.MicroAuth, error });\n return error;\n }\n\n // WebSocket 正在连接中,规避重复连接\n if (liveController.connecting) {\n const error = new Error('WebSocket 正在连接中,请勿重复连接 ...');\n this.emit('ws.error', {\n type: WebSocketErrorType.DuplicateConnect,\n error,\n });\n return error;\n }\n\n // 非强制连接场景下,如果已经完成 WebSocket 连接则不执行后续逻辑\n const { force } = options;\n\n if (!force) {\n if (\n this.readyState === WebSocketState.CONNECTING ||\n this.readyState === WebSocketState.OPEN\n ) {\n return true;\n }\n }\n\n // WebSocket URL 逻辑\n if (options.url) {\n liveController.options.url = options.url;\n }\n\n if (options.getTicket) {\n liveController.options.getTicket = options.getTicket;\n }\n\n if (\n !liveController.options.url ||\n !liveController.options.url.startsWith('ws')\n ) {\n const error = new Error(\n `WebSocket URL 未配置或格式不合法:\"${liveController.options.url}\"`,\n );\n this.emit('ws.error', { type: WebSocketErrorType.IllegalURL, error });\n return error;\n }\n\n if (!liveController.options.getTicket) {\n const error = new Error(`getTicket() 未配置!`);\n this.emit('ws.error', { type: WebSocketErrorType.IllegalArgs, error });\n return error;\n }\n\n // 连接锁\n liveController.connecting = true;\n // 连接前销毁之前绑定的事件\n liveController.disposeWebSocket();\n this.emit('ws.beforeConnect');\n\n const url =\n force || options.url || !this.url\n ? appendUri(liveController.options.url!, {\n ticket: await liveController.options.getTicket(),\n force: Number(!!force),\n })\n : this.url;\n\n liveController.webSocket = new WebSocket(url);\n liveController.onEvtOpnListener = () => {\n liveController.checkReadyState(this);\n this.emit('ws.afterConnect');\n };\n\n liveController.onEvtMsgListener = (evt: MessageEvent) => {\n liveController.checkReadyState(this);\n try {\n const liveMsg = parseLiveMsg(evt.data);\n if (liveMsg === false) return;\n liveController.handleMessage(liveMsg as LiveMsg, this);\n } catch (error) {\n // 未知错误\n this.emit('ws.error', {\n type: WebSocketErrorType.Unknown,\n error,\n target: evt,\n });\n }\n };\n\n liveController.onEvtErrListener = (evt: Event) => {\n live.emit('ws.error', { type: WebSocketErrorType.Error, target: evt });\n liveController.checkReadyState(this);\n };\n\n liveController.onEvtCLEListener = (evt: CloseEvent) => {\n liveController.checkReadyState(this);\n const code = Number(evt.code);\n if (code === 1000) return;\n // 异常退出不一定会触发'error'事件,根据 evt.code 一些类型的退出也算是 error 行为\n const errMsg = parseWSClsErr(code);\n live.emit('ws.error', {\n target: evt,\n type: WebSocketErrorType.Close,\n closeError: errMsg,\n });\n };\n\n liveController.webSocket.addEventListener(\n 'open',\n liveController.onEvtOpnListener,\n );\n liveController.webSocket.addEventListener(\n 'message',\n liveController.onEvtMsgListener,\n );\n liveController.webSocket.addEventListener(\n 'error',\n liveController.onEvtErrListener,\n );\n liveController.webSocket.addEventListener(\n 'close',\n liveController.onEvtCLEListener,\n );\n\n return await new Promise<boolean | Error>((resolve, reject) => {\n const success = () => {\n resolve(true);\n liveController.connecting = false;\n this.off('ws.error', fail);\n };\n const fail = (error: WebSocketError) => {\n reject(\n error.error\n ? error.error\n : new Error('WebSocket connection failed!'),\n );\n liveController.connecting = false;\n this.off('ws.afterConnect', success);\n };\n this.once('ws.afterConnect', success);\n this.once('ws.error', fail);\n });\n }\n\n async revoke() {\n return true;\n }\n }\n const live = new LiveTpl();\n\n // 如果是调试环境则将内部状态暴露出来\n if (options.__debug__) {\n Object.assign(live, { __controller__: liveController });\n Object.assign(window, { $live: live });\n }\n\n return live;\n}\n","import React from 'react';\nimport {\n KeyframeTypes,\n LiveEventType,\n WebSocketEventType,\n} from '../typings/live/EventType';\nimport { Live, LiveActionReactCallback } from '../typings/live/Live';\nimport {\n MicroStatus,\n BuiltinEventType,\n BuiltinActionType,\n} from '../typings/live/LiveMsg';\nimport { LiveOptions } from '../typings/live/LiveOptions';\nimport { UserInfo } from '../typings/live/UserInfo';\nimport { WebSocketState } from '../typings/live/WebSocket';\nimport {\n LiveReact,\n LiveProviderPropTypes,\n RTCActionReactCallback,\n} from '../typings/react';\nimport { RTCType, RTCEventType } from '../typings/rtc';\nimport { createLive } from './createLive';\n\n/**\n * 创建 {@link LiveReact} 实例,并提供 `React` 技术栈相关工具链。\n */\nexport function createLiveReact<Snapshot>(\n options: LiveOptions,\n): LiveReact<Snapshot> {\n const LiveContext = React.createContext<Live<Snapshot> | null>(null);\n const live = createLive<Snapshot>(options);\n const jsBridge = live.jsBridge\n \n function LiveProvider(props: LiveProviderPropTypes<Snapshot>) {\n return (\n <LiveContext.Provider value={props.live || live}>\n {props.children}\n </LiveContext.Provider>\n );\n }\n\n function useLiveInstance() {\n const context = React.useContext(LiveContext);\n if (!context) throw new Error('LiveProvider never found.');\n return context;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function unsafe__useLiveInstance() {\n return useLiveInstance();\n }\n\n function useRTCInstance() {\n const live = useLiveInstance();\n return live.$RTC;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function unsafe__useRTCInstance() {\n return useRTCInstance();\n }\n\n function useConnect() {\n const live = useLiveInstance();\n return async (options?: {\n force?: boolean;\n url?: string;\n getTicket?: () => Promise<string>;\n }) => await live.connect(options);\n }\n\n function useCurrentWebSocketUrl() {\n const live = useLiveInstance();\n const [state, setState] = React.useState<string | undefined>(undefined);\n\n React.useEffect(() => {\n const onWSBeforeConnect = () => setState(live.url);\n live.on('ws.beforeConnect', onWSBeforeConnect);\n return () => live.off('ws.beforeConnect', onWSBeforeConnect);\n }, [live]);\n\n return state;\n }\n\n function useKeyframeUpdateCallback<K extends keyof KeyframeTypes<Snapshot>>(\n name: K,\n callback: (\n ...args: Parameters<KeyframeTypes<Snapshot>[K]>\n ) => ReturnType<KeyframeTypes<Snapshot>[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dependencyList: React.DependencyList = [live, name, ...deps];\n const dispose = () => live.keyframes.off(name, callback);\n React.useEffect(() => {\n live.keyframes.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n function useLiveAction() {\n const live = useLiveInstance();\n\n const toggleMicro = React.useCallback(\n (microStatus: boolean) => live.toggleMicro(microStatus),\n [live],\n );\n\n const broadcast = React.useCallback(\n (data: Record<string, any>, toUserIds: string | string[], timeout = 0) =>\n live.broadcast(data, toUserIds, timeout),\n [live],\n );\n\n const exit = React.useCallback(() => live.exit(), [live]);\n\n const kick = React.useCallback(\n (toUserIds: string | string[]) => live.kick(toUserIds),\n [live],\n );\n\n const forbidMicro = React.useCallback(\n (micro: MicroStatus, toUserIds?: string | string[] | undefined) =>\n live.forbidMicro(micro, toUserIds),\n [live],\n );\n\n // const forbidSync = React.useCallback(\n // (sync: boolean, toUserIds?: string | string[] | undefined) =>\n // live.forbidSync(sync, toUserIds),\n // [live],\n // );\n\n const getFramesByKey = React.useCallback(\n (key: keyof Snapshot) => live.getFramesByKey(key),\n [live],\n );\n\n const sendKeyframe = React.useCallback(\n (key: keyof Snapshot, frame: Snapshot[keyof Snapshot]) =>\n live.sendKeyframe(key, frame),\n [live],\n );\n\n const setSelfInfo = React.useCallback(\n (userInfo: Partial<UserInfo>) => live.setSelfInfo(userInfo),\n [live],\n );\n\n const updateStatus = React.useCallback(\n (\n evtType: BuiltinEventType,\n atnType: BuiltinActionType,\n status: Record<string, any>,\n toUserIds?: string | string[],\n ) => live.updateStatus(evtType, atnType, status, toUserIds),\n [live],\n );\n return {\n broadcast,\n exit,\n kick,\n toggleMicro,\n forbidMicro,\n // forbidSync,\n sendKeyframe,\n getFramesByKey,\n setSelfInfo,\n updateStatus,\n } as LiveActionReactCallback<Snapshot>;\n }\n\n function useKeyframe<K extends keyof Snapshot>(key: K) {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<Snapshot[K] | undefined>(\n live.getFramesByKey(key),\n );\n\n React.useEffect(() => {\n const onUpdate = (nextKeyframes: Snapshot[K]) =>\n updateState(nextKeyframes);\n\n const evtName = key as unknown as keyof KeyframeTypes<Snapshot>;\n const callback = onUpdate as unknown as (\n ...args: Parameters<\n KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]\n >\n ) => ReturnType<KeyframeTypes<Snapshot>[keyof KeyframeTypes<Snapshot>]>;\n live.keyframes.on(evtName, callback);\n return () => live.keyframes.off(evtName, callback);\n }, [live]);\n\n const setState = React.useCallback(\n (frame: Snapshot[K]) => live.sendKeyframe(key, frame),\n [live],\n );\n type CallbackType = [\n frame: Snapshot[K] | undefined,\n setFrame: (frame: Snapshot[K]) => boolean | Error,\n ];\n return [state, setState] as CallbackType;\n }\n\n function useLiveEventCallback<K extends keyof LiveEventType<Snapshot>>(\n name: K,\n callback: (\n ...args: Parameters<LiveEventType<Snapshot>[K]>\n ) => ReturnType<LiveEventType<Snapshot>[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n\n React.useEffect(() => {\n live.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n /**\n * @deprecated\n * @returns\n */\n function useReadyState() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<WebSocketState>(\n live.readyState,\n );\n React.useEffect(() => {\n const readyStateUpdate = (readyState: WebSocketState) =>\n updateState(readyState);\n live.on('ws.readyStateUpdate', readyStateUpdate);\n\n return () => live.off('ws.readyStateUpdate', readyStateUpdate);\n }, [live]);\n\n return state;\n }\n\n function useRTCAction() {\n const live = useLiveInstance();\n\n const join = React.useCallback(\n (options: {\n voiceId: string;\n userId: string;\n roomId: string;\n type: RTCType;\n }) => live.$RTC.join(options),\n [live],\n );\n const quit = React.useCallback(() => live.$RTC.quit(), [live]);\n const shock = React.useCallback(() => live.$RTC.shock?.(), [live]);\n const toggleMicro = React.useCallback(\n (flag?: boolean | undefined) => live.$RTC.toggleMicro(flag),\n [live],\n );\n const detectMicro = React.useCallback(\n () => live.$RTC.detectMicro(),\n [live],\n );\n\n return {\n join,\n quit,\n shock,\n toggleMicro,\n detectMicro,\n } as RTCActionReactCallback;\n }\n\n function useRTCEventCallback<K extends keyof RTCEventType>(\n name: K,\n callback: (\n ...args: Parameters<RTCEventType[K]>\n ) => ReturnType<RTCEventType[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.$RTC.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n React.useEffect(() => {\n live.$RTC.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n function useSelfInfo() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<Partial<UserInfo>>(\n live.selfInfo || {},\n );\n\n const selfInfoUpdate = (userInfo: Partial<UserInfo>) =>\n updateState(userInfo);\n\n React.useEffect(() => {\n live.on('selfInfoUpdate', selfInfoUpdate);\n return () => live.off('selfInfoUpdate', selfInfoUpdate);\n }, [live]);\n\n const setState = React.useCallback(\n async (userInfo: Partial<UserInfo>) => {\n return await live.setSelfInfo(userInfo);\n },\n [live],\n );\n\n type CallbackType = [\n Partial<UserInfo>,\n (userInfo: Partial<UserInfo>) => Promise<boolean | Error>,\n ];\n return [state, setState] as CallbackType;\n }\n\n function useSnapshot() {\n const live = useLiveInstance();\n const [state, setState] = React.useState<Partial<Snapshot>>(live.snapshot);\n\n React.useEffect(() => {\n const onKeyframes = (keyframes: Partial<Snapshot>) => setState(keyframes);\n live.on('keyframes', onKeyframes);\n return () => live.off('keyframes', onKeyframes);\n });\n\n return state;\n }\n function useUserList() {\n const live = useLiveInstance();\n const [state, updateState] = React.useState<UserInfo[]>(live.userList);\n\n const userListUpdate = (userList: UserInfo[]) => updateState(userList);\n\n React.useEffect(() => {\n live.on('userListUpdate', userListUpdate);\n return () => live.off('userListUpdate', userListUpdate);\n }, [live]);\n\n return state;\n }\n\n /**\n *\n * @param name\n * @param callback\n * @param deps\n * @returns\n * @deprecated\n */\n function useWebSocketEventCallback<K extends keyof WebSocketEventType>(\n name: K,\n callback: (\n ...args: Parameters<WebSocketEventType[K]>\n ) => ReturnType<WebSocketEventType[K]>,\n deps: React.DependencyList = [],\n ) {\n const live = useLiveInstance();\n const dispose = () => live.off(name, callback);\n const dependencyList: React.DependencyList = [live, name, ...deps];\n\n React.useEffect(() => {\n live.on(name, callback);\n return dispose;\n }, dependencyList);\n\n return dispose;\n }\n\n return {\n live,\n jsBridge,\n LiveProvider,\n unsafe__useLiveInstance,\n unsafe__useRTCInstance,\n useCurrentWebSocketUrl,\n useConnect,\n useKeyframe,\n useKeyframeUpdateCallback,\n useLiveAction,\n useLiveEventCallback,\n useReadyState,\n useRTCAction,\n useRTCEventCallback,\n useSelfInfo,\n useSnapshot,\n useUserList,\n useWebSocketEventCallback,\n };\n}\n"],"names":[],"mappings":"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"}