@100mslive/hms-video-store 0.2.95 → 0.2.96-alpha.0
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.
- package/dist/index.cjs.js +2859 -1
- package/dist/index.js +2854 -1
- package/package.json +3 -4
- package/dist/test/unit/HMSNotifications.test.d.ts +0 -1
- package/dist/test/unit/reactiveStore.test.d.ts +0 -1
- package/dist/test/unit/roleSelectors.test.d.ts +0 -1
- package/dist/test/unit/selectors.test.d.ts +0 -1
- package/dist/test/unit/selectorsByReference.test.d.ts +0 -1
- package/dist/test/unit/storeMergeUtils.test.d.ts +0 -1
- package/dist/test/unit/webrtc-stats.test.d.ts +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1,2859 @@
|
|
|
1
|
-
var Lt=Object.create;var Y=Object.defineProperty,xt=Object.defineProperties,Ot=Object.getOwnPropertyDescriptor,wt=Object.getOwnPropertyDescriptors,Nt=Object.getOwnPropertyNames,Ge=Object.getOwnPropertySymbols,Ut=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty,_t=Object.prototype.propertyIsEnumerable;var Ye=(s,e,t)=>e in s?Y(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,N=(s,e)=>{for(var t in e||(e={}))Je.call(e,t)&&Ye(s,t,e[t]);if(Ge)for(var t of Ge(e))_t.call(e,t)&&Ye(s,t,e[t]);return s},F=(s,e)=>xt(s,wt(e)),Xe=s=>Y(s,"__esModule",{value:!0});var Kt=(s,e)=>{Xe(s);for(var t in e)Y(s,t,{get:e[t],enumerable:!0})},Vt=(s,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Nt(e))!Je.call(s,i)&&i!=="default"&&Y(s,i,{get:()=>e[i],enumerable:!(t=Ot(e,i))||t.enumerable});return s},I=s=>Vt(Xe(Y(s!=null?Lt(Ut(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s);var l=(s,e,t)=>new Promise((i,o)=>{var r=p=>{try{c(t.next(p))}catch(R){o(R)}},n=p=>{try{c(t.throw(p))}catch(R){o(R)}},c=p=>p.done?i(p.value):Promise.resolve(p.value).then(r,n);c((t=t.apply(s,e)).next())});Kt(exports,{HMSAudioPluginType:()=>a.HMSAudioPluginType,HMSLogLevel:()=>a.HMSLogLevel,HMSMessageType:()=>Te,HMSNotificationSeverity:()=>P,HMSNotificationTypes:()=>h,HMSPlaylistType:()=>M,HMSReactiveStore:()=>x,HMSRoomState:()=>T,HMSStats:()=>ae,HMSVideoPluginType:()=>a.HMSVideoPluginType,createDefaultStatsStore:()=>z,createDefaultStoreState:()=>X,parsedUserAgent:()=>a.parsedUserAgent,selectAudioPlaylist:()=>Oe,selectAudioPlaylistTrackByPeerID:()=>Rs,selectAudioTrackByPeerID:()=>Mt,selectAudioTrackVolume:()=>Be,selectAudioVolumeByPeerID:()=>As,selectAuxiliaryAudioByPeerID:()=>fs,selectAuxiliaryTracksByPeerID:()=>hs,selectAvailableRoleNames:()=>ns,selectBroadcastMessages:()=>Tt,selectBroadcastMessagesUnreadCount:()=>ws,selectCameraStreamByPeerID:()=>ms,selectConnectionQualities:()=>Wt,selectConnectionQualityByPeerID:()=>ys,selectDegradedTracks:()=>is,selectDevices:()=>$t,selectDidIJoinWithin:()=>Zs,selectDominantSpeaker:()=>Yt,selectHLSState:()=>Ss,selectHMSMessages:()=>se,selectHMSMessagesCount:()=>Ee,selectHMSStats:()=>bt,selectIsAllowedToPublish:()=>Ws,selectIsAllowedToSubscribe:()=>as,selectIsAudioLocallyMuted:()=>Ve,selectIsConnectedToRoom:()=>it,selectIsInPreview:()=>rs,selectIsLocalAudioEnabled:()=>Xt,selectIsLocalAudioPluginPresent:()=>Ys,selectIsLocalScreenShared:()=>ue,selectIsLocalVideoDisplayEnabled:()=>be,selectIsLocalVideoEnabled:()=>de,selectIsLocalVideoPluginPresent:()=>Js,selectIsLocallyMutedByPeerID:()=>bs,selectIsPeerAudioEnabled:()=>Ds,selectIsPeerVideoEnabled:()=>vs,selectIsScreenShareLocallyMutedByPeerID:()=>Es,selectIsSomeoneScreenSharing:()=>zt,selectLocalAudioTrackID:()=>A,selectLocalMediaSettings:()=>De,selectLocalPeer:()=>L,selectLocalPeerID:()=>q,selectLocalPeerRole:()=>ie,selectLocalTrackIDs:()=>ve,selectLocalVideoTrackID:()=>C,selectMessageIDsInOrder:()=>Ie,selectMessagesByPeerID:()=>Ns,selectMessagesByRole:()=>Us,selectMessagesMap:()=>Re,selectMessagesUnreadCountByPeerID:()=>Ks,selectMessagesUnreadCountByRole:()=>_s,selectPeerAudioByID:()=>Hs,selectPeerByCondition:()=>Xs,selectPeerByID:()=>O,selectPeerCount:()=>Ft,selectPeerMetadata:()=>Bs,selectPeerNameByID:()=>Ms,selectPeerScreenSharing:()=>ot,selectPeerSharingAudio:()=>Zt,selectPeerSharingAudioPlaylist:()=>ss,selectPeerSharingVideoPlaylist:()=>ts,selectPeers:()=>W,selectPeersByCondition:()=>zs,selectPeersByRole:()=>Vs,selectPeersMap:()=>v,selectPeersScreenSharing:()=>es,selectPeersWithAudioStatus:()=>qs,selectPermissions:()=>Ce,selectRTMPState:()=>ls,selectRecordingState:()=>cs,selectRemotePeers:()=>Jt,selectRoleByRoleName:()=>Fs,selectRoleChangeRequest:()=>$s,selectRolesMap:()=>K,selectRoom:()=>D,selectRoomID:()=>jt,selectRoomStartTime:()=>us,selectRoomStarted:()=>Ae,selectRoomState:()=>b,selectScreenShareAudioByPeerID:()=>Ke,selectScreenShareByPeerID:()=>Is,selectScreenSharesByPeerId:()=>_e,selectScreenshareAudioVolumeByPeerID:()=>Cs,selectSessionId:()=>ds,selectSimulcastLayerByTrack:()=>Ls,selectSpeakers:()=>st,selectTrackAudioByID:()=>gs,selectTrackByID:()=>re,selectTracksMap:()=>y,selectUnreadHMSMessagesCount:()=>os,selectVideoPlaylist:()=>we,selectVideoPlaylistAudioTrackByPeerID:()=>Ps,selectVideoPlaylistVideoTrackByPeerID:()=>ks,selectVideoTrackByPeerID:()=>pt});var Et=I(require("immer")),At=I(require("zustand/vanilla")),Ct=I(require("zustand/shallow")),ge=I(require("@100mslive/hms-video"));var T;(function(c){c.Disconnected="Disconnected",c.Preview="Preview",c.Connecting="Connecting",c.Connected="Connected",c.Reconnecting="Reconnecting",c.Disconnecting="Disconnecting",c.Failed="Failed"})(T||(T={}));var X=()=>({room:{id:"",isConnected:!1,name:"",peers:[],shareableLink:"",localPeer:"",hasWaitingRoom:!1,roomState:T.Disconnected,recording:{browser:{running:!1},server:{running:!1},hls:{running:!1}},rtmp:{running:!1},hls:{running:!1,variants:[]},sessionId:""},peers:{},tracks:{},playlist:{audio:{list:{},selection:{id:"",hasPrevious:!1,hasNext:!1},progress:0,volume:0,currentTime:0,playbackRate:1},video:{list:{},selection:{id:"",hasPrevious:!1,hasNext:!1},progress:0,volume:0,currentTime:0,playbackRate:1}},messages:{byID:{},allIDs:[]},speakers:{},connectionQualities:{},settings:{audioInputDeviceId:"",audioOutputDeviceId:"",videoInputDeviceId:""},devices:{audioInput:[],audioOutput:[],videoInput:[]},roles:{},roleChangeRequests:[],errors:[]}),z=()=>({peerStats:{},trackStats:{},localPeer:{id:""}});var Te;(function(e){e.CHAT="chat"})(Te||(Te={}));var P;(function(i){i.INFO="info",i.ERROR="error",i.CRITICAL="critical"})(P||(P={}));var h;(function(S){S.PEER_JOINED="PEER_JOINED",S.PEER_LEFT="PEER_LEFT",S.PEER_LIST="PEER_LIST",S.NEW_MESSAGE="NEW_MESSAGE",S.ERROR="ERROR",S.RECONNECTING="RECONNECTING",S.RECONNECTED="RECONNECTED",S.TRACK_ADDED="TRACK_ADDED",S.TRACK_REMOVED="TRACK_REMOVED",S.TRACK_MUTED="TRACK_MUTED",S.TRACK_UNMUTED="TRACK_UNMUTED",S.TRACK_DEGRADED="TRACK_DEGRADED",S.TRACK_RESTORED="TRACK_RESTORED",S.ROLE_CHANGE_REQUEST="ROLE_CHANGE_REQUEST",S.ROLE_UPDATED="ROLE_UPDATED",S.CHANGE_TRACK_STATE_REQUEST="CHANGE_TRACK_STATE_REQUEST",S.CHANGE_MULTI_TRACK_STATE_REQUEST="CHANGE_MULTI_TRACK_STATE_REQUEST",S.ROOM_ENDED="ROOM_ENDED",S.REMOVED_FROM_ROOM="REMOVED_FROM_ROOM",S.DEVICE_CHANGE_UPDATE="DEVICE_CHANGE_UPDATE",S.PLAYLIST_TRACK_ENDED="PLAYLIST_TRACK_ENDED",S.NAME_UPDATED="NAME_UPDATED",S.METADATA_UPDATED="METADATA_UPDATED"})(h||(h={}));var M;(function(t){t.audio="audio",t.video="video"})(M||(M={}));var a=I(require("@100mslive/hms-video"));var _=I(require("@100mslive/hms-video"));var ze=(s,e)=>{let t=Pe(Object.keys(s),Object.keys(e));for(let i of t){let o=s[i],r=e[i];ye(o,r)?(U(o.auxiliaryTracks,r.auxiliaryTracks)&&(r.auxiliaryTracks=o.auxiliaryTracks),Object.assign(o,r)):fe(o,r)?delete s[i]:ke(o,r)&&(s[i]=r)}},Ze=(s,e)=>{let t=Pe(Object.keys(s),Object.keys(e));for(let i of t){let o=s[i],r=e[i];ye(o,r)?(Bt(o,r),Object.assign(o,r)):fe(o,r)?delete s[i]:ke(o,r)&&(s[i]=r)}},He=(s,e)=>{let t=Pe(Object.keys(s),Object.keys(e));for(let i of t){let o=s[i],r=e[i];ye(o,r)?Object.assign(o,r):fe(o,r)?delete s[i]:ke(o,r)&&(s[i]=r)}},Bt=(s,e)=>{s.plugins&&U(s.plugins,e.plugins)&&(e.plugins=s.plugins),s.layerDefinitions&&U(s.layerDefinitions,e.layerDefinitions)&&(e.layerDefinitions=s.layerDefinitions)},ye=(s,e)=>s&&e,fe=(s,e)=>s&&!e,ke=(s,e)=>!s&&e,U=(s,e)=>{if(s===e||s.length===0&&(e==null?void 0:e.length)===0)return!0;if(!s||!e||s.length!==e.length)return!1;for(let t=0;t<s.length;t++)if(s[t]!==e[t])return!1;return!0},Pe=(s,e)=>{let t=new Set;for(let i of s)t.add(i);for(let i of e)t.add(i);return Array.from(t)};var g=class{static convertPeer(e){var t,i,o;return{id:e.peerId,name:e.name,roleName:(t=e.role)==null?void 0:t.name,isLocal:e.isLocal,videoTrack:(i=e.videoTrack)==null?void 0:i.trackId,audioTrack:(o=e.audioTrack)==null?void 0:o.trackId,auxiliaryTracks:e.auxiliaryTracks.map(r=>r.trackId),customerUserId:e.customerUserId,customerDescription:e.metadata,metadata:e.metadata,joinedAt:e.joinedAt}}static convertTrack(e,t){let i={id:e.trackId,source:e.source,type:e.type,enabled:e.enabled,displayEnabled:e.enabled,peerId:e.peerId||t};return this.enrichTrack(i,e),i}static enrichTrack(e,t){let i=t.getMediaTrackSettings();e.source==="screen"&&e.type==="video"&&(e.displaySurface=i.displaySurface),e.height=i.height,e.width=i.width,t instanceof _.HMSRemoteAudioTrack&&(e.volume=t.getVolume()||0),g.updateDeviceID(e,t),g.enrichVideoTrack(e,t),g.enrichPluginsDetails(e,t)}static updateDeviceID(e,t){var i;t instanceof _.HMSLocalVideoTrack||t instanceof _.HMSLocalAudioTrack?e.deviceID=t.settings.deviceId:e.deviceID=(i=t.getMediaTrackSettings())==null?void 0:i.deviceId}static enrichVideoTrack(e,t){t instanceof _.HMSRemoteVideoTrack&&(e.layer=t.getSimulcastLayer(),e.degraded=t.degraded,U(t.getSimulcastDefinitions(),e.layerDefinitions)||(e.layerDefinitions=t.getSimulcastDefinitions()))}static enrichPluginsDetails(e,t){(t instanceof _.HMSLocalVideoTrack||t instanceof _.HMSLocalAudioTrack)&&(U(t.getPlugins(),e.plugins)||(e.plugins=t.getPlugins()))}static convertRoom(e){var r,n;let{recording:t,rtmp:i,hls:o}=g.convertRecordingStreamingState(e==null?void 0:e.recording,e==null?void 0:e.rtmp,e==null?void 0:e.hls);return{id:e.id,name:e.name,localPeer:(n=(r=e.localPeer)==null?void 0:r.peerId)!=null?n:"",hasWaitingRoom:e.hasWaitingRoom,shareableLink:e.shareableLink,recording:t,rtmp:i,hls:o,sessionId:e.sessionId,startedAt:e.startedAt,joinedAt:e.joinedAt,peerCount:e.peerCount}}static convertMessage(e){var t,i,o;return{sender:e.sender.peerId,senderName:e.sender.name,senderRole:(t=e.sender.role)==null?void 0:t.name,senderUserId:e.sender.customerUserId,recipientPeer:(i=e.recipientPeer)==null?void 0:i.peerId,recipientRoles:(o=e.recipientRoles)==null?void 0:o.map(r=>r.name),time:e.time,type:e.type,message:e.message}}static convertRoles(e){let t={};return e&&e.forEach(i=>{t[i.name]=i}),t}static convertRoleChangeRequest(e){var t;return{requestedBy:(t=e.requestedBy)==null?void 0:t.peerId,roleName:e.role.name,token:e.token}}static convertException(e){return{code:e.code,action:e.action,name:e.name,message:e.message,description:e.description,isTerminal:e.isTerminal,nativeError:e.nativeError,timestamp:new Date}}static convertDeviceChangeUpdate(e){let t={devices:e.devices,selection:e.selection,type:e.type};return e.error&&(t.error=this.convertException(e.error)),t}static convertPlaylist(e){let t=this.getConvertedPlaylistType(e,M.audio),i=this.getConvertedPlaylistType(e,M.video);return{audio:t,video:i}}static convertPlaylistItem(e,t){let i=t.type,o=e.getCurrentSelection(i),r=e.isPlaying(i),n=t.url===(o==null?void 0:o.url);return F(N({},t),{type:t.type,selected:n,playing:n&&r})}static getConvertedPlaylistType(e,t){let i={},o=e.getCurrentSelection(t),r=e.getCurrentProgress(t),n=e.getVolume(t),c=e.getList(t),p=e.getCurrentIndex(t);return e.getList(t).forEach(R=>{i[R.id]=g.convertPlaylistItem(e,R)}),{list:i,selection:{id:o==null?void 0:o.id,hasPrevious:p>0,hasNext:p<c.length-1},progress:r,volume:n,currentTime:e.getCurrentTime(t),playbackRate:e.getPlaybackRate(t)}}static convertRecordingStreamingState(e,t,i){var o;return{recording:{browser:N({running:!1},e==null?void 0:e.browser),server:N({running:!1},e==null?void 0:e.server),hls:N({running:!1},e==null?void 0:e.hls)},rtmp:N({running:!1},t),hls:{variants:((o=i==null?void 0:i.variants)==null?void 0:o.map(r=>r))||[],running:!!(i==null?void 0:i.running),error:i==null?void 0:i.error}}}};var d=I(require("reselect"));function $(s,e,t=qt){let i,o;if(e)for(let r of e.auxiliaryTracks){let n=s[r];t(n)&&(o=Z(n)?n:o,i=ee(n)?n:i)}return{video:i,audio:o}}function Z(s){return s&&s.type==="audio"}function ee(s){return s&&s.type==="video"}function qt(s){return s&&s.source==="screen"}function Se(s){return s&&s.source==="audioplaylist"}function te(s){return s&&s.source==="videoplaylist"}function et(s){return Boolean(s==null?void 0:s.degraded)}function Q(s,e){return e&&s.tracks[e]?s.tracks[e].enabled:!1}function tt(s,e){return e&&s.tracks[e]?s.tracks[e].displayEnabled:!1}var D=s=>s.room,jt=(0,d.createSelector)(D,s=>s.id),v=s=>s.peers,Re=s=>s.messages.byID,Ie=s=>s.messages.allIDs,y=s=>s.tracks,De=s=>s.settings,$t=s=>s.devices,st=s=>s.speakers,Wt=s=>s.connectionQualities,it=(0,d.createSelector)([D],s=>s&&s.isConnected),Ft=(0,d.createSelector)([it,D],(s,e)=>s?e.peerCount||e.peers.length:Math.max(e.peerCount||e.peers.length-1,0)),W=(0,d.createSelector)([D,v],(s,e)=>s.peers.map(t=>e[t])),Qt=(0,d.createSelector)(y,s=>Object.values(s)),L=(0,d.createSelector)(D,v,(s,e)=>e[s.localPeer]),q=(0,d.createSelector)(D,s=>s.localPeer),A=(0,d.createSelector)(L,s=>s==null?void 0:s.audioTrack),C=(0,d.createSelector)(L,s=>s==null?void 0:s.videoTrack),Gt=(0,d.createSelector)(L,s=>s==null?void 0:s.auxiliaryTracks),ve=(0,d.createSelector)([A,C,Gt],(s,e,t)=>{let i=[...t];return s&&i.unshift(s),e&&i.unshift(e),i}),Jt=(0,d.createSelector)(W,s=>s.filter(e=>!e.isLocal)),Yt=(0,d.createSelector)(v,st,(s,e)=>{let t=Object.entries(e).sort((i,o)=>{var c,p;let r=((c=i[1])==null?void 0:c.audioLevel)||0;return(((p=o[1])==null?void 0:p.audioLevel)||0)>r?1:-1});if(t.length>0&&t[0][1].audioLevel&&t[0][1].audioLevel>0){let i=t[0][1].peerID;if(i in s)return s[i]}return null}),Xt=s=>{let e=L(s);return Q(s,e==null?void 0:e.audioTrack)},de=s=>{let e=L(s);return Q(s,e==null?void 0:e.videoTrack)},be=s=>{let e=L(s);return tt(s,e==null?void 0:e.videoTrack)},ue=(0,d.createSelector)(L,y,(s,e)=>{let{video:t,audio:i}=$(e,s);return!!(t||i)}),ot=(0,d.createSelector)(v,y,(s,e)=>{let t;for(let i in s){let o=s[i],{video:r,audio:n}=$(e,o);if(r)return o;n&&!t&&(t=o)}return t}),zt=(0,d.createSelector)(ot,s=>!!s),Zt=(0,d.createSelector)(v,y,(s,e)=>{for(let t in s){let i=s[t],{audio:o,video:r}=$(e,i);if(!r&&!!o)return i}}),es=(0,d.createSelector)(v,y,(s,e)=>{let t=[],i=[];for(let o in s){let r=s[o],{video:n,audio:c}=$(e,r);n?t.push(r):c&&i.push(r)}return t.concat(i)}),ts=(0,d.createSelector)(v,y,(s,e)=>{for(let t in e){let i=e[t];if(te(i)&&ee(i)&&i.peerId)return s[i.peerId]}}),ss=(0,d.createSelector)(v,y,(s,e)=>{for(let t in e){let i=e[t];if(Se(i)&&i.peerId)return s[i.peerId]}}),is=(0,d.createSelector)(Qt,s=>s.filter(et)),Ee=(0,d.createSelector)(Ie,s=>s.length),os=(0,d.createSelector)(Re,s=>Object.values(s).filter(e=>!e.read).length),se=(0,d.createSelector)(Ie,Re,(s,e)=>{let t=[];return s.forEach(i=>{t.push(e[i])}),t}),b=(0,d.createSelector)([D],s=>s&&s.roomState),rs=(0,d.createSelector)(b,s=>s===T.Preview),Ae=(0,d.createSelector)(D,s=>s.roomState!==T.Disconnected),K=s=>s.roles,ns=(0,d.createSelector)([K],s=>Object.keys(s)),ie=(0,d.createSelector)([L,K],(s,e)=>(s==null?void 0:s.roleName)?e[s.roleName]:null),as=(0,d.createSelector)([ie],s=>{var e;return((e=s==null?void 0:s.subscribeParams)==null?void 0:e.subscribeToRoles)?s.subscribeParams.subscribeToRoles.length>0:!1}),Ce=(0,d.createSelector)(ie,s=>s==null?void 0:s.permissions),cs=(0,d.createSelector)(D,s=>s.recording),ls=(0,d.createSelector)(D,s=>s.rtmp),Ss=(0,d.createSelector)(D,s=>s.hls),ds=(0,d.createSelector)(D,s=>s.sessionId),us=(0,d.createSelector)(D,s=>s.startedAt);var Le=I(require("reselect"));var rt=(s=M.audio)=>e=>e.playlist[s].list,xe=(s=M.audio)=>e=>e.playlist[s].selection,nt=(s=M.audio)=>e=>e.playlist[s].progress,at=(s=M.audio)=>e=>e.playlist[s].currentTime,ct=(s=M.audio)=>e=>e.playlist[s].playbackRate,lt=(s=M.audio)=>e=>e.playlist[s].volume,St=(s=M.audio)=>(0,Le.createSelector)(rt(s),e=>Object.values(e)),dt=(s=M.audio)=>(0,Le.createSelector)(rt(s),xe(s),(e,t)=>{if(!!t.id)return e[t.id]}),Oe={selection:xe(M.audio),progress:nt(M.audio),currentTime:at(M.audio),playbackRate:ct(M.audio),volume:lt(M.audio),list:St(M.audio),selectedItem:dt(M.audio)},we={selection:xe(M.video),progress:nt(M.video),currentTime:at(M.video),playbackRate:ct(M.video),volume:lt(M.video),list:St(M.video),selectedItem:dt(M.video)};var k=I(require("reselect"));function u(s){return e=>t=>s(t,e)}var oe="HMS-Store:",m=class{static v(e,...t){this.log(a.HMSLogLevel.VERBOSE,e,...t)}static d(...e){this.log(a.HMSLogLevel.DEBUG,...e)}static i(...e){this.log(a.HMSLogLevel.INFO,...e)}static w(...e){this.log(a.HMSLogLevel.WARN,...e)}static e(...e){this.log(a.HMSLogLevel.ERROR,...e)}static time(e){this.log(a.HMSLogLevel.TIME,"[HMSPerformanceTiming]",e)}static timeEnd(e){this.log(a.HMSLogLevel.TIMEEND,"[HMSPerformanceTiming]",e,e)}static cleanUp(){performance.clearMarks(),performance.clearMeasures()}static log(e,...t){if(!(this.level.valueOf()>e.valueOf()))switch(e){case a.HMSLogLevel.VERBOSE:{console.log(oe,...t);break}case a.HMSLogLevel.DEBUG:{console.debug(oe,...t);break}case a.HMSLogLevel.INFO:{console.info(oe,...t);break}case a.HMSLogLevel.WARN:{console.warn(oe,...t);break}case a.HMSLogLevel.ERROR:{console.error(oe,...t);break}case a.HMSLogLevel.TIME:{performance.mark(t[1]);break}case a.HMSLogLevel.TIMEEND:{let i=t[0],o=t[1];try{let r=performance.measure(o,o);this.log(a.HMSLogLevel.DEBUG,i,o,r==null?void 0:r.duration),performance.clearMarks(o),performance.clearMeasures(o)}catch(r){this.log(a.HMSLogLevel.DEBUG,i,o,r)}break}}}};m.level=a.HMSLogLevel.VERBOSE;var Ne=(s,e)=>e,ps=(s,e)=>e,ut=(s,e)=>e,E=(0,k.createSelector)([v,Ne],(s,e)=>e?s[e]:null),Ue=(0,k.createSelector)([y,ps],(s,e)=>e?s[e]:null),O=u(E),Ms=u((0,k.createSelector)(E,s=>s==null?void 0:s.name)),re=u(Ue),pt=u((s,e)=>{let t=E(s,e);if(t&&t.videoTrack&&t.videoTrack!=="")return s.tracks[t.videoTrack]}),Mt=u((s,e)=>{let t=E(s,e);if(t&&t.audioTrack&&t.audioTrack!=="")return s.tracks[t.audioTrack]}),ms=pt,hs=u((s,e)=>{let t=E(s,e);return(t==null?void 0:t.auxiliaryTracks.map(i=>s.tracks[i]))||[]}),mt=(s,e)=>e?s.speakers[e]:null,gs=u((0,k.createSelector)(mt,s=>(s==null?void 0:s.audioLevel)||0)),Ts=(s,e)=>{let t=Mt(e)(s);return mt(s,t==null?void 0:t.id)},Hs=u((0,k.createSelector)(Ts,s=>(s==null?void 0:s.audioLevel)||0)),ys=u((s,e)=>{if(e)return s.connectionQualities[e]}),fs=u((s,e)=>{let t=E(s,e);if(t){let i=t==null?void 0:t.auxiliaryTracks.find(o=>Z(s.tracks[o]));return i?s.tracks[i]:void 0}}),ks=u((0,k.createSelector)(y,E,(s,e)=>{let t=e==null?void 0:e.auxiliaryTracks.find(i=>{let o=s[i];return te(o)&&ee(o)});return t?s[t]:void 0})),Ps=u((0,k.createSelector)(y,E,(s,e)=>{let t=e==null?void 0:e.auxiliaryTracks.find(i=>{let o=s[i];return te(o)&&Z(o)});return t?s[t]:void 0})),Rs=u((0,k.createSelector)(y,E,(s,e)=>{let t=e==null?void 0:e.auxiliaryTracks.find(i=>{let o=s[i];return Se(o)&&Z(o)});return t?s[t]:void 0})),_e=u((0,k.createSelector)(y,E,(s,e)=>$(s,e))),Is=s=>(0,k.createSelector)(_e(s),e=>e.video),Ke=s=>(0,k.createSelector)(_e(s),e=>e.audio),Ds=u((s,e)=>{let t=E(s,e);return Q(s,t==null?void 0:t.audioTrack)}),vs=u((s,e)=>{let t=E(s,e);return Q(s,t==null?void 0:t.videoTrack)}),Ve=u((s,e)=>{if(e&&s.tracks[e])return s.tracks[e].volume===0}),bs=u((s,e)=>{let t=E(s,e);return Ve(t==null?void 0:t.audioTrack)(s)}),Es=u((s,e)=>{let t=Ke(e)(s);return Ve(t==null?void 0:t.id)(s)}),Be=u((s,e)=>{let t=Ue(s,e);if(t){if(t.type!=="audio"){m.w("Please pass audio track here");return}return t.volume}}),As=u((s,e)=>{let t=E(s,e);return Be(t==null?void 0:t.audioTrack)(s)}),Cs=u((s,e)=>{let t=Ke(e)(s);return Be(t==null?void 0:t.id)(s)}),Ls=u((s,e)=>{let t=Ue(s,e);if(t){if(t.type!=="video"){m.w("Please pass video track here");return}return t.layer}}),ht=(0,k.createSelector)([se,q,Ne],(s,e,t)=>{if(!!t)return s.filter(i=>{var o;return!i.recipientPeer&&!((o=i.recipientRoles)==null?void 0:o.length)||![e,t].includes(i.sender)?!1:[e,t].includes(i.recipientPeer)})}),gt=(0,k.createSelector)([se,ut],(s,e)=>{if(!!e)return s.filter(t=>{var i,o;return((i=t.recipientRoles)==null?void 0:i.length)?(o=t.recipientRoles)==null?void 0:o.includes(e):!1})}),Tt=(0,k.createSelector)(se,s=>s.filter(e=>{var t;return!e.recipientPeer&&!((t=e.recipientRoles)==null?void 0:t.length)})),xs=(0,k.createSelector)([gt,ut],s=>s?s.filter(e=>!e.read).length:0),Os=(0,k.createSelector)([ht,Ne],s=>s?s.filter(e=>!e.read).length:0),ws=(0,k.createSelector)(Tt,s=>s.filter(e=>!e.read).length),Ns=u(ht),Us=u(gt),_s=u(xs),Ks=u(Os),Vs=s=>(0,k.createSelector)([W],e=>e.filter(t=>t.roleName===s)),Bs=s=>(0,k.createSelector)(O(s),e=>{try{return(e==null?void 0:e.metadata)&&e.metadata!==""?JSON.parse(e.metadata):{}}catch(t){return console.error("cannot parse peer metadata",t),{}}});var pe=I(require("reselect")),qs=(0,pe.createSelector)([v,y],(s,e)=>Object.values(s).map(i=>{var o;return{peer:i,isAudioEnabled:i.audioTrack?(o=e[i.audioTrack])==null?void 0:o.enabled:!1}})),js=s=>s.roleChangeRequests[0]||null,$s=(0,pe.createSelector)([js,v,K],(s,e,t)=>s?{requestedBy:s.requestedBy?e[s.requestedBy]:void 0,role:t[s.roleName],token:s.token}:null),Ws=(0,pe.createSelector)([ie],s=>{var o;let e=!1,t=!1,i=!1;return((o=s==null?void 0:s.publishParams)==null?void 0:o.allowed)&&(e=s.publishParams.allowed.includes("video"),t=s.publishParams.allowed.includes("audio"),i=s.publishParams.allowed.includes("screen")),{video:e,audio:t,screen:i}});var V=I(require("reselect"));var Fs=s=>(0,V.createSelector)([K],e=>e[s]),Qs=(0,V.createSelector)([C,y],(s,e)=>{let t=null;return s&&(t=e[s]),(t==null?void 0:t.plugins)||[]}),Gs=(0,V.createSelector)([A,y],(s,e)=>{let t=null;return s&&(t=e[s]),(t==null?void 0:t.plugins)||[]}),Js=s=>(0,V.createSelector)([Qs],e=>e.includes(s)),Ys=s=>(0,V.createSelector)([Gs],e=>e.includes(s)),Xs=s=>(0,V.createSelector)(W,e=>e.find(s)),zs=s=>(0,V.createSelector)(W,e=>e.filter(s)),Zs=s=>(0,V.createSelector)(D,e=>e.joinedAt&&Date.now()-e.joinedAt.getTime()<=s);var ne=I(require("@100mslive/hms-video"));var Me=I(require("@100mslive/hms-video"));function Ht(s){return s instanceof Me.HMSRemoteAudioTrack||s instanceof Me.HMSRemoteVideoTrack}var me=class{constructor(e,t,i,o){this.playlistManager=e;this.syncPlaylistState=i;this.store=o;this.type=t}play(e){return l(this,null,function*(){if(!e){m.w("Please pass id to play");return}yield this.playlistManager.setEnabled(!0,{id:e,type:this.type})})}pause(){return l(this,null,function*(){let e=this.type===M.audio?Oe:we,t=this.store.getState(e.selection);if(!t.id){m.w("No item is currently playing to pause");return}yield this.playlistManager.setEnabled(!1,{id:t.id,type:this.type})})}playNext(){return l(this,null,function*(){yield this.playlistManager.playNext(this.type)})}playPrevious(){return l(this,null,function*(){yield this.playlistManager.playPrevious(this.type)})}seek(e){this.playlistManager.seek(e,this.type),this.syncPlaylistState(`seekOn${this.type}Playlist`)}seekTo(e){this.playlistManager.seekTo(e,this.type),this.syncPlaylistState(`seekToOn${this.type}Playlist`)}setVolume(e){this.playlistManager.setVolume(e,this.type),this.syncPlaylistState(`setVolumeOn${this.type}Playlist`)}setList(e){this.playlistManager.setList(e),this.syncPlaylistState(`setListOn${this.type}Playlist`)}stop(){return l(this,null,function*(){yield this.playlistManager.stop(this.type),this.syncPlaylistState(`stop${this.type}Playlist`)})}setIsAutoplayOn(e){this.playlistManager.setIsAutoplayOn(this.type,e)}setPlaybackRate(e){this.playlistManager.setPlaybackRate(this.type,e),this.syncPlaylistState(`set${this.type}PlaybackRate`)}};var yt={[a.HMSPeerUpdate.PEER_JOINED]:h.PEER_JOINED,[a.HMSPeerUpdate.PEER_LEFT]:h.PEER_LEFT,[a.HMSPeerUpdate.ROLE_UPDATED]:h.ROLE_UPDATED,[a.HMSPeerUpdate.AUDIO_TOGGLED]:"PEER_AUDIO_UPDATED",[a.HMSPeerUpdate.VIDEO_TOGGLED]:"PEER_VIDEO_UPDATED",[a.HMSPeerUpdate.NAME_UPDATED]:h.NAME_UPDATED,[a.HMSPeerUpdate.METADATA_UPDATED]:h.METADATA_UPDATED},ft={[a.HMSTrackUpdate.TRACK_ADDED]:h.TRACK_ADDED,[a.HMSTrackUpdate.TRACK_REMOVED]:h.TRACK_REMOVED,[a.HMSTrackUpdate.TRACK_MUTED]:h.TRACK_MUTED,[a.HMSTrackUpdate.TRACK_UNMUTED]:h.TRACK_UNMUTED,[a.HMSTrackUpdate.TRACK_DEGRADED]:h.TRACK_DEGRADED,[a.HMSTrackUpdate.TRACK_RESTORED]:h.TRACK_RESTORED},kt={[a.HMSPeerUpdate.PEER_JOINED]:"peerJoined",[a.HMSPeerUpdate.PEER_LEFT]:"peerLeft",[a.HMSPeerUpdate.NAME_UPDATED]:"peerNameUpdated",[a.HMSPeerUpdate.ROLE_UPDATED]:"peerRoleUpdated",[a.HMSPeerUpdate.METADATA_UPDATED]:"peerMetadataUpdated"};var qe=class{constructor(e,t,i){this.hmsSDKTracks={};this.hmsSDKPeers={};this.isRoomJoinCalled=!1;this.ignoredMessageTypes=[];this.setProgress=({type:e,progress:t})=>{this.setState(i=>{i.playlist[e].progress=t,i.playlist[e].currentTime=this.sdk.getPlaylistManager().getCurrentTime(e)},"playlistProgress")};this.syncPlaylistState=e=>{this.setState(t=>{Object.assign(t.playlist,g.convertPlaylist(this.sdk.getPlaylistManager()))},e)};this.sendPeerUpdateNotification=(e,t)=>{let i=this.store.getState(O(t.peerId)),o=kt[e];this.syncRoomState(o),i||(i=this.store.getState(O(t.peerId))),this.hmsNotifications.sendPeerUpdate(e,i)};this.setState=(e,t)=>this.store.namedSetState(e,t);this.store=e,this.sdk=t,this.hmsNotifications=i}refreshDevices(){return l(this,null,function*(){yield this.sdk.refreshDevices()})}unblockAudio(){return l(this,null,function*(){yield this.sdk.getAudioOutput().unblockAutoplay()})}setVolume(e,t){t?this.setTrackVolume(e,t):(this.sdk.getAudioOutput().setVolume(e),this.syncRoomState("setOutputVolume"))}setAudioOutputDevice(e){this.sdk.getAudioOutput().setDevice(e)&&this.setState(i=>{i.settings.audioOutputDeviceId=e},"setAudioOutputDevice")}setPreferredLayer(e,t){let i=this.hmsSDKTracks[e];i?i instanceof ne.HMSRemoteVideoTrack?(i.preferLayer(t),this.updateVideoLayer(e,"setPreferredLayer")):m.w(`track ${e} is not an video track`):this.logPossibleInconsistency(`track ${e} not present, unable to set preffer layer`)}preview(e){return l(this,null,function*(){if(this.isRoomJoinCalled){this.logPossibleInconsistency("attempting to call preview after join was called");return}let t=this.store.getState(b);if(t===T.Preview||t===T.Connecting){this.logPossibleInconsistency("attempting to call preview while room is in preview/connecting");return}try{this.setState(i=>{i.room.roomState=T.Connecting},"connecting"),yield this.sdkPreviewWithListeners(e)}catch(i){throw m.e("Cannot show preview. Failed to connect to room - ",i),i}})}join(e){if(this.isRoomJoinCalled){this.logPossibleInconsistency("room join is called again");return}try{this.isRoomJoinCalled=!0,this.setState(t=>{t.room.roomState=T.Connecting},"join"),this.sdkJoinWithListeners(e)}catch(t){throw this.isRoomJoinCalled=!1,m.e("Failed to connect to room - ",t),t}}leave(){return l(this,null,function*(){if(!this.store.getState(Ae)){this.logPossibleInconsistency("room leave is called when no room is connected");return}let t=this.store.getState(b);return this.setState(i=>{i.room.roomState=T.Disconnecting},"leaving"),this.sdk.leave().then(()=>{this.resetState("leave"),m.i("left room")}).catch(i=>{m.e("error in leaving room - ",i),this.setState(o=>{o.room.roomState=t},"revertLeave")})})}setScreenShareEnabled(e,t){return l(this,null,function*(){let i={audioOnly:!1,videoOnly:!1};typeof t=="object"?Object.assign(i,t):typeof t=="boolean"&&(i.audioOnly=t);try{e?yield this.startScreenShare(i):yield this.stopScreenShare()}catch(o){throw this.hmsNotifications.sendError(g.convertException(o)),o}})}addTrack(e,t="regular"){return l(this,null,function*(){yield this.sdk.addTrack(e,t),this.syncRoomState("addTrack")})}removeTrack(e){return l(this,null,function*(){yield this.sdk.removeTrack(e),this.syncRoomState("removeTrack")})}setLocalAudioEnabled(e){return l(this,null,function*(){let t=this.store.getState(A);t&&(yield this.setEnabledTrack(t,e))})}setLocalVideoEnabled(e){return l(this,null,function*(){let t=this.store.getState(C);t&&(yield this.setEnabledTrack(t,e))})}setEnabledTrack(e,t){return l(this,null,function*(){var r;if(((r=this.store.getState().tracks[e])==null?void 0:r.enabled)===t){this.logPossibleInconsistency(`local track[${e}] enabled state - ${t}`);return}this.setState(n=>{n.tracks[e]?n.tracks[e].displayEnabled=t:this.logPossibleInconsistency("track id not found for setEnabled")},"displayEnabled");try{yield this.setEnabledSDKTrack(e,t),this.syncRoomState("setEnabled")}catch(n){throw this.setState(c=>{c.tracks[e].displayEnabled=!t},"rollbackDisplayEnabled"),this.hmsNotifications.sendError(g.convertException(n)),n}let o=t?a.HMSTrackUpdate.TRACK_UNMUTED:a.HMSTrackUpdate.TRACK_MUTED;this.hmsNotifications.sendTrackUpdate(o,e)})}setAudioSettings(e){return l(this,null,function*(){let t=this.store.getState(A);t&&(yield this.setSDKLocalAudioTrackSettings(t,e),this.syncRoomState("setAudioSettings"))})}setVideoSettings(e){return l(this,null,function*(){let t=this.store.getState(C);t&&(yield this.setSDKLocalVideoTrackSettings(t,e),this.syncRoomState("setVideoSettings"))})}sendMessage(e){this.sendBroadcastMessage(e)}sendBroadcastMessage(e,t){return l(this,null,function*(){let i=yield this.sdk.sendBroadcastMessage(e,t);this.updateMessageInStore(i,{message:e,type:t})})}sendGroupMessage(e,t,i){return l(this,null,function*(){let o=this.store.getState(K),r=t.map(c=>o[c]),n=yield this.sdk.sendGroupMessage(e,r,i);this.updateMessageInStore(n,{message:e,recipientRoles:t,type:i})})}sendDirectMessage(e,t,i){return l(this,null,function*(){let o=this.hmsSDKPeers[t],r=yield this.sdk.sendDirectMessage(e,o,i);this.updateMessageInStore(r,{message:e,recipientPeer:o.peerId,type:i})})}updateMessageInStore(e,t){if(!e)throw m.w("sendMessage","Failed to send message",t),Error(`sendMessage Failed - ${JSON.stringify(t)}`);let i=g.convertMessage(e);return i.read=!0,i.senderName="You",i.ignored=this.ignoredMessageTypes.includes(i.type),this.putMessageInStore(i),i}setMessageRead(e,t){this.setState(i=>{t?i.messages.byID[t]?i.messages.byID[t].read=e:this.logPossibleInconsistency("no message with id is found"):i.messages.allIDs.forEach(o=>{i.messages.byID[o].read=e})},"setMessageRead")}attachVideo(e,t){return l(this,null,function*(){if(this.localAndVideoUnmuting(e))return new Promise(i=>{let o=this.store.subscribe(r=>l(this,null,function*(){r&&(yield this.attachVideoInternal(e,t),o(),i())}),de)});yield this.attachVideoInternal(e,t)})}detachVideo(e,t){return l(this,null,function*(){let i=this.hmsSDKTracks[e];i&&i.type==="video"?(yield i.removeSink(t),this.updateVideoLayer(e,"detachVideo")):this.logPossibleInconsistency("no video track found to remove sink")})}addPluginToVideoTrack(e,t){return l(this,null,function*(){return this.addRemoveVideoPlugin(e,"add",t)})}addPluginToAudioTrack(e){return l(this,null,function*(){return this.addRemoveAudioPlugin(e,"add")})}validateVideoPluginSupport(e){let t={};if(t.isSupported=!1,!e)return m.w("no plugin passed in for checking support"),t.errMsg="no plugin passed in for checking support",t;let i=this.store.getState(C);if(i){let o=this.hmsSDKTracks[i];o?t=o.validatePlugin(e):(m.w(`track ${i} not present, unable to validate plugin`),t.errMsg=`track ${i} not present, unable to validate plugin`)}return t}validateAudioPluginSupport(e){let t={};if(t.isSupported=!1,!e)return m.w('no plugin passed in for checking support"'),t.errMsg='no plugin passed in for checking support"',t;let i=this.store.getState(A);if(i){let o=this.hmsSDKTracks[i];o?t=o.validatePlugin(e):(m.w(`track ${i} not present, unable to validate plugin`),t.errMsg=`track ${i} not present, unable to validate plugin`)}return t}removePluginFromVideoTrack(e){return l(this,null,function*(){return this.addRemoveVideoPlugin(e,"remove")})}removePluginFromAudioTrack(e){return l(this,null,function*(){return this.addRemoveAudioPlugin(e,"remove")})}changeRole(e,t,i=!1){return l(this,null,function*(){let o=this.hmsSDKPeers[e];if(!o){this.logPossibleInconsistency(`Unknown peer ID given ${e} for changerole`);return}yield this.sdk.changeRole(o,t,i)})}acceptChangeRole(e){return l(this,null,function*(){let t=e.requestedBy?this.hmsSDKPeers[e.requestedBy.id]:void 0;t||m.w(`peer for which role change is requested no longer available - ${e.requestedBy}`);let i={requestedBy:t,role:e.role,token:e.token};yield this.sdk.acceptChangeRole(i),this.removeRoleChangeRequest(e)})}rejectChangeRole(e){this.removeRoleChangeRequest(e)}endRoom(e,t){return l(this,null,function*(){let i=this.store.getState(Ce);if(!(i==null?void 0:i.endRoom)){m.w("You are not allowed to perform this action - endRoom");return}let o=this.store.getState(b);this.setState(r=>{r.room.roomState=T.Disconnecting},"endingRoom");try{yield this.sdk.endRoom(e,t),this.resetState("endRoom")}catch(r){m.e("error in ending room - ",r),this.setState(n=>{n.room.roomState=o},"revertEndRoom")}})}removePeer(e,t){return l(this,null,function*(){let i=this.hmsSDKPeers[e];if(i&&!i.isLocal)yield this.sdk.removePeer(i,t);else{this.logPossibleInconsistency(`No remote peer found for peerID - ${e}`);return}})}startRTMPOrRecording(e){return l(this,null,function*(){yield this.sdk.startRTMPOrRecording(e)})}stopRTMPAndRecording(){return l(this,null,function*(){yield this.sdk.stopRTMPAndRecording()})}startHLSStreaming(e){return l(this,null,function*(){yield this.sdk.startHLSStreaming(e)})}stopHLSStreaming(e){return l(this,null,function*(){yield this.sdk.stopHLSStreaming(e)})}changeName(e){return l(this,null,function*(){yield this.sdk.changeName(e)})}changeMetadata(e){return l(this,null,function*(){typeof e!="string"&&(e=JSON.stringify(e)),yield this.sdk.changeMetadata(e)})}setRemoteTrackEnabled(e,t){return l(this,null,function*(){if(typeof e=="string"){let i=this.hmsSDKTracks[e];i&&Ht(i)?yield this.sdk.changeTrackState(i,t):this.logPossibleInconsistency(`No remote track with ID ${e} found for change track state`)}else Array.isArray(e)&&e.forEach(i=>this.setRemoteTrackEnabled(i,t))})}setRemoteTracksEnabled(e){return l(this,null,function*(){let t={enabled:e.enabled,type:e.type,source:e.source};if(e.roles){let i=this.store.getState(K);t.roles=e.roles.map(o=>i[o])}yield this.sdk.changeMultiTrackState(t)})}setLogLevel(e){m.level=e,this.sdk.setLogLevel(e)}ignoreMessageTypes(e,t=!1){if(t)this.ignoredMessageTypes=e;else for(let i of e)this.ignoredMessageTypes.includes(i)||this.ignoredMessageTypes.push(i)}resetState(e="resetState"){this.setState(t=>{Object.assign(t,X())},e),this.isRoomJoinCalled=!1,this.hmsSDKTracks={},m.cleanUp()}sdkJoinWithListeners(e){this.sdk.join(e,{onJoin:this.onJoin.bind(this),onRoomUpdate:this.onRoomUpdate.bind(this),onPeerUpdate:this.onPeerUpdate.bind(this),onTrackUpdate:this.onTrackUpdate.bind(this),onMessageReceived:this.onMessageReceived.bind(this),onError:this.onError.bind(this),onReconnected:this.onReconnected.bind(this),onReconnecting:this.onReconnecting.bind(this),onRoleChangeRequest:this.onRoleChangeRequest.bind(this),onRoleUpdate:this.onRoleUpdate.bind(this),onDeviceChange:this.onDeviceChange.bind(this),onChangeTrackStateRequest:this.onChangeTrackStateRequest.bind(this),onChangeMultiTrackStateRequest:this.onChangeMultiTrackStateRequest.bind(this),onRemovedFromRoom:this.onRemovedFromRoom.bind(this),onNetworkQuality:this.onNetworkQuality.bind(this)}),this.sdk.addAudioListener({onAudioLevelUpdate:this.onAudioLevelUpdate.bind(this)}),this.sdk.addConnectionQualityListener({onConnectionQualityUpdate:this.onConnectionQualityUpdate.bind(this)})}onRemovedFromRoom(e){var o;let t=this.store.getState(O((o=e.requestedBy)==null?void 0:o.peerId));this.hmsNotifications.sendLeaveRoom(F(N({},e),{requestedBy:t||void 0}));let i=e.roomEnded||!t?"roomEnded":"removedFromRoom";m.i(`resetting state after peer removed ${i}`,e),this.resetState(i)}onDeviceChange(e){let t=e.devices;if(!t)return;let i=this.store.getState(L);if(this.setState(o=>{U(o.devices.audioInput,t.audioInput)||(o.devices.audioInput=t.audioInput),U(o.devices.videoInput,t.videoInput)||(o.devices.videoInput=t.videoInput),U(o.devices.audioOutput,t.audioOutput)||(o.devices.audioOutput=t.audioOutput),this.hmsSDKPeers[i==null?void 0:i.id]&&Object.assign(o.settings,this.getMediaSettings(this.hmsSDKPeers[i==null?void 0:i.id]))},"deviceChange"),e.selection){let o=g.convertDeviceChangeUpdate(e);this.hmsNotifications.sendDeviceChange(o)}}sdkPreviewWithListeners(e){return l(this,null,function*(){yield this.sdk.preview(e,{onPreview:this.onPreview.bind(this),onError:this.onError.bind(this),onReconnected:this.onReconnected.bind(this),onReconnecting:this.onReconnecting.bind(this),onDeviceChange:this.onDeviceChange.bind(this),onRoomUpdate:this.onRoomUpdate.bind(this),onPeerUpdate:this.onPeerUpdate.bind(this),onNetworkQuality:this.onNetworkQuality.bind(this)}),this.sdk.addAudioListener({onAudioLevelUpdate:this.onAudioLevelUpdate.bind(this)})})}onNetworkQuality(e){this.setState(t=>{var o;let i=t.room.localPeer||((o=this.sdk.getLocalPeer())==null?void 0:o.peerId);i&&(t.connectionQualities[i]={peerID:i,downlinkQuality:e})},"ConnectionQuality")}startScreenShare(e){return l(this,null,function*(){this.store.getState(ue)?this.logPossibleInconsistency("start screenshare is called while it's on"):(yield this.sdk.startScreenShare(()=>this.syncRoomState("screenshareStopped"),e),this.syncRoomState("startScreenShare"))})}stopScreenShare(){return l(this,null,function*(){this.store.getState(ue)?(yield this.sdk.stopScreenShare(),this.syncRoomState("stopScreenShare")):this.logPossibleInconsistency("stop screenshare is called while it's not on")})}attachVideoInternal(e,t){return l(this,null,function*(){let i=this.hmsSDKTracks[e];i&&i.type==="video"?(yield i.addSink(t),this.updateVideoLayer(e,"attachVideo")):this.logPossibleInconsistency("no video track found to add sink")})}syncRoomState(e){m.time(`store-sync-${e}`);let t={},i=[],o={},r={},n={},c=this.sdk.getPeers();for(let f of c){let w=g.convertPeer(f);t[w.id]=w,i.push(w.id),this.hmsSDKPeers[w.id]=f;let J=[f.audioTrack,f.videoTrack,...f.auxiliaryTracks];for(let le of J){if(!le)continue;let Qe=g.convertTrack(le);o[Qe.id]=Qe,r[le.trackId]=le}w.isLocal&&Object.assign(n,this.getMediaSettings(f))}let p=this.sdk.getRecordingState(),R=this.sdk.getRTMPState(),j=this.sdk.getHLSState();this.setState(f=>{f.room.peers=i;let w=f.peers,J=f.tracks;ze(w,t),Ze(J,o),Object.assign(f.settings,n),this.hmsSDKTracks=r,Object.assign(f.roles,g.convertRoles(this.sdk.getRoles())),Object.assign(f.playlist,g.convertPlaylist(this.sdk.getPlaylistManager())),Object.assign(f.room,g.convertRecordingStreamingState(p,R,j))},e),m.timeEnd(`store-sync-${e}`)}onPreview(e){this.setState(t=>{Object.assign(t.room,g.convertRoom(e)),t.room.roomState=T.Preview},"previewStart"),this.syncRoomState("previewSync")}onJoin(e){let t=this.sdk.getPlaylistManager();this.audioPlaylist=new me(t,M.audio,this.syncPlaylistState.bind(this),this.store),this.videoPlaylist=new me(t,M.video,this.syncRoomState.bind(this),this.store),this.syncRoomState("joinSync"),this.setState(i=>{Object.assign(i.room,g.convertRoom(e)),i.room.isConnected=!0,i.room.roomState=T.Connected},"joined"),t.onProgress(this.setProgress),t.onNewTrackStart(i=>{this.syncPlaylistState(`${i.type}PlaylistUpdate`)}),t.onPlaylistEnded(i=>{this.syncPlaylistState(`${i}PlaylistEnded`)}),t.onCurrentTrackEnded(i=>{this.hmsNotifications.sendPlaylistTrackEnded(g.convertPlaylistItem(t,i)),this.syncPlaylistState(`${i.type}PlaylistItemEnded`)})}onRoomUpdate(e,t){this.setState(i=>{Object.assign(i.room,g.convertRoom(t))},"RoomUpdate")}onPeerUpdate(e,t){if(![a.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER,a.HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER].includes(e)){if(Array.isArray(t)){this.syncRoomState("peersJoined");let i=[];for(let o of t){let r=this.store.getState(O(o.peerId));r&&i.push(r)}this.hmsNotifications.sendPeerList(i);return}this.sendPeerUpdateNotification(e,t)}}onTrackUpdate(e,t,i){if(e===a.HMSTrackUpdate.TRACK_REMOVED)this.hmsNotifications.sendTrackUpdate(e,t.trackId),this.handleTrackRemove(t,i);else{let o=e===a.HMSTrackUpdate.TRACK_ADDED?"trackAdded":"trackUpdate";this.syncRoomState(o),this.hmsNotifications.sendTrackUpdate(e,t.trackId)}}onMessageReceived(e){let t=g.convertMessage(e);t.read=!1,t.ignored=this.ignoredMessageTypes.includes(t.type),this.putMessageInStore(t),this.hmsNotifications.sendMessageReceived(t)}putMessageInStore(e){e.ignored||this.setState(t=>{e.id=String(this.store.getState(Ee)+1),t.messages.byID[e.id]=e,t.messages.allIDs.push(e.id)},"newMessage")}onAudioLevelUpdate(e){this.setState(t=>{let i={};e.forEach(r=>{if(!r.track||!r.peer)return;let n=r.track.trackId;i[n]=r.audioLevel,t.speakers[n]||(t.speakers[n]={audioLevel:r.audioLevel,peerID:r.peer.peerId,trackID:n})});let o=Object.entries(t.speakers);for(let[r,n]of o)n.audioLevel=i[r]||0,n.audioLevel===0&&delete t.speakers[r]},"audioLevel")}onConnectionQualityUpdate(e){this.setState(t=>{let i=new Set;e.forEach(r=>{let n=r.peerID;!n||(i.add(n),t.connectionQualities[n]?Object.assign(t.connectionQualities[n],r):t.connectionQualities[n]=r)});let o=Object.keys(t.connectionQualities);for(let r of o)i.has(r)||delete t.connectionQualities[r]},"connectionQuality")}onChangeTrackStateRequest(e){var r;let t=this.store.getState(O((r=e.requestedBy)==null?void 0:r.peerId)),i=this.getStoreLocalTrackIDfromSDKTrack(e.track),o=this.store.getState(re(i));if(!o)return this.logPossibleInconsistency(`Not found track for which track state change was requested, ${e.track}`);e.enabled||this.syncRoomState("changeTrackStateRequest"),this.hmsNotifications.sendChangeTrackStateRequest({requestedBy:t||void 0,track:o,enabled:e.enabled})}onChangeMultiTrackStateRequest(e){var r;let t=this.store.getState(O((r=e.requestedBy)==null?void 0:r.peerId));e.enabled||this.syncRoomState("changeMultiTrackStateRequest");let i=[],o=this.store.getState(y);for(let n of e.tracks){let c=this.getStoreLocalTrackIDfromSDKTrack(n);c&&o[c]&&i.push(o[c])}this.hmsNotifications.sendChangeMultiTrackStateRequest({requestedBy:t||void 0,tracks:i,enabled:e.enabled,type:e.type,source:e.source})}onReconnected(){this.syncRoomState("reconnectedSync"),this.hmsNotifications.sendReconnected(),this.setState(e=>{e.room.roomState=e.room.isConnected?T.Connected:T.Preview},"reconnected")}onReconnecting(e){let t=g.convertException(e);m.e("Reconnection: received error from sdk",t),this.hmsNotifications.sendReconnecting(t),this.setState(i=>{i.room.roomState=T.Reconnecting,i.errors.push(t)},"reconnecting")}onError(e){let t=g.convertException(e);t.isTerminal?(this.leave().then(()=>m.e("error from SDK, left room.")),this.setState(i=>{i.room.roomState=T.Failed,i.errors.push(t)},"errorTerminal")):this.store.getState().errors.length<50&&this.setState(o=>{o.errors.push(t)},"error"),this.syncRoomState("errorSync"),this.hmsNotifications.sendError(t),m.e("received error from sdk",t)}updateVideoLayer(e,t){let i=this.hmsSDKTracks[e];i&&i instanceof ne.HMSRemoteVideoTrack&&this.setState(o=>{o.tracks[e].layer=i.getSimulcastLayer()},t)}handleTrackRemove(e,t){this.setState(i=>{let o=i.peers[t.peerId],r=i.tracks,n=e.trackId;if(this.isSameStoreSDKTrack(n,o==null?void 0:o.audioTrack))o==null||delete o.audioTrack;else if(this.isSameStoreSDKTrack(n,o==null?void 0:o.videoTrack))o==null||delete o.videoTrack;else{let c=o==null?void 0:o.auxiliaryTracks.indexOf(n);c>-1&&this.isSameStoreSDKTrack(n,o==null?void 0:o.auxiliaryTracks[c])&&(o==null||o.auxiliaryTracks.splice(c,1))}delete r[n],delete this.hmsSDKTracks[n]},"trackRemoved")}setEnabledSDKTrack(e,t){return l(this,null,function*(){let i=this.hmsSDKTracks[e];i?yield i.setEnabled(t):this.logPossibleInconsistency(`track ${e} not present, unable to enabled/disable`)})}setSDKLocalVideoTrackSettings(e,t){return l(this,null,function*(){let i=this.hmsSDKTracks[e];i?yield i.setSettings(t):this.logPossibleInconsistency(`local track ${e} not present, unable to set settings`)})}setSDKLocalAudioTrackSettings(e,t){return l(this,null,function*(){let i=this.hmsSDKTracks[e];i?yield i.setSettings(t):this.logPossibleInconsistency(`local track ${e} not present, unable to set settings`)})}getMediaSettings(e){var r;let t=this.store.getState(De),i=e.audioTrack,o=e.videoTrack;return{audioInputDeviceId:(i==null?void 0:i.settings.deviceId)||t.audioInputDeviceId,videoInputDeviceId:(o==null?void 0:o.settings.deviceId)||t.videoInputDeviceId,audioOutputDeviceId:(r=this.sdk.getAudioOutput().getDevice())==null?void 0:r.deviceId}}setTrackVolume(e,t){let i=this.hmsSDKTracks[t];i?i instanceof ne.HMSAudioTrack?(i.setVolume(e),this.setState(o=>{let r=o.tracks[t];r&&(r.volume=e)},"trackVolume")):m.w(`track ${t} is not an audio track`):this.logPossibleInconsistency(`track ${t} not present, unable to set volume`)}localAndVideoUnmuting(e){if(this.store.getState(L).videoTrack!==e)return!1;let i=this.store.getState(be),o=this.store.getState(de);return i&&!o}logPossibleInconsistency(e){m.w("possible inconsistency detected - ",e)}addRemoveVideoPlugin(e,t,i){return l(this,null,function*(){if(!e){m.w("Invalid plugin received in store");return}let o=this.store.getState(C);if(o){let r=this.hmsSDKTracks[o];r?(t==="add"?yield r.addPlugin(e,i):t==="remove"&&(yield r.removePlugin(e)),this.syncRoomState(`${t}VideoPlugin`)):this.logPossibleInconsistency(`track ${o} not present, unable to remove plugin`)}})}addRemoveAudioPlugin(e,t){return l(this,null,function*(){if(!e){m.w("Invalid plugin received in store");return}let i=this.store.getState(A);if(i){let o=this.hmsSDKTracks[i];o?(t==="add"?yield o.addPlugin(e):t==="remove"&&(yield o.removePlugin(e)),this.syncRoomState(`${t}AudioPlugin`)):this.logPossibleInconsistency(`track ${i} not present, unable to remove plugin`)}})}isSameStoreSDKTrack(e,t){var i;return t?((i=this.hmsSDKTracks[t])==null?void 0:i.trackId)===e:!1}onRoleChangeRequest(e){this.setState(t=>{t.roleChangeRequests.length===0&&t.roleChangeRequests.push(g.convertRoleChangeRequest(e))},"roleChangeRequest")}removeRoleChangeRequest(e){this.setState(t=>{let i=t.roleChangeRequests.findIndex(o=>o.token===e.token);i!==-1&&t.roleChangeRequests.splice(i,1)},"removeRoleChangeRequest")}onRoleUpdate(){this.syncRoomState("roleUpdate")}getStoreLocalTrackIDfromSDKTrack(e){return this.store.getState(ve).find(i=>this.hmsSDKTracks[i].trackId===e.trackId)}};var Pt=I(require("eventemitter2"));var je="hmsNotification",$e=class{constructor(e){this.id=0;this.onNotification=(e,t)=>{let i=o=>{if(t){let r;if(Array.isArray(t)?r=t.includes(o.type):r=t===o.type,!r)return}e(o)};return this.eventEmitter.addListener(je,i),()=>{this.eventEmitter.removeListener(je,i)}};this.store=e,this.eventEmitter=new Pt.EventEmitter2}sendPlaylistTrackEnded(e){let t=this.createNotification(h.PLAYLIST_TRACK_ENDED,e,P.INFO);this.emitEvent(t)}sendDeviceChange(e){var i;let t=this.createNotification(h.DEVICE_CHANGE_UPDATE,e,e.error?P.ERROR:P.INFO,`Selected ${e.type} device - ${(i=e.selection)==null?void 0:i.label}`);this.emitEvent(t)}sendLeaveRoom(e){var o;let t=(o=e.requestedBy)==null?void 0:o.name,i=this.createNotification(e.roomEnded||!t?h.ROOM_ENDED:h.REMOVED_FROM_ROOM,e,P.INFO,`${e.roomEnded?"Room ended":"Removed from room"} ${t?`by ${t}`:""}`);this.emitEvent(i)}sendPeerList(e){let t=this.createNotification(h.PEER_LIST,e,P.INFO);this.emitEvent(t)}sendPeerUpdate(e,t){let i=this.store.getState(O(t==null?void 0:t.id))||t,o=yt[e];if(o){let r=this.createNotification(o,i,P.INFO);this.emitEvent(r)}}sendTrackUpdate(e,t){let i=this.store.getState(re(t)),o=ft[e];if(o){let r=this.createNotification(o,i,P.INFO);this.emitEvent(r)}}sendMessageReceived(e){let t=this.createNotification(h.NEW_MESSAGE,e,P.INFO);this.emitEvent(t)}sendError(e){let t=this.createNotification(h.ERROR,e,P.ERROR);this.emitEvent(t)}sendReconnecting(e){let t=this.createNotification(h.RECONNECTING,e,P.ERROR);this.emitEvent(t)}sendReconnected(){let e=this.createNotification(h.RECONNECTED,null,P.INFO);this.emitEvent(e)}sendChangeTrackStateRequest(e){let t=this.createNotification(h.CHANGE_TRACK_STATE_REQUEST,e,P.INFO);this.emitEvent(t)}sendChangeMultiTrackStateRequest(e){let t=this.createNotification(h.CHANGE_MULTI_TRACK_STATE_REQUEST,e,P.INFO);this.emitEvent(t)}emitEvent(e){this.eventEmitter.emit(je,e)}createNotification(e,t,i,o=""){return this.id++,{id:this.id,type:e,message:o,data:t,severity:i}}};var Rt=I(require("@100mslive/hms-video")),he=s=>Rt.isBrowser?`${s} ${document.title}`:s;var It=(s,e,t)=>{let i;t.getState(b)===T.Connected&&(i=Dt(s,e,t)),t.subscribe(o=>{[T.Connected,T.Reconnecting].includes(o)?i||(i=Dt(s,e,t)):i&&(si(e),i())},b)},Dt=(s,e,t)=>{var r;let i=ei(t,e),o=(r=s.getWebrtcInternals())==null?void 0:r.onStatsChange(n=>ti(e,n,t));return()=>{i(),o&&o()}},ei=(s,e)=>{let t,i,o;return s.getState(q)?e.namedSetState(r=>{r.localPeer.id=s.getState(q)},"localpeer-id"):t=s.subscribe(r=>{r&&e.namedSetState(n=>{n.localPeer.id=r},"localpeer-id")},q),s.getState(C)?e.namedSetState(r=>{r.localPeer.videoTrack=s.getState(C)},"localpeer-videotrack-id"):i=s.subscribe(r=>{r&&e.namedSetState(n=>{n.localPeer.videoTrack=r},"localpeer-videotrack-id")},C),s.getState(A)?e.namedSetState(r=>{r.localPeer.videoTrack=s.getState(A)},"localpeer-audiotrack-id"):o=s.subscribe(r=>{r&&e.namedSetState(n=>{n.localPeer.videoTrack=r},"localpeer-audiotrack-id")},A),()=>{t==null||t(),i==null||i(),o==null||o()}},ti=(s,e,t)=>{let i=t.getState(y);s.namedSetState(o=>{let r={},n=Object.keys(i);for(let R of n){let j=e.getTrackStats(R);j&&(r[R]=j)}He(o.trackStats,r);let p={[t.getState(q)]:e.getLocalPeerStats()};He(o.peerStats,p)},"webrtc-stats")},si=(s,e="resetState")=>{s.namedSetState(t=>{Object.assign(t,z())},e)};var ae=class{constructor(e,t){this.hmsStore=e;this.sdk=t;this.store=x.createNewHMSStore(he("HMSStatsStore"),z),this.getState=this.store.getState,this.subscribe=this.store.subscribe,this.getPublishPeerConnection=()=>new Promise(i=>{var o,r;this.hmsStore.getState(b)==="Connected"?i((r=(o=this.sdk)==null?void 0:o.getWebrtcInternals())==null?void 0:r.getPublishPeerConnection()):this.hmsStore.subscribe(n=>{var c,p;n==="Connected"&&i((p=(c=this.sdk)==null?void 0:c.getWebrtcInternals())==null?void 0:p.getPublishPeerConnection())},b)}),this.getSubscribePeerConnection=()=>new Promise(i=>{var o,r;this.hmsStore.getState(b)==="Connected"?i((r=(o=this.sdk)==null?void 0:o.getWebrtcInternals())==null?void 0:r.getSubscribePeerConnection()):this.hmsStore.subscribe(n=>{var c,p;n==="Connected"&&i((p=(c=this.sdk)==null?void 0:c.getWebrtcInternals())==null?void 0:p.getSubscribePeerConnection())},b)}),!!this.sdk&&It(this.sdk,this.store,this.hmsStore)}};var H=I(require("reselect"));var ii=s=>s.localPeer.id,oi=s=>s.localPeer.audioTrack,ri=s=>s.localPeer.videoTrack,ni=(s,e)=>e,ai=(s,e)=>e,We=s=>s.trackStats,vt=s=>s.peerStats,B=(0,H.createSelector)([vt,ii],(s,e)=>s[e]),ci=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.subscribe)==null?void 0:e.packetsLost}),li=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.subscribe)==null?void 0:e.jitter}),Si=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.publish)==null?void 0:e.bitrate}),di=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.subscribe)==null?void 0:e.bitrate}),ui=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.publish)==null?void 0:e.availableOutgoingBitrate}),pi=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.subscribe)==null?void 0:e.availableIncomingBitrate}),Mi=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.publish)==null?void 0:e.bytesSent}),mi=(0,H.createSelector)(B,s=>{var e;return(e=s==null?void 0:s.subscribe)==null?void 0:e.bytesReceived}),hi=(0,H.createSelector)([vt,ni],(s,e)=>e?s[e]:void 0),G=(0,H.createSelector)([We,ai],(s,e)=>e?s[e]:void 0),gi=u(hi),Ti=u(G),Hi=u((0,H.createSelector)(G,s=>s==null?void 0:s.bitrate)),yi=u((0,H.createSelector)(G,s=>s==null?void 0:s.bytesReceived)),fi=u((0,H.createSelector)(G,s=>s==null?void 0:s.framesPerSecond)),ki=u((0,H.createSelector)(G,s=>s==null?void 0:s.jitter)),Pi=u((0,H.createSelector)(G,s=>s==null?void 0:s.packetsLost)),Fe=(0,H.createSelector)([We,oi],(s,e)=>e?s[e]:void 0),ce=(0,H.createSelector)([We,ri],(s,e)=>e?s[e]:void 0),Ri=(0,H.createSelector)(Fe,s=>s==null?void 0:s.bitrate),Ii=(0,H.createSelector)(ce,s=>s==null?void 0:s.bitrate),Di=(0,H.createSelector)(Fe,s=>s==null?void 0:s.bytesSent),vi=(0,H.createSelector)(ce,s=>s==null?void 0:s.bytesSent),bi=(0,H.createSelector)(ce,s=>s==null?void 0:s.framesPerSecond),Ei=(0,H.createSelector)(ce,s=>s==null?void 0:s.qualityLimitationReason),bt={localPeerStats:B,packetsLost:ci,jitter:li,publishBitrate:Si,subscribeBitrate:di,availablePublishBitrate:ui,availableSubscribeBitrate:pi,totalBytesSent:Mi,totalBytesReceived:mi,peerStatsByID:gi,trackStatsByID:Ti,bitrateByTrackID:Hi,bytesReceivedByTrackID:yi,framerateByTrackID:fi,jitterByTrackID:ki,packetsLostByTrackID:Pi,localAudioTrackStats:Fe,localVideoTrackStats:ce,localAudioTrackBitrate:Ri,localVideoTrackBitrate:Ii,localAudioTrackBytesSent:Di,localVideoTrackBytesSent:vi,localVideoTrackFramerate:bi,localVideoTrackQualityLimitationReason:Ei};var x=class{constructor(e,t,i){this.getStats=()=>(this.stats||(this.stats=new ae(this.store,this.sdk)),this.stats);e?this.store=e:this.store=x.createNewHMSStore(he("HMSStore"),X),i?this.notifications=i:this.notifications=new $e(this.store),t?this.actions=t:(this.sdk=new ge.HMSSdk,this.actions=new qe(this.store,this.sdk,this.notifications)),this.initialTriggerOnSubscribe=!1,ge.isBrowser&&(window.__hms=this)}triggerOnSubscribe(){this.initialTriggerOnSubscribe||(x.makeStoreTriggerOnSubscribe(this.store),this.initialTriggerOnSubscribe=!0)}getStore(){return this.store}getHMSActions(){return this.actions}getActions(){return this.actions}getNotifications(){return{onNotification:this.notifications.onNotification}}static createNewHMSStore(e,t){let i=(0,At.default)(()=>t()),o=i.setState;i.setState=c=>{let p=typeof c=="function"?(0,Et.default)(c):c;o(p)};let r=i.getState;i.getState=c=>{if(c){let p=c.name||"byIDSelector";window.selectorsCount||(window.selectorsCount={}),window.selectorsCount[p]=(window.selectorsCount[p]||0)+1;let R=performance.now(),j=c(r()),f=performance.now()-R;return f>1&&(window.expensiveSelectors=window.expensiveSelectors||new Map,window.expensiveSelectors.set(p,f)),j}return r()},x.compareWithShallowCheckInSubscribe(i);let n=x.setUpDevtools(i,e);return F(N({},i),{namedSetState:n})}static makeStoreTriggerOnSubscribe(e){let t=e.subscribe;e.subscribe=(i,o,r)=>(i(e.getState(o),void 0),t(i,o,r))}static compareWithShallowCheckInSubscribe(e){let t=e.subscribe;e.subscribe=(i,o,r)=>(o||(o=n=>n),r=r||Ct.default,t(i,o,r))}static setUpDevtools(e,t){let i;try{i=window.__REDUX_DEVTOOLS_EXTENSION__||window.top.__REDUX_DEVTOOLS_EXTENSION__}catch(n){}if(!i)return n=>{e.setState(n)};let o=i.connect(x.devtoolsOptions(t));o.prefix=t?`${t} > `:"";let r=e.setState;return e.setState=n=>{r(n),o.send(`${o.prefix}setState`,e.getState())},o.subscribe(x.devtoolsSubscribe(o,e,r)),o.send("setUpStore",e.getState()),(n,c)=>{r(n);let p=c||`${o.prefix}action`;o.send(p,e.getState())}}static devtoolsOptions(e){return{name:e,actionsBlacklist:["audioLevel","playlistProgress","connectionQuality"]}}static devtoolsSubscribe(e,t,i){return o=>{var r,n,c,p;if(o.type==="DISPATCH"&&o.state)["JUMP_TO_ACTION","JUMP_TO_STATE"].includes(o.payload.type)?i(JSON.parse(o.state)):t.setState(JSON.parse(o.state));else if(o.type==="DISPATCH"&&((r=o.payload)==null?void 0:r.type)==="COMMIT")e.init(t.getState());else if(o.type==="DISPATCH"&&((n=o.payload)==null?void 0:n.type)==="IMPORT_STATE"){let R=(c=o.payload.nextLiftedState)==null?void 0:c.actionsById;(((p=o.payload.nextLiftedState)==null?void 0:p.computedStates)||[]).forEach(({state:f},w)=>{let J=R[w]||`${e.prefix}setState`;w===0?e.init(f):(i(f),e.send(J,t.getState()))})}}}};
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __spreadValues = (a, b) => {
|
|
13
|
+
for (var prop in b || (b = {}))
|
|
14
|
+
if (__hasOwnProp.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
if (__getOwnPropSymbols)
|
|
17
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
18
|
+
if (__propIsEnum.call(b, prop))
|
|
19
|
+
__defNormalProp(a, prop, b[prop]);
|
|
20
|
+
}
|
|
21
|
+
return a;
|
|
22
|
+
};
|
|
23
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
24
|
+
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
25
|
+
var __export = (target, all) => {
|
|
26
|
+
__markAsModule(target);
|
|
27
|
+
for (var name in all)
|
|
28
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
29
|
+
};
|
|
30
|
+
var __reExport = (target, module2, desc) => {
|
|
31
|
+
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
|
32
|
+
for (let key of __getOwnPropNames(module2))
|
|
33
|
+
if (!__hasOwnProp.call(target, key) && key !== "default")
|
|
34
|
+
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
|
35
|
+
}
|
|
36
|
+
return target;
|
|
37
|
+
};
|
|
38
|
+
var __toModule = (module2) => {
|
|
39
|
+
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
|
40
|
+
};
|
|
41
|
+
var __async = (__this, __arguments, generator) => {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
var fulfilled = (value) => {
|
|
44
|
+
try {
|
|
45
|
+
step(generator.next(value));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
reject(e);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var rejected = (value) => {
|
|
51
|
+
try {
|
|
52
|
+
step(generator.throw(value));
|
|
53
|
+
} catch (e) {
|
|
54
|
+
reject(e);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
58
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// src/index.ts
|
|
63
|
+
__export(exports, {
|
|
64
|
+
HMSAudioPluginType: () => import_hms_video.HMSAudioPluginType,
|
|
65
|
+
HMSLogLevel: () => import_hms_video.HMSLogLevel,
|
|
66
|
+
HMSMessageType: () => HMSMessageType,
|
|
67
|
+
HMSNotificationSeverity: () => HMSNotificationSeverity,
|
|
68
|
+
HMSNotificationTypes: () => HMSNotificationTypes,
|
|
69
|
+
HMSPlaylistType: () => HMSPlaylistType,
|
|
70
|
+
HMSReactiveStore: () => HMSReactiveStore,
|
|
71
|
+
HMSRoomState: () => HMSRoomState,
|
|
72
|
+
HMSStats: () => HMSStats,
|
|
73
|
+
HMSVideoPluginType: () => import_hms_video.HMSVideoPluginType,
|
|
74
|
+
createDefaultStatsStore: () => createDefaultStatsStore,
|
|
75
|
+
createDefaultStoreState: () => createDefaultStoreState,
|
|
76
|
+
parsedUserAgent: () => import_hms_video.parsedUserAgent,
|
|
77
|
+
selectAudioPlaylist: () => selectAudioPlaylist,
|
|
78
|
+
selectAudioPlaylistTrackByPeerID: () => selectAudioPlaylistTrackByPeerID,
|
|
79
|
+
selectAudioTrackByPeerID: () => selectAudioTrackByPeerID,
|
|
80
|
+
selectAudioTrackVolume: () => selectAudioTrackVolume,
|
|
81
|
+
selectAudioVolumeByPeerID: () => selectAudioVolumeByPeerID,
|
|
82
|
+
selectAuxiliaryAudioByPeerID: () => selectAuxiliaryAudioByPeerID,
|
|
83
|
+
selectAuxiliaryTracksByPeerID: () => selectAuxiliaryTracksByPeerID,
|
|
84
|
+
selectAvailableRoleNames: () => selectAvailableRoleNames,
|
|
85
|
+
selectBroadcastMessages: () => selectBroadcastMessages,
|
|
86
|
+
selectBroadcastMessagesUnreadCount: () => selectBroadcastMessagesUnreadCount,
|
|
87
|
+
selectCameraStreamByPeerID: () => selectCameraStreamByPeerID,
|
|
88
|
+
selectConnectionQualities: () => selectConnectionQualities,
|
|
89
|
+
selectConnectionQualityByPeerID: () => selectConnectionQualityByPeerID,
|
|
90
|
+
selectDegradedTracks: () => selectDegradedTracks,
|
|
91
|
+
selectDevices: () => selectDevices,
|
|
92
|
+
selectDidIJoinWithin: () => selectDidIJoinWithin,
|
|
93
|
+
selectDominantSpeaker: () => selectDominantSpeaker,
|
|
94
|
+
selectHLSState: () => selectHLSState,
|
|
95
|
+
selectHMSMessages: () => selectHMSMessages,
|
|
96
|
+
selectHMSMessagesCount: () => selectHMSMessagesCount,
|
|
97
|
+
selectHMSStats: () => selectHMSStats,
|
|
98
|
+
selectIsAllowedToPublish: () => selectIsAllowedToPublish,
|
|
99
|
+
selectIsAllowedToSubscribe: () => selectIsAllowedToSubscribe,
|
|
100
|
+
selectIsAudioLocallyMuted: () => selectIsAudioLocallyMuted,
|
|
101
|
+
selectIsConnectedToRoom: () => selectIsConnectedToRoom,
|
|
102
|
+
selectIsInPreview: () => selectIsInPreview,
|
|
103
|
+
selectIsLocalAudioEnabled: () => selectIsLocalAudioEnabled,
|
|
104
|
+
selectIsLocalAudioPluginPresent: () => selectIsLocalAudioPluginPresent,
|
|
105
|
+
selectIsLocalScreenShared: () => selectIsLocalScreenShared,
|
|
106
|
+
selectIsLocalVideoDisplayEnabled: () => selectIsLocalVideoDisplayEnabled,
|
|
107
|
+
selectIsLocalVideoEnabled: () => selectIsLocalVideoEnabled,
|
|
108
|
+
selectIsLocalVideoPluginPresent: () => selectIsLocalVideoPluginPresent,
|
|
109
|
+
selectIsLocallyMutedByPeerID: () => selectIsLocallyMutedByPeerID,
|
|
110
|
+
selectIsPeerAudioEnabled: () => selectIsPeerAudioEnabled,
|
|
111
|
+
selectIsPeerVideoEnabled: () => selectIsPeerVideoEnabled,
|
|
112
|
+
selectIsScreenShareLocallyMutedByPeerID: () => selectIsScreenShareLocallyMutedByPeerID,
|
|
113
|
+
selectIsSomeoneScreenSharing: () => selectIsSomeoneScreenSharing,
|
|
114
|
+
selectLocalAudioTrackID: () => selectLocalAudioTrackID,
|
|
115
|
+
selectLocalMediaSettings: () => selectLocalMediaSettings,
|
|
116
|
+
selectLocalPeer: () => selectLocalPeer,
|
|
117
|
+
selectLocalPeerID: () => selectLocalPeerID,
|
|
118
|
+
selectLocalPeerRole: () => selectLocalPeerRole,
|
|
119
|
+
selectLocalTrackIDs: () => selectLocalTrackIDs,
|
|
120
|
+
selectLocalVideoTrackID: () => selectLocalVideoTrackID,
|
|
121
|
+
selectMessageIDsInOrder: () => selectMessageIDsInOrder,
|
|
122
|
+
selectMessagesByPeerID: () => selectMessagesByPeerID,
|
|
123
|
+
selectMessagesByRole: () => selectMessagesByRole,
|
|
124
|
+
selectMessagesMap: () => selectMessagesMap,
|
|
125
|
+
selectMessagesUnreadCountByPeerID: () => selectMessagesUnreadCountByPeerID,
|
|
126
|
+
selectMessagesUnreadCountByRole: () => selectMessagesUnreadCountByRole,
|
|
127
|
+
selectPeerAudioByID: () => selectPeerAudioByID,
|
|
128
|
+
selectPeerByCondition: () => selectPeerByCondition,
|
|
129
|
+
selectPeerByID: () => selectPeerByID,
|
|
130
|
+
selectPeerCount: () => selectPeerCount,
|
|
131
|
+
selectPeerMetadata: () => selectPeerMetadata,
|
|
132
|
+
selectPeerNameByID: () => selectPeerNameByID,
|
|
133
|
+
selectPeerScreenSharing: () => selectPeerScreenSharing,
|
|
134
|
+
selectPeerSharingAudio: () => selectPeerSharingAudio,
|
|
135
|
+
selectPeerSharingAudioPlaylist: () => selectPeerSharingAudioPlaylist,
|
|
136
|
+
selectPeerSharingVideoPlaylist: () => selectPeerSharingVideoPlaylist,
|
|
137
|
+
selectPeers: () => selectPeers,
|
|
138
|
+
selectPeersByCondition: () => selectPeersByCondition,
|
|
139
|
+
selectPeersByRole: () => selectPeersByRole,
|
|
140
|
+
selectPeersMap: () => selectPeersMap,
|
|
141
|
+
selectPeersScreenSharing: () => selectPeersScreenSharing,
|
|
142
|
+
selectPeersWithAudioStatus: () => selectPeersWithAudioStatus,
|
|
143
|
+
selectPermissions: () => selectPermissions,
|
|
144
|
+
selectRTMPState: () => selectRTMPState,
|
|
145
|
+
selectRecordingState: () => selectRecordingState,
|
|
146
|
+
selectRemotePeers: () => selectRemotePeers,
|
|
147
|
+
selectRoleByRoleName: () => selectRoleByRoleName,
|
|
148
|
+
selectRoleChangeRequest: () => selectRoleChangeRequest,
|
|
149
|
+
selectRolesMap: () => selectRolesMap,
|
|
150
|
+
selectRoom: () => selectRoom,
|
|
151
|
+
selectRoomID: () => selectRoomID,
|
|
152
|
+
selectRoomStartTime: () => selectRoomStartTime,
|
|
153
|
+
selectRoomStarted: () => selectRoomStarted,
|
|
154
|
+
selectRoomState: () => selectRoomState,
|
|
155
|
+
selectScreenShareAudioByPeerID: () => selectScreenShareAudioByPeerID,
|
|
156
|
+
selectScreenShareByPeerID: () => selectScreenShareByPeerID,
|
|
157
|
+
selectScreenSharesByPeerId: () => selectScreenSharesByPeerId,
|
|
158
|
+
selectScreenshareAudioVolumeByPeerID: () => selectScreenshareAudioVolumeByPeerID,
|
|
159
|
+
selectSessionId: () => selectSessionId,
|
|
160
|
+
selectSimulcastLayerByTrack: () => selectSimulcastLayerByTrack,
|
|
161
|
+
selectSpeakers: () => selectSpeakers,
|
|
162
|
+
selectTrackAudioByID: () => selectTrackAudioByID,
|
|
163
|
+
selectTrackByID: () => selectTrackByID,
|
|
164
|
+
selectTracksMap: () => selectTracksMap,
|
|
165
|
+
selectUnreadHMSMessagesCount: () => selectUnreadHMSMessagesCount,
|
|
166
|
+
selectVideoPlaylist: () => selectVideoPlaylist,
|
|
167
|
+
selectVideoPlaylistAudioTrackByPeerID: () => selectVideoPlaylistAudioTrackByPeerID,
|
|
168
|
+
selectVideoPlaylistVideoTrackByPeerID: () => selectVideoPlaylistVideoTrackByPeerID,
|
|
169
|
+
selectVideoTrackByPeerID: () => selectVideoTrackByPeerID
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// src/core/hmsSDKStore/HMSReactiveStore.ts
|
|
173
|
+
var import_immer = __toModule(require("immer"));
|
|
174
|
+
var import_vanilla = __toModule(require("zustand/vanilla"));
|
|
175
|
+
var import_shallow = __toModule(require("zustand/shallow"));
|
|
176
|
+
var import_hms_video6 = __toModule(require("@100mslive/hms-video"));
|
|
177
|
+
|
|
178
|
+
// src/core/schema/room.ts
|
|
179
|
+
var HMSRoomState;
|
|
180
|
+
(function(HMSRoomState2) {
|
|
181
|
+
HMSRoomState2["Disconnected"] = "Disconnected";
|
|
182
|
+
HMSRoomState2["Preview"] = "Preview";
|
|
183
|
+
HMSRoomState2["Connecting"] = "Connecting";
|
|
184
|
+
HMSRoomState2["Connected"] = "Connected";
|
|
185
|
+
HMSRoomState2["Reconnecting"] = "Reconnecting";
|
|
186
|
+
HMSRoomState2["Disconnecting"] = "Disconnecting";
|
|
187
|
+
HMSRoomState2["Failed"] = "Failed";
|
|
188
|
+
})(HMSRoomState || (HMSRoomState = {}));
|
|
189
|
+
|
|
190
|
+
// src/core/schema/schema.ts
|
|
191
|
+
var createDefaultStoreState = () => {
|
|
192
|
+
return {
|
|
193
|
+
room: {
|
|
194
|
+
id: "",
|
|
195
|
+
isConnected: false,
|
|
196
|
+
name: "",
|
|
197
|
+
peers: [],
|
|
198
|
+
shareableLink: "",
|
|
199
|
+
localPeer: "",
|
|
200
|
+
hasWaitingRoom: false,
|
|
201
|
+
roomState: HMSRoomState.Disconnected,
|
|
202
|
+
recording: {
|
|
203
|
+
browser: {
|
|
204
|
+
running: false
|
|
205
|
+
},
|
|
206
|
+
server: {
|
|
207
|
+
running: false
|
|
208
|
+
},
|
|
209
|
+
hls: { running: false }
|
|
210
|
+
},
|
|
211
|
+
rtmp: {
|
|
212
|
+
running: false
|
|
213
|
+
},
|
|
214
|
+
hls: {
|
|
215
|
+
running: false,
|
|
216
|
+
variants: []
|
|
217
|
+
},
|
|
218
|
+
sessionId: ""
|
|
219
|
+
},
|
|
220
|
+
peers: {},
|
|
221
|
+
tracks: {},
|
|
222
|
+
playlist: {
|
|
223
|
+
audio: {
|
|
224
|
+
list: {},
|
|
225
|
+
selection: { id: "", hasPrevious: false, hasNext: false },
|
|
226
|
+
progress: 0,
|
|
227
|
+
volume: 0,
|
|
228
|
+
currentTime: 0,
|
|
229
|
+
playbackRate: 1
|
|
230
|
+
},
|
|
231
|
+
video: {
|
|
232
|
+
list: {},
|
|
233
|
+
selection: { id: "", hasPrevious: false, hasNext: false },
|
|
234
|
+
progress: 0,
|
|
235
|
+
volume: 0,
|
|
236
|
+
currentTime: 0,
|
|
237
|
+
playbackRate: 1
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
messages: { byID: {}, allIDs: [] },
|
|
241
|
+
speakers: {},
|
|
242
|
+
connectionQualities: {},
|
|
243
|
+
settings: {
|
|
244
|
+
audioInputDeviceId: "",
|
|
245
|
+
audioOutputDeviceId: "",
|
|
246
|
+
videoInputDeviceId: ""
|
|
247
|
+
},
|
|
248
|
+
devices: {
|
|
249
|
+
audioInput: [],
|
|
250
|
+
audioOutput: [],
|
|
251
|
+
videoInput: []
|
|
252
|
+
},
|
|
253
|
+
roles: {},
|
|
254
|
+
roleChangeRequests: [],
|
|
255
|
+
errors: []
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
var createDefaultStatsStore = () => {
|
|
259
|
+
return {
|
|
260
|
+
peerStats: {},
|
|
261
|
+
trackStats: {},
|
|
262
|
+
localPeer: { id: "" }
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
// src/core/schema/message.ts
|
|
267
|
+
var HMSMessageType;
|
|
268
|
+
(function(HMSMessageType2) {
|
|
269
|
+
HMSMessageType2["CHAT"] = "chat";
|
|
270
|
+
})(HMSMessageType || (HMSMessageType = {}));
|
|
271
|
+
|
|
272
|
+
// src/core/schema/notification.ts
|
|
273
|
+
var HMSNotificationSeverity;
|
|
274
|
+
(function(HMSNotificationSeverity2) {
|
|
275
|
+
HMSNotificationSeverity2["INFO"] = "info";
|
|
276
|
+
HMSNotificationSeverity2["ERROR"] = "error";
|
|
277
|
+
HMSNotificationSeverity2["CRITICAL"] = "critical";
|
|
278
|
+
})(HMSNotificationSeverity || (HMSNotificationSeverity = {}));
|
|
279
|
+
var HMSNotificationTypes;
|
|
280
|
+
(function(HMSNotificationTypes2) {
|
|
281
|
+
HMSNotificationTypes2["PEER_JOINED"] = "PEER_JOINED";
|
|
282
|
+
HMSNotificationTypes2["PEER_LEFT"] = "PEER_LEFT";
|
|
283
|
+
HMSNotificationTypes2["PEER_LIST"] = "PEER_LIST";
|
|
284
|
+
HMSNotificationTypes2["NEW_MESSAGE"] = "NEW_MESSAGE";
|
|
285
|
+
HMSNotificationTypes2["ERROR"] = "ERROR";
|
|
286
|
+
HMSNotificationTypes2["RECONNECTING"] = "RECONNECTING";
|
|
287
|
+
HMSNotificationTypes2["RECONNECTED"] = "RECONNECTED";
|
|
288
|
+
HMSNotificationTypes2["TRACK_ADDED"] = "TRACK_ADDED";
|
|
289
|
+
HMSNotificationTypes2["TRACK_REMOVED"] = "TRACK_REMOVED";
|
|
290
|
+
HMSNotificationTypes2["TRACK_MUTED"] = "TRACK_MUTED";
|
|
291
|
+
HMSNotificationTypes2["TRACK_UNMUTED"] = "TRACK_UNMUTED";
|
|
292
|
+
HMSNotificationTypes2["TRACK_DEGRADED"] = "TRACK_DEGRADED";
|
|
293
|
+
HMSNotificationTypes2["TRACK_RESTORED"] = "TRACK_RESTORED";
|
|
294
|
+
HMSNotificationTypes2["ROLE_CHANGE_REQUEST"] = "ROLE_CHANGE_REQUEST";
|
|
295
|
+
HMSNotificationTypes2["ROLE_UPDATED"] = "ROLE_UPDATED";
|
|
296
|
+
HMSNotificationTypes2["CHANGE_TRACK_STATE_REQUEST"] = "CHANGE_TRACK_STATE_REQUEST";
|
|
297
|
+
HMSNotificationTypes2["CHANGE_MULTI_TRACK_STATE_REQUEST"] = "CHANGE_MULTI_TRACK_STATE_REQUEST";
|
|
298
|
+
HMSNotificationTypes2["ROOM_ENDED"] = "ROOM_ENDED";
|
|
299
|
+
HMSNotificationTypes2["REMOVED_FROM_ROOM"] = "REMOVED_FROM_ROOM";
|
|
300
|
+
HMSNotificationTypes2["DEVICE_CHANGE_UPDATE"] = "DEVICE_CHANGE_UPDATE";
|
|
301
|
+
HMSNotificationTypes2["PLAYLIST_TRACK_ENDED"] = "PLAYLIST_TRACK_ENDED";
|
|
302
|
+
HMSNotificationTypes2["NAME_UPDATED"] = "NAME_UPDATED";
|
|
303
|
+
HMSNotificationTypes2["METADATA_UPDATED"] = "METADATA_UPDATED";
|
|
304
|
+
})(HMSNotificationTypes || (HMSNotificationTypes = {}));
|
|
305
|
+
|
|
306
|
+
// src/core/schema/playlist.ts
|
|
307
|
+
var HMSPlaylistType;
|
|
308
|
+
(function(HMSPlaylistType2) {
|
|
309
|
+
HMSPlaylistType2["audio"] = "audio";
|
|
310
|
+
HMSPlaylistType2["video"] = "video";
|
|
311
|
+
})(HMSPlaylistType || (HMSPlaylistType = {}));
|
|
312
|
+
|
|
313
|
+
// src/core/hmsSDKStore/sdkTypes.ts
|
|
314
|
+
var import_hms_video = __toModule(require("@100mslive/hms-video"));
|
|
315
|
+
|
|
316
|
+
// src/core/hmsSDKStore/adapter.ts
|
|
317
|
+
var import_hms_video2 = __toModule(require("@100mslive/hms-video"));
|
|
318
|
+
|
|
319
|
+
// src/core/hmsSDKStore/sdkUtils/storeMergeUtils.ts
|
|
320
|
+
var mergeNewPeersInDraft = (draftPeers, newPeers) => {
|
|
321
|
+
const peerIDs = union(Object.keys(draftPeers), Object.keys(newPeers));
|
|
322
|
+
for (const peerID of peerIDs) {
|
|
323
|
+
const oldPeer = draftPeers[peerID];
|
|
324
|
+
const newPeer = newPeers[peerID];
|
|
325
|
+
if (isEntityUpdated(oldPeer, newPeer)) {
|
|
326
|
+
if (areArraysEqual(oldPeer.auxiliaryTracks, newPeer.auxiliaryTracks)) {
|
|
327
|
+
newPeer.auxiliaryTracks = oldPeer.auxiliaryTracks;
|
|
328
|
+
}
|
|
329
|
+
Object.assign(oldPeer, newPeer);
|
|
330
|
+
} else if (isEntityRemoved(oldPeer, newPeer)) {
|
|
331
|
+
delete draftPeers[peerID];
|
|
332
|
+
} else if (isEntityAdded(oldPeer, newPeer)) {
|
|
333
|
+
draftPeers[peerID] = newPeer;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
var mergeNewTracksInDraft = (draftTracks, newTracks) => {
|
|
338
|
+
const trackIDs = union(Object.keys(draftTracks), Object.keys(newTracks));
|
|
339
|
+
for (const trackID of trackIDs) {
|
|
340
|
+
const oldTrack = draftTracks[trackID];
|
|
341
|
+
const newTrack = newTracks[trackID];
|
|
342
|
+
if (isEntityUpdated(oldTrack, newTrack)) {
|
|
343
|
+
mergeTrackArrayFields(oldTrack, newTrack);
|
|
344
|
+
Object.assign(oldTrack, newTrack);
|
|
345
|
+
} else if (isEntityRemoved(oldTrack, newTrack)) {
|
|
346
|
+
delete draftTracks[trackID];
|
|
347
|
+
} else if (isEntityAdded(oldTrack, newTrack)) {
|
|
348
|
+
draftTracks[trackID] = newTrack;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
var mergeNewIndividualStatsInDraft = (draftStats, newStats) => {
|
|
353
|
+
const IDs = union(Object.keys(draftStats), Object.keys(newStats));
|
|
354
|
+
for (const trackID of IDs) {
|
|
355
|
+
const oldStat = draftStats[trackID];
|
|
356
|
+
const newStat = newStats[trackID];
|
|
357
|
+
if (isEntityUpdated(oldStat, newStat)) {
|
|
358
|
+
Object.assign(oldStat, newStat);
|
|
359
|
+
} else if (isEntityRemoved(oldStat, newStat)) {
|
|
360
|
+
delete draftStats[trackID];
|
|
361
|
+
} else if (isEntityAdded(oldStat, newStat)) {
|
|
362
|
+
draftStats[trackID] = newStat;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
var mergeTrackArrayFields = (oldTrack, newTrack) => {
|
|
367
|
+
if (oldTrack.plugins && areArraysEqual(oldTrack.plugins, newTrack.plugins)) {
|
|
368
|
+
newTrack.plugins = oldTrack.plugins;
|
|
369
|
+
}
|
|
370
|
+
if (oldTrack.layerDefinitions && areArraysEqual(oldTrack.layerDefinitions, newTrack.layerDefinitions)) {
|
|
371
|
+
newTrack.layerDefinitions = oldTrack.layerDefinitions;
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
var isEntityUpdated = (oldItem, newItem) => oldItem && newItem;
|
|
375
|
+
var isEntityRemoved = (oldItem, newItem) => oldItem && !newItem;
|
|
376
|
+
var isEntityAdded = (oldItem, newItem) => !oldItem && newItem;
|
|
377
|
+
var areArraysEqual = (arr1, arr2) => {
|
|
378
|
+
if (arr1 === arr2 || arr1.length === 0 && (arr2 == null ? void 0 : arr2.length) === 0) {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
if (!arr1 || !arr2 || !(arr1.length === arr2.length)) {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
for (let i = 0; i < arr1.length; i++) {
|
|
385
|
+
if (arr1[i] !== arr2[i]) {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return true;
|
|
390
|
+
};
|
|
391
|
+
var union = (arr1, arr2) => {
|
|
392
|
+
const set = new Set();
|
|
393
|
+
for (const elem of arr1) {
|
|
394
|
+
set.add(elem);
|
|
395
|
+
}
|
|
396
|
+
for (const elem of arr2) {
|
|
397
|
+
set.add(elem);
|
|
398
|
+
}
|
|
399
|
+
return Array.from(set);
|
|
400
|
+
};
|
|
401
|
+
|
|
402
|
+
// src/core/hmsSDKStore/adapter.ts
|
|
403
|
+
var SDKToHMS = class {
|
|
404
|
+
static convertPeer(sdkPeer) {
|
|
405
|
+
var _a, _b, _c;
|
|
406
|
+
return {
|
|
407
|
+
id: sdkPeer.peerId,
|
|
408
|
+
name: sdkPeer.name,
|
|
409
|
+
roleName: (_a = sdkPeer.role) == null ? void 0 : _a.name,
|
|
410
|
+
isLocal: sdkPeer.isLocal,
|
|
411
|
+
videoTrack: (_b = sdkPeer.videoTrack) == null ? void 0 : _b.trackId,
|
|
412
|
+
audioTrack: (_c = sdkPeer.audioTrack) == null ? void 0 : _c.trackId,
|
|
413
|
+
auxiliaryTracks: sdkPeer.auxiliaryTracks.map((track) => track.trackId),
|
|
414
|
+
customerUserId: sdkPeer.customerUserId,
|
|
415
|
+
customerDescription: sdkPeer.metadata,
|
|
416
|
+
metadata: sdkPeer.metadata,
|
|
417
|
+
joinedAt: sdkPeer.joinedAt
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
static convertTrack(sdkTrack, peerId) {
|
|
421
|
+
const track = {
|
|
422
|
+
id: sdkTrack.trackId,
|
|
423
|
+
source: sdkTrack.source,
|
|
424
|
+
type: sdkTrack.type,
|
|
425
|
+
enabled: sdkTrack.enabled,
|
|
426
|
+
displayEnabled: sdkTrack.enabled,
|
|
427
|
+
peerId: sdkTrack.peerId || peerId
|
|
428
|
+
};
|
|
429
|
+
this.enrichTrack(track, sdkTrack);
|
|
430
|
+
return track;
|
|
431
|
+
}
|
|
432
|
+
static enrichTrack(track, sdkTrack) {
|
|
433
|
+
const mediaSettings = sdkTrack.getMediaTrackSettings();
|
|
434
|
+
if (track.source === "screen" && track.type === "video") {
|
|
435
|
+
track.displaySurface = mediaSettings.displaySurface;
|
|
436
|
+
}
|
|
437
|
+
track.height = mediaSettings.height;
|
|
438
|
+
track.width = mediaSettings.width;
|
|
439
|
+
if (sdkTrack instanceof import_hms_video2.HMSRemoteAudioTrack) {
|
|
440
|
+
track.volume = sdkTrack.getVolume() || 0;
|
|
441
|
+
}
|
|
442
|
+
SDKToHMS.updateDeviceID(track, sdkTrack);
|
|
443
|
+
SDKToHMS.enrichVideoTrack(track, sdkTrack);
|
|
444
|
+
SDKToHMS.enrichPluginsDetails(track, sdkTrack);
|
|
445
|
+
}
|
|
446
|
+
static updateDeviceID(track, sdkTrack) {
|
|
447
|
+
var _a;
|
|
448
|
+
if (sdkTrack instanceof import_hms_video2.HMSLocalVideoTrack || sdkTrack instanceof import_hms_video2.HMSLocalAudioTrack) {
|
|
449
|
+
track.deviceID = sdkTrack.settings.deviceId;
|
|
450
|
+
} else {
|
|
451
|
+
track.deviceID = (_a = sdkTrack.getMediaTrackSettings()) == null ? void 0 : _a.deviceId;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
static enrichVideoTrack(track, sdkTrack) {
|
|
455
|
+
if (sdkTrack instanceof import_hms_video2.HMSRemoteVideoTrack) {
|
|
456
|
+
track.layer = sdkTrack.getSimulcastLayer();
|
|
457
|
+
track.degraded = sdkTrack.degraded;
|
|
458
|
+
if (!areArraysEqual(sdkTrack.getSimulcastDefinitions(), track.layerDefinitions)) {
|
|
459
|
+
track.layerDefinitions = sdkTrack.getSimulcastDefinitions();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
static enrichPluginsDetails(track, sdkTrack) {
|
|
464
|
+
if (sdkTrack instanceof import_hms_video2.HMSLocalVideoTrack || sdkTrack instanceof import_hms_video2.HMSLocalAudioTrack) {
|
|
465
|
+
if (!areArraysEqual(sdkTrack.getPlugins(), track.plugins)) {
|
|
466
|
+
track.plugins = sdkTrack.getPlugins();
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
static convertRoom(sdkRoom) {
|
|
471
|
+
var _a, _b;
|
|
472
|
+
const { recording, rtmp, hls } = SDKToHMS.convertRecordingStreamingState(sdkRoom == null ? void 0 : sdkRoom.recording, sdkRoom == null ? void 0 : sdkRoom.rtmp, sdkRoom == null ? void 0 : sdkRoom.hls);
|
|
473
|
+
return {
|
|
474
|
+
id: sdkRoom.id,
|
|
475
|
+
name: sdkRoom.name,
|
|
476
|
+
localPeer: (_b = (_a = sdkRoom.localPeer) == null ? void 0 : _a.peerId) != null ? _b : "",
|
|
477
|
+
hasWaitingRoom: sdkRoom.hasWaitingRoom,
|
|
478
|
+
shareableLink: sdkRoom.shareableLink,
|
|
479
|
+
recording,
|
|
480
|
+
rtmp,
|
|
481
|
+
hls,
|
|
482
|
+
sessionId: sdkRoom.sessionId,
|
|
483
|
+
startedAt: sdkRoom.startedAt,
|
|
484
|
+
joinedAt: sdkRoom.joinedAt,
|
|
485
|
+
peerCount: sdkRoom.peerCount
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
static convertMessage(sdkMessage) {
|
|
489
|
+
var _a, _b, _c;
|
|
490
|
+
return {
|
|
491
|
+
sender: sdkMessage.sender.peerId,
|
|
492
|
+
senderName: sdkMessage.sender.name,
|
|
493
|
+
senderRole: (_a = sdkMessage.sender.role) == null ? void 0 : _a.name,
|
|
494
|
+
senderUserId: sdkMessage.sender.customerUserId,
|
|
495
|
+
recipientPeer: (_b = sdkMessage.recipientPeer) == null ? void 0 : _b.peerId,
|
|
496
|
+
recipientRoles: (_c = sdkMessage.recipientRoles) == null ? void 0 : _c.map((role) => role.name),
|
|
497
|
+
time: sdkMessage.time,
|
|
498
|
+
type: sdkMessage.type,
|
|
499
|
+
message: sdkMessage.message
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
static convertRoles(sdkRoles) {
|
|
503
|
+
const roles = {};
|
|
504
|
+
if (sdkRoles) {
|
|
505
|
+
sdkRoles.forEach((role) => {
|
|
506
|
+
roles[role.name] = role;
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
return roles;
|
|
510
|
+
}
|
|
511
|
+
static convertRoleChangeRequest(req) {
|
|
512
|
+
var _a;
|
|
513
|
+
return {
|
|
514
|
+
requestedBy: (_a = req.requestedBy) == null ? void 0 : _a.peerId,
|
|
515
|
+
roleName: req.role.name,
|
|
516
|
+
token: req.token
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
static convertException(sdkException) {
|
|
520
|
+
return {
|
|
521
|
+
code: sdkException.code,
|
|
522
|
+
action: sdkException.action,
|
|
523
|
+
name: sdkException.name,
|
|
524
|
+
message: sdkException.message,
|
|
525
|
+
description: sdkException.description,
|
|
526
|
+
isTerminal: sdkException.isTerminal,
|
|
527
|
+
nativeError: sdkException.nativeError,
|
|
528
|
+
timestamp: new Date()
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
static convertDeviceChangeUpdate(sdkDeviceChangeEvent) {
|
|
532
|
+
const convertedData = {
|
|
533
|
+
devices: sdkDeviceChangeEvent.devices,
|
|
534
|
+
selection: sdkDeviceChangeEvent.selection,
|
|
535
|
+
type: sdkDeviceChangeEvent.type
|
|
536
|
+
};
|
|
537
|
+
if (sdkDeviceChangeEvent.error) {
|
|
538
|
+
convertedData.error = this.convertException(sdkDeviceChangeEvent.error);
|
|
539
|
+
}
|
|
540
|
+
return convertedData;
|
|
541
|
+
}
|
|
542
|
+
static convertPlaylist(playlistManager) {
|
|
543
|
+
const audioPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.audio);
|
|
544
|
+
const videoPlaylist = this.getConvertedPlaylistType(playlistManager, HMSPlaylistType.video);
|
|
545
|
+
return { audio: audioPlaylist, video: videoPlaylist };
|
|
546
|
+
}
|
|
547
|
+
static convertPlaylistItem(playlistManager, playlistItem) {
|
|
548
|
+
const type = playlistItem.type;
|
|
549
|
+
const currentSelection = playlistManager.getCurrentSelection(type);
|
|
550
|
+
const isPlaying = playlistManager.isPlaying(type);
|
|
551
|
+
const isSelected = playlistItem.url === (currentSelection == null ? void 0 : currentSelection.url);
|
|
552
|
+
return __spreadProps(__spreadValues({}, playlistItem), {
|
|
553
|
+
type: playlistItem.type,
|
|
554
|
+
selected: isSelected,
|
|
555
|
+
playing: isSelected && isPlaying
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
static getConvertedPlaylistType(playlistManager, type) {
|
|
559
|
+
const convertedPlaylist = {};
|
|
560
|
+
const currentSelection = playlistManager.getCurrentSelection(type);
|
|
561
|
+
const progress = playlistManager.getCurrentProgress(type);
|
|
562
|
+
const volume = playlistManager.getVolume(type);
|
|
563
|
+
const list = playlistManager.getList(type);
|
|
564
|
+
const currentIndex = playlistManager.getCurrentIndex(type);
|
|
565
|
+
playlistManager.getList(type).forEach((playlistItem) => {
|
|
566
|
+
convertedPlaylist[playlistItem.id] = SDKToHMS.convertPlaylistItem(playlistManager, playlistItem);
|
|
567
|
+
});
|
|
568
|
+
return {
|
|
569
|
+
list: convertedPlaylist,
|
|
570
|
+
selection: {
|
|
571
|
+
id: currentSelection == null ? void 0 : currentSelection.id,
|
|
572
|
+
hasPrevious: currentIndex > 0,
|
|
573
|
+
hasNext: currentIndex < list.length - 1
|
|
574
|
+
},
|
|
575
|
+
progress,
|
|
576
|
+
volume,
|
|
577
|
+
currentTime: playlistManager.getCurrentTime(type),
|
|
578
|
+
playbackRate: playlistManager.getPlaybackRate(type)
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
static convertRecordingStreamingState(recording, rtmp, hls) {
|
|
582
|
+
var _a;
|
|
583
|
+
return {
|
|
584
|
+
recording: {
|
|
585
|
+
browser: __spreadValues({
|
|
586
|
+
running: false
|
|
587
|
+
}, recording == null ? void 0 : recording.browser),
|
|
588
|
+
server: __spreadValues({
|
|
589
|
+
running: false
|
|
590
|
+
}, recording == null ? void 0 : recording.server),
|
|
591
|
+
hls: __spreadValues({ running: false }, recording == null ? void 0 : recording.hls)
|
|
592
|
+
},
|
|
593
|
+
rtmp: __spreadValues({ running: false }, rtmp),
|
|
594
|
+
hls: {
|
|
595
|
+
variants: ((_a = hls == null ? void 0 : hls.variants) == null ? void 0 : _a.map((variant) => variant)) || [],
|
|
596
|
+
running: !!(hls == null ? void 0 : hls.running),
|
|
597
|
+
error: hls == null ? void 0 : hls.error
|
|
598
|
+
}
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
// src/core/selectors/selectors.ts
|
|
604
|
+
var import_reselect = __toModule(require("reselect"));
|
|
605
|
+
|
|
606
|
+
// src/core/selectors/selectorUtils.ts
|
|
607
|
+
function getPeerTracksByCondition(tracks, peer, trackCheckFn = isScreenShare) {
|
|
608
|
+
let videoTrack = void 0;
|
|
609
|
+
let audioTrack = void 0;
|
|
610
|
+
if (peer) {
|
|
611
|
+
for (const trackID of peer.auxiliaryTracks) {
|
|
612
|
+
const track = tracks[trackID];
|
|
613
|
+
if (trackCheckFn(track)) {
|
|
614
|
+
audioTrack = isAudio(track) ? track : audioTrack;
|
|
615
|
+
videoTrack = isVideo(track) ? track : videoTrack;
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
return { video: videoTrack, audio: audioTrack };
|
|
620
|
+
}
|
|
621
|
+
function isAudio(track) {
|
|
622
|
+
return track && track.type === "audio";
|
|
623
|
+
}
|
|
624
|
+
function isVideo(track) {
|
|
625
|
+
return track && track.type === "video";
|
|
626
|
+
}
|
|
627
|
+
function isScreenShare(track) {
|
|
628
|
+
return track && track.source === "screen";
|
|
629
|
+
}
|
|
630
|
+
function isAudioPlaylist(track) {
|
|
631
|
+
return track && track.source === "audioplaylist";
|
|
632
|
+
}
|
|
633
|
+
function isVideoPlaylist(track) {
|
|
634
|
+
return track && track.source === "videoplaylist";
|
|
635
|
+
}
|
|
636
|
+
function isDegraded(track) {
|
|
637
|
+
return Boolean(track == null ? void 0 : track.degraded);
|
|
638
|
+
}
|
|
639
|
+
function isTrackEnabled(store, trackID) {
|
|
640
|
+
if (trackID && store.tracks[trackID]) {
|
|
641
|
+
return store.tracks[trackID].enabled;
|
|
642
|
+
}
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
645
|
+
function isTrackDisplayEnabled(store, trackID) {
|
|
646
|
+
if (trackID && store.tracks[trackID]) {
|
|
647
|
+
return store.tracks[trackID].displayEnabled;
|
|
648
|
+
}
|
|
649
|
+
return false;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// src/core/selectors/selectors.ts
|
|
653
|
+
var selectRoom = (store) => store.room;
|
|
654
|
+
var selectRoomID = (0, import_reselect.createSelector)(selectRoom, (room) => room.id);
|
|
655
|
+
var selectPeersMap = (store) => store.peers;
|
|
656
|
+
var selectMessagesMap = (store) => store.messages.byID;
|
|
657
|
+
var selectMessageIDsInOrder = (store) => store.messages.allIDs;
|
|
658
|
+
var selectTracksMap = (store) => store.tracks;
|
|
659
|
+
var selectLocalMediaSettings = (store) => store.settings;
|
|
660
|
+
var selectDevices = (store) => {
|
|
661
|
+
return store.devices;
|
|
662
|
+
};
|
|
663
|
+
var selectSpeakers = (store) => {
|
|
664
|
+
return store.speakers;
|
|
665
|
+
};
|
|
666
|
+
var selectConnectionQualities = (store) => {
|
|
667
|
+
return store.connectionQualities;
|
|
668
|
+
};
|
|
669
|
+
var selectIsConnectedToRoom = (0, import_reselect.createSelector)([selectRoom], (room) => room && room.isConnected);
|
|
670
|
+
var selectPeerCount = (0, import_reselect.createSelector)([selectIsConnectedToRoom, selectRoom], (isConnected, room) => {
|
|
671
|
+
if (isConnected) {
|
|
672
|
+
return room.peerCount || room.peers.length;
|
|
673
|
+
} else {
|
|
674
|
+
return Math.max(room.peerCount || room.peers.length - 1, 0);
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
var selectPeers = (0, import_reselect.createSelector)([selectRoom, selectPeersMap], (room, storePeers) => {
|
|
678
|
+
return room.peers.map((peerID) => storePeers[peerID]);
|
|
679
|
+
});
|
|
680
|
+
var selectTracks = (0, import_reselect.createSelector)(selectTracksMap, (storeTracks) => {
|
|
681
|
+
return Object.values(storeTracks);
|
|
682
|
+
});
|
|
683
|
+
var selectLocalPeer = (0, import_reselect.createSelector)(selectRoom, selectPeersMap, (room, peers) => {
|
|
684
|
+
return peers[room.localPeer];
|
|
685
|
+
});
|
|
686
|
+
var selectLocalPeerID = (0, import_reselect.createSelector)(selectRoom, (room) => {
|
|
687
|
+
return room.localPeer;
|
|
688
|
+
});
|
|
689
|
+
var selectLocalAudioTrackID = (0, import_reselect.createSelector)(selectLocalPeer, (peer) => peer == null ? void 0 : peer.audioTrack);
|
|
690
|
+
var selectLocalVideoTrackID = (0, import_reselect.createSelector)(selectLocalPeer, (peer) => peer == null ? void 0 : peer.videoTrack);
|
|
691
|
+
var selectLocalAuxiliaryTrackIDs = (0, import_reselect.createSelector)(selectLocalPeer, (peer) => peer == null ? void 0 : peer.auxiliaryTracks);
|
|
692
|
+
var selectLocalTrackIDs = (0, import_reselect.createSelector)([selectLocalAudioTrackID, selectLocalVideoTrackID, selectLocalAuxiliaryTrackIDs], (audioTrackID, videoTrackID, auxiliaryTrackIDs) => {
|
|
693
|
+
const trackIDs = [...auxiliaryTrackIDs];
|
|
694
|
+
audioTrackID && trackIDs.unshift(audioTrackID);
|
|
695
|
+
videoTrackID && trackIDs.unshift(videoTrackID);
|
|
696
|
+
return trackIDs;
|
|
697
|
+
});
|
|
698
|
+
var selectRemotePeers = (0, import_reselect.createSelector)(selectPeers, (peers) => {
|
|
699
|
+
return peers.filter((p) => !p.isLocal);
|
|
700
|
+
});
|
|
701
|
+
var selectDominantSpeaker = (0, import_reselect.createSelector)(selectPeersMap, selectSpeakers, (peersMap, speakers) => {
|
|
702
|
+
const speakersInOrder = Object.entries(speakers).sort((s1, s2) => {
|
|
703
|
+
var _a, _b;
|
|
704
|
+
const s1Level = ((_a = s1[1]) == null ? void 0 : _a.audioLevel) || 0;
|
|
705
|
+
const s2Level = ((_b = s2[1]) == null ? void 0 : _b.audioLevel) || 0;
|
|
706
|
+
return s2Level > s1Level ? 1 : -1;
|
|
707
|
+
});
|
|
708
|
+
if (speakersInOrder.length > 0 && speakersInOrder[0][1].audioLevel && speakersInOrder[0][1].audioLevel > 0) {
|
|
709
|
+
const peerID = speakersInOrder[0][1].peerID;
|
|
710
|
+
if (peerID in peersMap) {
|
|
711
|
+
return peersMap[peerID];
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
return null;
|
|
715
|
+
});
|
|
716
|
+
var selectIsLocalAudioEnabled = (store) => {
|
|
717
|
+
const localPeer = selectLocalPeer(store);
|
|
718
|
+
return isTrackEnabled(store, localPeer == null ? void 0 : localPeer.audioTrack);
|
|
719
|
+
};
|
|
720
|
+
var selectIsLocalVideoEnabled = (store) => {
|
|
721
|
+
const localPeer = selectLocalPeer(store);
|
|
722
|
+
return isTrackEnabled(store, localPeer == null ? void 0 : localPeer.videoTrack);
|
|
723
|
+
};
|
|
724
|
+
var selectIsLocalVideoDisplayEnabled = (store) => {
|
|
725
|
+
const localPeer = selectLocalPeer(store);
|
|
726
|
+
return isTrackDisplayEnabled(store, localPeer == null ? void 0 : localPeer.videoTrack);
|
|
727
|
+
};
|
|
728
|
+
var selectIsLocalScreenShared = (0, import_reselect.createSelector)(selectLocalPeer, selectTracksMap, (localPeer, tracksMap) => {
|
|
729
|
+
const { video, audio } = getPeerTracksByCondition(tracksMap, localPeer);
|
|
730
|
+
return !!(video || audio);
|
|
731
|
+
});
|
|
732
|
+
var selectPeerScreenSharing = (0, import_reselect.createSelector)(selectPeersMap, selectTracksMap, (peersMap, tracksMap) => {
|
|
733
|
+
let screensharePeer = void 0;
|
|
734
|
+
for (const peerID in peersMap) {
|
|
735
|
+
const peer = peersMap[peerID];
|
|
736
|
+
const { video, audio } = getPeerTracksByCondition(tracksMap, peer);
|
|
737
|
+
if (video) {
|
|
738
|
+
return peer;
|
|
739
|
+
} else if (audio && !screensharePeer) {
|
|
740
|
+
screensharePeer = peer;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
return screensharePeer;
|
|
744
|
+
});
|
|
745
|
+
var selectIsSomeoneScreenSharing = (0, import_reselect.createSelector)(selectPeerScreenSharing, (peer) => {
|
|
746
|
+
return !!peer;
|
|
747
|
+
});
|
|
748
|
+
var selectPeerSharingAudio = (0, import_reselect.createSelector)(selectPeersMap, selectTracksMap, (peersMap, tracksMap) => {
|
|
749
|
+
for (const peerID in peersMap) {
|
|
750
|
+
const peer = peersMap[peerID];
|
|
751
|
+
const { audio, video } = getPeerTracksByCondition(tracksMap, peer);
|
|
752
|
+
if (!video && !!audio) {
|
|
753
|
+
return peer;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
return void 0;
|
|
757
|
+
});
|
|
758
|
+
var selectPeersScreenSharing = (0, import_reselect.createSelector)(selectPeersMap, selectTracksMap, (peersMap, tracksMap) => {
|
|
759
|
+
const videoPeers = [];
|
|
760
|
+
const audioPeers = [];
|
|
761
|
+
for (const peerID in peersMap) {
|
|
762
|
+
const peer = peersMap[peerID];
|
|
763
|
+
const { video, audio } = getPeerTracksByCondition(tracksMap, peer);
|
|
764
|
+
if (video) {
|
|
765
|
+
videoPeers.push(peer);
|
|
766
|
+
} else if (audio) {
|
|
767
|
+
audioPeers.push(peer);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
return videoPeers.concat(audioPeers);
|
|
771
|
+
});
|
|
772
|
+
var selectPeerSharingVideoPlaylist = (0, import_reselect.createSelector)(selectPeersMap, selectTracksMap, (peersMap, tracksMap) => {
|
|
773
|
+
for (const trackId in tracksMap) {
|
|
774
|
+
const track = tracksMap[trackId];
|
|
775
|
+
if (isVideoPlaylist(track) && isVideo(track) && track.peerId) {
|
|
776
|
+
return peersMap[track.peerId];
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
return void 0;
|
|
780
|
+
});
|
|
781
|
+
var selectPeerSharingAudioPlaylist = (0, import_reselect.createSelector)(selectPeersMap, selectTracksMap, (peersMap, tracksMap) => {
|
|
782
|
+
for (const trackId in tracksMap) {
|
|
783
|
+
const track = tracksMap[trackId];
|
|
784
|
+
if (isAudioPlaylist(track) && track.peerId) {
|
|
785
|
+
return peersMap[track.peerId];
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
return void 0;
|
|
789
|
+
});
|
|
790
|
+
var selectDegradedTracks = (0, import_reselect.createSelector)(selectTracks, (tracks) => tracks.filter(isDegraded));
|
|
791
|
+
var selectHMSMessagesCount = (0, import_reselect.createSelector)(selectMessageIDsInOrder, (messageIDs) => messageIDs.length);
|
|
792
|
+
var selectUnreadHMSMessagesCount = (0, import_reselect.createSelector)(selectMessagesMap, (messages) => {
|
|
793
|
+
return Object.values(messages).filter((m) => !m.read).length;
|
|
794
|
+
});
|
|
795
|
+
var selectHMSMessages = (0, import_reselect.createSelector)(selectMessageIDsInOrder, selectMessagesMap, (msgIDs, msgMap) => {
|
|
796
|
+
const messages = [];
|
|
797
|
+
msgIDs.forEach((msgId) => {
|
|
798
|
+
messages.push(msgMap[msgId]);
|
|
799
|
+
});
|
|
800
|
+
return messages;
|
|
801
|
+
});
|
|
802
|
+
var selectRoomState = (0, import_reselect.createSelector)([selectRoom], (room) => room && room.roomState);
|
|
803
|
+
var selectIsInPreview = (0, import_reselect.createSelector)(selectRoomState, (roomState) => roomState === HMSRoomState.Preview);
|
|
804
|
+
var selectRoomStarted = (0, import_reselect.createSelector)(selectRoom, (room) => room.roomState !== HMSRoomState.Disconnected);
|
|
805
|
+
var selectRolesMap = (store) => {
|
|
806
|
+
return store.roles;
|
|
807
|
+
};
|
|
808
|
+
var selectAvailableRoleNames = (0, import_reselect.createSelector)([selectRolesMap], (rolesMap) => Object.keys(rolesMap));
|
|
809
|
+
var selectLocalPeerRole = (0, import_reselect.createSelector)([selectLocalPeer, selectRolesMap], (localPeer, rolesMap) => (localPeer == null ? void 0 : localPeer.roleName) ? rolesMap[localPeer.roleName] : null);
|
|
810
|
+
var selectIsAllowedToSubscribe = (0, import_reselect.createSelector)([selectLocalPeerRole], (role) => {
|
|
811
|
+
var _a;
|
|
812
|
+
if (!((_a = role == null ? void 0 : role.subscribeParams) == null ? void 0 : _a.subscribeToRoles)) {
|
|
813
|
+
return false;
|
|
814
|
+
}
|
|
815
|
+
return role.subscribeParams.subscribeToRoles.length > 0;
|
|
816
|
+
});
|
|
817
|
+
var selectPermissions = (0, import_reselect.createSelector)(selectLocalPeerRole, (role) => role == null ? void 0 : role.permissions);
|
|
818
|
+
var selectRecordingState = (0, import_reselect.createSelector)(selectRoom, (room) => room.recording);
|
|
819
|
+
var selectRTMPState = (0, import_reselect.createSelector)(selectRoom, (room) => room.rtmp);
|
|
820
|
+
var selectHLSState = (0, import_reselect.createSelector)(selectRoom, (room) => room.hls);
|
|
821
|
+
var selectSessionId = (0, import_reselect.createSelector)(selectRoom, (room) => room.sessionId);
|
|
822
|
+
var selectRoomStartTime = (0, import_reselect.createSelector)(selectRoom, (room) => room.startedAt);
|
|
823
|
+
|
|
824
|
+
// src/core/selectors/playlistselectors.ts
|
|
825
|
+
var import_reselect2 = __toModule(require("reselect"));
|
|
826
|
+
var selectPlaylistMap = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].list;
|
|
827
|
+
var selectPlaylistSelection = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].selection;
|
|
828
|
+
var selectPlaylistProgress = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].progress;
|
|
829
|
+
var selectPlaylistCurrentTime = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].currentTime;
|
|
830
|
+
var selectPlaylistPlaybackRate = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].playbackRate;
|
|
831
|
+
var selectPlaylistVolume = (type = HMSPlaylistType.audio) => (store) => store.playlist[type].volume;
|
|
832
|
+
var selectPlaylist = (type = HMSPlaylistType.audio) => (0, import_reselect2.createSelector)(selectPlaylistMap(type), (storePlaylist) => {
|
|
833
|
+
return Object.values(storePlaylist);
|
|
834
|
+
});
|
|
835
|
+
var selectPlaylistSelectedItem = (type = HMSPlaylistType.audio) => (0, import_reselect2.createSelector)(selectPlaylistMap(type), selectPlaylistSelection(type), (storePlaylist, currentSelection) => {
|
|
836
|
+
if (!currentSelection.id) {
|
|
837
|
+
return;
|
|
838
|
+
}
|
|
839
|
+
return storePlaylist[currentSelection.id];
|
|
840
|
+
});
|
|
841
|
+
var selectAudioPlaylist = {
|
|
842
|
+
selection: selectPlaylistSelection(HMSPlaylistType.audio),
|
|
843
|
+
progress: selectPlaylistProgress(HMSPlaylistType.audio),
|
|
844
|
+
currentTime: selectPlaylistCurrentTime(HMSPlaylistType.audio),
|
|
845
|
+
playbackRate: selectPlaylistPlaybackRate(HMSPlaylistType.audio),
|
|
846
|
+
volume: selectPlaylistVolume(HMSPlaylistType.audio),
|
|
847
|
+
list: selectPlaylist(HMSPlaylistType.audio),
|
|
848
|
+
selectedItem: selectPlaylistSelectedItem(HMSPlaylistType.audio)
|
|
849
|
+
};
|
|
850
|
+
var selectVideoPlaylist = {
|
|
851
|
+
selection: selectPlaylistSelection(HMSPlaylistType.video),
|
|
852
|
+
progress: selectPlaylistProgress(HMSPlaylistType.video),
|
|
853
|
+
currentTime: selectPlaylistCurrentTime(HMSPlaylistType.video),
|
|
854
|
+
playbackRate: selectPlaylistPlaybackRate(HMSPlaylistType.video),
|
|
855
|
+
volume: selectPlaylistVolume(HMSPlaylistType.video),
|
|
856
|
+
list: selectPlaylist(HMSPlaylistType.video),
|
|
857
|
+
selectedItem: selectPlaylistSelectedItem(HMSPlaylistType.video)
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
// src/core/selectors/selectorsByID.ts
|
|
861
|
+
var import_reselect3 = __toModule(require("reselect"));
|
|
862
|
+
|
|
863
|
+
// src/core/selectors/common.ts
|
|
864
|
+
function byIDCurry(selector) {
|
|
865
|
+
return (id) => {
|
|
866
|
+
return (store) => selector(store, id);
|
|
867
|
+
};
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
// src/common/ui-logger.ts
|
|
871
|
+
var HMS_STORE_TAG = "HMS-Store:";
|
|
872
|
+
var HMSLogger = class {
|
|
873
|
+
static v(tag, ...data) {
|
|
874
|
+
this.log(import_hms_video.HMSLogLevel.VERBOSE, tag, ...data);
|
|
875
|
+
}
|
|
876
|
+
static d(...data) {
|
|
877
|
+
this.log(import_hms_video.HMSLogLevel.DEBUG, ...data);
|
|
878
|
+
}
|
|
879
|
+
static i(...data) {
|
|
880
|
+
this.log(import_hms_video.HMSLogLevel.INFO, ...data);
|
|
881
|
+
}
|
|
882
|
+
static w(...data) {
|
|
883
|
+
this.log(import_hms_video.HMSLogLevel.WARN, ...data);
|
|
884
|
+
}
|
|
885
|
+
static e(...data) {
|
|
886
|
+
this.log(import_hms_video.HMSLogLevel.ERROR, ...data);
|
|
887
|
+
}
|
|
888
|
+
static time(mark) {
|
|
889
|
+
this.log(import_hms_video.HMSLogLevel.TIME, "[HMSPerformanceTiming]", mark);
|
|
890
|
+
}
|
|
891
|
+
static timeEnd(mark) {
|
|
892
|
+
this.log(import_hms_video.HMSLogLevel.TIMEEND, "[HMSPerformanceTiming]", mark, mark);
|
|
893
|
+
}
|
|
894
|
+
static cleanUp() {
|
|
895
|
+
performance.clearMarks();
|
|
896
|
+
performance.clearMeasures();
|
|
897
|
+
}
|
|
898
|
+
static log(level, ...data) {
|
|
899
|
+
if (this.level.valueOf() > level.valueOf()) {
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
902
|
+
switch (level) {
|
|
903
|
+
case import_hms_video.HMSLogLevel.VERBOSE: {
|
|
904
|
+
console.log(HMS_STORE_TAG, ...data);
|
|
905
|
+
break;
|
|
906
|
+
}
|
|
907
|
+
case import_hms_video.HMSLogLevel.DEBUG: {
|
|
908
|
+
console.debug(HMS_STORE_TAG, ...data);
|
|
909
|
+
break;
|
|
910
|
+
}
|
|
911
|
+
case import_hms_video.HMSLogLevel.INFO: {
|
|
912
|
+
console.info(HMS_STORE_TAG, ...data);
|
|
913
|
+
break;
|
|
914
|
+
}
|
|
915
|
+
case import_hms_video.HMSLogLevel.WARN: {
|
|
916
|
+
console.warn(HMS_STORE_TAG, ...data);
|
|
917
|
+
break;
|
|
918
|
+
}
|
|
919
|
+
case import_hms_video.HMSLogLevel.ERROR: {
|
|
920
|
+
console.error(HMS_STORE_TAG, ...data);
|
|
921
|
+
break;
|
|
922
|
+
}
|
|
923
|
+
case import_hms_video.HMSLogLevel.TIME: {
|
|
924
|
+
performance.mark(data[1]);
|
|
925
|
+
break;
|
|
926
|
+
}
|
|
927
|
+
case import_hms_video.HMSLogLevel.TIMEEND: {
|
|
928
|
+
const tag = data[0];
|
|
929
|
+
const mark = data[1];
|
|
930
|
+
try {
|
|
931
|
+
const entry = performance.measure(mark, mark);
|
|
932
|
+
this.log(import_hms_video.HMSLogLevel.DEBUG, tag, mark, entry == null ? void 0 : entry.duration);
|
|
933
|
+
performance.clearMarks(mark);
|
|
934
|
+
performance.clearMeasures(mark);
|
|
935
|
+
} catch (error) {
|
|
936
|
+
this.log(import_hms_video.HMSLogLevel.DEBUG, tag, mark, error);
|
|
937
|
+
}
|
|
938
|
+
break;
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
};
|
|
943
|
+
HMSLogger.level = import_hms_video.HMSLogLevel.VERBOSE;
|
|
944
|
+
|
|
945
|
+
// src/core/selectors/selectorsByID.ts
|
|
946
|
+
var selectPeerID = (_store, peerID) => peerID;
|
|
947
|
+
var selectTrackID = (_store, trackID) => trackID;
|
|
948
|
+
var selectRoleName = (_store, roleName) => roleName;
|
|
949
|
+
var selectPeerByIDBare = (0, import_reselect3.createSelector)([selectPeersMap, selectPeerID], (storePeers, peerID) => peerID ? storePeers[peerID] : null);
|
|
950
|
+
var selectTrackByIDBare = (0, import_reselect3.createSelector)([selectTracksMap, selectTrackID], (storeTracks, trackID) => trackID ? storeTracks[trackID] : null);
|
|
951
|
+
var selectPeerByID = byIDCurry(selectPeerByIDBare);
|
|
952
|
+
var selectPeerNameByID = byIDCurry((0, import_reselect3.createSelector)(selectPeerByIDBare, (peer) => peer == null ? void 0 : peer.name));
|
|
953
|
+
var selectTrackByID = byIDCurry(selectTrackByIDBare);
|
|
954
|
+
var selectVideoTrackByPeerID = byIDCurry((store, peerID) => {
|
|
955
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
956
|
+
if (peer && peer.videoTrack && peer.videoTrack !== "") {
|
|
957
|
+
return store.tracks[peer.videoTrack];
|
|
958
|
+
}
|
|
959
|
+
return void 0;
|
|
960
|
+
});
|
|
961
|
+
var selectAudioTrackByPeerID = byIDCurry((store, peerID) => {
|
|
962
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
963
|
+
if (peer && peer.audioTrack && peer.audioTrack !== "") {
|
|
964
|
+
return store.tracks[peer.audioTrack];
|
|
965
|
+
}
|
|
966
|
+
return void 0;
|
|
967
|
+
});
|
|
968
|
+
var selectCameraStreamByPeerID = selectVideoTrackByPeerID;
|
|
969
|
+
var selectAuxiliaryTracksByPeerID = byIDCurry((store, peerID) => {
|
|
970
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
971
|
+
return (peer == null ? void 0 : peer.auxiliaryTracks.map((trackID) => store.tracks[trackID])) || [];
|
|
972
|
+
});
|
|
973
|
+
var selectSpeakerByTrackID = (store, trackID) => {
|
|
974
|
+
return trackID ? store.speakers[trackID] : null;
|
|
975
|
+
};
|
|
976
|
+
var selectTrackAudioByID = byIDCurry((0, import_reselect3.createSelector)(selectSpeakerByTrackID, (speaker) => (speaker == null ? void 0 : speaker.audioLevel) || 0));
|
|
977
|
+
var selectSpeakerByPeerID = (store, peerID) => {
|
|
978
|
+
const peerAudioTrack = selectAudioTrackByPeerID(peerID)(store);
|
|
979
|
+
return selectSpeakerByTrackID(store, peerAudioTrack == null ? void 0 : peerAudioTrack.id);
|
|
980
|
+
};
|
|
981
|
+
var selectPeerAudioByID = byIDCurry((0, import_reselect3.createSelector)(selectSpeakerByPeerID, (speaker) => (speaker == null ? void 0 : speaker.audioLevel) || 0));
|
|
982
|
+
var selectConnectionQualityByPeerID = byIDCurry((store, peerID) => {
|
|
983
|
+
if (peerID) {
|
|
984
|
+
return store.connectionQualities[peerID];
|
|
985
|
+
}
|
|
986
|
+
return void 0;
|
|
987
|
+
});
|
|
988
|
+
var selectAuxiliaryAudioByPeerID = byIDCurry((store, peerID) => {
|
|
989
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
990
|
+
if (peer) {
|
|
991
|
+
const trackID = peer == null ? void 0 : peer.auxiliaryTracks.find((trackID2) => isAudio(store.tracks[trackID2]));
|
|
992
|
+
return trackID ? store.tracks[trackID] : void 0;
|
|
993
|
+
}
|
|
994
|
+
return void 0;
|
|
995
|
+
});
|
|
996
|
+
var selectVideoPlaylistVideoTrackByPeerID = byIDCurry((0, import_reselect3.createSelector)(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {
|
|
997
|
+
const trackID = peer == null ? void 0 : peer.auxiliaryTracks.find((trackID2) => {
|
|
998
|
+
const track = tracks[trackID2];
|
|
999
|
+
return isVideoPlaylist(track) && isVideo(track);
|
|
1000
|
+
});
|
|
1001
|
+
return trackID ? tracks[trackID] : void 0;
|
|
1002
|
+
}));
|
|
1003
|
+
var selectVideoPlaylistAudioTrackByPeerID = byIDCurry((0, import_reselect3.createSelector)(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {
|
|
1004
|
+
const trackID = peer == null ? void 0 : peer.auxiliaryTracks.find((trackID2) => {
|
|
1005
|
+
const track = tracks[trackID2];
|
|
1006
|
+
return isVideoPlaylist(track) && isAudio(track);
|
|
1007
|
+
});
|
|
1008
|
+
return trackID ? tracks[trackID] : void 0;
|
|
1009
|
+
}));
|
|
1010
|
+
var selectAudioPlaylistTrackByPeerID = byIDCurry((0, import_reselect3.createSelector)(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {
|
|
1011
|
+
const trackID = peer == null ? void 0 : peer.auxiliaryTracks.find((trackID2) => {
|
|
1012
|
+
const track = tracks[trackID2];
|
|
1013
|
+
return isAudioPlaylist(track) && isAudio(track);
|
|
1014
|
+
});
|
|
1015
|
+
return trackID ? tracks[trackID] : void 0;
|
|
1016
|
+
}));
|
|
1017
|
+
var selectScreenSharesByPeerId = byIDCurry((0, import_reselect3.createSelector)(selectTracksMap, selectPeerByIDBare, (tracks, peer) => {
|
|
1018
|
+
return getPeerTracksByCondition(tracks, peer);
|
|
1019
|
+
}));
|
|
1020
|
+
var selectScreenShareByPeerID = (id) => (0, import_reselect3.createSelector)(selectScreenSharesByPeerId(id), (screenshare) => {
|
|
1021
|
+
return screenshare.video;
|
|
1022
|
+
});
|
|
1023
|
+
var selectScreenShareAudioByPeerID = (id) => (0, import_reselect3.createSelector)(selectScreenSharesByPeerId(id), (screenshare) => {
|
|
1024
|
+
return screenshare.audio;
|
|
1025
|
+
});
|
|
1026
|
+
var selectIsPeerAudioEnabled = byIDCurry((store, peerID) => {
|
|
1027
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
1028
|
+
return isTrackEnabled(store, peer == null ? void 0 : peer.audioTrack);
|
|
1029
|
+
});
|
|
1030
|
+
var selectIsPeerVideoEnabled = byIDCurry((store, peerID) => {
|
|
1031
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
1032
|
+
return isTrackEnabled(store, peer == null ? void 0 : peer.videoTrack);
|
|
1033
|
+
});
|
|
1034
|
+
var selectIsAudioLocallyMuted = byIDCurry((store, trackID) => {
|
|
1035
|
+
if (trackID && store.tracks[trackID]) {
|
|
1036
|
+
return store.tracks[trackID].volume === 0;
|
|
1037
|
+
}
|
|
1038
|
+
return void 0;
|
|
1039
|
+
});
|
|
1040
|
+
var selectIsLocallyMutedByPeerID = byIDCurry((store, peerID) => {
|
|
1041
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
1042
|
+
return selectIsAudioLocallyMuted(peer == null ? void 0 : peer.audioTrack)(store);
|
|
1043
|
+
});
|
|
1044
|
+
var selectIsScreenShareLocallyMutedByPeerID = byIDCurry((store, peerID) => {
|
|
1045
|
+
const track = selectScreenShareAudioByPeerID(peerID)(store);
|
|
1046
|
+
return selectIsAudioLocallyMuted(track == null ? void 0 : track.id)(store);
|
|
1047
|
+
});
|
|
1048
|
+
var selectAudioTrackVolume = byIDCurry((store, trackID) => {
|
|
1049
|
+
const track = selectTrackByIDBare(store, trackID);
|
|
1050
|
+
if (track) {
|
|
1051
|
+
if (track.type !== "audio") {
|
|
1052
|
+
HMSLogger.w("Please pass audio track here");
|
|
1053
|
+
return void 0;
|
|
1054
|
+
}
|
|
1055
|
+
return track.volume;
|
|
1056
|
+
}
|
|
1057
|
+
return void 0;
|
|
1058
|
+
});
|
|
1059
|
+
var selectAudioVolumeByPeerID = byIDCurry((store, peerID) => {
|
|
1060
|
+
const peer = selectPeerByIDBare(store, peerID);
|
|
1061
|
+
return selectAudioTrackVolume(peer == null ? void 0 : peer.audioTrack)(store);
|
|
1062
|
+
});
|
|
1063
|
+
var selectScreenshareAudioVolumeByPeerID = byIDCurry((store, peerID) => {
|
|
1064
|
+
const track = selectScreenShareAudioByPeerID(peerID)(store);
|
|
1065
|
+
return selectAudioTrackVolume(track == null ? void 0 : track.id)(store);
|
|
1066
|
+
});
|
|
1067
|
+
var selectSimulcastLayerByTrack = byIDCurry((store, trackID) => {
|
|
1068
|
+
const track = selectTrackByIDBare(store, trackID);
|
|
1069
|
+
if (track) {
|
|
1070
|
+
if (track.type !== "video") {
|
|
1071
|
+
HMSLogger.w("Please pass video track here");
|
|
1072
|
+
return void 0;
|
|
1073
|
+
}
|
|
1074
|
+
return track.layer;
|
|
1075
|
+
}
|
|
1076
|
+
return void 0;
|
|
1077
|
+
});
|
|
1078
|
+
var selectMessagesByPeerIDInternal = (0, import_reselect3.createSelector)([selectHMSMessages, selectLocalPeerID, selectPeerID], (messages, localPeerID, peerID) => {
|
|
1079
|
+
if (!peerID) {
|
|
1080
|
+
return void 0;
|
|
1081
|
+
}
|
|
1082
|
+
return messages.filter((message) => {
|
|
1083
|
+
var _a;
|
|
1084
|
+
if (!message.recipientPeer && !((_a = message.recipientRoles) == null ? void 0 : _a.length)) {
|
|
1085
|
+
return false;
|
|
1086
|
+
}
|
|
1087
|
+
if (![localPeerID, peerID].includes(message.sender)) {
|
|
1088
|
+
return false;
|
|
1089
|
+
}
|
|
1090
|
+
return [localPeerID, peerID].includes(message.recipientPeer);
|
|
1091
|
+
});
|
|
1092
|
+
});
|
|
1093
|
+
var selectMessagesByRoleInternal = (0, import_reselect3.createSelector)([selectHMSMessages, selectRoleName], (messages, roleName) => {
|
|
1094
|
+
if (!roleName) {
|
|
1095
|
+
return void 0;
|
|
1096
|
+
}
|
|
1097
|
+
return messages.filter((message) => {
|
|
1098
|
+
var _a, _b;
|
|
1099
|
+
if (!((_a = message.recipientRoles) == null ? void 0 : _a.length)) {
|
|
1100
|
+
return false;
|
|
1101
|
+
}
|
|
1102
|
+
return (_b = message.recipientRoles) == null ? void 0 : _b.includes(roleName);
|
|
1103
|
+
});
|
|
1104
|
+
});
|
|
1105
|
+
var selectBroadcastMessages = (0, import_reselect3.createSelector)(selectHMSMessages, (messages) => {
|
|
1106
|
+
return messages.filter((message) => {
|
|
1107
|
+
var _a;
|
|
1108
|
+
return !message.recipientPeer && !((_a = message.recipientRoles) == null ? void 0 : _a.length);
|
|
1109
|
+
});
|
|
1110
|
+
});
|
|
1111
|
+
var selectUnreadMessageCountByRole = (0, import_reselect3.createSelector)([selectMessagesByRoleInternal, selectRoleName], (messages) => {
|
|
1112
|
+
if (!messages) {
|
|
1113
|
+
return 0;
|
|
1114
|
+
}
|
|
1115
|
+
return messages.filter((m) => !m.read).length;
|
|
1116
|
+
});
|
|
1117
|
+
var selectUnreadMessageCountByPeerID = (0, import_reselect3.createSelector)([selectMessagesByPeerIDInternal, selectPeerID], (messages) => {
|
|
1118
|
+
if (!messages) {
|
|
1119
|
+
return 0;
|
|
1120
|
+
}
|
|
1121
|
+
return messages.filter((m) => !m.read).length;
|
|
1122
|
+
});
|
|
1123
|
+
var selectBroadcastMessagesUnreadCount = (0, import_reselect3.createSelector)(selectBroadcastMessages, (messages) => {
|
|
1124
|
+
return messages.filter((m) => !m.read).length;
|
|
1125
|
+
});
|
|
1126
|
+
var selectMessagesByPeerID = byIDCurry(selectMessagesByPeerIDInternal);
|
|
1127
|
+
var selectMessagesByRole = byIDCurry(selectMessagesByRoleInternal);
|
|
1128
|
+
var selectMessagesUnreadCountByRole = byIDCurry(selectUnreadMessageCountByRole);
|
|
1129
|
+
var selectMessagesUnreadCountByPeerID = byIDCurry(selectUnreadMessageCountByPeerID);
|
|
1130
|
+
var selectPeersByRole = (role) => (0, import_reselect3.createSelector)([selectPeers], (peers) => {
|
|
1131
|
+
return peers.filter((p) => p.roleName === role);
|
|
1132
|
+
});
|
|
1133
|
+
var selectPeerMetadata = (peerId) => (0, import_reselect3.createSelector)(selectPeerByID(peerId), (peer) => {
|
|
1134
|
+
try {
|
|
1135
|
+
return (peer == null ? void 0 : peer.metadata) && peer.metadata !== "" ? JSON.parse(peer.metadata) : {};
|
|
1136
|
+
} catch (error) {
|
|
1137
|
+
console.error("cannot parse peer metadata", error);
|
|
1138
|
+
return {};
|
|
1139
|
+
}
|
|
1140
|
+
});
|
|
1141
|
+
|
|
1142
|
+
// src/core/selectors/derivedSelectors.ts
|
|
1143
|
+
var import_reselect4 = __toModule(require("reselect"));
|
|
1144
|
+
var selectPeersWithAudioStatus = (0, import_reselect4.createSelector)([selectPeersMap, selectTracksMap], (peersMap, tracksMap) => {
|
|
1145
|
+
const participants = Object.values(peersMap).map((peer) => {
|
|
1146
|
+
var _a;
|
|
1147
|
+
return {
|
|
1148
|
+
peer,
|
|
1149
|
+
isAudioEnabled: peer.audioTrack ? (_a = tracksMap[peer.audioTrack]) == null ? void 0 : _a.enabled : false
|
|
1150
|
+
};
|
|
1151
|
+
});
|
|
1152
|
+
return participants;
|
|
1153
|
+
});
|
|
1154
|
+
var selectRoleChangeStoreRequest = (store) => {
|
|
1155
|
+
return store.roleChangeRequests[0] || null;
|
|
1156
|
+
};
|
|
1157
|
+
var selectRoleChangeRequest = (0, import_reselect4.createSelector)([selectRoleChangeStoreRequest, selectPeersMap, selectRolesMap], (request, peersMap, rolesMap) => {
|
|
1158
|
+
if (!request) {
|
|
1159
|
+
return null;
|
|
1160
|
+
}
|
|
1161
|
+
return {
|
|
1162
|
+
requestedBy: request.requestedBy ? peersMap[request.requestedBy] : void 0,
|
|
1163
|
+
role: rolesMap[request.roleName],
|
|
1164
|
+
token: request.token
|
|
1165
|
+
};
|
|
1166
|
+
});
|
|
1167
|
+
var selectIsAllowedToPublish = (0, import_reselect4.createSelector)([selectLocalPeerRole], (role) => {
|
|
1168
|
+
var _a;
|
|
1169
|
+
let video = false, audio = false, screen = false;
|
|
1170
|
+
if ((_a = role == null ? void 0 : role.publishParams) == null ? void 0 : _a.allowed) {
|
|
1171
|
+
video = role.publishParams.allowed.includes("video");
|
|
1172
|
+
audio = role.publishParams.allowed.includes("audio");
|
|
1173
|
+
screen = role.publishParams.allowed.includes("screen");
|
|
1174
|
+
}
|
|
1175
|
+
return {
|
|
1176
|
+
video,
|
|
1177
|
+
audio,
|
|
1178
|
+
screen
|
|
1179
|
+
};
|
|
1180
|
+
});
|
|
1181
|
+
|
|
1182
|
+
// src/core/selectors/selectorsByReference.ts
|
|
1183
|
+
var import_reselect5 = __toModule(require("reselect"));
|
|
1184
|
+
var selectRoleByRoleName = (roleName) => (0, import_reselect5.createSelector)([selectRolesMap], (rolesMap) => rolesMap[roleName]);
|
|
1185
|
+
var selectLocalVideoPlugins = (0, import_reselect5.createSelector)([selectLocalVideoTrackID, selectTracksMap], (trackID, tracksMap) => {
|
|
1186
|
+
let track = null;
|
|
1187
|
+
if (trackID) {
|
|
1188
|
+
track = tracksMap[trackID];
|
|
1189
|
+
}
|
|
1190
|
+
return (track == null ? void 0 : track.plugins) || [];
|
|
1191
|
+
});
|
|
1192
|
+
var selectLocalAudioPlugins = (0, import_reselect5.createSelector)([selectLocalAudioTrackID, selectTracksMap], (trackID, tracksMap) => {
|
|
1193
|
+
let track = null;
|
|
1194
|
+
if (trackID) {
|
|
1195
|
+
track = tracksMap[trackID];
|
|
1196
|
+
}
|
|
1197
|
+
return (track == null ? void 0 : track.plugins) || [];
|
|
1198
|
+
});
|
|
1199
|
+
var selectIsLocalVideoPluginPresent = (pluginName) => {
|
|
1200
|
+
return (0, import_reselect5.createSelector)([selectLocalVideoPlugins], (plugins) => {
|
|
1201
|
+
return plugins.includes(pluginName);
|
|
1202
|
+
});
|
|
1203
|
+
};
|
|
1204
|
+
var selectIsLocalAudioPluginPresent = (pluginName) => {
|
|
1205
|
+
return (0, import_reselect5.createSelector)([selectLocalAudioPlugins], (plugins) => {
|
|
1206
|
+
return plugins.includes(pluginName);
|
|
1207
|
+
});
|
|
1208
|
+
};
|
|
1209
|
+
var selectPeerByCondition = (predicate) => (0, import_reselect5.createSelector)(selectPeers, (peers) => {
|
|
1210
|
+
return peers.find(predicate);
|
|
1211
|
+
});
|
|
1212
|
+
var selectPeersByCondition = (predicate) => (0, import_reselect5.createSelector)(selectPeers, (peers) => {
|
|
1213
|
+
return peers.filter(predicate);
|
|
1214
|
+
});
|
|
1215
|
+
var selectDidIJoinWithin = (timeMs) => (0, import_reselect5.createSelector)(selectRoom, (room) => room.joinedAt && Date.now() - room.joinedAt.getTime() <= timeMs);
|
|
1216
|
+
|
|
1217
|
+
// src/core/hmsSDKStore/HMSSDKActions.ts
|
|
1218
|
+
var import_hms_video4 = __toModule(require("@100mslive/hms-video"));
|
|
1219
|
+
|
|
1220
|
+
// src/core/hmsSDKStore/sdkUtils/sdkUtils.ts
|
|
1221
|
+
var import_hms_video3 = __toModule(require("@100mslive/hms-video"));
|
|
1222
|
+
function isRemoteTrack(track) {
|
|
1223
|
+
return track instanceof import_hms_video3.HMSRemoteAudioTrack || track instanceof import_hms_video3.HMSRemoteVideoTrack;
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
// src/core/hmsSDKStore/HMSPlaylist.ts
|
|
1227
|
+
var HMSPlaylist = class {
|
|
1228
|
+
constructor(playlistManager, type, syncPlaylistState, store) {
|
|
1229
|
+
this.playlistManager = playlistManager;
|
|
1230
|
+
this.syncPlaylistState = syncPlaylistState;
|
|
1231
|
+
this.store = store;
|
|
1232
|
+
this.type = type;
|
|
1233
|
+
}
|
|
1234
|
+
play(id) {
|
|
1235
|
+
return __async(this, null, function* () {
|
|
1236
|
+
if (!id) {
|
|
1237
|
+
HMSLogger.w("Please pass id to play");
|
|
1238
|
+
return;
|
|
1239
|
+
}
|
|
1240
|
+
yield this.playlistManager.setEnabled(true, { id, type: this.type });
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
pause() {
|
|
1244
|
+
return __async(this, null, function* () {
|
|
1245
|
+
const selector = this.type === HMSPlaylistType.audio ? selectAudioPlaylist : selectVideoPlaylist;
|
|
1246
|
+
const selection = this.store.getState(selector.selection);
|
|
1247
|
+
if (!selection.id) {
|
|
1248
|
+
HMSLogger.w("No item is currently playing to pause");
|
|
1249
|
+
return;
|
|
1250
|
+
}
|
|
1251
|
+
yield this.playlistManager.setEnabled(false, { id: selection.id, type: this.type });
|
|
1252
|
+
});
|
|
1253
|
+
}
|
|
1254
|
+
playNext() {
|
|
1255
|
+
return __async(this, null, function* () {
|
|
1256
|
+
yield this.playlistManager.playNext(this.type);
|
|
1257
|
+
});
|
|
1258
|
+
}
|
|
1259
|
+
playPrevious() {
|
|
1260
|
+
return __async(this, null, function* () {
|
|
1261
|
+
yield this.playlistManager.playPrevious(this.type);
|
|
1262
|
+
});
|
|
1263
|
+
}
|
|
1264
|
+
seek(seekValue) {
|
|
1265
|
+
this.playlistManager.seek(seekValue, this.type);
|
|
1266
|
+
this.syncPlaylistState(`seekOn${this.type}Playlist`);
|
|
1267
|
+
}
|
|
1268
|
+
seekTo(seekValue) {
|
|
1269
|
+
this.playlistManager.seekTo(seekValue, this.type);
|
|
1270
|
+
this.syncPlaylistState(`seekToOn${this.type}Playlist`);
|
|
1271
|
+
}
|
|
1272
|
+
setVolume(volume) {
|
|
1273
|
+
this.playlistManager.setVolume(volume, this.type);
|
|
1274
|
+
this.syncPlaylistState(`setVolumeOn${this.type}Playlist`);
|
|
1275
|
+
}
|
|
1276
|
+
setList(list) {
|
|
1277
|
+
this.playlistManager.setList(list);
|
|
1278
|
+
this.syncPlaylistState(`setListOn${this.type}Playlist`);
|
|
1279
|
+
}
|
|
1280
|
+
stop() {
|
|
1281
|
+
return __async(this, null, function* () {
|
|
1282
|
+
yield this.playlistManager.stop(this.type);
|
|
1283
|
+
this.syncPlaylistState(`stop${this.type}Playlist`);
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
setIsAutoplayOn(autoplay) {
|
|
1287
|
+
this.playlistManager.setIsAutoplayOn(this.type, autoplay);
|
|
1288
|
+
}
|
|
1289
|
+
setPlaybackRate(playbackRate) {
|
|
1290
|
+
this.playlistManager.setPlaybackRate(this.type, playbackRate);
|
|
1291
|
+
this.syncPlaylistState(`set${this.type}PlaybackRate`);
|
|
1292
|
+
}
|
|
1293
|
+
};
|
|
1294
|
+
|
|
1295
|
+
// src/core/hmsSDKStore/common/mapping.ts
|
|
1296
|
+
var PEER_NOTIFICATION_TYPES = {
|
|
1297
|
+
[import_hms_video.HMSPeerUpdate.PEER_JOINED]: HMSNotificationTypes.PEER_JOINED,
|
|
1298
|
+
[import_hms_video.HMSPeerUpdate.PEER_LEFT]: HMSNotificationTypes.PEER_LEFT,
|
|
1299
|
+
[import_hms_video.HMSPeerUpdate.ROLE_UPDATED]: HMSNotificationTypes.ROLE_UPDATED,
|
|
1300
|
+
[import_hms_video.HMSPeerUpdate.AUDIO_TOGGLED]: "PEER_AUDIO_UPDATED",
|
|
1301
|
+
[import_hms_video.HMSPeerUpdate.VIDEO_TOGGLED]: "PEER_VIDEO_UPDATED",
|
|
1302
|
+
[import_hms_video.HMSPeerUpdate.NAME_UPDATED]: HMSNotificationTypes.NAME_UPDATED,
|
|
1303
|
+
[import_hms_video.HMSPeerUpdate.METADATA_UPDATED]: HMSNotificationTypes.METADATA_UPDATED
|
|
1304
|
+
};
|
|
1305
|
+
var TRACK_NOTIFICATION_TYPES = {
|
|
1306
|
+
[import_hms_video.HMSTrackUpdate.TRACK_ADDED]: HMSNotificationTypes.TRACK_ADDED,
|
|
1307
|
+
[import_hms_video.HMSTrackUpdate.TRACK_REMOVED]: HMSNotificationTypes.TRACK_REMOVED,
|
|
1308
|
+
[import_hms_video.HMSTrackUpdate.TRACK_MUTED]: HMSNotificationTypes.TRACK_MUTED,
|
|
1309
|
+
[import_hms_video.HMSTrackUpdate.TRACK_UNMUTED]: HMSNotificationTypes.TRACK_UNMUTED,
|
|
1310
|
+
[import_hms_video.HMSTrackUpdate.TRACK_DEGRADED]: HMSNotificationTypes.TRACK_DEGRADED,
|
|
1311
|
+
[import_hms_video.HMSTrackUpdate.TRACK_RESTORED]: HMSNotificationTypes.TRACK_RESTORED
|
|
1312
|
+
};
|
|
1313
|
+
var ACTION_TYPES = {
|
|
1314
|
+
[import_hms_video.HMSPeerUpdate.PEER_JOINED]: "peerJoined",
|
|
1315
|
+
[import_hms_video.HMSPeerUpdate.PEER_LEFT]: "peerLeft",
|
|
1316
|
+
[import_hms_video.HMSPeerUpdate.NAME_UPDATED]: "peerNameUpdated",
|
|
1317
|
+
[import_hms_video.HMSPeerUpdate.ROLE_UPDATED]: "peerRoleUpdated",
|
|
1318
|
+
[import_hms_video.HMSPeerUpdate.METADATA_UPDATED]: "peerMetadataUpdated"
|
|
1319
|
+
};
|
|
1320
|
+
|
|
1321
|
+
// src/core/hmsSDKStore/HMSSDKActions.ts
|
|
1322
|
+
var HMSSDKActions = class {
|
|
1323
|
+
constructor(store, sdk, notificationManager) {
|
|
1324
|
+
this.hmsSDKTracks = {};
|
|
1325
|
+
this.hmsSDKPeers = {};
|
|
1326
|
+
this.isRoomJoinCalled = false;
|
|
1327
|
+
this.ignoredMessageTypes = [];
|
|
1328
|
+
this.setProgress = ({ type, progress }) => {
|
|
1329
|
+
this.setState((draftStore) => {
|
|
1330
|
+
draftStore.playlist[type].progress = progress;
|
|
1331
|
+
draftStore.playlist[type].currentTime = this.sdk.getPlaylistManager().getCurrentTime(type);
|
|
1332
|
+
}, "playlistProgress");
|
|
1333
|
+
};
|
|
1334
|
+
this.syncPlaylistState = (action) => {
|
|
1335
|
+
this.setState((draftStore) => {
|
|
1336
|
+
Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));
|
|
1337
|
+
}, action);
|
|
1338
|
+
};
|
|
1339
|
+
this.sendPeerUpdateNotification = (type, sdkPeer) => {
|
|
1340
|
+
let peer = this.store.getState(selectPeerByID(sdkPeer.peerId));
|
|
1341
|
+
const actionName = ACTION_TYPES[type];
|
|
1342
|
+
this.syncRoomState(actionName);
|
|
1343
|
+
if (!peer) {
|
|
1344
|
+
peer = this.store.getState(selectPeerByID(sdkPeer.peerId));
|
|
1345
|
+
}
|
|
1346
|
+
this.hmsNotifications.sendPeerUpdate(type, peer);
|
|
1347
|
+
};
|
|
1348
|
+
this.setState = (fn, name) => {
|
|
1349
|
+
return this.store.namedSetState(fn, name);
|
|
1350
|
+
};
|
|
1351
|
+
this.store = store;
|
|
1352
|
+
this.sdk = sdk;
|
|
1353
|
+
this.hmsNotifications = notificationManager;
|
|
1354
|
+
}
|
|
1355
|
+
refreshDevices() {
|
|
1356
|
+
return __async(this, null, function* () {
|
|
1357
|
+
yield this.sdk.refreshDevices();
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
unblockAudio() {
|
|
1361
|
+
return __async(this, null, function* () {
|
|
1362
|
+
yield this.sdk.getAudioOutput().unblockAutoplay();
|
|
1363
|
+
});
|
|
1364
|
+
}
|
|
1365
|
+
setVolume(value, trackId) {
|
|
1366
|
+
if (trackId) {
|
|
1367
|
+
this.setTrackVolume(value, trackId);
|
|
1368
|
+
} else {
|
|
1369
|
+
this.sdk.getAudioOutput().setVolume(value);
|
|
1370
|
+
this.syncRoomState("setOutputVolume");
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
setAudioOutputDevice(deviceId) {
|
|
1374
|
+
const deviceInfo = this.sdk.getAudioOutput().setDevice(deviceId);
|
|
1375
|
+
if (deviceInfo) {
|
|
1376
|
+
this.setState((draftStore) => {
|
|
1377
|
+
draftStore.settings.audioOutputDeviceId = deviceId;
|
|
1378
|
+
}, "setAudioOutputDevice");
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
setPreferredLayer(trackId, layer) {
|
|
1382
|
+
const track = this.hmsSDKTracks[trackId];
|
|
1383
|
+
if (track) {
|
|
1384
|
+
if (track instanceof import_hms_video4.HMSRemoteVideoTrack) {
|
|
1385
|
+
track.preferLayer(layer);
|
|
1386
|
+
this.updateVideoLayer(trackId, "setPreferredLayer");
|
|
1387
|
+
} else {
|
|
1388
|
+
HMSLogger.w(`track ${trackId} is not an video track`);
|
|
1389
|
+
}
|
|
1390
|
+
} else {
|
|
1391
|
+
this.logPossibleInconsistency(`track ${trackId} not present, unable to set preffer layer`);
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
preview(config) {
|
|
1395
|
+
return __async(this, null, function* () {
|
|
1396
|
+
if (this.isRoomJoinCalled) {
|
|
1397
|
+
this.logPossibleInconsistency("attempting to call preview after join was called");
|
|
1398
|
+
return;
|
|
1399
|
+
}
|
|
1400
|
+
const roomState = this.store.getState(selectRoomState);
|
|
1401
|
+
if (roomState === HMSRoomState.Preview || roomState === HMSRoomState.Connecting) {
|
|
1402
|
+
this.logPossibleInconsistency("attempting to call preview while room is in preview/connecting");
|
|
1403
|
+
return;
|
|
1404
|
+
}
|
|
1405
|
+
try {
|
|
1406
|
+
this.setState((store) => {
|
|
1407
|
+
store.room.roomState = HMSRoomState.Connecting;
|
|
1408
|
+
}, "connecting");
|
|
1409
|
+
yield this.sdkPreviewWithListeners(config);
|
|
1410
|
+
} catch (err) {
|
|
1411
|
+
HMSLogger.e("Cannot show preview. Failed to connect to room - ", err);
|
|
1412
|
+
throw err;
|
|
1413
|
+
}
|
|
1414
|
+
});
|
|
1415
|
+
}
|
|
1416
|
+
join(config) {
|
|
1417
|
+
if (this.isRoomJoinCalled) {
|
|
1418
|
+
this.logPossibleInconsistency("room join is called again");
|
|
1419
|
+
return;
|
|
1420
|
+
}
|
|
1421
|
+
try {
|
|
1422
|
+
this.isRoomJoinCalled = true;
|
|
1423
|
+
this.setState((store) => {
|
|
1424
|
+
store.room.roomState = HMSRoomState.Connecting;
|
|
1425
|
+
}, "join");
|
|
1426
|
+
this.sdkJoinWithListeners(config);
|
|
1427
|
+
} catch (err) {
|
|
1428
|
+
this.isRoomJoinCalled = false;
|
|
1429
|
+
HMSLogger.e("Failed to connect to room - ", err);
|
|
1430
|
+
throw err;
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
leave() {
|
|
1434
|
+
return __async(this, null, function* () {
|
|
1435
|
+
const hasRoomStarted = this.store.getState(selectRoomStarted);
|
|
1436
|
+
if (!hasRoomStarted) {
|
|
1437
|
+
this.logPossibleInconsistency("room leave is called when no room is connected");
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1440
|
+
const currentRoomState = this.store.getState(selectRoomState);
|
|
1441
|
+
this.setState((store) => {
|
|
1442
|
+
store.room.roomState = HMSRoomState.Disconnecting;
|
|
1443
|
+
}, "leaving");
|
|
1444
|
+
return this.sdk.leave().then(() => {
|
|
1445
|
+
this.resetState("leave");
|
|
1446
|
+
HMSLogger.i("left room");
|
|
1447
|
+
}).catch((err) => {
|
|
1448
|
+
HMSLogger.e("error in leaving room - ", err);
|
|
1449
|
+
this.setState((store) => {
|
|
1450
|
+
store.room.roomState = currentRoomState;
|
|
1451
|
+
}, "revertLeave");
|
|
1452
|
+
});
|
|
1453
|
+
});
|
|
1454
|
+
}
|
|
1455
|
+
setScreenShareEnabled(enabled, config) {
|
|
1456
|
+
return __async(this, null, function* () {
|
|
1457
|
+
const sdkConfig = { audioOnly: false, videoOnly: false };
|
|
1458
|
+
if (typeof config === "object") {
|
|
1459
|
+
Object.assign(sdkConfig, config);
|
|
1460
|
+
} else if (typeof config === "boolean") {
|
|
1461
|
+
sdkConfig.audioOnly = config;
|
|
1462
|
+
}
|
|
1463
|
+
try {
|
|
1464
|
+
if (enabled) {
|
|
1465
|
+
yield this.startScreenShare(sdkConfig);
|
|
1466
|
+
} else {
|
|
1467
|
+
yield this.stopScreenShare();
|
|
1468
|
+
}
|
|
1469
|
+
} catch (error) {
|
|
1470
|
+
this.hmsNotifications.sendError(SDKToHMS.convertException(error));
|
|
1471
|
+
throw error;
|
|
1472
|
+
}
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
addTrack(track, type = "regular") {
|
|
1476
|
+
return __async(this, null, function* () {
|
|
1477
|
+
yield this.sdk.addTrack(track, type);
|
|
1478
|
+
this.syncRoomState("addTrack");
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
removeTrack(trackId) {
|
|
1482
|
+
return __async(this, null, function* () {
|
|
1483
|
+
yield this.sdk.removeTrack(trackId);
|
|
1484
|
+
this.syncRoomState("removeTrack");
|
|
1485
|
+
});
|
|
1486
|
+
}
|
|
1487
|
+
setLocalAudioEnabled(enabled) {
|
|
1488
|
+
return __async(this, null, function* () {
|
|
1489
|
+
const trackID = this.store.getState(selectLocalAudioTrackID);
|
|
1490
|
+
if (trackID) {
|
|
1491
|
+
yield this.setEnabledTrack(trackID, enabled);
|
|
1492
|
+
}
|
|
1493
|
+
});
|
|
1494
|
+
}
|
|
1495
|
+
setLocalVideoEnabled(enabled) {
|
|
1496
|
+
return __async(this, null, function* () {
|
|
1497
|
+
const trackID = this.store.getState(selectLocalVideoTrackID);
|
|
1498
|
+
if (trackID) {
|
|
1499
|
+
yield this.setEnabledTrack(trackID, enabled);
|
|
1500
|
+
}
|
|
1501
|
+
});
|
|
1502
|
+
}
|
|
1503
|
+
setEnabledTrack(trackID, enabled) {
|
|
1504
|
+
return __async(this, null, function* () {
|
|
1505
|
+
var _a;
|
|
1506
|
+
const alreadyInSameState = ((_a = this.store.getState().tracks[trackID]) == null ? void 0 : _a.enabled) === enabled;
|
|
1507
|
+
if (alreadyInSameState) {
|
|
1508
|
+
this.logPossibleInconsistency(`local track[${trackID}] enabled state - ${enabled}`);
|
|
1509
|
+
return;
|
|
1510
|
+
}
|
|
1511
|
+
this.setState((store) => {
|
|
1512
|
+
if (!store.tracks[trackID]) {
|
|
1513
|
+
this.logPossibleInconsistency("track id not found for setEnabled");
|
|
1514
|
+
} else {
|
|
1515
|
+
store.tracks[trackID].displayEnabled = enabled;
|
|
1516
|
+
}
|
|
1517
|
+
}, "displayEnabled");
|
|
1518
|
+
try {
|
|
1519
|
+
yield this.setEnabledSDKTrack(trackID, enabled);
|
|
1520
|
+
this.syncRoomState("setEnabled");
|
|
1521
|
+
} catch (err) {
|
|
1522
|
+
this.setState((store) => {
|
|
1523
|
+
store.tracks[trackID].displayEnabled = !enabled;
|
|
1524
|
+
}, "rollbackDisplayEnabled");
|
|
1525
|
+
this.hmsNotifications.sendError(SDKToHMS.convertException(err));
|
|
1526
|
+
throw err;
|
|
1527
|
+
}
|
|
1528
|
+
const type = enabled ? import_hms_video.HMSTrackUpdate.TRACK_UNMUTED : import_hms_video.HMSTrackUpdate.TRACK_MUTED;
|
|
1529
|
+
this.hmsNotifications.sendTrackUpdate(type, trackID);
|
|
1530
|
+
});
|
|
1531
|
+
}
|
|
1532
|
+
setAudioSettings(settings) {
|
|
1533
|
+
return __async(this, null, function* () {
|
|
1534
|
+
const trackID = this.store.getState(selectLocalAudioTrackID);
|
|
1535
|
+
if (trackID) {
|
|
1536
|
+
yield this.setSDKLocalAudioTrackSettings(trackID, settings);
|
|
1537
|
+
this.syncRoomState("setAudioSettings");
|
|
1538
|
+
}
|
|
1539
|
+
});
|
|
1540
|
+
}
|
|
1541
|
+
setVideoSettings(settings) {
|
|
1542
|
+
return __async(this, null, function* () {
|
|
1543
|
+
const trackID = this.store.getState(selectLocalVideoTrackID);
|
|
1544
|
+
if (trackID) {
|
|
1545
|
+
yield this.setSDKLocalVideoTrackSettings(trackID, settings);
|
|
1546
|
+
this.syncRoomState("setVideoSettings");
|
|
1547
|
+
}
|
|
1548
|
+
});
|
|
1549
|
+
}
|
|
1550
|
+
sendMessage(message) {
|
|
1551
|
+
this.sendBroadcastMessage(message);
|
|
1552
|
+
}
|
|
1553
|
+
sendBroadcastMessage(message, type) {
|
|
1554
|
+
return __async(this, null, function* () {
|
|
1555
|
+
const sdkMessage = yield this.sdk.sendBroadcastMessage(message, type);
|
|
1556
|
+
this.updateMessageInStore(sdkMessage, { message, type });
|
|
1557
|
+
});
|
|
1558
|
+
}
|
|
1559
|
+
sendGroupMessage(message, roles, type) {
|
|
1560
|
+
return __async(this, null, function* () {
|
|
1561
|
+
const storeRoles = this.store.getState(selectRolesMap);
|
|
1562
|
+
const hmsRoles = roles.map((roleName) => {
|
|
1563
|
+
return storeRoles[roleName];
|
|
1564
|
+
});
|
|
1565
|
+
const sdkMessage = yield this.sdk.sendGroupMessage(message, hmsRoles, type);
|
|
1566
|
+
this.updateMessageInStore(sdkMessage, { message, recipientRoles: roles, type });
|
|
1567
|
+
});
|
|
1568
|
+
}
|
|
1569
|
+
sendDirectMessage(message, peerID, type) {
|
|
1570
|
+
return __async(this, null, function* () {
|
|
1571
|
+
const hmsPeer = this.hmsSDKPeers[peerID];
|
|
1572
|
+
const sdkMessage = yield this.sdk.sendDirectMessage(message, hmsPeer, type);
|
|
1573
|
+
this.updateMessageInStore(sdkMessage, { message, recipientPeer: hmsPeer.peerId, type });
|
|
1574
|
+
});
|
|
1575
|
+
}
|
|
1576
|
+
updateMessageInStore(sdkMessage, messageInput) {
|
|
1577
|
+
if (!sdkMessage) {
|
|
1578
|
+
HMSLogger.w("sendMessage", "Failed to send message", messageInput);
|
|
1579
|
+
throw Error(`sendMessage Failed - ${JSON.stringify(messageInput)}`);
|
|
1580
|
+
}
|
|
1581
|
+
const hmsMessage = SDKToHMS.convertMessage(sdkMessage);
|
|
1582
|
+
hmsMessage.read = true;
|
|
1583
|
+
hmsMessage.senderName = "You";
|
|
1584
|
+
hmsMessage.ignored = this.ignoredMessageTypes.includes(hmsMessage.type);
|
|
1585
|
+
this.putMessageInStore(hmsMessage);
|
|
1586
|
+
return hmsMessage;
|
|
1587
|
+
}
|
|
1588
|
+
setMessageRead(readStatus, messageId) {
|
|
1589
|
+
this.setState((store) => {
|
|
1590
|
+
if (messageId) {
|
|
1591
|
+
if (!store.messages.byID[messageId]) {
|
|
1592
|
+
this.logPossibleInconsistency("no message with id is found");
|
|
1593
|
+
} else {
|
|
1594
|
+
store.messages.byID[messageId].read = readStatus;
|
|
1595
|
+
}
|
|
1596
|
+
} else {
|
|
1597
|
+
store.messages.allIDs.forEach((id) => {
|
|
1598
|
+
store.messages.byID[id].read = readStatus;
|
|
1599
|
+
});
|
|
1600
|
+
}
|
|
1601
|
+
}, "setMessageRead");
|
|
1602
|
+
}
|
|
1603
|
+
attachVideo(trackID, videoElement) {
|
|
1604
|
+
return __async(this, null, function* () {
|
|
1605
|
+
if (this.localAndVideoUnmuting(trackID)) {
|
|
1606
|
+
return new Promise((resolve) => {
|
|
1607
|
+
const unsub = this.store.subscribe((enabled) => __async(this, null, function* () {
|
|
1608
|
+
if (enabled) {
|
|
1609
|
+
yield this.attachVideoInternal(trackID, videoElement);
|
|
1610
|
+
unsub();
|
|
1611
|
+
resolve();
|
|
1612
|
+
}
|
|
1613
|
+
}), selectIsLocalVideoEnabled);
|
|
1614
|
+
});
|
|
1615
|
+
} else {
|
|
1616
|
+
yield this.attachVideoInternal(trackID, videoElement);
|
|
1617
|
+
}
|
|
1618
|
+
});
|
|
1619
|
+
}
|
|
1620
|
+
detachVideo(trackID, videoElement) {
|
|
1621
|
+
return __async(this, null, function* () {
|
|
1622
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
1623
|
+
if (sdkTrack && sdkTrack.type === "video") {
|
|
1624
|
+
yield sdkTrack.removeSink(videoElement);
|
|
1625
|
+
this.updateVideoLayer(trackID, "detachVideo");
|
|
1626
|
+
} else {
|
|
1627
|
+
this.logPossibleInconsistency("no video track found to remove sink");
|
|
1628
|
+
}
|
|
1629
|
+
});
|
|
1630
|
+
}
|
|
1631
|
+
addPluginToVideoTrack(plugin, pluginFrameRate) {
|
|
1632
|
+
return __async(this, null, function* () {
|
|
1633
|
+
return this.addRemoveVideoPlugin(plugin, "add", pluginFrameRate);
|
|
1634
|
+
});
|
|
1635
|
+
}
|
|
1636
|
+
addPluginToAudioTrack(plugin) {
|
|
1637
|
+
return __async(this, null, function* () {
|
|
1638
|
+
return this.addRemoveAudioPlugin(plugin, "add");
|
|
1639
|
+
});
|
|
1640
|
+
}
|
|
1641
|
+
validateVideoPluginSupport(plugin) {
|
|
1642
|
+
let result = {};
|
|
1643
|
+
result.isSupported = false;
|
|
1644
|
+
if (!plugin) {
|
|
1645
|
+
HMSLogger.w("no plugin passed in for checking support");
|
|
1646
|
+
result.errMsg = "no plugin passed in for checking support";
|
|
1647
|
+
return result;
|
|
1648
|
+
}
|
|
1649
|
+
const trackID = this.store.getState(selectLocalVideoTrackID);
|
|
1650
|
+
if (trackID) {
|
|
1651
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
1652
|
+
if (sdkTrack) {
|
|
1653
|
+
result = sdkTrack.validatePlugin(plugin);
|
|
1654
|
+
} else {
|
|
1655
|
+
HMSLogger.w(`track ${trackID} not present, unable to validate plugin`);
|
|
1656
|
+
result.errMsg = `track ${trackID} not present, unable to validate plugin`;
|
|
1657
|
+
}
|
|
1658
|
+
}
|
|
1659
|
+
return result;
|
|
1660
|
+
}
|
|
1661
|
+
validateAudioPluginSupport(plugin) {
|
|
1662
|
+
let result = {};
|
|
1663
|
+
result.isSupported = false;
|
|
1664
|
+
if (!plugin) {
|
|
1665
|
+
HMSLogger.w('no plugin passed in for checking support"');
|
|
1666
|
+
result.errMsg = 'no plugin passed in for checking support"';
|
|
1667
|
+
return result;
|
|
1668
|
+
}
|
|
1669
|
+
const trackID = this.store.getState(selectLocalAudioTrackID);
|
|
1670
|
+
if (trackID) {
|
|
1671
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
1672
|
+
if (sdkTrack) {
|
|
1673
|
+
result = sdkTrack.validatePlugin(plugin);
|
|
1674
|
+
} else {
|
|
1675
|
+
HMSLogger.w(`track ${trackID} not present, unable to validate plugin`);
|
|
1676
|
+
result.errMsg = `track ${trackID} not present, unable to validate plugin`;
|
|
1677
|
+
}
|
|
1678
|
+
}
|
|
1679
|
+
return result;
|
|
1680
|
+
}
|
|
1681
|
+
removePluginFromVideoTrack(plugin) {
|
|
1682
|
+
return __async(this, null, function* () {
|
|
1683
|
+
return this.addRemoveVideoPlugin(plugin, "remove");
|
|
1684
|
+
});
|
|
1685
|
+
}
|
|
1686
|
+
removePluginFromAudioTrack(plugin) {
|
|
1687
|
+
return __async(this, null, function* () {
|
|
1688
|
+
return this.addRemoveAudioPlugin(plugin, "remove");
|
|
1689
|
+
});
|
|
1690
|
+
}
|
|
1691
|
+
changeRole(forPeerId, toRole, force = false) {
|
|
1692
|
+
return __async(this, null, function* () {
|
|
1693
|
+
const peer = this.hmsSDKPeers[forPeerId];
|
|
1694
|
+
if (!peer) {
|
|
1695
|
+
this.logPossibleInconsistency(`Unknown peer ID given ${forPeerId} for changerole`);
|
|
1696
|
+
return;
|
|
1697
|
+
}
|
|
1698
|
+
yield this.sdk.changeRole(peer, toRole, force);
|
|
1699
|
+
});
|
|
1700
|
+
}
|
|
1701
|
+
acceptChangeRole(request) {
|
|
1702
|
+
return __async(this, null, function* () {
|
|
1703
|
+
const sdkPeer = request.requestedBy ? this.hmsSDKPeers[request.requestedBy.id] : void 0;
|
|
1704
|
+
if (!sdkPeer) {
|
|
1705
|
+
HMSLogger.w(`peer for which role change is requested no longer available - ${request.requestedBy}`);
|
|
1706
|
+
}
|
|
1707
|
+
const sdkRequest = {
|
|
1708
|
+
requestedBy: sdkPeer,
|
|
1709
|
+
role: request.role,
|
|
1710
|
+
token: request.token
|
|
1711
|
+
};
|
|
1712
|
+
yield this.sdk.acceptChangeRole(sdkRequest);
|
|
1713
|
+
this.removeRoleChangeRequest(request);
|
|
1714
|
+
});
|
|
1715
|
+
}
|
|
1716
|
+
rejectChangeRole(request) {
|
|
1717
|
+
this.removeRoleChangeRequest(request);
|
|
1718
|
+
}
|
|
1719
|
+
endRoom(lock, reason) {
|
|
1720
|
+
return __async(this, null, function* () {
|
|
1721
|
+
const permissions = this.store.getState(selectPermissions);
|
|
1722
|
+
if (!(permissions == null ? void 0 : permissions.endRoom)) {
|
|
1723
|
+
HMSLogger.w("You are not allowed to perform this action - endRoom");
|
|
1724
|
+
return;
|
|
1725
|
+
}
|
|
1726
|
+
const currentRoomState = this.store.getState(selectRoomState);
|
|
1727
|
+
this.setState((store) => {
|
|
1728
|
+
store.room.roomState = HMSRoomState.Disconnecting;
|
|
1729
|
+
}, "endingRoom");
|
|
1730
|
+
try {
|
|
1731
|
+
yield this.sdk.endRoom(lock, reason);
|
|
1732
|
+
this.resetState("endRoom");
|
|
1733
|
+
} catch (err) {
|
|
1734
|
+
HMSLogger.e("error in ending room - ", err);
|
|
1735
|
+
this.setState((store) => {
|
|
1736
|
+
store.room.roomState = currentRoomState;
|
|
1737
|
+
}, "revertEndRoom");
|
|
1738
|
+
}
|
|
1739
|
+
});
|
|
1740
|
+
}
|
|
1741
|
+
removePeer(peerID, reason) {
|
|
1742
|
+
return __async(this, null, function* () {
|
|
1743
|
+
const peer = this.hmsSDKPeers[peerID];
|
|
1744
|
+
if (peer && !peer.isLocal) {
|
|
1745
|
+
yield this.sdk.removePeer(peer, reason);
|
|
1746
|
+
} else {
|
|
1747
|
+
this.logPossibleInconsistency(`No remote peer found for peerID - ${peerID}`);
|
|
1748
|
+
return;
|
|
1749
|
+
}
|
|
1750
|
+
});
|
|
1751
|
+
}
|
|
1752
|
+
startRTMPOrRecording(params) {
|
|
1753
|
+
return __async(this, null, function* () {
|
|
1754
|
+
yield this.sdk.startRTMPOrRecording(params);
|
|
1755
|
+
});
|
|
1756
|
+
}
|
|
1757
|
+
stopRTMPAndRecording() {
|
|
1758
|
+
return __async(this, null, function* () {
|
|
1759
|
+
yield this.sdk.stopRTMPAndRecording();
|
|
1760
|
+
});
|
|
1761
|
+
}
|
|
1762
|
+
startHLSStreaming(params) {
|
|
1763
|
+
return __async(this, null, function* () {
|
|
1764
|
+
yield this.sdk.startHLSStreaming(params);
|
|
1765
|
+
});
|
|
1766
|
+
}
|
|
1767
|
+
stopHLSStreaming(params) {
|
|
1768
|
+
return __async(this, null, function* () {
|
|
1769
|
+
yield this.sdk.stopHLSStreaming(params);
|
|
1770
|
+
});
|
|
1771
|
+
}
|
|
1772
|
+
changeName(name) {
|
|
1773
|
+
return __async(this, null, function* () {
|
|
1774
|
+
yield this.sdk.changeName(name);
|
|
1775
|
+
});
|
|
1776
|
+
}
|
|
1777
|
+
changeMetadata(metadata) {
|
|
1778
|
+
return __async(this, null, function* () {
|
|
1779
|
+
if (typeof metadata !== "string") {
|
|
1780
|
+
metadata = JSON.stringify(metadata);
|
|
1781
|
+
}
|
|
1782
|
+
yield this.sdk.changeMetadata(metadata);
|
|
1783
|
+
});
|
|
1784
|
+
}
|
|
1785
|
+
setRemoteTrackEnabled(trackID, enabled) {
|
|
1786
|
+
return __async(this, null, function* () {
|
|
1787
|
+
if (typeof trackID === "string") {
|
|
1788
|
+
const track = this.hmsSDKTracks[trackID];
|
|
1789
|
+
if (track && isRemoteTrack(track)) {
|
|
1790
|
+
yield this.sdk.changeTrackState(track, enabled);
|
|
1791
|
+
} else {
|
|
1792
|
+
this.logPossibleInconsistency(`No remote track with ID ${trackID} found for change track state`);
|
|
1793
|
+
}
|
|
1794
|
+
} else if (Array.isArray(trackID)) {
|
|
1795
|
+
trackID.forEach((id) => this.setRemoteTrackEnabled(id, enabled));
|
|
1796
|
+
}
|
|
1797
|
+
});
|
|
1798
|
+
}
|
|
1799
|
+
setRemoteTracksEnabled(params) {
|
|
1800
|
+
return __async(this, null, function* () {
|
|
1801
|
+
const sdkRequest = {
|
|
1802
|
+
enabled: params.enabled,
|
|
1803
|
+
type: params.type,
|
|
1804
|
+
source: params.source
|
|
1805
|
+
};
|
|
1806
|
+
if (params.roles) {
|
|
1807
|
+
const rolesMap = this.store.getState(selectRolesMap);
|
|
1808
|
+
sdkRequest.roles = params.roles.map((role) => rolesMap[role]);
|
|
1809
|
+
}
|
|
1810
|
+
yield this.sdk.changeMultiTrackState(sdkRequest);
|
|
1811
|
+
});
|
|
1812
|
+
}
|
|
1813
|
+
setLogLevel(level) {
|
|
1814
|
+
HMSLogger.level = level;
|
|
1815
|
+
this.sdk.setLogLevel(level);
|
|
1816
|
+
}
|
|
1817
|
+
ignoreMessageTypes(msgTypes, replace = false) {
|
|
1818
|
+
if (replace) {
|
|
1819
|
+
this.ignoredMessageTypes = msgTypes;
|
|
1820
|
+
} else {
|
|
1821
|
+
for (const msgType of msgTypes) {
|
|
1822
|
+
if (!this.ignoredMessageTypes.includes(msgType)) {
|
|
1823
|
+
this.ignoredMessageTypes.push(msgType);
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
}
|
|
1827
|
+
}
|
|
1828
|
+
resetState(reason = "resetState") {
|
|
1829
|
+
this.setState((store) => {
|
|
1830
|
+
Object.assign(store, createDefaultStoreState());
|
|
1831
|
+
}, reason);
|
|
1832
|
+
this.isRoomJoinCalled = false;
|
|
1833
|
+
this.hmsSDKTracks = {};
|
|
1834
|
+
HMSLogger.cleanUp();
|
|
1835
|
+
}
|
|
1836
|
+
sdkJoinWithListeners(config) {
|
|
1837
|
+
this.sdk.join(config, {
|
|
1838
|
+
onJoin: this.onJoin.bind(this),
|
|
1839
|
+
onRoomUpdate: this.onRoomUpdate.bind(this),
|
|
1840
|
+
onPeerUpdate: this.onPeerUpdate.bind(this),
|
|
1841
|
+
onTrackUpdate: this.onTrackUpdate.bind(this),
|
|
1842
|
+
onMessageReceived: this.onMessageReceived.bind(this),
|
|
1843
|
+
onError: this.onError.bind(this),
|
|
1844
|
+
onReconnected: this.onReconnected.bind(this),
|
|
1845
|
+
onReconnecting: this.onReconnecting.bind(this),
|
|
1846
|
+
onRoleChangeRequest: this.onRoleChangeRequest.bind(this),
|
|
1847
|
+
onRoleUpdate: this.onRoleUpdate.bind(this),
|
|
1848
|
+
onDeviceChange: this.onDeviceChange.bind(this),
|
|
1849
|
+
onChangeTrackStateRequest: this.onChangeTrackStateRequest.bind(this),
|
|
1850
|
+
onChangeMultiTrackStateRequest: this.onChangeMultiTrackStateRequest.bind(this),
|
|
1851
|
+
onRemovedFromRoom: this.onRemovedFromRoom.bind(this),
|
|
1852
|
+
onNetworkQuality: this.onNetworkQuality.bind(this)
|
|
1853
|
+
});
|
|
1854
|
+
this.sdk.addAudioListener({
|
|
1855
|
+
onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this)
|
|
1856
|
+
});
|
|
1857
|
+
this.sdk.addConnectionQualityListener({
|
|
1858
|
+
onConnectionQualityUpdate: this.onConnectionQualityUpdate.bind(this)
|
|
1859
|
+
});
|
|
1860
|
+
}
|
|
1861
|
+
onRemovedFromRoom(request) {
|
|
1862
|
+
var _a;
|
|
1863
|
+
const requestedBy = this.store.getState(selectPeerByID((_a = request.requestedBy) == null ? void 0 : _a.peerId));
|
|
1864
|
+
this.hmsNotifications.sendLeaveRoom(__spreadProps(__spreadValues({}, request), {
|
|
1865
|
+
requestedBy: requestedBy || void 0
|
|
1866
|
+
}));
|
|
1867
|
+
const action = request.roomEnded || !requestedBy ? "roomEnded" : "removedFromRoom";
|
|
1868
|
+
HMSLogger.i(`resetting state after peer removed ${action}`, request);
|
|
1869
|
+
this.resetState(action);
|
|
1870
|
+
}
|
|
1871
|
+
onDeviceChange(event) {
|
|
1872
|
+
const devices = event.devices;
|
|
1873
|
+
if (!devices) {
|
|
1874
|
+
return;
|
|
1875
|
+
}
|
|
1876
|
+
const localPeer = this.store.getState(selectLocalPeer);
|
|
1877
|
+
this.setState((store) => {
|
|
1878
|
+
if (!areArraysEqual(store.devices.audioInput, devices.audioInput)) {
|
|
1879
|
+
store.devices.audioInput = devices.audioInput;
|
|
1880
|
+
}
|
|
1881
|
+
if (!areArraysEqual(store.devices.videoInput, devices.videoInput)) {
|
|
1882
|
+
store.devices.videoInput = devices.videoInput;
|
|
1883
|
+
}
|
|
1884
|
+
if (!areArraysEqual(store.devices.audioOutput, devices.audioOutput)) {
|
|
1885
|
+
store.devices.audioOutput = devices.audioOutput;
|
|
1886
|
+
}
|
|
1887
|
+
if (this.hmsSDKPeers[localPeer == null ? void 0 : localPeer.id]) {
|
|
1888
|
+
Object.assign(store.settings, this.getMediaSettings(this.hmsSDKPeers[localPeer == null ? void 0 : localPeer.id]));
|
|
1889
|
+
}
|
|
1890
|
+
}, "deviceChange");
|
|
1891
|
+
if (event.selection) {
|
|
1892
|
+
const notification = SDKToHMS.convertDeviceChangeUpdate(event);
|
|
1893
|
+
this.hmsNotifications.sendDeviceChange(notification);
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
|
+
sdkPreviewWithListeners(config) {
|
|
1897
|
+
return __async(this, null, function* () {
|
|
1898
|
+
yield this.sdk.preview(config, {
|
|
1899
|
+
onPreview: this.onPreview.bind(this),
|
|
1900
|
+
onError: this.onError.bind(this),
|
|
1901
|
+
onReconnected: this.onReconnected.bind(this),
|
|
1902
|
+
onReconnecting: this.onReconnecting.bind(this),
|
|
1903
|
+
onDeviceChange: this.onDeviceChange.bind(this),
|
|
1904
|
+
onRoomUpdate: this.onRoomUpdate.bind(this),
|
|
1905
|
+
onPeerUpdate: this.onPeerUpdate.bind(this),
|
|
1906
|
+
onNetworkQuality: this.onNetworkQuality.bind(this)
|
|
1907
|
+
});
|
|
1908
|
+
this.sdk.addAudioListener({
|
|
1909
|
+
onAudioLevelUpdate: this.onAudioLevelUpdate.bind(this)
|
|
1910
|
+
});
|
|
1911
|
+
});
|
|
1912
|
+
}
|
|
1913
|
+
onNetworkQuality(quality) {
|
|
1914
|
+
this.setState((store) => {
|
|
1915
|
+
var _a;
|
|
1916
|
+
const peerId = store.room.localPeer || ((_a = this.sdk.getLocalPeer()) == null ? void 0 : _a.peerId);
|
|
1917
|
+
if (peerId) {
|
|
1918
|
+
store.connectionQualities[peerId] = { peerID: peerId, downlinkQuality: quality };
|
|
1919
|
+
}
|
|
1920
|
+
}, "ConnectionQuality");
|
|
1921
|
+
}
|
|
1922
|
+
startScreenShare(config) {
|
|
1923
|
+
return __async(this, null, function* () {
|
|
1924
|
+
const isScreenShared = this.store.getState(selectIsLocalScreenShared);
|
|
1925
|
+
if (!isScreenShared) {
|
|
1926
|
+
yield this.sdk.startScreenShare(() => this.syncRoomState("screenshareStopped"), config);
|
|
1927
|
+
this.syncRoomState("startScreenShare");
|
|
1928
|
+
} else {
|
|
1929
|
+
this.logPossibleInconsistency("start screenshare is called while it's on");
|
|
1930
|
+
}
|
|
1931
|
+
});
|
|
1932
|
+
}
|
|
1933
|
+
stopScreenShare() {
|
|
1934
|
+
return __async(this, null, function* () {
|
|
1935
|
+
const isScreenShared = this.store.getState(selectIsLocalScreenShared);
|
|
1936
|
+
if (isScreenShared) {
|
|
1937
|
+
yield this.sdk.stopScreenShare();
|
|
1938
|
+
this.syncRoomState("stopScreenShare");
|
|
1939
|
+
} else {
|
|
1940
|
+
this.logPossibleInconsistency("stop screenshare is called while it's not on");
|
|
1941
|
+
}
|
|
1942
|
+
});
|
|
1943
|
+
}
|
|
1944
|
+
attachVideoInternal(trackID, videoElement) {
|
|
1945
|
+
return __async(this, null, function* () {
|
|
1946
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
1947
|
+
if (sdkTrack && sdkTrack.type === "video") {
|
|
1948
|
+
yield sdkTrack.addSink(videoElement);
|
|
1949
|
+
this.updateVideoLayer(trackID, "attachVideo");
|
|
1950
|
+
} else {
|
|
1951
|
+
this.logPossibleInconsistency("no video track found to add sink");
|
|
1952
|
+
}
|
|
1953
|
+
});
|
|
1954
|
+
}
|
|
1955
|
+
syncRoomState(action) {
|
|
1956
|
+
HMSLogger.time(`store-sync-${action}`);
|
|
1957
|
+
const newHmsPeers = {};
|
|
1958
|
+
const newHmsPeerIDs = [];
|
|
1959
|
+
const newHmsTracks = {};
|
|
1960
|
+
const newHmsSDkTracks = {};
|
|
1961
|
+
const newMediaSettings = {};
|
|
1962
|
+
const sdkPeers = this.sdk.getPeers();
|
|
1963
|
+
for (const sdkPeer of sdkPeers) {
|
|
1964
|
+
const hmsPeer = SDKToHMS.convertPeer(sdkPeer);
|
|
1965
|
+
newHmsPeers[hmsPeer.id] = hmsPeer;
|
|
1966
|
+
newHmsPeerIDs.push(hmsPeer.id);
|
|
1967
|
+
this.hmsSDKPeers[hmsPeer.id] = sdkPeer;
|
|
1968
|
+
const sdkTracks = [sdkPeer.audioTrack, sdkPeer.videoTrack, ...sdkPeer.auxiliaryTracks];
|
|
1969
|
+
for (const sdkTrack of sdkTracks) {
|
|
1970
|
+
if (!sdkTrack) {
|
|
1971
|
+
continue;
|
|
1972
|
+
}
|
|
1973
|
+
const hmsTrack = SDKToHMS.convertTrack(sdkTrack);
|
|
1974
|
+
newHmsTracks[hmsTrack.id] = hmsTrack;
|
|
1975
|
+
newHmsSDkTracks[sdkTrack.trackId] = sdkTrack;
|
|
1976
|
+
}
|
|
1977
|
+
if (hmsPeer.isLocal) {
|
|
1978
|
+
Object.assign(newMediaSettings, this.getMediaSettings(sdkPeer));
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
const recording = this.sdk.getRecordingState();
|
|
1982
|
+
const rtmp = this.sdk.getRTMPState();
|
|
1983
|
+
const hls = this.sdk.getHLSState();
|
|
1984
|
+
this.setState((draftStore) => {
|
|
1985
|
+
draftStore.room.peers = newHmsPeerIDs;
|
|
1986
|
+
const draftPeers = draftStore.peers;
|
|
1987
|
+
const draftTracks = draftStore.tracks;
|
|
1988
|
+
mergeNewPeersInDraft(draftPeers, newHmsPeers);
|
|
1989
|
+
mergeNewTracksInDraft(draftTracks, newHmsTracks);
|
|
1990
|
+
Object.assign(draftStore.settings, newMediaSettings);
|
|
1991
|
+
this.hmsSDKTracks = newHmsSDkTracks;
|
|
1992
|
+
Object.assign(draftStore.roles, SDKToHMS.convertRoles(this.sdk.getRoles()));
|
|
1993
|
+
Object.assign(draftStore.playlist, SDKToHMS.convertPlaylist(this.sdk.getPlaylistManager()));
|
|
1994
|
+
Object.assign(draftStore.room, SDKToHMS.convertRecordingStreamingState(recording, rtmp, hls));
|
|
1995
|
+
}, action);
|
|
1996
|
+
HMSLogger.timeEnd(`store-sync-${action}`);
|
|
1997
|
+
}
|
|
1998
|
+
onPreview(sdkRoom) {
|
|
1999
|
+
this.setState((store) => {
|
|
2000
|
+
Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));
|
|
2001
|
+
store.room.roomState = HMSRoomState.Preview;
|
|
2002
|
+
}, "previewStart");
|
|
2003
|
+
this.syncRoomState("previewSync");
|
|
2004
|
+
}
|
|
2005
|
+
onJoin(sdkRoom) {
|
|
2006
|
+
const playlistManager = this.sdk.getPlaylistManager();
|
|
2007
|
+
this.audioPlaylist = new HMSPlaylist(playlistManager, HMSPlaylistType.audio, this.syncPlaylistState.bind(this), this.store);
|
|
2008
|
+
this.videoPlaylist = new HMSPlaylist(playlistManager, HMSPlaylistType.video, this.syncRoomState.bind(this), this.store);
|
|
2009
|
+
this.syncRoomState("joinSync");
|
|
2010
|
+
this.setState((store) => {
|
|
2011
|
+
Object.assign(store.room, SDKToHMS.convertRoom(sdkRoom));
|
|
2012
|
+
store.room.isConnected = true;
|
|
2013
|
+
store.room.roomState = HMSRoomState.Connected;
|
|
2014
|
+
}, "joined");
|
|
2015
|
+
playlistManager.onProgress(this.setProgress);
|
|
2016
|
+
playlistManager.onNewTrackStart((item) => {
|
|
2017
|
+
this.syncPlaylistState(`${item.type}PlaylistUpdate`);
|
|
2018
|
+
});
|
|
2019
|
+
playlistManager.onPlaylistEnded((type) => {
|
|
2020
|
+
this.syncPlaylistState(`${type}PlaylistEnded`);
|
|
2021
|
+
});
|
|
2022
|
+
playlistManager.onCurrentTrackEnded((item) => {
|
|
2023
|
+
this.hmsNotifications.sendPlaylistTrackEnded(SDKToHMS.convertPlaylistItem(playlistManager, item));
|
|
2024
|
+
this.syncPlaylistState(`${item.type}PlaylistItemEnded`);
|
|
2025
|
+
});
|
|
2026
|
+
}
|
|
2027
|
+
onRoomUpdate(type, room) {
|
|
2028
|
+
this.setState((store) => {
|
|
2029
|
+
Object.assign(store.room, SDKToHMS.convertRoom(room));
|
|
2030
|
+
}, "RoomUpdate");
|
|
2031
|
+
}
|
|
2032
|
+
onPeerUpdate(type, sdkPeer) {
|
|
2033
|
+
if ([import_hms_video.HMSPeerUpdate.BECAME_DOMINANT_SPEAKER, import_hms_video.HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER].includes(type)) {
|
|
2034
|
+
return;
|
|
2035
|
+
}
|
|
2036
|
+
if (Array.isArray(sdkPeer)) {
|
|
2037
|
+
this.syncRoomState("peersJoined");
|
|
2038
|
+
const hmsPeers = [];
|
|
2039
|
+
for (const peer of sdkPeer) {
|
|
2040
|
+
const hmsPeer = this.store.getState(selectPeerByID(peer.peerId));
|
|
2041
|
+
if (hmsPeer) {
|
|
2042
|
+
hmsPeers.push(hmsPeer);
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
this.hmsNotifications.sendPeerList(hmsPeers);
|
|
2046
|
+
return;
|
|
2047
|
+
}
|
|
2048
|
+
this.sendPeerUpdateNotification(type, sdkPeer);
|
|
2049
|
+
}
|
|
2050
|
+
onTrackUpdate(type, track, peer) {
|
|
2051
|
+
if (type === import_hms_video.HMSTrackUpdate.TRACK_REMOVED) {
|
|
2052
|
+
this.hmsNotifications.sendTrackUpdate(type, track.trackId);
|
|
2053
|
+
this.handleTrackRemove(track, peer);
|
|
2054
|
+
} else {
|
|
2055
|
+
const actionName = type === import_hms_video.HMSTrackUpdate.TRACK_ADDED ? "trackAdded" : "trackUpdate";
|
|
2056
|
+
this.syncRoomState(actionName);
|
|
2057
|
+
this.hmsNotifications.sendTrackUpdate(type, track.trackId);
|
|
2058
|
+
}
|
|
2059
|
+
}
|
|
2060
|
+
onMessageReceived(sdkMessage) {
|
|
2061
|
+
const hmsMessage = SDKToHMS.convertMessage(sdkMessage);
|
|
2062
|
+
hmsMessage.read = false;
|
|
2063
|
+
hmsMessage.ignored = this.ignoredMessageTypes.includes(hmsMessage.type);
|
|
2064
|
+
this.putMessageInStore(hmsMessage);
|
|
2065
|
+
this.hmsNotifications.sendMessageReceived(hmsMessage);
|
|
2066
|
+
}
|
|
2067
|
+
putMessageInStore(hmsMessage) {
|
|
2068
|
+
if (hmsMessage.ignored) {
|
|
2069
|
+
return;
|
|
2070
|
+
}
|
|
2071
|
+
this.setState((store) => {
|
|
2072
|
+
hmsMessage.id = String(this.store.getState(selectHMSMessagesCount) + 1);
|
|
2073
|
+
store.messages.byID[hmsMessage.id] = hmsMessage;
|
|
2074
|
+
store.messages.allIDs.push(hmsMessage.id);
|
|
2075
|
+
}, "newMessage");
|
|
2076
|
+
}
|
|
2077
|
+
onAudioLevelUpdate(sdkSpeakers) {
|
|
2078
|
+
this.setState((store) => {
|
|
2079
|
+
const trackIDAudioLevelMap = {};
|
|
2080
|
+
sdkSpeakers.forEach((sdkSpeaker) => {
|
|
2081
|
+
if (!sdkSpeaker.track || !sdkSpeaker.peer) {
|
|
2082
|
+
return;
|
|
2083
|
+
}
|
|
2084
|
+
const trackID = sdkSpeaker.track.trackId;
|
|
2085
|
+
trackIDAudioLevelMap[trackID] = sdkSpeaker.audioLevel;
|
|
2086
|
+
if (!store.speakers[trackID]) {
|
|
2087
|
+
store.speakers[trackID] = {
|
|
2088
|
+
audioLevel: sdkSpeaker.audioLevel,
|
|
2089
|
+
peerID: sdkSpeaker.peer.peerId,
|
|
2090
|
+
trackID
|
|
2091
|
+
};
|
|
2092
|
+
}
|
|
2093
|
+
});
|
|
2094
|
+
const speakerEntries = Object.entries(store.speakers);
|
|
2095
|
+
for (const [trackID, speaker] of speakerEntries) {
|
|
2096
|
+
speaker.audioLevel = trackIDAudioLevelMap[trackID] || 0;
|
|
2097
|
+
if (speaker.audioLevel === 0) {
|
|
2098
|
+
delete store.speakers[trackID];
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
}, "audioLevel");
|
|
2102
|
+
}
|
|
2103
|
+
onConnectionQualityUpdate(newQualities) {
|
|
2104
|
+
this.setState((store) => {
|
|
2105
|
+
const currentPeerIDs = new Set();
|
|
2106
|
+
newQualities.forEach((sdkUpdate) => {
|
|
2107
|
+
const peerID = sdkUpdate.peerID;
|
|
2108
|
+
if (!peerID) {
|
|
2109
|
+
return;
|
|
2110
|
+
}
|
|
2111
|
+
currentPeerIDs.add(peerID);
|
|
2112
|
+
if (!store.connectionQualities[peerID]) {
|
|
2113
|
+
store.connectionQualities[peerID] = sdkUpdate;
|
|
2114
|
+
} else {
|
|
2115
|
+
Object.assign(store.connectionQualities[peerID], sdkUpdate);
|
|
2116
|
+
}
|
|
2117
|
+
});
|
|
2118
|
+
const peerIDsStored = Object.keys(store.connectionQualities);
|
|
2119
|
+
for (const storedPeerID of peerIDsStored) {
|
|
2120
|
+
if (!currentPeerIDs.has(storedPeerID)) {
|
|
2121
|
+
delete store.connectionQualities[storedPeerID];
|
|
2122
|
+
}
|
|
2123
|
+
}
|
|
2124
|
+
}, "connectionQuality");
|
|
2125
|
+
}
|
|
2126
|
+
onChangeTrackStateRequest(request) {
|
|
2127
|
+
var _a;
|
|
2128
|
+
const requestedBy = this.store.getState(selectPeerByID((_a = request.requestedBy) == null ? void 0 : _a.peerId));
|
|
2129
|
+
const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(request.track);
|
|
2130
|
+
const track = this.store.getState(selectTrackByID(storeTrackID));
|
|
2131
|
+
if (!track) {
|
|
2132
|
+
return this.logPossibleInconsistency(`Not found track for which track state change was requested, ${request.track}`);
|
|
2133
|
+
}
|
|
2134
|
+
if (!request.enabled) {
|
|
2135
|
+
this.syncRoomState("changeTrackStateRequest");
|
|
2136
|
+
}
|
|
2137
|
+
this.hmsNotifications.sendChangeTrackStateRequest({
|
|
2138
|
+
requestedBy: requestedBy || void 0,
|
|
2139
|
+
track,
|
|
2140
|
+
enabled: request.enabled
|
|
2141
|
+
});
|
|
2142
|
+
}
|
|
2143
|
+
onChangeMultiTrackStateRequest(request) {
|
|
2144
|
+
var _a;
|
|
2145
|
+
const requestedBy = this.store.getState(selectPeerByID((_a = request.requestedBy) == null ? void 0 : _a.peerId));
|
|
2146
|
+
if (!request.enabled) {
|
|
2147
|
+
this.syncRoomState("changeMultiTrackStateRequest");
|
|
2148
|
+
}
|
|
2149
|
+
const tracks = [];
|
|
2150
|
+
const tracksMap = this.store.getState(selectTracksMap);
|
|
2151
|
+
for (const track of request.tracks) {
|
|
2152
|
+
const storeTrackID = this.getStoreLocalTrackIDfromSDKTrack(track);
|
|
2153
|
+
if (storeTrackID && tracksMap[storeTrackID]) {
|
|
2154
|
+
tracks.push(tracksMap[storeTrackID]);
|
|
2155
|
+
}
|
|
2156
|
+
}
|
|
2157
|
+
this.hmsNotifications.sendChangeMultiTrackStateRequest({
|
|
2158
|
+
requestedBy: requestedBy || void 0,
|
|
2159
|
+
tracks,
|
|
2160
|
+
enabled: request.enabled,
|
|
2161
|
+
type: request.type,
|
|
2162
|
+
source: request.source
|
|
2163
|
+
});
|
|
2164
|
+
}
|
|
2165
|
+
onReconnected() {
|
|
2166
|
+
this.syncRoomState("reconnectedSync");
|
|
2167
|
+
this.hmsNotifications.sendReconnected();
|
|
2168
|
+
this.setState((store) => {
|
|
2169
|
+
store.room.roomState = store.room.isConnected ? HMSRoomState.Connected : HMSRoomState.Preview;
|
|
2170
|
+
}, "reconnected");
|
|
2171
|
+
}
|
|
2172
|
+
onReconnecting(sdkError) {
|
|
2173
|
+
const error = SDKToHMS.convertException(sdkError);
|
|
2174
|
+
HMSLogger.e("Reconnection: received error from sdk", error);
|
|
2175
|
+
this.hmsNotifications.sendReconnecting(error);
|
|
2176
|
+
this.setState((store) => {
|
|
2177
|
+
store.room.roomState = HMSRoomState.Reconnecting;
|
|
2178
|
+
store.errors.push(error);
|
|
2179
|
+
}, "reconnecting");
|
|
2180
|
+
}
|
|
2181
|
+
onError(sdkException) {
|
|
2182
|
+
const error = SDKToHMS.convertException(sdkException);
|
|
2183
|
+
if (error.isTerminal) {
|
|
2184
|
+
this.leave().then(() => HMSLogger.e("error from SDK, left room."));
|
|
2185
|
+
this.setState((store) => {
|
|
2186
|
+
store.room.roomState = HMSRoomState.Failed;
|
|
2187
|
+
store.errors.push(error);
|
|
2188
|
+
}, "errorTerminal");
|
|
2189
|
+
} else {
|
|
2190
|
+
const numExistingErrors = this.store.getState().errors.length;
|
|
2191
|
+
if (numExistingErrors < 50) {
|
|
2192
|
+
this.setState((store) => {
|
|
2193
|
+
store.errors.push(error);
|
|
2194
|
+
}, "error");
|
|
2195
|
+
}
|
|
2196
|
+
}
|
|
2197
|
+
this.syncRoomState("errorSync");
|
|
2198
|
+
this.hmsNotifications.sendError(error);
|
|
2199
|
+
HMSLogger.e("received error from sdk", error);
|
|
2200
|
+
}
|
|
2201
|
+
updateVideoLayer(trackID, action) {
|
|
2202
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
2203
|
+
if (sdkTrack && sdkTrack instanceof import_hms_video4.HMSRemoteVideoTrack) {
|
|
2204
|
+
this.setState((draft) => {
|
|
2205
|
+
draft.tracks[trackID].layer = sdkTrack.getSimulcastLayer();
|
|
2206
|
+
}, action);
|
|
2207
|
+
}
|
|
2208
|
+
}
|
|
2209
|
+
handleTrackRemove(sdkTrack, sdkPeer) {
|
|
2210
|
+
this.setState((draftStore) => {
|
|
2211
|
+
const hmsPeer = draftStore.peers[sdkPeer.peerId];
|
|
2212
|
+
const draftTracks = draftStore.tracks;
|
|
2213
|
+
const trackId = sdkTrack.trackId;
|
|
2214
|
+
if (this.isSameStoreSDKTrack(trackId, hmsPeer == null ? void 0 : hmsPeer.audioTrack)) {
|
|
2215
|
+
hmsPeer == null ? true : delete hmsPeer.audioTrack;
|
|
2216
|
+
} else if (this.isSameStoreSDKTrack(trackId, hmsPeer == null ? void 0 : hmsPeer.videoTrack)) {
|
|
2217
|
+
hmsPeer == null ? true : delete hmsPeer.videoTrack;
|
|
2218
|
+
} else {
|
|
2219
|
+
const auxiliaryIndex = hmsPeer == null ? void 0 : hmsPeer.auxiliaryTracks.indexOf(trackId);
|
|
2220
|
+
if (auxiliaryIndex > -1 && this.isSameStoreSDKTrack(trackId, hmsPeer == null ? void 0 : hmsPeer.auxiliaryTracks[auxiliaryIndex])) {
|
|
2221
|
+
hmsPeer == null ? void 0 : hmsPeer.auxiliaryTracks.splice(auxiliaryIndex, 1);
|
|
2222
|
+
}
|
|
2223
|
+
}
|
|
2224
|
+
delete draftTracks[trackId];
|
|
2225
|
+
delete this.hmsSDKTracks[trackId];
|
|
2226
|
+
}, "trackRemoved");
|
|
2227
|
+
}
|
|
2228
|
+
setEnabledSDKTrack(trackID, enabled) {
|
|
2229
|
+
return __async(this, null, function* () {
|
|
2230
|
+
const track = this.hmsSDKTracks[trackID];
|
|
2231
|
+
if (track) {
|
|
2232
|
+
yield track.setEnabled(enabled);
|
|
2233
|
+
} else {
|
|
2234
|
+
this.logPossibleInconsistency(`track ${trackID} not present, unable to enabled/disable`);
|
|
2235
|
+
}
|
|
2236
|
+
});
|
|
2237
|
+
}
|
|
2238
|
+
setSDKLocalVideoTrackSettings(trackID, settings) {
|
|
2239
|
+
return __async(this, null, function* () {
|
|
2240
|
+
const track = this.hmsSDKTracks[trackID];
|
|
2241
|
+
if (track) {
|
|
2242
|
+
yield track.setSettings(settings);
|
|
2243
|
+
} else {
|
|
2244
|
+
this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);
|
|
2245
|
+
}
|
|
2246
|
+
});
|
|
2247
|
+
}
|
|
2248
|
+
setSDKLocalAudioTrackSettings(trackID, settings) {
|
|
2249
|
+
return __async(this, null, function* () {
|
|
2250
|
+
const track = this.hmsSDKTracks[trackID];
|
|
2251
|
+
if (track) {
|
|
2252
|
+
yield track.setSettings(settings);
|
|
2253
|
+
} else {
|
|
2254
|
+
this.logPossibleInconsistency(`local track ${trackID} not present, unable to set settings`);
|
|
2255
|
+
}
|
|
2256
|
+
});
|
|
2257
|
+
}
|
|
2258
|
+
getMediaSettings(sdkPeer) {
|
|
2259
|
+
var _a;
|
|
2260
|
+
const settings = this.store.getState(selectLocalMediaSettings);
|
|
2261
|
+
const audioTrack = sdkPeer.audioTrack;
|
|
2262
|
+
const videoTrack = sdkPeer.videoTrack;
|
|
2263
|
+
return {
|
|
2264
|
+
audioInputDeviceId: (audioTrack == null ? void 0 : audioTrack.settings.deviceId) || settings.audioInputDeviceId,
|
|
2265
|
+
videoInputDeviceId: (videoTrack == null ? void 0 : videoTrack.settings.deviceId) || settings.videoInputDeviceId,
|
|
2266
|
+
audioOutputDeviceId: (_a = this.sdk.getAudioOutput().getDevice()) == null ? void 0 : _a.deviceId
|
|
2267
|
+
};
|
|
2268
|
+
}
|
|
2269
|
+
setTrackVolume(value, trackId) {
|
|
2270
|
+
const track = this.hmsSDKTracks[trackId];
|
|
2271
|
+
if (track) {
|
|
2272
|
+
if (track instanceof import_hms_video4.HMSAudioTrack) {
|
|
2273
|
+
track.setVolume(value);
|
|
2274
|
+
this.setState((draftStore) => {
|
|
2275
|
+
const track2 = draftStore.tracks[trackId];
|
|
2276
|
+
if (track2) {
|
|
2277
|
+
track2.volume = value;
|
|
2278
|
+
}
|
|
2279
|
+
}, "trackVolume");
|
|
2280
|
+
} else {
|
|
2281
|
+
HMSLogger.w(`track ${trackId} is not an audio track`);
|
|
2282
|
+
}
|
|
2283
|
+
} else {
|
|
2284
|
+
this.logPossibleInconsistency(`track ${trackId} not present, unable to set volume`);
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
localAndVideoUnmuting(trackID) {
|
|
2288
|
+
const localPeer = this.store.getState(selectLocalPeer);
|
|
2289
|
+
if (localPeer.videoTrack !== trackID) {
|
|
2290
|
+
return false;
|
|
2291
|
+
}
|
|
2292
|
+
const displayEnabled = this.store.getState(selectIsLocalVideoDisplayEnabled);
|
|
2293
|
+
const actuallyEnabled = this.store.getState(selectIsLocalVideoEnabled);
|
|
2294
|
+
return displayEnabled && !actuallyEnabled;
|
|
2295
|
+
}
|
|
2296
|
+
logPossibleInconsistency(inconsistency) {
|
|
2297
|
+
HMSLogger.w("possible inconsistency detected - ", inconsistency);
|
|
2298
|
+
}
|
|
2299
|
+
addRemoveVideoPlugin(plugin, action, pluginFrameRate) {
|
|
2300
|
+
return __async(this, null, function* () {
|
|
2301
|
+
if (!plugin) {
|
|
2302
|
+
HMSLogger.w("Invalid plugin received in store");
|
|
2303
|
+
return;
|
|
2304
|
+
}
|
|
2305
|
+
const trackID = this.store.getState(selectLocalVideoTrackID);
|
|
2306
|
+
if (trackID) {
|
|
2307
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
2308
|
+
if (sdkTrack) {
|
|
2309
|
+
if (action === "add") {
|
|
2310
|
+
yield sdkTrack.addPlugin(plugin, pluginFrameRate);
|
|
2311
|
+
} else if (action === "remove") {
|
|
2312
|
+
yield sdkTrack.removePlugin(plugin);
|
|
2313
|
+
}
|
|
2314
|
+
this.syncRoomState(`${action}VideoPlugin`);
|
|
2315
|
+
} else {
|
|
2316
|
+
this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);
|
|
2317
|
+
}
|
|
2318
|
+
}
|
|
2319
|
+
});
|
|
2320
|
+
}
|
|
2321
|
+
addRemoveAudioPlugin(plugin, action) {
|
|
2322
|
+
return __async(this, null, function* () {
|
|
2323
|
+
if (!plugin) {
|
|
2324
|
+
HMSLogger.w("Invalid plugin received in store");
|
|
2325
|
+
return;
|
|
2326
|
+
}
|
|
2327
|
+
const trackID = this.store.getState(selectLocalAudioTrackID);
|
|
2328
|
+
if (trackID) {
|
|
2329
|
+
const sdkTrack = this.hmsSDKTracks[trackID];
|
|
2330
|
+
if (sdkTrack) {
|
|
2331
|
+
if (action === "add") {
|
|
2332
|
+
yield sdkTrack.addPlugin(plugin);
|
|
2333
|
+
} else if (action === "remove") {
|
|
2334
|
+
yield sdkTrack.removePlugin(plugin);
|
|
2335
|
+
}
|
|
2336
|
+
this.syncRoomState(`${action}AudioPlugin`);
|
|
2337
|
+
} else {
|
|
2338
|
+
this.logPossibleInconsistency(`track ${trackID} not present, unable to remove plugin`);
|
|
2339
|
+
}
|
|
2340
|
+
}
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
isSameStoreSDKTrack(sdkTrackID, storeTrackID) {
|
|
2344
|
+
var _a;
|
|
2345
|
+
if (!storeTrackID) {
|
|
2346
|
+
return false;
|
|
2347
|
+
}
|
|
2348
|
+
return ((_a = this.hmsSDKTracks[storeTrackID]) == null ? void 0 : _a.trackId) === sdkTrackID;
|
|
2349
|
+
}
|
|
2350
|
+
onRoleChangeRequest(request) {
|
|
2351
|
+
this.setState((store) => {
|
|
2352
|
+
if (store.roleChangeRequests.length === 0) {
|
|
2353
|
+
store.roleChangeRequests.push(SDKToHMS.convertRoleChangeRequest(request));
|
|
2354
|
+
}
|
|
2355
|
+
}, "roleChangeRequest");
|
|
2356
|
+
}
|
|
2357
|
+
removeRoleChangeRequest(toRemove) {
|
|
2358
|
+
this.setState((store) => {
|
|
2359
|
+
const index = store.roleChangeRequests.findIndex((req) => {
|
|
2360
|
+
return req.token === toRemove.token;
|
|
2361
|
+
});
|
|
2362
|
+
if (index !== -1) {
|
|
2363
|
+
store.roleChangeRequests.splice(index, 1);
|
|
2364
|
+
}
|
|
2365
|
+
}, "removeRoleChangeRequest");
|
|
2366
|
+
}
|
|
2367
|
+
onRoleUpdate() {
|
|
2368
|
+
this.syncRoomState("roleUpdate");
|
|
2369
|
+
}
|
|
2370
|
+
getStoreLocalTrackIDfromSDKTrack(sdkTrack) {
|
|
2371
|
+
const trackIDs = this.store.getState(selectLocalTrackIDs);
|
|
2372
|
+
return trackIDs.find((trackID) => this.hmsSDKTracks[trackID].trackId === sdkTrack.trackId);
|
|
2373
|
+
}
|
|
2374
|
+
};
|
|
2375
|
+
|
|
2376
|
+
// src/core/hmsSDKStore/HMSNotifications.ts
|
|
2377
|
+
var import_eventemitter2 = __toModule(require("eventemitter2"));
|
|
2378
|
+
var HMS_NOTIFICATION_EVENT = "hmsNotification";
|
|
2379
|
+
var HMSNotifications = class {
|
|
2380
|
+
constructor(store) {
|
|
2381
|
+
this.id = 0;
|
|
2382
|
+
this.onNotification = (cb, type) => {
|
|
2383
|
+
const eventCallback = (notification) => {
|
|
2384
|
+
if (type) {
|
|
2385
|
+
let matchesType;
|
|
2386
|
+
if (Array.isArray(type)) {
|
|
2387
|
+
matchesType = type.includes(notification.type);
|
|
2388
|
+
} else {
|
|
2389
|
+
matchesType = type === notification.type;
|
|
2390
|
+
}
|
|
2391
|
+
if (!matchesType) {
|
|
2392
|
+
return;
|
|
2393
|
+
}
|
|
2394
|
+
}
|
|
2395
|
+
cb(notification);
|
|
2396
|
+
};
|
|
2397
|
+
this.eventEmitter.addListener(HMS_NOTIFICATION_EVENT, eventCallback);
|
|
2398
|
+
return () => {
|
|
2399
|
+
this.eventEmitter.removeListener(HMS_NOTIFICATION_EVENT, eventCallback);
|
|
2400
|
+
};
|
|
2401
|
+
};
|
|
2402
|
+
this.store = store;
|
|
2403
|
+
this.eventEmitter = new import_eventemitter2.EventEmitter2();
|
|
2404
|
+
}
|
|
2405
|
+
sendPlaylistTrackEnded(item) {
|
|
2406
|
+
const notification = this.createNotification(HMSNotificationTypes.PLAYLIST_TRACK_ENDED, item, HMSNotificationSeverity.INFO);
|
|
2407
|
+
this.emitEvent(notification);
|
|
2408
|
+
}
|
|
2409
|
+
sendDeviceChange(request) {
|
|
2410
|
+
var _a;
|
|
2411
|
+
const notification = this.createNotification(HMSNotificationTypes.DEVICE_CHANGE_UPDATE, request, request.error ? HMSNotificationSeverity.ERROR : HMSNotificationSeverity.INFO, `Selected ${request.type} device - ${(_a = request.selection) == null ? void 0 : _a.label}`);
|
|
2412
|
+
this.emitEvent(notification);
|
|
2413
|
+
}
|
|
2414
|
+
sendLeaveRoom(request) {
|
|
2415
|
+
var _a;
|
|
2416
|
+
const peerName = (_a = request.requestedBy) == null ? void 0 : _a.name;
|
|
2417
|
+
const notification = this.createNotification(request.roomEnded || !peerName ? HMSNotificationTypes.ROOM_ENDED : HMSNotificationTypes.REMOVED_FROM_ROOM, request, HMSNotificationSeverity.INFO, `${request.roomEnded ? `Room ended` : "Removed from room"} ${peerName ? `by ${peerName}` : ""}`);
|
|
2418
|
+
this.emitEvent(notification);
|
|
2419
|
+
}
|
|
2420
|
+
sendPeerList(peers) {
|
|
2421
|
+
const notification = this.createNotification(HMSNotificationTypes.PEER_LIST, peers, HMSNotificationSeverity.INFO);
|
|
2422
|
+
this.emitEvent(notification);
|
|
2423
|
+
}
|
|
2424
|
+
sendPeerUpdate(type, peer) {
|
|
2425
|
+
const hmsPeer = this.store.getState(selectPeerByID(peer == null ? void 0 : peer.id)) || peer;
|
|
2426
|
+
const notificationType = PEER_NOTIFICATION_TYPES[type];
|
|
2427
|
+
if (notificationType) {
|
|
2428
|
+
const notification = this.createNotification(notificationType, hmsPeer, HMSNotificationSeverity.INFO);
|
|
2429
|
+
this.emitEvent(notification);
|
|
2430
|
+
}
|
|
2431
|
+
}
|
|
2432
|
+
sendTrackUpdate(type, trackID) {
|
|
2433
|
+
const hmsTrack = this.store.getState(selectTrackByID(trackID));
|
|
2434
|
+
const notificationType = TRACK_NOTIFICATION_TYPES[type];
|
|
2435
|
+
if (notificationType) {
|
|
2436
|
+
const notification = this.createNotification(notificationType, hmsTrack, HMSNotificationSeverity.INFO);
|
|
2437
|
+
this.emitEvent(notification);
|
|
2438
|
+
}
|
|
2439
|
+
}
|
|
2440
|
+
sendMessageReceived(message) {
|
|
2441
|
+
const notification = this.createNotification(HMSNotificationTypes.NEW_MESSAGE, message, HMSNotificationSeverity.INFO);
|
|
2442
|
+
this.emitEvent(notification);
|
|
2443
|
+
}
|
|
2444
|
+
sendError(error) {
|
|
2445
|
+
const notification = this.createNotification(HMSNotificationTypes.ERROR, error, HMSNotificationSeverity.ERROR);
|
|
2446
|
+
this.emitEvent(notification);
|
|
2447
|
+
}
|
|
2448
|
+
sendReconnecting(error) {
|
|
2449
|
+
const notification = this.createNotification(HMSNotificationTypes.RECONNECTING, error, HMSNotificationSeverity.ERROR);
|
|
2450
|
+
this.emitEvent(notification);
|
|
2451
|
+
}
|
|
2452
|
+
sendReconnected() {
|
|
2453
|
+
const notification = this.createNotification(HMSNotificationTypes.RECONNECTED, null, HMSNotificationSeverity.INFO);
|
|
2454
|
+
this.emitEvent(notification);
|
|
2455
|
+
}
|
|
2456
|
+
sendChangeTrackStateRequest(request) {
|
|
2457
|
+
const notification = this.createNotification(HMSNotificationTypes.CHANGE_TRACK_STATE_REQUEST, request, HMSNotificationSeverity.INFO);
|
|
2458
|
+
this.emitEvent(notification);
|
|
2459
|
+
}
|
|
2460
|
+
sendChangeMultiTrackStateRequest(request) {
|
|
2461
|
+
const notification = this.createNotification(HMSNotificationTypes.CHANGE_MULTI_TRACK_STATE_REQUEST, request, HMSNotificationSeverity.INFO);
|
|
2462
|
+
this.emitEvent(notification);
|
|
2463
|
+
}
|
|
2464
|
+
emitEvent(notification) {
|
|
2465
|
+
this.eventEmitter.emit(HMS_NOTIFICATION_EVENT, notification);
|
|
2466
|
+
}
|
|
2467
|
+
createNotification(type, data, severity, message = "") {
|
|
2468
|
+
this.id++;
|
|
2469
|
+
return {
|
|
2470
|
+
id: this.id,
|
|
2471
|
+
type,
|
|
2472
|
+
message,
|
|
2473
|
+
data,
|
|
2474
|
+
severity
|
|
2475
|
+
};
|
|
2476
|
+
}
|
|
2477
|
+
};
|
|
2478
|
+
|
|
2479
|
+
// src/common/storeName.ts
|
|
2480
|
+
var import_hms_video5 = __toModule(require("@100mslive/hms-video"));
|
|
2481
|
+
var storeNameWithTabTitle = (storeName) => {
|
|
2482
|
+
return import_hms_video5.isBrowser ? `${storeName} ${document.title}` : storeName;
|
|
2483
|
+
};
|
|
2484
|
+
|
|
2485
|
+
// src/core/webrtc-stats/webrtc-stats-store.ts
|
|
2486
|
+
var subscribeToSdkWebrtcStats = (sdk, webrtcStore, store) => {
|
|
2487
|
+
let unsubscribe;
|
|
2488
|
+
if (store.getState(selectRoomState) === HMSRoomState.Connected) {
|
|
2489
|
+
unsubscribe = initAndSubscribeWebrtcStore(sdk, webrtcStore, store);
|
|
2490
|
+
}
|
|
2491
|
+
store.subscribe((roomState) => {
|
|
2492
|
+
if ([HMSRoomState.Connected, HMSRoomState.Reconnecting].includes(roomState)) {
|
|
2493
|
+
if (!unsubscribe) {
|
|
2494
|
+
unsubscribe = initAndSubscribeWebrtcStore(sdk, webrtcStore, store);
|
|
2495
|
+
}
|
|
2496
|
+
} else {
|
|
2497
|
+
if (unsubscribe) {
|
|
2498
|
+
resetHMSStatsStore(webrtcStore);
|
|
2499
|
+
unsubscribe();
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
}, selectRoomState);
|
|
2503
|
+
};
|
|
2504
|
+
var initAndSubscribeWebrtcStore = (sdk, webrtcStore, store) => {
|
|
2505
|
+
var _a;
|
|
2506
|
+
const unsubLocalPeer = updateLocalPeerInWebrtcStore(store, webrtcStore);
|
|
2507
|
+
const unsubSdkStats = (_a = sdk.getWebrtcInternals()) == null ? void 0 : _a.onStatsChange((stats) => updateWebrtcStoreStats(webrtcStore, stats, store));
|
|
2508
|
+
return () => {
|
|
2509
|
+
unsubLocalPeer();
|
|
2510
|
+
unsubSdkStats && unsubSdkStats();
|
|
2511
|
+
};
|
|
2512
|
+
};
|
|
2513
|
+
var updateLocalPeerInWebrtcStore = (store, webrtcStore) => {
|
|
2514
|
+
let unsubID, unsubVideoTrackID, unsubAudioTrackID;
|
|
2515
|
+
if (store.getState(selectLocalPeerID)) {
|
|
2516
|
+
webrtcStore.namedSetState((draft) => {
|
|
2517
|
+
draft.localPeer.id = store.getState(selectLocalPeerID);
|
|
2518
|
+
}, "localpeer-id");
|
|
2519
|
+
} else {
|
|
2520
|
+
unsubID = store.subscribe((localPeerID) => {
|
|
2521
|
+
localPeerID && webrtcStore.namedSetState((draft) => {
|
|
2522
|
+
draft.localPeer.id = localPeerID;
|
|
2523
|
+
}, "localpeer-id");
|
|
2524
|
+
}, selectLocalPeerID);
|
|
2525
|
+
}
|
|
2526
|
+
if (store.getState(selectLocalVideoTrackID)) {
|
|
2527
|
+
webrtcStore.namedSetState((draft) => {
|
|
2528
|
+
draft.localPeer.videoTrack = store.getState(selectLocalVideoTrackID);
|
|
2529
|
+
}, "localpeer-videotrack-id");
|
|
2530
|
+
} else {
|
|
2531
|
+
unsubVideoTrackID = store.subscribe((videoTrackID) => {
|
|
2532
|
+
videoTrackID && webrtcStore.namedSetState((draft) => {
|
|
2533
|
+
draft.localPeer.videoTrack = videoTrackID;
|
|
2534
|
+
}, "localpeer-videotrack-id");
|
|
2535
|
+
}, selectLocalVideoTrackID);
|
|
2536
|
+
}
|
|
2537
|
+
if (store.getState(selectLocalAudioTrackID)) {
|
|
2538
|
+
webrtcStore.namedSetState((draft) => {
|
|
2539
|
+
draft.localPeer.videoTrack = store.getState(selectLocalAudioTrackID);
|
|
2540
|
+
}, "localpeer-audiotrack-id");
|
|
2541
|
+
} else {
|
|
2542
|
+
unsubAudioTrackID = store.subscribe((audioTrackID) => {
|
|
2543
|
+
audioTrackID && webrtcStore.namedSetState((draft) => {
|
|
2544
|
+
draft.localPeer.videoTrack = audioTrackID;
|
|
2545
|
+
}, "localpeer-audiotrack-id");
|
|
2546
|
+
}, selectLocalAudioTrackID);
|
|
2547
|
+
}
|
|
2548
|
+
return () => {
|
|
2549
|
+
unsubID == null ? void 0 : unsubID();
|
|
2550
|
+
unsubVideoTrackID == null ? void 0 : unsubVideoTrackID();
|
|
2551
|
+
unsubAudioTrackID == null ? void 0 : unsubAudioTrackID();
|
|
2552
|
+
};
|
|
2553
|
+
};
|
|
2554
|
+
var updateWebrtcStoreStats = (webrtcStore, stats, hmsStore) => {
|
|
2555
|
+
const tracks = hmsStore.getState(selectTracksMap);
|
|
2556
|
+
webrtcStore.namedSetState((store) => {
|
|
2557
|
+
const newTrackStats = {};
|
|
2558
|
+
const trackIDs = Object.keys(tracks);
|
|
2559
|
+
for (const trackID of trackIDs) {
|
|
2560
|
+
const sdkTrackStats = stats.getTrackStats(trackID);
|
|
2561
|
+
if (sdkTrackStats) {
|
|
2562
|
+
newTrackStats[trackID] = sdkTrackStats;
|
|
2563
|
+
}
|
|
2564
|
+
}
|
|
2565
|
+
mergeNewIndividualStatsInDraft(store.trackStats, newTrackStats);
|
|
2566
|
+
const localPeerID = hmsStore.getState(selectLocalPeerID);
|
|
2567
|
+
const newPeerStats = { [localPeerID]: stats.getLocalPeerStats() };
|
|
2568
|
+
mergeNewIndividualStatsInDraft(store.peerStats, newPeerStats);
|
|
2569
|
+
}, "webrtc-stats");
|
|
2570
|
+
};
|
|
2571
|
+
var resetHMSStatsStore = (store, reason = "resetState") => {
|
|
2572
|
+
store.namedSetState((draft) => {
|
|
2573
|
+
Object.assign(draft, createDefaultStatsStore());
|
|
2574
|
+
}, reason);
|
|
2575
|
+
};
|
|
2576
|
+
|
|
2577
|
+
// src/core/webrtc-stats/HMSStats.ts
|
|
2578
|
+
var HMSStats = class {
|
|
2579
|
+
constructor(hmsStore, sdk) {
|
|
2580
|
+
this.hmsStore = hmsStore;
|
|
2581
|
+
this.sdk = sdk;
|
|
2582
|
+
this.store = HMSReactiveStore.createNewHMSStore(storeNameWithTabTitle("HMSStatsStore"), createDefaultStatsStore);
|
|
2583
|
+
this.getState = this.store.getState;
|
|
2584
|
+
this.subscribe = this.store.subscribe;
|
|
2585
|
+
this.getPublishPeerConnection = () => new Promise((resolve) => {
|
|
2586
|
+
var _a, _b;
|
|
2587
|
+
if (this.hmsStore.getState(selectRoomState) === "Connected") {
|
|
2588
|
+
resolve((_b = (_a = this.sdk) == null ? void 0 : _a.getWebrtcInternals()) == null ? void 0 : _b.getPublishPeerConnection());
|
|
2589
|
+
} else {
|
|
2590
|
+
this.hmsStore.subscribe((roomState) => {
|
|
2591
|
+
var _a2, _b2;
|
|
2592
|
+
if (roomState === "Connected") {
|
|
2593
|
+
resolve((_b2 = (_a2 = this.sdk) == null ? void 0 : _a2.getWebrtcInternals()) == null ? void 0 : _b2.getPublishPeerConnection());
|
|
2594
|
+
}
|
|
2595
|
+
}, selectRoomState);
|
|
2596
|
+
}
|
|
2597
|
+
});
|
|
2598
|
+
this.getSubscribePeerConnection = () => new Promise((resolve) => {
|
|
2599
|
+
var _a, _b;
|
|
2600
|
+
if (this.hmsStore.getState(selectRoomState) === "Connected") {
|
|
2601
|
+
resolve((_b = (_a = this.sdk) == null ? void 0 : _a.getWebrtcInternals()) == null ? void 0 : _b.getSubscribePeerConnection());
|
|
2602
|
+
} else {
|
|
2603
|
+
this.hmsStore.subscribe((roomState) => {
|
|
2604
|
+
var _a2, _b2;
|
|
2605
|
+
if (roomState === "Connected") {
|
|
2606
|
+
resolve((_b2 = (_a2 = this.sdk) == null ? void 0 : _a2.getWebrtcInternals()) == null ? void 0 : _b2.getSubscribePeerConnection());
|
|
2607
|
+
}
|
|
2608
|
+
}, selectRoomState);
|
|
2609
|
+
}
|
|
2610
|
+
});
|
|
2611
|
+
if (!this.sdk) {
|
|
2612
|
+
return;
|
|
2613
|
+
}
|
|
2614
|
+
subscribeToSdkWebrtcStats(this.sdk, this.store, this.hmsStore);
|
|
2615
|
+
}
|
|
2616
|
+
};
|
|
2617
|
+
|
|
2618
|
+
// src/core/webrtc-stats/selectors.ts
|
|
2619
|
+
var import_reselect6 = __toModule(require("reselect"));
|
|
2620
|
+
var selectLocalPeerID2 = (store) => store.localPeer.id;
|
|
2621
|
+
var selectLocalAudioTrackID2 = (store) => store.localPeer.audioTrack;
|
|
2622
|
+
var selectLocalVideoTrackID2 = (store) => store.localPeer.videoTrack;
|
|
2623
|
+
var selectPeerID2 = (_store, peerID) => peerID;
|
|
2624
|
+
var selectTrackID2 = (_store, trackID) => trackID;
|
|
2625
|
+
var selectTrackStatsMap = (store) => store.trackStats;
|
|
2626
|
+
var selectPeerStatsMap = (store) => store.peerStats;
|
|
2627
|
+
var localPeerStats = (0, import_reselect6.createSelector)([selectPeerStatsMap, selectLocalPeerID2], (storePeerStats, localPeerID) => storePeerStats[localPeerID]);
|
|
2628
|
+
var packetsLost = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2629
|
+
var _a;
|
|
2630
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.subscribe) == null ? void 0 : _a.packetsLost;
|
|
2631
|
+
});
|
|
2632
|
+
var jitter = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2633
|
+
var _a;
|
|
2634
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.subscribe) == null ? void 0 : _a.jitter;
|
|
2635
|
+
});
|
|
2636
|
+
var publishBitrate = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2637
|
+
var _a;
|
|
2638
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.publish) == null ? void 0 : _a.bitrate;
|
|
2639
|
+
});
|
|
2640
|
+
var subscribeBitrate = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2641
|
+
var _a;
|
|
2642
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.subscribe) == null ? void 0 : _a.bitrate;
|
|
2643
|
+
});
|
|
2644
|
+
var availablePublishBitrate = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2645
|
+
var _a;
|
|
2646
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.publish) == null ? void 0 : _a.availableOutgoingBitrate;
|
|
2647
|
+
});
|
|
2648
|
+
var availableSubscribeBitrate = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2649
|
+
var _a;
|
|
2650
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.subscribe) == null ? void 0 : _a.availableIncomingBitrate;
|
|
2651
|
+
});
|
|
2652
|
+
var totalBytesSent = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2653
|
+
var _a;
|
|
2654
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.publish) == null ? void 0 : _a.bytesSent;
|
|
2655
|
+
});
|
|
2656
|
+
var totalBytesReceived = (0, import_reselect6.createSelector)(localPeerStats, (localPeerStats2) => {
|
|
2657
|
+
var _a;
|
|
2658
|
+
return (_a = localPeerStats2 == null ? void 0 : localPeerStats2.subscribe) == null ? void 0 : _a.bytesReceived;
|
|
2659
|
+
});
|
|
2660
|
+
var selectPeerStatsByIDBare = (0, import_reselect6.createSelector)([selectPeerStatsMap, selectPeerID2], (storePeerStats, peerID) => peerID ? storePeerStats[peerID] : void 0);
|
|
2661
|
+
var selectTrackStatsByIDBare = (0, import_reselect6.createSelector)([selectTrackStatsMap, selectTrackID2], (storeTrackStats, trackID) => trackID ? storeTrackStats[trackID] : void 0);
|
|
2662
|
+
var peerStatsByID = byIDCurry(selectPeerStatsByIDBare);
|
|
2663
|
+
var trackStatsByID = byIDCurry(selectTrackStatsByIDBare);
|
|
2664
|
+
var bitrateByTrackID = byIDCurry((0, import_reselect6.createSelector)(selectTrackStatsByIDBare, (trackStats) => trackStats == null ? void 0 : trackStats.bitrate));
|
|
2665
|
+
var bytesReceivedByTrackID = byIDCurry((0, import_reselect6.createSelector)(selectTrackStatsByIDBare, (trackStats) => trackStats == null ? void 0 : trackStats.bytesReceived));
|
|
2666
|
+
var framerateByTrackID = byIDCurry((0, import_reselect6.createSelector)(selectTrackStatsByIDBare, (trackStats) => trackStats == null ? void 0 : trackStats.framesPerSecond));
|
|
2667
|
+
var jitterByTrackID = byIDCurry((0, import_reselect6.createSelector)(selectTrackStatsByIDBare, (trackStats) => trackStats == null ? void 0 : trackStats.jitter));
|
|
2668
|
+
var packetsLostByTrackID = byIDCurry((0, import_reselect6.createSelector)(selectTrackStatsByIDBare, (trackStats) => trackStats == null ? void 0 : trackStats.packetsLost));
|
|
2669
|
+
var localAudioTrackStats = (0, import_reselect6.createSelector)([selectTrackStatsMap, selectLocalAudioTrackID2], (trackStatsMap, trackID) => trackID ? trackStatsMap[trackID] : void 0);
|
|
2670
|
+
var localVideoTrackStats = (0, import_reselect6.createSelector)([selectTrackStatsMap, selectLocalVideoTrackID2], (trackStatsMap, trackID) => trackID ? trackStatsMap[trackID] : void 0);
|
|
2671
|
+
var localAudioTrackBitrate = (0, import_reselect6.createSelector)(localAudioTrackStats, (stats) => stats == null ? void 0 : stats.bitrate);
|
|
2672
|
+
var localVideoTrackBitrate = (0, import_reselect6.createSelector)(localVideoTrackStats, (stats) => stats == null ? void 0 : stats.bitrate);
|
|
2673
|
+
var localAudioTrackBytesSent = (0, import_reselect6.createSelector)(localAudioTrackStats, (stats) => stats == null ? void 0 : stats.bytesSent);
|
|
2674
|
+
var localVideoTrackBytesSent = (0, import_reselect6.createSelector)(localVideoTrackStats, (stats) => stats == null ? void 0 : stats.bytesSent);
|
|
2675
|
+
var localVideoTrackFramerate = (0, import_reselect6.createSelector)(localVideoTrackStats, (stats) => stats == null ? void 0 : stats.framesPerSecond);
|
|
2676
|
+
var localVideoTrackQualityLimitationReason = (0, import_reselect6.createSelector)(localVideoTrackStats, (stats) => stats == null ? void 0 : stats.qualityLimitationReason);
|
|
2677
|
+
var selectHMSStats = {
|
|
2678
|
+
localPeerStats,
|
|
2679
|
+
packetsLost,
|
|
2680
|
+
jitter,
|
|
2681
|
+
publishBitrate,
|
|
2682
|
+
subscribeBitrate,
|
|
2683
|
+
availablePublishBitrate,
|
|
2684
|
+
availableSubscribeBitrate,
|
|
2685
|
+
totalBytesSent,
|
|
2686
|
+
totalBytesReceived,
|
|
2687
|
+
peerStatsByID,
|
|
2688
|
+
trackStatsByID,
|
|
2689
|
+
bitrateByTrackID,
|
|
2690
|
+
bytesReceivedByTrackID,
|
|
2691
|
+
framerateByTrackID,
|
|
2692
|
+
jitterByTrackID,
|
|
2693
|
+
packetsLostByTrackID,
|
|
2694
|
+
localAudioTrackStats,
|
|
2695
|
+
localVideoTrackStats,
|
|
2696
|
+
localAudioTrackBitrate,
|
|
2697
|
+
localVideoTrackBitrate,
|
|
2698
|
+
localAudioTrackBytesSent,
|
|
2699
|
+
localVideoTrackBytesSent,
|
|
2700
|
+
localVideoTrackFramerate,
|
|
2701
|
+
localVideoTrackQualityLimitationReason
|
|
2702
|
+
};
|
|
2703
|
+
|
|
2704
|
+
// src/core/hmsSDKStore/HMSReactiveStore.ts
|
|
2705
|
+
var HMSReactiveStore = class {
|
|
2706
|
+
constructor(hmsStore, hmsActions, hmsNotifications) {
|
|
2707
|
+
this.getStats = () => {
|
|
2708
|
+
if (!this.stats) {
|
|
2709
|
+
this.stats = new HMSStats(this.store, this.sdk);
|
|
2710
|
+
}
|
|
2711
|
+
return this.stats;
|
|
2712
|
+
};
|
|
2713
|
+
if (hmsStore) {
|
|
2714
|
+
this.store = hmsStore;
|
|
2715
|
+
} else {
|
|
2716
|
+
this.store = HMSReactiveStore.createNewHMSStore(storeNameWithTabTitle("HMSStore"), createDefaultStoreState);
|
|
2717
|
+
}
|
|
2718
|
+
if (hmsNotifications) {
|
|
2719
|
+
this.notifications = hmsNotifications;
|
|
2720
|
+
} else {
|
|
2721
|
+
this.notifications = new HMSNotifications(this.store);
|
|
2722
|
+
}
|
|
2723
|
+
if (hmsActions) {
|
|
2724
|
+
this.actions = hmsActions;
|
|
2725
|
+
} else {
|
|
2726
|
+
this.sdk = new import_hms_video6.HMSSdk();
|
|
2727
|
+
this.actions = new HMSSDKActions(this.store, this.sdk, this.notifications);
|
|
2728
|
+
}
|
|
2729
|
+
this.initialTriggerOnSubscribe = false;
|
|
2730
|
+
if (import_hms_video6.isBrowser) {
|
|
2731
|
+
window.__hms = this;
|
|
2732
|
+
}
|
|
2733
|
+
}
|
|
2734
|
+
triggerOnSubscribe() {
|
|
2735
|
+
if (this.initialTriggerOnSubscribe) {
|
|
2736
|
+
return;
|
|
2737
|
+
}
|
|
2738
|
+
HMSReactiveStore.makeStoreTriggerOnSubscribe(this.store);
|
|
2739
|
+
this.initialTriggerOnSubscribe = true;
|
|
2740
|
+
}
|
|
2741
|
+
getStore() {
|
|
2742
|
+
return this.store;
|
|
2743
|
+
}
|
|
2744
|
+
getHMSActions() {
|
|
2745
|
+
return this.actions;
|
|
2746
|
+
}
|
|
2747
|
+
getActions() {
|
|
2748
|
+
return this.actions;
|
|
2749
|
+
}
|
|
2750
|
+
getNotifications() {
|
|
2751
|
+
return { onNotification: this.notifications.onNotification };
|
|
2752
|
+
}
|
|
2753
|
+
static createNewHMSStore(storeName, defaultCreatorFn) {
|
|
2754
|
+
const hmsStore = (0, import_vanilla.default)(() => defaultCreatorFn());
|
|
2755
|
+
const savedSetState = hmsStore.setState;
|
|
2756
|
+
hmsStore.setState = (partial) => {
|
|
2757
|
+
const nextState = typeof partial === "function" ? (0, import_immer.default)(partial) : partial;
|
|
2758
|
+
savedSetState(nextState);
|
|
2759
|
+
};
|
|
2760
|
+
const prevGetState = hmsStore.getState;
|
|
2761
|
+
hmsStore.getState = (selector) => {
|
|
2762
|
+
if (selector) {
|
|
2763
|
+
const name = selector.name || "byIDSelector";
|
|
2764
|
+
if (!window.selectorsCount) {
|
|
2765
|
+
window.selectorsCount = {};
|
|
2766
|
+
}
|
|
2767
|
+
window.selectorsCount[name] = (window.selectorsCount[name] || 0) + 1;
|
|
2768
|
+
const start = performance.now();
|
|
2769
|
+
const updatedState = selector(prevGetState());
|
|
2770
|
+
const diff = performance.now() - start;
|
|
2771
|
+
if (diff > 1) {
|
|
2772
|
+
window.expensiveSelectors = window.expensiveSelectors || new Map();
|
|
2773
|
+
window.expensiveSelectors.set(name, diff);
|
|
2774
|
+
}
|
|
2775
|
+
return updatedState;
|
|
2776
|
+
}
|
|
2777
|
+
return prevGetState();
|
|
2778
|
+
};
|
|
2779
|
+
HMSReactiveStore.compareWithShallowCheckInSubscribe(hmsStore);
|
|
2780
|
+
const namedSetState = HMSReactiveStore.setUpDevtools(hmsStore, storeName);
|
|
2781
|
+
return __spreadProps(__spreadValues({}, hmsStore), { namedSetState });
|
|
2782
|
+
}
|
|
2783
|
+
static makeStoreTriggerOnSubscribe(store) {
|
|
2784
|
+
const prevSubscribe = store.subscribe;
|
|
2785
|
+
store.subscribe = (listener, selector, equalityFn) => {
|
|
2786
|
+
listener(store.getState(selector), void 0);
|
|
2787
|
+
return prevSubscribe(listener, selector, equalityFn);
|
|
2788
|
+
};
|
|
2789
|
+
}
|
|
2790
|
+
static compareWithShallowCheckInSubscribe(hmsStore) {
|
|
2791
|
+
const prevSubscribe = hmsStore.subscribe;
|
|
2792
|
+
hmsStore.subscribe = (listener, selector, equalityFn) => {
|
|
2793
|
+
if (!selector) {
|
|
2794
|
+
selector = (store) => store;
|
|
2795
|
+
}
|
|
2796
|
+
equalityFn = equalityFn || import_shallow.default;
|
|
2797
|
+
return prevSubscribe(listener, selector, equalityFn);
|
|
2798
|
+
};
|
|
2799
|
+
}
|
|
2800
|
+
static setUpDevtools(api, prefix) {
|
|
2801
|
+
let extension;
|
|
2802
|
+
try {
|
|
2803
|
+
extension = window.__REDUX_DEVTOOLS_EXTENSION__ || window.top.__REDUX_DEVTOOLS_EXTENSION__;
|
|
2804
|
+
} catch (e) {
|
|
2805
|
+
}
|
|
2806
|
+
if (!extension) {
|
|
2807
|
+
return (fn) => {
|
|
2808
|
+
api.setState(fn);
|
|
2809
|
+
};
|
|
2810
|
+
}
|
|
2811
|
+
const devtools = extension.connect(HMSReactiveStore.devtoolsOptions(prefix));
|
|
2812
|
+
devtools.prefix = prefix ? `${prefix} > ` : "";
|
|
2813
|
+
const savedSetState = api.setState;
|
|
2814
|
+
api.setState = (fn) => {
|
|
2815
|
+
savedSetState(fn);
|
|
2816
|
+
devtools.send(`${devtools.prefix}setState`, api.getState());
|
|
2817
|
+
};
|
|
2818
|
+
devtools.subscribe(HMSReactiveStore.devtoolsSubscribe(devtools, api, savedSetState));
|
|
2819
|
+
devtools.send("setUpStore", api.getState());
|
|
2820
|
+
return (fn, action) => {
|
|
2821
|
+
savedSetState(fn);
|
|
2822
|
+
const actionName = action ? action : `${devtools.prefix}action`;
|
|
2823
|
+
devtools.send(actionName, api.getState());
|
|
2824
|
+
};
|
|
2825
|
+
}
|
|
2826
|
+
static devtoolsOptions(prefix) {
|
|
2827
|
+
return {
|
|
2828
|
+
name: prefix,
|
|
2829
|
+
actionsBlacklist: ["audioLevel", "playlistProgress", "connectionQuality"]
|
|
2830
|
+
};
|
|
2831
|
+
}
|
|
2832
|
+
static devtoolsSubscribe(devtools, api, savedSetState) {
|
|
2833
|
+
return (message) => {
|
|
2834
|
+
var _a, _b, _c, _d;
|
|
2835
|
+
if (message.type === "DISPATCH" && message.state) {
|
|
2836
|
+
const ignoreState = ["JUMP_TO_ACTION", "JUMP_TO_STATE"].includes(message.payload.type);
|
|
2837
|
+
if (!ignoreState) {
|
|
2838
|
+
api.setState(JSON.parse(message.state));
|
|
2839
|
+
} else {
|
|
2840
|
+
savedSetState(JSON.parse(message.state));
|
|
2841
|
+
}
|
|
2842
|
+
} else if (message.type === "DISPATCH" && ((_a = message.payload) == null ? void 0 : _a.type) === "COMMIT") {
|
|
2843
|
+
devtools.init(api.getState());
|
|
2844
|
+
} else if (message.type === "DISPATCH" && ((_b = message.payload) == null ? void 0 : _b.type) === "IMPORT_STATE") {
|
|
2845
|
+
const actions = (_c = message.payload.nextLiftedState) == null ? void 0 : _c.actionsById;
|
|
2846
|
+
const computedStates = ((_d = message.payload.nextLiftedState) == null ? void 0 : _d.computedStates) || [];
|
|
2847
|
+
computedStates.forEach(({ state }, index) => {
|
|
2848
|
+
const action = actions[index] || `${devtools.prefix}setState`;
|
|
2849
|
+
if (index === 0) {
|
|
2850
|
+
devtools.init(state);
|
|
2851
|
+
} else {
|
|
2852
|
+
savedSetState(state);
|
|
2853
|
+
devtools.send(action, api.getState());
|
|
2854
|
+
}
|
|
2855
|
+
});
|
|
2856
|
+
}
|
|
2857
|
+
};
|
|
2858
|
+
}
|
|
2859
|
+
};
|