@realsee/live 0.3.0-alpha.4 → 0.4.0-alpha.3

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.
Files changed (147) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/live/controller.d.ts +43 -0
  3. package/{lib → dist/live}/createLive.d.ts +6 -6
  4. package/dist/live/createLiveReact.d.ts +6 -0
  5. package/dist/realsee-live.cjs.development.js +1813 -0
  6. package/dist/realsee-live.cjs.development.js.map +1 -0
  7. package/dist/realsee-live.cjs.js +7 -0
  8. package/dist/realsee-live.cjs.production.js +2 -0
  9. package/dist/realsee-live.cjs.production.js.map +1 -0
  10. package/dist/realsee-live.esm.js +1797 -0
  11. package/dist/realsee-live.esm.js.map +1 -0
  12. package/dist/realsee-live.umd.development.js +52136 -0
  13. package/dist/realsee-live.umd.development.js.map +1 -0
  14. package/dist/realsee-live.umd.production.js +2 -0
  15. package/dist/realsee-live.umd.production.js.map +1 -0
  16. package/{lib/RTC → dist/rtc}/BrowserRTC.d.ts +29 -30
  17. package/{lib/RTC → dist/rtc}/BrowserRTC4Chime.d.ts +55 -53
  18. package/dist/rtc/CoreRTC.d.ts +23 -0
  19. package/{lib/RTC → dist/rtc}/VRWebViewRTC.d.ts +22 -23
  20. package/dist/rtc/index.d.ts +5 -0
  21. package/{lib/typings/Chime → dist/typings/chime}/AttendeeResponse.d.ts +5 -5
  22. package/{lib/typings/Chime → dist/typings/chime}/MeetingResponse.d.ts +12 -12
  23. package/{lib/typings/Chime → dist/typings/chime}/MeetingSessionConfigurationOptions.d.ts +16 -16
  24. package/dist/typings/chime/index.d.ts +3 -0
  25. package/dist/typings/index.d.ts +4 -0
  26. package/{lib/typings → dist/typings/live}/EventType.d.ts +90 -89
  27. package/{lib/typings → dist/typings/live}/GetVoiceSign.d.ts +17 -11
  28. package/{lib/typings → dist/typings/live}/Live.d.ts +123 -122
  29. package/{lib/typings → dist/typings/live}/LiveMsg.d.ts +119 -119
  30. package/{lib/typings → dist/typings/live}/LiveOptions.d.ts +65 -46
  31. package/{lib/typings → dist/typings/live}/RoomInfo.d.ts +13 -13
  32. package/{lib/typings → dist/typings/live}/UserInfo.d.ts +87 -87
  33. package/dist/typings/live/UserVolume.d.ts +7 -0
  34. package/{lib/typings → dist/typings/live}/WebSocket.d.ts +78 -78
  35. package/dist/typings/live/index.d.ts +9 -0
  36. package/{lib/createLiveReact.d.ts → dist/typings/react/LiveReact.d.ts} +162 -160
  37. package/dist/typings/react/RTCActionReactCallback.d.ts +2 -0
  38. package/dist/typings/react/index.d.ts +2 -0
  39. package/dist/typings/rtc/VRWebViewRTCOptions.d.ts +6 -0
  40. package/{lib/typings/RTCEventType.d.ts → dist/typings/rtc/eventType.d.ts} +29 -35
  41. package/dist/typings/rtc/index.d.ts +5 -0
  42. package/{lib/typings/RTCJoinedInfo.d.ts → dist/typings/rtc/joinedInfo.d.ts} +34 -28
  43. package/{lib/typings/RTCProtocol.d.ts → dist/typings/rtc/protocol.d.ts} +53 -42
  44. package/dist/typings/rtc/type.d.ts +8 -0
  45. package/{lib/shared-utils → dist/utils}/appendUri.d.ts +1 -1
  46. package/dist/utils/clientDetector.d.ts +4 -0
  47. package/{lib/shared-utils → dist/utils}/equal.d.ts +10 -11
  48. package/{lib/shared-utils/Subscribe.d.ts → dist/utils/subscribe.d.ts} +75 -76
  49. package/{lib/shared-utils → dist/utils}/uuid.d.ts +4 -4
  50. package/package.json +21 -33
  51. package/docs/.nojekyll +0 -1
  52. package/docs/assets/custom.css +0 -43
  53. package/docs/assets/highlight.css +0 -127
  54. package/docs/assets/icons.css +0 -1043
  55. package/docs/assets/icons.png +0 -0
  56. package/docs/assets/icons@2x.png +0 -0
  57. package/docs/assets/main.js +0 -52
  58. package/docs/assets/search.js +0 -1
  59. package/docs/assets/style.css +0 -1413
  60. package/docs/assets/widgets.png +0 -0
  61. package/docs/assets/widgets@2x.png +0 -0
  62. package/docs/classes/RTCProtocol.BrowserRTC.html +0 -60
  63. package/docs/classes/RTCProtocol.BrowserRTC4Chime.html +0 -66
  64. package/docs/classes/RTCProtocol.RTCExample.html +0 -62
  65. package/docs/classes/RTCProtocol.VRWebViewRTC.html +0 -60
  66. package/docs/classes/shared_utils.Subscribe.html +0 -56
  67. package/docs/enums/RTCProtocol.RTCJoinedInfoCodeEnum.html +0 -9
  68. package/docs/enums/RTCProtocol.RTCType.html +0 -1
  69. package/docs/enums/live.BuiltinActionType.html +0 -15
  70. package/docs/enums/live.BuiltinEventType.html +0 -7
  71. package/docs/enums/live.Command.html +0 -7
  72. package/docs/enums/live.MemUserStatus.html +0 -1
  73. package/docs/enums/live.MicroStatus.html +0 -3
  74. package/docs/enums/live.UserStatus.html +0 -9
  75. package/docs/enums/live.WebSocketCloseError.html +0 -19
  76. package/docs/enums/live.WebSocketErrorType.html +0 -1
  77. package/docs/enums/live.WebSocketState.html +0 -13
  78. package/docs/index.html +0 -382
  79. package/docs/interfaces/RTCProtocol.GetVoiceSignReturnType.html +0 -1
  80. package/docs/interfaces/RTCProtocol.RTCJoinedInfo.html +0 -1
  81. package/docs/interfaces/RTCProtocol.RTCProtocol-1.html +0 -60
  82. package/docs/interfaces/RTCProtocol.VRWebViewRTCOptions.html +0 -1
  83. package/docs/interfaces/live.Live.html +0 -119
  84. package/docs/interfaces/live.LiveOptions.html +0 -22
  85. package/docs/interfaces/live.LiveReact.html +0 -52
  86. package/docs/modules/RTCProtocol.html +0 -17
  87. package/docs/modules/live.html +0 -103
  88. package/docs/modules/shared_utils.html +0 -10
  89. package/docs/modules.html +0 -1
  90. package/lib/RTC/BrowserRTC.js +0 -169
  91. package/lib/RTC/BrowserRTC.js.map +0 -1
  92. package/lib/RTC/BrowserRTC4Chime.js +0 -299
  93. package/lib/RTC/BrowserRTC4Chime.js.map +0 -1
  94. package/lib/RTC/VRWebViewRTC.js +0 -125
  95. package/lib/RTC/VRWebViewRTC.js.map +0 -1
  96. package/lib/RTC/index.d.ts +0 -22
  97. package/lib/RTC/index.js +0 -50
  98. package/lib/RTC/index.js.map +0 -1
  99. package/lib/createLive.js +0 -590
  100. package/lib/createLive.js.map +0 -1
  101. package/lib/createLiveReact.js +0 -212
  102. package/lib/createLiveReact.js.map +0 -1
  103. package/lib/index.d.ts +0 -2
  104. package/lib/index.js +0 -8
  105. package/lib/index.js.map +0 -1
  106. package/lib/shared-utils/Subscribe.js +0 -134
  107. package/lib/shared-utils/Subscribe.js.map +0 -1
  108. package/lib/shared-utils/appendUri.js +0 -13
  109. package/lib/shared-utils/appendUri.js.map +0 -1
  110. package/lib/shared-utils/equal.js +0 -92
  111. package/lib/shared-utils/equal.js.map +0 -1
  112. package/lib/shared-utils/uuid.js +0 -17
  113. package/lib/shared-utils/uuid.js.map +0 -1
  114. package/lib/typings/Chime/AttendeeResponse.js +0 -3
  115. package/lib/typings/Chime/AttendeeResponse.js.map +0 -1
  116. package/lib/typings/Chime/MeetingResponse.js +0 -3
  117. package/lib/typings/Chime/MeetingResponse.js.map +0 -1
  118. package/lib/typings/Chime/MeetingSessionConfigurationOptions.js +0 -3
  119. package/lib/typings/Chime/MeetingSessionConfigurationOptions.js.map +0 -1
  120. package/lib/typings/EventType.js +0 -3
  121. package/lib/typings/EventType.js.map +0 -1
  122. package/lib/typings/GetVoiceSign.js +0 -3
  123. package/lib/typings/GetVoiceSign.js.map +0 -1
  124. package/lib/typings/Live.js +0 -3
  125. package/lib/typings/Live.js.map +0 -1
  126. package/lib/typings/LiveMsg.js +0 -111
  127. package/lib/typings/LiveMsg.js.map +0 -1
  128. package/lib/typings/LiveOptions.js +0 -3
  129. package/lib/typings/LiveOptions.js.map +0 -1
  130. package/lib/typings/RTCEventType.js +0 -3
  131. package/lib/typings/RTCEventType.js.map +0 -1
  132. package/lib/typings/RTCJoinedInfo.js +0 -23
  133. package/lib/typings/RTCJoinedInfo.js.map +0 -1
  134. package/lib/typings/RTCProtocol.js +0 -9
  135. package/lib/typings/RTCProtocol.js.map +0 -1
  136. package/lib/typings/RoomInfo.js +0 -3
  137. package/lib/typings/RoomInfo.js.map +0 -1
  138. package/lib/typings/UserInfo.js +0 -31
  139. package/lib/typings/UserInfo.js.map +0 -1
  140. package/lib/typings/VRWebViewRTCOptions.d.ts +0 -6
  141. package/lib/typings/VRWebViewRTCOptions.js +0 -3
  142. package/lib/typings/VRWebViewRTCOptions.js.map +0 -1
  143. package/lib/typings/WebSocket.js +0 -107
  144. package/lib/typings/WebSocket.js.map +0 -1
  145. package/umd/RTCProtocol.543610f0.js +0 -1
  146. package/umd/createLive.1ecf7dd4.js +0 -1
  147. package/umd/createLiveReact.9075a8fd.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realsee-live.cjs.development.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/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","// 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","/**\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 { 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 { RTCType } from '../typings/rtc/type';\nimport { appendUri } from '../utils/appendUri';\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 keyframes = new Subscribe<KeyframeTypes<Snapshot>>();\n\n constructor() {\n super();\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 (!options.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: options.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 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\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 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":["RTCType","TRTC","DefaultModality","ConsoleLogger","LogLevel","DefaultDeviceController","MeetingSessionConfiguration","DefaultMeetingSession","MeetingSessionStatusCode","RTCJoinedInfoCodeEnum","Command","BuiltinEventType","BuiltinActionType","MicroStatus","UserStatus","MemUserStatus","WebSocketState","WebSocketErrorType","WebSocketCloseError","React"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === 'production') {
4
+ module.exports = require('./realsee-live.cjs.production.js');
5
+ } else {
6
+ module.exports = require('./realsee-live.cjs.development.js');
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("amazon-chime-sdk-js"),t=require("trtc-js-sdk"),o=require("react");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=r(t),s=r(o);const n=Symbol("$$REALSEE_LIVE_EVENT$$");function a(e){return e[n]||(e[n]={}),e[n]}class c{hasListener(e){const t=a(this);return t&&t[e]&&t[e].length>0}on(e,t,o){const r=a(this);return r[e]||(r[e]=[]),r[e].push([t,o||!1]),()=>this.off(e,t)}once(e,t){return this.on(e,t,!0)}off(e,t){if(void 0===e)return void((o=this)[n]||delete o[n]);var o;const r=a(this);if(r[e]||(r[e]=[]),void 0===t)return void(r[e].length=0);let i=0;for(;i<r[e].length&&r[e][i][0]!==t;i++);i<r[e].length&&r[e].splice(i,1)}emit(e,...t){let o=!1;const r=a(this)[e]||[];for(let i of r.slice()){const[r,s=!1]=i,n=r(...t);s&&this.off(e,r),!1===n&&(o=!0)}return o}}class u extends c{}var d,l,h,p,m,f,g,v,S,E,C;function y(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function b(){return(y()+y()+"-"+y()+"-4"+y().substr(0,3)+"-"+y()+"-"+y()+y()+y()).toLowerCase()}exports.RTCType=void 0,(d=exports.RTCType||(exports.RTCType={})).RealseeBrowserRTC="RealseeBrowserRTC",d.RealseeVRWebViewRTC="RealseeVRWebViewRTC",d.RealseeBrowserChimeRTC="RealseeBrowserChimeRTC";class k extends u{constructor(e){super(),this.type=exports.RTCType.RealseeBrowserRTC,this.joined=!1,this.micro=!1,this.voiceId="",this._getVoiceSign=()=>{throw new Error("方法 getVoiceSign 未实现")},this.$dom=document.createElement("div"),this._trtc={client:null,stream:null},this.join=async e=>{var t;this.emit("joinWillStart");const o=await this._getVoiceSign({voiceId:e.voiceId,roomId:e.roomId,userId:e.userId});this._trtc.client=i.default.createClient({mode:"rtc",...o}),null===(t=this._trtc.client)||void 0===t||t.enableAudioVolumeEvaluation(),this._registerRtcEvent();let r=await new Promise((t=>{var o;null===(o=this._trtc.client)||void 0===o||o.join({roomId:Number(e.voiceId)}).then((()=>t(!0))).catch((()=>t(!1)))}));return this.joined=r,!!r&&(this._trtc.stream=i.default.createStream({userId:o.userId,audio:!0,video:!1}),r=await new Promise((e=>{var t;null===(t=this._trtc.stream)||void 0===t||t.initialize().then((()=>e(!0))).catch((()=>e(!1)))})),r=await new Promise((e=>{var t;null===(t=this._trtc.client)||void 0===t||t.publish(this._trtc.stream).then((()=>e(!0))).catch((()=>e(!1)))})),this.joined=r,this.joined&&this.emit("joined"),r)},this._handleStreamAdded=e=>{var t;const o=e.stream;console.log("远端流增加: "+o.getId()),null===(t=this._trtc.client)||void 0===t||t.subscribe(o)},this._handleStreamSubscribed=e=>{const t=e.stream;console.log("远端流订阅成功:"+t.getId());const o=`rs-rtc-remote_stream-${t.getId()}`,r=document.createElement("div");r.id=o,this.$dom.appendChild(r),t.play(o)},this._getVoiceSign=e.getVoiceSign,this._initParentDom()}_initParentDom(){this.$dom.id=`rs-rtc-${b()}`,this.$dom.style.display="none",document.body.appendChild(this.$dom)}quit(){return new Promise((async e=>{var t,o;this.joined=!1,this._trtc.stream&&(await(null===(t=this._trtc.client)||void 0===t?void 0:t.unpublish(this._trtc.stream)),this._trtc.stream.stop(),this._trtc.stream.close(),this._trtc.stream=null),null===(o=this._trtc.client)||void 0===o||o.leave().then((()=>this._trtc.client=null)).then((()=>e(!0))).catch((()=>e(!1)))}))}detectMicro(){return new Promise((e=>{const t={audio:!0,video:!1};try{navigator.mediaDevices.getUserMedia(t).then((()=>e(!0))).catch((()=>e(!1)))}catch(t){console.error(t),e(!1)}}))}toggleMicro(e){var t,o,r,i;return Promise.resolve((e?null===(o=null===(t=this._trtc)||void 0===t?void 0:t.stream)||void 0===o?void 0:o.unmuteAudio():null===(i=null===(r=this._trtc)||void 0===r?void 0:r.stream)||void 0===i?void 0:i.muteAudio())||!1)}shock(){throw new Error("Method not implemented.")}_registerRtcEvent(){var e,t,o,r;null===(e=this._trtc.client)||void 0===e||e.on("stream-added",this._handleStreamAdded),null===(t=this._trtc.client)||void 0===t||t.on("stream-subscribed",this._handleStreamSubscribed),null===(o=this._trtc.client)||void 0===o||o.on("audio-volume",(e=>this.emit("userVolumes",[{userId:e.userId,audioVolume:e.audioVolume}]))),null===(r=this._trtc.client)||void 0===r||r.on("error",(e=>this.emit("error",e)))}}class w extends u{constructor(t){super(),this.type=exports.RTCType.RealseeBrowserChimeRTC,this.joined=!1,this.micro=!1,this.voiceId="",this.userId="",this.deviceChangeObserver={},this.audioVideoObserver={},this._getVoiceSign=()=>{throw new Error("方法 getVoiceSign 未实现")},this.$dom=document.createElement("div"),this.$audio=document.createElement("audio"),this._initDom=()=>{this.$audio.id=`rs-rtc-${b()}`,this.$dom.id=`rs-rtc-${b()}`,this.$dom.appendChild(this.$audio),document.body.appendChild(this.$dom)},this.initObservers=()=>{this.deviceChangeObserver={audioInputsChanged:e=>{null==e||e.forEach((e=>{this.logger.info(`Device ID: ${e.deviceId} Microphone: ${e.label}`)}))},audioOutputsChanged:e=>{this.logger.info(`Audio outputs updated: ${e}`)},videoInputsChanged:e=>{this.logger.info(`Video inputs updated: ${e}`)},audioInputMuteStateChanged:(e,t)=>{this.logger.info(`Device ${e.toString()} ${t?"is muted in hardware":"is not muted"}`)}},this.audioVideoObserver={audioVideoDidStart:()=>{this.logger.info("Started")},audioVideoDidStop:e=>{this.logger.info(`Stopped with a session status code: ${e.statusCode()}`)},audioVideoDidStartConnecting:e=>{e&&this.logger.info("Attempting to reconnect")}}},this._registerRtcEvent=()=>{var t,o,r,i,s,n;const a=(null===(r=null===(o=null===(t=this.meetingSession)||void 0===t?void 0:t.configuration)||void 0===o?void 0:o.credentials)||void 0===r?void 0:r.attendeeId)||"";if(a){const t=new Map,o=()=>{const e=[];return t.forEach(((t,o)=>{e.push({userId:t.userId,volume:t.muted||0===t.signalStrength||!Boolean(t.volume)?0:t.volume})})),e};null===(i=this.meetingSession)||void 0===i||i.audioVideo.realtimeSubscribeToAttendeeIdPresence(((r,i,s)=>{var n;if(!i)return t.delete(r),void this.emit("userVolumes",o());null===(n=this.meetingSession)||void 0===n||n.audioVideo.realtimeSubscribeToVolumeIndicator(r,((r,i,n,a)=>{new e.DefaultModality(r).base()===r&&(t.set(r,{userId:s||r,volume:i,muted:n,signalStrength:a}),this.emit("userVolumes",o()))}))})),null===(s=this.meetingSession)||void 0===s||s.audioVideo.realtimeSubscribeToVolumeIndicator(a,((t,o,r,i)=>{new e.DefaultModality(t).base()===t&&null!==i&&1!==i&&this.emit("weakNetwork")})),null===(n=this.meetingSession)||void 0===n||n.audioVideo.realtimeSubscribeToFatalError((e=>this.emit("error",e)))}},this._getVoiceSign=t.getVoiceSign,this._initDom(),this.logger=new e.ConsoleLogger("WebRTCLogger",t.logLevel||e.LogLevel.OFF),this.deviceController=new e.DefaultDeviceController(this.logger),this.initObservers()}async join(t){return new Promise((async(o,r)=>{var i;this.emit("joinWillStart");try{const{sdkAppId:r,userId:s,roomId:n,userSig:a}=await this._getVoiceSign({...t,roomId:t.roomId||0});this.userId=s;const{attendence:c,vendor_wrapper:u}=JSON.parse(decodeURIComponent(a)),d=new e.MeetingSessionConfiguration({Meeting:u},{Attendee:{ExternalUserId:c.external_user_id,AttendeeId:c.attendee_id,JoinToken:c.join_token}});this.meetingSession=new e.DefaultMeetingSession(d,this.logger,this.deviceController),this._registerRtcEvent(),this.meetingSession.audioVideo.addDeviceChangeObserver(this.deviceChangeObserver),this.meetingSession.audioVideo.addObserver(this.audioVideoObserver),this.meetingSession.audioVideo.bindAudioElement(this.$audio);const l={audioVideoDidStart:()=>{var e;null===(e=this.meetingSession)||void 0===e||e.audioVideo.realtimeMuteLocalAudio(),this.joined=!0,this.emit("joined"),o(!0)},audioVideoDidStop:()=>{this.joined=!1,o(!1)}};this.meetingSession.audioVideo.addObserver(l);const h=await this.deviceController.listAudioInputDevices(!0),p=h.find((e=>"default"===e.deviceId)),m=h.find((e=>""!==e.deviceId));this.audioInput=p||m,await this.meetingSession.audioVideo.chooseVideoInputDevice(null),await this.meetingSession.audioVideo.chooseAudioInputDevice((null===(i=this.audioInput)||void 0===i?void 0:i.deviceId)||"default"),this.meetingSession.audioVideo.start()}catch(e){this.emit("error",e),this.logger.error(e.message),o(!1)}}))}quit(){return new Promise(((t,o)=>{var r,i;this.joined=!1;const s={audioVideoDidStop:o=>{const r=o.statusCode();r===e.MeetingSessionStatusCode.Left?(this.logger.info("You left the session"),t(!0)):(this.logger.info(`Stopped with a session status code: ${r}`),t(!0))}};null===(r=this.meetingSession)||void 0===r||r.audioVideo.addObserver(s),null===(i=this.meetingSession)||void 0===i||i.audioVideo.stop()}))}async detectMicro(){return new Promise((e=>{const t={audio:!0,video:!1};try{navigator.mediaDevices.getUserMedia(t).then((()=>e(!0))).catch((()=>e(!1)))}catch(t){this.logger.error(t.message),e(!1)}}))}async toggleMicro(e){var t,o,r;e?null===(t=this.meetingSession)||void 0===t||t.audioVideo.realtimeUnmuteLocalAudio():null===(o=this.meetingSession)||void 0===o||o.audioVideo.realtimeMuteLocalAudio();const i=null===(r=this.meetingSession)||void 0===r?void 0:r.audioVideo.realtimeIsLocalAudioMuted();return void 0!==i&&e!==i}shock(){throw new Error("Method not implemented.")}}exports.RTCJoinedInfoCodeEnum=void 0,(l=exports.RTCJoinedInfoCodeEnum||(exports.RTCJoinedInfoCodeEnum={}))[l.Success=0]="Success",l[l.Failure=1]="Failure",l[l.ReJoin=2]="ReJoin",l[l.NoMicroPermission=3]="NoMicroPermission";class I extends u{constructor({jsBridge:e,getVoiceSign:t}){super(),this.type=exports.RTCType.RealseeVRWebViewRTC,this.joined=!1,this.micro=!1,this.voiceId="",this.options={jsBridge:e,getVoiceSign:t},this.jsBridge.callAndListen("live/userVolumes",(e=>{this.emit("userVolumes",e)})),this.jsBridge.callAndListen("live/weakNetwork",(e=>{e&&this.emit("weakNetwork")}))}get jsBridge(){return this.options.jsBridge}async join(e){this.emit("joinWillStart");const{sdkAppId:t,userId:o,userSig:r}=await this.options.getVoiceSign(e);this.type=e.type;const[i,s]=await this.jsBridge.callAndBackfeed(`live/join?sdkAppID=${t}&userID=${o}&roomID=${Number(e.voiceId)}&userSig=${r}`);return i?i.code===exports.RTCJoinedInfoCodeEnum.Success?(this.emit("joined"),this.joined=!0):(this.emit("error",i),this.joined=!1):(this.emit("error",s||new Error("加入房间失败:未知异常。")),this.joined=!1),this.joined}async quit(){const[e,t]=await this.jsBridge.callAndBackfeed("live/quit");return null===e&&this.emit("error",t||new Error("退出房间失败:未知异常。")),this.joined=!1,!!e}async detectMicro(){const[e,t]=await this.jsBridge.detectMicro();return null===e?(this.emit("error",t||new Error("麦克风监测异常!")),!1):e}async toggleMicro(e){const[t,o]=await this.jsBridge.callAndBackfeed("live/toggleMicro?flag="+(e?1:0));return null===t?(this.emit("error",o||new Error("麦克风监测异常!")),!1):(this.micro=t,t)}shock(){this.jsBridge.shock(1)}}function T(e){try{const t=JSON.parse(e),o={code:t.code,message:t.message,command:t.command,roomCode:t.room_code,appID:t.app_id,requestId:t.request_id,frontRequestId:t.front_request_id,triggerUserID:t.trigger_user_id,data:t.data||{}},r=Object.keys(o).filter((e=>void 0===o[e]));return r.length>0&&console.warn(`推送数据格式异常:${r.join(" ")} 值不存在!`),o}catch(e){return!1}}function _(e){switch(e){case 1001:return exports.WebSocketCloseError.Err_1001;case 1002:return exports.WebSocketCloseError.Err_1002;case 1003:return exports.WebSocketCloseError.Err_1003;case 1006:return exports.WebSocketCloseError.Err_1006;case 1007:return exports.WebSocketCloseError.Err_1007;case 1008:return exports.WebSocketCloseError.Err_1008;case 1009:return exports.WebSocketCloseError.Err_1009}return exports.WebSocketCloseError.Err_unknown}function R(e){return"[object Object]"===Object.prototype.toString.call(e)}function x(e,t){return e===t||typeof e==typeof t&&!(!Number.isNaN(e)||!Number.isNaN(t))}function L(e,t){return!!x(e,t)||(R(e)&&R(t)?function(e,t){const o=Object.getOwnPropertyNames(e),r=Object.getOwnPropertyNames(t);if(o.length!==r.length)return!1;for(let r=0,i=o.length;r<i;r++){const i=o[r];if(!x(e[i],t[i]))return!1}return!0}(e,t):!(!Array.isArray(e)||!Array.isArray(t))&&function(e,t){if(e.length!==t.length)return!1;for(let o=0,r=e.length;o<r;o++)if(!x(e[o],t[o]))return!1;return!0}(e,t))}function O(e,t){return!!x(e,t)||(R(e)&&R(t)?function(e,t){const o=Object.getOwnPropertyNames(e),r=Object.getOwnPropertyNames(t);if(o.length!==r.length)return!1;for(let r=0,i=o.length;r<i;r++){const i=o[r];if(!O(e[i],t[i]))return!1}return!0}(e,t):!(!Array.isArray(e)||!Array.isArray(t))&&function(e,t){if(e.length!==t.length)return!1;for(let o=0,r=e.length;o<r;o++)if(!O(e[o],t[o]))return!1;return!0}(e,t))}function U(e,t,o){return o.deep?O(e,t):L(e,t)}exports.Command=void 0,(h=exports.Command||(exports.Command={})).SelfUserInfo="SELF_USER_INFO",h.RoomInfo="ROOM_INFO",h.RTCInfo="RTC_INFO",h.UserList="USER_LIST",h.BuiltinMsg="BUILTIN_MSG",h.CustomEvent="CUSTOM_EVENT",h.KeyframeSync="KEYFRAME_SYNC",h.UserKickOut="USER_KICK_OUT",exports.BuiltinEventType=void 0,(p=exports.BuiltinEventType||(exports.BuiltinEventType={})).UserChange="user_change",p.RoomChange="room_change",exports.BuiltinActionType=void 0,(m=exports.BuiltinActionType||(exports.BuiltinActionType={})).UserMicroStatus="change_micro_status",m.UserMicroStatusSync="sync_micro_status",m.UserPermission="change_permission",m.UserStatus="change_status",m.UserInfo="change_info",m.RoomClose="close",exports.MicroStatus=void 0,(f=exports.MicroStatus||(exports.MicroStatus={})).OPEN="OPEN",f.CLOSE="CLOSE",exports.UserStatus=void 0,(g=exports.UserStatus||(exports.UserStatus={}))[g.Normal=0]="Normal",g[g.Removed=1]="Removed",g[g.Replaced=2]="Replaced",exports.MemUserStatus=void 0,(v=exports.MemUserStatus||(exports.MemUserStatus={})).WAIT_ENTER="WAIT_ENTER",v.ONLINE="ONLINE",v.LEAVE="LEAVE",v.KICK_OUT="KICK_OUT",v.BE_REPLACE="BE_REPLACE",v.EXCEPTION="EXCEPTION",exports.WebSocketState=void 0,(S=exports.WebSocketState||(exports.WebSocketState={}))[S.NOTINITIALIZED=-1]="NOTINITIALIZED",S[S.CONNECTING=0]="CONNECTING",S[S.OPEN=1]="OPEN",S[S.CLOSING=2]="CLOSING",S[S.CLOSED=3]="CLOSED",exports.WebSocketErrorType=void 0,(E=exports.WebSocketErrorType||(exports.WebSocketErrorType={})).Error="Error",E.Close="Close",E.MicroAuth="MicroAuth",E.DuplicateConnect="DuplicateConnect",E.IllegalURL="IllegalURL",E.Unknown="Unknown",E.IllegalArgs="IllegalArgs",exports.WebSocketCloseError=void 0,(C=exports.WebSocketCloseError||(exports.WebSocketCloseError={})).Err_1001="CLOSE_GOING_AWAY",C.Err_1002="CLOSE_PROTOCOL_ERROR",C.Err_1003="CLOSE_UNSUPPORTED",C.Err_1006="CLOSE_ABNORMAL",C.Err_1007="Unsupported Data",C.Err_1008="Policy Violation",C.Err_1009="CLOSE_TOO_LARGE",C.Err_unknown="unknown";class M{constructor(e){this.readyState=exports.WebSocketState.NOTINITIALIZED,this.canSync=!0,this.connecting=!1,this.keyframes={},this.checkReadyState=e=>{do{if(!this.webSocket){this.readyState!==exports.WebSocketState.NOTINITIALIZED&&(this.readyState=exports.WebSocketState.NOTINITIALIZED,e.emit("ws.readyStateUpdate",this.readyState));break}const t=this.webSocket.readyState;t!==this.readyState&&(this.readyState=t,e.emit("ws.readyStateUpdate",this.readyState))}while(0);return this.readyState},this.dispose=()=>{this.disposeWebSocket(),this.connecting=!1,this.healthCheckId&&(clearInterval(this.healthCheckId),this.healthCheckId=void 0)},this.disposeWebSocket=()=>{this.webSocket&&(this.onEvtOpnListener&&(this.webSocket.removeEventListener("open",this.onEvtOpnListener),this.onEvtOpnListener=void 0),this.onEvtMsgListener&&(this.webSocket.removeEventListener("message",this.onEvtMsgListener),this.onEvtMsgListener=void 0),this.onEvtErrListener&&(this.webSocket.removeEventListener("error",this.onEvtErrListener),this.onEvtErrListener=void 0),this.onEvtCLEListener&&(this.webSocket.removeEventListener("close",this.onEvtCLEListener),this.onEvtCLEListener=void 0),this.webSocket.close(),this.webSocket=void 0)},this.options=Object.assign({autoConnect:!0,healthCheck:3e3},e)}handleMessage(e,t){var o,r,i;const{command:s,data:n,frontRequestId:a,code:c,message:u}=e;if("SUCCESS"===c)switch(s){case exports.Command.SelfUserInfo:{const e=n;if(U(this.selfUserInfo,e,{deep:!0}))return;this.selfUserInfo=e,t.emit("selfInfoUpdate",this.selfUserInfo,a);break}case exports.Command.RoomInfo:{const e=n;this.roomInfo=Object.assign({},e),t.emit("readyKeyframeSync",e.last_frame||{});break}case exports.Command.RTCInfo:{const{voice_id:e,type:i}=n;if(t.$RTC.joined)break;t.$RTC.join({voiceId:e,userId:(null===(o=this.selfUserInfo)||void 0===o?void 0:o.id)||"",roomId:null===(r=this.roomInfo)||void 0===r?void 0:r.info.room_code,type:i}),t.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserMicroStatus,{status:exports.MicroStatus.OPEN});break}case exports.Command.UserList:{const e=n;this.userList=e,t.emit("userListUpdate",this.userList,a);break}case exports.Command.CustomEvent:{const e=n;t.emit("broadcast",e,a);break}case exports.Command.KeyframeSync:{const e=n,o=Object.keys(e).reduce(((o,r)=>{if(U(e[r],this.keyframes[r],{deep:!0}))return o;const i=[e[r],this.keyframes[r],a],s=r;return t.keyframes.emit(s,...i),this.keyframes[r]=e[r],o[r]=e[r],o}),{});t.emit("keyframes",o,a);break}case exports.Command.BuiltinMsg:{const e=n;t.emit("builtinEvent",e),e.event_type===exports.BuiltinEventType.UserChange&&t.emit("userChange",e),e.event_type===exports.BuiltinEventType.RoomChange&&t.emit("roomChange",e),e.event_type===exports.BuiltinEventType.UserChange&&e.action===exports.BuiltinActionType.UserMicroStatus&&t.toggleMicro(e.data.status===exports.MicroStatus.OPEN),e.event_type===exports.BuiltinEventType.RoomChange&&e.action===exports.BuiltinActionType.RoomClose&&(null===(i=this.options.rtc)||void 0===i||i.quit(),this.disposeWebSocket());break}case exports.Command.UserKickOut:t.emit("kickOut");break;default:console.warn("unknown command: ",s)}else t.emit("error",e)}sendMessage(e){return this.webSocket?e?void this.webSocket.send(JSON.stringify(e)):console.warn("WebSocket messages is empty!"):console.warn("WebSocket has not yet been initialized!")}}const N=e=>Promise.reject("unimplemented method GetVoiceSign");function V(t){const o=new M(t),r=(e,t={},o)=>((o=o?Array.isArray(o)?o:[o]:[])&&(t.to_user_ids=o),{command:e,front_request_id:b(),data:t});const i=new class extends c{constructor(){var r;if(super(),this.keyframes=new c,!t.rtc&&t.rtcType){if(!t.getVoiceSign)throw new Error("GetVoiceSign method must be passed when using built-in RTC instances");const i=null!==(r=t.getVoiceSign)&&void 0!==r?r:N;switch(t.rtcType){case exports.RTCType.RealseeVRWebViewRTC:if(!t.jsBridge)throw new Error("JsBridge instance must be passed when using built-in VRWebViewRTC instances");o.options.rtc=new I({jsBridge:t.jsBridge,getVoiceSign:i});break;case exports.RTCType.RealseeBrowserChimeRTC:o.options.rtc=new w({getVoiceSign:i,logLevel:t.__debug__?e.LogLevel.DEBUG:e.LogLevel.ERROR});break;case exports.RTCType.RealseeBrowserRTC:o.options.rtc=new k({getVoiceSign:i});break;default:throw new Error("unknown built-in RTC type")}}o.options.rtc||console.warn("unused rtc"),o.options.url&&o.options.getTicket&&this.connect();const i=(e=>{if(!e)return 0;if(!0===e)return 3e3;const t=Number(e);return t>0?t:3e3})(o.options.healthCheck);i&&(o.healthCheckId=setInterval((()=>o.checkReadyState(this)),i))}get options(){return Object.freeze(Object.assign({},o.options))}get readyState(){return o.checkReadyState(this),o.readyState}get url(){var e;return(null===(e=o.webSocket)||void 0===e?void 0:e.url)||""}get selfInfo(){return o.selfUserInfo}get userList(){return o.userList||[]}get snapshot(){return o.keyframes||{}}get $RTC(){return o.options.rtc}async setSelfInfo(e){if(this.readyState!==exports.WebSocketState.OPEN)return new Error("The connection is not open and ready to communicate.");try{return await this.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserInfo,e)}catch(e){return e}}getFramesByKey(e){return o.keyframes[e]}sendKeyframe(e,t){if(this.readyState!==exports.WebSocketState.OPEN)return new Error("The connection is not open and ready to communicate.");o.keyframes[e]=t;const i=r(exports.Command.KeyframeSync,this.snapshot);return o.sendMessage(i),!0}broadcast(e,t,i){return this.readyState!==exports.WebSocketState.OPEN?new Error("The connection is not open and ready to communicate."):new Promise(((s,n)=>{const a=r(exports.Command.CustomEvent,e,t),c=a.front_request_id;o.sendMessage(a);const u=i?setTimeout((()=>{n(new Error("RESPONSE TIMEOUT")),this.off("broadcast",d)}),i):void 0,d=(e,t)=>{t===c&&(this.off("broadcast",d),s(e),u&&clearInterval(u))};this.on("broadcast",d)}))}async updateStatus(e,t,i,s){if(this.readyState!==exports.WebSocketState.OPEN)return!1;const n=Object.assign({event_type:e,action:t},{data:i}),a=r(exports.Command.BuiltinMsg,n,s);return o.sendMessage(a),!0}async toggleMicro(e){var t,o;return!!(null===(o=null===(t=this.selfInfo)||void 0===t?void 0:t.permission)||void 0===o?void 0:o.control_own_micro)&&(await this.$RTC.toggleMicro(e),await this.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserMicroStatus,{status:e?exports.MicroStatus.OPEN:exports.MicroStatus.CLOSE},[]))}async forbidMicro(e,t){var r,i;return!(o.options.canForbidUserMicro&&!o.options.canForbidUserMicro(t))&&(!!(null===(i=null===(r=this.selfInfo)||void 0===r?void 0:r.permission)||void 0===i?void 0:i.control_other_micro)&&await this.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserMicroStatus,{status:e},t))}async forbidSync(e,t){var r,i;return!(o.options.canForbidUserSync&&!o.options.canForbidUserSync(t))&&(!!(null===(i=null===(r=this.selfInfo)||void 0===r?void 0:r.permission)||void 0===i?void 0:i.control_other_sync)&&await this.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserPermission,{sync_frame:e},t))}async kick(e){var t,r;return!(o.options.canForbidUserKick&&!o.options.canForbidUserKick(e))&&(!!(null===(r=null===(t=this.selfInfo)||void 0===t?void 0:t.permission)||void 0===r?void 0:r.change_other_status)&&await this.updateStatus(exports.BuiltinEventType.UserChange,exports.BuiltinActionType.UserStatus,{status:"KICK_OUT"},e))}async exit(){return await this.$RTC.quit(),await this.updateStatus(exports.BuiltinEventType.RoomChange,exports.BuiltinActionType.RoomClose,{})}async connect(e={}){if(!await this.$RTC.detectMicro()){const e=new Error("系统监测麦克风未授权~");return this.emit("ws.error",{type:exports.WebSocketErrorType.MicroAuth,error:e}),e}if(o.connecting){const e=new Error("WebSocket 正在连接中,请勿重复连接 ...");return this.emit("ws.error",{type:exports.WebSocketErrorType.DuplicateConnect,error:e}),e}const{force:t}=e;if(!t&&(this.readyState===exports.WebSocketState.CONNECTING||this.readyState===exports.WebSocketState.OPEN))return!0;if(e.url&&(o.options.url=e.url),e.getTicket&&(o.options.getTicket=e.getTicket),!o.options.url||!o.options.url.startsWith("ws")){const e=new Error(`WebSocket URL 未配置或格式不合法:"${o.options.url}"`);return this.emit("ws.error",{type:exports.WebSocketErrorType.IllegalURL,error:e}),e}if(!o.options.getTicket){const e=new Error("getTicket() 未配置!");return this.emit("ws.error",{type:exports.WebSocketErrorType.IllegalArgs,error:e}),e}o.connecting=!0,o.disposeWebSocket(),this.emit("ws.beforeConnect");const r=t||e.url||!this.url?function(e,t){const o=-1!==e.indexOf("?");return e+Object.keys(t).reduce(((e,r,i)=>`${e}${0!==i||o?"&":"?"}${r}=${t[r]}`),"")}(o.options.url,{ticket:await o.options.getTicket(),force:Number(!!t)}):this.url;return o.webSocket=new WebSocket(r),o.onEvtOpnListener=()=>{o.checkReadyState(this),this.emit("ws.afterConnect")},o.onEvtMsgListener=e=>{o.checkReadyState(this);try{const t=T(e.data);if(!1===t)return;o.handleMessage(t,this)}catch(t){this.emit("ws.error",{type:exports.WebSocketErrorType.Unknown,error:t,target:e})}},o.onEvtErrListener=e=>{i.emit("ws.error",{type:exports.WebSocketErrorType.Error,target:e}),o.checkReadyState(this)},o.onEvtCLEListener=e=>{o.checkReadyState(this);const t=Number(e.code);if(1e3===t)return;const r=_(t);i.emit("ws.error",{target:e,type:exports.WebSocketErrorType.Close,closeError:r})},o.webSocket.addEventListener("open",o.onEvtOpnListener),o.webSocket.addEventListener("message",o.onEvtMsgListener),o.webSocket.addEventListener("error",o.onEvtErrListener),o.webSocket.addEventListener("close",o.onEvtCLEListener),await new Promise(((e,t)=>{const r=()=>{e(!0),o.connecting=!1,this.off("ws.error",i)},i=e=>{t(e.error?e.error:new Error("WebSocket connection failed!")),o.connecting=!1,this.off("ws.afterConnect",r)};this.once("ws.afterConnect",r),this.once("ws.error",i)}))}async revoke(){return!0}};return t.__debug__&&(Object.assign(i,{__controller__:o}),Object.assign(window,{$live:i})),i}exports.BrowserRTC=k,exports.BrowserRTC4Chime=w,exports.CoreRTC=u,exports.VRWebViewRTC=I,exports.createLive=V,exports.createLiveReact=function(e){const t=s.default.createContext(null),o=V(e);function r(){const e=s.default.useContext(t);if(!e)throw new Error("LiveProvider never found.");return e}return{live:o,LiveProvider:function(e){return s.default.createElement(t.Provider,{value:e.live||o},e.children)},unsafe__useLiveInstance:function(){return r()},unsafe__useRTCInstance:function(){return r().$RTC},useCurrentWebSocketUrl:function(){const e=r(),[t,o]=s.default.useState(void 0);return s.default.useEffect((()=>{const t=()=>o(e.url);return e.on("ws.beforeConnect",t),()=>e.off("ws.beforeConnect",t)}),[e]),t},useConnect:function(){const e=r();return async t=>await e.connect(t)},useKeyframe:function(e){const t=r(),[o,i]=s.default.useState(t.getFramesByKey(e));return s.default.useEffect((()=>{const o=e,r=e=>i(e);return t.keyframes.on(o,r),()=>t.keyframes.off(o,r)}),[t]),[o,s.default.useCallback((o=>t.sendKeyframe(e,o)),[t])]},useKeyframeUpdateCallback:function(e,t,o=[]){const i=r(),n=[i,e,...o],a=()=>i.keyframes.off(e,t);return s.default.useEffect((()=>(i.keyframes.on(e,t),a)),n),a},useLiveAction:function(){const e=r(),t=s.default.useCallback((t=>e.toggleMicro(t)),[e]),o=s.default.useCallback(((t,o,r=0)=>e.broadcast(t,o,r)),[e]),i=s.default.useCallback((()=>e.exit()),[e]),n=s.default.useCallback((t=>e.kick(t)),[e]),a=s.default.useCallback(((t,o)=>e.forbidMicro(t,o)),[e]),c=s.default.useCallback((t=>e.getFramesByKey(t)),[e]);return{broadcast:o,exit:i,kick:n,toggleMicro:t,forbidMicro:a,sendKeyframe:s.default.useCallback(((t,o)=>e.sendKeyframe(t,o)),[e]),getFramesByKey:c,setSelfInfo:s.default.useCallback((t=>e.setSelfInfo(t)),[e]),updateStatus:s.default.useCallback(((t,o,r,i)=>e.updateStatus(t,o,r,i)),[e])}},useLiveEventCallback:function(e,t,o=[]){const i=r(),n=()=>i.off(e,t),a=[i,e,...o];return s.default.useEffect((()=>(i.on(e,t),n)),a),n},useReadyState:function(){const e=r(),[t,o]=s.default.useState(e.readyState);return s.default.useEffect((()=>{const t=e=>o(e);return e.on("ws.readyStateUpdate",t),()=>e.off("ws.readyStateUpdate",t)}),[e]),t},useRTCAction:function(){const e=r(),t=s.default.useCallback((t=>e.$RTC.join(t)),[e]);return{join:t,quit:s.default.useCallback((()=>e.$RTC.quit()),[e]),shock:s.default.useCallback((()=>{var t,o;return null===(o=(t=e.$RTC).shock)||void 0===o?void 0:o.call(t)}),[e]),toggleMicro:s.default.useCallback((t=>e.$RTC.toggleMicro(t)),[e]),detectMicro:s.default.useCallback((()=>e.$RTC.detectMicro()),[e])}},useRTCEventCallback:function(e,t,o=[]){const i=r(),n=()=>i.$RTC.off(e,t),a=[i,e,...o];return s.default.useEffect((()=>(i.$RTC.on(e,t),n)),a),n},useSelfInfo:function(){const e=r(),[t,o]=s.default.useState(e.selfInfo||{}),i=e=>o(e);return s.default.useEffect((()=>(e.on("selfInfoUpdate",i),()=>e.off("selfInfoUpdate",i))),[e]),[t,s.default.useCallback((async t=>await e.setSelfInfo(t)),[e])]},useSnapshot:function(){const e=r(),[t,o]=s.default.useState(e.snapshot);return s.default.useEffect((()=>{const t=e=>o(e);return e.on("keyframes",t),()=>e.off("keyframes",t)})),t},useUserList:function(){const e=r(),[t,o]=s.default.useState(e.userList),i=e=>o(e);return s.default.useEffect((()=>(e.on("userListUpdate",i),()=>e.off("userListUpdate",i))),[e]),t},useWebSocketEventCallback:function(e,t,o=[]){const i=r(),n=()=>i.off(e,t),a=[i,e,...o];return s.default.useEffect((()=>(i.on(e,t),n)),a),n}}},exports.parseLiveMsg=T,exports.parseWSClsErr=_;
2
+ //# sourceMappingURL=realsee-live.cjs.production.js.map